qutim-0.2.0/0000755000175000017500000000000011273101416014310 5ustar euroelessareuroelessarqutim-0.2.0/cmake/0000755000175000017500000000000011273100754015374 5ustar euroelessareuroelessarqutim-0.2.0/cmake/cmake_uninstall.cmake.in0000644000175000017500000000165611240506443022163 0ustar euroelessareuroelessarIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) qutim-0.2.0/cmake/FindQutIM.cmake0000644000175000017500000000353311236355476020216 0ustar euroelessareuroelessar# - Try to find qutIM development headers # Once done this will define # # QUTIM_FOUND - system has qutIM headers # QUTIM_INCLUDE_DIR - the qutIM include directory # # Copyright (c) 2009, Ruslan Nigmatullin, if(QUTIM_INCLUDE_DIR) # Already in cache, be silent set(QUTIM_FIND_QUIETLY TRUE) endif(QUTIM_INCLUDE_DIR) if(NOT QUTIM_DO_NOT_FIND ) find_path( QUTIM_INCLUDE_DIRS qutim/protocolinterface.h ../../include ) if( QUTIM_INCLUDE_DIRS ) if(NOT QUTIM_FIND_QUIETLY ) message( STATUS "Found qutIM headers: ${QUTIM_INCLUDE_DIRS}/qutim" ) endif(NOT QUTIM_FIND_QUIETLY ) else( QUTIM_INCLUDE_DIRS ) if( QUTIM_FIND_REQUIRED ) message( FATAL_ERROR "Could not find qutIM development headers" ) else( QUTIM_FIND_REQUIRED ) message( STATUS "Could not find qutIM development headers" ) endif( QUTIM_FIND_REQUIRED ) endif( QUTIM_INCLUDE_DIRS ) endif(NOT QUTIM_DO_NOT_FIND ) # Thanks to KDE project macro( qutim_add_ui_files _sources ) foreach( _current_FILE ${ARGN} ) get_filename_component( _tmp_FILE ${_current_FILE} ABSOLUTE ) get_filename_component( _basename ${_tmp_FILE} NAME_WE ) set( _header ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.h ) # we need to run uic and replace some things in the generated file # this is done by executing the cmake script qutruic.cmake add_custom_command( OUTPUT ${_header} COMMAND ${CMAKE_COMMAND} ARGS -DQUTIM_UIC_EXECUTABLE:FILEPATH=${QT_UIC_EXECUTABLE} -DQUTIM_UIC_FILE:FILEPATH=${_tmp_FILE} -DQUTIM_UIC_H_FILE:FILEPATH=${_header} -DQUTIM_UIC_BASENAME:STRING=${_basename} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/qutimuic.cmake MAIN_DEPENDENCY ${_tmp_FILE} ) list( APPEND ${_sources} ${_header} ) endforeach (_current_FILE) endmacro( qutim_add_ui_files ) qutim-0.2.0/cmake/MacroEnsureVersion.cmake0000644000175000017500000001173511236355476022212 0ustar euroelessareuroelessar# This file defines the following macros for developers to use in ensuring # that installed software is of the right version: # # MACRO_ENSURE_VERSION - test that a version number is greater than # or equal to some minimum # MACRO_ENSURE_VERSION_RANGE - test that a version number is greater than # or equal to some minimum and less than some # maximum # MACRO_ENSURE_VERSION2 - deprecated, do not use in new code # # MACRO_ENSURE_VERSION # This macro compares version numbers of the form "x.y.z" or "x.y" # MACRO_ENSURE_VERSION( FOO_MIN_VERSION FOO_VERSION_FOUND FOO_VERSION_OK) # will set FOO_VERSION_OK to true if FOO_VERSION_FOUND >= FOO_MIN_VERSION # Leading and trailing text is ok, e.g. # MACRO_ENSURE_VERSION( "2.5.31" "flex 2.5.4a" VERSION_OK) # which means 2.5.31 is required and "flex 2.5.4a" is what was found on the system # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # MACRO_ENSURE_VERSION_RANGE # This macro ensures that a version number of the form # "x.y.z" or "x.y" falls within a range defined by # min_version <= found_version < max_version. # If this expression holds, FOO_VERSION_OK will be set TRUE # # Example: MACRO_ENSURE_VERSION_RANGE3( "0.1.0" ${FOOCODE_VERSION} "0.7.0" FOO_VERSION_OK ) # # This macro will break silently if any of x,y,z are greater than 100. # # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # NORMALIZE_VERSION # Helper macro to convert version numbers of the form "x.y.z" # to an integer equal to 10^4 * x + 10^2 * y + z # # This macro will break silently if any of x,y,z are greater than 100. # # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # CHECK_RANGE_INCLUSIVE_LOWER # Helper macro to check whether x <= y < z # # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. MACRO(NORMALIZE_VERSION _requested_version _normalized_version) STRING(REGEX MATCH "[^0-9]*[0-9]+\\.[0-9]+\\.[0-9]+.*" _threePartMatch "${_requested_version}") if (_threePartMatch) # parse the parts of the version string STRING(REGEX REPLACE "[^0-9]*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" _major_vers "${_requested_version}") STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" _minor_vers "${_requested_version}") STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" _patch_vers "${_requested_version}") else (_threePartMatch) STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+" "\\1" _major_vers "${_requested_version}") STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)" "\\1" _minor_vers "${_requested_version}") set(_patch_vers "0") endif (_threePartMatch) # compute an overall version number which can be compared at once MATH(EXPR ${_normalized_version} "${_major_vers}*10000 + ${_minor_vers}*100 + ${_patch_vers}") ENDMACRO(NORMALIZE_VERSION) MACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER _lower_limit _value _upper_limit _ok) if (${_value} LESS ${_lower_limit}) set( ${_ok} FALSE ) elseif (${_value} EQUAL ${_lower_limit}) set( ${_ok} TRUE ) elseif (${_value} EQUAL ${_upper_limit}) set( ${_ok} FALSE ) elseif (${_value} GREATER ${_upper_limit}) set( ${_ok} FALSE ) else (${_value} LESS ${_lower_limit}) set( ${_ok} TRUE ) endif (${_value} LESS ${_lower_limit}) ENDMACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER) MACRO(MACRO_ENSURE_VERSION requested_version found_version var_too_old) NORMALIZE_VERSION( ${requested_version} req_vers_num ) NORMALIZE_VERSION( ${found_version} found_vers_num ) if (found_vers_num LESS req_vers_num) set( ${var_too_old} FALSE ) else (found_vers_num LESS req_vers_num) set( ${var_too_old} TRUE ) endif (found_vers_num LESS req_vers_num) ENDMACRO(MACRO_ENSURE_VERSION) MACRO(MACRO_ENSURE_VERSION2 requested_version2 found_version2 var_too_old2) MACRO_ENSURE_VERSION( ${requested_version2} ${found_version2} ${var_too_old2}) ENDMACRO(MACRO_ENSURE_VERSION2) MACRO(MACRO_ENSURE_VERSION_RANGE min_version found_version max_version var_ok) NORMALIZE_VERSION( ${min_version} req_vers_num ) NORMALIZE_VERSION( ${found_version} found_vers_num ) NORMALIZE_VERSION( ${max_version} max_vers_num ) MACRO_CHECK_RANGE_INCLUSIVE_LOWER( ${req_vers_num} ${found_vers_num} ${max_vers_num} ${var_ok}) ENDMACRO(MACRO_ENSURE_VERSION_RANGE) qutim-0.2.0/cmake/qutimuic.cmake0000644000175000017500000000075611236355476020262 0ustar euroelessareuroelessar# Copyright (c) 2009, Ruslan Nigmatullin, EXECUTE_PROCESS(COMMAND ${QUTIM_UIC_EXECUTABLE} -tr qtr ${QUTIM_UIC_FILE} OUTPUT_VARIABLE _uic_CONTENTS ERROR_QUIET ) set(QUTIM_UIC_CPP_FILE ${QUTIM_UIC_H_FILE}) STRING(REGEX REPLACE "#ifndef " "#ifndef UI_" _uic_CONTENTS "${_uic_CONTENTS}") STRING(REGEX REPLACE "#define " "#define UI_" _uic_CONTENTS "${_uic_CONTENTS}") FILE(WRITE ${QUTIM_UIC_CPP_FILE} "#include \n\n${_uic_CONTENTS}\n") qutim-0.2.0/cmake/FindPhonon.cmake0000644000175000017500000000467211236355476020465 0ustar euroelessareuroelessar# Find libphonon # Once done this will define # # PHONON_FOUND - system has Phonon Library # PHONON_INCLUDES - the Phonon include directory # PHONON_LIBS - link these to use Phonon # Copyright (c) 2008, Matthias Kretz # Copyright (c) 2008, Voker57 # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if(PHONON_FOUND) # Already found, nothing more to do else(PHONON_FOUND) if(PHONON_INCLUDE_DIR AND PHONON_LIBRARY) set(PHONON_FIND_QUIETLY TRUE) endif(PHONON_INCLUDE_DIR AND PHONON_LIBRARY) # As discussed on kde-buildsystem: first look at CMAKE_PREFIX_PATH, then at the suggested PATHS (kde4 install dir) find_library(PHONON_LIBRARY NAMES phonon PATHS ${KDE4_LIB_INSTALL_DIR} /usr/lib/kde4/lib ${QT_LIBRARY_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) # then at the default system locations (CMAKE_SYSTEM_PREFIX_PATH, i.e. /usr etc.) find_library(PHONON_LIBRARY NAMES phonon) find_path(PHONON_INCLUDE_DIR NAMES phonon/phonon_export.h PATHS ${KDE4_INCLUDE_INSTALL_DIR} ${QT_INCLUDE_DIR} ${INCLUDE_INSTALL_DIR} /usr/lib/kde4/include NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) find_path(PHONON_INCLUDE_DIR NAMES phonon/phonon_export.h) if(PHONON_INCLUDE_DIR AND PHONON_LIBRARY) set(PHONON_LIBS ${phonon_LIB_DEPENDS} ${PHONON_LIBRARY}) set(PHONON_INCLUDES ${PHONON_INCLUDE_DIR}/KDE ${PHONON_INCLUDE_DIR}) set(PHONON_FOUND TRUE) else(PHONON_INCLUDE_DIR AND PHONON_LIBRARY) set(PHONON_FOUND FALSE) endif(PHONON_INCLUDE_DIR AND PHONON_LIBRARY) if(PHONON_FOUND) if(NOT PHONON_FIND_QUIETLY) message(STATUS "Found Phonon: ${PHONON_LIBRARY}") message(STATUS "Found Phonon Includes: ${PHONON_INCLUDES}") endif(NOT PHONON_FIND_QUIETLY) else(PHONON_FOUND) if(Phonon_FIND_REQUIRED) if(NOT PHONON_INCLUDE_DIR) message(STATUS "Phonon includes NOT found!") endif(NOT PHONON_INCLUDE_DIR) if(NOT PHONON_LIBRARY) message(STATUS "Phonon library NOT found!") endif(NOT PHONON_LIBRARY) message(FATAL_ERROR "Phonon library or includes NOT found!") else(Phonon_FIND_REQUIRED) message(STATUS "Unable to find Phonon") endif(Phonon_FIND_REQUIRED) endif(PHONON_FOUND) mark_as_advanced(PHONON_INCLUDE_DIR PHONON_LIBRARY PHONON_INCLUDES) endif(PHONON_FOUND) qutim-0.2.0/share/0000755000175000017500000000000011273100754015416 5ustar euroelessareuroelessarqutim-0.2.0/share/qutim.desktop0000644000175000017500000000065511271115625020157 0ustar euroelessareuroelessar[Desktop Entry] Encoding=UTF-8 Name=qutIM Name[ru]=qutIM GenericName=Instant Messenger GenericName[ru]=Клиент сервисов мгновенных сообщений Comment=Communicate over IM Comment[ru]=Общение через сеть мгновенных сообщений Exec=qutim Icon=qutim StartupNotify=true Terminal=false Type=Application Categories=Network;InstantMessaging;Qt X-DBUS-ServiceName=org.qutim qutim-0.2.0/src/0000755000175000017500000000000011273100754015103 5ustar euroelessareuroelessarqutim-0.2.0/src/abstractlayer.cpp0000644000175000017500000001565711236355476020501 0ustar euroelessareuroelessar/* AbstractLayer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "abstractlayer.h" #include "profilelogindialog.h" #include "addaccountwizard.h" #include "qutimsettings.h" #include "qutim.h" #include "iconmanager.h" //#include "abstracthistorylayer.h" #include "globalsettings/abstractglobalsettings.h" AbstractLayer::Data *AbstractLayer::d = new AbstractLayer::Data(); AbstractLayer::AbstractLayer() { } AbstractLayer::~AbstractLayer() { } AbstractLayer &AbstractLayer::instance() { return *reinterpret_cast( &SystemsCity::instance() ); } void AbstractLayer::setPointers(qutIM *parent) { d->parent = parent; d->plugin_system = &PluginSystem::instance(); setPluginSystem( d->plugin_system ); } bool AbstractLayer::showLoginDialog() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); if ( !settings.value("general/showstart", false).toBool() || settings.value("general/switch", false).toBool()) { settings.setValue("general/switch", false); ProfileLoginDialog login_dialog; if ( login_dialog.exec() ) { d->current_profile = login_dialog.getProfileName(); d->is_new_profile = login_dialog.isNewProfile(); return true; } return false; } else { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QStringList profiles = settings.value("profiles/list").toStringList(); int profile_index = settings.value("profiles/last", 0).toInt(); if(profile_index >= profiles.size() || profile_index < 0) { settings.setValue("general/switch", true); return showLoginDialog(); } d->current_profile = profiles.at(profile_index); return true; } } void AbstractLayer::loadCurrentProfile() { ::IconManager::instance().loadProfile(d->current_profile); d->plugin_system->loadProfile(d->current_profile); notification()->userMessage(TreeModelItem(), "", NotifyStartup); AbstractGlobalSettings::instance().setProfileName(d->current_profile); } void AbstractLayer::createNewAccount() { AddAccountWizard wizard; wizard.addProtocolsToWizardList(d->plugin_system->getPluginsByType("protocol")); if ( wizard.exec() ) { QString protocol_name = wizard.getChosenProtocol(); if ( !protocol_name.isEmpty() ) { d->plugin_system->saveLoginDataByName(protocol_name); d->plugin_system->removeLoginWidgetByName(protocol_name); } updateStausMenusInTrayMenu(); } else { QString protocol_name = wizard.getChosenProtocol(); if ( !protocol_name.isEmpty() ) { d->plugin_system->removeLoginWidgetByName(protocol_name); } } } void AbstractLayer::openSettingsDialog() { qutimSettings *settingsDialog = new qutimSettings(d->current_profile); // settingsDialog->setIcqList(&icqList); QObject::connect ( settingsDialog, SIGNAL(destroyed()), d->parent, SLOT(destroySettings()) ); QObject::connect(d->parent, SIGNAL(updateTranslation()), settingsDialog, SLOT(onUpdateTranslation())); // settingsDialog->loadAllSettings(); //load all settings to "Settings" window settingsDialog->applyDisable(); //disable "Settings" window's Apply button // rellocateSettingsDialog(settingsDialog); settingsDialog->show(); settingsDialog->setAttribute(Qt::WA_QuitOnClose, false); //don't close app on "Settings" exit settingsDialog->setAttribute(Qt::WA_DeleteOnClose, true); } void AbstractLayer::initializePointers(QTreeView *contact_list_view, QHBoxLayout *account_button_layout, QMenu *tray_menu, QAction *action_before) { Q_UNUSED(account_button_layout); Q_UNUSED(contact_list_view); // d->contact_list_management.setTreeView(contact_list_view); d->plugin_system->addAccountButtonsToLayout(contactList()->getAccountButtonsLayout()); d->tray_menu = tray_menu; d->action_tray_menu_before = action_before; if ( d->is_new_profile ) createNewAccount(); //AbstractChatLayer &acl = AbstractChatLayer::instance(); //acl.restoreData(); d->plugin_system->pointersAreInitialized(); } void AbstractLayer::clearMenuFromStatuses() { if ( d->account_status_menu_list.count() ) { foreach(QMenu *account_status_menu, d->account_status_menu_list) { d->tray_menu->removeAction(account_status_menu->menuAction()); } } } void AbstractLayer::addStatusesToMenu() { clearMenuFromStatuses(); d->account_status_menu_list = d->plugin_system->addStatusMenuToTrayMenu(); if ( d->account_status_menu_list.count() ) { foreach(QMenu *account_status_menu, d->account_status_menu_list) { if ( d->action_tray_menu_before && account_status_menu ) d->tray_menu->insertMenu(d->action_tray_menu_before, account_status_menu); } } } void AbstractLayer::reloadGeneralSettings() { d->parent->reloadGeneralSettings(); updateTrayIcon(); } void AbstractLayer::addAccountMenusToTrayMenu(bool add) { if ( add ) { addStatusesToMenu(); } else { clearMenuFromStatuses(); } d->show_account_menus = add; } void AbstractLayer::updateTrayIcon() { QList status_list = d->plugin_system->getAccountsStatusesList(); bool account_founded = false; foreach(AccountStructure account_status, status_list) { if ( d->current_account_icon_name == ( account_status.protocol_name + "." + account_status.account_name ) ) { account_founded = true; d->parent->updateTrayIcon(account_status.protocol_icon); } } if ( !account_founded ) { if ( status_list.count() > 0 ) { d->parent->updateTrayIcon(status_list.at(0).protocol_icon); } else { d->parent->updateTrayIcon(Icon("qutim")); } } } void AbstractLayer::updateStausMenusInTrayMenu() { d->account_status_menu_list.clear(); addAccountMenusToTrayMenu(d->show_account_menus); } void AbstractLayer::setAutoAway() { d->plugin_system->setAutoAway(); } void AbstractLayer::setStatusAfterAutoAway() { d->plugin_system->setStatusAfterAutoAway(); } void AbstractLayer::animateTrayNewMessage() { d->parent->animateNewMessageInTray(); } void AbstractLayer::stopTrayNewMessageAnimation() { d->parent->stopNewMessageAnimation(); } qutIM *AbstractLayer::getParent() { return d->parent; } void AbstractLayer::showBalloon(const QString &title, const QString &message, int time) { d->parent->showBallon(title, message, time); } void AbstractLayer::reloadStyleLanguage() { d->parent->reloadStyleLanguage(); } void AbstractLayer::addActionToMainMenu(QAction *action) { d->parent->addActionToList(action); } qutim-0.2.0/src/logindialog.h0000644000175000017500000000367111236355476017567 0ustar euroelessareuroelessar/* loginDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 LOGINDIALOG_H #define LOGINDIALOG_H #include #include #include #include #include #include #include #include "iconmanager.h" #include "ui_logindialog.h" const unsigned char crypter[] = {0x10, 0x67, 0x56, 0x78, 0x85, 0x14, 0x87, 0x11, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45 }; class loginDialog : public QDialog { Q_OBJECT public: loginDialog(QWidget *parent = 0); ~loginDialog(); void loadSettings(); void loadAccounts(); void saveSettings(); void saveAccounts(); void savePersonalSettings(const QString &); void loadPersonalSettings(const QString &); void setRunType(bool type) { notStart = type; } private slots: void signInEnable(const QString &); void accountChanged(const QString &account) { loadPersonalSettings(account); } void accountEdit(const QString &); void on_deleteButton_clicked(); void on_saveBox_stateChanged(int); signals: void addingAccount(const QString &); void removingAccount( const QString &); private: QPoint desktopCenter(); void deleteCurrentAccount(const QString&); void removeAccountDir(const QString &); Ui::loginDialogClass ui; bool notStart; }; #endif // LOGINDIALOG_H qutim-0.2.0/src/profilelogindialog.h0000644000175000017500000000361411236355476021145 0ustar euroelessareuroelessar/* ProfileLoginDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 PROFILELOGINDIALOG_H #define PROFILELOGINDIALOG_H #include #include #include #include #include #include "ui_profilelogindialog.h" #include "pluginsystem.h" class ProfileLoginDialog : public QDialog { Q_OBJECT public: ProfileLoginDialog(QWidget *parent = 0); ~ProfileLoginDialog(); bool isNewProfile() const { return m_new_registered_profile; } QString getProfileName() const { return m_current_profile; } private slots: void on_passwordEdit_textChanged(const QString &) { enableOrDisableSignIn(); } void on_nameComboBox_editTextChanged(const QString &); void on_signButton_clicked(); void on_deleteButton_clicked(); private: bool checkPassword(); void saveData(); void loadData(); void saveProfileSettings(const QString &); void loadProfileSettings(const QString &); QPoint desktopCenter(); void enableOrDisableSignIn(); void removeProfile(const QString &); void removeProfileDir(const QString &); Ui::ProfileLoginDialogClass ui; bool m_new_registered_profile; QString m_current_profile; quint16 m_has_new_password; quint16 m_has_loged_in; }; #endif // PROFILELOGINDIALOG_H qutim-0.2.0/src/abstractcontextlayer.h0000644000175000017500000000426211251517704021530 0ustar euroelessareuroelessar/* AbstractContextLayer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ABSTRACTCONTEXTLAYER_H_ #define ABSTRACTCONTEXTLAYER_H_ #include "pluginsystem.h" class AbstractContextLayer : public QObject, public EventHandler { Q_OBJECT public: static AbstractContextLayer &instance(); void itemContextMenu(const TreeModelItem &item, const QPoint &menu_point); void conferenceItemContextMenu(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QPoint &menu_point); void registerContactMenuAction(QAction *plugin_action); void createActions(); void processEvent(Event &event); private slots: void openChatWindowAction(); void openHistoryAction(); void openInformationAction(); void openConferenceChatWindowAction(); // void openConferenceHistoryAction(); void openConferenceInformationAction(); private: AbstractContextLayer(); virtual ~AbstractContextLayer(); QPointer m_open_chat_action; QPointer m_open_hisory_action; QPointer m_open_info_action; QPointer m_open_conference_chat_action; // QPointer m_open_conference_hisory_action; QPointer m_open_conference_info_action; QList > m_actions_list; QList > m_conference_actions_list; TreeModelItem m_current_item; QString m_current_protocol; QString m_current_conference; QString m_current_account; QString m_current_nickname; quint16 m_contact_menu; quint16 m_conference_menu; }; #endif /*ABSTRACTCONTEXTLAYER_H_*/ qutim-0.2.0/src/aboutinfo.h0000644000175000017500000000205011271115625017240 0ustar euroelessareuroelessar/* aboutInfo Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 ABOUTINFO_H #define ABOUTINFO_H #include #include "ui_aboutinfo.h" class aboutInfo : public QWidget { Q_OBJECT public: aboutInfo(QWidget *parent = 0); ~aboutInfo(); public slots: void showLicense(); private: Ui::aboutInfoClass ui; }; #endif // ABOUTINFO_H qutim-0.2.0/src/idle/0000755000175000017500000000000011273100754016020 5ustar euroelessareuroelessarqutim-0.2.0/src/idle/idle_mac.cpp0000644000175000017500000001107511236355476020301 0ustar euroelessareuroelessar/* * idle_mac.cpp - detect desktop idle time * Copyright (C) 2003 Tarkvara Design Inc. * * 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.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "idle.h" #ifdef Q_OS_MAC #include // Why does Apple have to make this so complicated? static OSStatus LoadFrameworkBundle(CFStringRef framework, CFBundleRef *bundlePtr) { OSStatus err; FSRef frameworksFolderRef; CFURLRef baseURL; CFURLRef bundleURL; if ( bundlePtr == nil ) return( -1 ); *bundlePtr = nil; baseURL = nil; bundleURL = nil; err = FSFindFolder(kOnAppropriateDisk, kFrameworksFolderType, true, &frameworksFolderRef); if (err == noErr) { baseURL = CFURLCreateFromFSRef(kCFAllocatorSystemDefault, &frameworksFolderRef); if (baseURL == nil) { err = coreFoundationUnknownErr; } } if (err == noErr) { bundleURL = CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, baseURL, framework, false); if (bundleURL == nil) { err = coreFoundationUnknownErr; } } if (err == noErr) { *bundlePtr = CFBundleCreate(kCFAllocatorSystemDefault, bundleURL); if (*bundlePtr == nil) { err = coreFoundationUnknownErr; } } if (err == noErr) { if ( ! CFBundleLoadExecutable( *bundlePtr ) ) { err = coreFoundationUnknownErr; } } // Clean up. if (err != noErr && *bundlePtr != nil) { CFRelease(*bundlePtr); *bundlePtr = nil; } if (bundleURL != nil) { CFRelease(bundleURL); } if (baseURL != nil) { CFRelease(baseURL); } return err; } class IdlePlatform::Private { public: EventLoopTimerRef mTimerRef; int mSecondsIdle; Private() : mTimerRef(0), mSecondsIdle(0) {} static pascal void IdleTimerAction(EventLoopTimerRef, EventLoopIdleTimerMessage inState, void* inUserData); }; pascal void IdlePlatform::Private::IdleTimerAction(EventLoopTimerRef, EventLoopIdleTimerMessage inState, void* inUserData) { switch (inState) { case kEventLoopIdleTimerStarted: case kEventLoopIdleTimerStopped: // Get invoked with this constant at the start of the idle period, // or whenever user activity cancels the idle. ((IdlePlatform::Private*)inUserData)->mSecondsIdle = 0; break; case kEventLoopIdleTimerIdling: // Called every time the timer fires (i.e. every second). ((IdlePlatform::Private*)inUserData)->mSecondsIdle++; break; } } IdlePlatform::IdlePlatform() { d = new Private(); } IdlePlatform::~IdlePlatform() { RemoveEventLoopTimer(d->mTimerRef); delete d; } // Typedef for the function we're getting back from CFBundleGetFunctionPointerForName. typedef OSStatus (*InstallEventLoopIdleTimerPtr)(EventLoopRef inEventLoop, EventTimerInterval inFireDelay, EventTimerInterval inInterval, EventLoopIdleTimerUPP inTimerProc, void * inTimerData, EventLoopTimerRef * outTimer); bool IdlePlatform::init() { // May already be init'ed. if (d->mTimerRef) { return true; } // According to the docs, InstallEventLoopIdleTimer is new in 10.2. // According to the headers, it has been around since 10.0. // One of them is lying. We'll play it safe and weak-link the function. // Load the "Carbon.framework" bundle. CFBundleRef carbonBundle; if (LoadFrameworkBundle( CFSTR("Carbon.framework"), &carbonBundle ) != noErr) { return false; } // Load the Mach-O function pointers for the routine we will be using. InstallEventLoopIdleTimerPtr myInstallEventLoopIdleTimer = (InstallEventLoopIdleTimerPtr)CFBundleGetFunctionPointerForName(carbonBundle, CFSTR("InstallEventLoopIdleTimer")); if (myInstallEventLoopIdleTimer == 0) { return false; } EventLoopIdleTimerUPP timerUPP = NewEventLoopIdleTimerUPP(Private::IdleTimerAction); if ((*myInstallEventLoopIdleTimer)(GetMainEventLoop(), kEventDurationSecond, kEventDurationSecond, timerUPP, 0, &d->mTimerRef)) { return true; } return false; } int IdlePlatform::secondsIdle() { return d->mSecondsIdle; } #endif qutim-0.2.0/src/idle/idle_x11.cpp0000644000175000017500000000432611236355476020153 0ustar euroelessareuroelessar/* * idle_x11.cpp - detect desktop idle time * Copyright (C) 2003 Justin Karneges * * 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.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "idle.h" #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) #ifndef HAVE_XSS IdlePlatform::IdlePlatform() {} IdlePlatform::~IdlePlatform() {} bool IdlePlatform::init() { return false; } int IdlePlatform::secondsIdle() { return 0; } #else #include #include #include #include #include #include #include static XErrorHandler old_handler = 0; extern "C" int xerrhandler(Display* dpy, XErrorEvent* err) { if(err->error_code == BadDrawable) return 0; return (*old_handler)(dpy, err); } class IdlePlatform::Private { public: Private() {} XScreenSaverInfo *ss_info; }; IdlePlatform::IdlePlatform() { d = new Private; d->ss_info = 0; } IdlePlatform::~IdlePlatform() { if(d->ss_info) XFree(d->ss_info); if(old_handler) { XSetErrorHandler(old_handler); old_handler = 0; } delete d; } bool IdlePlatform::init() { if(d->ss_info) return true; old_handler = XSetErrorHandler(xerrhandler); int event_base, error_base; if(XScreenSaverQueryExtension(QX11Info::display(), &event_base, &error_base)) { d->ss_info = XScreenSaverAllocInfo(); return true; } return false; } int IdlePlatform::secondsIdle() { if(!d->ss_info) return 0; if(!XScreenSaverQueryInfo(QX11Info::display(), QX11Info::appRootWindow(), d->ss_info)) return 0; return d->ss_info->idle / 1000; } #endif #endif qutim-0.2.0/src/idle/idle.cpp0000644000175000017500000000550011236355476017455 0ustar euroelessareuroelessar/* * idle.cpp - detect desktop idle time * Copyright (C) 2003 Justin Karneges * * 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.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "idle.h" #include #include #include static IdlePlatform *platform = 0; static int platform_ref = 0; Idle::Idle() { d = new Private; d->active = false; d->idleTime = 0; // try to use platform idle if(!platform) { IdlePlatform *p = new IdlePlatform; if(p->init()) platform = p; else delete p; } if(platform) ++platform_ref; connect(&d->checkTimer, SIGNAL(timeout()), SLOT(doCheck())); } Idle::~Idle() { if(platform) { --platform_ref; if(platform_ref == 0) { delete platform; platform = 0; } } delete d; } bool Idle::isActive() const { return d->active; } bool Idle::usingPlatform() const { return (platform ? true: false); } void Idle::start() { d->startTime = QDateTime::currentDateTime(); if(!platform) { // generic idle d->lastMousePos = QCursor::pos(); d->idleSince = QDateTime::currentDateTime(); } // poll every second (use a lower value if you need more accuracy) d->checkTimer.start(1000); } void Idle::stop() { d->checkTimer.stop(); } int Idle::secondsIdle() { int i; if (platform) i = platform->secondsIdle(); else { QPoint curMousePos = QCursor::pos(); QDateTime curDateTime = QDateTime::currentDateTime(); if(d->lastMousePos != curMousePos) { d->lastMousePos = curMousePos; d->idleSince = curDateTime; } i = d->idleSince.secsTo(curDateTime); } // set 'beginIdle' to the beginning of the idle time (by backtracking 'i' seconds from now) QDateTime beginIdle = QDateTime::currentDateTime().addSecs(-i); // set 't' to hold the number of seconds between 'beginIdle' and 'startTime' int t = beginIdle.secsTo(d->startTime); // beginIdle later than (or equal to) startTime? if(t <= 0) { // scoot ourselves up to the new idle start d->startTime = beginIdle; } // beginIdle earlier than startTime? else if(t > 0) { // do nothing } // how long have we been idle? int idleTime = d->startTime.secsTo(QDateTime::currentDateTime()); return idleTime; } void Idle::doCheck() { secondsIdle(secondsIdle()); } qutim-0.2.0/src/idle/idle.h0000644000175000017500000000301611236355476017122 0ustar euroelessareuroelessar/* * idle.h - detect desktop idle time * Copyright (C) 2003 Justin Karneges * * 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.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef IDLE_H #define IDLE_H #include #include #include #include class IdlePlatform; class Idle : public QObject { Q_OBJECT public: Idle(); ~Idle(); bool isActive() const; bool usingPlatform() const; void start(); void stop(); int secondsIdle(); signals: void secondsIdle(int); private slots: void doCheck(); private: class Private; Private *d; }; class IdlePlatform { public: IdlePlatform(); ~IdlePlatform(); bool init(); int secondsIdle(); private: class Private; Private *d; }; class Idle::Private { public: Private() {} QPoint lastMousePos; QDateTime idleSince; bool active; int idleTime; QDateTime startTime; QTimer checkTimer; }; #endif qutim-0.2.0/src/idle/idle_win.cpp0000644000175000017500000000445411236355476020341 0ustar euroelessareuroelessar/* * idle_win.cpp - detect desktop idle time * Copyright (C) 2003 Justin Karneges * * 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.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "idle.h" #ifdef Q_OS_WIN32 #include #include #ifndef tagLASTINPUTINFO typedef struct __tagLASTINPUTINFO { UINT cbSize; DWORD dwTime; } __LASTINPUTINFO, *__PLASTINPUTINFO; #endif class IdlePlatform::Private { public: Private() { GetLastInputInfo = NULL; lib = 0; } BOOL (__stdcall * GetLastInputInfo)(__PLASTINPUTINFO); DWORD (__stdcall * IdleUIGetLastInputTime)(void); QLibrary *lib; }; IdlePlatform::IdlePlatform() { d = new Private; } IdlePlatform::~IdlePlatform() { delete d->lib; delete d; } bool IdlePlatform::init() { if(d->lib) return true; void *p; // try to find the built-in Windows 2000 function d->lib = new QLibrary("user32"); if(d->lib->load() && (p = d->lib->resolve("GetLastInputInfo"))) { d->GetLastInputInfo = (BOOL (__stdcall *)(__PLASTINPUTINFO))p; return true; } else { delete d->lib; d->lib = 0; } // fall back on idleui d->lib = new QLibrary("idleui"); if(d->lib->load() && (p = d->lib->resolve("IdleUIGetLastInputTime"))) { d->IdleUIGetLastInputTime = (DWORD (__stdcall *)(void))p; return true; } else { delete d->lib; d->lib = 0; } return false; } int IdlePlatform::secondsIdle() { int i; if(d->GetLastInputInfo) { __LASTINPUTINFO li; li.cbSize = sizeof(__LASTINPUTINFO); bool ok = d->GetLastInputInfo(&li); if(!ok) return 0; i = li.dwTime; } else if (d->IdleUIGetLastInputTime) { i = d->IdleUIGetLastInputTime(); } else return 0; return (GetTickCount() - i) / 1000; } #endif qutim-0.2.0/src/systeminfo.h0000644000175000017500000000273411236355476017476 0ustar euroelessareuroelessar/***************************************************************************** System Info Copyright (c) 2007-2008 by Remko Tronçon 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 SYSTEMINFO_H #define SYSTEMINFO_H #include class SystemInfo { public: static SystemInfo &instance(); const QString& os() const { return m_os_str; } int timezoneOffset() const { return m_timezone_offset; } const QString& timezoneString() const { return m_timezone_str; } void getSystemInfo(QString &os, QString &timezone, int &timezone_offset); inline void getSystemInfo(QString &name, QString &version) { name = m_name; version = m_version; } private: SystemInfo(); int m_timezone_offset; QString m_timezone_str; QString m_os_str; QString m_name; QString m_version; }; #endif qutim-0.2.0/src/console.ui0000644000175000017500000000253711251361263017113 0ustar euroelessareuroelessar Console 0 0 400 300 Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> qutim-0.2.0/src/iconmanager.h0000644000175000017500000000741611236355476017563 0ustar euroelessareuroelessar/* iconManager Copyright (c) 2008 by Alexey Pereslavtsev Nigmatullin Ruslan This file is a part of qutIM project. You can find more information at http://qutim.org *************************************************************************** * * * 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 ICONMANAGER_H #define ICONMANAGER_H #include "include/qutim/iconmanagerinterface.h" #include #include #include #include using namespace qutim_sdk_0_2; /*! * Icon manager class. * If you use icons, then you should use this class to get path to your icon. * IconManager knows about some kinds of icons. */ class IconManager : public qutim_sdk_0_2::IconManagerInterface { IconManager(); virtual ~IconManager() {} public: typedef QPair Icon; typedef QHash QStringIconHash; struct Icons { inline Icons() : use_default(false) {} QHash icons; bool use_default; QStringIconHash standart; QString path; QString qrc_path; }; //! The constructor sets all path to internal. //! Call instance of IconManager static IconManager &instance(); //! This function returns full path to some system icon. //! \param Short name of icon (can be without extension) //! \example ui.deleteButton->setIcon (QIcon (iconManager->getSystemIconName("delete_user"))); inline QString getIconFileName( const QString &icon_name ) { return getIconPath( icon_name, IconInfo::System ); } //! This function returns some system icon //! \param Short name of icon (can be without extension) //! \example ui.deleteButton->setIcon (iconManager->getSystemIcon("delete_user")); inline QIcon getIcon( const QString &icon_name ) { return getIcon( icon_name, IconInfo::System ); } inline QString getStatusIconFileName( const QString& icon_name, const QString &default_path = QString() ) { return getIconPath( icon_name, IconInfo::Status, default_path ); } inline QIcon getStatusIcon( const QString &icon_name, const QString &default_path = QString() ) { return getIcon( icon_name, IconInfo::Status, default_path ); } void loadProfile( const QString & profile_name ); QIcon getIcon( const QString &name, IconInfo::Type category, const QString &subtype = QString() ) const; QString getIconPath( const QString &name, IconInfo::Type category, const QString &subtype = QString() ) const; bool setIcon( const IconInfo &icon, const QString &path ); bool addPack( const QString &name, const IconInfoList &pack ); private: const Icon *getIconInfo( const QString &name, IconInfo::Type category, const QString &subtype ); bool tryAddIcon( const QString &name, IconInfo::Type category, const QString &subtype, bool qrc = false ); bool setStatusIconPackage( Icons &icons ); void loadSettings(); QString m_profile_name; QList m_icons; }; namespace qutim_sdk_0_2 { class Icon : public QIcon { public: inline Icon( const QString &name, IconInfo::Type category, const QString &subtype = QString() ) : QIcon(IconManager::instance().getIcon(name,category,subtype)) {} inline Icon( const QString &name, const QString &subtype = QString() ) : QIcon(IconManager::instance().getIcon(name,IconInfo::System,subtype)) {} inline Icon( const QIcon &icon ) : QIcon(icon) {} }; } #endif //ICONMANAGER_H qutim-0.2.0/src/pluginsettings.ui0000644000175000017500000000610011251526352020520 0ustar euroelessareuroelessar PluginSettingsClass 0 0 640 480 Configure plugins - qutIM 4 0 0 160 0 160 16777215 0 true 1 true 0 0 Qt::NoFocus -1 Qt::Horizontal 288 17 80 0 Ok 80 0 Cancel qutim-0.2.0/src/console.h0000644000175000017500000000176511273076304016732 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 Console_H #define Console_H #include #include "ui_console.h" class Console : public QWidget { Q_OBJECT private: Ui::Console ui; public: Console(QWidget *parent=0); void appendMsg(const QString &xml, QtMsgType type); protected: virtual void closeEvent(QCloseEvent *event); }; #endif qutim-0.2.0/src/proxyfactory.h0000644000175000017500000000245411236355476020046 0ustar euroelessareuroelessar/***************************************************************************** ProxyFactory Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) #ifndef PROXYFACTORY_H #define PROXYFACTORY_H #include class ProxyFactory : public QObject, public QNetworkProxyFactory { Q_OBJECT public: ProxyFactory(); virtual ~ProxyFactory(); void loadSettings(); virtual QList queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()); protected: QNetworkProxy m_proxy; }; #endif // PROXYFACTORY_H #endif qutim-0.2.0/src/guisettingswindow.cpp0000644000175000017500000004107011271376712021415 0ustar euroelessareuroelessar/* GuiSetttingsWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include "guisettingswindow.h" #include #include #include #include #include "qutim.h" //#include "abstractchatlayer.h" #include "abstractlayer.h" #include "abstractcontextlayer.h" class Resource: public QResource { public: using QResource::children; using QResource::isFile; using QResource::isDir; Resource() : QResource(){} }; GuiSetttingsWindow::GuiSetttingsWindow(const QString &profile_name, QWidget *parent) : QDialog(parent) , m_profile_name(profile_name) { ui.setupUi(this); setMinimumSize(size()); setAttribute(Qt::WA_QuitOnClose, false); //don't close app on "Settings" exit setAttribute(Qt::WA_DeleteOnClose, true); IconManager &iconManager(IconManager::instance()); ui.okButton->setIcon (iconManager.getIcon("apply" )); ui.applyButton->setIcon (iconManager.getIcon("apply" )); ui.cancelButton->setIcon (iconManager.getIcon("cancel")); PluginSystem::instance().centerizeWidget(this); m_event_notify_reload = PluginSystem::instance().registerEventHandler("Core/Notification/ReloadSettings"); addUiContent(); loadSettings(); connect(ui.emoticonsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.chatComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.webkitComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.popupComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.systemIconComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.statusIconComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.listThemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.languageBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.styleBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.borderComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); connect(ui.soundsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); } GuiSetttingsWindow::~GuiSetttingsWindow() { for(int type = 0;type(type)); if(layer_interface) { layer_interface->removeGuiLayerSettings(); } } } QPoint GuiSetttingsWindow::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void GuiSetttingsWindow::enableApplyButton() { ui.applyButton->setEnabled(true); } void GuiSetttingsWindow::addUiContent() { ui.emoticonsComboBox->addItem("Tango",":/style/emoticons/emoticons.xml"); ui.listThemeComboBox->addItem("qutim",":/style/cl/default.ListQutim"); ui.borderComboBox->addItem("qutim",":/style/border/"); ui.popupComboBox->addItem("qutim0.2",":/style/traytheme"); ui.styleBox->addItem("qutim0.2",":/style/style/qutim.qss"); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QStringList paths = PluginSystem::instance().getSharePaths(); qDebug() << paths; addWebkitThemes(""); foreach(QString path, paths) { QDir dir( path ); QString emoticons_path = dir.filePath( "emoticons" ); QString chat_path = dir.filePath( "chatstyle" ); QString webkit_path = dir.filePath( "webkitstyle" ); QString popup_path = dir.filePath( "traythemes" ); QString status_path = dir.filePath( "statusicons" ); QString system_path = dir.filePath( "systemicons" ); QString contact_list_theme_path = dir.filePath( "clstyles" ); QString languages_path = dir.filePath( "languages" ); QString application_styles_path = dir.filePath( "styles" ); QString border_themes_path =dir.filePath( "borders" ); QString sounds_path = dir.filePath( "sounds" ); addEmoticonThemes(emoticons_path); addListThemes(contact_list_theme_path); addChatThemes(chat_path); addWebkitThemes(webkit_path); addPopupThemes(popup_path); addStatusThemes(status_path); addSystemThemes(system_path); addLanguages(languages_path); addApplicationStyles(application_styles_path); addBorderThemes(border_themes_path); addSoundThemes(sounds_path); } } void GuiSetttingsWindow::addLanguages(const QString &path) { QDir lang_dir(path); QStringList themes(lang_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { QString name = dirName; QLocale locale( name ); QLocale::Country c = locale.country(); QLocale::Language l = locale.language(); if(l != QLocale::C) { name = QLocale::languageToString(l); // if(c != QLocale::AnyCountry) // name.append(" (").append(QLocale::countryToString(c)).append(")"); } ui.languageBox->addItem(name, path + "/" + dirName); } } void GuiSetttingsWindow::addApplicationStyles(const QString &path) { QDir style_path(path); QStringList themes(style_path.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { QDir dir(path + "/" + dirName); QStringList filter; filter << "*.qss"; QStringList file_qss = dir.entryList(filter,QDir::Files); if (file_qss.count()) { ui.styleBox->addItem(dirName, dir.path() + "/" + file_qss.at(0)); } } } void GuiSetttingsWindow::addEmoticonThemes(const QString &path) { QDir emoticonPath(path); QStringList themes(emoticonPath.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { QDir dir(path + "/" + dirName); QStringList filter; filter << "*.xml"; QStringList fileXML = dir.entryList(filter,QDir::Files); if (fileXML.count()) { for(int i = 0; i < fileXML.size(); i++) { QFile file(dir.path() + "/" + fileXML.at(i)); if(!file.open(QIODevice::ReadOnly)) continue; QDomDocument doc; if(!doc.setContent(&file)) continue; QString pack_name = doc.documentElement().attribute("title", dirName); ui.emoticonsComboBox->addItem(pack_name, dir.path() + "/" + fileXML.at(i)); } } } } void GuiSetttingsWindow::addSoundThemes(const QString &path) { QDir soundPath(path); QStringList themes(soundPath.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { QDir dir(path + "/" + dirName); QStringList filter; filter << "*.xml"; QStringList fileXML = dir.entryList(filter,QDir::Files); if (fileXML.count()) { ui.soundsComboBox->addItem(dirName, dir.path() + "/" + fileXML.at(0)); } } } void GuiSetttingsWindow::addListThemes(const QString &path) { QDir list_dir(path); QStringList filters; filters << "*.ListTheme" << "*.ListQutim"; QStringList dirs_with_themes(list_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot));//.entryList(filters, QDir::Dirs | QDir::NoDotAndDotDot | QDir::Files)); foreach(QString dir_with_themes, dirs_with_themes) { QDir dir(path+"/"+dir_with_themes); QStringList themes(dir.entryList(filters, QDir::Dirs | QDir::NoDotAndDotDot | QDir::Files)); foreach(QString dir_name, themes) { ui.listThemeComboBox->addItem(dir_name.left(dir_name.lastIndexOf('.'))+(dir_name.endsWith(".ListTheme")?" (Adium Style)":" (qutIM Style)"), path+"/"+dir_with_themes+"/"+dir_name); } } } void GuiSetttingsWindow::addChatThemes(const QString &path) { QDir chat_dir(path); QStringList themes(chat_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { ui.chatComboBox->addItem(dirName, path + "/" + dirName); } } void GuiSetttingsWindow::addWebkitThemes(const QString &path) { if(path.isEmpty()) { Resource variantDir; variantDir.setFileName("style/webkitstyle/Variants/"); if(!variantDir.isDir()) return; ui.webkitComboBox->clear(); QStringList variantList = variantDir.children(); foreach(QString variantName, variantList) { if(variantName.endsWith(".css")) { QString variantPath = "Variants/"+variantName; variantName = variantName.left(variantName.lastIndexOf(".")); QStringList params; params<<""<addItem("Default (" + variantName + ")", params); } } return; } QDir chat_dir(path); QStringList themes(chat_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { QString theme_path = path + "/" + dirName + "/Contents/Resources/"; QDir variant_dir(theme_path + "/Variants"); QStringList variants(variant_dir.entryList(QDir::Files | QDir::NoDotAndDotDot)); QSettings settings(path + "/" + dirName + "/Contents/Info.plist",PluginSystem::instance().plistFormat()); QString style_name = settings.value("CFBundleName",dirName).toString(); if(settings.value("MessageViewVersion").toInt()<3 && settings.contains("DisplayNameForNoVariant")) { QStringList params; params<addItem(style_name + " (" + settings.value("DisplayNameForNoVariant").toString() + ")", params); } if ( variants.count() ) { foreach(QString variant, variants) { QStringList params; QFileInfo file_info(variant); params<addItem(style_name + " (" + file_info.completeBaseName() + ")", params); } } else if(!settings.contains("DisplayNameForNoVariant")) { QStringList params; params<addItem(style_name, params); } } } void GuiSetttingsWindow::addStatusThemes(const QString &path) { QDir chat_dir(path); QStringList themes(chat_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dir_name, themes) { if(dir_name.indexOf(".")>-1) ui.statusIconComboBox->addItem(dir_name.left(dir_name.lastIndexOf('.')),path+"/"+dir_name); else ui.statusIconComboBox->addItem(dir_name, path+"/"+dir_name); } } void GuiSetttingsWindow::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("gui"); int emoticon_index = ui.emoticonsComboBox->findData(settings.value("emoticons",":/style/emoticons/emoticons.xml").toString()); ui.emoticonsComboBox->setCurrentIndex(emoticon_index > -1 ?emoticon_index:0); int sound_index = ui.soundsComboBox->findData(settings.value("sounds","").toString()); ui.soundsComboBox->setCurrentIndex(sound_index > -1 ?sound_index:0); QString list_theme_path = settings.value("listtheme",":/style/cl/default.ListQutim").toString(); int list_theme_index = ui.listThemeComboBox->findData(list_theme_path); ui.listThemeComboBox->setCurrentIndex(list_theme_index > -1 ? list_theme_index : list_theme_path.isEmpty() ? 0 : 1); int chat_index = ui.chatComboBox->findData(settings.value("chat","").toString()); ui.chatComboBox->setCurrentIndex(chat_index > -1 ?chat_index:0); int popup_index = ui.popupComboBox->findData(settings.value("popup",":/style/traytheme").toString()); ui.popupComboBox->setCurrentIndex(popup_index > -1 ?popup_index:0); int system_index = ui.systemIconComboBox->findData(settings.value("systemicon","").toString()); ui.systemIconComboBox->setCurrentIndex(system_index > -1 ?system_index:0); int status_index = ui.statusIconComboBox->findData(settings.value("statusicon","").toString()); ui.statusIconComboBox->setCurrentIndex(status_index > -1 ?status_index:0); QStringList webkit_param; if(settings.contains("wstyle") && settings.contains("wvariant")) webkit_param << settings.value("wstyle","").toString() << settings.value("wvariant","").toString(); else webkit_param << "" << "Medium"; int webkit_index = ui.webkitComboBox->findData(webkit_param); ui.webkitComboBox->setCurrentIndex(webkit_index > -1 ?webkit_index:0); int lang_index = ui.languageBox->findData(AbstractLayer::instance().getParent()->translationPath()); ui.languageBox->setCurrentIndex(lang_index > -1 ?lang_index:0); #if defined (Q_OS_WIN32) int border_index = ui.borderComboBox->findData(settings.value("borders",":/style/border/").toString()); #else int border_index = ui.borderComboBox->findData(settings.value("borders","").toString()); #endif #if defined(Q_OS_WIN32) int style_index = ui.styleBox->findData(settings.value("style",":/style/style/qutim.qss").toString()); #else int style_index = ui.styleBox->findData(settings.value("style","").toString()); #endif ui.styleBox->setCurrentIndex(style_index > -1 ?style_index:0); ui.borderComboBox->setCurrentIndex(border_index > -1 ?border_index:0); settings.endGroup(); for(int type = 0;type(type)); if(layer_interface) { layer_interface->getGuiSettingsList(); } } } void GuiSetttingsWindow::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("gui"); settings.setValue("emoticons", ui.emoticonsComboBox->itemData(ui.emoticonsComboBox->currentIndex()).toString()); settings.setValue("sounds", ui.soundsComboBox->itemData(ui.soundsComboBox->currentIndex()).toString()); settings.setValue("listtheme", ui.listThemeComboBox->itemData(ui.listThemeComboBox->currentIndex()).toString()); settings.setValue("chat", ui.chatComboBox->itemData(ui.chatComboBox->currentIndex()).toString()); settings.setValue("popup", ui.popupComboBox->itemData(ui.popupComboBox->currentIndex()).toString()); settings.setValue("systemicon", ui.systemIconComboBox->itemData(ui.systemIconComboBox->currentIndex()).toString()); settings.setValue("statusicon", ui.statusIconComboBox->itemData(ui.statusIconComboBox->currentIndex()).toString()); QStringList webkit_param = ui.webkitComboBox->itemData(ui.webkitComboBox->currentIndex()).toStringList(); if ( webkit_param.count() ) { settings.setValue("wstyle", webkit_param.at(0)); settings.setValue("wvariant", webkit_param.at(1)); } else { settings.setValue("wstyle", ""); settings.setValue("wvariant", ""); } settings.setValue("language", ui.languageBox->itemData(ui.languageBox->currentIndex()).toString()); settings.setValue("style", ui.styleBox->itemData(ui.styleBox->currentIndex()).toString()); settings.setValue("borders", ui.borderComboBox->itemData(ui.borderComboBox->currentIndex()).toString()); settings.endGroup(); reloadContent(); for(int type = 0;type(type)); if(layer_interface) { layer_interface->saveGuiSettingsPressed(); } } } void GuiSetttingsWindow::on_applyButton_clicked() { saveSettings(); ui.applyButton->setEnabled(false); } void GuiSetttingsWindow::on_okButton_clicked() { if ( ui.applyButton->isEnabled() ) { saveSettings(); } close(); } void GuiSetttingsWindow::reloadContent() { // AbstractChatLayer &acl = AbstractChatLayer::instance(); // acl.reloadContent(); // AbstractContactList::instance().loadGuiSettings(); AbstractLayer::instance().reloadStyleLanguage(); AbstractContextLayer::instance().createActions(); Event ev(m_event_notify_reload); PluginSystem::instance().sendEvent(ev); } void GuiSetttingsWindow::addPopupThemes(const QString &path) { QDir popup_dir(path); QStringList themes(popup_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { ui.popupComboBox->addItem(dirName, path + "/" + dirName); } } void GuiSetttingsWindow::addSystemThemes(const QString &path) { QDir popup_dir(path); QStringList themes(popup_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, themes) { ui.systemIconComboBox->addItem(dirName, path + "/" + dirName); } } void GuiSetttingsWindow::addBorderThemes(const QString &path) { QDir border_dir(path); QStringList borders(border_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); foreach(QString dirName, borders) { ui.borderComboBox->addItem(dirName, path + "/" + dirName); } } qutim-0.2.0/src/themeengine/0000755000175000017500000000000011273100754017373 5ustar euroelessareuroelessarqutim-0.2.0/src/themeengine/abstractthemeengine.h0000644000175000017500000000226111273076304023564 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 ABSTRACTTHEMEENGINE_H_ #define ABSTRACTTHEMEENGINE_H_ #include #include "qskinobject.h" class AbstractThemeEngine { public: static AbstractThemeEngine &instance(); void setCLBorder(QWidget *cl_widget); void stopSkiningCl(); void loadProfile(const QString &profile_name); void reloadContent(); private: AbstractThemeEngine(); virtual ~AbstractThemeEngine(); QSkinObject *m_border_object; QString m_profile_name; QString m_border_theme_path; }; #endif /*ABSTRACTTHEMEENGINE_H_*/ qutim-0.2.0/src/themeengine/abstractthemeengine.cpp0000644000175000017500000000371211273076304024121 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "abstractthemeengine.h" AbstractThemeEngine::AbstractThemeEngine() { m_border_object = 0; } AbstractThemeEngine::~AbstractThemeEngine() { } AbstractThemeEngine &AbstractThemeEngine::instance() { static AbstractThemeEngine ate; return ate; } void AbstractThemeEngine::setCLBorder(QWidget *cl_widget) { if ( m_border_object ) { if( m_border_object->getWidget() == cl_widget ) return; m_border_object->stopSkinning(); delete m_border_object; m_border_object = 0; } m_border_object = new QSkinObject(cl_widget); m_border_object->loadSkinIni(m_border_theme_path + "/cl_border/"); m_border_object->startSkinning(); } void AbstractThemeEngine::stopSkiningCl() { if ( m_border_object ) { m_border_object->stopSkinning(); delete m_border_object; m_border_object = 0; } } void AbstractThemeEngine::loadProfile(const QString &profile_name) { m_profile_name = profile_name; reloadContent(); } void AbstractThemeEngine::reloadContent() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); #if defined (Q_OS_WIN32) m_border_theme_path = settings.value("gui/borders", ":/style/border/").toString(); #else m_border_theme_path = settings.value("gui/borders", "").toString(); #endif } qutim-0.2.0/src/qutim.cpp0000644000175000017500000006467011236355476016777 0ustar euroelessareuroelessar/* qutim Copyright (c) 2008 by Rustam Chakin Dmitri Arekhta 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 #include #include #include #include #include #include #include "aboutinfo.h" //#include "qutimsettings.h" #include "logindialog.h" #include "qutim.h" #include "abstractlayer.h" //#include "abstractchatlayer.h" #include "guisettingswindow.h" #include "abstractcontextlayer.h" #if defined(Q_OS_WIN32) #include "windows.h" #pragma comment(lib, "user32.lib") #endif #if defined(_MSC_VER) #pragma warning (disable:4138) #endif bool eventEater::eventFilter(QObject *obj, QEvent *event) { if ( event->type() == QEvent::MouseButtonDblClick || event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::MouseMove || event->type() == QEvent::MouseTrackingChange || event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease || event->type() == QEvent::KeyboardLayoutChange) { fChanged = true; } //qWarning() << event->type(); // if(event->type() == QEvent::Resize || event->type() == QEvent::Move) // { // if(obj->objectName()=="qutIMClass") // { // AbstractContactList::instance().signalToDoScreenShot(); // } // } return QObject::eventFilter(obj, event); } // Statics qutIM *qutIM::fInstance = NULL; QMutex qutIM::fInstanceGuard; static QStringList getSystemLanguage() { qDebug() << QLocale::languageToString(QLocale::system().language()) << QLocale::countryToString(QLocale::system().country()); QString name = QLocale::system().name(); if( name.indexOf('_') < 0 ) return QStringList(); QString lang = name.section( '_', 0, 0 ); if( lang.trimmed().isEmpty() ) return QStringList(); qDebug() << (QStringList() << name << name.toLower() << lang); return QStringList() << name << name.toLower() << lang; } static QFileInfoList getTranslationFiles( const QStringList &langs, const QStringList &paths, QString &translation_path ) { QFileInfoList files; QStringList filter = QStringList() << "*.qm"; foreach( const QString &possible, langs ) { foreach( translation_path, paths ) { QDir path = translation_path; files = QDir( path.filePath( "languages/" + possible ) ).entryInfoList( filter ); if( !files.isEmpty() ) { translation_path = translation_path + "/languages/" + possible; return files; } } } translation_path.clear(); return files; } qutIM::qutIM(QObjectList plugins, QObject *parent) : QObject(parent), bShouldRun(true), // fWindowStyle(CLThemeBorder), m_iconManager (IconManager::instance()), m_abstract_layer(AbstractLayer::instance()), // m_contact_list(AbstractContactList::instance()), m_switch_user(false), unreadMessages(false) { // qApp->installTranslator(&applicationTranslator); trayIcon = 0; trayMenu = 0; m_abstract_layer.setPointers(this); PluginSystem::instance().initPlugins(plugins); QStringList possible_langs = getSystemLanguage(); if( !possible_langs.isEmpty() ) { QStringList paths = PluginSystem::instance().getSharePaths(); loadTranslation( getTranslationFiles( possible_langs, paths, m_translation_path ) ); } if ( !m_abstract_layer.showLoginDialog() ) { bShouldRun = false; QApplication::quit(); return; } m_profile_name = m_abstract_layer.getCurrentProfile(); reloadStyleLanguage(); m_abstract_layer.loadCurrentProfile(); qApp->setWindowIcon( Icon("qutim") ); trayIcon = AbstractLayer::Tray(); trayMenu = trayIcon->contextMenu(); // m_abstract_layer->loadCurrentProfile(); quitAction = NULL; autoHide = true; msgIcon = false; m_plugin_settings = 0; // timer = new QTimer(this); // connect(timer, SIGNAL(timeout()), this, SLOT(hide())); // ui.setupUi(this); createActions(); createMainMenu(); // ui.contactListView->setFocusProxy(this); eventObject = new eventEater(this); qApp->installEventFilter(eventObject); letMeQuit = false; // setAttribute(Qt::WA_AlwaysShowToolTips, true); // setFocus(Qt::ActiveWindowFocusReason); // if ( QSystemTrayIcon::isSystemTrayAvailable() ) // { // createTrayIcon(); // connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), // this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason))); // } // else // { // trayIcon = NULL; // trayMenu = NULL; // } // if ( QSystemTrayIcon::isSystemTrayAvailable() ) // trayIcon->show(); // else // trayIcon = NULL; createTrayIcon(); loadMainSettings(); if (!bShouldRun) return; // if (trayIcon) // updateTrayStatus(); // connect(timer, SIGNAL(timeout()), this, SLOT(hide())); connect(QApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(appQuit())); QTimer::singleShot(60000, this, SLOT(checkEventChanging())); // if (trayIcon) // updateTrayToolTip(); aboutWindowOpen = false; connect(&fIdleDetector, SIGNAL(secondsIdle(int)), this, SLOT(onSecondsIdle(int))); // Activate idle detector fIdleDetector.start(); //QMutexLocker locker(&fInstanceGuard); //fInstance = this; loadStyle(); initIcons(); m_abstract_layer.initializePointers(/*ui.contactListView, ui.horizontalLayout,*/0,0, trayMenu, settingsAction); AbstractContextLayer::instance().createActions(); m_abstract_layer.addAccountMenusToTrayMenu(createMenuAccounts); m_abstract_layer.updateTrayIcon(); m_event_qutim_settings = PluginSystem::instance().registerEventHandler("Core/OpenWidget/MainSettings", this); m_event_plugins_settings = PluginSystem::instance().registerEventHandler("Core/OpenWidget/PluginSettings", this); m_event_gui_settings = PluginSystem::instance().registerEventHandler("Core/OpenWidget/GuiSettings", this); m_event_switch_user = PluginSystem::instance().registerEventHandler("Core/OpenWidget/SwitchUser", this); m_event_about = PluginSystem::instance().registerEventHandler("Core/OpenWidget/About", this); } qutIM::~qutIM() { // Stop idle detector fIdleDetector.stop(); } qutIM *qutIM::instance() { QMutexLocker locker(&fInstanceGuard); return fInstance; } void qutIM::createTrayIcon() { // trayMenu = new QMenu(this); QList actions = trayMenu->actions(); if(actions.size()) { QAction *upper = actions[0]; trayMenu->insertAction(upper, settingsAction); trayMenu->insertAction(upper, switchUserAction); trayMenu->insertSeparator(upper); } else { trayMenu->addAction(settingsAction); trayMenu->addAction(switchUserAction); } // trayIcon->setClickedAction(this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason))); // //#if !defined(Q_OS_MAC) // // Mac OS has it's own quit trigger in Dock menu // trayMenu->addSeparator(); // trayMenu->addAction(quitAction); //#endif // //#if defined(Q_OS_WIN32) || defined(Q_OS_MAC) // trayIcon = new ExSysTrayIcon(this); //#else // trayIcon = new QSystemTrayIcon(this); //#endif // // trayIcon->setIcon(QIcon(":/icons/qutim.png")); // // // It's very unlikely for Mac OS X application to have // // tray menu and reactions to the tray action at the same time. // // So we decided to add tray menu to Dock //#if !defined(Q_OS_MAC) // trayIcon->setContextMenu(trayMenu); //#else // qt_mac_set_dock_menu(trayMenu); //#endif } //void qutIM::resizeEvent(QResizeEvent * ) //{ // if (fWindowStyle == CLBorderLessWindow) // { // QRegion visibleRegion(ui.contactListView->geometry().left(), ui.contactListView->geometry().top(), // ui.contactListView->geometry().width(), ui.contactListView->geometry().height()); // setMask(visibleRegion); // } //} // //void qutIM::closeEvent(QCloseEvent *event) //{ // hide(); // // // I dunno why, but it works ok in such way, but accordingly to QT Docs, QEvent::spontaneous() should return true if event generated by system... // if (event->spontaneous()) // event->ignore(); // else // { // appQuit(); // } //} //void qutIM::trayActivated(QSystemTrayIcon::ActivationReason reason) //{ // switch(reason) // { // case QSystemTrayIcon::Trigger: // if (! unreadMessages ) // { // if (this->isVisible()) // this->setVisible(false); // else // { // this->setVisible(true); // this->activateWindow(); // } // } // else // { //// stopNewMessageAnimation(); // AbstractChatLayer &acl = AbstractChatLayer::instance(); // acl.readAllUnreadedMessages(); // } // break; // default: // break; // } //} void qutIM::createActions() { quitAction = new QAction(m_iconManager.getIcon("exit"), tr("&Quit"), this); settingsAction = new QAction(m_iconManager.getIcon("settings"), tr("&Settings..."), this); m_gui_settings_action = new QAction(m_iconManager.getIcon("gui"), tr("&User interface settings..."), this); m_pluginSettingsAction = new QAction(m_iconManager.getIcon("additional"), tr("Plug-in settings..."), this); switchUserAction = new QAction(m_iconManager.getIcon("switch_user"), tr("Switch profile"), this); connect(quitAction , SIGNAL(triggered()), QApplication::instance(), SLOT(quit())); connect(settingsAction , SIGNAL(triggered()), this, SLOT(qutimSettingsMenu())); connect(m_pluginSettingsAction, SIGNAL(triggered()), this, SLOT(qutimPluginSettingsMenu())); connect(switchUserAction , SIGNAL(triggered()), this, SLOT(switchUser())); connect(m_gui_settings_action , SIGNAL(triggered()), this, SLOT(openGuiSettings())); } void qutIM::appQuit() { saveMainSettings(); // save all main settings on exit PluginSystem::instance().aboutToQuit(); // AbstractContactList::instance().saveSettings(); // letMeQuit = true; // QCoreApplication::exit(0); // close(); } void qutIM::saveMainSettings() { // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); // // //window size and position saving // //save if "save size and position" feature is enabled // if ( settings.value("general/savesizpos", false).toBool()) // { // QDesktopWidget desktop; // settings.beginGroup("mainwindow"); // // Save current contact list' screen // settings.setValue("screenNum", desktop.screenNumber(this)); // // Save size // settings.setValue("size", this->size()); // // Save position on the screen // settings.setValue("position", this->pos()); // settings.endGroup(); // } } void qutIM::loadMainSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); // QDesktopWidget desktop; // // //load size and position if "save size and position" feature is enabled // //int numScreens = desktop.numScreens(); // int mainWindowScreen = settings.value("mainwindow/screenNum", desktop.primaryScreen()).toInt(); // // // Check wheather target screen is connected // if (mainWindowScreen > desktop.numScreens()) // { // mainWindowScreen = desktop.primaryScreen(); // settings.setValue("mainwindow/screenNum", QVariant(mainWindowScreen)); // } // // int screenX = desktop.availableGeometry(mainWindowScreen).x(); // int screenY = desktop.availableGeometry(mainWindowScreen).y(); // int screenHeight = desktop.availableGeometry(mainWindowScreen).height(); // // /*for (int i = 0; i < desktop.numScreens(); i++) // { // QRect avGeom = desktop.availableGeometry(i); // QRect scGeom = desktop.screenGeometry(i); // }*/ // // this->move(screenX, screenY); // //this->mapTo(desktop.screen(mainWindowScreen), desktop.screen(mainWindowScreen)->pos()); // //QPoint offs = this->mapFromGlobal(desktop.screen(mainWindowScreen)->pos()); // QPoint offs = mapFromGlobal(pos()); // QPoint moveTo(desktop.availableGeometry(mainWindowScreen).right() - 150, screenY); // this->resize(150, screenHeight); // // if (settings.value("general/savesizpos", true).toBool()) // { // QSize sze = settings.value("mainwindow/size", QSize(0,0)).toSize(); // moveTo = settings.value("mainwindow/position", moveTo).toPoint(); // // if (sze.width() >= sizeHint().width() || sze.height() >= sizeHint().height()) // this->resize(sze); // } // // /*if (moveTo.x() + frameGeometry().width() > desktop.availableGeometry(mainWindowScreen).right()) // moveTo.setX(desktop.availableGeometry(mainWindowScreen).right() - frameGeometry().width() + 1); // if (moveTo.x() < desktop.availableGeometry(mainWindowScreen).left()) // moveTo.setX(desktop.availableGeometry(mainWindowScreen).left()); // if (moveTo.y() + frameGeometry().height() > desktop.availableGeometry(mainWindowScreen).bottom()) // moveTo.setY(desktop.availableGeometry(mainWindowScreen).bottom() - 2*frameGeometry().height() // + height()); // if (moveTo.y() < desktop.availableGeometry(mainWindowScreen).top()) // moveTo.setY(desktop.availableGeometry(mainWindowScreen).top());*/ // // if (frameGeometry().height() > desktop.availableGeometry(mainWindowScreen).bottom()) // { // resize(width(), desktop.availableGeometry(mainWindowScreen).bottom() + height() - frameGeometry().height() + 1); // } // //// moveTo += offs; // // Rellocating contact list' window // #if defined(Q_OS_WIN32) // this->move(moveTo + QPoint(-8,-52)); // #else // this->move(moveTo); // #endif createMenuAccounts = settings.value("general/accountmenu", true).toBool(); autoHide = settings.value("general/autohide",false).toBool(); hideSec = settings.value("general/hidesecs",60).toInt(); // Qt::WindowFlags flags = 0; // // if ( settings.value("general/ontop", false).toBool()) // flags |= Qt::WindowStaysOnTopHint; // else // flags &= ~Qt::WindowStaysOnTopHint; // setWindowFlags(flags); // // setVisible(!settings.value("general/hidestart", false).toBool()); m_abstract_layer.setCurrentAccountIconName(settings.value("general/currentaccount", "").toString()); m_auto_away = settings.value("general/autoaway", true).toBool(); m_auto_away_minutes = settings.value("general/awaymin", 10).toUInt(); // //// if(!settings.value("contactlist/showoffline",true).toBool()) //// { //// ui.showHideButton->setIcon(m_iconManager.getIcon("hideoffline")); //// ui.showHideButton->setChecked(true); //// } //// else //// { //// ui.showHideButton->setIcon(m_iconManager.getIcon("shhideoffline")); //// ui.showHideButton->setChecked(true); //// } //// if(!(settings.value("contactlist/modeltype",0).toInt()&2)) //// ui.showHideGroupsButton->setChecked(true); //// ui.soundOnOffButton->setChecked(!settings.value("enable",true).toBool()); } void qutIM::qutimSettingsMenu() { settingsAction->setDisabled(true); switchUserAction->setDisabled(true); // ui.showHideButton->setEnabled(false); // ui.showHideGroupsButton->setEnabled(false); // ui.soundOnOffButton->setEnabled(false); m_abstract_layer.openSettingsDialog(); } void qutIM::qutimPluginSettingsMenu() { m_plugin_settings = new PluginSettings; connect(m_plugin_settings, SIGNAL(destroyed ( QObject * )), this, SLOT(pluginSettingsDeleted(QObject *))); m_plugin_settings->show(); m_pluginSettingsAction->setEnabled(false); } void qutIM::destroySettings() { settingsAction->setDisabled(false); switchUserAction->setDisabled(false); // ui.showHideButton->setEnabled(true); // ui.showHideGroupsButton->setEnabled(true); // ui.soundOnOffButton->setEnabled(true); } void qutIM::reloadGeneralSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); // // autoHide = settings.value("contactlist/autohide",false).toBool(); // hideSec = settings.value("contactlist/hidesecs",60).toUInt(); bool cr_m_acc = settings.value("general/accountmenu", true).toBool(); if ( cr_m_acc != createMenuAccounts ) { createMenuAccounts = cr_m_acc; m_abstract_layer.addAccountMenusToTrayMenu(createMenuAccounts); } // if ( !autoHide ) // timer->stop(); // bool visible_now = isVisible(); // // Qt::WindowFlags flags = windowFlags(); // if ( settings.value("general/ontop", false).toBool()) // flags |= Qt::WindowStaysOnTopHint; // else // flags &= ~Qt::WindowStaysOnTopHint; // setWindowFlags(flags); // // setVisible(visible_now); m_abstract_layer.setCurrentAccountIconName(settings.value("general/currentaccount", "").toString()); m_auto_away = settings.value("general/autoaway", true).toBool(); m_auto_away_minutes = settings.value("general/awaymin", 10).toUInt(); } void qutIM::switchUser() { if( QMessageBox::question( 0, tr("Switch profile"), tr("Do you really want to switch profile?"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel ) != QMessageBox::Ok ) return; m_switch_user = true; QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); settings.setValue("general/switch", true); QProcess::startDetached(qApp->applicationFilePath()); QCoreApplication::quit(); } void qutIM::updateTrayStatus() { } void qutIM::updateTrayIcon(const QIcon &statusIcon) { if (trayIcon) trayIcon->setIcon(statusIcon); tempIcon = statusIcon; } void qutIM::readMessages() { } //void qutIM::focusOutEvent ( QFocusEvent */*event*/ ) //{ // if ( autoHide ) // { // qDebug()<<"hide after"<start(hideSec * 1000); // } // //} // //void qutIM::focusInEvent(QFocusEvent */*event*/) //{ // timer->stop(); // //} // //void qutIM::keyPressEvent( QKeyEvent *event ) //{ // if (event->key() == Qt::Key_Escape) // hide(); //} void qutIM::checkEventChanging() { if ( eventObject->getChanged() ) { eventObject->setChanged(false); } QTimer::singleShot(60000, this, SLOT(checkEventChanging())); } void qutIM::updateTrayToolTip() { // if (!trayIcon) return; // QString toolTip; // foreach(icqAccount *account, icqList) // { // toolTip.append(tr(" %2
").arg(account->currentIconPath).arg(account->getIcquin())); // } // toolTip.chop(4); // trayIcon->setToolTip(toolTip); } void qutIM::createMainMenu() { mainMenu = new QMenu(); if ( m_plugin_actions.count() > 0) { foreach(QAction *action, m_plugin_actions) { mainMenu->addAction(action); } mainMenu->addSeparator(); } mainMenu->addAction(settingsAction); mainMenu->addAction(m_pluginSettingsAction); mainMenu->addAction(m_gui_settings_action); mainMenu->addAction(switchUserAction); mainMenu->addSeparator(); mainMenu->addAction(quitAction); // ui.menuButton->setMenu(mainMenu); AbstractLayer::ContactList()->setMainMenu(mainMenu); } void qutIM::loadStyle() { // //Disable theme engine for Mac OS X //#if !defined(Q_OS_MAC) // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "mainsettings"); // // currentStyle = settings.value("style/path", ":/qss/default.qss").toString(); // QDir styleDir(currentStyle); // QStringList filters; // filters << "*.qss"; // QStringList styleList = styleDir.entryList(filters); // if ( styleList.count()) // { // QFile file(currentStyle + "/" +styleList.at(0)); // if(file.open(QFile::ReadOnly)) // { // qApp->setStyleSheet(""); // QString styleSheet = QLatin1String(file.readAll()); // qApp->setStyleSheet(styleSheet.replace("%path%", currentStyle)); // file.close(); // } // } else // qApp->setStyleSheet(""); //#endif } void qutIM::on_infoButton_clicked() { if ( !aboutWindowOpen ) { aboutWindowOpen = true; infoWindow = new aboutInfo; connect(infoWindow, SIGNAL(destroyed ( QObject * )), this, SLOT(infoWindowDestroyed(QObject *))); infoWindow->show(); } } void qutIM::infoWindowDestroyed(QObject *) { aboutWindowOpen = false; } void qutIM::loadTranslation(int index) { // qApp->removeTranslator(&applicationTranslator); // switch(index) // { //// case 0: //// applicationTranslator.load(""); //// break; // case 1: // applicationTranslator.load(":/translation/qutim_lt.qm"); // break; // case 2: // applicationTranslator.load(":/translation/qutim_ru.qm"); // break; // case 3: // applicationTranslator.load(":/translation/qutim_ua.qm"); // break; // default: // applicationTranslator.load(""); // } // qApp->installTranslator(&applicationTranslator); // // if (quitAction) // { // if (trayIcon) updateTrayToolTip(); // quitAction->setText(tr("&Quit")); // settingsAction->setText(tr("&Settings...")); // switchUserAction->setText(tr("Switch user")); // } // emit updateTranslation(); } void qutIM::readTranslation() { // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "mainsettings"); // currentTranslation = settings.value("style/tr", 0).toInt(); // loadTranslation(currentTranslation); } //void qutIM::on_showHideButton_clicked() //{ // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); // settings.beginGroup("contactlist"); // bool show = settings.value("showoffline",true).toBool(); // settings.setValue("showoffline",!show); // settings.endGroup(); // AbstractContactList &acl = AbstractContactList::instance(); // if(show) // ui.showHideButton->setIcon(m_iconManager.getIcon("hideoffline")); // else // ui.showHideButton->setIcon(m_iconManager.getIcon("shhideoffline")); // acl.loadSettings(); //} void qutIM::initIcons() { // ui.menuButton ->setIcon(m_iconManager.getIcon("menu" )); // ui.showHideGroupsButton ->setIcon(m_iconManager.getIcon("folder" )); // ui.soundOnOffButton ->setIcon(m_iconManager.getIcon("player_volume" )); // ui.showHideButton->setIcon(m_iconManager.getIcon("shhideoffline")); // ui.infoButton ->setIcon(m_iconManager.getIcon("info" )); } void qutIM::onSecondsIdle(int seconds) { // Autoaway is disabled, do not touch anything if (!m_auto_away) return ; // if activity is detected if (seconds == 0) { m_abstract_layer.setStatusAfterAutoAway(); } // If idle time is bigger than autoaway time if (seconds > static_cast(m_auto_away_minutes) * 60) { m_abstract_layer.setAutoAway(); } } void qutIM::animateNewMessageInTray() { if (trayIcon) { if ( !unreadMessages ) { unreadMessages = true; msgIcon = true; updateMessageIcon(); } } } void qutIM::updateMessageIcon() { // Check wheather we have unread messaged if ( unreadMessages ) { // And tray icon is enabled if (trayIcon) { // We want to make some blink effect, so change one icon with other if ( msgIcon ) trayIcon->setIcon(m_iconManager.getIcon("message")); else trayIcon->setIcon(QIcon()); //trayIcon->setIcon(tempIcon); } msgIcon = !msgIcon; QTimer::singleShot(500,this, SLOT(updateMessageIcon())); } else if (trayIcon) trayIcon->setIcon(tempIcon); } void qutIM::stopNewMessageAnimation() { unreadMessages = false; updateMessageIcon(); } void qutIM::openGuiSettings() { GuiSetttingsWindow *gui_window = new GuiSetttingsWindow(m_profile_name); m_gui_settings_action->setEnabled(false); gui_window->show(); connect(gui_window, SIGNAL(destroyed(QObject *)), this, SLOT(guiSettingsDeleted(QObject *))); } void qutIM::guiSettingsDeleted(QObject *) { m_gui_settings_action->setEnabled(true); } //void qutIM::on_showHideGroupsButton_clicked() //{ // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); // settings.beginGroup("contactlist"); // int type = settings.value("modeltype",0).toInt(); // if((type&2)==2) // type-=2; // else // type+=2; // settings.setValue("modeltype",type); // settings.endGroup(); // AbstractContactList &acl = AbstractContactList::instance(); // acl.loadSettings(); //} void qutIM::showBallon(const QString &title, const QString &message, int time) { trayIcon->showMessage(title, message, time); } //void qutIM::on_soundOnOffButton_clicked() //{ // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); // settings.beginGroup("sounds"); // bool enable = settings.value("enable",true).toBool(); // settings.setValue("enable",!enable); // settings.endGroup(); // AbstractSoundLayer::instance().loadSettings(); //} void qutIM::loadTranslation( const QFileInfoList &files ) { m_translators.clear(); foreach(const QFileInfo &info, files) { qDebug() << info.absoluteFilePath(); QTranslator *translator = new QTranslator(this); translator->load(info.absoluteFilePath()); qApp->installTranslator(translator); m_translators.append(translator); } } void qutIM::reloadStyleLanguage() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); foreach(QTranslator *translator, m_translators) { qApp->removeTranslator(translator); delete translator; } QFileInfoList files; if( settings.contains( "gui/language" ) ) { m_translation_path = settings.value("gui/language", "").toString();// + "/main.qm"; files = QDir(m_translation_path).entryInfoList( QStringList() << "*.qm" ); } else { QStringList possible_langs = getSystemLanguage(); if( !possible_langs.isEmpty() ) { QStringList paths = PluginSystem::instance().getSharePaths(); files = getTranslationFiles( possible_langs, paths, m_translation_path ); } } QFileInfo file( m_translation_path ); QString name = (file.isDir() && !files.isEmpty()) ? file.completeBaseName() : "en"; Q_REGISTER_EVENT(event_language,"Core/Language/Changed"); Event( event_language, 1, &name ).send(); qDebug() << name; loadTranslation( files ); #if defined(Q_OS_WIN32) QString current_style = settings.value("gui/style", ":/style/style/qutim.qss").toString(); #else QString current_style = settings.value("gui/style", "").toString(); #endif if ( !current_style.isEmpty() ) { QString path_to_style = current_style.section("/", 0, -2); QFile file(current_style); if(file.open(QFile::ReadOnly)) { qApp->setStyleSheet(""); QString styleSheet = QLatin1String(file.readAll()); qApp->setStyleSheet(styleSheet.replace("%path%", path_to_style)); file.close(); } } else qApp->setStyleSheet(""); } void qutIM::pluginSettingsDeleted(QObject *) { m_pluginSettingsAction->setEnabled(true); } void qutIM::addActionToList(QAction *action) { m_plugin_actions.append(action); } void qutIM::processEvent(Event &e) { if(e.id == m_event_qutim_settings) qutimSettingsMenu(); else if(e.id == m_event_plugins_settings) qutimPluginSettingsMenu(); else if(e.id == m_event_gui_settings) openGuiSettings(); else if(e.id == m_event_switch_user) switchUser(); else if(e.id == m_event_about) on_infoButton_clicked(); } qutim-0.2.0/src/guisettingswindow.ui0000644000175000017500000002431211251361263021241 0ustar euroelessareuroelessar GuiSetttingsWindowClass 0 0 396 355 User interface settings :/icons/crystal_project/gui.png:/icons/crystal_project/gui.png 4 Qt::Horizontal 40 20 OK :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png false Apply :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Cancel :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png QFormLayout::AllNonFixedFieldsGrow Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter <Manually> 0 0 Sounds theme: 0 0 Border theme: <System> 0 0 Application style: <Default> 0 0 Language: <Default> ( English ) 0 0 System icon theme: <Default> Qt::Vertical 20 40 0 0 Status icon theme: <Default> 0 0 Popup windows theme: <Default> 0 0 Chat log theme (webkit): <None> 0 0 Chat window dialog: <Default> 0 0 Contact list theme: <Default> 0 0 Emoticons: <None> cancelButton clicked() GuiSetttingsWindowClass close() 355 313 385 265 qutim-0.2.0/src/pluginpointer.h0000644000175000017500000000722211236355476020172 0ustar euroelessareuroelessar#ifndef PLUGINPOINTER_H #define PLUGINPOINTER_H #include "include/qutim/plugininterface.h" namespace qutim_sdk_0_2 { // TODO: SDK 0.3 Fuck this cast off and use normal qobject_cast #if !defined(PLUGIN_DEVELS) || (QUTIM_BUILD_VERSION_MINOR >= 2) inline static const char *plugin_cast_helper( PluginInterface* ) { return "PluginInterface"; } inline static const char *plugin_cast_helper( PluginContainerInterface* ) { return "PluginContainerInterface"; } inline static const char *plugin_cast_helper( ProtocolInterface* ) { return "ProtocolInterface"; } inline static const char *plugin_cast_helper( SimplePluginInterface* ) { return "SimplePluginInterface"; } inline static const char *plugin_cast_helper( LayerPluginInterface* ) { return "LayerPluginInterface"; } inline static const char *plugin_cast_helper( DeprecatedSimplePluginInterface* ) { return "DeprecatedSimplePluginInterface"; } inline static const char *plugin_cast_helper( void* ) { return 0; } template< typename T > inline static T plugin_cast( QObject *plugin ) { if( !plugin ) return 0; if( T t = qobject_cast( plugin ) ) return t; return static_cast( plugin->qt_metacast( plugin_cast_helper( static_cast(0) ) ) ); } template< typename T > inline static T plugin_cast( const QObject *plugin ) { return plugin_cast( const_cast( plugin ) ); } #else #define plugin_cast qobject_cast #endif // TODO: SDK 0.3 May be this class should be public?.. template class AbstractPluginPointer { T *p; QObject *o; public: inline AbstractPluginPointer() : p(0), o(0) {} // I don't know efficient ways for casts from PluginInterface to QObject inline AbstractPluginPointer( QObject *t1, T *t2 ) : p(t2), o(t1) { QMetaObject::addGuard(&o); } inline AbstractPluginPointer( QObject *t ) : p(plugin_cast(t)), o(p?t:0) { QMetaObject::addGuard(&o); } inline AbstractPluginPointer( const AbstractPluginPointer &t ) : p(t.p), o(t.o) { QMetaObject::addGuard(&o); } inline ~AbstractPluginPointer() { QMetaObject::removeGuard(&o); } inline AbstractPluginPointer &operator=(const AbstractPluginPointer &t) { if (this != &t) { QMetaObject::changeGuard(&o, t.o); p = t.p; } return *this; } inline AbstractPluginPointer &operator=(QObject* t) { if (o != t) { t = const_cast(p = plugin_cast(t)); QMetaObject::changeGuard(&o, t); } return *this; } inline bool isNull() const { return !o; } inline T* operator->() const { return o ? const_cast(p) : 0; } inline T& operator*() const { return o ? *const_cast(p) : *static_cast(0); } inline operator T*() const { return o ? const_cast(p) : 0; } inline T* data() const { return o ? const_cast(p) : 0; } inline QObject* object() const { return o; } inline operator QObject*() const { return const_cast(o); } }; template inline bool operator==(T *o, const AbstractPluginPointer &p) { return o == p.operator->(); } template inline bool operator==(const AbstractPluginPointer &p, T *o) { return p.operator->() == o; } template inline bool operator==(const AbstractPluginPointer &p1, const AbstractPluginPointer &p2) { return p1.operator->() == p2.operator->(); } typedef AbstractPluginPointer PluginPointer; typedef AbstractPluginPointer PluginContainerPointer; typedef AbstractPluginPointer ProtocolPointer; typedef AbstractPluginPointer SimplePluginPointer; typedef AbstractPluginPointer LayerPluginPointer; typedef AbstractPluginPointer DeprecatedSimplePluginPointer; } #endif // PLUGINPOINTER_H qutim-0.2.0/src/abstractcontextlayer.cpp0000644000175000017500000001505011251517704022060 0ustar euroelessareuroelessar/* AbstractContextLayer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "abstractcontextlayer.h" #include "iconmanager.h" //#include "abstractchatlayer.h" //#include "abstracthistorylayer.h" #include "abstractlayer.h" AbstractContextLayer::AbstractContextLayer() { m_open_chat_action = 0; m_open_hisory_action = 0; m_open_info_action = 0; m_open_conference_chat_action = 0; // m_open_conference_hisory_acti = 0; m_open_conference_info_action = 0; m_contact_menu = PluginSystem::instance().registerEventHandler("Core/ContactList/ContextMenu", this); m_conference_menu = PluginSystem::instance().registerEventHandler("Core/Conference/ContactContextMenu", this); } AbstractContextLayer::~AbstractContextLayer() { delete m_open_chat_action; delete m_open_hisory_action; delete m_open_info_action; delete m_open_conference_chat_action; // delete m_open_conference_hisory_action; delete m_open_conference_info_action; } AbstractContextLayer &AbstractContextLayer::instance() { static AbstractContextLayer acl; return acl; } void AbstractContextLayer::processEvent(Event &event) { if(event.id == m_contact_menu) { itemContextMenu(event.at(0), event.at(1)); } else if(event.id == m_conference_menu) { conferenceItemContextMenu(event.at(0), event.at(1), event.at(2), event.at(3), event.at(4)); } } inline QList prepare_actions(const QList > &actions) { QList list; for(int i = 0; i < actions.size(); i++) if(!actions[i].isNull()) list << actions[i]; return list; } void AbstractContextLayer::itemContextMenu(const TreeModelItem &item, const QPoint &menu_point) { m_current_item = item; PluginSystem::instance().itemContextMenu(prepare_actions(m_actions_list), item, menu_point); } void AbstractContextLayer::conferenceItemContextMenu(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QPoint &menu_point) { m_current_protocol = protocol_name; m_current_account = account_name; m_current_conference = conference_name; m_current_nickname = nickname; PluginSystem::instance().conferenceItemContextMenu(prepare_actions(m_conference_actions_list), protocol_name, conference_name, account_name, nickname, menu_point); } void AbstractContextLayer::openChatWindowAction() { AbstractLayer::instance().Chat()->createChat(m_current_item); } void AbstractContextLayer::openHistoryAction() { AbstractLayer::History()->openWindow(m_current_item); } void AbstractContextLayer::openInformationAction() { PluginSystem::instance().showContactInformation(m_current_item); } void AbstractContextLayer::openConferenceChatWindowAction() { PluginSystem::instance().conferenceItemActivated(m_current_protocol,m_current_conference,m_current_account,m_current_nickname); /* TreeModelItem item; item.m_protocol_name = m_current_protocol; item.m_account_name = m_current_account; item.m_item_name = m_current_conference+"/"+m_current_nickname; item.m_item_type = 0; AbstractChatLayer::instance().createChat(item);*/ } //void AbstractContextLayer::openConferenceHistoryAction() //{ // //} void AbstractContextLayer::openConferenceInformationAction() { PluginSystem::instance().showConferenceContactInformation(m_current_protocol, m_current_conference, m_current_account, m_current_nickname); } void AbstractContextLayer::registerContactMenuAction(QAction *plugin_action) { m_actions_list.append(plugin_action); } void AbstractContextLayer::createActions() { m_actions_list.removeAll(m_open_chat_action); m_actions_list.removeAll(m_open_hisory_action); m_actions_list.removeAll(m_open_info_action); m_actions_list.removeAll(m_open_conference_chat_action); // m_actions_list.removeAll(m_open_conference_hisory_action); m_actions_list.removeAll(m_open_conference_info_action); delete m_open_chat_action; delete m_open_hisory_action; delete m_open_info_action; delete m_open_conference_chat_action; // delete m_open_conference_hisory_action; delete m_open_conference_info_action; IconManager &im = IconManager::instance(); m_open_chat_action = new QAction(im.getIcon("message"), tr("Send message"), 0); m_open_hisory_action = new QAction(im.getIcon("history"), tr("Message history"), 0); m_open_info_action = new QAction(im.getIcon("contactinfo"), tr("Contact details"), 0); connect(m_open_chat_action, SIGNAL(triggered()), this, SLOT(openChatWindowAction())); connect(m_open_hisory_action, SIGNAL(triggered()), this, SLOT(openHistoryAction())); connect(m_open_info_action, SIGNAL(triggered()), this, SLOT(openInformationAction())); m_actions_list.prepend(m_open_info_action); m_actions_list.prepend(m_open_hisory_action); m_actions_list.prepend(m_open_chat_action); m_open_conference_chat_action = new QAction(im.getIcon("message"), tr("Send message"), 0); // m_open_conference_hisory_action = new QAction(im.getIcon("history"), // tr("Message history"), 0); m_open_conference_info_action = new QAction(im.getIcon("contactinfo"), tr("Contact details"), 0); connect(m_open_conference_chat_action, SIGNAL(triggered()), this, SLOT(openConferenceChatWindowAction())); // connect(m_open_conference_hisory_action, SIGNAL(triggered()), this, SLOT(openConferenceHistoryAction())); connect(m_open_conference_info_action, SIGNAL(triggered()), this, SLOT(openConferenceInformationAction())); m_conference_actions_list.prepend(m_open_conference_info_action); // m_conference_actions_list.prepend(m_open_conference_hisory_action); m_conference_actions_list.prepend(m_open_conference_chat_action); } qutim-0.2.0/src/mainsettings.ui0000644000175000017500000001606011251526352020154 0ustar euroelessareuroelessar mainSettingsClass 0 0 446 430 mainSettings 0 QFrame::StyledPanel QFrame::Raised 4 Save main window size and position Hide on startup Don't show login dialog on startup Start only one qutIM at same time Add accounts to system tray menu Always on top Auto-hide: false 0 0 Qt::LeftToRight Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter s 3600 60 Auto-away after: false 0 0 min 2 60 10 0 0 Show status from: true 0 0 Qt::Horizontal 40 20 Qt::Vertical 419 180 ahideBox toggled(bool) secondsBox setEnabled(bool) 59 157 413 163 autoAwayBox toggled(bool) awayMinBox setEnabled(bool) 150 199 390 190 qutim-0.2.0/src/aboutinfo.ui0000644000175000017500000005467311273076304017452 0ustar euroelessareuroelessar aboutInfoClass 0 0 504 401 About qutIM :/icons/qutim.png:/icons/qutim.png 4 0 64 <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/qutim_64.png" style="float: left;" /><span style=" font-family:'Verdana'; font-size:12pt; font-weight:600;">qutIM %1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Using Qt %2</span></p></body></html> Qt::Horizontal 362 20 Close :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png Return true true 0 About 4 <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">License agreements</a></p></body></html> Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft Authors 4 <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project leader</span></p></body></html> Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse true Thanks To 4 <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schröter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox library</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p></body></html> Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse true Translators 4 QTextEdit::NoWrap <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> true Donates 4 <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">%1</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">WME: E214315568469</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">WMR: R273159931010</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">WMZ: Z849905691768</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">%2: 41001444012435</span></p></body></html> Qt::AlignHCenter|Qt::AlignTop true Qt::TextBrowserInteraction pushButton clicked() aboutInfoClass close() 407 377 449 377 qutim-0.2.0/src/mainsettings.h0000644000175000017500000000304711236355476020001 0ustar euroelessareuroelessar/* mainSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 MAINSETTINGS_H #define MAINSETTINGS_H #include #include #include #include #include #include "pluginsystem.h" #include "ui_mainsettings.h" #include "iconmanager.h" class mainSettings : public QWidget { Q_OBJECT public: mainSettings(const QString &profile_name, QWidget *parent = 0); ~mainSettings(); void loadSettings(); void saveSettings(); public slots: void updateAccountComboBox(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } signals: void settingsChanged(); void settingsSaved(); private: IconManager& m_iconManager;//!< use it to get icons from file or program Ui::mainSettingsClass ui; bool changed; QString m_current_account_icon; QString m_profile_name; }; #endif // MAINSETTINGS_H qutim-0.2.0/src/abstractlayer.h0000644000175000017500000000452711236355476020140 0ustar euroelessareuroelessar/* AbstractLayer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ABSTRACTLAYER_H_ #define ABSTRACTLAYER_H_ #include #include #include #include "pluginsystem.h" #include "include/qutim/layerscity.h" class qutIM; class IconManager; class QHBoxLayout; using namespace qutim_sdk_0_2; class AbstractLayer : public LayersCity { public: bool showLoginDialog(); void loadCurrentProfile(); void openSettingsDialog(); void setPointers(qutIM *); void createNewAccount(); static AbstractLayer &instance(); void initializePointers(QTreeView *, QHBoxLayout *, QMenu *, QAction *); void clearMenuFromStatuses(); void addStatusesToMenu(); void reloadGeneralSettings(); void addAccountMenusToTrayMenu(bool add); void updateTrayIcon(); //huhuhuhu ;DD inline void setCurrentAccountIconName(const QString &account_name) { d->current_account_icon_name = account_name; } void updateStausMenusInTrayMenu(); void setAutoAway(); void setStatusAfterAutoAway(); inline QString getCurrentProfile() const {return d->current_profile; } void animateTrayNewMessage(); void stopTrayNewMessageAnimation(); qutIM *getParent(); void showBalloon(const QString &title, const QString &message, int time); void reloadStyleLanguage(); void addActionToMainMenu(QAction *action); private: AbstractLayer(); ~AbstractLayer(); struct Data { inline Data() : show_account_menus(false), is_new_profile(false) {} QString current_profile; qutIM *parent; ::PluginSystem *plugin_system; QMenu *tray_menu; QList account_status_menu_list; QAction *action_tray_menu_before; bool show_account_menus; bool is_new_profile; QString current_account_icon_name; }; static Data *d; }; #endif /*ABSTRACTLAYER_H_*/ qutim-0.2.0/src/addaccountwizard.h0000644000175000017500000000367311236355476020627 0ustar euroelessareuroelessar/* AddAccountWizard, ProtocolPage, LastLoginPage Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ADDACCOUNTWIZARD_H_ #define ADDACCOUNTWIZARD_H_ #include #include #include #include #include #include #include #include #include #include "pluginsystem.h" class ProtocolPage; class LastLoginPage; class AddAccountWizard : public QWizard { Q_OBJECT public: enum { Page_Protocol, Page_Login}; AddAccountWizard(QWidget *parent = 0); ~AddAccountWizard(); void addProtocolsToWizardList(const PluginInfoList &); QString getChosenProtocol() const; private slots: void on_currentIdChanged(int); private: ProtocolPage *m_protocol_page; LastLoginPage *m_login_page; QPoint desktopCenter(); }; class ProtocolPage : public QWizardPage { Q_OBJECT public: ProtocolPage(QWidget *parent = 0); void addItemToList(const PluginInfo &); QString getChosenProtocol() const; int nextId() const; private: QLabel *m_top_label; QListWidget *m_protocol_list; }; class LastLoginPage : public QWizardPage { Q_OBJECT public: LastLoginPage(QWidget *parent = 0); void setLoginForm(QWidget *); int nextId() const; private: QVBoxLayout *layout; }; #endif /*ADDACCOUNTWIZARD_H_*/ qutim-0.2.0/src/pluginsettings.h0000644000175000017500000000261011236355476020346 0ustar euroelessareuroelessar/***************************************************************************** Plugin System Copyright (c) 2008 by m0rph *************************************************************************** * * * 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 PLUGINSETTINGS_H #define PLUGINSETTINGS_H #include #include "ui_pluginsettings.h" #include "pluginsystem.h" class PluginSettings : public QDialog { Q_OBJECT; public: PluginSettings(QWidget *parent = 0); ~PluginSettings(); private: Ui::PluginSettingsClass ui; void moveToDesktopCenter(); void addPluginItem(SimplePluginInterface *plugin); private slots: void changeStackWidget(QTreeWidgetItem *current); void on_cancelButton_clicked(); void on_okButton_clicked(); protected: void closeEvent(QCloseEvent * event); }; #endif qutim-0.2.0/src/corelayers/0000755000175000017500000000000011273100754017253 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/settings/0000755000175000017500000000000011273100754021113 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/settings/qsettingslayer.h0000644000175000017500000000637011236355476024364 0ustar euroelessareuroelessar#ifndef QSETTINGSLAYER_H #define QSETTINGSLAYER_H #include "include/qutim/settings.h" #include "include/qutim/layerinterface.h" #include #include #include using namespace qutim_sdk_0_2; class QSettingsInterface : public SettingsInterface { public: inline QSettingsInterface( const QString &organization, const QString &application ) : m_settings(QSettings::defaultFormat(),QSettings::UserScope,organization,application) {} virtual void clear() { m_settings.clear(); } virtual void sync() { m_settings.sync(); } virtual void beginGroup( const QString &prefix ) { m_settings.beginGroup( prefix ); } virtual void endGroup() { m_settings.endGroup(); } virtual QString group() const { return m_settings.group(); } virtual int beginReadArray( const QString &prefix ) { return m_settings.beginReadArray( prefix ); } virtual void beginWriteArray( const QString &prefix, int size = -1 ) { m_settings.beginWriteArray( prefix, size ); } virtual void endArray() { m_settings.endArray(); } virtual void setArrayIndex( int i ) { m_settings.setArrayIndex( i ); } virtual QStringList allKeys() const { return m_settings.allKeys(); } virtual QStringList childKeys() const { return m_settings.childKeys(); } virtual QStringList childGroups() const { return m_settings.childGroups(); } virtual bool isWritable() const { return m_settings.isWritable(); } virtual QVariant value( const QString &key, QVariant def = QVariant() ) { return m_settings.value( key, def ); } virtual void setValue( Settings::FieldType type, const QString &key, const QVariant &value ) { Q_UNUSED(type); m_settings.setValue( key, value ); } private: QSettings m_settings; }; class QSettingsLayer : public SettingsLayerInterface { public: QSettingsLayer(); virtual bool init(PluginSystemInterface *plugin_system) { m_name = "qutim"; quint8 major, minor, secminor; quint16 svn; plugin_system->getQutimVersion(major, minor, secminor, svn); m_version = QString("%1.%2.%3 r%4").arg(major).arg(minor).arg(secminor).arg(svn); return true; } virtual void release() {} virtual void setProfileName(const QString &profile_name) { Q_UNUSED(profile_name); } virtual void setLayerInterface( LayerType, LayerInterface *) {} virtual void saveLayerSettings() {} virtual void removeLayerSettings() {} virtual void saveGuiSettingsPressed() {} virtual void removeGuiLayerSettings() {} virtual SettingsInterface *getSettings( const TreeModelItem &item ); virtual SettingsInterface *getSettings( const QString &name ); virtual bool logIn( const QString &profile, const QString &password ); virtual QString getProfilePath(); virtual QDir getProfileDir(); inline void ensure_profile_path() { if( m_profile_path || SystemsCity::ProfileName().isEmpty() ) return; QSettings settings( QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+SystemsCity::ProfileName(), "profilesettings" ); QFileInfo config_dir = settings.fileName(); QDir dir = qApp->applicationDirPath(); if( config_dir.canonicalPath().contains( dir.canonicalPath() ) ) m_profile_path = new QString( QDir::current().relativeFilePath( config_dir.absolutePath() ) ); else m_profile_path = new QString( config_dir.absolutePath() ); } private: QString *m_profile_path; }; #endif // QSETTINGSLAYER_H qutim-0.2.0/src/corelayers/settings/qsettingslayer.cpp0000644000175000017500000000345211236355476024715 0ustar euroelessareuroelessar#include "qsettingslayer.h" #include #include QSettingsLayer::QSettingsLayer() { m_profile_path = 0; } SettingsInterface *QSettingsLayer::getSettings( const TreeModelItem &item ) { switch( item.m_item_type ) { case 0:{ QSettingsInterface *qset = new QSettingsInterface( "qutim/qutim."+SystemsCity::ProfileName()+"/"+item.m_protocol_name+"."+item.m_account_name, "contactsettings" ); qset->beginGroup( item.m_item_name ); return qset;} case 1:{ QSettingsInterface *qset = new QSettingsInterface( "qutim/qutim."+SystemsCity::ProfileName()+"/"+item.m_protocol_name+"."+item.m_account_name, "groupsettings" ); qset->beginGroup( item.m_item_name ); return qset;} case 2: return new QSettingsInterface( "qutim/qutim."+SystemsCity::ProfileName()+"/"+item.m_protocol_name+"."+item.m_account_name, "accountsettings" ); break; case 32:{ QSettingsInterface *qset = new QSettingsInterface( "qutim/qutim."+SystemsCity::ProfileName()+"/"+item.m_protocol_name+"."+item.m_account_name, "conferencesettings" ); qset->beginGroup( item.m_item_name ); return qset;} break; default: Q_ASSERT_X( false, "QSettingsLayer::getSettings", "Unknown item type" ); // he-he, this will be segfault! return 0; } } SettingsInterface *QSettingsLayer::getSettings( const QString &name ) { static const QString profile( "qutim/qutim."+SystemsCity::ProfileName() ); return new QSettingsInterface( profile, name ); } bool QSettingsLayer::logIn( const QString &profile, const QString &password ) { return true; } QString QSettingsLayer::getProfilePath() { ensure_profile_path(); return m_profile_path ? *m_profile_path : QString(); } QDir QSettingsLayer::getProfileDir() { ensure_profile_path(); return m_profile_path ? QDir( *m_profile_path ) : QDir(); } qutim-0.2.0/src/corelayers/status/0000755000175000017500000000000011273100754020576 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/status/statuspresetcaption.h0000644000175000017500000000271211236355476025111 0ustar euroelessareuroelessar/* StatusPresetCaption Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 STATUSPRESETCAPTION_H #define STATUSPRESETCAPTION_H #include #include "ui_statuspresetcaption.h" #include #include #include class StatusPresetCaption : public QDialog { Q_OBJECT public: StatusPresetCaption(QWidget *parent = 0); ~StatusPresetCaption(); void setButtonIcon(const QIcon &ok_button, const QIcon &cancel_button) { ui.okButton->setIcon(ok_button); ui.cancelButton->setIcon(cancel_button); } QString getCaption() const { return ui.presetEdit->text(); } private slots: void on_presetEdit_textChanged(const QString &text); private: Ui::StatusPresetCaptionClass ui; QPoint desktopCenter(); }; #endif // STATUSPRESETCAPTION_H qutim-0.2.0/src/corelayers/status/defaultstatuslayer.cpp0000644000175000017500000000246411236355476025251 0ustar euroelessareuroelessar/* DefaultStatusLayer Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "defaultstatuslayer.h" #include "statusdialog.h" bool DefaultStatusLayer::setStatusMessage(const TreeModelItem &item, const QString &status_type, QString &status_message, bool &dshow) { Q_UNUSED(item); Q_UNUSED(status_type); StatusDialog status_dialog(m_profile_name); status_dialog.setStatusMessage(status_message); if ( status_dialog.exec() ) { status_message = status_dialog.getStatusMessage(); dshow = status_dialog.getDshowFlag(); return true; } else { return false; } } qutim-0.2.0/src/corelayers/status/statusdialog.cpp0000644000175000017500000001516611236355476024032 0ustar euroelessareuroelessar/* StatusDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "statusdialog.h" #include "statuspresetcaption.h" #include "pluginsystem.h" StatusDialog::StatusDialog(const QString &profile_name, QWidget *parent) : QDialog(parent) , m_icon_manager(IconManager::instance()) , m_profile_name(profile_name) { ui.setupUi(this); setAttribute(Qt::WA_QuitOnClose, false); setFixedSize(size()); PluginSystem::instance().centerizeWidget(this); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); m_preset_file = settings.fileName().section('/', 0, -2) + "/statuspresets.xml"; loadPresets(); setWindowTitle(tr("Write your status message")); setWindowIcon(m_icon_manager.getIcon("statuses")); ui.delButton->setIcon(m_icon_manager.getIcon("deletetab")); ui.okButton->setIcon(m_icon_manager.getIcon("apply")); ui.saveButton->setIcon(m_icon_manager.getIcon("save_all")); ui.cancelButton->setIcon(m_icon_manager.getIcon("cancel")); } StatusDialog::~StatusDialog() { } QPoint StatusDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void StatusDialog::on_saveButton_clicked() { StatusPresetCaption caption_dialog; caption_dialog.setWindowTitle(tr("Preset caption")); caption_dialog.setWindowIcon(m_icon_manager.getIcon("statuses")); caption_dialog.setButtonIcon(m_icon_manager.getIcon("apply"), m_icon_manager.getIcon("cancel")); if ( caption_dialog.exec() ) { savePreset(caption_dialog.getCaption()); } } void StatusDialog::savePreset(const QString &preset_caption) { QFile presets_file(m_preset_file); if ( presets_file.exists() ) { if (presets_file.open(QIODevice::ReadOnly) ) { QDomDocument doc; if ( doc.setContent(&presets_file) ) { QDomElement rootElement = doc.documentElement(); QDomElement preset_element = doc.createElement("preset"); QDomElement caption_element = doc.createElement("caption"); QDomText caption_text = doc.createTextNode(preset_caption); caption_element.appendChild(caption_text); QDomElement message_element = doc.createElement("message"); QDomText message_text = doc.createTextNode(ui.statusTextEdit->toPlainText()); message_element.appendChild(message_text); preset_element.appendChild(caption_element); preset_element.appendChild(message_element); rootElement.insertAfter(preset_element, rootElement.lastChild()); presets_file.close(); if ( presets_file.open(QIODevice::WriteOnly) ) { QTextStream preset_stream(&presets_file); preset_stream.setCodec("UTF-8"); preset_stream<toPlainText()); message_element.appendChild(message_text); preset_element.appendChild(caption_element); preset_element.appendChild(message_element); rootElement.appendChild(preset_element); doc.appendChild(rootElement); QTextStream presets_stream(&presets_file); presets_stream.setCodec("UTF-8"); presets_stream<addItem(preset_caption,ui.statusTextEdit->toPlainText()); } void StatusDialog::loadPresets() { QFile presets_file(m_preset_file); if ( presets_file.open(QIODevice::ReadOnly)) { QDomDocument doc; if ( doc.setContent(&presets_file) ) { QDomElement rootElement = doc.documentElement(); int msgCount = rootElement.elementsByTagName("preset").count(); QDomElement preset = rootElement.firstChildElement("preset"); for( int i = 0; i < msgCount; i++) { QDomElement preset_caption = preset.firstChildElement("caption"); QDomElement preset_message = preset.firstChildElement("message"); ui.presetComboBox->addItem(preset_caption.text(), preset_message.text()); preset = preset.nextSiblingElement("preset"); } presets_file.close(); } } } void StatusDialog::on_presetComboBox_currentIndexChanged(int index) { if( index ) { ui.statusTextEdit->setPlainText(ui.presetComboBox->itemData(index).toString()); } } void StatusDialog::on_delButton_clicked() { int index = ui.presetComboBox->currentIndex(); if ( index ) { QFile presets_file(m_preset_file); if ( presets_file.open(QIODevice::ReadOnly)) { QDomDocument doc; if ( doc.setContent(&presets_file) ) { QDomElement rootElement = doc.documentElement(); int msgCount = rootElement.elementsByTagName("preset").count(); QDomElement preset = rootElement.firstChildElement("preset"); for( int i = 0; i < msgCount; i++) { QDomElement preset_caption = preset.firstChildElement("caption"); QDomElement preset_message = preset.firstChildElement("message"); if ( ui.presetComboBox->currentText() == preset_caption.text() && ui.presetComboBox->itemData(index).toString() == preset_message.text() ) { rootElement.removeChild(preset); } preset = preset.nextSiblingElement("preset"); } presets_file.close(); if ( presets_file.open(QIODevice::WriteOnly) ) { QTextStream preset_stream(&presets_file); preset_stream.setCodec("UTF-8"); preset_stream<removeItem(index); } } qutim-0.2.0/src/corelayers/status/defaultstatuslayer.h0000644000175000017500000000370411236355476024714 0ustar euroelessareuroelessar/* DefaultStatusLayer Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 DEFAULTSTATUSLAYER_H #define DEFAULTSTATUSLAYER_H #include "../../../include/qutim/plugininterface.h" #include "../../../include/qutim/layerinterface.h" #include #include "iconmanager.h" using namespace qutim_sdk_0_2; class DefaultStatusLayer : public StatusLayerInterface { public: virtual bool init(PluginSystemInterface *plugin_system) { m_name = "qutim"; quint8 major, minor, secminor; quint16 svn; plugin_system->getQutimVersion(major, minor, secminor, svn); m_version = QString("%1.%2.%3 r%4").arg(major).arg(minor).arg(secminor).arg(svn); return true; } virtual void release() {} virtual void setProfileName(const QString &profile_name) { m_profile_name = profile_name; } virtual void setLayerInterface( LayerType, LayerInterface *) {} virtual void saveLayerSettings() {} virtual void removeLayerSettings() {} virtual void saveGuiSettingsPressed() {} virtual void removeGuiLayerSettings() {} virtual bool setStatusMessage(const TreeModelItem &item, const QString &status_type, QString &status_message, bool &dshow); private: QString m_profile_name; }; #endif // DEFAULTSTATUSLAYER_H qutim-0.2.0/src/corelayers/status/statusdialog.h0000644000175000017500000000337211236355476023473 0ustar euroelessareuroelessar/* StatusDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 STATUSDIALOG_H #define STATUSDIALOG_H #include #include #include #include #include #include "ui_statusdialogvisual.h" #include "iconmanager.h" class StatusDialog : public QDialog { Q_OBJECT public: StatusDialog(const QString &profile_name, QWidget *parent = 0); ~StatusDialog(); void setStatusMessage(const QString &status_message) { ui.statusTextEdit->setPlainText(status_message); } QString getStatusMessage() const { return ui.statusTextEdit->toPlainText(); } bool getDshowFlag() const { return ui.dshowBox->isChecked(); } private slots: void on_saveButton_clicked(); void on_presetComboBox_currentIndexChanged(int index); void on_delButton_clicked(); private: Ui::StatusDialogVisualClass ui; IconManager &m_icon_manager; QString m_profile_name; QPoint desktopCenter(); void savePreset(const QString &preset_caption); void loadPresets(); QString m_preset_file; }; #endif // STATUSDIALOG_H qutim-0.2.0/src/corelayers/status/statuspresetcaption.ui0000644000175000017500000000516011251526352025265 0ustar euroelessareuroelessar StatusPresetCaptionClass 0 0 293 104 StatusPresetCaption 4 Please enter preset caption: Qt::Vertical 20 40 Qt::Horizontal 40 20 false OK Cancel okButton clicked() StatusPresetCaptionClass accept() 169 77 81 70 cancelButton clicked() StatusPresetCaptionClass reject() 271 77 295 63 qutim-0.2.0/src/corelayers/status/statuspresetcaption.cpp0000644000175000017500000000245511236355476025450 0ustar euroelessareuroelessar/* StatusPresetCaption Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "statuspresetcaption.h" #include "pluginsystem.h" StatusPresetCaption::StatusPresetCaption(QWidget *parent) : QDialog(parent) { ui.setupUi(this); setFixedSize(size()); PluginSystem::instance().centerizeWidget(this); } StatusPresetCaption::~StatusPresetCaption() { } QPoint StatusPresetCaption::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void StatusPresetCaption::on_presetEdit_textChanged(const QString &text) { ui.okButton->setEnabled(!text.isEmpty()); } qutim-0.2.0/src/corelayers/status/statusdialogvisual.ui0000644000175000017500000000756011251526352025076 0ustar euroelessareuroelessar StatusDialogVisualClass 0 0 331 241 StatusDialog 4 0 0 Preset: <None> Do not show this dialog Qt::Horizontal 40 20 0 0 Save 0 0 OK 0 0 Cancel okButton clicked() StatusDialogVisualClass accept() 232 189 181 210 cancelButton clicked() StatusDialogVisualClass reject() 287 189 337 210 qutim-0.2.0/src/corelayers/chat/0000755000175000017500000000000011273100754020172 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/chat/generalwindow.h0000644000175000017500000001313211236355476023224 0ustar euroelessareuroelessar/* GeneralWindow Copyright (c) 2009 by Rustam Chakin Ruslan Nigmatullin *************************************************************************** * * * 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 GENERALWINDOW_H #define GENERALWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include #include "tempglobalinstance.h" #include "logscity.h" class ChatEmoticonMenu; class EventEater : public QObject { Q_OBJECT public: EventEater(QWidget *parent = 0) : QObject(parent), m_send_on_enter(false), m_number_of_enters(0), m_enter_position(0), m_accept_files(false) {} TreeModelItem m_item; bool m_send_on_enter; bool m_send_on_double_enter; quint8 m_number_of_enters; int m_enter_position; bool m_accept_files; signals: void focusedIn(); void closeCurrentChat(); void changeTab(int); void sendMessage(); void acceptUrls(const QStringList &files); protected: bool eventFilter(QObject *obj, QEvent *event); }; class GeneralWindow : public QWidget { Q_OBJECT public: GeneralWindow(); virtual ~GeneralWindow() {} virtual void setOwnerItem(const TreeModelItem &item); TreeModelItem m_item; void windowActivatedByUser(QWidget *window); virtual void setItemData(const QStringList &data_list,bool owner_data){} bool m_waiting_for_activation; virtual void contactTyping(bool typing) {} EventEater *m_event_eater; virtual void setOptions(bool close_after_send,bool send_on_enter, bool send_on_double_enter, bool send_typing) { m_close_after_send = close_after_send; m_event_eater->m_send_on_enter = send_on_enter; m_on_enter_button->setChecked(send_on_enter); m_event_eater->m_send_on_double_enter = send_on_double_enter; m_send_typing_notifications = send_typing; } void checkForScrollBarMaximum(); void updateWebkit(bool update) { if ( m_web_view && m_webkit_mode ) m_web_view->setUpdatesEnabled(update); } bool compareItem(const TreeModelItem &item); inline QTextEdit *getEditField() { return m_plain_text_edit; } private slots: virtual void on_sendButton_clicked(); void checkWindowFocus(); void on_translitButton_clicked(); void on_onEnterButton_clicked(); void on_quoteButton_clicked(); void on_clearChatButton_clicked(); void browserTextChanged(); void insertEmoticon(const QString &emoticon_text); void newsOnLinkClicked(const QUrl &url); void createContextMenu( const QPoint &pos ); signals: void windowFocused(); void closeMe(); protected: virtual bool event(QEvent *event); virtual void installEventEater(); TempGlobalInstance &m_global_instance; virtual void setIcons(); virtual void loadSettings(); virtual void setNULLs(); virtual void loadDefaultForm() = 0; virtual void loadCustomForm(const QString &form_path) = 0; virtual void focusTextEdit(); virtual void setFocusPolicy(); virtual QString invertMessage(QString &text); template T *morphWidget(QWidget *widget); QTextBrowser *m_text_browser; QWebView *m_web_view; QString m_profile_name; QString m_chat_form_path; QPushButton *m_send_button; QToolButton *m_emoticons_button; QToolButton *m_translit_button; QToolButton *m_on_enter_button; QToolButton *m_quote_button; QToolButton *m_clear_button; QTextEdit *m_plain_text_edit; QString m_identification; bool m_webkit_mode; bool m_close_after_send; bool m_send_typing_notifications; bool m_scroll_at_maximum; QMenu *m_emotic_menu; QWidgetAction *m_emoticon_action; ChatEmoticonMenu *m_emoticon_widget; }; template T *GeneralWindow::morphWidget(QWidget *widget) { if(T *t = qobject_cast(widget)) return t; T *t = new T(this); QRect geom = widget->geometry(); if(QLayout *layout = widget->parentWidget()->layout()) { int index = layout->indexOf(widget); if(QGridLayout *grid_layout = qobject_cast(layout)) { int row, column, row_span, column_span; grid_layout->getItemPosition(index, &row, &column, &row_span, &column_span); grid_layout->removeWidget(widget); grid_layout->addWidget(t, row, column, row_span, column_span); } else if(QBoxLayout *box_layout = qobject_cast(layout)) { box_layout->insertWidget(index, t); } else if(QFormLayout *form_layout = qobject_cast(layout)) { int row; QFormLayout::ItemRole role; form_layout->getItemPosition(index, &row, &role); form_layout->removeWidget(widget); form_layout->setWidget(row, role, t); } else if(QStackedLayout *stacked_layout = qobject_cast(layout)) { stacked_layout->insertWidget(index, widget); } } else if(QSplitter *splitter = qobject_cast(widget->parentWidget())) { int index = splitter->indexOf(widget); splitter->insertWidget(index, t); } delete widget; t->setGeometry(geom); return t; } #endif // GENERALWINDOW_H qutim-0.2.0/src/corelayers/chat/chatlayerclass.cpp0000644000175000017500000004554311271404654023717 0ustar euroelessareuroelessar/* ChatLayerClass Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "chatlayerclass.h" #include "logscity.h" ChatLayerClass::ChatLayerClass() { m_settings_widget = 0; m_settings_item = 0; m_separate_management = 0; m_tabbed_management = 0; } ChatLayerClass::~ChatLayerClass() { } void ChatLayerClass::release() { saveUnreadedMessage(); LogsCity::instance().release(); } bool ChatLayerClass::init(PluginSystemInterface *plugin_system) { m_plugin_system = plugin_system; TempGlobalInstance::instance().setPluginSystem(plugin_system); m_event_head = m_plugin_system->registerEventHandler("Core/ChatWindow/AppendHtmlToHead",this); return true; } QList ChatLayerClass::getLayerSettingsList() { m_settings.clear(); if ( !m_settings_widget ) { m_settings_widget = new ChatLayerSettings(m_profile_name); m_settings_item = new QTreeWidgetItem; m_settings_item->setText(0,tr("Chat window")); m_settings_item->setIcon(0,Icon("messaging")); SettingsStructure tmp_struct; tmp_struct.settings_item = m_settings_item; tmp_struct.settings_widget = m_settings_widget; m_settings.append(tmp_struct); } return m_settings; } void ChatLayerClass::saveLayerSettings() { if ( m_settings_widget ) m_settings_widget->saveSettings(); loadSettings(); } void ChatLayerClass::removeLayerSettings() { if ( m_settings_widget ) { delete m_settings_widget; m_settings_widget = 0; delete m_settings_item; m_settings_item = 0; } } void ChatLayerClass::saveGuiSettingsPressed() { LogsCity::instance().loadGuiSettings(); } void ChatLayerClass::setProfileName(const QString &profile_name) { m_event_tray_clicked = m_plugin_system->registerEventHandler("Core/Tray/Clicked", this); m_event_show_hide_cl = m_plugin_system->registerEventHandler("Core/ContactList/ShowHide"); m_event_change_id = m_plugin_system->registerEventHandler("Core/ChatWindow/ChangeID",this); m_event_js = m_plugin_system->registerEventHandler("Core/ChatWindow/EvaluateJavaScript",this); m_event_all_plugin_loaded = m_plugin_system->registerEventHandler("Core/AllPluginsLoaded",this); m_profile_name = profile_name; m_separate_management = new SeparateChats(profile_name); m_tabbed_management = new TabbedChats(profile_name); connect(m_tabbed_management, SIGNAL(restorePreviousTabs()), this, SLOT(restorePreviousChats())); loadSettings(); } void ChatLayerClass::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); LogsCity::instance().m_tmp_image_path = settings.fileName().section('/', 0, -2) + "/messageimages/"; settings.beginGroup("chatwindow"); m_tabbed_mode = settings.value("tabbed", true).toBool(); m_open_chat_on_new_message = settings.value("open", false).toBool(); m_dont_show_events_if_message_chat_is_open = settings.value("events", false).toBool(); m_show_all = settings.value("openall", true).toBool(); settings.endGroup(); m_play_sound_if_active = settings.value("sounds/actwndincome",false).toBool(); if ( m_separate_management ) m_separate_management->loadSettings(); if ( m_tabbed_management ) m_tabbed_management->loadSettings(); LogsCity::instance().loadSettings(m_profile_name); } void ChatLayerClass::createChat(const TreeModelItem &item) { createChat(item,false); } void ChatLayerClass::createChat(const TreeModelItem &item,bool new_message) { TempGlobalInstance &tmp_tgi = TempGlobalInstance::instance(); if ( !LogsCity::instance().doIHaveHome(item) ) { tmp_tgi.chatAboutToBeOpened(item); QStringList item_info = tmp_tgi.getItemInfo(item); while(item_info.size() < 4) item_info << QString(); TreeModelItem owner_item ; owner_item.m_account_name = item.m_account_name; owner_item.m_item_name = item.m_account_name; owner_item.m_item_type = item.m_item_type; owner_item.m_protocol_name = item.m_protocol_name; owner_item.m_parent_name = item.m_account_name; QStringList owner_info = tmp_tgi.getItemInfo(owner_item); if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->createChat(item,item_info, owner_info,new_message); else if (!m_tabbed_mode && m_separate_management) m_separate_management->createChat(item,item_info, owner_info); loadHistoryMessages(item); checkForNewMessages(item); tmp_tgi.chatOpened(item); } else { if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->activateWindow(item,new_message); else if (!m_tabbed_mode && m_separate_management) m_separate_management->activateWindow(item); } } void ChatLayerClass::loadGuiSettings() { } void ChatLayerClass::setLayerInterface( LayerType type, LayerInterface *linterface) { TempGlobalInstance::instance().setLayerInterface(type,linterface); switch(type) { case NotificationLayer: m_notification_layer = reinterpret_cast(linterface); break; case HistoryLayer: m_history_layer = reinterpret_cast(linterface); break; default:; } } void ChatLayerClass::contactChangeHisStatus(const TreeModelItem &item, const QIcon &icon) { if ( LogsCity::instance().doIHaveHome(item) ) { if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->contactChangeHisStatus(item,icon); else if (!m_tabbed_mode && m_separate_management) m_separate_management->contactChangeHisStatus(item,icon); } } void ChatLayerClass::contactChangeHisClient(const TreeModelItem &item) { if ( LogsCity::instance().doIHaveHome(item) ) { if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->contactChangeHisClient(item); else if (!m_tabbed_mode && m_separate_management) m_separate_management->contactChangeHisClient(item); } } void ChatLayerClass::addConferenceItem(const TreeModelItem &item, const QString &name) { LogsCity::instance().addConferenceItem(item,name); } void ChatLayerClass::setConferenceItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &status, int mass) { LogsCity::instance().setConferenceItemStatus(item,icon,status,mass); } void ChatLayerClass::renameConferenceItem(const TreeModelItem &item, const QString &new_name) { LogsCity::instance().renameConferenceItem(item,new_name); } void ChatLayerClass::removeConferenceItem(const TreeModelItem &item) { LogsCity::instance().removeConferenceItem(item); } void ChatLayerClass::setConferenceItemIcon(const TreeModelItem &item, const QIcon &icon, int position) { LogsCity::instance().setConferenceItemIcon(item,icon,position); } void ChatLayerClass::setConferenceItemRole(const TreeModelItem &item, const QIcon &icon, const QString &role, int mass) { LogsCity::instance().setConferenceItemRole(item,icon,role,mass); } void ChatLayerClass::newMessageArrivedTo(const TreeModelItem &item, const QString &message, const QDateTime &date, bool history, bool in) { bool notify_about_message = false; bool window_open = false; if ( item.m_item_type == 34 ) { bool win_active = true; if (m_tabbed_mode && m_tabbed_management ) win_active = !m_tabbed_management->checkForActivation(item,false); else if (!m_tabbed_mode && m_separate_management) win_active = !m_separate_management->checkForActivation(item,false); if (m_tabbed_mode) m_tabbed_management->updateWebkit(false); if ( LogsCity::instance().addMessage(item,message,date,history,in, win_active) ) { if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->alertWindow(item); else if (!m_tabbed_mode && m_separate_management) m_separate_management->alertWindow(item); } if (m_tabbed_mode) m_tabbed_management->updateWebkit(true); return; } if ( m_open_chat_on_new_message ) createChat(item,true); if ( LogsCity::instance().doIHaveHome(item) ) { window_open = true; bool add_to_waiting_activation_list = false; if (m_tabbed_mode && m_tabbed_management ) add_to_waiting_activation_list = m_tabbed_management->checkForActivation(item); else if (!m_tabbed_mode && m_separate_management) add_to_waiting_activation_list = m_separate_management->checkForActivation(item); if(add_to_waiting_activation_list && item.m_item_type != 32) { notify_about_message = true; TempGlobalInstance &temp_global = TempGlobalInstance::instance(); temp_global.setTrayMessageIconAnimating(true); temp_global.notifyAboutUnreadedMessage(item); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( !temp_global.m_waiting_for_activation.contains(identification) ) temp_global.m_waiting_for_activation.insert(identification,item); } if (m_tabbed_mode) m_tabbed_management->updateWebkit(false); LogsCity::instance().addMessage(item,message,date,history,in); if (m_tabbed_mode) m_tabbed_management->updateWebkit(true); } else { if(in) notify_about_message = true; TempGlobalInstance &temp_global = TempGlobalInstance::instance(); temp_global.setTrayMessageIconAnimating(true); temp_global.notifyAboutUnreadedMessage(item); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); UnreadedMessage tmp_message; tmp_message.m_item = item; tmp_message.m_date = date; tmp_message.m_message = message; if ( !temp_global.m_unreaded_messages_list.contains(identification) ) temp_global.m_unreaded_messages_list.insert(identification, new QVector); temp_global.m_unreaded_messages_list.value(identification)->append(tmp_message); } if ( window_open && m_dont_show_events_if_message_chat_is_open ) return; const ItemData *data = LayersCity::ContactList()->getItemData(item); if(data && !(data->visibility & ShowMessage)) return; if ( notify_about_message && ( LayersCity::ContactList()->getItemNotifications(item) & ShowMsgReceived ) ) m_notification_layer->userMessage(item, message, NotifyMessageGet); else if (window_open && m_play_sound_if_active) m_notification_layer->playSound(item,NotifyMessageGet); } void ChatLayerClass::processEvent(Event &e) { if(e.id == m_event_tray_clicked) { TempGlobalInstance &temp_global = TempGlobalInstance::instance(); if (temp_global.m_unreaded_messages_list.count() || temp_global.m_waiting_for_activation.count()) { readAllUnreaded(); }else{ Event ev(m_event_show_hide_cl); m_plugin_system->sendEvent(ev); } } else if (e.id == m_event_change_id && e.size() >= 2 ) { TreeModelItem &item = e.at(0); QString &new_id = e.at(1); if ( LogsCity::instance().doIHaveHome(item) ) { if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->changeId(item,new_id); else if (!m_tabbed_mode && m_separate_management) m_separate_management->changeId(item,new_id); } } else if(e.id == m_event_head ) { LogsCity::instance().appendHtmlToHead( e.at(0), e.at >(1) ); } else if(e.id == m_event_js ) { QVariant result; if( QWebPage *page = LogsCity::instance().giveMeMyHomeWebPage( e.at(0) ) ) result = page->mainFrame()->evaluateJavaScript( e.at(1) ); if( e.size() == 3 ) e.at(2) = result; } else if(e.id == m_event_all_plugin_loaded) { restoreUnreadedMessages(); } } void ChatLayerClass::checkForNewMessages(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); TempGlobalInstance &temp_global = TempGlobalInstance::instance(); if ( temp_global.m_unreaded_messages_list.contains(identification)) { QVector *temp_list = temp_global.m_unreaded_messages_list.value(identification); TreeModelItem tmp_item; for(int i=0; isize(); i++) { UnreadedMessage tmp_message = temp_list->at(i); LogsCity::instance().addMessage(tmp_message.m_item, tmp_message.m_message, tmp_message.m_date,false,true); tmp_item = tmp_message.m_item; } delete temp_list; temp_global.m_unreaded_messages_list.remove(identification); temp_global.notifyAboutReadedMessage(tmp_item); } if ( temp_global.m_waiting_for_activation.contains(identification) ) { temp_global.m_waiting_for_activation.remove(identification); temp_global.notifyAboutReadedMessage(item); } } void ChatLayerClass::readAllUnreaded() { TempGlobalInstance &temp_global = TempGlobalInstance::instance(); if (m_show_all) { foreach(QVector *temp_list, temp_global.m_unreaded_messages_list.values()) { TreeModelItem tmp_item = temp_list->at(0).m_item; createChat(tmp_item); } foreach(TreeModelItem tmp_item, temp_global.m_waiting_for_activation.values()) { createChat(tmp_item); } } else { if ( temp_global.m_unreaded_messages_list.count() ) { TreeModelItem tmp_item = temp_global.m_unreaded_messages_list.begin().value()->at(0).m_item; createChat(tmp_item); } else if (temp_global.m_waiting_for_activation.count() ) createChat(temp_global.m_waiting_for_activation.begin().value()); } } void ChatLayerClass::setItemTypingState(const TreeModelItem &item, TypingAttribute state) { bool item_has_home = LogsCity::instance().doIHaveHome(item) ; if (item_has_home) { if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->setItemTypingState(item,state); else if (!m_tabbed_mode && m_separate_management) m_separate_management->setItemTypingState(item,state); } if ( (bool)state ) { bool notify_about_typing = false;; if ( item_has_home ) { if (m_tabbed_mode && m_tabbed_management ) notify_about_typing = !m_tabbed_management->checkForActivation(item,true); else if (!m_tabbed_mode && m_separate_management) notify_about_typing = !m_separate_management->checkForActivation(item,true); } else notify_about_typing = true; if ( item_has_home && !m_dont_show_events_if_message_chat_is_open ) return; if ( notify_about_typing && ( LayersCity::ContactList()->getItemNotifications(item) & ShowTypingNotify ) ) m_notification_layer->userMessage(item, "", NotifyTyping); } } void ChatLayerClass::saveUnreadedMessage() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); QString unread_file = settings.fileName().section('/', 0, -2) + "/nunreaded.list"; QFile u_file(unread_file); if ( u_file.open(QIODevice::WriteOnly) ) { QDataStream out(&u_file); foreach(QVector *temp_list, TempGlobalInstance::instance().m_unreaded_messages_list) { for(int i=0; isize(); i++) { UnreadedMessage tmp_message = temp_list->at(i); out<>p>>a>>g>>i>>m>>time; TreeModelItem contact_item; contact_item.m_protocol_name = p; contact_item.m_account_name = a; contact_item.m_parent_name = g; contact_item.m_item_name = i; contact_item.m_item_type = 0; newMessageArrivedTo(contact_item,m,time); } u_file.close(); u_file.remove(); } } void ChatLayerClass::restorePreviousChats() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); QString windows_file = settings.fileName().section('/', 0, -2) + "/owindows2.list"; QFile w_file(windows_file); if ( w_file.open(QIODevice::ReadOnly) ) { QDataStream in(&w_file); while( !in.atEnd() ) { QString p,a,g,i; quint8 type; in>>p>>a>>g>>i>>type; TreeModelItem contact_item; contact_item.m_protocol_name = p; contact_item.m_account_name = a; contact_item.m_item_name = i; contact_item.m_parent_name = g; contact_item.m_item_type = type; createChat(contact_item); } w_file.close(); w_file.remove(); } } void ChatLayerClass::messageDelievered(const TreeModelItem &item, int message_position) { if (m_tabbed_mode) m_tabbed_management->updateWebkit(false); LogsCity::instance().messageDelievered(item, message_position); if (m_tabbed_mode) m_tabbed_management->updateWebkit(true); } void ChatLayerClass::changeOwnNickNameInConference(const TreeModelItem &item, const QString &new_nickname) { LogsCity::instance().changeOwnNickNameInConference(item, new_nickname); } void ChatLayerClass::newServiceMessageArriveTo(const TreeModelItem &item, const QString &message) { if (m_tabbed_mode) m_tabbed_management->updateWebkit(false); LogsCity::instance().addServiceMessage(item,message); if (m_tabbed_mode) m_tabbed_management->updateWebkit(true); } void ChatLayerClass::setConferenceTopic(const TreeModelItem &item, const QString &topic) { if (m_tabbed_mode && m_tabbed_management ) m_tabbed_management->setConferenceTopic(item,topic); else if (!m_tabbed_mode && m_separate_management) m_separate_management->setConferenceTopic(item,topic); } QStringList ChatLayerClass::getConferenceItemsList(const TreeModelItem &item) { return QStringList(); } void ChatLayerClass::addImage(const TreeModelItem &item, const QByteArray &image_raw) { LogsCity::instance().addImage(item,image_raw,true); } void ChatLayerClass::loadHistoryMessages(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); QDateTime last_time = QDateTime::currentDateTime(); QVector *temp_list = TempGlobalInstance::instance().m_unreaded_messages_list.value(identification); if ( temp_list) { for(int i=0; isize(); i++) { UnreadedMessage tmp_message = temp_list->at(i); if(tmp_message.m_date tmp_h_list = m_history_layer->getMessages(item,last_time); foreach(HistoryItem h_item, tmp_h_list) { LogsCity::instance().addMessage(item,h_item.m_message, h_item.m_time,true, h_item.m_in); } } QTextEdit *ChatLayerClass::getEditField(const TreeModelItem &item) { if(m_tabbed_mode) return m_tabbed_management->getEditField(item); else return m_separate_management->getEditField(item); } qutim-0.2.0/src/corelayers/chat/settings/0000755000175000017500000000000011273100754022032 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/chat/settings/chatlayersettings.ui0000644000175000017500000002775011251526352026143 0ustar euroelessareuroelessar ChatSettingsWidget 0 0 417 379 Form 0 0 :/icons/core/general.png:/icons/core/general.png General 4 Tabbed mode true false 4 false Chats and conferences in one window Close button on tabs Tabs are movable Remember openned privates after closing chat window Close tab/message window after sending a message Open tab/message window if received message Don't show events if message window is open Send typing notifications Don't blink in task bar After clicking on tray icon show all unreaded messages Qt::Vertical 20 40 :/icons/core/chat.png:/icons/core/chat.png Chat 4 Webkit mode Send message on enter false Send message on double enter Colorize nicknames in conferences Remove messages from chat view after: false 1 800 200 Qt::Horizontal 40 20 Don't group messages after (sec): false 30 999 300 Qt::Horizontal 40 20 true Text browser mode 4 Show names Timestamp: 1 ( hour:min:sec day/month/year ) ( hour:min:sec ) ( hour:min, full date ) Qt::Vertical 20 40 removeBox toggled(bool) countSpinBox setEnabled(bool) 205 440 362 438 tabbedBox toggled(bool) chatConfBox setEnabled(bool) 162 22 149 50 enterBox toggled(bool) doubleBox setDisabled(bool) 28 278 57 301 doubleBox toggled(bool) enterBox setDisabled(bool) 142 304 184 281 dontGroupBox toggled(bool) secsSpinBox setEnabled(bool) 131 474 379 474 qutim-0.2.0/src/corelayers/chat/settings/chatlayersettings.cpp0000644000175000017500000001523611271376712026311 0ustar euroelessareuroelessar/* ChatLayerSettings Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "chatlayersettings.h" #include "ui_chatlayersettings.h" ChatLayerSettings::ChatLayerSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_ui(new Ui::ChatSettingsWidget), m_profile_name(profile_name) { m_ui->setupUi(this); m_changed = false; loadSettings(); connect(m_ui->tabbedBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->chatConfBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->closeButtonBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->movableBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->rememberBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->closeOnSendBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->openOnNewBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->webkitBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->eventsBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->enterBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->doubleBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->typingBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->blinkBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->showAllBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->removeBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->countSpinBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(m_ui->namesBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->timeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); connect(m_ui->colorizeBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->dontGroupBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->secsSpinBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); } ChatLayerSettings::~ChatLayerSettings() { delete m_ui; } void ChatLayerSettings::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } void ChatLayerSettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("chatwindow"); m_ui->tabbedBox->setChecked(settings.value("tabbed", true).toBool()); m_ui->chatConfBox->setChecked(settings.value("merge", false).toBool()); m_ui->closeButtonBox->setChecked(settings.value("tabsclosable", true).toBool()); m_ui->movableBox->setChecked(settings.value("tabsmovable", true).toBool()); m_ui->rememberBox->setChecked(settings.value("remember", false).toBool()); m_ui->closeOnSendBox->setChecked(settings.value("close", false).toBool()); m_ui->openOnNewBox->setChecked(settings.value("open", false).toBool()); m_ui->webkitBox->setChecked(settings.value("webkit", true).toBool()); m_ui->eventsBox->setChecked(settings.value("events", false).toBool()); m_ui->enterBox->setChecked(settings.value("onenter", false).toBool()); m_ui->doubleBox->setDisabled(m_ui->enterBox->isChecked()); m_ui->doubleBox->setChecked(settings.value("ondoubleenter", false).toBool()); if(m_ui->doubleBox->isChecked()) m_ui->enterBox->setChecked(false); m_ui->typingBox->setChecked(settings.value("typing", true).toBool()); m_ui->blinkBox->setChecked(settings.value("dontblink", false).toBool()); m_ui->showAllBox->setChecked(settings.value("openall", true).toBool()); m_ui->removeBox->setChecked(settings.value("remove", false).toBool()); m_ui->countSpinBox->setValue(settings.value("removecount", 200).toUInt()); m_ui->dontGroupBox->setChecked(settings.value("dontgroup", true).toBool()); m_ui->secsSpinBox->setValue(settings.value("secs", 300).toUInt()); m_ui->timeComboBox->setCurrentIndex(settings.value("timestamp", 1).toUInt()); m_ui->namesBox->setChecked(settings.value("names", true).toBool()); m_ui->colorizeBox->setChecked(settings.value("colorize", false).toBool()); settings.endGroup(); } void ChatLayerSettings::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("chatwindow"); settings.setValue("tabbed", m_ui->tabbedBox->isChecked()); settings.setValue("merge", m_ui->chatConfBox->isChecked()); settings.setValue("tabsclosable", m_ui->closeButtonBox->isChecked()); settings.setValue("tabsmovable", m_ui->movableBox->isChecked()); settings.setValue("remember", m_ui->rememberBox->isChecked()); settings.setValue("close", m_ui->closeOnSendBox->isChecked()); settings.setValue("open", m_ui->openOnNewBox->isChecked()); settings.setValue("webkit", m_ui->webkitBox->isChecked()); settings.setValue("events", m_ui->eventsBox->isChecked()); settings.setValue("onenter", m_ui->enterBox->isChecked()); settings.setValue("ondoubleenter", m_ui->doubleBox->isChecked()); settings.setValue("typing", m_ui->typingBox->isChecked()); settings.setValue("dontblink", m_ui->blinkBox->isChecked()); settings.setValue("openall", m_ui->showAllBox->isChecked()); settings.setValue("remove", m_ui->removeBox->isChecked()); settings.setValue("removecount", m_ui->countSpinBox->value()); settings.setValue("dontgroup", m_ui->dontGroupBox->isChecked()); settings.setValue("secs", m_ui->secsSpinBox->value()); settings.setValue("timestamp",m_ui->timeComboBox->currentIndex()); settings.setValue("names",m_ui->namesBox->isChecked()); settings.setValue("colorize", m_ui->colorizeBox->isChecked()); settings.endGroup(); if ( m_changed ) emit settingsSaved(); m_changed = false; } qutim-0.2.0/src/corelayers/chat/settings/chatlayersettings.h0000644000175000017500000000263511236355476025762 0ustar euroelessareuroelessar/* ChatLayerSettings Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 CHATLAYERSETTINGS_H #define CHATLAYERSETTINGS_H #include namespace Ui { class ChatSettingsWidget; } class ChatLayerSettings : public QWidget { Q_OBJECT Q_DISABLE_COPY(ChatLayerSettings) public: explicit ChatLayerSettings(const QString &profile_name,QWidget *parent = 0); virtual ~ChatLayerSettings(); void saveSettings(); private slots: void widgetStateChanged() { m_changed = true; emit settingsChanged(); } signals: void settingsChanged(); void settingsSaved(); protected: virtual void changeEvent(QEvent *e); private: void loadSettings(); Ui::ChatSettingsWidget *m_ui; QString m_profile_name; bool m_changed; }; #endif // CHATLAYERSETTINGS_H qutim-0.2.0/src/corelayers/chat/tabbedchats.cpp0000644000175000017500000010360611255353326023155 0ustar euroelessareuroelessar/* TabbedChats Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "tabbedchats.h" #include #include TabbedChats::TabbedChats(const QString &profile_name) : m_profile_name(profile_name), m_logs_city(LogsCity::instance()) { m_merge_conf_and_chats = false; m_merged_window.m_tab_bar = 0; m_merged_window.m_main_window = 0; m_merged_window.m_main_layout = 0; m_private_chats_window.m_tab_bar = 0; m_private_chats_window.m_main_window = 0; m_private_chats_window.m_main_layout = 0; m_all_conference_window.m_tab_bar = 0; m_all_conference_window.m_main_window = 0; m_all_conference_window.m_main_layout = 0; m_chat_window = 0; m_conference_window = 0; } TabbedChats::~TabbedChats() { delete m_chat_window; delete m_conference_window; delete m_merged_window.m_tab_bar; delete m_merged_window.m_main_layout; delete m_merged_window.m_main_window; delete m_private_chats_window.m_tab_bar; delete m_private_chats_window.m_main_layout; delete m_private_chats_window.m_main_window; delete m_all_conference_window.m_tab_bar; delete m_all_conference_window.m_main_layout; delete m_all_conference_window.m_main_window; } void TabbedChats::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("chatwindow"); m_merge_conf_and_chats = settings.value("merge", false).toBool(); m_webkit_mode = settings.value("webkit", true).toBool(); m_closable_tabs = settings.value("tabsclosable", true).toBool(); m_movable_tabs = settings.value("tabsmovable", true).toBool(); m_remember_privates = settings.value("remember", false).toBool(); m_close_after_send = settings.value("close", false).toBool(); m_send_on_double_enter = settings.value("ondoubleenter", false).toBool(); m_send_on_enter = m_send_on_double_enter || settings.value("onenter", false).toBool(); m_send_typing_notifications = settings.value("typing", true).toBool(); m_dont_blink = settings.value("dontblink", false).toBool(); settings.endGroup(); } void TabbedChats::createChat(const TreeModelItem &item, const QStringList &item_info,const QStringList &owner_info,bool new_message) { TabbedWindow m_current_window; m_logs_city.createHomeForMe(item,m_webkit_mode, item_info.count() > 0 ? item_info.at(0) : item.m_item_name, owner_info.count() > 0 ? owner_info.at(0) : item.m_account_name, owner_info.count() > 1 ? owner_info.at(1) : "", item_info.count() > 1 ? item_info.at(1) : ""); bool new_tabbed_window_was_created = false; if ( m_merge_conf_and_chats || m_merged_window.m_main_window) { if ( !m_merged_window.m_main_window ) { createTabbedWindow(&m_merged_window); connect(m_merged_window.m_main_window, SIGNAL(destroyed(QObject*)), this, SLOT(destroyMergedWindow(QObject*))); restoreSizeAndPosition(m_merged_window.m_main_window,MergedWindow); new_tabbed_window_was_created = true; m_merged_window.m_main_window->show(); Q_REGISTER_EVENT(event_tabbed_common_window_created, "Core/ChatWindow/TabbedCommonWindowCreated"); Event(event_tabbed_common_window_created, 1, m_merged_window.m_main_window).send(); } if ( item.m_item_type != 32) { if ( !m_chat_window ) { m_chat_window = new ChatWindow(m_profile_name,m_webkit_mode); m_chat_window->setOwnerItem(item); m_chat_window->setItemData(item_info,false); m_chat_window->setItemData(owner_info,true); setWindowOptions(m_chat_window); connectGeneralWindow(m_chat_window); if(!m_conference_window) { m_merged_window.m_main_layout->addWidget(m_chat_window); m_merged_window.m_main_window->setProperty("m_type",0); } } else m_chat_window->windowActivatedByUser(m_merged_window.m_main_window); } else { if ( !m_conference_window) { m_conference_window = new ConferenceWindow(m_profile_name, m_webkit_mode); m_conference_window->setOwnerItem(item); setWindowOptions(m_conference_window); connectGeneralWindow(m_conference_window); if(!m_chat_window) { m_merged_window.m_main_layout->addWidget(m_conference_window); m_merged_window.m_main_window->setProperty("m_type",32); } } else m_conference_window->windowActivatedByUser(m_merged_window.m_main_window); } m_current_window = m_merged_window; } else { if ( item.m_item_type != 32 ) { if ( !m_private_chats_window.m_main_window ) { createTabbedWindow(&m_private_chats_window); connect(m_private_chats_window.m_main_window, SIGNAL(destroyed(QObject*)), this, SLOT(destroyPrivatesWindow(QObject*))); restoreSizeAndPosition(m_private_chats_window.m_main_window,PrivatesWindow); m_private_chats_window.m_main_window->show(); new_tabbed_window_was_created = true; Q_REGISTER_EVENT(event_tabbed_chats_window_created, "Core/ChatWindow/TabbedChatsWindowCreated"); Event(event_tabbed_chats_window_created, 1, m_merged_window.m_main_window).send(); m_chat_window = new ChatWindow(m_profile_name,m_webkit_mode); setWindowOptions(m_chat_window); connectGeneralWindow(m_chat_window); m_chat_window->setOwnerItem(item); m_chat_window->setItemData(item_info,false); m_chat_window->setItemData(owner_info,true); m_private_chats_window.m_main_layout->addWidget(m_chat_window); } else m_chat_window->windowActivatedByUser(m_private_chats_window.m_main_window); m_current_window = m_private_chats_window; } else { if ( !m_all_conference_window.m_main_window) { createTabbedWindow(&m_all_conference_window); connect(m_all_conference_window.m_main_window, SIGNAL(destroyed(QObject*)), this, SLOT(destroyConferencesWindow(QObject*))); restoreSizeAndPosition(m_all_conference_window.m_main_window,ConferencesWindow); m_all_conference_window.m_main_window->show(); new_tabbed_window_was_created = true; Q_REGISTER_EVENT(event_tabbed_confs_window_created, "Core/ChatWindow/TabbedConfsWindowCreated"); Event(event_tabbed_confs_window_created, 1, m_merged_window.m_main_window).send(); m_conference_window = new ConferenceWindow(m_profile_name, m_webkit_mode); setWindowOptions(m_conference_window); connectGeneralWindow(m_conference_window); m_conference_window->setOwnerItem(item); m_all_conference_window.m_main_layout->addWidget(m_conference_window); } else m_conference_window->windowActivatedByUser(m_all_conference_window.m_main_window); m_current_window = m_all_conference_window; } } if ( new_tabbed_window_was_created && m_remember_privates ) emit restorePreviousTabs(); if ( m_current_window.m_main_window ) { int new_tab = -1; if ( item_info.count() > 0 ) { if(!new_message) m_current_window.m_main_window->setWindowTitle(item_info.at(0)); new_tab = m_current_window.m_tab_bar->addTab(item_info.at(0)); } else { if(!new_message) m_current_window.m_main_window->setWindowTitle(item.m_item_name); new_tab = m_current_window.m_tab_bar->addTab(item.m_item_name); } if ( item.m_item_type == 0 ) { m_current_window.m_tab_bar->setTabIcon(new_tab,TempGlobalInstance::instance().getContactIcon(item,0)); } else { m_current_window.m_tab_bar->setTabIcon(new_tab,SystemsCity::IconManager()->getIcon("chat")); } UserSpace *current_user_space = new UserSpace; current_user_space->m_item = item; current_user_space->m_identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( item.m_item_type != 32 ) { current_user_space->m_item_info = item_info; current_user_space->m_owner_info = owner_info; } current_user_space->m_state = 0; m_current_window.m_tab_bar->setTabData(new_tab,reinterpret_cast(current_user_space)); if(!new_message) { m_current_window.m_tab_bar->setCurrentIndex(new_tab); m_current_window.m_main_window->setWindowIcon(m_current_window.m_tab_bar->tabIcon(new_tab)); } } } void TabbedChats::connectGeneralWindow(GeneralWindow *general_window) { connect(general_window,SIGNAL(windowFocused()), this, SLOT(windowActivatedByUser())); connect(general_window->m_event_eater, SIGNAL(closeCurrentChat()), this, SLOT(closeCurrentChat())); connect(general_window->m_event_eater, SIGNAL(changeTab(int)), this, SLOT(changeTab(int))); } void TabbedChats::destroyMergedWindow(QObject *o) { QWidget *tmp_win = qobject_cast(o); if ( tmp_win ) saveSizeAndPosition(tmp_win, MergedWindow); m_chat_window = 0; m_conference_window = 0; m_merged_window.m_tab_bar = 0; m_merged_window.m_main_layout = 0; m_merged_window.m_main_window = 0; Q_REGISTER_EVENT(event_tabbed_common_window_deleted, "Core/ChatWindow/TabbedCommonWindowDeleted"); Event(event_tabbed_common_window_deleted).send(); } void TabbedChats::destroyPrivatesWindow(QObject *o) { QWidget *tmp_win = qobject_cast(o); if ( tmp_win ) saveSizeAndPosition(tmp_win, PrivatesWindow); m_chat_window = 0; m_private_chats_window.m_tab_bar = 0; m_private_chats_window.m_main_layout = 0; m_private_chats_window.m_main_window = 0; Q_REGISTER_EVENT(event_tabbed_chats_window_deleted, "Core/ChatWindow/TabbedChatsWindowDeleted"); Event(event_tabbed_chats_window_deleted).send(); } void TabbedChats::destroyConferencesWindow(QObject *o) { QWidget *tmp_win = qobject_cast(o); if ( tmp_win ) saveSizeAndPosition(tmp_win, ConferencesWindow); m_conference_window = 0; m_all_conference_window.m_tab_bar = 0; m_all_conference_window.m_main_layout = 0; m_all_conference_window.m_main_window = 0; Q_REGISTER_EVENT(event_tabbed_confs_window_deleted, "Core/ChatWindow/TabbedConfsWindowDeleted"); Event(event_tabbed_confs_window_deleted).send(); } void TabbedChats::tabChanged(int index) { if ( m_merge_conf_and_chats || m_merged_window.m_main_window) { if ( m_merged_window.m_main_window) { m_merged_window.m_main_window->setWindowIcon(m_merged_window.m_tab_bar->tabIcon(index)); UserSpace *tmp_space = reinterpret_cast(m_merged_window.m_tab_bar->tabData(index).value()); if ( tmp_space ) { if ( tmp_space->m_item.m_item_type != 32 && m_merged_window.m_main_window->property("m_type").toUInt() != 0 ) { m_merged_window.m_main_layout->removeWidget(m_conference_window); m_conference_window->hide(); m_merged_window.m_main_layout->addWidget(m_chat_window); if ( !m_chat_window->isVisible() ) m_chat_window->show(); m_merged_window.m_main_window->setProperty("m_type",0); } else if ( tmp_space->m_item.m_item_type == 32 && m_merged_window.m_main_window->property("m_type").toUInt() != 32 ) { m_merged_window.m_main_layout->removeWidget(m_chat_window); m_chat_window->hide(); m_merged_window.m_main_layout->addWidget(m_conference_window); if ( !m_conference_window->isVisible() ) m_conference_window->show(); m_merged_window.m_main_window->setProperty("m_type",32); } if ( tmp_space->m_item.m_item_type != 32 ) { m_chat_window->setOwnerItem(tmp_space->m_item); m_chat_window->setItemData(tmp_space->m_item_info,false); m_chat_window->setItemData(tmp_space->m_owner_info, true); if (tmp_space->m_state & 0x1) { tmp_space->m_state &= 0x10; TempGlobalInstance::instance().waitingItemActivated(tmp_space->m_item); m_merged_window.m_tab_bar->setTabIcon(index, tmp_space->m_item.m_item_type == 33 ? TempGlobalInstance::instance().getIcon("chat"):TempGlobalInstance::instance().getContactIcon(tmp_space->m_item,0)); m_merged_window.m_tab_bar->setTabTextColor(index, getColorForState(tmp_space->m_state)); } m_chat_window->contactTyping(tmp_space->m_state & 0x10); } else { m_conference_window->setOwnerItem(tmp_space->m_item); m_conference_window->setItemData(tmp_space->m_owner_info, true); m_merged_window.m_tab_bar->setTabTextColor(index,QColor()); m_merged_window.m_tab_bar->setTabText(index,tmp_space->m_item.m_item_name); } m_merged_window.m_main_window->setWindowIcon(m_merged_window.m_tab_bar->tabIcon(index)); m_merged_window.m_main_window->setWindowTitle(m_merged_window.m_tab_bar->tabText(index)); Q_REGISTER_EVENT(event_tab_activated_by_user, "Core/ChatWindow/TabActivatedByUser"); Event(event_tab_activated_by_user, 2, &tmp_space->m_item, m_merged_window.m_tab_bar->winId()).send(); } } } else { UserSpace *tmp_space = reinterpret_cast(qobject_cast(sender())->tabData(index).value()); if ( tmp_space ) { if ( tmp_space->m_item.m_item_type != 32 && m_private_chats_window.m_main_window ) { m_private_chats_window.m_main_window->setWindowIcon(m_private_chats_window.m_tab_bar->tabIcon(index)); m_chat_window->setOwnerItem(tmp_space->m_item); m_chat_window->setItemData(tmp_space->m_item_info,false); m_chat_window->setItemData(tmp_space->m_owner_info, true); if (tmp_space->m_state & 0x1) { tmp_space->m_state &= 0x10; TempGlobalInstance::instance().waitingItemActivated(tmp_space->m_item); m_private_chats_window.m_tab_bar->setTabIcon(index,tmp_space->m_item.m_item_type == 33 ? TempGlobalInstance::instance().getIcon("chat"):TempGlobalInstance::instance().getContactIcon(tmp_space->m_item,0)); m_private_chats_window.m_tab_bar->setTabTextColor(index, getColorForState(tmp_space->m_state)); } m_chat_window->contactTyping(tmp_space->m_state & 0x10); m_private_chats_window.m_main_window->setWindowIcon(m_private_chats_window.m_tab_bar->tabIcon(index)); m_private_chats_window.m_main_window->setWindowTitle(m_private_chats_window.m_tab_bar->tabText(index)); Q_REGISTER_EVENT(event_tab_activated_by_user, "Core/ChatWindow/TabActivatedByUser"); Event(event_tab_activated_by_user, 2, &tmp_space->m_item, m_private_chats_window.m_tab_bar->winId()).send(); } else if ( tmp_space->m_item.m_item_type == 32 && m_all_conference_window.m_main_window ) { m_all_conference_window.m_main_window->setWindowIcon(m_all_conference_window.m_tab_bar->tabIcon(index)); m_conference_window->setOwnerItem(tmp_space->m_item); m_conference_window->setItemData(tmp_space->m_owner_info, true); m_all_conference_window.m_tab_bar->setTabTextColor(index,QColor()); m_all_conference_window.m_tab_bar->setTabText(index,tmp_space->m_item.m_item_name); m_all_conference_window.m_main_window->setWindowTitle(m_all_conference_window.m_tab_bar->tabText(index)); Q_REGISTER_EVENT(event_tab_activated_by_user, "Core/ChatWindow/TabActivatedByUser"); Event(event_tab_activated_by_user, 2, &tmp_space->m_item, m_all_conference_window.m_tab_bar->winId()).send(); } } } } void TabbedChats::createTabbedWindow(TabbedWindow *tabbed_window) { tabbed_window->m_tab_bar = new QTabBar; tabbed_window->m_main_window = new QWidget; tabbed_window->m_main_layout = new QVBoxLayout; tabbed_window->m_main_layout->setMargin(0); tabbed_window->m_tab_bar->installEventFilter(this); tabbed_window->m_main_layout->addWidget(tabbed_window->m_tab_bar); tabbed_window->m_main_window->setLayout(tabbed_window->m_main_layout); tabbed_window->m_main_window->setAttribute(Qt::WA_QuitOnClose, false); tabbed_window->m_main_window->setAttribute(Qt::WA_DeleteOnClose, true); connect(tabbed_window->m_tab_bar, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); connect(tabbed_window->m_tab_bar, SIGNAL(destroyed()), this, SLOT(closeAllTabs())); #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) // tabbed_window->m_main_window->setAttribute(Qt::WA_TranslucentBackground, true); tabbed_window->m_tab_bar->setTabsClosable(m_closable_tabs); tabbed_window->m_tab_bar->setMovable(m_movable_tabs); connect(tabbed_window->m_tab_bar, SIGNAL(tabCloseRequested(int)), this, SLOT(tabClosed(int))); #endif } void TabbedChats::tabClosed(int index) { deleteTabData(qobject_cast(sender()), index); } void TabbedChats::closeAllTabs() { QTabBar *tmp_bar = reinterpret_cast(sender()); if ( tmp_bar && tmp_bar->count()) { //Prepare for saving openned chats QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); QString windows_file = settings.fileName().section('/', 0, -2) + "/owindows2.list"; QFile w_file(windows_file); bool yes_you_can_write_your_chat_info = w_file.open(QIODevice::WriteOnly); QDataStream out; if (yes_you_can_write_your_chat_info) out.setDevice(&w_file); TempGlobalInstance &tmp_tgi = TempGlobalInstance::instance(); for( int i = 0; i < tmp_bar->count(); i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space ){ if ( yes_you_can_write_your_chat_info && tmp_space->m_item.m_item_type != 32) out << tmp_space->m_item.m_protocol_name << tmp_space->m_item.m_account_name << tmp_space->m_item.m_parent_name << tmp_space->m_item.m_item_name << tmp_space->m_item.m_item_type; m_logs_city.destroyMyHome(tmp_space->m_item,true); tmp_tgi.chatClosed(tmp_space->m_item); delete tmp_space; } } if (yes_you_can_write_your_chat_info) w_file.close(); } } void TabbedChats::deleteTabData(QTabBar *tab_bar,int index) { if ( index < 0 || index >= tab_bar->count() ) return; UserSpace *tmp_space = reinterpret_cast(tab_bar->tabData(index).value()); if ( tmp_space ) { TreeModelItem tmp_item = tmp_space->m_item; delete tmp_space; tab_bar->removeTab(index); if ( !tab_bar->count() ) { if ( m_merge_conf_and_chats || m_merged_window.m_main_window) m_merged_window.m_main_window->close(); else { if ( tmp_item.m_item_type !=32 && m_private_chats_window.m_main_window) m_private_chats_window.m_main_window->close(); else if ( tmp_item.m_item_type == 32 && m_all_conference_window.m_main_window) m_all_conference_window.m_main_window->close(); } } else if ( m_merge_conf_and_chats || m_merged_window.m_main_window ) { bool i_am_last_item_for_my_type = true; bool i_am_conference = tmp_item.m_item_type == 32; for(int i = 0; i < tab_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tab_bar->tabData(i).value()); if(!tmp_space) continue; bool it_is_conference = tmp_space->m_item.m_item_type == 32; if ( i_am_conference == it_is_conference) i_am_last_item_for_my_type = false; } if (i_am_last_item_for_my_type) { if ( tmp_item.m_item_type != 32 ) { m_chat_window->close(); m_chat_window = 0; } else { m_conference_window->close(); m_conference_window = 0; } } } m_logs_city.destroyMyHome(tmp_item, !tab_bar->count()); TempGlobalInstance::instance().chatClosed(tmp_item); Q_REGISTER_EVENT(event_tab_closed, "Core/ChatWindow/TabClosed"); Event(event_tab_closed, 1, &tmp_item).send(); } } QTabBar *TabbedChats::getBarForItemType(int type) { if ( m_merge_conf_and_chats || m_merged_window.m_tab_bar) return m_merged_window.m_tab_bar; else { if ( type !=32 && m_private_chats_window.m_tab_bar) return m_private_chats_window.m_tab_bar; else if ( type == 32 && m_all_conference_window.m_tab_bar) return m_all_conference_window.m_tab_bar; } // FIXME: There were no return, should it be NULL? return 0; } QWidget *TabbedChats::getMainWindowForItemType(int type) { if ( m_merge_conf_and_chats || m_merged_window.m_main_window) return m_merged_window.m_main_window; else { if ( type !=32 && m_private_chats_window.m_main_window) return m_private_chats_window.m_main_window; else if ( type == 32 && m_all_conference_window.m_main_window) return m_all_conference_window.m_main_window; } // FIXME: There were no return, should it be NULL? return 0; } GeneralWindow *TabbedChats::getGeneralWindowForItemType(int type) { if ( type != 32) return m_chat_window; else return m_conference_window; } void TabbedChats::activateWindow(const TreeModelItem &item,bool new_message) { QTabBar *tmp_bar = getBarForItemType(item.m_item_type); QWidget *tmp_main_window = getMainWindowForItemType(item.m_item_type); if ( m_chat_window ) m_chat_window->windowActivatedByUser(tmp_main_window); else if ( m_conference_window ) m_conference_window->windowActivatedByUser(tmp_main_window); if ( tmp_bar && !new_message) { for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( tmp_space && tmp_space->m_identification == identification){ tmp_bar->setCurrentIndex(i); return; } } } } void TabbedChats::contactChangeHisStatus(const TreeModelItem &item, const QIcon &icon) { QTabBar *tmp_bar = getBarForItemType(item.m_item_type); QWidget *tmp_main_window = getMainWindowForItemType(item.m_item_type); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( tmp_bar ) { for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space && tmp_space->m_identification == identification) { tmp_bar->setTabIcon(i,icon); if ( tmp_bar->currentIndex() == i) tmp_main_window->setWindowIcon(icon); return; } } } } void TabbedChats::contactChangeHisClient(const TreeModelItem &item) { QTabBar *tmp_bar = getBarForItemType(item.m_item_type); GeneralWindow *tmp_general = getGeneralWindowForItemType(item.m_item_type); QWidget *tmp_main_window = getMainWindowForItemType(item.m_item_type); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( tmp_bar ) { for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space && tmp_space->m_identification == identification) { tmp_space->m_item_info = SystemsCity::PluginSystem()->getAdditionalInfoAboutContact(item); if(tmp_bar->currentIndex() == i && tmp_general) tmp_general->setItemData(tmp_space->m_item_info, false); return; } } } } bool TabbedChats::checkForActivation(const TreeModelItem &item, bool just_check) { int tmp_type = item.m_item_type == 34 ? 32 : item.m_item_type; QTabBar *tmp_bar = getBarForItemType(tmp_type); QWidget *tmp_main_window = getMainWindowForItemType(tmp_type); GeneralWindow *tmp_general = getGeneralWindowForItemType(tmp_type); QString identification; if ( item.m_item_type != 34) identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); else identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( tmp_bar ) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(tmp_bar->currentIndex()).value()); if (tmp_general && tmp_space && tmp_space->m_identification == identification) tmp_general->checkForScrollBarMaximum(); if (tmp_space && tmp_space->m_identification == identification && tmp_main_window && !(!tmp_main_window->isActiveWindow() || tmp_main_window->isMinimized())) return false; if ( just_check ) return false; if ( tmp_general && !tmp_general->m_waiting_for_activation ) { if( item.m_item_type != 32 && item.m_item_type != 34 && !m_dont_blink) qApp->alert(tmp_main_window, 0); tmp_general->m_waiting_for_activation = true; } for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space && tmp_space->m_identification == identification){ if(item.m_item_type != 32 && item.m_item_type != 34) { tmp_space->m_state |= 0x01; tmp_bar->setTabTextColor(i,getColorForState(tmp_space->m_state)); tmp_bar->setTabIcon(i,TempGlobalInstance::instance().getIcon("message")); } else { tmp_bar->setTabText(i,"*" +( item.m_item_type == 34?item.m_parent_name:item.m_item_name)); if ( tmp_bar->currentIndex() == i) tmp_main_window->setWindowTitle("*" + ( item.m_item_type == 34?item.m_parent_name:item.m_item_name)); } Q_REGISTER_EVENT(event_tab_alert, "Core/ChatWindow/TabAlert"); Event(event_tab_alert, 2, &tmp_space->m_item, tmp_bar->winId()).send(); } } return true; } return false; } QColor TabbedChats::getColorForState(quint8 state) { if ( state & 0x01 ) return QColor(Qt::red); else if (state & 0x10) return QColor(Qt::darkGreen); else return QColor(); } void TabbedChats::windowActivatedByUser() { GeneralWindow *tmp_win = qobject_cast(sender()); if ( tmp_win ) { TreeModelItem item = tmp_win->m_item; QTabBar *tmp_bar = getBarForItemType(item.m_item_type); if ( tmp_bar ) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); int current_tab = tmp_bar->currentIndex(); UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(current_tab).value()); if ( tmp_space && tmp_space->m_identification == identification ) { if ( item.m_item_type != 32 ) { TempGlobalInstance::instance().waitingItemActivated(item); tmp_bar->setTabIcon(current_tab,tmp_space->m_item.m_item_type == 33 ? TempGlobalInstance::instance().getIcon("chat") : TempGlobalInstance::instance().getContactIcon(tmp_space->m_item,0)); tmp_space->m_state &= 0x10; tmp_bar->setTabTextColor(current_tab,getColorForState(tmp_space->m_state)); } else { QWidget *tmp_main = getMainWindowForItemType(32); tmp_main->setWindowTitle(item.m_item_name); tmp_bar->setTabText(current_tab,item.m_item_name); LogsCity::instance().notifyAboutFocusingConference(item); } Q_REGISTER_EVENT(event_tab_activated_by_user, "Core/ChatWindow/TabActivatedByUser"); Event(event_tab_activated_by_user, 2, &item, tmp_bar->winId()).send(); } } } } void TabbedChats::setItemTypingState(const TreeModelItem &item, TypingAttribute state) { if(item.m_item_type != 32 ) { QTabBar *tmp_bar = getBarForItemType(item.m_item_type); if(tmp_bar) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space && tmp_space->m_identification == identification){ if ( (bool)state ) tmp_space->m_state |= 0x10; else tmp_space->m_state &= 0x1; tmp_bar->setTabTextColor(i,getColorForState(tmp_space->m_state)); if (tmp_bar->currentIndex() == i ) { GeneralWindow *tmp_win = getGeneralWindowForItemType(item.m_item_type); if(tmp_win) tmp_win->contactTyping((bool)state); } } } } } } void TabbedChats::changeId(const TreeModelItem &item, const QString &new_id) { QTabBar *tmp_bar = getBarForItemType(item.m_item_type); GeneralWindow *tmp_general = getGeneralWindowForItemType(item.m_item_type); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name, item.m_account_name, item.m_item_name); QString new_identification = QString("%1.%2.%3").arg(item.m_protocol_name, item.m_account_name, new_id); UserSpace *space = 0; int space_i = -1; if ( tmp_bar ) { for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space && tmp_space->m_identification == identification) { space = tmp_space; space_i = i; } else if ( tmp_space && tmp_space->m_identification == new_identification) return; } } if( space ) { space->m_identification = new_identification; space->m_item.m_item_name = new_id; if ( tmp_bar->currentIndex() == space_i && tmp_general) tmp_general->m_item.m_item_name = new_id; LogsCity::instance().moveMyHome( identification, new_identification ); } } void TabbedChats::closeCurrentChat() { EventEater *tmp_eater = qobject_cast(sender()); if ( tmp_eater ) { QTabBar *tmp_bar = getBarForItemType(tmp_eater->m_item.m_item_type); if ( tmp_bar ) deleteTabData(tmp_bar,tmp_bar->currentIndex()); } else { GeneralWindow *tmp_win = qobject_cast(sender()); if ( tmp_win ) { QTabBar *tmp_bar = getBarForItemType(tmp_win->m_item.m_item_type); if ( tmp_bar ) deleteTabData(tmp_bar,tmp_bar->currentIndex()); } } } void TabbedChats::changeTab(int offset) { EventEater *tmp_eater = qobject_cast(sender()); if ( tmp_eater ) { QTabBar *tmp_bar = getBarForItemType(tmp_eater->m_item.m_item_type); if ( tmp_bar ) { int cur_tab = tmp_bar->currentIndex(); cur_tab+=offset; if(cur_tab<0) cur_tab = tmp_bar->count()-1; if(cur_tab>=tmp_bar->count()) cur_tab = 0; tmp_bar->setCurrentIndex(cur_tab); windowActivatedByUser(); } } } bool TabbedChats::eventFilter(QObject *obj, QEvent *event) { if( event->type() == QEvent::MouseButtonDblClick || ( event->type() == QEvent::MouseButtonRelease && ( static_cast(event)->button() == Qt::MidButton ) ) ) { if ( QTabBar *tmp_tab = qobject_cast(obj) ) { int tab_index = tmp_tab->tabAt(static_cast(event)->pos()); if (tab_index > -1) deleteTabData(tmp_tab,tab_index); } } else if( event->type() == QEvent::ContextMenu ) { if ( QTabBar *tmp_tab = qobject_cast(obj) ) { QPoint pos = static_cast(event)->pos(); int tab_index = tmp_tab->tabAt(pos); if ( tab_index < 0 || tab_index >= tmp_tab->count() ) return QObject::eventFilter(obj, event); pos = tmp_tab->mapToGlobal( pos ); UserSpace *tmp_space = reinterpret_cast(tmp_tab->tabData(tab_index).value()); if( tmp_space->m_item.m_item_type == 32 ) { TempGlobalInstance::instance().showConferenceMenu(tmp_space->m_item,pos); } else { Q_REGISTER_EVENT( context_menu, "Core/ContactList/ContextMenu" ); if( tmp_space ) Event( context_menu, 2, &tmp_space->m_item, &pos ).send(); } } } return QObject::eventFilter(obj, event); } void TabbedChats::saveSizeAndPosition(QWidget *win, TabbedWindowType type) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); switch(type) { case MergedWindow: settings.beginGroup("merged");break; case ConferencesWindow: settings.beginGroup("conference");break; default:settings.beginGroup("chatwindow"); } settings.setValue("position", win->pos()); settings.setValue("size", win->size()); settings.endGroup(); } void TabbedChats::restoreSizeAndPosition(QWidget *win, TabbedWindowType type) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); switch(type) { case MergedWindow: settings.beginGroup("merged");break; case ConferencesWindow: settings.beginGroup("conference");break; default:settings.beginGroup("chatwindow"); } win->move(settings.value("position", QPoint(0,0)).toPoint()); win->resize(settings.value("size", QSize(400,300)).toSize()); settings.endGroup(); } void TabbedChats::setWindowOptions(GeneralWindow *win) { win->setOptions(m_close_after_send, m_send_on_enter, m_send_on_double_enter,m_send_typing_notifications); connect(win, SIGNAL(closeMe()), this, SLOT(closeCurrentChat())); } void TabbedChats::alertWindow(const TreeModelItem &item) { if ( m_conference_window ) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); QWidget *tmp_win = getMainWindowForItemType(32); GeneralWindow *tmp_general = getGeneralWindowForItemType(32); QTabBar *tmp_bar = getBarForItemType(32); if (tmp_bar) { for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space && tmp_space->m_identification == identification && (i != tmp_bar->currentIndex())){ tmp_bar->setTabTextColor(i,Qt::red); } } } qApp->alert(tmp_win, 0); } } void TabbedChats::setConferenceTopic(const TreeModelItem &item, const QString &topic) { if ( m_conference_window ) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); QWidget *tmp_win = getMainWindowForItemType(32); GeneralWindow *tmp_general = getGeneralWindowForItemType(32); QTabBar *tmp_bar = getBarForItemType(32); if (tmp_bar) { for(int i = 0; i < tmp_bar->count();i++) { UserSpace *tmp_space = reinterpret_cast(tmp_bar->tabData(i).value()); if ( tmp_space && tmp_space->m_identification == identification){ QStringList tmp; tmp<m_owner_info = tmp; if ( i == tmp_bar->currentIndex() ) tmp_general->setItemData(tmp,true); } } } qApp->alert(tmp_win, 0); } } QTextEdit *TabbedChats::getEditField(const TreeModelItem &item) { GeneralWindow *window = getGeneralWindowForItemType(item.m_item_type); if(window && window->compareItem(item)) return window->getEditField(); return 0; } void TabbedChats::updateWebkit(bool update) { if (m_chat_window) m_chat_window->updateWebkit(update); if (m_conference_window) m_conference_window->updateWebkit(update); } qutim-0.2.0/src/corelayers/chat/movielabel.cpp0000644000175000017500000000167311236355476023040 0ustar euroelessareuroelessar/* movieLabel Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "movielabel.h" movieLabel::movieLabel(QWidget *parent) : QLabel(parent) { } movieLabel::~movieLabel() { } void movieLabel::mousePressEvent( QMouseEvent * event ) { emit sendMovieTip(toolTip()); QLabel::mousePressEvent(event); } qutim-0.2.0/src/corelayers/chat/conferenceitemmodel.cpp0000644000175000017500000001646611236355476024736 0ustar euroelessareuroelessar/* Conference Item Model Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "conferenceitemmodel.h" ConferenceItemModel::ConferenceItemModel(ConfContactList *contact_list, QObject *parent) : QAbstractItemModel(parent) { m_contact_list = contact_list; } ConferenceItemModel::~ConferenceItemModel() { } QVariant ConferenceItemModel::data(const QModelIndex &index, int role) const { if(index.column()!=0) return QVariant(); if (!index.isValid()) return QVariant(); ConferenceItem *item = getItem(index); return item->data(role); } QVariant ConferenceItemModel::headerData(int section, Qt::Orientation orientation, int role) const { if(section!=0) return QVariant(); if (orientation == Qt::Horizontal && role == Qt::DisplayRole && section==0) return QString("test"); return QVariant(); } QModelIndex ConferenceItemModel::index(int row, int column, const QModelIndex &parent) const { if(parent.isValid() || m_item_list.size()<=row || row<0) return QModelIndex(); else return createIndex(row, column, m_item_list[row]); } QModelIndex ConferenceItemModel::parent(const QModelIndex &index) const { return QModelIndex(); } int ConferenceItemModel::rowCount(const QModelIndex &parent) const { return m_item_list.size(); } int ConferenceItemModel::columnCount(const QModelIndex &parent) const { return 1; } Qt::ItemFlags ConferenceItemModel::flags(const QModelIndex &index) const { return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } bool ConferenceItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role) { return false; } bool ConferenceItemModel::insertColumns(int position, int columns, const QModelIndex &parent) { return false; } bool ConferenceItemModel::removeColumns(int position, int columns, const QModelIndex &parent) { return false; } bool ConferenceItemModel::insertRows(int position, int rows, const QModelIndex &parent) { if(position>m_item_list.size()+1) return false; beginInsertRows(parent, position, position + rows - 1); for(int i=position;im_item_list.size()) return false; beginRemoveRows(parent, position, position + rows - 1); for(int i=0;idata(Qt::DisplayRole).toString()); delete m_item_list[position]; m_item_list.removeAt(position); } endRemoveRows(); return true; } bool ConferenceItemModel::addBuddy(const QString & name) { //if(!insertRows(0,1,QModelIndex())) // return false; if(m_item_hash.contains(name)) return false; ConferenceItem *item = new ConferenceItem(name, m_contact_list); m_item_hash[name] = item; int pos = position( item ); beginInsertRows( QModelIndex(), pos, pos ); m_item_list.insert( pos, item ); endInsertRows(); //position(item); return true; } bool ConferenceItemModel::removeBuddy(const QString & name) { ConferenceItem *item = m_item_hash.value(name,0); if(!item) return false; return removeRows(m_item_list.indexOf(item),1,QModelIndex()); } bool ConferenceItemModel::renameBuddy(const QString & name, const QString & new_name) { ConferenceItem *item = m_item_hash.value(name,0); if(!item) return false; m_item_hash.remove(name); item->setData(new_name,Qt::DisplayRole); m_item_hash.insert(new_name,item); position(item); return true; } bool ConferenceItemModel::setItemIcon(const QString & name, const QIcon & icon, int icon_position) { ConferenceItem *item = m_item_hash.value(name,0); if(!item) return false; item->setImage(icon, icon_position); if(icon_position == 1) { int pos = m_item_list.indexOf(item); beginRemoveRows( QModelIndex(), pos, pos ); m_item_list.removeAt( pos ); endRemoveRows(); beginInsertRows( QModelIndex(), pos, pos ); m_item_list.insert( pos, item ); endInsertRows(); } else { QModelIndex index = createIndex(m_item_list.indexOf(item),0,item); emit dataChanged(index,index); } return true; } bool ConferenceItemModel::setItemRow(const QString & name, const QList & var, int row) { ConferenceItem *item = m_item_hash.value(name,0); if(!item) return false; item->setRow(QVariant(var), row); QModelIndex index = createIndex(m_item_list.indexOf(item),0,item); emit dataChanged(index,index); changePersistentIndex( index, index ); return true; } bool ConferenceItemModel::setItemStatus(const QString & name, const QIcon & icon, const QString & status, int mass) { ConferenceItem *item = m_item_hash.value(name,0); if(!item) return false; item->setStatus(status, icon, mass); int old_pos = m_item_list.indexOf( item ); int pos = position( item ); QModelIndex old_index = createIndex( old_pos, 0, item ); if( old_pos == pos ) { emit dataChanged( old_index, old_index ); return true; } QModelIndex new_index = createIndex( pos, 0, item ); m_item_list.move( old_pos, pos ); changePersistentIndex( old_index, new_index ); return true; } bool ConferenceItemModel::setItemRole(const QString & name, const QIcon & icon, const QString & role, int mass) { ConferenceItem *item = m_item_hash.value(name,0); if(!item) return false; item->setRole(role, icon, mass); int old_pos = m_item_list.indexOf( item ); int pos = position( item ); QModelIndex old_index = createIndex( old_pos, 0, item ); if( old_pos == pos ) { emit dataChanged( old_index, old_index ); return true; } QModelIndex new_index = createIndex( pos, 0, item ); m_item_list.move( old_pos, pos ); changePersistentIndex( old_index, new_index ); return true; } bool ConferenceItemModel::setData(const QModelIndex &index, const QVariant &value, int role) { if(index.column()!=0) return false; ConferenceItem *item = getItem(index); bool result = item->setData( value, role ); if( result ) emit dataChanged( index, index ); return result; } ConferenceItem *ConferenceItemModel::getItem(const QModelIndex &index) const { if (index.isValid()){ ConferenceItem *item = static_cast(index.internalPointer()); if (item) return item; } return 0; } int ConferenceItemModel::position(ConferenceItem *item) { int mass = item->getMass(); int k = 0; QString string = item->data(Qt::DisplayRole).toString(); for(int i=0;igetMass(); if( m_item_list[i] == item ) k = -1; else if( (item_mass>mass) || (item_mass==mass && m_item_list[i]->data (Qt::DisplayRole).toString().compare(string,Qt::CaseInsensitive)>0) ) { return i + k; } } return m_item_list.size() + k; } QStringList ConferenceItemModel::getUsers() { return m_item_hash.keys(); } qutim-0.2.0/src/corelayers/chat/chatforms/0000755000175000017500000000000011273100754022160 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/chat/chatforms/chatform.ui0000644000175000017500000003112611251526352024327 0ustar euroelessareuroelessar ChatForm 0 0 547 324 Qt::DefaultContextMenu Form 4 Qt::Vertical 22 22 Contact history :/icons/crystal_project/history.png:/icons/crystal_project/history.png Ctrl+H true 22 22 Emoticon menu :/icons/crystal_project/emoticon.png:/icons/crystal_project/emoticon.png Ctrl+M QToolButton::InstantPopup true 22 22 Send image < 7,6 KB :/icons/crystal_project/image.png:/icons/crystal_project/image.png Ctrl+I true 22 22 Send file :/icons/crystal_project/save_all.png:/icons/crystal_project/save_all.png Ctrl+F true 22 22 Swap layout :/icons/crystal_project/translate.png:/icons/crystal_project/translate.png Ctrl+T true Qt::Horizontal 40 20 0 0 20 20 20 20 0 0 20 20 20 20 Qt::AlignCenter 22 22 Contact information :/icons/crystal_project/contactinfo.png:/icons/crystal_project/contactinfo.png Ctrl+I true 0 30 false 22 22 Send message on enter :/icons/crystal_project/key_enter.png:/icons/crystal_project/key_enter.png true true 22 22 Send typing notification :/icons/crystal_project/typing.png:/icons/crystal_project/typing.png true true 22 22 Quote selected text :/icons/crystal_project/quote.png:/icons/crystal_project/quote.png Ctrl+Q true 22 22 Clear chat log ... :/icons/crystal_project/edituser.png:/icons/crystal_project/edituser.png true Qt::Horizontal 40 20 Send message Send :/icons/crystal_project/message.png:/icons/crystal_project/message.png qutim-0.2.0/src/corelayers/chat/chatforms/chatwindow.cpp0000644000175000017500000003013311240506443025032 0ustar euroelessareuroelessar/* ChatWindow Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "chatwindow.h" #include "iconmanager.h" #include #include #include #include "../chatemoticonmenu.h" ChatWindow::ChatWindow(const QString &profile_name, bool webkit_mode) { m_profile_name = profile_name; m_webkit_mode = webkit_mode; setNULLs(); loadSettings(); QString window_file_path; if ( m_webkit_mode ) { window_file_path = m_chat_form_path + "/webchatwindow.ui"; } else { window_file_path = m_chat_form_path + "/textchatwindow.ui"; } if (m_chat_form_path.isEmpty() || !QFile::exists(window_file_path) ) loadDefaultForm(); else loadCustomForm(window_file_path); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); setIcons(); GeneralWindow::installEventEater(); GeneralWindow::setFocusPolicy(); focusTextEdit(); if ( m_main_splitter ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); m_main_splitter->restoreState(settings.value("chatwindow/splitter", QByteArray()).toByteArray()); } m_typing_state = InitTyping; if ( m_send_button ) m_send_button->setEnabled(false); //if ( m_webkit_mode && m_web_page ) m_web_page = m_web_view->page(); m_typing_label_html = ""; setAcceptDrops(true); m_event_eater->m_accept_files = true; connect(m_event_eater, SIGNAL(acceptUrls(QStringList)), this, SLOT(acceptFiles(QStringList))); } ChatWindow::~ChatWindow() { if(m_send_typing_notifications && m_typing_state > NotStartedTyping) m_global_instance.sendTypingNotification(m_item, 0); if ( m_main_splitter ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.setValue("chatwindow/splitter", m_main_splitter->saveState()); } delete m_send_button; delete m_plain_text_edit; delete m_text_browser; // m_web_page = 0; //m_web_view->setPage(m_web_page); delete m_web_view; delete m_contact_avatar_label; delete m_name_label; delete m_id_label; delete m_cliend_id_label; delete m_owner_avatar_label; delete m_additional_label; delete m_info_button; delete m_history_button; // if ( m_emotic_menu ) // delete m_emotic_menu; // if ( m_emoticon_widget ) // delete m_emoticon_widget; delete m_emoticons_button; delete m_send_file_button; delete m_send_picture_button; delete m_main_splitter; delete ui; } void ChatWindow::setNULLs() { GeneralWindow::setNULLs(); m_contact_avatar_label = 0; m_name_label = 0; m_id_label = 0; m_cliend_id_label = 0; m_owner_avatar_label = 0; m_additional_label = 0; m_info_button = 0; m_history_button = 0; m_send_picture_button = 0; m_send_file_button = 0; m_send_typing_button = 0; m_typing_label = 0; m_client_label = 0; m_main_splitter = 0; ui = 0; } void ChatWindow::loadDefaultForm() { ui = new Ui::ChatForm; ui->setupUi(this); m_send_button = ui->sendButton; m_plain_text_edit = ui->chatInputEdit; m_typing_label = ui->typingLabel; m_client_label = ui->clientLabel; m_info_button = ui->infoButton; m_history_button = ui->historyButton; m_emoticons_button = ui->emoticonButton; m_send_picture_button = ui->sendPictureButton; m_send_file_button = ui->sendFileButton; m_on_enter_button = ui->onEnterButton; m_send_typing_button = ui->typingButton; m_translit_button = ui->translitButton; m_quote_button = ui->quoteButton; m_clear_button = ui->clearChatButton; m_main_splitter= ui->splitter; if ( m_webkit_mode ) { QFrame *frame = new QFrame(this); QGridLayout *layout = new QGridLayout(frame); m_web_view = new QWebView(this); layout->addWidget(m_web_view); frame->setLayout(layout); layout->setMargin(0); frame->setFrameShape(QFrame::StyledPanel); frame->setFrameShadow(QFrame::Sunken); ui->splitter->insertWidget(0, frame); } else { m_text_browser = new QTextBrowser(this); ui->splitter->insertWidget(0, m_text_browser); } } void ChatWindow::loadCustomForm(const QString &form_path) { QUiLoader loader; QFile file(form_path); if ( file.open(QFile::ReadOnly) ) { QWidget *chat_widget = loader.load(&file, this); file.close(); m_send_button = qFindChild(this, "sendButton"); m_plain_text_edit = qFindChild(this, "chatInputEdit"); m_contact_avatar_label = qFindChild(this, "contactAvatarLabel"); m_name_label = qFindChild(this, "nickNameLabel"); m_id_label = qFindChild(this, "idLabel"); m_typing_label = qFindChild(this, "typingLabel"); m_cliend_id_label = qFindChild(this, "typingClientLabel"); m_owner_avatar_label = qFindChild(this, "ownAvatarLabel"); m_additional_label = qFindChild(this, "additionalLabel"); m_client_label = qFindChild(this, "clientLabel"); m_info_button = qFindChild(this, "infoButton"); m_history_button = qFindChild(this, "historyButton"); m_emoticons_button = qFindChild(this, "emoticonButton"); m_send_picture_button = qFindChild(this, "sendPictureButton"); m_send_file_button = qFindChild(this, "sendFileButton"); m_on_enter_button = qFindChild(this, "onEnterButton"); m_send_typing_button = qFindChild(this, "typingButton"); m_translit_button = qFindChild(this, "translitButton"); m_quote_button = qFindChild(this, "quoteButton"); m_clear_button = qFindChild(this, "clearChatButton"); m_main_splitter= qFindChild(this, "splitter"); if ( m_webkit_mode ) { QWidget *widget = qFindChild(this, "webView"); m_web_view = morphWidget(widget); } else m_text_browser = qFindChild(this, "chatViewBrowser"); QMetaObject::connectSlotsByName(this); QVBoxLayout *layout = new QVBoxLayout; layout->setMargin(0); layout->addWidget(chat_widget); setLayout(layout); } } void ChatWindow::setIcons() { if (m_info_button) m_info_button->setIcon(m_global_instance.getIcon("contactinfo") ); if ( m_history_button) m_history_button->setIcon(m_global_instance.getIcon("history") ); if (m_send_picture_button) m_send_picture_button->setIcon(m_global_instance.getIcon("image") ); if ( m_send_file_button) m_send_file_button->setIcon(m_global_instance.getIcon("save_all") ); if ( m_on_enter_button) m_on_enter_button->setIcon(m_global_instance.getIcon("key_enter") ); if (m_send_typing_button ) m_send_typing_button->setIcon(m_global_instance.getIcon("typing") ); GeneralWindow::setIcons(); } void ChatWindow::loadSettings() { GeneralWindow::loadSettings(); } void ChatWindow::setItemData(const QStringList &data_list,bool owner_data) { if ( !owner_data ) { if ( data_list.count() > 0) { if ( m_name_label ) m_name_label->setText(data_list.at(0)); } else if ( m_name_label ) m_name_label->clear(); if ( data_list.count() > 1 ) { if ( m_contact_avatar_label) m_contact_avatar_label->setPixmap(data_list.at(1).isEmpty()?QPixmap():QPixmap(data_list.at(1))); } else if( m_contact_avatar_label ) m_contact_avatar_label->setPixmap(QPixmap()); if ( data_list.count() > 2 ) { if ( m_cliend_id_label ) m_cliend_id_label->setText(data_list.at(2)); if ( m_client_label ) m_client_label->setToolTip(data_list.at(2)); m_client_id = data_list.at(2); } else { m_client_id.clear(); if ( m_cliend_id_label ) m_cliend_id_label->clear(); if ( m_client_label ) m_client_label->clear(); } if ( data_list.count() > 3 ) { if ( m_additional_label ) { QString add_data = data_list.at(3); m_additional_label->setText(add_data.remove('\n')); } } else if ( m_additional_label ) m_additional_label->clear(); if ( m_id_label ) m_id_label->setText(m_item.m_item_name); if ( m_client_label ) { m_client_label->setPixmap(m_global_instance.getContactIcon(m_item,12).pixmap(16)); } } else { if ( data_list.count() > 1 ) { if ( m_owner_avatar_label) m_owner_avatar_label->setPixmap(data_list.at(1).isEmpty()?QPixmap():QPixmap(data_list.at(1))); } else if (m_owner_avatar_label) m_owner_avatar_label->setPixmap(QPixmap()); } } void ChatWindow::contactTyping(bool typing) { if ( m_cliend_id_label ) m_cliend_id_label->setText(typing?tr("Typing..."): m_client_id); if ( m_typing_label ) m_typing_label->setText(typing?m_typing_label_html:QString()); } void ChatWindow::on_chatInputEdit_textChanged() { if ( m_send_typing_notifications) { if( m_plain_text_edit->toPlainText().isEmpty() && m_typing_state > NotStartedTyping ) { m_typing_state = NotStartedTyping; m_global_instance.sendTypingNotification(m_item, 0); } else if( m_typing_state == NotStartedTyping ) { m_typing_state = FinishedTyping; m_global_instance.sendTypingNotification(m_item, 2); QTimer::singleShot(5000, this, SLOT(typingNow())); } else if( m_typing_state == InitTyping ) m_typing_state = NotStartedTyping; else m_typing_state = IsTyping; } if ( m_send_button ) m_send_button->setEnabled(!m_plain_text_edit->toPlainText().isEmpty()); } void ChatWindow::typingNow() { if ( m_send_typing_notifications ) { if( m_typing_state == IsTyping ) { m_typing_state = FinishedTyping; m_global_instance.sendTypingNotification(m_item, 1); QTimer::singleShot(5000, this, SLOT(typingNow())); } else if( m_typing_state == FinishedTyping ) { m_typing_state = NotStartedTyping; m_global_instance.sendTypingNotification(m_item, 0); } } } void ChatWindow::setOwnerItem(const TreeModelItem &item) { if (m_send_typing_notifications && m_typing_state > NotStartedTyping) m_global_instance.sendTypingNotification(m_item, 0); m_typing_state = InitTyping; GeneralWindow::setOwnerItem(item); } void ChatWindow::on_historyButton_clicked() { m_global_instance.openHistoryFor(m_item); } void ChatWindow::on_sendPictureButton_clicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath() , tr("Images (*.gif *.png *.bmp *.jpg *.jpeg)")); if ( !fileName.isEmpty()) { QFile iconFile(fileName); if ( iconFile.size() > (7 * 1024 + 600)) { QMessageBox::warning(this, tr("Open error"), tr("Image size is too big")); } else { if (iconFile.open(QIODevice::ReadOnly)) { QByteArray image_array = iconFile.readAll(); m_global_instance.sendImageTo(m_item, image_array); LogsCity::instance().addImage(m_item, image_array, false); iconFile.close(); } } } focusTextEdit(); } void ChatWindow::on_sendFileButton_clicked() { QStringList file_names = QFileDialog::getOpenFileNames(0,QObject::tr("Open File"),QDir::homePath(),QObject::tr("All files (*)")); acceptFiles(file_names); } void ChatWindow::on_infoButton_clicked() { m_global_instance.showContactInformation(m_item); focusTextEdit(); } void ChatWindow::on_typingButton_clicked() { m_send_typing_notifications = m_send_typing_button->isChecked(); focusTextEdit(); } void ChatWindow::acceptFiles(const QStringList &files) { focusTextEdit(); if(!files.isEmpty()) m_global_instance.sendFileTo(m_item, files); } void ChatWindow::contextMenuEvent(QContextMenuEvent * event) { m_global_instance.showContextMenu(m_item, event->globalPos()); } qutim-0.2.0/src/corelayers/chat/chatforms/conferencewindow.cpp0000644000175000017500000002021511236355476026237 0ustar euroelessareuroelessar/* ConferenceWindow Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "conferencewindow.h" #include "../chatemoticonmenu.h" ConferenceWindow::ConferenceWindow(const QString &profile_name,bool webkit_mode) { m_profile_name = profile_name; m_webkit_mode = webkit_mode; setNULLs(); loadSettings(); QString window_file_path; if ( m_webkit_mode ) { window_file_path = m_chat_form_path + "/webconfwindow.ui"; } else { window_file_path = m_chat_form_path + "/textconfwindow.ui"; } if (m_chat_form_path.isEmpty() || !QFile::exists(window_file_path) ) loadDefaultForm(); else loadCustomForm(window_file_path); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); setIcons(); if ( m_conference_list ) { m_item_delegate = new ContactListItemDelegate(); m_item_delegate->setTreeView(m_conference_list); m_conference_list->setItemDelegate(m_item_delegate); m_conference_list->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_conference_list->setSelectionMode(QAbstractItemView::SingleSelection); m_conference_list->setSelectionBehavior(QAbstractItemView::SelectItems); m_cl_event_eater = new ConfContactListEventEater(); m_conference_list->findChild("qt_scrollarea_viewport")->installEventFilter(m_cl_event_eater); m_conference_list->installEventFilter(m_cl_event_eater); } if ( m_plain_text_edit) { m_tab_compl = new ConfTabCompletion(this); m_tab_compl->setTextEdit(m_plain_text_edit); m_plain_text_edit->installEventFilter(this); } GeneralWindow::installEventEater(); GeneralWindow::setFocusPolicy(); focusTextEdit(); if ( m_splitter_chat && m_splitter_cl ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("conference"); m_splitter_chat->restoreState(settings.value("splitter1", QByteArray()).toByteArray()); m_splitter_cl->restoreState(settings.value("splitter2", QByteArray()).toByteArray()); settings.endGroup(); } if ( m_send_button ) m_send_button->setEnabled(false); } ConferenceWindow::~ConferenceWindow() { if ( m_splitter_chat && m_splitter_cl ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("conference"); settings.setValue("splitter1", m_splitter_chat->saveState()); settings.setValue("splitter2", m_splitter_cl->saveState()); settings.endGroup(); } delete m_tab_compl; delete m_cl_event_eater; delete m_item_delegate; delete m_topic_edit; delete m_topic_button; delete m_config_button; // if ( m_emoticon_widget ) // delete m_emoticon_widget; // if ( m_emotic_menu ) // delete m_emotic_menu; delete m_emoticons_button; delete m_translit_button; delete m_on_enter_button; delete m_quote_button; delete m_clear_button; delete m_send_button; delete m_text_browser; //delete m_web_view; delete m_conference_list; delete m_splitter_chat; delete m_splitter_cl; } void ConferenceWindow::setIcons() { if( m_topic_button ) m_topic_button->setIcon(Icon("conftopic")); if( m_config_button ) m_config_button->setIcon(Icon("confsettings")); GeneralWindow::setIcons(); } void ConferenceWindow::loadSettings() { GeneralWindow::loadSettings(); } void ConferenceWindow::setNULLs() { GeneralWindow::setNULLs(); m_topic_edit = 0; m_topic_button = 0; m_config_button = 0; m_conference_list = 0; m_splitter_chat = 0; m_splitter_cl = 0; } void ConferenceWindow::loadDefaultForm() { ui = new Ui::ConfForm; ui->setupUi(this); m_topic_edit = ui->topicLineEdit; m_topic_button = ui->topicButton; m_config_button = ui->configButton; m_emoticons_button = ui->emoticonButton; m_translit_button = ui->translitButton; m_on_enter_button = ui->onEnterButton; m_quote_button = ui->quoteButton; m_clear_button = ui->clearChatButton; m_send_button = ui->sendButton; m_web_view = 0; m_conference_list = ui->conferenceList; m_splitter_chat = ui->splitter; m_splitter_cl = ui->splitter_2; m_plain_text_edit = ui->chatInputEdit; if ( m_webkit_mode ) { QFrame *frame = new QFrame(this); QGridLayout *layout = new QGridLayout(frame); m_web_view = new QWebView(this); layout->addWidget(m_web_view); frame->setLayout(layout); layout->setMargin(0); frame->setFrameShape(QFrame::StyledPanel); frame->setFrameShadow(QFrame::Sunken); ui->splitter->insertWidget(0, frame); } else { m_text_browser = new QTextBrowser(this); ui->splitter->insertWidget(0, m_text_browser); } } void ConferenceWindow::loadCustomForm(const QString &form_path) { QUiLoader loader; QFile file(form_path); if ( file.open(QFile::ReadOnly) ) { QWidget *chat_widget = loader.load(&file, this); file.close(); m_topic_edit = qFindChild(this, "topicLineEdit"); m_topic_button = qFindChild(this, "topicButton"); m_config_button = qFindChild(this, "configButton"); m_emoticons_button = qFindChild(this, "emoticonButton"); m_translit_button = qFindChild(this, "translitButton"); m_on_enter_button = qFindChild(this, "onEnterButton"); m_quote_button = qFindChild(this, "quoteButton"); m_clear_button = qFindChild(this, "clearChatButton"); m_send_button = qFindChild(this, "sendButton"); m_web_view = 0; m_conference_list = qFindChild(this, "conferenceList"); m_splitter_chat = qFindChild(this, "splitter"); m_splitter_cl = qFindChild(this, "splitter_2"); m_plain_text_edit = qFindChild(this, "chatInputEdit"); if ( m_web_view ) { QWidget *widget = qFindChild(this, "webView"); m_web_view = morphWidget(widget); } else m_text_browser = qFindChild(this, "chatViewBrowser"); QMetaObject::connectSlotsByName(this); QVBoxLayout *layout = new QVBoxLayout; layout->setMargin(0); layout->addWidget(chat_widget); setLayout(layout); } } void ConferenceWindow::setItemData(const QStringList &data_list,bool owner_data) { if ( owner_data ) if (data_list.count() > 0 ) { QString topic = data_list.at(0); if (m_topic_edit) m_topic_edit->setText(topic.replace("\n"," ")); } else if ( m_topic_edit )m_topic_edit->clear(); } void ConferenceWindow::setOwnerItem(const TreeModelItem &item) { GeneralWindow::setOwnerItem(item); if ( m_conference_list) LogsCity::instance().setConferenceListView(item,m_conference_list); if ( m_cl_event_eater ) { m_cl_event_eater->m_contact_list = LogsCity::instance().getConferenceCL(item); m_tab_compl->setContactList(m_cl_event_eater->m_contact_list); } } bool ConferenceWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == m_plain_text_edit && event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); if ( keyEvent->key() == Qt::Key_Tab ) { m_tab_compl->tryComplete(); return true; } m_tab_compl->reset(); return false; } return QObject::eventFilter( obj, event ); } void ConferenceWindow::on_chatInputEdit_textChanged() { if ( m_send_button ) m_send_button->setEnabled(!m_plain_text_edit->toPlainText().isEmpty()); } void ConferenceWindow::on_configButton_clicked() { m_global_instance.showConferenceMenu(m_item,mapToGlobal(m_config_button->pos())); } void ConferenceWindow::on_topicButton_clicked() { m_global_instance.showTopicConfig(m_item); } qutim-0.2.0/src/corelayers/chat/chatforms/conferencewindow.h0000644000175000017500000000363211236355476025710 0ustar euroelessareuroelessar/* ConferenceWindow Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 CONFERENCEWINDOW_H #define CONFERENCEWINDOW_H #include "ui_conferenceform.h" #include "../generalwindow.h" #include "../confcontactlist.h" #include "../conferencetabcompletion.h" class ConferenceWindow : public GeneralWindow { Q_OBJECT public: ConferenceWindow(const QString &profile_name, bool webkit_mode); ~ConferenceWindow(); virtual void setItemData(const QStringList &data_list,bool owner_data); virtual void setOwnerItem(const TreeModelItem &item); private slots: void on_chatInputEdit_textChanged(); void on_configButton_clicked(); void on_topicButton_clicked(); private: Ui::ConfForm *ui; virtual void setIcons(); virtual void loadSettings(); virtual void setNULLs(); virtual void loadDefaultForm(); virtual void loadCustomForm(const QString &form_path); bool eventFilter(QObject *obj, QEvent *ev); QLineEdit *m_topic_edit; QToolButton *m_topic_button; QToolButton *m_config_button; QListView *m_conference_list; QSplitter *m_splitter_chat; QSplitter *m_splitter_cl; ContactListItemDelegate *m_item_delegate; ConfContactListEventEater *m_cl_event_eater; ConfTabCompletion *m_tab_compl; }; #endif // CONFERENCEWINDOW_H qutim-0.2.0/src/corelayers/chat/chatforms/conferenceform.ui0000644000175000017500000001422311251526352025516 0ustar euroelessareuroelessar ConfForm 0 0 447 549 Form 4 QLayout::SetMinimumSize 24 24 24 24 true true 24 24 24 24 true Qt::Horizontal Qt::Vertical 0 0 0 24 true QLayout::SetFixedSize 24 24 Show emoticons Ctrl+M, Ctrl+S QToolButton::InstantPopup true 24 24 Invert/translit message Ctrl+T true 24 24 Send on enter true true 24 24 Quote selected text Ctrl+Q true 24 24 Clear chat true Qt::Horizontal 40 20 Send qutim-0.2.0/src/corelayers/chat/chatforms/chatwindow.h0000644000175000017500000000524311236355476024520 0ustar euroelessareuroelessar/* ChatWindow Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 CHATWINDOW_H #define CHATWINDOW_H #include "ui_chatform.h" #include "../generalwindow.h" #include class ChatWindow : public GeneralWindow { Q_OBJECT enum TypingState { InitTyping, NotStartedTyping, IsTyping, FinishedTyping }; public: ChatWindow(const QString &profile_name,bool webkit_mode); ~ChatWindow(); virtual void setItemData(const QStringList &data_list,bool owner_data); virtual void contactTyping(bool typing); virtual void setOwnerItem(const TreeModelItem &item); virtual void setOptions(bool close_after_send,bool send_on_enter, bool send_on_double_enter, bool send_typing) { GeneralWindow::setOptions(close_after_send,send_on_enter,send_on_double_enter,send_typing); if ( m_send_typing_button) m_send_typing_button->setChecked(send_typing); } protected: void contextMenuEvent(QContextMenuEvent * event); private slots: void on_chatInputEdit_textChanged(); void typingNow(); void on_historyButton_clicked(); void on_sendPictureButton_clicked(); void on_sendFileButton_clicked(); void on_infoButton_clicked(); void on_typingButton_clicked(); void acceptFiles(const QStringList &files); private: Ui::ChatForm *ui; virtual void setIcons(); virtual void loadSettings(); virtual void setNULLs(); virtual void loadDefaultForm(); virtual void loadCustomForm(const QString &form_path); QLabel *m_contact_avatar_label; QLabel *m_name_label; QLabel *m_id_label; QLabel *m_cliend_id_label; QLabel *m_owner_avatar_label; QLabel *m_additional_label; QLabel *m_typing_label; QLabel *m_client_label; QToolButton *m_info_button; QToolButton *m_history_button; QToolButton *m_send_picture_button; QToolButton *m_send_file_button; QToolButton *m_send_typing_button; QSplitter *m_main_splitter; QString m_client_id; TypingState m_typing_state; QString m_typing_label_html; QWebPage *m_web_page; }; #endif // CHATWINDOW_H qutim-0.2.0/src/corelayers/chat/conferencetabcompletion.h0000644000175000017500000000420411236355476025247 0ustar euroelessareuroelessar /* * Copyright (C) 2001-2008 Justin Karneges, Martin Hostettler * * 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. If not, see . * */ // Generic tab completion support code. #ifndef CONFERENCETABCOMPLETION_H_ #define CONFERENCETABCOMPLETION_H_ #include #include #include "confcontactlist.h" class ConfTabCompletion : public QObject { Q_OBJECT public: ConfTabCompletion(QObject *parent = 0); virtual ~ConfTabCompletion(); void setTextEdit(QTextEdit* conferenceTextEdit); QTextEdit* getTextEdit(); virtual void reset(); void tryComplete(); void setup(QString str, int pos, int &start, int &end); QStringList possibleCompletions(); QStringList allChoices(QString &guess); QStringList getUsers(); void setContactList(ConfContactList *contact_list); void setLastReferrer(QString last_referrer); private: QString nickSep; QString toComplete_; bool atStart_; virtual void highlight(bool set); QColor highlight_; QString longestCommonPrefix(QStringList list); QString suggestCompletion(bool *replaced); void moveCursorToOffset(QTextCursor &cur, int offset, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); enum TypingStatus { Typing_Normal, Typing_TabPressed, // initial completion Typing_TabbingCompletions, // switch to tab through multiple Typing_MultipleSuggestions }; QTextCursor replacementCursor_; TypingStatus typingStatus_; QStringList suggestedCompletion_; int suggestedIndex_; QTextEdit* textEdit_; ConfContactList *contact_list_; QString last_referrer_; }; #endif /* CONFERENCETABCOMPLETION_H_ */ qutim-0.2.0/src/corelayers/chat/movielabel.h0000644000175000017500000000175711236355476022510 0ustar euroelessareuroelessar/* movieLabel Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 MOVIELABEL_H_ #define MOVIELABEL_H_ #include class movieLabel : public QLabel { Q_OBJECT public: movieLabel(QWidget *parent = 0); ~movieLabel(); signals: void sendMovieTip(const QString &); protected: void mousePressEvent ( QMouseEvent * event ); }; #endif /*MOVIELABEL_H_*/ qutim-0.2.0/src/corelayers/chat/conferenceitem.cpp0000644000175000017500000000743111236355476023705 0ustar euroelessareuroelessar/* Conference Item Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "conferenceitem.h" ConferenceItem::ConferenceItem(const QVariant & display, ConfContactList *contact_list) : m_contact_list(contact_list) { m_item_display = display; m_item_icons = QVector(13).toList(); m_item_bottom_rows = QVector(3).toList(); m_item_type = 0; m_item_status_mass = 0; m_item_role_mass = 0; } ConferenceItem::~ConferenceItem() { } QVariant ConferenceItem::data(int role) const { switch(role) { case Qt::DecorationRole: return reinterpret_cast(&m_item_icons); case Qt::DisplayRole: case Qt::EditRole: return m_item_display; case Qt::UserRole: return m_item_type; case Qt::UserRole+2: return reinterpret_cast(&m_item_bottom_rows); case Qt::UserRole+3: return m_item_status; case Qt::UserRole+4: return m_current_status_icon; case Qt::ToolTipRole:{ if(m_item_type!=0) return QVariant(); QString tooltip = m_contact_list->getToolTip(m_item_display.toString()); if(tooltip.isNull()) return QVariant(); return tooltip;} default: return QVariant(); } } bool ConferenceItem::setData(const QVariant &value, int role) { switch(role) { case Qt::DecorationRole: m_item_icons = value.toList(); return true; case Qt::UserRole: m_item_type = value; return true; case Qt::DisplayRole: m_item_display = value; return true; case Qt::EditRole: m_item_display = value; return true; case Qt::UserRole+4: m_current_status_icon = value; default: return false; } } void ConferenceItem::setImage(QIcon icon, int column) { if(column<13&&column>0) { if(column==1) { static int size=24; static QSize ava_size(size,size); QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(65535,65535)),QIcon::Normal,QIcon::On); if(!pixmap.isNull()) { static QPixmap alpha; if( alpha.isNull() ) { alpha = QPixmap( ava_size ); alpha.fill(QColor(0,0,0)); QPainter painter(&alpha); QPen pen(QColor(127,127,127)); painter.setRenderHint(QPainter::Antialiasing); pen.setWidth(0); painter.setPen(pen); painter.setBrush(QBrush(QColor(255,255,255))); painter.drawRoundedRect(QRectF(QPointF(0,0),QSize(size-1,size-1)),5,5); painter.end(); } pixmap = pixmap.scaled(ava_size,Qt::IgnoreAspectRatio,Qt::SmoothTransformation); pixmap.setAlphaChannel(alpha); icon=QIcon(pixmap); } else return; } m_item_icons[column] = icon; } } QIcon ConferenceItem::getImage(int column) { if(column<13&&column>-1) { return qvariant_cast(m_item_icons[column]); } return QIcon(); } void ConferenceItem::setRow(QVariant item, int row) { if(row<0||row>2) return; m_item_bottom_rows[row]=item; } void ConferenceItem::setStatus(QString text, QIcon icon, int mass) { m_item_icons[0]=icon; m_current_status_icon=icon; m_item_status=text; m_item_status_mass=mass; } void ConferenceItem::setRole(QString text, QIcon icon, int mass) { m_item_icons[11]=icon; m_item_role=text; m_item_role_mass=mass; } int ConferenceItem::getMass() { return 10000*m_item_role_mass/* + m_item_status_mass*/; } qutim-0.2.0/src/corelayers/chat/chatwindowstyleoutput.h0000644000175000017500000001113111273076304025054 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 CHATWINDOWSTYLEOUTPUT_H_ #define CHATWINDOWSTYLEOUTPUT_H_ #include #include "chatwindowstyle.h" class ChatWindowStyleOutput { public: /* constructor, _styleName - name of the style to use, it have to be same to directory name _variantName - name of the CSS file to use, don't write .css */ ChatWindowStyleOutput(const QString &_styleName, const QString &_variantName); ~ChatWindowStyleOutput(); /* passes valriants QHash (list of all variants) from lower class */ AdiumMessageStyle::ChatWindowStyle::StyleVariants getVariants() const; /* sets variant to use, it's used for setting */ void setVariant(const QString &_variantName); /* list paths, where html linked data can be found */ QStringList getPaths(); /* creats a html skeleton. Future messages will be added to it skeleton consist of styles, header and footer it has a mark as well. before this mark new messages should be added _chatName - name of chat, example "Weekends plans" _ownerName - name or nickname of program owner _partnerName - name or nicname of chating partner _ownerIconPath & _partnerIconPath - path to image files representing ppl, "" uses style provided pictures _time - it's time when the chat has started */ QString makeSkeleton(const QString &_chatName, const QString &_ownerName, const QString &_partnerName, const QString &_ownerIconPath, const QString &_partnerIconPath, const QDateTime &datetime, const QString &_time); /* changes keywords to message atributes in html _name - sender's nickname _message - message text _direction - "true" if it was send, "false" if it was recived _time - time at witch message was send _avatarPath - path to avatar, if "" uses style provided picture _aligment - "true" if left-to-right, "false" if right-to-left _senderID - sender's ID _servese - protocol used to send a message _sameSender - "true" - same sender, "false" - message is send by another person _history - if message was sent to offline, or gotten from history */ QString makeMessage(const QString &_name, const QString &_message, const bool &_direction, const QDateTime &datetime, const QString &_time, const QString &_avatarPath, const bool &_aligment, const QString &_senderID, const QString &_service, const bool &_sameSender, bool _history); /* changes keywords to action atributes in html like "Bob is writing on the desk" _name - sender's nickname _message - message text _direction - "true" if it was send, "false" if it was recived _time - time at witch message was send _avatarPath - path to avatar, if "" uses style provided picture _aligment - "true" if left-to-right, "false" if right-to-left _senderID - sender's ID _servese - protocol used to send a message */ QString makeAction(const QString &_name, const QString &_message, const bool &_direction, const QDateTime &datetime, const QString &_time, const QString &_avatarPath, const bool &_aligment, const QString &_senderID, const QString &_service); /* It is used for displaying system and user messages like "user gone offline", "Marina is now away", "You are being ignored" etc. _message - message by it self to be shown _time - timestamp */ QString makeStatus(const QString &_message, const QDateTime &datetime, const QString &_time); /* for degubing purpose, must be deleted before release */ QString getMainCSS(); QString getVariantCSS(); void preparePage(QWebPage *page) const; private: /* makes html code from plaint text */ QString makeHTML(const QString &_sourceText); QString findEmail(const QString &_sourceHTML); QString findWebAddress(const QString &_sourceHTML); private: /* style used for output generation */ AdiumMessageStyle::ChatWindowStyle *styleUsed; /* remembers current variant name */ QString variantUsedName; }; #endif /*CHATWINDOWSTYLEOUTPUT_H_*/ qutim-0.2.0/src/corelayers/chat/chatwindowstyle.h0000644000175000017500000000770111273076304023603 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 CHATWINDOWSTYLE_H_ #define CHATWINDOWSTYLE_H_ #include #include class QWebPage; namespace AdiumMessageStyle { class WeekDate { public: inline WeekDate(const QDate &date) { setDate(date); } inline WeekDate(int y, int m, int d) { setDate(QDate(y, m, d)); } inline int year() const { return m_year; } inline int week() const { return m_week; } inline int day() const { return m_day; } void setDate(const QDate &date); private: int m_year; int m_week; int m_day; }; class ChatWindowStyle { public: /** * StyleVariants is a typedef to a QMap * key = Variant Name * value = Path to variant CSS file. * Path is relative to Ressources directory. */ typedef QHash StyleVariants; /** * This enum specifies the mode of the constructor * - StyleBuildFast : Build the style the fatest possible * - StyleBuildNormal : List all variants of this style. Require a async dir list. */ enum StyleBuildMode { StyleBuildFast, StyleBuildNormal}; /** * @brief Build a single chat window style. * */ explicit ChatWindowStyle(const QString &styleName, StyleBuildMode styleBuildMode = StyleBuildNormal); ChatWindowStyle(const QString &styleName, const QString &variantPath, StyleBuildMode styleBuildMode = StyleBuildFast); ~ChatWindowStyle(); /** * Get the list of all variants for this theme. * If the variant aren't listed, it call the lister * before returning the list of the Variants. * If the variant are listed, it just return the cached * variant list. * @return the StyleVariants QMap. */ StyleVariants getVariants(); /** * Get the style path. * The style path points to the directory where the style is located. * ex: ~/.kde/share/apps/kopete/styles/StyleName/ * * @return the style path based. */ QString getStyleName() const; /** * Get the style ressource directory. * Ressources directory is the base where all CSS, HTML and images are located. * * Adium(and now Kopete too) style directories are disposed like this: * StyleName/ * Contents/ * Resources/ * * @return the path to the the ressource directory. */ QString getStyleBaseHref() const; QString getTemplateHtml() const; QString getHeaderHtml() const; QString getFooterHtml() const; QString getIncomingHtml() const; QString getNextIncomingHtml() const; QString getOutgoingHtml() const; QString getNextOutgoingHtml() const; QString getIncomingHistoryHtml() const; QString getNextIncomingHistoryHtml() const; QString getOutgoingHistoryHtml() const; QString getNextOutgoingHistoryHtml() const; QString getIncomingActionHtml() const; QString getOutgoingActionHtml() const; QString getStatusHtml() const; QString getMainCSS() const; /** * Reload style from disk. */ void reload(); /** * It should be equal to NSDateFormatter of MacOS X */ static QString convertTimeDate(const QString &mac_format, const QDateTime &datetime); void preparePage(QWebPage *page) const; private: /** * Read style HTML files from disk */ void readStyleFiles(); /** * Init this class */ void init(const QString &styleName, StyleBuildMode styleBuildMode); /** * List available variants for the current style. */ void listVariants(); private: class Private; Private *d; }; } #endif /*CHATWINDOWSTYLE_H_*/ qutim-0.2.0/src/corelayers/chat/conferenceitemmodel.h0000644000175000017500000000575711236355476024404 0ustar euroelessareuroelessar/* Conference Item Model Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 CONFERENCEITEMMODEL_H_ #define CONFERENCEITEMMODEL_H_ #include #include #include #include #include #include #include "conferenceitem.h" #include "confcontactlist.h" class ConfContactList; class ConferenceItem; class ConferenceItemModel : public QAbstractItemModel { Q_OBJECT public: ConferenceItemModel(ConfContactList *contact_list, QObject *parent = 0); virtual ~ConferenceItemModel(); QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; Qt::ItemFlags flags(const QModelIndex &index) const; bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); bool addBuddy(const QString & name); bool removeBuddy(const QString & name); bool renameBuddy(const QString & name, const QString & new_name); bool setItemIcon(const QString & name, const QIcon & icon, int position); bool setItemRow(const QString & name, const QList & var, int row); bool setItemStatus(const QString & name, const QIcon & icon, const QString & status, int mass); bool setItemRole(const QString & name, const QIcon & icon, const QString & role, int mass); QStringList getUsers(); private: ConfContactList *m_contact_list; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); int position(ConferenceItem *item); ConferenceItem *getItem(const QModelIndex &index) const; QHash m_item_hash; QList m_item_list; }; #endif /*CONFERENCEITEMMODEL_H_*/ qutim-0.2.0/src/corelayers/chat/conferencetabcompletion.cpp0000644000175000017500000001562711236355476025615 0ustar euroelessareuroelessar /* * Copyright (C) 2001-2008 Justin Karneges, Martin Hostettler * * 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. If not, see . * */ // Generic tab completion support code. #include "conferencetabcompletion.h" //#include "separateconference.h" #include ConfTabCompletion::ConfTabCompletion(QObject *parent) : QObject(parent) { typingStatus_ = Typing_Normal; textEdit_ = 0; nickSep = ":"; } ConfTabCompletion::~ConfTabCompletion() { } void ConfTabCompletion::setContactList(ConfContactList *contact_list){ contact_list_ = contact_list; } void ConfTabCompletion::setLastReferrer(QString last_referrer){ last_referrer_ = last_referrer; } void ConfTabCompletion::setTextEdit(QTextEdit* conferenceTextEdit) { textEdit_ = conferenceTextEdit; QColor editBackground(textEdit_->palette().color(QPalette::Active, QPalette::Base)); if (editBackground.value() < 128) { highlight_ = editBackground.lighter(125); } else { highlight_ = editBackground.darker(125); } } QTextEdit* ConfTabCompletion::getTextEdit() { return textEdit_; } void ConfTabCompletion::highlight(bool set) { Q_UNUSED(set); /* if (set) { QTextEdit::ExtraSelection es; es.cursor = replacementCursor_; es.format.setBackground(highlight_); textEdit_->setExtraSelections(QList() << es); } else { if (textEdit_) textEdit_->setExtraSelections(QList()); }*/ } void ConfTabCompletion::moveCursorToOffset(QTextCursor &cur, int offset, QTextCursor::MoveMode mode) { cur.movePosition(QTextCursor::Start, mode); for (int i = 0; i < offset; i++) { // some sane limit on iterations if (cur.position() >= offset) break; // done our work if (!cur.movePosition(QTextCursor::NextCharacter, mode)) break; // failed? } } /** Find longest common (case insensitive) prefix of \a list. */ QString ConfTabCompletion::longestCommonPrefix(QStringList list) { QString candidate = list.first().toLower(); int len = candidate.length(); while (len > 0) { bool found = true; foreach(QString str, list) { if (str.left(len).toLower() != candidate) { found = false; break; } } if (found) { break; } --len; candidate = candidate.left(len); } return candidate; } void ConfTabCompletion::setup(QString text, int pos, int &start, int &end) { if (text.isEmpty() || pos==0) { atStart_ = true; toComplete_ = ""; start = 0; end = 0; return; } end = pos; int i; for (i = pos - 1; i > 0; --i) { if (text[i].isSpace()) { break; } } if (!text[i].isSpace()) { atStart_ = true; start = 0; } else { atStart_ = false; start = i+1; } toComplete_ = text.mid(start, end-start); } QString ConfTabCompletion::suggestCompletion(bool *replaced) { suggestedCompletion_ = possibleCompletions(); suggestedIndex_ = -1; QString newText; if (suggestedCompletion_.count() == 1) { *replaced = true; newText = suggestedCompletion_.first(); } else if (suggestedCompletion_.count() > 1) { newText = longestCommonPrefix(suggestedCompletion_); if (newText.isEmpty()) { return toComplete_; // FIXME is this right? } typingStatus_ = Typing_MultipleSuggestions; // TODO: display a tooltip that will contain all suggestedCompletion // Hm.. And where and how should it be displayed? *replaced = true; } return newText; } void ConfTabCompletion::reset() { typingStatus_ = Typing_Normal; highlight(false); } /** Handle tab completion. * User interface uses a dual model, first tab completes upto the * longest common (case insensitiv) match, further tabbing cycles through all * possible completions. When doing a tab completion without something to complete * possibly offers a special guess first. */ void ConfTabCompletion::tryComplete() { switch (typingStatus_) { case Typing_Normal: typingStatus_ = Typing_TabPressed; break; case Typing_TabPressed: typingStatus_ = Typing_TabbingCompletions; break; default: break; } QString newText; bool replaced = false; if (typingStatus_ == Typing_MultipleSuggestions) { if (!suggestedCompletion_.isEmpty()) { suggestedIndex_++; if (suggestedIndex_ >= (int)suggestedCompletion_.count()) { suggestedIndex_ = 0; } newText = suggestedCompletion_[suggestedIndex_]; replaced = true; } } else { QTextCursor cursor = textEdit_->textCursor(); QString wholeText = textEdit_->toPlainText(); int begin, end; setup(wholeText, cursor.position(), begin, end); replacementCursor_ = QTextCursor(textEdit_->document()); moveCursorToOffset(replacementCursor_, begin); moveCursorToOffset(replacementCursor_, end, QTextCursor::KeepAnchor); if (toComplete_.isEmpty() && typingStatus_ == Typing_TabbingCompletions) { typingStatus_ = Typing_MultipleSuggestions; QString guess; suggestedCompletion_ = allChoices(guess); if ( !guess.isEmpty() ) { suggestedIndex_ = -1; newText = guess; replaced = true; } else if (!suggestedCompletion_.isEmpty()) { suggestedIndex_ = 0; newText = suggestedCompletion_.first(); replaced = true; } } else { newText = suggestCompletion(&replaced); } } if (replaced) { textEdit_->setUpdatesEnabled(false); int start = qMin(replacementCursor_.anchor(), replacementCursor_.position()); replacementCursor_.beginEditBlock(); replacementCursor_.insertText(newText); replacementCursor_.endEditBlock(); QTextCursor newPos(replacementCursor_); moveCursorToOffset(replacementCursor_, start, QTextCursor::KeepAnchor); newPos.clearSelection(); textEdit_->setTextCursor(newPos); textEdit_->setUpdatesEnabled(true); textEdit_->viewport()->update(); } highlight(typingStatus_ == Typing_MultipleSuggestions); } QStringList ConfTabCompletion::possibleCompletions() { QStringList suggestedNicks; QStringList nicks = getUsers(); QString postAdd = atStart_ ? nickSep + " " : ""; foreach(QString nick, nicks) { if (nick.left(toComplete_.length()).toLower() == toComplete_.toLower()) { suggestedNicks << nick + postAdd; } } return suggestedNicks; } QStringList ConfTabCompletion::allChoices(QString &guess) { guess = last_referrer_; if (!guess.isEmpty() && atStart_) { guess += nickSep + " "; } QStringList all = getUsers(); if (atStart_) { QStringList::Iterator it = all.begin(); for ( ; it != all.end(); ++it) { *it = *it + nickSep + " "; } } return all; } QStringList ConfTabCompletion::getUsers(){ return contact_list_->getUsers(); } qutim-0.2.0/src/corelayers/chat/confcontactlist.h0000644000175000017500000000446511236355476023565 0ustar euroelessareuroelessar/* Conference Contact List Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 CONFERENCECONTACTLIST_H_ #define CONFERENCECONTACTLIST_H_ #include #include #include #include "../contactlist/contactlistitemdelegate.h" #include "conferenceitemmodel.h" class ConfContactList; class ConferenceItemModel; class ConfContactListEventEater : public QObject { Q_OBJECT public: ConfContactListEventEater(); ConfContactList *m_contact_list; protected: bool eventFilter(QObject *obj, QEvent *event); public slots: void itemActivated(const QModelIndex & index); }; class ConfContactList { public: ConfContactList(const QString &protocol_name, const QString &conference_name, const QString &account_name,QListView *list_view); virtual ~ConfContactList(); void addConferenceItem(const QString &nickname); void removeConferenceItem(const QString &nickname); void renameConferenceItem(const QString &nickname, const QString &new_nickname); void setConferenceItemStatus(const QString &nickname, const QIcon &icon, const QString &status, int mass); void setConferenceItemIcon(const QString &nickname, const QIcon &icon, int position); void setConferenceItemRole(const QString &nickname, const QIcon &icon, const QString &role, int mass); void sendEventActivated(const QModelIndex & index); void sendEventClicked(const QModelIndex & index, const QPoint & point); QString getToolTip(const QString &nickname); QStringList getUsers(); void nowActive(); private: //PluginSystem &m_plugin_system; QString m_protocol_name; QString m_conference_name; QString m_account_name; QListView *m_list_view; ConferenceItemModel *m_item_model; }; #endif /*CONFERENCECONTACTLIST_H_*/ qutim-0.2.0/src/corelayers/chat/chatwindowstyle.cpp0000644000175000017500000005461111273076304024140 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 #include #include #include #include #include #include #include #include #include #include #include #include "chatwindowstyle.h" #include "src/systeminfo.h" #include "src/pluginsystem.h" #include namespace AdiumMessageStyle { class ChatWindowStyle::Private { public: QString styleName; StyleVariants variantsList; QString baseHref; QString currentVariantPath; QString templateHtml; QString headerHtml; QString footerHtml; QString incomingHtml; QString nextIncomingHtml; QString outgoingHtml; QString nextOutgoingHtml; QString incomingHistoryHtml; QString nextIncomingHistoryHtml; QString outgoingHistoryHtml; QString nextOutgoingHistoryHtml; QString incomingActionHtml; QString outgoingActionHtml; QString statusHtml; QString mainCSS; QColor backgroundColor; bool backgroundIsTransparent; }; class Resource: public QResource { public: using QResource::children; using QResource::isFile; using QResource::isDir; Resource() : QResource(){} }; ChatWindowStyle::ChatWindowStyle(const QString &styleName, StyleBuildMode styleBuildMode) : d(new Private) { init(styleName, styleBuildMode); } ChatWindowStyle::ChatWindowStyle(const QString &styleName, const QString &variantPath, StyleBuildMode styleBuildMode) : d(new Private) { d->currentVariantPath = variantPath; init(styleName, styleBuildMode); } void ChatWindowStyle::init(const QString &styleName, StyleBuildMode styleBuildMode) { QDir styleDir = styleName; if(!styleName.startsWith(':') && !styleName.isEmpty() && styleDir.exists()) { d->baseHref = styleDir.canonicalPath() + QDir::separator(); styleDir.cdUp(); qDebug() << styleDir.filePath("Info.plist"); { QSettings settings(styleDir.filePath("Info.plist"), PluginSystem::instance().plistFormat()); bool ok = false; QRgb color = settings.value("DefaultBackgroundColor", "ffffff").toString().toInt(&ok, 16); d->backgroundColor = QColor(ok ? color : 0xffffff); d->backgroundIsTransparent = settings.value("DefaultBackgroundIsTransparent", false).toBool(); } styleDir.cdUp(); d->styleName = QFileInfo( styleDir.canonicalPath() ).completeBaseName(); } else { d->styleName = "Default"; d->baseHref = ":/style/webkitstyle/"; d->backgroundColor = QColor(0xffffff); d->backgroundIsTransparent = false; } readStyleFiles(); if(styleBuildMode & StyleBuildNormal) { listVariants(); } } ChatWindowStyle::~ChatWindowStyle() { delete d; } void ChatWindowStyle::preparePage(QWebPage *page) const { qDebug() << d->backgroundIsTransparent; QPalette palette = page->palette(); if(d->backgroundIsTransparent) { palette.setBrush(QPalette::Base, Qt::transparent); if(page->view()) page->view()->setAttribute(Qt::WA_OpaquePaintEvent, false); } else { palette.setBrush(QPalette::Base, d->backgroundColor); } page->setPalette(palette); } ChatWindowStyle::StyleVariants ChatWindowStyle::getVariants() { // If the variantList is empty, list available variants. if( d->variantsList.isEmpty() ) { listVariants(); } return d->variantsList; } QString ChatWindowStyle::getStyleName() const { return d->styleName; } QString ChatWindowStyle::getStyleBaseHref() const { return d->baseHref.startsWith(':') ? "qrc"+d->baseHref : QUrl::fromLocalFile(d->baseHref).toString(); //#if defined(Q_OS_WIN32) // return "file:///"+d->baseHref; //#else // return "file://"+d->baseHref; //#endif } QString ChatWindowStyle::getTemplateHtml() const { return d->templateHtml; } QString ChatWindowStyle::getHeaderHtml() const { return d->headerHtml; } QString ChatWindowStyle::getFooterHtml() const { return d->footerHtml; } QString ChatWindowStyle::getIncomingHtml() const { return d->incomingHtml; } QString ChatWindowStyle::getNextIncomingHtml() const { return d->nextIncomingHtml; } QString ChatWindowStyle::getOutgoingHtml() const { return d->outgoingHtml; } QString ChatWindowStyle::getNextOutgoingHtml() const { return d->nextOutgoingHtml; } QString ChatWindowStyle::getIncomingHistoryHtml() const { return d->incomingHistoryHtml; } QString ChatWindowStyle::getNextIncomingHistoryHtml() const { return d->nextIncomingHistoryHtml; } QString ChatWindowStyle::getOutgoingHistoryHtml() const { return d->outgoingHistoryHtml; } QString ChatWindowStyle::getNextOutgoingHistoryHtml() const { return d->nextOutgoingHistoryHtml; } QString ChatWindowStyle::getIncomingActionHtml() const { return d->incomingActionHtml; } QString ChatWindowStyle::getOutgoingActionHtml() const { return d->outgoingActionHtml; } QString ChatWindowStyle::getStatusHtml() const { return d->statusHtml; } QString ChatWindowStyle::getMainCSS() const { return d->mainCSS; } void ChatWindowStyle::listVariants() { QString variantDirPath = d->baseHref + QString::fromUtf8("Variants/"); if(d->baseHref.startsWith(':')) { Resource variantDir; variantDir.setFileName(variantDirPath); if(variantDir.isDir()) { QStringList variantList = variantDir.children(); foreach(QString variantName, variantList) { if(variantName.endsWith(".css")) { QString variantPath = "Variants/"+variantName; variantName = variantName.left(variantName.lastIndexOf(".")); d->variantsList.insert(variantName, variantPath); } } } } else { QDir variantDir(variantDirPath); variantDir.makeAbsolute(); QStringList variantList = variantDir.entryList(QStringList("*.css")); QStringList::ConstIterator it, itEnd = variantList.constEnd(); QString compactVersionPrefix("_compact_"); for(it = variantList.constBegin(); it != itEnd; ++it) { QString variantName = *it, variantPath; // Retrieve only the file name. variantName = variantName.left(variantName.lastIndexOf(".")); QString compactVersionFilename = *it; QString compactVersionPath = variantDirPath + compactVersionFilename.prepend( compactVersionPrefix ); // variantPath is relative to baseHref. variantPath = QString("Variants/%1").arg(*it); d->variantsList.insert(variantName, variantPath); } } } inline void appendStr(QString &str, const QString &res, int length) { length -= res.length(); while(length-->0) str += QChar(' '); str += res; } inline void appendInt(QString &str, int number, int length) { int n = number; length--; while(n/=10) length--; while(length-->0) str += QChar('0'); str += QString::number(number); } #define TRIM_LENGTH(NUM) \ while(length > NUM) \ { \ finishStr(str, week_date, date, time, c, NUM); \ length -= NUM; \ } //class Test //{ //public: // Test(const QString &str) // { // if(!qApp) // new QApplication(0, 0); // static QDateTime date_time = QDateTime::currentDateTime(); // qDebug() << ChatWindowStyle::convertTimeDate(str, date_time); // } //}; ////yyyy.MM.dd G 'at' HH:mm:ss zzz 1996.07.10 AD at 15:08:56 PDT ////EEE, MMM d, ''yy Wed, July 10, '96 ////h:mm a 12:08 PM ////hh 'o''clock' a, zzzz 12 o'clock PM, Pacific Daylight Time ////K:mm a, z 0:00 PM, PST ////yyyyy.MMMM.dd GGG hh:mm aaa 01996.July.10 AD 12:08 PM // // //static Test t1("yyyy.MM.dd G 'at' HH:mm:ss zzz"); //static Test t2("EEE, MMM d, ''yy"); //static Test t3("h:mm a"); //static Test t4("hh 'o''clock' a, zzzz"); //static Test t5("K:mm a, z"); //static Test t6("yyyyy.MMMM.dd GGG hh:mm aaa"); //static Test t7("%H:%M:%S"); void WeekDate::setDate(const QDate &date) { m_week = date.weekNumber(&m_year); m_day = date.dayOfWeek(); } // http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns inline void finishStr(QString &str, const WeekDate &week_date, const QDate &date, const QTime &time, QChar c, int length) { if(length <= 0) return; switch(c.unicode()) { case L'G':{ bool ad = date.year() > 0; if(length < 4) str += ad ? "AD" : "BC"; else if(length == 4) str += ad ? "Anno Domini" : "Before Christ"; else str += ad ? "A" : "B"; break;} case L'y': if(length == 2) appendInt(str, date.year() % 100, 2); else appendInt(str, date.year(), length); break; case L'Y': appendInt(str, week_date.year(), length); break; case L'u':{ int year = date.year(); if(year < 0) year++; appendInt(str, date.year(), length); break;} case L'q': case L'Q':{ int q = (date.month() + 2) / 3; if(length < 3) appendInt(str, q, length); else if(length == 3) { str += "Q"; str += QString::number(q); } else { switch(q) { case 1: str += QObject::tr("1st quarter"); break; case 2: str += QObject::tr("2nd quarter"); break; case 3: str += QObject::tr("3rd quarter"); break; case 4: str += QObject::tr("4th quarter"); break; default: break; } } break;} case L'M': case L'L': if(length < 3) appendInt(str, date.month(), length); else if(length == 3) str += QDate::shortMonthName(date.month()); else if(length == 4) str += QDate::longMonthName(date.month()); else str += QDate::shortMonthName(date.month()).at(0); break; case L'w': TRIM_LENGTH(2); appendInt(str, length, week_date.week()); break; case L'W': while(length-->0) str += QString::number((date.day() + 6) / 7); break; case L'd': TRIM_LENGTH(2); appendInt(str, date.day(), length); break; case L'D': TRIM_LENGTH(3); appendInt(str, date.dayOfYear(), length); break; case L'F': while(length-->0) str += QString::number(1); break; case L'g': appendInt(str, date.toJulianDay(), length); break; case L'c': case L'e': if(length < 3) { appendInt(str, date.dayOfWeek(), length); break; } case L'E': if(length < 4) str += QDate::shortDayName(date.dayOfWeek()); else if(length == 4) str += QDate::longDayName(date.dayOfWeek()); else str += QDate::shortDayName(date.dayOfWeek()).at(0); break; case L'a': str += time.hour() < 12 ? "AM" : "PM"; break; case L'H': TRIM_LENGTH(2); appendInt(str, time.hour(), length); break; case L'h': TRIM_LENGTH(2); appendInt(str, time.hour() % 12, length); break; case L'K': TRIM_LENGTH(2); appendInt(str, time.hour() - 1, length); break; case L'k': TRIM_LENGTH(2); appendInt(str, time.hour() % 12 - 1, length); break; case L'm': TRIM_LENGTH(2); appendInt(str, time.minute(), length); break; case L's': TRIM_LENGTH(2); appendInt(str, time.second(), length); break; case L'S': str += QString::number(time.msec() / 1000.0, 'f', length).section('.', 1); break; case L'A': appendInt(str, QTime(0,0).msecsTo(time), length); break; case L'v': // I don't understand the difference case L'z': if(length < 4) str += SystemInfo::instance().timezoneString(); else // There should be localized name, but I don't know how get it str += SystemInfo::instance().timezoneString(); break; case L'Z':{ if(length == 4) str += "GMT"; int offset = SystemInfo::instance().timezoneOffset(); if(offset < 0) str += '+'; else str += '-'; appendInt(str, qAbs((offset/60)*100 + offset%60), 4); break;} default: while(length-->0) str += c; break; } } QString ChatWindowStyle::convertTimeDate(const QString &mac_format, const QDateTime &datetime) { QDate date = datetime.date(); QTime time = datetime.time(); QString str; if(mac_format.contains('%')) { const QChar *chars = mac_format.constData(); bool is_percent = false; int length = 0; bool error = false; while((*chars).unicode() && !error) { if( is_percent ) { is_percent = false; switch( (*chars).unicode() ) { case L'%': str += *chars; break; case L'a': appendStr(str, QDate::shortDayName(date.dayOfWeek()), length); break; case L'A': appendStr(str, QDate::longDayName(date.dayOfWeek()), length); break; case L'b': appendStr(str, QDate::shortMonthName(date.day()), length); break; case L'B': appendStr(str, QDate::longMonthName(date.day()), length); break; case L'c': appendStr(str, QLocale::system().toString(datetime), length); break; case L'd': appendInt(str, date.day(), length > 0 ? length : 2); break; case L'e': appendInt(str, date.day(), length); break; case L'F': appendInt(str, time.msec(), length > 0 ? length : 3); break; case L'H': appendInt(str, time.hour(), length > 0 ? length : 2); break; case L'I': appendInt(str, time.hour() % 12, length > 0 ? length : 2); break; case L'j': appendInt(str, date.dayOfYear(), length > 0 ? length : 3); break; case L'm': appendInt(str, date.month(), length > 0 ? length : 2); break; case L'M': appendInt(str, time.minute(), length > 0 ? length : 2); break; case L'p': appendStr(str, time.hour() < 12 ? "AM" : "PM", length); break; case L'S': appendInt(str, time.second(), length > 0 ? length : 2); break; case L'w': appendInt(str, date.dayOfWeek(), length); break; case L'x': appendStr(str, QLocale::system().toString(date), length); break; case L'X': appendStr(str, QLocale::system().toString(time), length); break; case L'y': appendInt(str, date.year() % 100, length > 0 ? length : 2); break; case L'Y': appendInt(str, date.year(), length > 0 ? length : 4); break; case L'Z': // It should be localized, isn't it?.. appendStr(str, SystemInfo::instance().timezoneString(), length); break; case L'z':{ int offset = SystemInfo::instance().timezoneOffset(); appendInt(str, (offset/60)*100 + offset%60, length > 0 ? length : 4); break;} default: if((*chars).isDigit()) { is_percent = true; length *= 10; length += (*chars).digitValue(); } else error = true; } } else if(*chars == '%') { length = 0; is_percent = true; } else str += *chars; chars++; } if(!error) return str; str = QString(); } WeekDate week_date(date); QChar last; QChar cur; int length = 0; bool quote = false; const QChar *chars = mac_format.constData(); forever { cur = *chars; if(cur == '\'') { if(*(chars+1) == '\'') { chars++; str += cur; } else { if(!quote) finishStr(str, week_date, date, time, last, length); quote = !quote; } length = 0; } else if(quote) str += cur; else { if(cur == last) length++; else { finishStr(str, week_date, date, time, last, length); length = 1; } } if(!chars->unicode()) break; last = cur; chars++; } return str; } void ChatWindowStyle::readStyleFiles() { QString templateFile = d->baseHref + QString("Template.html"); QString headerFile = d->baseHref + QString("Header.html"); QString footerFile = d->baseHref + QString("Footer.html"); QString incomingFile = d->baseHref + QString("Incoming/Content.html"); QString nextIncomingFile = d->baseHref + QString("Incoming/NextContent.html"); QString outgoingFile = d->baseHref + QString("Outgoing/Content.html"); QString nextOutgoingFile = d->baseHref + QString("Outgoing/NextContent.html"); QString incomingHistoryFile = d->baseHref + QString("Incoming/Context.html"); QString nextIncomingHistoryFile = d->baseHref + QString("Incoming/NextContext.html"); QString outgoingHistoryFile = d->baseHref + QString("Outgoing/Context.html"); QString nextOutgoingHistoryFile = d->baseHref + QString("Outgoing/NextContext.html"); QString incomingActionFile = d->baseHref + QString("Incoming/Action.html"); QString outgoingActionFile = d->baseHref + QString("Outgoing/Action.html"); QString statusFile = d->baseHref + QString("Status.html"); QString mainCSSFile = d->baseHref + QString("main.css"); QFile fileAccess; // First load template file. if( QFile::exists(templateFile) ) { fileAccess.setFileName(templateFile); fileAccess.open(QIODevice::ReadOnly); QTextStream templateStream(&fileAccess); templateStream.setCodec(QTextCodec::codecForName("UTF-8")); d->templateHtml = templateStream.readAll(); fileAccess.close(); } else { QResource resourceAccess("style/webkitstyle/Template.html"); d->templateHtml = QString::fromUtf8((char*)resourceAccess.data(),resourceAccess.size()); } // Load header file. if( QFile::exists(headerFile) ) { fileAccess.setFileName(headerFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->headerHtml = headerStream.readAll(); //qDebug() << "Header HTML: " << d->headerHtml; fileAccess.close(); } // Load Footer file if( QFile::exists(footerFile) ) { fileAccess.setFileName(footerFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->footerHtml = headerStream.readAll(); //qDebug() << "Footer HTML: " << d->footerHtml; fileAccess.close(); } // Load incoming file if( QFile::exists(incomingFile) ) { fileAccess.setFileName(incomingFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->incomingHtml = headerStream.readAll(); // qDebug() << "Incoming HTML: " << d->incomingHtml; fileAccess.close(); } // Load next Incoming file if( QFile::exists(nextIncomingFile) ) { fileAccess.setFileName(nextIncomingFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->nextIncomingHtml = headerStream.readAll(); //qDebug() << "NextIncoming HTML: " << d->nextIncomingHtml; fileAccess.close(); } else d->nextIncomingHtml = d->incomingHtml; // Load outgoing file if( QFile::exists(outgoingFile) ) { fileAccess.setFileName(outgoingFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->outgoingHtml = headerStream.readAll(); //qDebug() << "Outgoing HTML: " << d->outgoingHtml; fileAccess.close(); } else d->outgoingHtml = d->incomingHtml; // Load next outgoing file if( QFile::exists(nextOutgoingFile) ) { fileAccess.setFileName(nextOutgoingFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->nextOutgoingHtml = headerStream.readAll(); //qDebug() << "NextOutgoing HTML: " << d->nextOutgoingHtml; fileAccess.close(); } else d->nextOutgoingHtml = d->outgoingHtml; // Load incoming history file if( QFile::exists(incomingHistoryFile) ) { fileAccess.setFileName(incomingHistoryFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->incomingHistoryHtml = headerStream.readAll(); // qDebug() << "Incoming HTML: " << d->incomingHtml; fileAccess.close(); } else d->incomingHistoryHtml = d->incomingHtml; // Load next Incoming history file if( QFile::exists(nextIncomingHistoryFile) ) { fileAccess.setFileName(nextIncomingHistoryFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->nextIncomingHistoryHtml = headerStream.readAll(); //qDebug() << "NextIncoming HTML: " << d->nextIncomingHtml; fileAccess.close(); } else d->nextIncomingHistoryHtml = d->nextIncomingHtml; // Load outgoing history file if( QFile::exists(outgoingHistoryFile) ) { fileAccess.setFileName(outgoingHistoryFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->outgoingHistoryHtml = headerStream.readAll(); //qDebug() << "Outgoing HTML: " << d->outgoingHtml; fileAccess.close(); } else d->outgoingHistoryHtml = d->outgoingHtml; // Load next outgoing history file if( QFile::exists(nextOutgoingHistoryFile) ) { fileAccess.setFileName(nextOutgoingHistoryFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->nextOutgoingHistoryHtml = headerStream.readAll(); //qDebug() << "NextOutgoing HTML: " << d->nextOutgoingHtml; fileAccess.close(); } else d->nextOutgoingHistoryHtml = d->nextOutgoingHtml; // Load status file if( QFile::exists(statusFile) ) { fileAccess.setFileName(statusFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->statusHtml = headerStream.readAll(); //qDebug() << "Status HTML: " << d->statusHtml; fileAccess.close(); } // Load incoming action file if( QFile::exists(incomingActionFile) ) { fileAccess.setFileName(incomingActionFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->incomingActionHtml = headerStream.readAll(); fileAccess.close(); } else { d->incomingActionHtml = d->statusHtml; d->incomingActionHtml = d->incomingActionHtml.replace("%message%","%sender% %message%"); } // Load outgoing action file if( QFile::exists(outgoingActionFile) ) { fileAccess.setFileName(outgoingActionFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->outgoingActionHtml = headerStream.readAll(); //qDebug() << "Action HTML: " << d->actionHtml; fileAccess.close(); } else d->outgoingActionHtml = d->incomingActionHtml; // Load main.css file if( QFile::exists(mainCSSFile) ) { fileAccess.setFileName(mainCSSFile); fileAccess.open(QIODevice::ReadOnly); QTextStream headerStream(&fileAccess); headerStream.setCodec(QTextCodec::codecForName("UTF-8")); d->mainCSS = headerStream.readAll(); //qDebug() << "mainCSS: " << d->mainCSS; fileAccess.close(); } } void ChatWindowStyle::reload() { d->variantsList.clear(); readStyleFiles(); listVariants(); } } qutim-0.2.0/src/corelayers/chat/tabbedchats.h0000644000175000017500000000727011236355476022631 0ustar euroelessareuroelessar/* TabbedChats Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 TABBEDCHATS_H #define TABBEDCHATS_H #include #include #include #include #include "chatforms/chatwindow.h" #include "chatforms/conferencewindow.h" #include "logscity.h" struct TabbedWindow { QTabBar *m_tab_bar; QWidget *m_main_window; QVBoxLayout *m_main_layout; }; struct UserSpace { TreeModelItem m_item; QString m_identification; QStringList m_item_info; QStringList m_owner_info; quint8 m_state; }; enum TabbedWindowType { MergedWindow = 0, PrivatesWindow, ConferencesWindow }; using namespace qutim_sdk_0_2; class TabbedChats : public QObject { Q_OBJECT public: TabbedChats(const QString &profile_name); ~TabbedChats(); void loadSettings(); void createChat(const TreeModelItem &item,const QStringList &item_info,const QStringList &owner_info,bool new_message); void activateWindow(const TreeModelItem &item,bool new_message); void contactChangeHisStatus(const TreeModelItem &item, const QIcon &icon); void contactChangeHisClient(const TreeModelItem &item); bool checkForActivation(const TreeModelItem &item, bool just_check = false); void setItemTypingState(const TreeModelItem &item, TypingAttribute); void changeId(const TreeModelItem &item, const QString &new_id); void alertWindow(const TreeModelItem &item); void setConferenceTopic(const TreeModelItem &item, const QString &topic); QTextEdit *getEditField(const TreeModelItem &item); void updateWebkit(bool update); private slots: void destroyMergedWindow(QObject *); void destroyPrivatesWindow(QObject *); void destroyConferencesWindow(QObject *); void tabChanged(int); void tabClosed(int); void closeAllTabs(); void windowActivatedByUser(); void closeCurrentChat(); void changeTab(int offset); protected: bool eventFilter(QObject *obj, QEvent *event); signals: void restorePreviousTabs(); private: QString m_profile_name; bool m_merge_conf_and_chats; TabbedWindow m_merged_window; TabbedWindow m_private_chats_window; TabbedWindow m_all_conference_window; ChatWindow *m_chat_window; ConferenceWindow *m_conference_window; void createTabbedWindow(TabbedWindow *window); LogsCity &m_logs_city; bool m_webkit_mode; bool m_closable_tabs; bool m_movable_tabs; bool m_remember_privates; void deleteTabData(QTabBar *tab_bar,int index); QTabBar *getBarForItemType(int type); QWidget *getMainWindowForItemType(int type); GeneralWindow *getGeneralWindowForItemType(int type); QColor getColorForState(quint8 state); void connectGeneralWindow(GeneralWindow *general_window); void saveSizeAndPosition(QWidget *win, TabbedWindowType type); void restoreSizeAndPosition(QWidget *win, TabbedWindowType type); bool m_close_after_send; void setWindowOptions(GeneralWindow *win); bool m_send_on_enter; bool m_send_on_double_enter; bool m_send_typing_notifications; bool m_dont_blink; }; #endif // TABBEDCHATS_H qutim-0.2.0/src/corelayers/chat/generalwindow.cpp0000644000175000017500000003670311251517704023557 0ustar euroelessareuroelessar/* GeneralWindow Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "generalwindow.h" #include "src/abstractlayer.h" #include #include #include #include "chatemoticonmenu.h" bool EventEater::eventFilter(QObject *obj, QEvent *event) { if ( m_accept_files && event->type() == QEvent::DragEnter ) { QDragEnterEvent *drag_event = static_cast(event); if(drag_event->mimeData()->hasUrls()) { drag_event->acceptProposedAction(); return true; } } else if ( m_accept_files && event->type() == QEvent::Drop ) { QDropEvent *drop_event = static_cast(event); QStringList files; QList urls = drop_event->mimeData()->urls(); foreach(const QUrl &url, urls) { QString file = url.toLocalFile(); if(file.isEmpty()) continue; files << file; } if(!files.isEmpty()) { emit acceptUrls(files); return true; } } else if ( event->type() == QEvent::FocusIn ) { if (obj->metaObject()->className() != QWebView::staticMetaObject.className()) emit focusedIn(); } else if (event->type() == QEvent::KeyPress) { QKeyEvent *key_event = static_cast(event); //Closing current chat event if ( (key_event->key() == Qt::Key_Escape || (key_event->key() == Qt::Key_W && key_event->modifiers() == Qt::ControlModifier)) && (obj->objectName() == "ChatForm" || obj->objectName() == "ConfForm")) { emit closeCurrentChat(); //Change tabs } else if ((((key_event->key() == Qt::Key_Left || key_event->key() == Qt::Key_Right ) && key_event->modifiers() == Qt::AltModifier) || ((key_event->key() == Qt::Key_Up || key_event->key() == Qt::Key_Down ) && key_event->modifiers() == Qt::ControlModifier)) && obj->metaObject()->className() != QTextEdit::staticMetaObject.className()) { emit changeTab(key_event->key() == Qt::Key_Left || key_event->key() == Qt::Key_Down?-1:1); } else if( key_event->modifiers() == Qt::ControlModifier && key_event->key() == Qt::Key_Tab ) { emit changeTab(1); return true; }else if (obj->objectName() == "chatInputEdit" ) //send message { if ( (key_event->key() == Qt::Key_Return || key_event->key() == Qt::Key_Enter) && m_send_on_enter && key_event->modifiers() == Qt::ControlModifier) { qobject_cast(obj)->insertPlainText("\n"); } if ( ( (key_event->key() == Qt::Key_Return && key_event->modifiers() == Qt::NoModifier) || ( key_event->key() == Qt::Key_Enter && key_event->modifiers() == Qt::KeypadModifier) ) && m_send_on_enter ) { if( ! m_send_on_double_enter ) { emit sendMessage(); return true; } else { m_number_of_enters++; QTextCursor cursor = qobject_cast(obj)->textCursor(); if( m_number_of_enters > 1 ) { cursor.setPosition(m_enter_position); cursor.deleteChar(); m_number_of_enters = 0; emit sendMessage(); return true; } else m_enter_position = cursor.position(); } } else if (key_event->key() == Qt::Key_Return && !m_send_on_enter && key_event->modifiers() == Qt::ControlModifier) { emit sendMessage(); return true; } else m_number_of_enters = 0; }else if (obj->metaObject()->className() == QWebView::staticMetaObject.className() ) { if ( key_event->matches(QKeySequence::Copy) ) { QWebView *temp_web = qobject_cast(obj); temp_web->triggerPageAction(QWebPage::Copy); return true; } } } return QObject::eventFilter(obj, event); } GeneralWindow::GeneralWindow() : m_global_instance(TempGlobalInstance::instance()), m_waiting_for_activation(false), m_event_eater(new EventEater(this)) { connect(m_event_eater, SIGNAL(focusedIn()), this, SLOT(checkWindowFocus())); connect(m_event_eater, SIGNAL(sendMessage()), this, SLOT(on_sendButton_clicked())); } void GeneralWindow::setOwnerItem(const TreeModelItem &item) { m_scroll_at_maximum = true; if(m_plain_text_edit) LogsCity::instance().setEditState(m_item, m_plain_text_edit->toHtml(),m_plain_text_edit->textCursor().position()); m_item = item; if ( m_webkit_mode) { QWebPage *tmp_page = LogsCity::instance().giveMeMyHomeWebPage(item); if ( tmp_page) { m_web_view->setPage(tmp_page); // m_web_view->repaint(); } } else { QTextDocument *tmp_doc = LogsCity::instance().giveMeMyHomeDocument(item); if ( tmp_doc) m_text_browser->setDocument(tmp_doc); } if ( m_event_eater ) m_event_eater->m_item = item; if(m_plain_text_edit) { TextEditState tmp_state = LogsCity::instance().getEditState(m_item); m_plain_text_edit->setHtml(tmp_state.m_text); QTextCursor tmp_cursor = m_plain_text_edit->textCursor(); tmp_cursor.setPosition(tmp_state.m_cursor_position); m_plain_text_edit->setTextCursor(tmp_cursor); } focusTextEdit(); browserTextChanged(); } void GeneralWindow::on_sendButton_clicked() { checkForScrollBarMaximum(); if ( m_plain_text_edit ) { QString send_message = m_plain_text_edit->toPlainText(); if (!send_message.isEmpty()) { m_global_instance.sendingMessageBeforeShowing(m_item,send_message); LogsCity::instance().addMessage(m_item, send_message, QDateTime::currentDateTime(), false, false); LayersCity::Notification()->userMessage( m_item, "", NotifyMessageSend ); m_plain_text_edit->clear(); focusTextEdit(); if ( m_close_after_send && m_item.m_item_type !=32 ) emit closeMe(); } } } void GeneralWindow::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("gui"); m_chat_form_path = settings.value("chat","").toString(); settings.endGroup(); } void GeneralWindow::setIcons() { if (m_send_button ) m_send_button->setIcon(m_global_instance.getIcon("message")); if (m_emoticons_button) m_emoticons_button->setIcon(m_global_instance.getIcon("emoticon")); if (m_translit_button ) { m_translit_button->setVisible(tr("qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?") != "qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?"); m_translit_button->setIcon(m_global_instance.getIcon("translate")); } if (m_on_enter_button) m_on_enter_button->setIcon(m_global_instance.getIcon("key_enter")); if (m_quote_button ) m_quote_button->setIcon(m_global_instance.getIcon("quote")); if (m_clear_button ) m_clear_button->setIcon(m_global_instance.getIcon("clear")); if (m_text_browser) connect(m_text_browser,SIGNAL(textChanged()), this, SLOT(browserTextChanged())); if ( m_emoticons_button ) { m_emotic_menu = new QMenu(m_emoticons_button); m_emoticon_action = new QWidgetAction(m_emotic_menu); m_emoticon_widget = new ChatEmoticonMenu(m_emotic_menu); connect(m_emotic_menu, SIGNAL(aboutToShow()), m_emoticon_widget, SLOT(ensureGeometry())); m_emoticon_action->setDefaultWidget(m_emoticon_widget); m_emotic_menu->addAction(m_emoticon_action); m_emoticons_button->setMenu(m_emotic_menu); m_emoticon_widget->setEmoticons(m_global_instance.getEmoticons()); connect(m_emoticon_widget, SIGNAL(insertSmile(const QString &)), this, SLOT(insertEmoticon(const QString &))); } if(m_web_view) m_web_view->setAttribute(Qt::WA_OpaquePaintEvent, false); if( m_plain_text_edit ) { AbstractLayer::Speller()->startSpellCheck( m_plain_text_edit ); m_plain_text_edit->setContextMenuPolicy( Qt::CustomContextMenu ); connect( m_plain_text_edit, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(createContextMenu(QPoint)) ); m_plain_text_edit->setAcceptRichText( false ); } } void GeneralWindow::setNULLs() { m_translit_button = 0; m_quote_button = 0; m_clear_button = 0; m_emoticons_button = 0; m_on_enter_button = 0; m_send_button = 0; m_text_browser = 0; m_web_view = 0; } void GeneralWindow::windowActivatedByUser(QWidget *window) { if ( window->isMinimized() ) { window->setWindowState(window->windowState() & (~Qt::WindowMinimized | Qt::WindowActive)); } window->show(); window->activateWindow(); window->raise(); window->setFocus(Qt::ActiveWindowFocusReason); focusTextEdit(); } void GeneralWindow::checkWindowFocus() { if ( m_waiting_for_activation ) { m_waiting_for_activation = false; } emit windowFocused(); focusTextEdit(); } void GeneralWindow::installEventEater() { if (m_web_view) { m_web_view->setFocusPolicy(Qt::ClickFocus); m_web_view->installEventFilter(m_event_eater); connect(m_web_view, SIGNAL(linkClicked(const QUrl &)), this, SLOT(newsOnLinkClicked(const QUrl &))); } if ( m_plain_text_edit ) m_plain_text_edit->installEventFilter(m_event_eater); if ( m_text_browser ) m_text_browser->setOpenExternalLinks(true); installEventFilter(m_event_eater); } void GeneralWindow::focusTextEdit() { if ( m_plain_text_edit ) { m_plain_text_edit->setFocus(); } } bool GeneralWindow::event(QEvent *event) { if( event->type() == QEvent::LanguageChange && m_translit_button) { m_translit_button->setVisible(tr("qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?") != "qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?"); } else if ( event->type() == QEvent::Show ) { if(this->parent()) qobject_cast(this->parent())->activateWindow(); else { activateWindow(); } checkWindowFocus(); focusTextEdit(); } else if (event->type() == QEvent::WindowActivate) { checkWindowFocus(); } return QWidget::event(event); } void GeneralWindow::setFocusPolicy() { if (m_web_view) m_web_view->setFocusPolicy(Qt::ClickFocus); else if (m_text_browser) m_text_browser->setFocusPolicy(Qt::ClickFocus); } void GeneralWindow::on_translitButton_clicked() { if (m_plain_text_edit ) { QString txt = m_plain_text_edit->toPlainText(); if ( m_plain_text_edit->textCursor().hasSelection() ) { QString sel_text = m_plain_text_edit->textCursor().selectedText(); sel_text = invertMessage(sel_text); txt.replace(m_plain_text_edit->textCursor().selectionStart(), sel_text.length(), sel_text); } else { txt = invertMessage(txt); } m_plain_text_edit->clear(); m_plain_text_edit->insertPlainText(txt); } focusTextEdit(); } QString GeneralWindow::invertMessage(QString &text) { QString tableR=tr("qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?"); QString tableE="qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?"; QString txt = text; for(int i = 0; i < txt.length(); i++) { if(txt.at(i) <= QChar('z')) { int j = 0; bool b=true; while((j < tableE.length()) && b) { if(txt[i] == tableE[j]) { b = false; txt[i] = tableR[j]; } j++; } }else{ int j = 0; bool b = true; while((j < tableR.length()) && b) { if(txt[i] == tableR[j]) { b = false; txt[i] = tableE[j]; } j++; } } } return txt; } void GeneralWindow::on_onEnterButton_clicked() { m_event_eater->m_send_on_enter = m_on_enter_button->isChecked(); focusTextEdit(); } void GeneralWindow::on_quoteButton_clicked() { QString selected_text; if (m_webkit_mode && m_web_view) { selected_text = m_web_view->selectedText(); } else if ( m_text_browser ) { selected_text = m_text_browser->textCursor().selectedText(); } if ( m_plain_text_edit && !selected_text.isEmpty() ) { if ( m_webkit_mode ) { selected_text.prepend("> "); selected_text.replace("\n", "\n> "); } else { // Replace paragraph separators selected_text.replace(QChar::ParagraphSeparator, "\n> "); // Qt internally uses U+FDD0 and U+FDD1 to mark the beginning and the end of frames. // They should be seen as non-printable characters, as trying to display them leads // to a crash caused by a Qt "noBlockInString" assertion. selected_text.replace(QChar(0xFDD0), " "); selected_text.replace(QChar(0xFDD1), " "); // Prepend text with ">" tag selected_text.prepend("> "); selected_text.replace(QChar(0x2028), "\n> "); } if(!selected_text.endsWith("\n")) selected_text += "\n"; m_plain_text_edit->insertPlainText(selected_text); m_plain_text_edit->moveCursor(QTextCursor::End); m_plain_text_edit->ensureCursorVisible(); m_plain_text_edit->setFocus(); } focusTextEdit(); } void GeneralWindow::on_clearChatButton_clicked() { LogsCity::instance().clearMyHomeLog(m_item); m_scroll_at_maximum = true; focusTextEdit(); } void GeneralWindow::browserTextChanged() { if ( m_text_browser && m_scroll_at_maximum) { m_text_browser->ensureCursorVisible(); m_text_browser->setLineWrapColumnOrWidth(m_text_browser->lineWrapColumnOrWidth()); int scroll_maximum = m_text_browser->verticalScrollBar()->maximum(); m_text_browser->verticalScrollBar()->setValue( scroll_maximum ); } } void GeneralWindow::checkForScrollBarMaximum() { if ( m_text_browser ) m_scroll_at_maximum = (m_text_browser->verticalScrollBar()->maximum() == m_text_browser->verticalScrollBar()->value()); } bool GeneralWindow::compareItem(const TreeModelItem &item) { return item.m_protocol_name == m_item.m_protocol_name && item.m_account_name == m_item.m_account_name && item.m_item_name == m_item.m_item_name; } void GeneralWindow::insertEmoticon(const QString &emoticon_text) { if ( m_plain_text_edit ) { m_plain_text_edit->insertHtml(" " + emoticon_text + " "); focusTextEdit(); } } void GeneralWindow::newsOnLinkClicked(const QUrl &url) { QDesktopServices::openUrl(url); } static QTextCursor speller_cursor; void GeneralWindow::createContextMenu( const QPoint &pos ) { if( !m_plain_text_edit || !speller_cursor.isNull() ) return; QMenu *menu = m_plain_text_edit->createStandardContextMenu( pos ); QMenu *suggest_menu = 0; QList actions; QTextCursor cur = m_plain_text_edit->cursorForPosition( pos ); bool d = cur.movePosition( QTextCursor::EndOfWord ); int e = cur.position(); bool b = cur.movePosition( QTextCursor::StartOfWord ); int c = cur.position(); QString text = m_plain_text_edit->toPlainText().mid( c, e - c ); if( b && d && LayersCity::Speller()->isMisspelled( text ) ) { QStringList suggestions = LayersCity::Speller()->suggest( text ); suggest_menu = menu->addMenu( SystemsCity::IconManager()->getIcon( "speller" ), tr("Possible variants") ); for( int i = 0; i < suggestions.size(); i++ ) { QAction *action = suggest_menu->addAction( suggestions[i] ); action->setData( suggestions[i] ); actions << action; } if( actions.isEmpty() ) suggest_menu->setDisabled( true ); } QAction *action = menu->exec( m_plain_text_edit->mapToGlobal( pos ) ); if( action && actions.contains( action ) ) { for( int i = d; i <= e; i++ ) cur.deleteChar(); cur.insertText( action->data().toString() ); } qDeleteAll( actions ); delete suggest_menu; delete menu; } qutim-0.2.0/src/corelayers/chat/separatechats.cpp0000644000175000017500000002244011236355476023543 0ustar euroelessareuroelessar/* SeparateChats Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "separatechats.h" SeparateChats::SeparateChats(const QString &profile_name) : m_profile_name(profile_name), m_logs_city(LogsCity::instance()) { } SeparateChats::~SeparateChats() { qDeleteAll(m_chat_list); } void SeparateChats::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("chatwindow"); m_webkit_mode = settings.value("webkit",true).toBool(); m_close_after_send = settings.value("close", false).toBool(); m_send_on_double_enter = settings.value("ondoubleenter", false).toBool(); m_send_on_enter = m_send_on_double_enter || settings.value("onenter", false).toBool(); m_send_typing_notifications = settings.value("typing", true).toBool(); m_dont_blink = settings.value("dontblink", false).toBool(); settings.endGroup(); } void SeparateChats::createChat(const TreeModelItem &item,const QStringList &item_info,const QStringList &owner_info) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); m_logs_city.createHomeForMe(item, m_webkit_mode, item_info.count() > 0 ? item_info.at(0) : item.m_item_name, owner_info.count() > 0 ? owner_info.at(0) : item.m_account_name, owner_info.count() > 1 ? owner_info.at(1) : "", item_info.count() > 1 ? item_info.at(1) : ""); if ( item.m_item_type != 32 ) { ChatWindow *win = new ChatWindow(m_profile_name, m_webkit_mode); win->setOwnerItem(item); win->setWindowTitle(item.m_item_name); connect(win, SIGNAL(destroyed(QObject*)), this, SLOT(chatClosed(QObject*))); m_chat_list.insert(identification, win); connect(win,SIGNAL(windowFocused()), this, SLOT(windowActivatedByUser())); connect(win->m_event_eater, SIGNAL(closeCurrentChat()), win, SLOT(close())); if ( item.m_item_type == 0 ) win->setWindowIcon(TempGlobalInstance::instance().getContactIcon(item,0)); else win->setWindowIcon(TempGlobalInstance::instance().getIcon("chat")); if ( item_info.count() > 0 ) win->setWindowTitle(item_info.at(0)); win->setItemData(item_info, false); win->setItemData(owner_info, true); restoreWindowSizeAndPosition(win); setWindowOptions(win); win->show(); } else { ConferenceWindow *win = new ConferenceWindow(m_profile_name, m_webkit_mode); win->setOwnerItem(item); win->setWindowTitle(item.m_item_name); connect(win, SIGNAL(destroyed(QObject*)), this, SLOT(chatClosed(QObject*))); connect(win,SIGNAL(windowFocused()), this, SLOT(windowActivatedByUser())); connect(win->m_event_eater, SIGNAL(closeCurrentChat()), win, SLOT(close())); m_chat_list.insert(identification, win); win->setWindowIcon(TempGlobalInstance::instance().getIcon("chat")); restoreWindowSizeAndPosition(win); setWindowOptions(win); win->show(); } } void SeparateChats::chatClosed(QObject *win) { GeneralWindow *w = reinterpret_cast(win); if ( w ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup((w->m_item.m_item_type != 32)?"chatwindow":"conference"); settings.setValue("position", w->pos()); settings.setValue("size", w->size()); settings.endGroup(); LogsCity::instance().destroyMyHome(w->m_item); m_chat_list.remove(m_chat_list.key(w)); TempGlobalInstance::instance().chatClosed(w->m_item); } } void SeparateChats::restoreWindowSizeAndPosition(GeneralWindow *win) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup((win->m_item.m_item_type != 32)?"chatwindow":"conference"); win->move(settings.value("position", QPoint(0,0)).toPoint()); win->resize(settings.value("size", QSize(400,300)).toSize()); settings.endGroup(); } void SeparateChats::activateWindow(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_chat_list.contains(identification) ) m_chat_list.value(identification)->windowActivatedByUser(qobject_cast(m_chat_list.value(identification))); } void SeparateChats::contactChangeHisStatus(const TreeModelItem &item, const QIcon &icon) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( GeneralWindow *window = m_chat_list.value(identification, 0) ) window->setWindowIcon(icon); } void SeparateChats::contactChangeHisClient(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( GeneralWindow *window = m_chat_list.value(identification, 0) ) { QStringList info = SystemsCity::PluginSystem()->getAdditionalInfoAboutContact(item); window->setItemData(info, false); } } bool SeparateChats::checkForActivation(const TreeModelItem &item, bool just_check) { QString identification; if ( item.m_item_type != 34) identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); else identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_chat_list.contains(identification) ) { GeneralWindow *tmp_win = m_chat_list.value(identification); tmp_win->checkForScrollBarMaximum(); if ( (!tmp_win->isActiveWindow() || tmp_win->isMinimized()) ) { if ( !tmp_win->m_waiting_for_activation && !just_check) { if ( item.m_item_type != 32 && item.m_item_type != 34) { if ( !m_dont_blink ) qApp->alert(tmp_win, 0); } else tmp_win->setWindowTitle("*"+tmp_win->windowTitle()); tmp_win->m_waiting_for_activation = true; } return true; } } return false; } void SeparateChats::windowActivatedByUser() { GeneralWindow *tmp_win = qobject_cast(sender()); if ( tmp_win ) { TreeModelItem tmp_item = tmp_win->m_item; if ( tmp_item.m_item_type != 32 ) TempGlobalInstance::instance().waitingItemActivated(tmp_item); else { tmp_win->setWindowTitle(tmp_item.m_item_name); LogsCity::instance().notifyAboutFocusingConference(tmp_item); } } } void SeparateChats::setItemTypingState(const TreeModelItem &item, TypingAttribute state) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_chat_list.contains(identification) ) m_chat_list.value(identification)->contactTyping((bool)state); } void SeparateChats::changeId(const TreeModelItem &item, const QString &new_id) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); QString new_identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(new_id); if ( m_chat_list.contains(identification) && !m_chat_list.contains(new_identification) ) { GeneralWindow *tmp_win = m_chat_list.value(identification); m_chat_list.remove(identification); LogsCity::instance().moveMyHome( identification, new_identification ); m_chat_list.insert(new_identification,tmp_win); tmp_win->m_item.m_item_name = new_id; } } void SeparateChats::setWindowOptions(GeneralWindow *win) { win->setOptions(m_close_after_send,m_send_on_enter, m_send_on_double_enter,m_send_typing_notifications); connect(win, SIGNAL(closeMe()), this, SLOT(closeChat())); } void SeparateChats::closeChat() { GeneralWindow *tmp_win = qobject_cast(sender()); if ( tmp_win ) tmp_win->close(); } void SeparateChats::alertWindow(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_chat_list.contains(identification) ) { if (!m_dont_blink) qApp->alert(m_chat_list.value(identification), 0); m_chat_list.value(identification)->checkForScrollBarMaximum(); } } void SeparateChats::setConferenceTopic(const TreeModelItem &item, const QString &topic) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_chat_list.contains(identification) ) { QStringList tmp; tmp<setItemData(tmp,true); } } QTextEdit *SeparateChats::getEditField(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); GeneralWindow *window = m_chat_list.value(identification, 0); return window ? window->getEditField() : 0; } qutim-0.2.0/src/corelayers/chat/chatwindowstyleoutput.cpp0000644000175000017500000002763411273076304025426 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 #include #include #include "chatwindowstyle.h" #include "chatwindowstyleoutput.h" ChatWindowStyleOutput::ChatWindowStyleOutput(const QString &_styleName, const QString &_variantName) { styleUsed = new AdiumMessageStyle::ChatWindowStyle(_styleName); variantUsedName = _variantName; } ChatWindowStyleOutput::~ChatWindowStyleOutput() { delete styleUsed; } AdiumMessageStyle::ChatWindowStyle::StyleVariants ChatWindowStyleOutput::getVariants() const { return styleUsed->getVariants(); } QString ChatWindowStyleOutput::getMainCSS() { return styleUsed->getMainCSS(); } QString ChatWindowStyleOutput::getVariantCSS() { if(!variantUsedName.isEmpty()) return "Variants/" + variantUsedName + ".css"; else if(styleUsed->getStyleBaseHref().startsWith("qrc:/")) return "Variants/red.css"; else return "main.css"; } void ChatWindowStyleOutput::preparePage(QWebPage *page) const { styleUsed->preparePage(page); } QStringList ChatWindowStyleOutput::getPaths() { QStringList paths; paths << styleUsed->getStyleBaseHref(); paths << styleUsed->getStyleBaseHref() + "Variants/"; paths << styleUsed->getStyleBaseHref() + "Images/"; paths << styleUsed->getStyleBaseHref() + "Incoming/"; paths << styleUsed->getStyleBaseHref() + "Outgoing/"; paths << styleUsed->getStyleBaseHref() + "styles/"; return paths; } QString ChatWindowStyleOutput::makeSkeleton(const QString &_chatName, const QString &_ownerName, const QString &_partnerName, const QString &_ownerIconPath, const QString &_partnerIconPath, const QDateTime &datetime, const QString &_time) { QString headerHTML = styleUsed->getHeaderHtml(); QString footerHTML = styleUsed->getFooterHtml(); QString path_to_base; //#if defined(Q_OS_WIN32) path_to_base = styleUsed->getStyleBaseHref(); //#else // path_to_base = "file://"+ styleUsed->getStyleBaseHref(); //#endif QString generalSkeleton = styleUsed->getTemplateHtml(); generalSkeleton.replace(generalSkeleton.indexOf("%@"),2,path_to_base); generalSkeleton.replace(generalSkeleton.lastIndexOf("%@"),2,styleUsed->getFooterHtml()); generalSkeleton.replace(generalSkeleton.lastIndexOf("%@"),2,styleUsed->getHeaderHtml()); generalSkeleton.replace(generalSkeleton.lastIndexOf("%@"),2,getVariantCSS()); if(generalSkeleton.contains("%@")) generalSkeleton.replace(generalSkeleton.indexOf("%@"),2,"@import url( \"main.css\" );"); // generalSkeleton.replace("%rep2%", "main.css"); // generalSkeleton.replace("%rep3%", "Variants/" + variantUsedName + ".css"); // generalSkeleton.replace("%rep4%", headerHTML); generalSkeleton = generalSkeleton.replace("%chatName%", makeHTML(_chatName)); generalSkeleton = generalSkeleton.replace("%sourceName%", makeHTML(_ownerName)); generalSkeleton = generalSkeleton.replace("%destinationName%", makeHTML(_partnerName)); generalSkeleton = generalSkeleton.replace("%timeOpened%", makeHTML(_time)); static QRegExp timeRegExp("%timeOpened\\{([^}]*)\\}%"); int pos=0; while((pos=timeRegExp.indexIn(generalSkeleton, pos)) != -1) generalSkeleton.replace(pos, timeRegExp.cap(0).length(), makeHTML(styleUsed->convertTimeDate(timeRegExp.cap(1), datetime))); if(_ownerIconPath == "") generalSkeleton = generalSkeleton.replace("%outgoingIconPath%", "outgoing_icon.png"); else #if defined(Q_OS_WIN32) generalSkeleton = generalSkeleton.replace("%outgoingIconPath%", _ownerIconPath); #else generalSkeleton = generalSkeleton.replace("%outgoingIconPath%", "file://" + _ownerIconPath); #endif if(_partnerIconPath == "") generalSkeleton = generalSkeleton.replace("%incomingIconPath%", "incoming_icon.png"); else #if defined(Q_OS_WIN32) generalSkeleton = generalSkeleton.replace("%incomingIconPath%", _partnerIconPath); #else generalSkeleton = generalSkeleton.replace("%incomingIconPath%", "file://" + _partnerIconPath); #endif return generalSkeleton; } void ChatWindowStyleOutput::setVariant(const QString &_variantName) { variantUsedName = _variantName; } QString ChatWindowStyleOutput::makeMessage(const QString &_name, const QString &_message, const bool &_direction, const QDateTime &datetime, const QString &_time, const QString &_avatarPath, const bool &_aligment, const QString &_senderID, const QString &_service, const bool &_sameSender, bool _history) { // prepare values, so they could be inserted to html code QString html; // if(_sameSender) // { // if(_direction) // { // html = styleUsed->getNextOutgoingHtml(); // if(html == "") // html = styleUsed->getOutgoingHtml(); // // } // else // { // html = styleUsed->getNextIncomingHtml(); // if(html == "") // html = styleUsed->getIncomingHtml(); // } // } // else // { // if(_direction) // html = styleUsed->getOutgoingHtml(); // else // html = styleUsed->getIncomingHtml(); // } if(_history) { if ( _direction ) html = _sameSender ? styleUsed->getNextOutgoingHistoryHtml() : styleUsed->getOutgoingHistoryHtml(); else html = _sameSender ? styleUsed->getNextIncomingHistoryHtml() : styleUsed->getIncomingHistoryHtml(); } else { if ( _direction ) html = _sameSender ? styleUsed->getNextOutgoingHtml() : styleUsed->getOutgoingHtml(); else html = _sameSender ? styleUsed->getNextIncomingHtml() : styleUsed->getIncomingHtml(); } QString avatarPath = _avatarPath; // Replace %sender% to name html = html.replace("%sender%", _name); // Replace %senderScreenName% to name html = html.replace("%senderScreenName%", makeHTML(_senderID)); // Replace %time% to time html = html.replace("%time%", makeHTML(_time)); // Replace %time{X}% static QRegExp timeRegExp("%time\\{([^}]*)\\}%"); int pos=0; while((pos=timeRegExp.indexIn(html, pos)) != -1) html.replace(pos, timeRegExp.cap(0).length(), makeHTML(styleUsed->convertTimeDate(timeRegExp.cap(1), datetime))); // Replace %service% to protocol name // TODO: have to get protocol global value somehow html = html.replace("%service%", _service); // Replace %protocolIcon% to sender statusIcon path // TODO: find icon to add here html = html.replace("%senderStatusIcon%", ""); // Replace userIconPath if(avatarPath == "") { if(_direction) avatarPath = (styleUsed->getStyleBaseHref() + "Outgoing/buddy_icon.png"); else avatarPath = (styleUsed->getStyleBaseHref() + "Incoming/buddy_icon.png"); } //#if defined(Q_OS_WIN32) html = html.replace("%userIconPath%", avatarPath); //#else // html = html.replace("%userIconPath%", "file://" + avatarPath); //#endif // search for background colors and change them, so CSS would stay clean QString bgColor = "inherit"; static QRegExp textBackgroundRegExp("%textbackgroundcolor\\{([^}]*)\\}%"); int textPos=0; while((textPos=textBackgroundRegExp.indexIn(html, textPos)) != -1) { html = html.replace(textPos, textBackgroundRegExp.cap(0).length(), bgColor); } // Replace %messageDirection% with "rtl"(Right-To-Left) or "ltr"(Left-to-right) html = html.replace("%messageDirection%", _aligment ? "ltr" : "rtl" ); // Replace %messages%, replacing last to avoid errors if messages contains tags QString message = _message; html = html.replace("%message%", message.replace("\\","\\\\").remove('\r').replace("%","%")+" "); return html; } QString ChatWindowStyleOutput::makeAction(const QString &_name, const QString &_message, const bool &_direction, const QDateTime &datetime, const QString &_time, const QString &_avatarPath, const bool &_aligment, const QString &_senderID, const QString &_service) { QString html = _direction?styleUsed->getOutgoingActionHtml():styleUsed->getIncomingActionHtml(); QString avatarPath = _avatarPath; // Replace %sender% to name html = html.replace("%sender%", _name); // Replace %senderScreenName% to name html = html.replace("%senderScreenName%", makeHTML(_senderID)); // Replace %time% to time html = html.replace("%time%", makeHTML(_time)); // Replace %time{X}% static QRegExp timeRegExp("%time\\{([^}]*)\\}%"); int pos=0; while((pos=timeRegExp.indexIn(html, pos)) != -1) html.replace(pos, timeRegExp.cap(0).length(), makeHTML(styleUsed->convertTimeDate(timeRegExp.cap(1), datetime))); // Replace %service% to protocol name // TODO: have to get protocol global value somehow html = html.replace("%service%", _service); // Replace %protocolIcon% to sender statusIcon path // TODO: find icon to add here html = html.replace("%senderStatusIcon%", ""); // Replace userIconPath if(avatarPath == "") { if(_direction) avatarPath = (styleUsed->getStyleBaseHref() + "Outgoing/buddy_icon.png"); else avatarPath = (styleUsed->getStyleBaseHref() + "Incoming/buddy_icon.png"); } //#if defined(Q_OS_WIN32) html = html.replace("%userIconPath%", avatarPath); //#else // html = html.replace("%userIconPath%", "file://" + avatarPath); //#endif // search for background colors and change them, so CSS would stay clean QString bgColor = "inherit"; static QRegExp textBackgroundRegExp("%textbackgroundcolor\\{([^}]*)\\}%"); int textPos=0; while((textPos=textBackgroundRegExp.indexIn(html, textPos)) != -1) { html = html.replace(textPos, textBackgroundRegExp.cap(0).length(), bgColor); } // Replace %messageDirection% with "rtl"(Right-To-Left) or "ltr"(Left-to-right) html = html.replace("%messageDirection%", _aligment ? "ltr" : "rtl" ); // Replace %messages%, replacing last to avoid errors if messages contains tags QString message = _message; html = html.replace("%message%", message.replace("\\","\\\\").remove('\r').replace("%","%")+" "); return html; } QString ChatWindowStyleOutput::makeStatus(const QString &_message, const QDateTime &datetime, const QString &_time) { QString html = styleUsed->getStatusHtml(); /*if(!html.contains("id=\"insert\"")) html.append("
");*/ // Replace %time% to time html = html.replace("%time%", makeHTML(_time)); // Replace %time{X}% static QRegExp timeRegExp("%time\\{([^}]*)\\}%"); int pos=0; while((pos=timeRegExp.indexIn(html, pos)) != -1) html.replace(pos, timeRegExp.cap(0).length(), makeHTML(styleUsed->convertTimeDate(timeRegExp.cap(1), datetime))); // Replace %message%'s, replacing last to avoid errors if messages contains tags html = html.replace("%message%", makeHTML(_message).replace("\\","\\\\").remove('\r').replace("%","%").replace("\n","
")+" "); return html; } QString ChatWindowStyleOutput::makeHTML(const QString &_sourceText) { QString htmlOut = _sourceText; // changes all " symbols to " //htmlOut.replace('"',"""); // change text to html htmlOut = Qt::escape(htmlOut); return htmlOut; } QString ChatWindowStyleOutput::findEmail(const QString &_sourceHTML) { QString html = _sourceHTML; static QRegExp emailRegExp("((?:\\w+\\.)*\\w+@(?:\\w+\\.)*\\w+)"); emailRegExp.indexIn(html); for(int i=0;i" + email + ""; html.replace(emailRegExp.cap(i), email); } return html; } QString ChatWindowStyleOutput::findWebAddress(const QString &_sourceHTML) { QString html = _sourceHTML; static QRegExp linkRegExp("(([a-z]+://|www\\d?\\.)[^\\s]+)"); int pos = 0; while((pos=linkRegExp.indexIn(html, pos)) != -1) { QString link = linkRegExp.cap(0); link = "" + link + ""; html.replace(linkRegExp.cap(0), link); pos += link.count(); } return html; } qutim-0.2.0/src/corelayers/chat/logscity.cpp0000644000175000017500000010030411271376712022540 0ustar euroelessareuroelessar/* LogWidgetHome LogsCity Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "logscity.h" #include "chatlayerclass.h" #include #include #include #include //#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) //#include "include/qutim/settings.h" //#include //#include //static QNetworkAccessManager *webkit_access_manager = 0; //static QNetworkDiskCache *webkit_network_cache = 0; //#endif const char *nickname_colors[] = { "black", "silver", "gray", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua" }; LogJSHelper::LogJSHelper(LogWidgetHome *home) : m_home(home) { static const QString client = "client"; setObjectName( client ); } void LogJSHelper::debugLog( const QVariant &text ) { qDebug( "WebKit: \"%s\"", qPrintable(text.toString()) ); } bool LogJSHelper::zoomImage( const QVariant &text ) { return false; } void LogJSHelper::helperCleared() { if( QWebFrame *frame = qobject_cast(sender()) ) { frame->addToJavaScriptWindowObject( objectName(), this ); } } void LogJSHelper::appendNick( const QVariant &nick ) { if(QTextEdit *edit = static_cast(LayersCity::Chat())->getEditField(m_home->m_item)) { QTextCursor cursor = edit->textCursor(); if(cursor.atStart()) cursor.insertText(nick.toString() + ": "); else cursor.insertText(nick.toString() + " "); edit->setFocus(); } } void LogJSHelper::contextMenu( const QVariant &nick ) { TreeModelItem item = m_home->m_item; QPoint point = QCursor::pos(); TempGlobalInstance::instance().conferenceItemContextMenu( m_home->m_item.m_protocol_name, m_home->m_item.m_item_name, m_home->m_item.m_account_name, nick.toString(), point); } void LogJSHelper::appendText( const QVariant &text ) { if(QTextEdit *edit = static_cast(LayersCity::Chat())->getEditField(m_home->m_item)) { QTextCursor cursor = edit->textCursor(); cursor.insertText(text.toString()); cursor.insertText(" "); edit->setFocus(); } } LogWidgetHome::LogWidgetHome(bool am_i_webkit, bool am_i_conference, const QString &webkit_style, const QString &webkit_variant) { m_i_am_webkit_unit = am_i_webkit; m_i_am_conference = am_i_conference; m_text_document = 0; m_web_page = 0; m_web_helper = 0; m_contact_list = 0; m_style_output = 0; m_edit_state.m_cursor_position = 0; m_webkit_style_path = webkit_style; m_webkit_variant = webkit_variant; if ( !m_i_am_webkit_unit ) m_text_document = new QTextDocument; else { m_web_page = new QWebPage; //#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) // if( webkit_access_manager ) // m_web_page->setNetworkAccessManager( webkit_access_manager ); //#endif m_web_helper = new LogJSHelper(this); m_web_page->mainFrame()->addToJavaScriptWindowObject( m_web_helper->objectName(), m_web_helper ); QObject::connect( m_web_page->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), m_web_helper, SLOT(helperCleared()) ); m_web_page->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); } m_last_message_icon_position = 0; m_horizontal_separator_position = -1; m_separator_added = false; m_light_kill = false; m_history_loaded = false; } LogWidgetHome::~LogWidgetHome() { delete m_text_document; if ( m_i_am_webkit_unit ) { if( QWebView *view = qobject_cast(m_web_page->view()) ) { if( view->page() == m_web_page ) view->setPage( 0 ); } m_web_page->deleteLater(); delete m_style_output; } delete m_contact_list; } static inline QString &validateCpp( QString &text ) { text.replace( "\"", "\\\"" ).replace( "\n", "\\n" ).replace( "\t", "\\t" ); return text; } void LogWidgetHome::addMessage(const QString &message,const QDateTime &date, bool history, bool in, const QString &from, bool win_active) { if ( !m_i_am_webkit_unit ) { if(message.startsWith("/me ")) { QString tmp_msg = message; tmp_msg.replace("/me",from.isEmpty()?in?m_contact_nickname:m_onwer_nickname:from); addServiceMessage(tmp_msg); return; } QTextCursor tmp_cursor = QTextCursor(m_text_document); tmp_cursor.movePosition(QTextCursor::End); if ( !win_active && !history && !m_separator_added) { if (m_horizontal_separator_position != -1) { tmp_cursor.setPosition(m_horizontal_separator_position); tmp_cursor.deleteChar(); tmp_cursor.deleteChar(); tmp_cursor.deleteChar(); tmp_cursor.movePosition(QTextCursor::End); } m_horizontal_separator_position = tmp_cursor.position(); tmp_cursor.insertHtml("


"); tmp_cursor.movePosition(QTextCursor::End); m_separator_added = true; } else if (win_active ) { m_separator_added = false; } quint64 tmp_position = tmp_cursor.position(); QString temp_text; if ( !m_i_am_conference ) { tmp_cursor.insertImage(TempGlobalInstance::instance().getIconPath("message")); tmp_cursor.insertHtml(" "); temp_text.append(in?QString(""):QString("")); if ( m_show_names ) temp_text.append(Qt::escape(in?m_contact_nickname:m_onwer_nickname)); temp_text.append(QString(" ( %1 )
").arg(getTimeStamp(date))); } else { QString tmp_color = m_colorize_nicknames?m_color_names.value(from):QString("red"); temp_text.append( from != m_onwer_nickname?QString(""):QString("")); if ( m_show_names ) temp_text.append(Qt::escape(from)); temp_text.append(QString(" ( %1 ): ").arg(getTimeStamp(date))); } temp_text.append(QString("%1
").arg(message)); tmp_cursor.insertHtml(temp_text); tmp_cursor.movePosition(QTextCursor::End); if ( m_remove_after ) { m_message_positions.append(tmp_cursor.position() - tmp_position); if ( m_message_positions.count() >= (m_remove_count + 1)) { int message_length = m_message_positions.at(0); QTextCursor cursor = QTextCursor(m_text_document); cursor.clearSelection(); cursor.setPosition(0, QTextCursor::MoveAnchor); cursor.setPosition(message_length, QTextCursor::KeepAnchor); cursor.removeSelectedText(); m_message_positions.remove(0); foreach( int icon_number, m_message_position_offset.keys() ) { int old_position = m_message_position_offset.value(icon_number); m_message_position_offset.remove(icon_number); m_message_position_offset.insert(icon_number, old_position - message_length); m_horizontal_separator_position -= message_length; } } } } else { bool same_from = false; QString new_message; if ( m_i_am_conference ) { if ( !win_active && !history && !m_separator_added) { QString js_message = "separator = document.getElementById(\"separator\");" "if(separator)" " separator.parentNode.removeChild(separator);"; m_web_page->mainFrame()->evaluateJavaScript(js_message); js_message = "appendMessage(\"
\");"; m_web_page->mainFrame()->evaluateJavaScript(js_message); m_previous_sender = ""; m_separator_added = true; } else if (win_active ) { m_separator_added = false; } in = (from == m_onwer_nickname); QString escaped_from = Qt::escape(from); QString from_color = ""; from_color += escaped_from; from_color += ""; if(message.startsWith("/me ")) { QString tmp_msg = message.mid(3); new_message = m_style_output->makeAction( from_color, tmp_msg, in, date, getTimeStamp(date), "", true, from, m_protocol_name); m_previous_sender = ""; } else { same_from = (m_previous_sender == from); if (m_prev_date.isNull()) m_prev_date = date; if (m_dont_group_after && m_prev_date.secsTo(date) > m_dont_group_secs) same_from = false; m_prev_date = date; new_message = m_style_output->makeMessage( from_color, message, in, date, getTimeStamp(date), "", true, from, m_protocol_name, same_from, history); m_previous_sender = from; } } else { if ( !history && !m_history_loaded ) { m_history_loaded = true; m_previous_sender=""; } if(message.startsWith("/me ")) { QString tmp_msg = message.mid(3); new_message = m_style_output->makeAction( Qt::escape(in?m_contact_nickname:m_onwer_nickname), tmp_msg, !in, date, getTimeStamp(date), in?m_contact_avatar:m_own_avatar, true, in?m_contact_id:m_owner_id, m_protocol_name); m_previous_sender = ""; } else { same_from = (m_previous_sender == (in?"nme":"me")); if (m_prev_date.isNull()) m_prev_date = date; if (m_dont_group_after && m_prev_date.secsTo(date) > m_dont_group_secs) same_from = false; m_prev_date = date; new_message = m_style_output->makeMessage( Qt::escape(in?m_contact_nickname:m_onwer_nickname), message, !in, date, getTimeStamp(date), in?m_contact_avatar:m_own_avatar, true, in?m_contact_id:m_owner_id, m_protocol_name, same_from, history); m_previous_sender = (in?"nme":"me"); } } QString js_result = m_web_page->mainFrame()->evaluateJavaScript(QString("getEditedHtml(\"%1\", \"%2\");") .arg(validateCpp(new_message)) .arg(m_last_message_icon_position)).toString(); QString js_message = QString("append%2Message(\"%1\");").arg( js_result.isEmpty() ? new_message : validateCpp(js_result.replace("\\","\\\\")), same_from?"Next":""); m_web_page->mainFrame()->evaluateJavaScript(js_message); } } QString LogWidgetHome::getTimeStamp(const QDateTime &datetime) { switch ( m_timestamp) { case 0: return datetime.toString("hh:mm:ss dd/MM/yyyy"); case 1: return datetime.toString("hh:mm:ss"); case 2: return datetime.toString("hh:mm dd/MMM/yyyy"); default: return datetime.toString("hh:mm:ss"); } } quint64 LogWidgetHome::getSendIconPos() { if ( m_i_am_conference ) return 0; if ( m_i_am_webkit_unit ) { return ++m_last_message_icon_position; } else { QTextCursor tmp_cursor = QTextCursor(m_text_document); tmp_cursor.movePosition(QTextCursor::End); if ( m_remove_after) { m_last_message_icon_position++; m_message_position_offset.insert(m_last_message_icon_position, tmp_cursor.position()); return m_last_message_icon_position; } else { return tmp_cursor.position(); } } } void LogWidgetHome::messageDelievered(int position) { if (m_i_am_webkit_unit) { m_web_page->mainFrame()->evaluateJavaScript(QString("messageDlvrd(\"%1\");").arg(position)); } else { QTextCursor tmp_cursor = QTextCursor(m_text_document); if ( m_remove_after ) tmp_cursor.setPosition(m_message_position_offset.value(position), QTextCursor::MoveAnchor); else tmp_cursor.setPosition(position, QTextCursor::MoveAnchor); tmp_cursor.deleteChar(); tmp_cursor.insertImage(TempGlobalInstance::instance().getIconPath("message_accept")); tmp_cursor.movePosition(QTextCursor::End); } } void LogWidgetHome::addConferenceItem(const QString &name) { if ( m_i_am_conference && m_contact_list) { m_contact_list->addConferenceItem(name); qsrand(QTime::currentTime().msec()); m_color_names.insert(name, nickname_colors[qrand()%15]); } } void LogWidgetHome::renameConferenceItem(const QString &old_name, const QString &name) { if ( m_i_am_conference && m_contact_list) { m_contact_list->renameConferenceItem(old_name, name); m_color_names.insert(name, m_color_names.value(old_name)); m_color_names.remove(old_name); } } void LogWidgetHome::removeConferenceItem(const QString &name) { if ( m_i_am_conference && m_contact_list) { m_contact_list->removeConferenceItem(name); m_color_names.remove(name); } } void LogWidgetHome::clearMyLog() { if (m_i_am_webkit_unit) { m_web_page->mainFrame()->setHtml(m_now_html); m_previous_sender = ""; } else { m_text_document->clear(); } } void LogWidgetHome::addServiceMessage(const QString &message) { if (m_i_am_webkit_unit) { QString new_message = message; new_message = m_style_output->makeStatus(new_message, QDateTime::currentDateTime(), QDateTime::currentDateTime().toString()); QString js_message = QString("appendMessage(\"%1\");").arg( new_message.replace("\"","\\\"").replace("\n","\\n")); m_web_page->mainFrame()->evaluateJavaScript(js_message); m_previous_sender = ""; } else { QTextCursor tmp_cursor = QTextCursor(m_text_document); tmp_cursor.movePosition(QTextCursor::End); tmp_cursor.insertHtml(QString("%1

") .arg(QString(message).replace("\n","
"))); tmp_cursor.movePosition(QTextCursor::End); } } void LogWidgetHome::loadWebkitStyle( const QString &head ) { if ( m_i_am_webkit_unit && m_web_page ) { m_style_output = new ChatWindowStyleOutput(m_webkit_style_path, m_webkit_variant); m_style_output->preparePage(m_web_page); m_now_html = m_style_output->makeSkeleton(m_contact_nickname, m_onwer_nickname, m_contact_nickname, m_own_avatar, m_contact_avatar, QDateTime::currentDateTime(), QDateTime::currentDateTime().toString()); static const QRegExp regexp( "(\\<\\s*\\/\\s*head\\s*\\>)", Qt::CaseInsensitive ); Q_ASSERT_X( regexp.isValid(), "LogWidgetHome::loadWebkitStyle(QString)", "RegExp is not valid" ); m_now_html.replace( regexp, head ); m_web_page->mainFrame()->setHtml(m_now_html); } } LogsCity::LogsCity() { } LogsCity::~LogsCity() { release(); } void LogsCity::release() { //#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) // if( webkit_access_manager ) // delete webkit_access_manager; // webkit_access_manager = 0; // webkit_network_cache = 0; //#endif qDeleteAll(m_city_map); m_city_map.clear(); } QTextDocument *LogsCity::giveMeMyHomeDocument(const QString &identification) { if ( m_city_map.contains(identification) ) return m_city_map.value(identification)->m_text_document; else return 0; } QTextDocument *LogsCity::giveMeMyHomeDocument(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); return giveMeMyHomeDocument(identification); } QWebPage *LogsCity::giveMeMyHomeWebPage(const QString &identification) { if ( m_city_map.contains(identification) ) return m_city_map.value(identification)->m_web_page; else return 0; } QWebPage *LogsCity::giveMeMyHomeWebPage(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); return giveMeMyHomeWebPage(identification); } void LogsCity::createHomeForMe(const TreeModelItem &item, bool webkit_mode, QString contact_nick, QString owner_nick, const QString &own_avatar, const QString &contact_avatar) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); LogWidgetHome *new_home = new LogWidgetHome(webkit_mode, item.m_item_type==32?true:false, m_webkit_style_path, m_webkit_variant); new_home->m_item = item; new_home->m_contact_nickname = contact_nick; new_home->m_onwer_nickname = owner_nick; new_home->m_own_avatar = own_avatar; new_home->m_contact_avatar = contact_avatar; new_home->m_protocol_name = item.m_protocol_name; new_home->m_owner_id = item.m_account_name; new_home->m_contact_id = item.m_item_name; new_home->m_remove_after = m_remove_after; new_home->m_remove_count = m_remove_count; new_home->m_dont_group_after = m_dont_group_after; new_home->m_dont_group_secs = m_dont_group_secs; new_home->m_show_names = m_show_names; new_home->m_timestamp = m_timestamp; new_home->m_colorize_nicknames = m_colorize_nicknames; new_home->loadWebkitStyle( m_html_for_head[item.m_item_type] + "\\1" ); m_city_map.insert(identification, new_home); } void LogsCity::moveMyHome( const QString &old_id, const QString &new_id ) { m_city_map.insert( new_id, m_city_map.take( old_id ) ); } bool LogsCity::doIHaveHome(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); return doIHaveHome(identification); } bool LogsCity::doIHaveHome(const QString &identification) { return m_city_map.contains(identification); } void LogsCity::destroyMyHome(const TreeModelItem &item, bool light_bomb) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) { m_city_map.value(identification)->m_light_kill = light_bomb; delete m_city_map.take(identification); } } void LogsCity::addConferenceItem(const TreeModelItem &item, const QString &name) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_city_map.contains(identification) ) { m_city_map.value(identification)->addConferenceItem(name); } } void LogsCity::setConferenceListView(const TreeModelItem &item, QListView *list_view) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) { LogWidgetHome *tmp_home = m_city_map.value(identification); if ( !tmp_home->m_contact_list ) { tmp_home->m_contact_list = new ConfContactList(item.m_protocol_name,item.m_item_name,item.m_account_name,list_view); } tmp_home->m_contact_list->nowActive(); } } void LogsCity::setConferenceItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &status, int mass) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_city_map.contains(identification) ) { LogWidgetHome *tmp_home = m_city_map.value(identification); if ( tmp_home->m_i_am_conference && tmp_home->m_contact_list) { tmp_home->m_contact_list->setConferenceItemStatus(item.m_item_name,icon,status, mass); } } } ConfContactList *LogsCity::getConferenceCL(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) { return m_city_map.value(identification)->m_contact_list; } return 0; } void LogsCity::renameConferenceItem(const TreeModelItem &item, const QString &new_name) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_city_map.contains(identification) ) { m_city_map.value(identification)->renameConferenceItem(item.m_item_name, new_name); } } void LogsCity::removeConferenceItem(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_city_map.contains(identification) ) { m_city_map.value(identification)->removeConferenceItem(item.m_item_name); } } void LogsCity::setConferenceItemIcon(const TreeModelItem &item, const QIcon &icon, int position) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_city_map.contains(identification) ) { LogWidgetHome *tmp_home = m_city_map.value(identification); if ( tmp_home->m_i_am_conference && tmp_home->m_contact_list) { tmp_home->m_contact_list->setConferenceItemIcon(item.m_item_name,icon,position); } } } void LogsCity::setConferenceItemRole(const TreeModelItem &item, const QIcon &icon, const QString &role, int mass) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); if ( m_city_map.contains(identification) ) { LogWidgetHome *tmp_home = m_city_map.value(identification); if ( tmp_home->m_i_am_conference && tmp_home->m_contact_list) { tmp_home->m_contact_list->setConferenceItemRole(item.m_item_name,icon,role,mass); } } } bool LogsCity::addMessage(const TreeModelItem &item, const QString &message, const QDateTime &date, bool history, bool in, bool window_active) { quint64 tmp_icon_pos = 0; QString identification; QString new_temp_message = (history && item.m_item_type != 34) ? message : Qt::escape(message).replace("\n", "
"); if ( !(item.m_item_type == 32 && !in) ) { if ( item.m_item_type == 34 ) identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_parent_name); else identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) { LogWidgetHome *tmp_home = m_city_map.value(identification); new_temp_message = findUrls( new_temp_message,tmp_home->m_i_am_webkit_unit ); if(!in) { TreeModelItem tmp_item = item; Q_REGISTER_EVENT(event_send_1_5, "Core/ChatWindow/SendLevel1.5"); Event(event_send_1_5, 2, &tmp_item, &new_temp_message).send(); } tmp_icon_pos = tmp_home->getSendIconPos(); if ( in ) TempGlobalInstance::instance().receivingMessageBeforeShowing(item,new_temp_message); else TempGlobalInstance::instance().sendingMessageBeforeShowing(item,new_temp_message); tmp_home->addMessage(new_temp_message,date,history,in, item.m_item_type == 34? item.m_item_name : "", window_active); } } if (item.m_item_type != 34 && item.m_item_type != 32 && !history ) { HistoryItem h_item; h_item.m_in = in; h_item.m_from = item.m_item_name; h_item.m_message = Qt::escape(message).replace("\n", "
"); h_item.m_time = date; h_item.m_type = 1; h_item.m_user = item; TempGlobalInstance::instance().saveMessageToHistory(h_item); } if ( !in && !history) { TempGlobalInstance::instance().sendMessageTo(item,message,tmp_icon_pos); } if ( item.m_item_type == 34 && m_city_map.contains(identification) && !history) return message.contains(m_city_map.value(identification)->m_onwer_nickname); return false; } void LogsCity::changeId(const TreeModelItem &item, const QString &new_id) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) { QString new_identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(new_id); LogWidgetHome *tmp_home = m_city_map.value(identification); m_city_map.remove(identification); m_city_map.insert(new_identification, tmp_home); } } void LogsCity::setEditState(const TreeModelItem &item, const QString &text, quint64 position) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); TextEditState tmp_state; tmp_state.m_text = text; tmp_state.m_cursor_position = position; if ( m_city_map.contains(identification) ) m_city_map.value(identification)->m_edit_state = tmp_state; } TextEditState LogsCity::getEditState(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) return m_city_map.value(identification)->m_edit_state; else return TextEditState(); } void LogsCity::loadSettings(const QString &profile_name) { //#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) // if( !webkit_access_manager ) // webkit_access_manager = new QNetworkAccessManager; // if( !webkit_network_cache ) // { // webkit_network_cache = new QNetworkDiskCache( webkit_access_manager ); // webkit_network_cache->setCacheDirectory( Settings::getProfileDir().absoluteFilePath( "webcache" ) ); // webkit_access_manager->setCache( webkit_access_manager ); // } //#endif m_profile_name = profile_name; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+profile_name, "profilesettings"); settings.beginGroup("chatwindow"); m_remove_after = settings.value("remove", false).toBool(); m_dont_group_after = settings.value("dontgroup", true).toBool(); m_show_names = settings.value("names", true).toBool(); m_remove_count = settings.value("removecount", 200).toUInt(); m_dont_group_secs = settings.value("secs", 300).toUInt(); m_timestamp = settings.value("timestamp", 1).toUInt(); m_colorize_nicknames = settings.value("colorize", false).toBool(); settings.endGroup(); loadGuiSettings(); } void LogsCity::messageDelievered(const TreeModelItem &item, int message_position) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) m_city_map.value(identification)->messageDelievered(message_position); } void LogsCity::changeOwnNickNameInConference(const TreeModelItem &item, const QString &new_nickname) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) m_city_map.value(identification)->m_onwer_nickname = new_nickname; } void LogsCity::clearMyHomeLog(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) m_city_map.value(identification)->clearMyLog(); } void LogsCity::addServiceMessage(const TreeModelItem &item, const QString &message) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) m_city_map.value(identification)->addServiceMessage(message); } void LogsCity::notifyAboutFocusingConference(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( m_city_map.contains(identification) ) m_city_map.value(identification)->m_separator_added = false; } void LogsCity::loadGuiSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("gui"); m_webkit_style_path = settings.value("wstyle","").toString(); m_webkit_variant = settings.value("wvariant","").toString(); settings.endGroup(); if( m_city_map.isEmpty() ) return; QString js; foreach( LogWidgetHome *home, m_city_map ) { if( home->m_web_page && home->m_webkit_style_path == m_webkit_style_path && home->m_webkit_variant != m_webkit_variant ) { home->m_webkit_variant = m_webkit_variant; home->m_style_output->setVariant( m_webkit_variant ); if( js.isEmpty() ) { js += "setStylesheet(\"mainStyle\",\""; js += home->m_style_output->getVariantCSS(); js += "\");"; } home->m_web_page->mainFrame()->evaluateJavaScript( js ); } } } void LogsCity::appendHtmlToHead( const QString &html, const QList &types ) { foreach( quint8 type, types ) m_html_for_head[type].append( html ); } QString LogsCity::findUrls(const QString &message,bool webkit) { QString html = message; // TODO: Choose more correct one // "((https?://|ftp://|www\\.)[^\\s<>&]+)" // "((https?://|ftp://|www\\.)([\\w:/\\?#\\[\\]@!\\$&\\(\\)\\*\\+,;=\\._~-]|&|%[0-9a-fA-F]{2})+)" // Reserved and unreserved characters are fine // unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" // reserved = gen-delims / sub-delims // gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" // sub-delims = "!" / "$" / "&" / "'" / "(" / ")" // / "*" / "+" / "," / ";" / "=" // :/?#[]@!$&()*+,;=._~- // :/\\?#\\[\\]@!\\$&\\(\\)\\*\\+,;=\\._~- static QRegExp linkRegExp("([a-zA-Z0-9\\-\\_\\.]+@([a-zA-Z0-9\\-\\_]+\\.)+[a-zA-Z]+)|" "(([a-zA-Z]+://|www\\.)([\\w:/\\?#\\[\\]@!\\$&\\(\\)\\*\\+,;=\\._~-]|&|%[0-9a-fA-F]{2})+)", Qt::CaseInsensitive); Q_ASSERT(linkRegExp.isValid()); int pos = 0; while(((pos = linkRegExp.indexIn(html, pos)) != -1)) { QString link = linkRegExp.cap(0); QString tmplink = link; if (tmplink.toLower().startsWith("www.")) tmplink.prepend("http://"); else if(!tmplink.contains("//")) tmplink.prepend("mailto:"); if(!webkit) { QString url; for(int i = 0; i < tmplink.length(); i++) { if(tmplink.at(i) == '&') { int length = tmplink.length() - i; if(length >= 4 && QStringRef(&tmplink, i, 4) == "<") { url += "<"; i += 3; } else if(length >= 4 && QStringRef(&tmplink, i, 4) == ">") { url += ">"; i += 3; } else if(length >= 5 && QStringRef(&tmplink, i, 5) == "&") { url += "&"; i += 4; } else url += tmplink.at(i); } else url += tmplink.at(i); } tmplink = url; } static const QString hrefTemplate( "%2" ); tmplink = hrefTemplate.arg(tmplink, link); html.replace(pos, link.length(), tmplink); pos += tmplink.count(); } #ifndef BUILD_QUTIM static QString qutim_url = "\\1"; // (?addMessage(QString("").arg(path_to_new_picture),QDateTime::currentDateTime(), false,in, "", false); } } qutim-0.2.0/src/corelayers/chat/chatemoticonmenu.cpp0000644000175000017500000001264311271115625024247 0ustar euroelessareuroelessar/* emoticonMenu Copyright (c) 2008 by Rustam Chakin 2009 by Ruslan Nigmatullin *************************************************************************** * * * 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 "chatemoticonmenu.h" #include ChatEmoticonMenu::ChatEmoticonMenu(QWidget *parent) : QScrollArea(parent) { m_widget = 0; m_grid_layout = 0; setFrameStyle(QFrame::NoFrame); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } ChatEmoticonMenu::~ChatEmoticonMenu() { m_widget = 0; clearList(); } void ChatEmoticonMenu::setEmoticons(QHash list) { clearList(); m_widget = new QWidget; m_grid_layout = new QGridLayout(m_widget); m_grid_layout->setSpacing(1); m_widget->setLayout(m_grid_layout); int max_len_size = 0; m_desktop_geometry = QSize(); QHash emotOrder; { QHashIterator i(list); while (i.hasNext()) { i.next(); QString key = i.key(); list.remove(key); int index = key.indexOf("|"); int num = key.mid(0, index).toInt(); key.remove(0, index+1); emotOrder.insert(num, key); list.insert(key, i.value()); } } QHashIterator i(emotOrder); while (i.hasNext()) { i.next(); QStringList values = list.value(i.value()); if(!values.size()) continue; movieLabel *label = new movieLabel; labelList << label; QMovie *movie = new QMovie(i.value()); movieList << movie; label->setMovie(movie); movie->setCacheMode(QMovie::CacheAll); movie->start(); QSize size = movie->currentPixmap().size(); label->setMinimumSize(size); sizeList << size; label->setToolTip(values.first()); connect(label, SIGNAL(sendMovieTip(const QString &)), this, SIGNAL(insertSmile(const QString &))); movie->stop(); } // // int sq = std::ceil(std::sqrt((float)list.count())); // // int i = 0, j = 0; // // foreach(const QString &path, emotList) // { // QStringList values = list.value(path); // if(!values.size()) // continue; // movieLabel *l = new movieLabel; //// QMovie *movie = new QMovie(path + "/" + list.key(name)); // QMovie *movie = new QMovie(path); // movieList.append(movie); // l->setMovie(movie); // movie->setCacheMode(QMovie::CacheAll); // movie->start(); // QSize movie_size = movie->currentPixmap().size(); // l->setMinimumSize(movie_size); // labelList.append(l); // l->setToolTip(values.first()); // connect(l, SIGNAL(sendMovieTip(const QString &)), this, SIGNAL(insertSmile(const QString &))); // m_grid_layout->addWidget(l,i,j); // if ( j < sq ) // j++; // else // { // i++; // j = 0; // } // movie->stop(); // } setWidget(m_widget); } void ChatEmoticonMenu::clearList() { // foreach(movieLabel *l, labelList) // delete l; delete m_widget; m_widget = 0; sizeList.clear(); qDeleteAll(labelList); labelList.clear(); // foreach(QMovie *m, movieList) // delete m; qDeleteAll(movieList); movieList.clear(); } void ChatEmoticonMenu::hideEvent(QHideEvent *e) { foreach(QMovie *m, movieList) m->stop(); // clearList(); QWidget::hideEvent(e); } void ChatEmoticonMenu::showEvent(QShowEvent *e) { // ensureGeometry(); // setEmoticons(emotList, emotPath); foreach(QMovie *m, movieList) { m->setCacheMode(QMovie::CacheAll); m->start(); } QWidget::showEvent(e); } void ChatEmoticonMenu::ensureGeometry() { if(sizeList.isEmpty()) return; QSize geom = QApplication::desktop()->availableGeometry(QCursor::pos()).size(); if(m_desktop_geometry == geom) return; m_desktop_geometry = geom; foreach(movieLabel *label, labelList) m_grid_layout->removeWidget(label); int sq = std::ceil(std::sqrt((float)sizeList.count())); int width = 0; int height = 0; { for(int i = 0; i < sq; i++) { width += sizeList.at(i).width(); if(width > geom.width()) { sq = i ? i : 1; break; } } // for(int i = 0; i < sizeList.size(); i += sq) // { // height += sizeList.at(i).height(); // if(height > geom.height()) // { // sq = i ? i : 1; // break; // } // } } QVector rows(sizeList.size() + 1, 0); QVector columns(sq, 0); for(; sq > 1; sq--) { width = m_grid_layout->margin(); height = m_grid_layout->margin(); for(int i = 0; i < sizeList.size(); i++) { const QSize &size = sizeList[i]; rows[i / sq] = qMax(rows[i / sq], size.height()); columns[i % sq] = qMax(columns[i % sq], size.width()); } for(int i = 0; i < (sizeList.size() / sq) + (sizeList.size() % sq > 0 ? 1 : 0); i++) height += rows[i] + 1; for(int i = 0; i < sq; i++) width += columns[i] + 1; if(width <= geom.width()) break; } for(int i = 0; i < labelList.size(); i++) { movieList[i]->start(); m_grid_layout->addWidget(labelList[i], i / sq, i % sq, Qt::AlignHCenter | Qt::AlignTop); movieList[i]->stop(); } // parentWidget()->resize(width, qMin(height, geom.height())); resize(width/* + 10*/, qMin(height, geom.height())); setMinimumSize(size()); m_widget->resize(width, qMin(height, geom.height())); } qutim-0.2.0/src/corelayers/chat/confcontactlist.cpp0000644000175000017500000001247011236355476024113 0ustar euroelessareuroelessar/* Conference Contact List Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "confcontactlist.h" #include #include #include #include #include "tempglobalinstance.h" ConfContactListEventEater::ConfContactListEventEater() : QObject(0) { m_contact_list=0; } bool ConfContactListEventEater::eventFilter(QObject *obj, QEvent *event) { if(!m_contact_list) return QObject::eventFilter(obj, event); if(event->type() == QEvent::ContextMenu) { QContextMenuEvent *menu_event = static_cast(event); QListView *list_view = dynamic_cast(obj->parent()); if(!list_view) return QObject::eventFilter(obj, event); QModelIndex index = list_view->indexAt(menu_event->pos()); if(index.isValid()) m_contact_list->sendEventClicked(index,menu_event->globalPos()); } if(event->type() == QEvent::MouseButtonDblClick) { QMouseEvent *mouse_event = static_cast(event); QListView *list_view = dynamic_cast(obj->parent()); if(!list_view) return QObject::eventFilter(obj, event); QModelIndex index = list_view->indexAt(mouse_event->pos()); if(index.isValid()) { m_contact_list->sendEventActivated(index); } } if(event->type() == QEvent::KeyPress) { QKeyEvent *key_event = static_cast(event); if(!key_event->isAutoRepeat()) { if(key_event->key() == Qt::Key_Enter || key_event->key() == Qt::Key_Return) { QListView *list_view = dynamic_cast(obj); if(!list_view) return QObject::eventFilter(obj, event); QModelIndexList list = list_view->selectionModel()->selectedIndexes(); foreach(QModelIndex index, list) { m_contact_list->sendEventActivated(index); } } } } return QObject::eventFilter(obj, event); } void ConfContactListEventEater::itemActivated(const QModelIndex & index) { m_contact_list->sendEventActivated(index); //AbstractContactList::instance().sendEventActivated(index); } ConfContactList::ConfContactList(const QString &protocol_name, const QString &conference_name, const QString &account_name, QListView *list_view) : m_protocol_name(protocol_name), m_conference_name(conference_name), m_account_name(account_name)//, m_plugin_system(PluginSystem::instance()) { m_list_view=list_view; m_item_model = new ConferenceItemModel(this); } ConfContactList::~ConfContactList() { delete m_item_model; } void ConfContactList::addConferenceItem(const QString &nickname) { m_item_model->addBuddy(nickname); } void ConfContactList::removeConferenceItem(const QString &nickname) { m_item_model->removeBuddy(nickname); } void ConfContactList::renameConferenceItem(const QString &nickname, const QString &new_nickname) { m_item_model->renameBuddy(nickname,new_nickname); } void ConfContactList::setConferenceItemStatus(const QString &nickname, const QIcon &icon, const QString &status, int mass) { m_item_model->setItemStatus(nickname,icon,status,mass); } void ConfContactList::setConferenceItemIcon(const QString &nickname, const QIcon &icon, int position) { m_item_model->setItemIcon(nickname,icon,position); } void ConfContactList::setConferenceItemRole(const QString &nickname, const QIcon &icon, const QString &role, int mass) { m_item_model->setItemRole(nickname,icon,role,mass); } QStringList ConfContactList::getUsers() { return m_item_model->getUsers(); } void ConfContactList::sendEventActivated(const QModelIndex & index) { qDebug()<<"activated"; if(!index.isValid()) return; ConferenceItem *item = static_cast(index.internalPointer()); QString nickname = item->data(Qt::DisplayRole).toString(); //PluginSystem::instance().conferenceItemActivated(m_protocol_name,m_conference_name,m_account_name,nickname); TreeModelItem item_struct; item_struct.m_protocol_name = m_protocol_name; item_struct.m_account_name = m_account_name; item_struct.m_parent_name = m_conference_name; item_struct.m_item_name = m_conference_name+"/"+nickname; item_struct.m_item_type = 33; TempGlobalInstance::instance().createChat(item_struct); } void ConfContactList::sendEventClicked(const QModelIndex & index, const QPoint & point) { if(!index.isValid()) return; ConferenceItem *item = static_cast(index.internalPointer()); QString nickname = item->data(Qt::DisplayRole).toString(); TempGlobalInstance::instance().conferenceItemContextMenu(m_protocol_name, m_conference_name, m_account_name, nickname, point); } QString ConfContactList::getToolTip(const QString &nickname) { return TempGlobalInstance::instance().getConferenceItemToolTip(m_protocol_name, m_conference_name, m_account_name, nickname); } void ConfContactList::nowActive() { m_list_view->setModel(m_item_model); } qutim-0.2.0/src/corelayers/chat/chatemoticonmenu.h0000644000175000017500000000273411236355476023727 0ustar euroelessareuroelessar/* emoticonMenu Copyright (c) 2008 by Rustam Chakin 2009 by Ruslan Nigmatullin *************************************************************************** * * * 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 CHATEMOTICONMENU_H #define CHATEMOTICONMENU_H #include #include #include "movielabel.h" class ChatEmoticonMenu : public QScrollArea { Q_OBJECT public: ChatEmoticonMenu(QWidget *parent = 0); ~ChatEmoticonMenu(); void setEmoticons(QHash); public slots: void ensureGeometry(); signals: void insertSmile(const QString &); protected: void hideEvent ( QHideEvent * ); void showEvent ( QShowEvent * ); private: QList sizeList; QList labelList; QList movieList; QHash _emotList; QGridLayout *m_grid_layout; QWidget *m_widget; QSize m_desktop_geometry; void clearList(); }; #endif // CHATEMOTICONMENU_H qutim-0.2.0/src/corelayers/chat/tempglobalinstance.cpp0000644000175000017500000000540011236355476024564 0ustar euroelessareuroelessar/* TempGlobalInstance Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "tempglobalinstance.h" TempGlobalInstance::TempGlobalInstance() { } TempGlobalInstance &TempGlobalInstance::instance() { static TempGlobalInstance tgi; return tgi; } void TempGlobalInstance::setLayerInterface(LayerType type, LayerInterface *linterface) { switch(type) { case ContactListLayer: m_cl_layer = reinterpret_cast(linterface); break; case HistoryLayer: m_history_layer = reinterpret_cast(linterface); break; case EmoticonsLayer: m_emoticons_layer = reinterpret_cast(linterface); break; default:; } } QIcon TempGlobalInstance::getContactIcon(const TreeModelItem &item,int position) { const ItemData *item_data = m_cl_layer->getItemData(item); if(item_data) return item_data->icons.value(position, QIcon()); else return QIcon(); } QStringList TempGlobalInstance::getItemInfo(const TreeModelItem &item) { return m_plugin_system->getAdditionalInfoAboutContact(item); } void TempGlobalInstance::sendMessageTo(const TreeModelItem &item, const QString &message, int message_position) { QString tmp = message; m_plugin_system->sendMessageToContact(item,tmp,message_position); } void TempGlobalInstance::notifyAboutUnreadedMessage(const TreeModelItem &item) { m_cl_layer->setItemAttribute(item,ItemHasUnreaded,true); } void TempGlobalInstance::notifyAboutReadedMessage(const TreeModelItem &item) { m_cl_layer->setItemAttribute(item,ItemHasUnreaded,false); setTrayMessageIconAnimating(false); } void TempGlobalInstance::waitingItemActivated(const TreeModelItem &item) { m_cl_layer->setItemAttribute(item,ItemHasUnreaded,false); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); m_waiting_for_activation.remove(identification); setTrayMessageIconAnimating(false); } void TempGlobalInstance::sendImageTo(const TreeModelItem &item, const QByteArray &image_raw) { m_plugin_system->sendImageTo(item,image_raw); } qutim-0.2.0/src/corelayers/chat/tempglobalinstance.h0000644000175000017500000001316211236355476024235 0ustar euroelessareuroelessar/* TempGlobalInstance Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 TEMPGLOBALINSTANCE_H #define TEMPGLOBALINSTANCE_H #include "../../../include/qutim/plugininterface.h" #include "../../../include/qutim/layerinterface.h" #include "include/qutim/layerscity.h" #include "src/iconmanager.h" #include using namespace qutim_sdk_0_2; struct UnreadedMessage { TreeModelItem m_item; QDateTime m_date; QString m_message; }; class TempGlobalInstance { public: TempGlobalInstance(); static TempGlobalInstance &instance(); void setPluginSystem(PluginSystemInterface *plugin_system) { m_plugin_system = plugin_system; m_show_context_menu = m_plugin_system->registerEventHandler("Core/ContactList/ContextMenu"); m_sending_message_before_showing = m_plugin_system->registerEventHandler("Core/ChatWindow/SendLevel1"); } QIcon getIcon(const QString &name) { return m_plugin_system->getIcon(name); } void createChat(const TreeModelItem &item) { m_plugin_system->createChat(item); } void setLayerInterface( LayerType type, LayerInterface *linterface); QIcon getContactIcon(const TreeModelItem &item,int position); QStringList getItemInfo(const TreeModelItem &item); QString getConferenceItemToolTip(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname) { return m_plugin_system->getConferenceItemToolTip(protocol_name,conference_name,account_name,nickname); } void conferenceItemContextMenu(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QPoint &menu_point) { quint16 event_id = m_plugin_system->registerEventHandler("Core/Conference/ContactContextMenu"); Event ev(event_id, 5, &protocol_name, &conference_name, &account_name, &nickname, &menu_point); m_plugin_system->sendEvent(ev); } void sendMessageTo(const TreeModelItem &item, const QString &message, int message_position); void setTrayMessageIconAnimating(bool animate) { if( !m_unreaded_messages_list.count() && !m_waiting_for_activation.count()) m_plugin_system->setTrayMessageIconAnimating(animate); } void notifyAboutUnreadedMessage(const TreeModelItem &item); void notifyAboutReadedMessage(const TreeModelItem &item); QHash*> m_unreaded_messages_list; QHash m_waiting_for_activation; void waitingItemActivated(const TreeModelItem &item); void chatOpened(const TreeModelItem &item) { m_plugin_system->chatWindowOpened(item); } void chatAboutToBeOpened(const TreeModelItem &item) { m_plugin_system->chatWindowAboutToBeOpened(item); } void chatClosed(const TreeModelItem &item) { m_plugin_system->chatWindowClosed(item); } void sendTypingNotification(const TreeModelItem &item, int type) { m_plugin_system->sendTypingNotification(item,type); } void openHistoryFor(const TreeModelItem &item) { m_history_layer->openWindow(item); } void sendImageTo(const TreeModelItem &item, const QByteArray &image_raw); void sendFileTo(const TreeModelItem &item, const QStringList &file_names) { m_plugin_system->sendFileTo(item,file_names); } void showContactInformation(const TreeModelItem &item) { m_plugin_system->showContactInformation(item); } void showContextMenu(const TreeModelItem &item, QPoint point) { Event ev(m_show_context_menu, 2, &item, &point); m_plugin_system->sendEvent ( ev ); } QString getIconPath(const QString &name) { return m_plugin_system->getIconFileName(name); } void showTopicConfig(const TreeModelItem &item) { m_plugin_system->showTopicConfig(item.m_protocol_name, item.m_account_name, item.m_item_name); } void showConferenceMenu(const TreeModelItem &item, const QPoint &menu_point) { m_plugin_system->showConferenceMenu(item.m_protocol_name, item.m_account_name, item.m_item_name,menu_point); } void saveMessageToHistory(const HistoryItem &item) { m_history_layer->storeMessage(item); } QHash getEmoticons() { return m_emoticons_layer->getEmoticonsList(); } QString getEmoticonsPath() { return m_emoticons_layer->getEmoticonsPath(); } void checkForEmoticons(QString &message) { m_emoticons_layer->checkMessageForEmoticons(message); } void sendingMessageBeforeShowing(const TreeModelItem item, QString &message) { m_plugin_system->sendMessageBeforeShowing(item,message); } void receivingMessageBeforeShowing(const TreeModelItem item, QString &message) { m_plugin_system->receivingMessageBeforeShowing(item,message); } private: PluginSystemInterface *m_plugin_system; ContactListLayerInterface *m_cl_layer; HistoryLayerInterface *m_history_layer; EmoticonsLayerInterface *m_emoticons_layer; quint16 m_show_context_menu; quint16 m_sending_message_before_showing; }; #endif // TEMPGLOBALINSTANCE_H qutim-0.2.0/src/corelayers/chat/logscity.h0000644000175000017500000001710111247741520022203 0ustar euroelessareuroelessar/* LogWidgetHome LogsCity Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 LOGSCITY_H #define LOGSCITY_H #include #include #include #include #include #include "tempglobalinstance.h" #include "confcontactlist.h" #include "chatwindowstyleoutput.h" /* char nickname_colors[] = { "aqua", "aquamarine", "blue", "blueviolet", "brown","burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgrey", "dodgerblue", "firebrick", "forestgreen", "fuchsia", "gold", "goldenrod", "green", "greenyellow", "grey", "hotpink", "indianred", "indigo", "lawngreen", "lightblue", "lightcoral", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategrey", "lightsteelblue", "lime", "limegreen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "navy", "olive", "olivedrab", "orange", "orangered", "orchid", "palegreen", "paleturquoise", "palevioletred", "peru", "pink", "plum", "powderblue", "purple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "sienna", "silver", "skyblue", "slateblue", "slategrey", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "yellowgreen" }; */ using namespace qutim_sdk_0_2; struct TextEditState { QString m_text; quint64 m_cursor_position; }; class LogWidgetHome; class LogJSHelper : public QObject { Q_OBJECT Q_DISABLE_COPY(LogJSHelper) public: LogJSHelper(LogWidgetHome *home); public slots: void debugLog( const QVariant &text ); bool zoomImage( const QVariant &text ); void helperCleared(); void appendNick( const QVariant &nick ); void contextMenu( const QVariant &nick ); void appendText( const QVariant &text ); private: LogWidgetHome *m_home; }; class LogWidgetHome { public: LogWidgetHome(bool am_i_webkit,bool am_i_conference, const QString &webkit_style, const QString &webkit_variant); ~LogWidgetHome(); bool m_i_am_webkit_unit; bool m_i_am_conference; QTextDocument *m_text_document; QWebPage *m_web_page; LogJSHelper *m_web_helper; void addMessage(const QString &message, const QDateTime &date, bool history, bool in, const QString &from = "", bool win_active = true); ConfContactList *m_contact_list; TextEditState m_edit_state; QString m_onwer_nickname; QString m_contact_nickname; QString m_owner_id; QString m_contact_id; QVector m_message_positions; bool m_remove_after; quint32 m_remove_count; bool m_dont_group_after; quint32 m_dont_group_secs; bool m_show_names; int m_timestamp; QString getTimeStamp(const QDateTime &message_date); quint64 getSendIconPos(); quint64 m_last_message_icon_position; QHash m_message_position_offset; void messageDelievered(int); void addConferenceItem(const QString &name); QHash m_color_names; void renameConferenceItem(const QString &old_name, const QString &name); void removeConferenceItem(const QString &name); bool m_colorize_nicknames; void clearMyLog(); void addServiceMessage(const QString &message); qint64 m_horizontal_separator_position; bool m_separator_added; bool m_light_kill; QString m_webkit_style_path; QString m_webkit_variant; ChatWindowStyleOutput *m_style_output; void loadWebkitStyle( const QString &head ); QString m_own_avatar; QString m_contact_avatar; QString m_protocol_name; QString m_now_html; QString m_previous_sender; bool m_history_loaded; TreeModelItem m_item; QDateTime m_prev_date; }; class LogsCity { public: LogsCity(); ~LogsCity(); void release(); void createHomeForMe(const TreeModelItem &item, bool webkit_mode, QString contact_nick = "", QString owner_nick = "", const QString &m_own_avatar = "", const QString &m_contact_avatar = ""); QTextDocument *giveMeMyHomeDocument(const QString & identification); QTextDocument *giveMeMyHomeDocument(const TreeModelItem &item); QWebPage *giveMeMyHomeWebPage(const QString & identification); QWebPage *giveMeMyHomeWebPage(const TreeModelItem &item); ConfContactList *getConferenceCL(const TreeModelItem &item); void setConferenceListView(const TreeModelItem &item, QListView *list_view); static LogsCity &instance() { static LogsCity lc; return lc; } QHash m_city_map; void moveMyHome( const QString &old_id, const QString &new_id ); bool doIHaveHome(const TreeModelItem &item); bool doIHaveHome(const QString &identification); void destroyMyHome(const TreeModelItem &item, bool light_bomb = false); void addConferenceItem(const TreeModelItem &item, const QString &name); void setConferenceItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &status, int mass); void renameConferenceItem(const TreeModelItem &item, const QString &new_name); void removeConferenceItem(const TreeModelItem &item); void setConferenceItemIcon(const TreeModelItem &item, const QIcon &icon, int position); void setConferenceItemRole(const TreeModelItem &item, const QIcon &icon, const QString &role, int mass); bool addMessage(const TreeModelItem &item, const QString &message, const QDateTime &date, bool history, bool in,bool win_active = true); void changeId(const TreeModelItem &item, const QString &new_id); void setEditState(const TreeModelItem &item, const QString &text, quint64 position); TextEditState getEditState(const TreeModelItem &item); void loadSettings(const QString &profile_name); bool m_remove_after; quint32 m_remove_count; bool m_dont_group_after; quint32 m_dont_group_secs; bool m_show_names; int m_timestamp; void messageDelievered(const TreeModelItem &item, int message_position); void changeOwnNickNameInConference(const TreeModelItem &item, const QString &new_nickname); bool m_colorize_nicknames; void clearMyHomeLog(const TreeModelItem &item); void addServiceMessage(const TreeModelItem &item, const QString &message); void notifyAboutFocusingConference(const TreeModelItem &item); void loadGuiSettings(); void appendHtmlToHead( const QString &html, const QList &types ); QString m_profile_name; QString m_webkit_style_path; QString m_webkit_variant; QString findUrls(const QString &message,bool webkit); void addImage(const TreeModelItem &item, const QByteArray &image_raw,bool in) ; QString m_tmp_image_path; QMap m_html_for_head; }; #endif // LOGSCITY_H qutim-0.2.0/src/corelayers/chat/chatlayerclass.h0000644000175000017500000001032711236355476023364 0ustar euroelessareuroelessar/* ChatLayerClass Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 CHATLAYERCLASS_H #define CHATLAYERCLASS_H #include #include "settings/chatlayersettings.h" #include "separatechats.h" #include "tabbedchats.h" #include "tempglobalinstance.h" using namespace qutim_sdk_0_2; class ChatLayerClass : public QObject,public ChatLayerInterface, public EventHandler { Q_OBJECT public: ChatLayerClass(); virtual ~ChatLayerClass(); virtual void createChat(const TreeModelItem &item); virtual void newMessageArrivedTo(const TreeModelItem &item, const QString &message, const QDateTime &date, bool history=false, bool in = true); virtual void setItemTypingState(const TreeModelItem &item, TypingAttribute); virtual void newServiceMessageArriveTo(const TreeModelItem &item, const QString &message); virtual void messageDelievered(const TreeModelItem &item, int message_position); virtual void contactChangeHisStatus(const TreeModelItem &item, const QIcon &icon); virtual void contactChangeHisClient(const TreeModelItem &item); virtual void changeOwnNickNameInConference(const TreeModelItem &item, const QString &new_nickname); virtual void addImage(const TreeModelItem &item, const QByteArray &image_raw) ; QStringList getConferenceItemsList(const TreeModelItem &item); virtual void setConferenceTopic(const TreeModelItem &item, const QString &topic); virtual void addConferenceItem(const TreeModelItem &item, const QString &name=""); virtual void renameConferenceItem(const TreeModelItem &item, const QString &new_name); virtual void removeConferenceItem(const TreeModelItem &item); virtual void setConferenceItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &status, int mass); virtual void setConferenceItemIcon(const TreeModelItem &item, const QIcon &icon, int position); virtual void setConferenceItemRole(const TreeModelItem &item, const QIcon &icon, const QString &role, int mass); virtual bool init(PluginSystemInterface *plugin_system); virtual void release(); virtual void setProfileName(const QString &profile_name); virtual void setLayerInterface( LayerType type, LayerInterface *linterface); virtual void saveLayerSettings(); virtual QList getLayerSettingsList(); virtual void removeLayerSettings(); virtual void saveGuiSettingsPressed(); virtual void removeGuiLayerSettings() {} void processEvent(Event &e); QTextEdit *getEditField(const TreeModelItem &item); public slots: void restorePreviousChats(); private: void createChat(const TreeModelItem &item,bool new_message); void loadSettings(); PluginSystemInterface *m_plugin_system; QIcon m_settings_icon; ChatLayerSettings *m_settings_widget; QTreeWidgetItem *m_settings_item; QString m_profile_name; bool m_tabbed_mode; SeparateChats *m_separate_management; TabbedChats *m_tabbed_management; void loadGuiSettings(); quint16 m_event_tray_clicked; quint16 m_event_show_hide_cl; quint16 m_event_change_id; quint16 m_event_head; quint16 m_event_js; quint16 m_event_all_plugin_loaded; void readAllUnreaded(); void checkForNewMessages(const TreeModelItem &item); NotificationLayerInterface *m_notification_layer; void saveUnreadedMessage(); void restoreUnreadedMessages(); bool m_open_chat_on_new_message; bool m_dont_show_events_if_message_chat_is_open; bool m_show_all; void loadHistoryMessages(const TreeModelItem &item); HistoryLayerInterface *m_history_layer; bool m_play_sound_if_active; }; #endif // CHATLAYERCLASS_H qutim-0.2.0/src/corelayers/chat/conferenceitem.h0000644000175000017500000000325011236355476023345 0ustar euroelessareuroelessar/* Conference Item Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 CONFERENCEITEM_H_ #define CONFERENCEITEM_H_ #include #include #include #include #include #include #include "confcontactlist.h" class ConfContactList; class ConferenceItem { public: ConferenceItem(const QVariant & display, ConfContactList *contact_list); virtual ~ConferenceItem(); QVariant data(int role) const; bool setData(const QVariant &value, int role); void setImage(QIcon icon, int column); QIcon getImage(int column); void setRow(QVariant item, int row); void setStatus(QString text, QIcon icon, int mass); void setRole(QString text, QIcon icon, int mass); int getMass(); private: ConfContactList *m_contact_list; QVariant m_item_display; QList m_item_icons; QList m_item_bottom_rows; QVariant m_item_type; int m_item_status_mass; int m_item_role_mass; QString m_item_status; QString m_item_role; QVariant m_current_status_icon; }; #endif /*CONFERENCEITEM_H_*/ qutim-0.2.0/src/corelayers/chat/separatechats.h0000644000175000017500000000445111236355476023212 0ustar euroelessareuroelessar/* SeparateChats Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 SEPARATECHATS_H #define SEPARATECHATS_H #include #include "chatforms/chatwindow.h" #include "chatforms/conferencewindow.h" #include #include "generalwindow.h" #include "logscity.h" using namespace qutim_sdk_0_2; class SeparateChats : public QObject { Q_OBJECT public: SeparateChats(const QString &profie_name); ~SeparateChats(); void loadSettings(); void createChat(const TreeModelItem &item,const QStringList &item_info,const QStringList &owner_info); void activateWindow(const TreeModelItem &item); void contactChangeHisStatus(const TreeModelItem &item, const QIcon &icon); void contactChangeHisClient(const TreeModelItem &item); bool checkForActivation(const TreeModelItem &item, bool just_check = false); void setItemTypingState(const TreeModelItem &item, TypingAttribute); void changeId(const TreeModelItem &item, const QString &new_id); void alertWindow(const TreeModelItem &item); void setConferenceTopic(const TreeModelItem &item, const QString &topic); QTextEdit *getEditField(const TreeModelItem &item); private slots: void chatClosed(QObject *win); void windowActivatedByUser(); void closeChat(); private: QString m_profile_name; QHash m_chat_list; LogsCity &m_logs_city; bool m_webkit_mode; void restoreWindowSizeAndPosition(GeneralWindow *win); bool m_close_after_send; void setWindowOptions(GeneralWindow *win); bool m_send_on_enter; bool m_send_on_double_enter; bool m_send_typing_notifications; bool m_dont_blink; }; #endif // SEPARATECHATS_H qutim-0.2.0/src/corelayers/notification/0000755000175000017500000000000011273100754021741 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/notification/defaultnotificationlayer.cpp0000644000175000017500000004344511242311235027541 0ustar euroelessareuroelessar/* DefaultNotificationLayer Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "defaultnotificationlayer.h" #include "soundlayersettings.h" #include #include "src/iconmanager.h" DefaultNotificationLayer::DefaultNotificationLayer() : m_sound_path(static_cast(NotifyCount)), m_events(new NotificationEvents) { m_settings.clear(); m_first_tray_message_is_shown = false; m_position_in_stack = 1; m_show_message = true; m_tray_layer = 0; } bool DefaultNotificationLayer::init(PluginSystemInterface *plugin_system) { m_name = "qutim"; quint8 major, minor, secminor; quint16 svn; m_plugin_system = plugin_system; m_plugin_system->getQutimVersion(major, minor, secminor, svn); m_version = QString("%1.%2.%3 r%4").arg(major).arg(minor).arg(secminor).arg(svn); m_events->popup_press_left = plugin_system->registerEventHandler("Core/Notification/PopupPressedByLeft"); m_events->popup_press_right = plugin_system->registerEventHandler("Core/Notification/PopupPressedByRight"); m_events->popup_press_middle = plugin_system->registerEventHandler("Core/Notification/PopupPressedByMiddle"); m_events->popup_release_left = plugin_system->registerEventHandler("Core/Notification/PopupReleasedByLeft"); m_events->popup_release_right = plugin_system->registerEventHandler("Core/Notification/PopupReleasedByRight"); m_events->popup_release_middle = plugin_system->registerEventHandler("Core/Notification/PopupReleasedByMiddle"); m_events->popup_dbl_click_left = plugin_system->registerEventHandler("Core/Notification/PopupDoubleClickedByLeft"); m_events->popup_dbl_click_right = plugin_system->registerEventHandler("Core/Notification/PopupDoubleClickedByRight"); m_events->popup_dbl_click_middle = plugin_system->registerEventHandler("Core/Notification/PopupDoubleClickedByMiddle"); m_events->get_sound_enable = plugin_system->registerEventHandler("Core/Notification/GetSoundIsEnabled", this); m_events->set_sound_enable = plugin_system->registerEventHandler("Core/Notification/SetSoundIsEnabled", this); m_events->sound_enabled = plugin_system->registerEventHandler("Core/Notification/SoundIsEnabled"); m_events->get_popup_enable = plugin_system->registerEventHandler("Core/Notification/GetPopupIsEnabled", this); m_events->set_popup_enable = plugin_system->registerEventHandler("Core/Notification/SetPopupIsEnabled", this); m_events->popup_enabled = plugin_system->registerEventHandler("Core/Notification/PopupIsEnabled"); m_events->reload_settings = plugin_system->registerEventHandler("Core/Notification/ReloadSettings", this); for(int i=0;ipopup_enabled, 1, &m_show_popup); m_plugin_system->sendEvent(popup_event); Event sound_event(m_events->sound_enabled, 1, &m_enable_sound); m_plugin_system->sendEvent(sound_event); settings.endGroup(); } void DefaultNotificationLayer::loadTheme() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("gui"); m_tray_theme_path = settings.value("popup",":/style/traytheme").toString(); settings.endGroup(); if ( m_tray_theme_path.isEmpty() ) { m_tray_theme_content_msg.clear(); m_tray_theme_content_msg_css.clear(); m_tray_theme_content_onl.clear(); m_tray_theme_content_onl_css.clear(); m_tray_theme_content_sys.clear(); m_tray_theme_content_sys_css.clear(); m_tray_theme_header_msg.clear(); m_tray_theme_header_msg_css.clear(); m_tray_theme_header_onl.clear(); m_tray_theme_header_onl_css.clear(); m_tray_theme_header_sys.clear(); m_tray_theme_header_sys_css.clear(); } else { QFile fileOnlHead(m_tray_theme_path + "/onlalert/header.html"); if ( fileOnlHead.open(QIODevice::ReadOnly)) { m_tray_theme_header_onl = fileOnlHead.readAll(); fileOnlHead.close(); } QFile fileOnlHeadCSS(m_tray_theme_path + "/onlalert/header.css"); if ( fileOnlHeadCSS.open(QIODevice::ReadOnly)) { m_tray_theme_header_onl_css = fileOnlHeadCSS.readAll(); fileOnlHeadCSS.close(); } QFile fileOnlCont(m_tray_theme_path + "/onlalert/content.html"); if ( fileOnlCont.open(QIODevice::ReadOnly)) { m_tray_theme_content_onl = fileOnlCont.readAll(); fileOnlCont.close(); } QFile fileOnlContCSS(m_tray_theme_path + "/onlalert/content.css"); if ( fileOnlContCSS.open(QIODevice::ReadOnly)) { m_tray_theme_content_onl_css = fileOnlContCSS.readAll(); fileOnlContCSS.close(); } QFile fileMsgHead(m_tray_theme_path + "/msg/header.html"); if ( fileMsgHead.open(QIODevice::ReadOnly)) { m_tray_theme_header_msg = fileMsgHead.readAll(); fileMsgHead.close(); } QFile fileMsgHeadCSS(m_tray_theme_path + "/msg/header.css"); if ( fileMsgHeadCSS.open(QIODevice::ReadOnly)) { m_tray_theme_header_msg_css = fileMsgHeadCSS.readAll(); fileMsgHeadCSS.close(); } QFile fileMsgCont(m_tray_theme_path + "/msg/content.html"); if ( fileMsgCont.open(QIODevice::ReadOnly)) { m_tray_theme_content_msg = fileMsgCont.readAll(); fileMsgCont.close(); } QFile fileMsgContCSS(m_tray_theme_path + "/msg/content.css"); if ( fileMsgContCSS.open(QIODevice::ReadOnly)) { m_tray_theme_content_msg_css = fileMsgContCSS.readAll(); fileMsgContCSS.close(); } QFile fileSysHead(m_tray_theme_path + "/system/header.html"); if ( fileSysHead.open(QIODevice::ReadOnly)) { m_tray_theme_header_sys = fileSysHead.readAll(); fileSysHead.close(); } QFile fileSysHeadCSS(m_tray_theme_path + "/system/header.css"); if ( fileSysHeadCSS.open(QIODevice::ReadOnly)) { m_tray_theme_header_sys_css = fileSysHeadCSS.readAll(); fileSysHeadCSS.close(); } QFile fileSysCont(m_tray_theme_path + "/system/content.html"); if ( fileSysCont.open(QIODevice::ReadOnly)) { m_tray_theme_content_sys = fileSysCont.readAll(); fileSysCont.close(); } QFile fileSysContCSS(m_tray_theme_path + "/system/content.css"); if ( fileSysContCSS.open(QIODevice::ReadOnly)) { m_tray_theme_content_sys_css = fileSysContCSS.readAll(); fileSysContCSS.close(); } } } void DefaultNotificationLayer::setLayerInterface( LayerType type, LayerInterface *interface) { switch(type) { case TrayLayer: m_tray_layer = reinterpret_cast(interface); break; case SoundEngineLayer: m_sound_layer = reinterpret_cast(interface); break; case ChatLayer: m_chat_layer = reinterpret_cast(interface); break; default: break; } } void DefaultNotificationLayer::saveLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { NotificationsLayerSettings* ns = dynamic_cast(settings.settings_widget); if(ns) ns->saveSettings(); SoundLayerSettings *ss = dynamic_cast(settings.settings_widget); if(ss) ss->saveSettings(); } loadSettings(); } QList DefaultNotificationLayer::getLayerSettingsList() { SettingsStructure settings; settings.settings_item = new QTreeWidgetItem(); settings.settings_item ->setText(0, QObject::tr("Notifications")); settings.settings_item ->setIcon(0, IconManager::instance().getIcon("events")); settings.settings_widget = new NotificationsLayerSettings(m_profile_name); m_settings.append(settings); settings.settings_item = new QTreeWidgetItem(); settings.settings_item ->setText(0, QObject::tr("Sound notifications")); settings.settings_item ->setIcon(0, IconManager::instance().getIcon("events")); settings.settings_widget = new SoundLayerSettings(m_profile_name); m_settings.append(settings); return m_settings; } void DefaultNotificationLayer::removeLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { delete settings.settings_item; delete settings.settings_widget; } m_settings.clear(); } void DefaultNotificationLayer::showPopup(const TreeModelItem &item, const QString &message, NotificationType type) { switch( type ) { case NotifySystem: case NotifyStatusChange: case NotifyMessageGet: case NotifyTyping: case NotifyBlockedMessage: case NotifyBirthday: case NotifyCustom: case NotifyOnline: case NotifyOffline: break; default: return; } PluginSystem::instance().userNotification(item, message, type); QString trayMessageMsg; QString msg; //read contact and account info PluginSystem &ps = PluginSystem::instance(); QStringList contact_info; QStringList account_info; TreeModelItem account_item = item; account_item.m_item_name = item.m_account_name; QString contact_nick = item.m_item_name, contact_avatar, account_nick = item.m_account_name, account_avatar; if( type != NotifySystem ) { contact_info = ps.getAdditionalInfoAboutContact(item); account_info = ps.getAdditionalInfoAboutContact(account_item); if ( contact_info.count() > 0) { contact_nick = contact_info.at(0); } if ( contact_info.count() > 1 ) { contact_avatar= contact_info.at(1); } if ( account_info.count() > 0) { account_nick = account_info.at(0); } if ( account_info.count() > 1 ) { account_avatar = account_info.at(1); } } bool show_message = false; switch ( type ) { case NotifySystem: msg = message; show_message = true; break; case NotifyStatusChange: msg = contact_nick + " " + message; trayMessageMsg = message; show_message = m_show_change_status; break; case NotifyMessageGet: msg = QObject::tr("Message from %1:\n%2").arg(contact_nick).arg(message); trayMessageMsg = message; show_message = m_show_message; break; case NotifyTyping: msg = QObject::tr("%1 is typing").arg(contact_nick); trayMessageMsg = QObject::tr("typing"); show_message = m_show_typing; break; case NotifyBlockedMessage: msg = QObject::tr("Blocked message from %1:\n%2").arg(contact_nick).arg(message); trayMessageMsg = QObject::tr("(BLOCKED)\n") + message; show_message = true; break; case NotifyBirthday: msg = QObject::tr("%1 has birthday today!!").arg(contact_nick); trayMessageMsg = QObject::tr("has birthday today!!"); show_message = true; break; case NotifyCustom: msg = contact_nick + "(" + item.m_item_name + ") " + message; trayMessageMsg = message; show_message = true; break; case NotifyOnline: msg = contact_nick + " " + message; trayMessageMsg = message; show_message = m_show_signon; break; case NotifyOffline: msg = contact_nick + " " + message; trayMessageMsg = message; show_message = m_show_signoff; break; // It's impossible.. but who knows?.. default: return; // msg = contact_nick + " " + message; // trayMessageMsg = message; // show_message = true; } if ( m_show_balloon && show_message && m_tray_layer ) { m_tray_layer->showMessage(account_nick, msg, m_balloon_sec * 1000); } if ( m_show_popup && show_message ) { if ( !m_first_tray_message_is_shown ) { m_first_tray_message_is_shown = true; m_position_in_stack = 1; } PopupWindow *popup_window = new PopupWindow(this, m_chat_layer,item, type, message, m_popup_width,m_popup_height, m_popup_sec, m_popup_position, m_popup_style, m_position_in_stack, type != NotifySystem ); switch(type) { case NotifySystem: popup_window->setTheme(m_tray_theme_header_sys, m_tray_theme_header_sys_css, m_tray_theme_content_sys, m_tray_theme_content_sys_css, m_tray_theme_path); break; case NotifyMessageGet: popup_window->setTheme(m_tray_theme_header_msg, m_tray_theme_header_msg_css, m_tray_theme_content_msg, m_tray_theme_content_msg_css, m_tray_theme_path); break; default: popup_window->setTheme(m_tray_theme_header_onl, m_tray_theme_header_onl_css, m_tray_theme_content_onl, m_tray_theme_content_onl_css, m_tray_theme_path); } if(type == NotifySystem) popup_window->setSystemData(item.m_account_name, message); else popup_window->setData(item, account_nick, contact_nick, contact_avatar,trayMessageMsg); popup_window->firstTrayWindow = m_first_tray_message_is_shown; popup_window->showTrayMessage(); if ( (++m_position_in_stack) > 3) m_position_in_stack = 3; m_popup_list.append(popup_window); } } void DefaultNotificationLayer::playSound(const TreeModelItem &item, NotificationType type) { QString file_name = m_sound_path.value(type, QString()); if(!file_name.isEmpty() && m_sound_layer && m_enable_sound) m_sound_layer->playSound(file_name); } void DefaultNotificationLayer::notify(const TreeModelItem &item, const QString &message, NotificationType type) { playSound(item, type); showPopup(item, message, type); } void DefaultNotificationLayer::deletePopupWindow(PopupWindow *window) { if ( window->firstTrayWindow ) { m_first_tray_message_is_shown = false; } m_popup_list.removeAll(window); } void DefaultNotificationLayer::processEvent(Event &event) { if(event.id == m_events->get_popup_enable) { Event ev(m_events->popup_enabled, 1, &m_show_popup); m_plugin_system->sendEvent(ev); } else if(event.id == m_events->get_sound_enable) { Event ev(m_events->sound_enabled, 1, &m_enable_sound); m_plugin_system->sendEvent(ev); } else if(event.id == m_events->set_popup_enable) { m_show_popup = event.at(0); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.setValue("notifications/popup", m_show_popup); Event ev(m_events->popup_enabled, 1, &m_show_popup); m_plugin_system->sendEvent(ev); } else if(event.id == m_events->set_sound_enable) { m_enable_sound = event.at(0); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.setValue("sounds/enable", m_enable_sound); Event ev(m_events->sound_enabled, 1, &m_enable_sound); m_plugin_system->sendEvent(ev); } else if(event.id == m_events->reload_settings) { loadSettings(); } } qutim-0.2.0/src/corelayers/notification/popupwindow.ui0000644000175000017500000000421511251421010024660 0ustar euroelessareuroelessar PopupWindowClass 0 0 184 163 PopupWindow 0 0 0 0 0 24 Qt::AlignCenter true Qt::ClickFocus Qt::NoContextMenu Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOff Qt::NoTextInteraction false PopupTextBrowser QTextBrowser
src/corelayers/notification/popuptextbrowser.h
qutim-0.2.0/src/corelayers/notification/soundlayersettings.h0000644000175000017500000000460111236355476026075 0ustar euroelessareuroelessar/* SoundSettings Copyright (c) 2008-2009 by Nigmatullin Ruslan 2008 by Denis Novikov *************************************************************************** * * * 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 SOUNDLAYERSETTINGS_H #define SOUNDLAYERSETTINGS_H #include #include #include #include "include/qutim/plugininterface.h" #include "ui_soundlayersettings.h" using namespace qutim_sdk_0_2; class SoundLayerSettings : public QWidget { Q_OBJECT public: SoundLayerSettings(const QString &profile_name, QWidget *parent = 0); ~SoundLayerSettings() {}; void loadSettings(); void saveSettings(); private slots: // Play tab widgets // void on_systemCombo_currentIndexChanged(int index); // void on_commandButton_clicked(); // Events tab widgets void on_eventsTree_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_eventsTree_itemChanged(QTreeWidgetItem *item, int column); void on_fileEdit_textChanged(const QString &text); void on_applyButton_clicked(); void on_openButton_clicked(); void on_playButton_clicked(); void on_exportButton_clicked(); void on_importButton_clicked(); void widgetStateChanged() { if (!changed) { emit settingsChanged(); changed = true; } } signals: void settingsChanged(); void settingsSaved(); private: void appendStatus(const QString &statusText); void appendEvent(const QString &eventName, const NotificationType event); inline QString getCurrentFile() const; // inline qutim_sdk_0_2::SoundEngineSystem getCurrentSoundSystem() const; bool changed; QString m_profile_name; Ui::SoundSettingsClass ui; QString lastDir; QList statusList, eventList; }; #endif // SOUNDLAYERSETTINGS_H qutim-0.2.0/src/corelayers/notification/popupwindow.cpp0000644000175000017500000002323611247741520025051 0ustar euroelessareuroelessar/* PopupWindow TrayTextBrowser Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "popupwindow.h" #include "iconmanager.h" #include #include #include #include #include #include #include PopupWindow::~PopupWindow() { m_notification_layer->deletePopupWindow(this); } PopupWindow::PopupWindow(DefaultNotificationLayer *layer, ChatLayerInterface *chat_layer, const TreeModelItem &item, quint8 type, const QString &message, int width, int height, int t, int pos, int st, int psInStack, bool f, QWidget *parent) : QWidget(parent), m_notification_layer(layer), m_item(item), m_type(type), m_message(message), m_chat_layer(chat_layer) { ui.setupUi(this); ui.nickLabel->installEventFilter(this); ui.textBrowser->findChild("qt_scrollarea_viewport")->installEventFilter(this); // connect(ui.textBrowser, SIGNAL(closeWindow()), this, SLOT(close())); // connect(ui.textBrowser, SIGNAL(startChat()), this, SLOT(startChatSlot())); time = t; contactUin = type==NotifySystem?item.m_account_name:item.m_item_name; position = pos; style = st; positionInStack = psInStack; firstTrayWindow = false; userMessage = f; setFixedSize(QSize(width, height)); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); QTimer::singleShot((time + 1) * 1000, this, SLOT(close())); #if defined(Q_OS_MAC) setWindowFlags(windowFlags() | Qt::FramelessWindowHint); #else setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::ToolTip); #endif } bool PopupWindow::eventFilter(QObject *obj, QEvent *event) { if ( obj->objectName() == "textBrowser" ) { // if ( event->type() == QEvent::Paint ) // { // qDebug()<<"left"; // } // qDebug()<type() == QEvent::MouseButtonDblClick) { QMouseEvent *mevent = (QMouseEvent *) event; Event ev; if (mevent->button() == Qt::RightButton) ev.id = m_notification_layer->getEvents()->popup_dbl_click_right; else if (mevent->button() == Qt::LeftButton) ev.id = m_notification_layer->getEvents()->popup_dbl_click_left; else if (mevent->button() == Qt::MidButton) ev.id = m_notification_layer->getEvents()->popup_dbl_click_middle; else return QWidget::eventFilter(obj,event); ev.append(&m_type); ev.append(&m_item); ev.append(&m_message); PluginSystem::instance().sendEvent(ev); return true; } else if(event->type() == QEvent::MouseButtonPress) { QMouseEvent *mevent = (QMouseEvent *) event; Event ev; if (mevent->button() == Qt::RightButton) ev.id = m_notification_layer->getEvents()->popup_press_right; else if (mevent->button() == Qt::LeftButton) ev.id = m_notification_layer->getEvents()->popup_press_left; else if (mevent->button() == Qt::MidButton) ev.id = m_notification_layer->getEvents()->popup_press_middle; else return QWidget::eventFilter(obj,event); ev.append(&m_type); ev.append(&m_item); ev.append(&m_message); PluginSystem::instance().sendEvent(ev); return true; } else if(event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mevent = (QMouseEvent *) event; Event ev; if (mevent->button() == Qt::RightButton) { ev.id = m_notification_layer->getEvents()->popup_release_right; close(); } else if (mevent->button() == Qt::LeftButton) { ev.id = m_notification_layer->getEvents()->popup_release_left; // qDebug()<<"left"; startChatSlot(); } else if (mevent->button() == Qt::MidButton) ev.id = m_notification_layer->getEvents()->popup_release_middle; else return true; ev.append(&m_type); ev.append(&m_item); ev.append(&m_message); PluginSystem::instance().sendEvent(ev); return true; } return QWidget::eventFilter(obj,event); } void PopupWindow::showTrayMessage() { QRect geometry = QApplication::desktop()->availableGeometry(); moveToPointX = 0; moveToPointY = 0; switch(position) { case 0: moveToPointX = geometry.left(); moveToPointY = geometry.top() + (positionInStack - 1) * height(); break; case 1: moveToPointX = geometry.right() - width(); moveToPointY = geometry.top() + (positionInStack - 1) * height(); break; case 2: moveToPointX = geometry.left(); moveToPointY = geometry.bottom() - positionInStack * height(); break; default: moveToPointX = geometry.right() - width(); moveToPointY = geometry.bottom() - positionInStack * height(); } slide(); } void PopupWindow::slide() { fromX = 0; fromY = 0; switch (style) { case 0: move(moveToPointX, moveToPointY); show(); break; case 1: if (position == 0 || position == 1) { fromX = moveToPointX; fromY = moveToPointY - height(); move(fromX, fromY); show(); slideVerticallyDown(); } else if (position == 2 || position == 3) { fromX = moveToPointX; fromY = moveToPointY + height(); move(fromX, fromY); show(); slideVerticallyUp(); } break; case 2: if (position == 0 || position == 2) { fromX = moveToPointX - width(); fromY = moveToPointY; move(fromX, fromY); show(); slideHorizontallyRight(); } else if (position == 1 || position == 3) { fromX = moveToPointX + width(); fromY = moveToPointY; move(fromX, fromY); show(); slideHorizontallyLeft(); } break; default: move(moveToPointX, moveToPointY); show(); } } void PopupWindow::slideVerticallyUp() { fromY -= 5; if (fromY >= moveToPointY) { move(moveToPointX, fromY); QTimer::singleShot(10, this, SLOT(slideVerticallyUp())); } } void PopupWindow::slideVerticallyDown() { fromY += 5; if (fromY <= moveToPointY) { move(moveToPointX, fromY); QTimer::singleShot(10, this, SLOT(slideVerticallyDown())); } } void PopupWindow::slideHorizontallyRight() { fromX += 5; if (fromX <= moveToPointX) { move(fromX, moveToPointY); QTimer::singleShot(10, this, SLOT(slideHorizontallyRight())); } } void PopupWindow::slideHorizontallyLeft() { fromX -= 5; if (fromX >= moveToPointX) { move(fromX, moveToPointY); QTimer::singleShot(10, this, SLOT(slideHorizontallyLeft())); } } void PopupWindow::setData(const TreeModelItem &item, const QString &mineNick, const QString &from, const QString &picturePath, const QString &msg) { m_contact_item = item; if ( themeHeader.isEmpty() ) { ui.nickLabel->setStyleSheet("background-image : url(:/icons/tray_pics/header.png);\n\ncolor : white; \n"); ui.nickLabel->setText(tr("%1").arg(Qt::escape(mineNick))); } else { themeHeader.replace("%path%", themePath); themeHeader.replace("%minenick%", (Qt::escape(mineNick))); themeHeader.replace("%fromnick%", Qt::escape(from)); ui.nickLabel->setStyleSheet(themeHeaderCSS); ui.nickLabel->setText(themeHeader); } if(themeContent.isEmpty()) { QString message = tr("%1
%2").arg(Qt::escape(from)).arg(Qt::escape(msg)); setDataHtml(message, picturePath); } else { themeContent.replace("%path%", Qt::escape(themePath)); themeContent.replace("%message%", Qt::escape(msg)); themeContent.replace("%fromnick%", Qt::escape(from)); ui.textBrowser->setStyleSheet(themeContentCSS); setDataHtml(themeContent, picturePath); } } void PopupWindow::startChatSlot() { if (userMessage) { m_chat_layer->createChat(m_contact_item); } close(); } void PopupWindow::setSystemData(const QString& nickName, const QString &msg) { if ( themeHeader.isEmpty() ) { ui.nickLabel->setStyleSheet("background-image : url(:/icons/tray_pics/header.png);\n\ncolor : white; \n"); ui.nickLabel->setText(tr("%1").arg(Qt::escape(nickName))); } else { themeHeader.replace("%path%", Qt::escape(themePath)); themeHeader.replace("%minenick%", Qt::escape(nickName)); ui.nickLabel->setStyleSheet(themeHeaderCSS); ui.nickLabel->setText(themeHeader); } if ( themeContent.isEmpty()) { QString message = tr("%1").arg(msg); setSystemDataHtml(msg); } else { themeContent.replace("%path%", Qt::escape(themePath)); themeContent.replace("%message%", msg); ui.textBrowser->setStyleSheet(themeContentCSS); setSystemDataHtml(themeContent); } } void PopupWindow::setTheme(const QString &header, const QString &headerCss, const QString &content, const QString &contentCss, const QString &path) { themePath = path; themeHeader = header; themeHeaderCSS = headerCss; themeContent = content; themeContentCSS = contentCss; themeHeaderCSS.replace("%path%", Qt::escape(themePath)); themeContentCSS.replace("%path%", Qt::escape(themePath)); } void PopupWindow::setDataHtml(const QString &msg, const QString &picturePath) { QString picture; if ( !picturePath.isEmpty() && QFile::exists(picturePath) ) picture = picturePath; else picture = IconManager::instance().getIconFileName("noavatar"); QString message = msg; ui.textBrowser->append(message.replace("%avatar%", picture)); ui.textBrowser->moveCursor(QTextCursor::Start); ui.textBrowser->ensureCursorVisible(); } void PopupWindow::setSystemDataHtml(const QString &msg) { ui.textBrowser->append(msg); ui.textBrowser->moveCursor(QTextCursor::Start); ui.textBrowser->ensureCursorVisible(); } qutim-0.2.0/src/corelayers/notification/notificationslayersettings.h0000644000175000017500000000257011236355476027621 0ustar euroelessareuroelessar/* NotificationsLayerSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 NOTIFICATIONSLAYERSETTINGS_H #define NOTIFICATIONSLAYERSETTINGS_H #include #include "ui_notificationslayersettings.h" class NotificationsLayerSettings : public QWidget { Q_OBJECT public: NotificationsLayerSettings(const QString &profile_name, QWidget *parent = 0); ~NotificationsLayerSettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } signals: void settingsChanged(); void settingsSaved(); private: Ui::NotificationsLayerSettingsClass ui; bool changed; QString m_profile_name; }; #endif // NOTIFICATIONSLAYERSETTINGS_H qutim-0.2.0/src/corelayers/notification/popuptextbrowser.cpp0000644000175000017500000000177011236355476026142 0ustar euroelessareuroelessar/* PopupTextBrowser Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "popuptextbrowser.h" #include void PopupTextBrowser::mouseReleaseEvent ( QMouseEvent * event ) { // if ( event->button() == Qt::RightButton ) // emit closeWindow(); // else if (event->button() == Qt::LeftButton ) // emit startChat(); QTextBrowser::mouseReleaseEvent(event); } qutim-0.2.0/src/corelayers/notification/soundlayersettings.cpp0000644000175000017500000003545511242311235026421 0ustar euroelessareuroelessar/* SoundSettings Copyright (c) 2008-2009 by Nigmatullin Ruslan 2008 by Denis Novikov *************************************************************************** * * * 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 #include #include #include "soundlayersettings.h" #include "src/abstractlayer.h" SoundLayerSettings::SoundLayerSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), changed(false) { m_profile_name = profile_name; ui.setupUi(this); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); QString sounds_theme = settings.value("gui/sounds", "").toString(); if ( !sounds_theme.isEmpty() ) { ui.eventsTree->setVisible(false); ui.label_7->setVisible(false); ui.playButton->setVisible(false); ui.fileEdit->setVisible(false); ui.openButton->setVisible(false); ui.applyButton->setVisible(false); ui.exportButton->setVisible(false); ui.importButton->setVisible(false); return; } ui.label->setVisible(false); // Filling events table (tree widget) appendEvent(tr("Startup"), NotifyStartup); appendEvent(tr("System event"), NotifySystem); appendEvent(tr("Outgoing message"), NotifyMessageSend); appendEvent(tr("Incoming message"), NotifyMessageGet); appendEvent(tr("Contact is online"), NotifyOnline); appendEvent(tr("Contact changed status"), NotifyStatusChange); appendEvent(tr("Contact went offline"), NotifyOffline); appendEvent(tr("Contact's birthday is comming"), NotifyBirthday); loadSettings(); //ui.playOnlyTree->setEnabled(false); // Filling systemCombo // ui.systemCombo->setItemData(0, qutim_sdk_0_2::NoSound); //#ifdef HAVE_PHONON // ui.systemCombo->addItem(tr("Phonon"), qutim_sdk_0_2::LibPhonon); //#endif //#if defined(Q_WS_WIN) || defined(Q_WS_MAC) // ui.systemCombo->addItem(tr("QSound"), qutim_sdk_0_2::LibSound); //#endif // ui.systemCombo->addItem(tr("Command"), qutim_sdk_0_2::UserCommand); // ui.systemCombo->addItem(tr("Plugin"), qutim_sdk_0_2::PluginEngine); // // // disabling events tab // //ui.eventsTab->setEnabled(false); // // // connections // connect(ui.commandEdit, SIGNAL(textChanged(const QString &)), // this, SLOT(widgetStateChanged())); } inline void SoundLayerSettings::appendEvent(const QString &eventName, const NotificationType event) { static const Qt::ItemFlags itemFlags = Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled; QTreeWidgetItem *newItem = new QTreeWidgetItem(ui.eventsTree); newItem->setFlags(itemFlags); newItem->setText(0, eventName); newItem->setCheckState(0, Qt::Unchecked); newItem->setData(0, Qt::UserRole, static_cast(event)); eventList << newItem; } void SoundLayerSettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("sounds"); // ui.systemCombo->setCurrentIndex(ui.systemCombo->findData(static_cast(settings.value("soundengine", // 0).toInt()))); QString fileName; for (int i = 0; i < eventList.size(); i++) { fileName = settings.value("event" + QString::number(eventList.at(i)->data(0, Qt::UserRole).toInt()), "-").toString(); eventList.at(i)->setCheckState(0, (fileName.at(0) == '+') ? Qt::Checked : Qt::Unchecked); eventList.at(i)->setData(0, Qt::UserRole+1, fileName.mid(1)); } //#ifndef Q_OS_WIN32 // ui.commandEdit->setText(settings.value("command", "play \"%1\"").toString()); //#else // ui.commandEdit->setText(settings.value("command", "").toString()); //#endif settings.endGroup(); changed = false; } void SoundLayerSettings::saveSettings() { // we do not save anything until something has been changed if (!changed) return; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("sounds"); // QString command = ui.commandEdit->text().trimmed(); // if (getCurrentSoundSystem() == qutim_sdk_0_2::UserCommand) // { // if (command.isEmpty()) // ui.systemCombo->setCurrentIndex(0); // else if (!command.contains("%1")) command += " \"%1\""; // ui.commandEdit->setText(command); // } // // settings.setValue("command", command); // // settings.setValue("soundengine", // ui.systemCombo->itemData(ui.systemCombo->currentIndex()).toInt()); int i; QString fileName; for (i = 0; i < eventList.size(); i++) { fileName = (eventList.at(i)->checkState(0) == Qt::Checked) ? "+" : "-"; fileName += eventList.at(i)->data(0, Qt::UserRole+1).toString(); settings.setValue("event" + QString::number(eventList.at(i)->data(0, Qt::UserRole).toInt()), fileName); } settings.endGroup(); changed = false; emit settingsSaved(); } //void SoundLayerSettings::on_systemCombo_currentIndexChanged(int /* index */) //{ // qutim_sdk_0_2::SoundEngineSystem sys = getCurrentSoundSystem(); // // ui.commandEdit->setEnabled(false); // ui.commandButton->setEnabled(false); // if (sys != qutim_sdk_0_2::NoSound) // { // //ui.playOnlyTree->setEnabled(true); // //ui.eventsTab->setEnabled(true); // if (sys == qutim_sdk_0_2::UserCommand) // { // ui.commandEdit->setEnabled(true); // ui.commandButton->setEnabled(true); // } // } // else // { // //ui.playOnlyTree->setEnabled(false); // //ui.eventsTab->setEnabled(false); // } // // widgetStateChanged(); //} // //void SoundLayerSettings::on_commandButton_clicked() //{ //#ifdef Q_OS_WIN32 // QString binName = QFileDialog::getOpenFileName(this, // tr("Select command path"), QDir::currentPath(), // tr("Executables (*.exe *.com *.cmd *.bat)\nAll files (*.*)")); //#else // QString binName = QFileDialog::getOpenFileName(this, // tr("Select command path"), "/bin", // tr("Executables")); //#endif // WIN32 // if (binName.isEmpty()) return; // //#ifndef Q_OS_WIN32 // ui.commandEdit->setText(binName + " \"%1\""); //#else // ui.commandEdit->setText(QString("\"%1\" \"%2\"").arg(binName).arg("%1")); //#endif // WIN32 //} void SoundLayerSettings::on_eventsTree_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem * /* previous */) { if (!current) return; if (current->checkState(0) == Qt::Checked) { ui.fileEdit->setEnabled(true); ui.openButton->setEnabled(true); } else { ui.fileEdit->setEnabled(false); ui.openButton->setEnabled(false); } if (ui.fileEdit->text() == getCurrentFile()) on_fileEdit_textChanged(getCurrentFile()); else ui.fileEdit->setText(getCurrentFile()); } void SoundLayerSettings::on_eventsTree_itemChanged(QTreeWidgetItem *item, int column) { if (column) return; ui.fileEdit->setEnabled(item->checkState(0) == Qt::Checked); on_fileEdit_textChanged(ui.fileEdit->text()); ui.openButton->setEnabled(ui.fileEdit->isEnabled()); widgetStateChanged(); } void SoundLayerSettings::on_fileEdit_textChanged(const QString &text) { if (ui.fileEdit->isEnabled()) { if (text.isEmpty()) { ui.applyButton->setEnabled(true); ui.playButton->setEnabled(false); } else if (QFile::exists(text)) { QTreeWidgetItem *item = ui.eventsTree->currentItem(); if (item) ui.applyButton->setEnabled(getCurrentFile() != text); else ui.applyButton->setEnabled(false); ui.playButton->setEnabled(true); } else { ui.applyButton->setEnabled(false); ui.playButton->setEnabled(false); } } else { ui.applyButton->setEnabled(false); ui.playButton->setEnabled(false); } } void SoundLayerSettings::on_applyButton_clicked() { ui.eventsTree->currentItem()->setData(0, Qt::UserRole+1, ui.fileEdit->text()); ui.applyButton->setEnabled(false); widgetStateChanged(); } void SoundLayerSettings::on_openButton_clicked() { QString filter = tr("Sound files (*.wav);;All files (*.*)", "Don't remove ';' chars!"); if (lastDir.isEmpty()) { if (!ui.fileEdit->text().isEmpty() && QFile::exists(ui.fileEdit->text())) lastDir = ui.fileEdit->text().section('/', 0, -2); else lastDir = QDir::currentPath(); } QString fileName = QFileDialog::getOpenFileName(this, tr("Open sound file"), lastDir, filter); if (fileName.isEmpty()) return; ui.fileEdit->setText(fileName); if (getCurrentFile().isEmpty()) { ui.applyButton->setEnabled(true); ui.applyButton->animateClick(500); } lastDir = fileName.section('/', 0, -2); } void SoundLayerSettings::on_playButton_clicked() { // qutim_sdk_0_2::SoundEngineSystem sys = getCurrentSoundSystem(); // // if (sys == qutim_sdk_0_2::UserCommand) // { // QString command = ui.commandEdit->text().trimmed(); // if (command.isEmpty()) // { // ui.systemCombo->setCurrentIndex(0); // return; // } // if (!command.contains("%1")) // { // command += " \"%1\""; // ui.commandButton->setText(command); // } // AbstractSoundLayer::instance().testPlaySound(sys, command.arg(ui.fileEdit->text())); // } // else // AbstractSoundLayer::instance().testPlaySound(sys, ui.fileEdit->text()); AbstractLayer::SoundEngine()->playSound(ui.fileEdit->text()); } void SoundLayerSettings::on_exportButton_clicked() { QString fileName(QFileDialog::getSaveFileName(this, tr("Export sound style"), lastDir, tr("XML files (*.xml)"))); if (fileName.isEmpty()) return; if (!fileName.endsWith(".xml")) fileName += ".xml"; QString exportDir = fileName.section('/', 0, -2); lastDir = exportDir; if (QMessageBox::question(this, tr("Export..."), tr("All sound files will be copied into \"%1/\" directory. " \ "Existing files will be replaced without any prompts.\n" \ "Do You want to continue?").arg(exportDir), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) return; exportDir += "/%1"; QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::critical(this, tr("Error"), tr("Could not open file \"%1\" for writing.").arg(fileName)); return; } QDomDocument doc("qutimsounds"); QDomProcessingInstruction process = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""); doc.appendChild(process); QDomElement rootElement = doc.createElement("qutimsounds"); doc.appendChild(rootElement); QDomElement soundsElement = doc.createElement("sounds"); int i; QString soundFile; QString newFile; for (i = 0; i < eventList.size(); i++) { soundFile = eventList.at(i)->data(0, Qt::UserRole+1).toString(); if (soundFile.isEmpty()) continue; if (!QFile::exists(soundFile)) continue; QDomElement soundElement = doc.createElement("sound"); QDomAttr eventAttr = doc.createAttribute("event"); eventAttr.setValue(qutim_sdk_0_2::XmlEventNames[eventList.at(i)->data(0, Qt::UserRole).toInt()]); soundElement.setAttributeNode(eventAttr); QDomElement fileElement = doc.createElement("file"); QDomText fileText = doc.createTextNode(soundFile.mid(soundFile.lastIndexOf('/')+1)); newFile = exportDir.arg(fileText.data()); // check if directories are different if (newFile.section('/', 0, -2) != soundFile.section('/', 0, -2)) { if (QFile::exists(newFile)) QFile::remove(newFile); if (!QFile::copy(soundFile, newFile)) { QMessageBox::critical(this, tr("Error"), tr("Could not copy file \"%1\" to \"%2\".").arg(soundFile).arg(newFile)); file.close(); return; } } fileElement.appendChild(fileText); soundElement.appendChild(fileElement); soundsElement.appendChild(soundElement); } rootElement.appendChild(soundsElement); QTextStream fileStream(&file); fileStream.setCodec("UTF-8"); fileStream << doc.toString(); file.close(); QMessageBox::information(this, tr("Export..."), tr("Sound events successfully exported to file \"%1\".").arg(fileName)); } void SoundLayerSettings::on_importButton_clicked() { int i, eventPos; bool bChanged = false; QString fileName(QFileDialog::getOpenFileName(this, tr("Import sound style"), lastDir, tr("XML files (*.xml)"))); if (fileName.isEmpty()) return; QString importDir = fileName.section('/', 0, -2); lastDir = importDir; importDir += "/%1"; QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::critical(this, tr("Error"), tr("Could not open file \"%1\" for reading.").arg(fileName)); return; } QDomDocument doc("qutimsounds"); if (!doc.setContent(&file)) { file.close(); QMessageBox::critical(this, tr("Error"), tr("An error occured while reading file \"%1\".").arg(fileName)); return; } file.close(); QDomElement rootElement = doc.documentElement(); QDomNodeList soundsNodeList = rootElement.elementsByTagName("sounds"); if (soundsNodeList.count() != 1) { QMessageBox::critical(this, tr("Error"), tr("File \"%1\" has wrong format.").arg(fileName)); return; } // Preparing QHash for faster search; QHash eventHash; int event; for (i = 0; i < eventList.size(); i++) { event = eventList.at(i)->data(0, Qt::UserRole).toInt(); if (!qutim_sdk_0_2::XmlEventNames[event]) continue; eventHash.insert(qutim_sdk_0_2::XmlEventNames[event], i); // clear old files eventList.at(i)->setData(0, Qt::UserRole+1, QString()); eventList.at(i)->setCheckState(0, Qt::Unchecked); } QDomElement soundsElement = soundsNodeList.at(0).toElement(); soundsNodeList = soundsElement.elementsByTagName("sound"); QDomElement soundElement; QString eventName, soundFileName; for (i = 0; i < soundsNodeList.count(); i++) { soundElement = soundsNodeList.at(i).toElement(); eventName = soundElement.attribute("event"); if (eventName.isEmpty()) continue; if (!eventHash.contains(eventName)) continue; if (!soundElement.elementsByTagName("file").count()) continue; soundFileName = importDir.arg(soundElement.elementsByTagName("file").at(0).toElement().text()); if (!QFile::exists(soundFileName)) continue; eventPos = eventHash.value(eventName); eventList.at(eventPos)->setData(0, Qt::UserRole+1, soundFileName); eventList.at(eventPos)->setCheckState(0, Qt::Checked); bChanged = true; } if (bChanged) widgetStateChanged(); on_eventsTree_currentItemChanged(ui.eventsTree->currentItem(), NULL); } inline QString SoundLayerSettings::getCurrentFile() const { QTreeWidgetItem *item = ui.eventsTree->currentItem(); if (item) return item->data(0, Qt::UserRole+1).toString(); else return QString(); } //inline qutim_sdk_0_2::SoundEngineSystem SoundLayerSettings::getCurrentSoundSystem() const //{ // return static_cast(ui.systemCombo->itemData(ui.systemCombo->currentIndex()).toInt()); //} qutim-0.2.0/src/corelayers/notification/defaultnotificationlayer.h0000644000175000017500000000767111242311235027207 0ustar euroelessareuroelessar/* DefaultNotificationLayer Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 DEFAULTNOTIFICATIONLAYER_H #define DEFAULTNOTIFICATIONLAYER_H #include "../../../include/qutim/plugininterface.h" #include "../../../include/qutim/layerinterface.h" #include #include "notificationslayersettings.h" #include "popupwindow.h" class PopupWindow; using namespace qutim_sdk_0_2; struct NotificationEvents { quint16 popup_press_left; quint16 popup_press_right; quint16 popup_press_middle; quint16 popup_release_left; quint16 popup_release_right; quint16 popup_release_middle; quint16 popup_dbl_click_left; quint16 popup_dbl_click_right; quint16 popup_dbl_click_middle; quint16 get_sound_enable; quint16 set_sound_enable; quint16 sound_enabled; quint16 get_popup_enable; quint16 set_popup_enable; quint16 popup_enabled; quint16 reload_settings; }; class DefaultNotificationLayer : public NotificationLayerInterface, public EventHandler { public: DefaultNotificationLayer(); virtual bool init(PluginSystemInterface *plugin_system); virtual void release() {} virtual void setProfileName(const QString &profile_name); void loadSettings(); void loadTheme(); virtual void setLayerInterface( LayerType type, LayerInterface *interface); virtual void saveLayerSettings(); virtual QList getLayerSettingsList(); virtual void removeLayerSettings(); virtual void saveGuiSettingsPressed() {} // virtual QList getGuiSettingsList() = 0; virtual void removeGuiLayerSettings() {} virtual void showPopup(const TreeModelItem &item, const QString &message, NotificationType type); virtual void playSound(const TreeModelItem &item, NotificationType type); virtual void notify(const TreeModelItem &item, const QString &message, NotificationType type); // virtual void startupMessage() {} void deletePopupWindow(PopupWindow *window); NotificationEvents *getEvents() { return m_events; } virtual void processEvent(Event &event); private: TrayLayerInterface *m_tray_layer; SoundEngineLayerInterface *m_sound_layer; QString m_profile_name; bool m_show_popup; int m_popup_width; int m_popup_height; int m_popup_sec; int m_popup_position; int m_popup_style; bool m_show_balloon; int m_balloon_sec; bool m_show_signon; bool m_show_signoff; bool m_show_typing; bool m_show_change_status; int m_position_in_stack; bool m_show_message; bool m_first_tray_message_is_shown; QList m_popup_list; QString m_tray_theme_path; QString m_tray_theme_header_onl; QString m_tray_theme_header_onl_css; QString m_tray_theme_content_onl; QString m_tray_theme_content_onl_css; QString m_tray_theme_header_msg; QString m_tray_theme_header_msg_css; QString m_tray_theme_content_msg; QString m_tray_theme_content_msg_css; QString m_tray_theme_header_sys; QString m_tray_theme_header_sys_css; QString m_tray_theme_content_sys; QString m_tray_theme_content_sys_css; QVector m_sound_path; bool m_enable_sound; NotificationEvents *m_events; PluginSystemInterface *m_plugin_system; ChatLayerInterface *m_chat_layer; QHash m_sndevents_nums; }; #endif // DEFAULTNOTIFICATIONLAYER_H qutim-0.2.0/src/corelayers/notification/notificationslayersettings.ui0000644000175000017500000003110711251526352027773 0ustar euroelessareuroelessar NotificationsLayerSettingsClass 0 0 401 365 NotificationsLayerSettings 0 QFrame::StyledPanel QFrame::Raised 4 Show popup windows true 4 10 0 0 Width: 0 0 Height: 0 0 Show time: 0 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter px 10 600 300 0 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter px 10 500 1 100 0 0 Qt::LeftToRight Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter s 1 60 6 0 0 Position: 0 0 Style: 3 QComboBox::AdjustToContentsOnFirstShow Upper left corner Upper right corner Lower left corner Lower right corner 1 No slide Slide vertically Slide horizontally 0 0 Show balloon messages: false true s 5 60 Qt::Horizontal 40 20 Notify when: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 4 Contact sign on Contact sign off Contact typing message Contact change status Message received Qt::Vertical 382 30 trayBalloonBox toggled(bool) balloonSecBox setEnabled(bool) 78 162 370 166 qutim-0.2.0/src/corelayers/notification/popuptextbrowser.h0000644000175000017500000000205511236355476025604 0ustar euroelessareuroelessar/* PopupTextBrowser Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 POPUPTEXTBROWSER_H_ #define POPUPTEXTBROWSER_H_ #include class PopupTextBrowser : public QTextBrowser { Q_OBJECT public: PopupTextBrowser(QWidget *parent = 0){} ~PopupTextBrowser(){} signals: void closeWindow(); void startChat(); protected: void mouseReleaseEvent ( QMouseEvent * event ); }; #endif /*POPUPTEXTBROWSER_H_*/ qutim-0.2.0/src/corelayers/notification/soundlayersettings.ui0000644000175000017500000001341611251526352026255 0ustar euroelessareuroelessar SoundSettingsClass 0 0 510 420 soundSettings 0 0 0 1 QFrame::StyledPanel QFrame::Raised 4 You're using a sound theme. Please, disable it to set sounds manually. true false false Events Sound file: false 0 0 Play :/icons/crystal_project/player_volume.png:/icons/crystal_project/player_volume.png false false 0 0 Open :/icons/crystal_project/folder.png:/icons/crystal_project/folder.png false 0 0 Apply :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Qt::Horizontal QSizePolicy::MinimumExpanding 40 20 0 0 Export... 0 0 Import... qutim-0.2.0/src/corelayers/notification/popupwindow.h0000644000175000017500000000475111236355476024530 0ustar euroelessareuroelessar/* PopupWindow TrayTextBrowser Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 POPUPWINDOW_H #define POPUPWINDOW_H #include #include "ui_popupwindow.h" #include "defaultnotificationlayer.h" #include "src/pluginsystem.h" class DefaultNotificationLayer; using namespace qutim_sdk_0_2; class PopupWindow : public QWidget { Q_OBJECT public: PopupWindow(DefaultNotificationLayer *, ChatLayerInterface *chat_layer,const TreeModelItem &, quint8, const QString &, int, int, int, int, int, int, bool f = true, QWidget *parent = 0); ~PopupWindow(); bool firstTrayWindow; bool showTray; void showTrayMessage(); void setData(const TreeModelItem &item, const QString &, const QString &, const QString &, const QString &); void setSystemData(const QString &, const QString &); void setTheme(const QString &, const QString&, const QString&, const QString&, const QString&); private slots: void slideVerticallyUp(); void slideVerticallyDown(); void slideHorizontallyRight(); void slideHorizontallyLeft(); void startChatSlot(); signals: void startChat(const QString &); protected: bool eventFilter(QObject *obj, QEvent *event); private: DefaultNotificationLayer *m_notification_layer; void setDataHtml(const QString &msg, const QString &picturePath); void setSystemDataHtml(const QString &msg); Ui::PopupWindowClass ui; int position; int style; int time; int positionInStack; int moveToPointX; int moveToPointY; int fromX; int fromY; void slide(); bool userMessage; QString contactUin; TreeModelItem m_item; quint8 m_type; QString m_message; QString themePath; QString themeHeader; QString themeHeaderCSS; QString themeContent; QString themeContentCSS; TreeModelItem m_contact_item; ChatLayerInterface *m_chat_layer; }; #endif // POPUPWINDOW_H qutim-0.2.0/src/corelayers/notification/notificationslayersettings.cpp0000644000175000017500000001072111236355476030151 0ustar euroelessareuroelessar/* NotificationsLayerSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "notificationslayersettings.h" #include NotificationsLayerSettings::NotificationsLayerSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_profile_name(profile_name) { ui.setupUi(this); changed = false; loadSettings(); connect(ui.popupBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(ui.widthSpinBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.heightSpinBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.timeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.positionComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.styleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.trayBalloonBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.balloonSecBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.signOnCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.signOffCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.typingCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.changeStatusCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.messageBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); } NotificationsLayerSettings::~NotificationsLayerSettings() { } void NotificationsLayerSettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("notifications"); ui.popupBox->setChecked(settings.value("popup", true).toBool()); ui.widthSpinBox->setValue(settings.value("pwidth", 280).toInt()); ui.heightSpinBox->setValue(settings.value("pheight", 110).toInt()); ui.timeSpinBox->setValue(settings.value("ptime", 6).toInt()); ui.positionComboBox->setCurrentIndex(settings.value("pposition", 3).toInt()); ui.styleComboBox->setCurrentIndex(settings.value("pstyle", 1).toInt()); ui.trayBalloonBox->setChecked(settings.value("balloon", false).toBool()); ui.balloonSecBox->setValue(settings.value("bsecs", 5).toInt()); ui.signOnCheckBox->setChecked(settings.value("signon", true).toBool()); ui.signOffCheckBox->setChecked(settings.value("signoff", true).toBool()); ui.typingCheckBox->setChecked(settings.value("typing", true).toBool()); ui.changeStatusCheckBox->setChecked(settings.value("statuschange", true).toBool()); ui.messageBox->setChecked(settings.value("message", true).toBool()); settings.endGroup(); } void NotificationsLayerSettings::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("notifications"); settings.setValue("popup", ui.popupBox->isChecked()); settings.setValue("pwidth", ui.widthSpinBox->value()); settings.setValue("pheight", ui.heightSpinBox->value()); settings.setValue("ptime", ui.timeSpinBox->value()); settings.setValue("pposition", ui.positionComboBox->currentIndex()); settings.setValue("pstyle", ui.styleComboBox->currentIndex()); settings.setValue("balloon", ui.trayBalloonBox->isChecked()); settings.setValue("bsecs", ui.balloonSecBox->value()); settings.setValue("signon", ui.signOnCheckBox->isChecked()); settings.setValue("signoff", ui.signOffCheckBox->isChecked()); settings.setValue("typing", ui.typingCheckBox->isChecked()); settings.setValue("statuschange", ui.changeStatusCheckBox->isChecked()); settings.setValue("message", ui.messageBox->isChecked()); settings.endGroup(); if ( changed ) emit settingsSaved(); changed = false; } qutim-0.2.0/src/corelayers/soundengine/0000755000175000017500000000000011273100754021571 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/soundengine/defaultsoundenginelayer.h0000644000175000017500000000436411236355476026705 0ustar euroelessareuroelessar/* DefaultSoundEngineLayer Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 DEFAULTSOUNDENGINELAYER_H #define DEFAULTSOUNDENGINELAYER_H #include "../../../include/qutim/plugininterface.h" #include "../../../include/qutim/layerinterface.h" using namespace qutim_sdk_0_2; class DefaultSoundEngineLayer : public SoundEngineLayerInterface { public: enum EngineType { NoSound = 0, LibSound, UserCommand, UnknownSoundEngine, UnknownSoundEngine2, UnknownSoundEngine3, UnknownSoundEngine4 }; DefaultSoundEngineLayer(); virtual bool init(PluginSystemInterface *plugin_system) { m_name = "qutim"; quint8 major, minor, secminor; quint16 svn; plugin_system->getQutimVersion(major, minor, secminor, svn); m_version = QString("%1.%2.%3 r%4").arg(major).arg(minor).arg(secminor).arg(svn); return true; } virtual void release() {} virtual void setProfileName(const QString &profile_name) { m_profile_name = profile_name; loadSettings(); } void loadSettings(); virtual void setLayerInterface( LayerType, LayerInterface *) {} virtual void saveLayerSettings(); virtual QList getLayerSettingsList(); virtual void removeLayerSettings(); virtual void saveGuiSettingsPressed() {} virtual void removeGuiLayerSettings() {} virtual void playSound(QIODevice *device); virtual void playSound(const QString &filename); virtual QIODevice *grabSound(); private: EngineType m_engine; QString m_cmd; QString m_profile_name; }; #endif // DEFAULTSOUNDENGINELAYER_H qutim-0.2.0/src/corelayers/soundengine/soundenginesettings.cpp0000644000175000017500000000766611273076304026416 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "soundenginesettings.h" #include "defaultsoundenginelayer.h" #include #include "ui_soundenginesettings.h" SoundEngineSettings::SoundEngineSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_ui(new Ui::SoundEngineSettings) { m_changed = true; m_profile_name = profile_name; m_ui->setupUi(this); #if defined(Q_WS_WIN) || defined(Q_WS_MAC) m_ui->qSoundRadioButton->setEnabled(true); #else m_ui->qSoundRadioButton->hide(); #endif loadSettings(); connect(m_ui->noSoundRadioButton, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->qSoundRadioButton, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->commandRadioButton, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(m_ui->commandLineEdit, SIGNAL(textChanged(QString)), this, SLOT(widgetStateChanged())); m_changed = false; } SoundEngineSettings::~SoundEngineSettings() { delete m_ui; } void SoundEngineSettings::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } void SoundEngineSettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("sounds"); DefaultSoundEngineLayer::EngineType type = static_cast(settings.value("soundengine", 0).toInt()); m_ui->noSoundRadioButton->setChecked(type==DefaultSoundEngineLayer::NoSound); m_ui->qSoundRadioButton->setChecked(type==DefaultSoundEngineLayer::LibSound); m_ui->commandRadioButton->setChecked(type==DefaultSoundEngineLayer::UserCommand); #ifndef Q_OS_WIN32 m_ui->commandLineEdit->setText(settings.value("command", "play \"%1\"").toString()); #else m_ui->commandLineEdit->setText(settings.value("command", "").toString()); #endif settings.endGroup(); } void SoundEngineSettings::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("sounds"); if(m_ui->noSoundRadioButton->isChecked()) settings.setValue("soundengine", DefaultSoundEngineLayer::NoSound); else if(m_ui->qSoundRadioButton->isChecked()) settings.setValue("soundengine", DefaultSoundEngineLayer::LibSound); else if(m_ui->commandRadioButton->isChecked()) settings.setValue("soundengine", DefaultSoundEngineLayer::UserCommand); settings.setValue("command", m_ui->commandLineEdit->text()); settings.endGroup(); } void SoundEngineSettings::on_commandButton_clicked() { #ifdef Q_OS_WIN32 QString bin_name = QFileDialog::getOpenFileName(this, tr("Select command path"), QDir::currentPath(), tr("Executables (*.exe *.com *.cmd *.bat)\nAll files (*.*)")); #else QString bin_name = QFileDialog::getOpenFileName(this, tr("Select command path"), "/bin", tr("Executables")); #endif // WIN32 if (bin_name.isEmpty()) return; #ifndef Q_OS_WIN32 m_ui->commandLineEdit->setText(bin_name + " \"%1\""); #else m_ui->commandLineEdit->setText(QString("\"%1\" \"%2\"").arg(bin_name).arg("%1")); #endif // WIN32 } qutim-0.2.0/src/corelayers/soundengine/soundenginesettings.h0000644000175000017500000000263311273076304026050 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 SOUNDENGINESETTINGS_H #define SOUNDENGINESETTINGS_H #include namespace Ui { class SoundEngineSettings; } class SoundEngineSettings : public QWidget { Q_OBJECT Q_DISABLE_COPY(SoundEngineSettings) public: explicit SoundEngineSettings(const QString &profile_name, QWidget *parent = 0); virtual ~SoundEngineSettings(); void loadSettings(); void saveSettings(); public slots: void widgetStateChanged() { emit settingsChanged(); } void on_commandButton_clicked(); signals: void settingsChanged(); protected: virtual void changeEvent(QEvent *e); private: Ui::SoundEngineSettings *m_ui; QString m_profile_name; bool m_changed; }; #endif // SOUNDENGINESETTINGS_H qutim-0.2.0/src/corelayers/soundengine/defaultsoundenginelayer.cpp0000644000175000017500000000643511236355476027241 0ustar euroelessareuroelessar/* DefaultSoundEngineLayer Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "defaultsoundenginelayer.h" #include "soundenginesettings.h" #include "src/iconmanager.h" #include #include #include #if defined(Q_WS_WIN) || defined(Q_WS_MAC) #include #endif DefaultSoundEngineLayer::DefaultSoundEngineLayer() { m_engine=NoSound; m_cmd = "play \"%1\""; } void DefaultSoundEngineLayer::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("sounds"); m_engine = static_cast(settings.value("soundengine", 0).toInt()); m_cmd = settings.value("command", "play \"%1\"").toString(); if(m_cmd.indexOf("%1")<0) m_cmd+=" \"%1\""; settings.endGroup(); } void DefaultSoundEngineLayer::saveLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { dynamic_cast(settings.settings_widget)->saveSettings(); } loadSettings(); } QList DefaultSoundEngineLayer::getLayerSettingsList() { SettingsStructure settings; settings.settings_item = new QTreeWidgetItem(); settings.settings_item ->setText(0, QObject::tr("Sound")); settings.settings_item ->setIcon(0, IconManager::instance().getIcon("soundsett")); settings.settings_widget = new SoundEngineSettings(m_profile_name); m_settings.append(settings); return m_settings; } void DefaultSoundEngineLayer::removeLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { delete settings.settings_item; delete settings.settings_widget; } m_settings.clear(); } void DefaultSoundEngineLayer::playSound(QIODevice *device) { Q_UNUSED(device); // if(!device) // return; // // QFile *file = dynamic_cast(device); // if(!file) // { // if(device->isOpen()) // device->close(); // else // delete device; // return; // } // // QString file_name = QFileInfo(*file).absoluteFilePath(); // // if(file->isOpen()) // file->close(); // else // delete file; // // switch(m_engine) // { // #if defined(Q_WS_WIN) || defined(Q_WS_MAC) // case LibSound: // QSound::play(file_name); // break; // #endif // case UserCommand: // QProcess::startDetached(m_cmd.arg(file_name)); // break; // default: // break; // } } void DefaultSoundEngineLayer::playSound(const QString &filename) { switch(m_engine) { #if defined(Q_WS_WIN) || defined(Q_WS_MAC) case LibSound: QSound::play(filename); break; #endif case UserCommand: QProcess::startDetached(m_cmd.arg(filename)); break; default: break; } } QIODevice *DefaultSoundEngineLayer::grabSound() { return 0; } qutim-0.2.0/src/corelayers/soundengine/soundenginesettings.ui0000644000175000017500000001166611251526352026243 0ustar euroelessareuroelessar SoundEngineSettings 0 0 400 300 Form 0 QFrame::StyledPanel QFrame::Raised 4 Qt::Vertical 375 126 Engine type 4 false QSound Custom sound player Command: false false ... No sound noSoundRadioButton toggled(bool) groupBox setDisabled(bool) 102 18 199 107 qSoundRadioButton toggled(bool) commandLineEdit setDisabled(bool) 199 75 204 129 qSoundRadioButton toggled(bool) commandButton setDisabled(bool) 199 75 366 129 commandRadioButton toggled(bool) commandLineEdit setEnabled(bool) 199 101 204 129 commandRadioButton toggled(bool) commandButton setEnabled(bool) 199 101 366 129 qutim-0.2.0/src/corelayers/contactlist/0000755000175000017500000000000011273100754021602 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/contactlist/defaultcontactlist.ui0000644000175000017500000001504311236355476026054 0ustar euroelessareuroelessar DefaultContactList 0 0 206 609 100 100 qutIM 0 0 0 26 2 0 2 0 0 22 22 Main menu :/icons/crystal_project/menu.png:/icons/crystal_project/menu.png QToolButton::InstantPopup true 22 22 Show/hide offline :/icons/crystal_project/shhideoffline.png:/icons/crystal_project/shhideoffline.png true true 22 22 Show/hide groups :/icons/crystal_project/folder.png:/icons/crystal_project/folder.png true true 22 22 Sound on/off :/icons/crystal_project/player_volume.png:/icons/crystal_project/player_volume.png true true Qt::Horizontal 67 20 22 22 About :/icons/crystal_project/info.png:/icons/crystal_project/info.png true 0 26 16777215 26 ArrowCursor false 0 0 Qt::Horizontal 0 0 qutim-0.2.0/src/corelayers/contactlist/proxymodelitem.h0000644000175000017500000000560411236355476025055 0ustar euroelessareuroelessar/***************************************************************************** Proxy Model Item Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 PROXYMODELITEM_H_ #define PROXYMODELITEM_H_ #include #include #include #include #include "treeitem.h" class ProxyModelItem { public: ProxyModelItem(const QModelIndex &source, QHash *source_list, ProxyModelItem *parent = 0); virtual ~ProxyModelItem(); ProxyModelItem *clone(); ProxyModelItem *child(int number); int childCount() const; QVariant data(int role) const; bool insertChildren(int position, int count); ProxyModelItem *parent(); bool removeChildren(int position, int count); bool removeChildren(); bool insertChild(int position, ProxyModelItem *item); int childNumber() const; bool setData(const QVariant &value, int role); int indexOf(ProxyModelItem *t); void setSourceIndex(const QModelIndex &source); void setName(const QString &name); void moveChild(int old_position, int new_position); QModelIndex getSourceIndex(); void appendSourceIndex(const QModelIndex &source); QList getSourceIndexes(); int getType(); //TreeItem *getSourceItem(); int getMass(); void setMass(int mass); QString getName(); void setSeparator(int type, bool value); bool getSeparator(int type); bool operator >(ProxyModelItem *arg); void deleteItem(); int m_online_children; QPair m_mass; const QList *getChildren(){ return &m_child_items; } int getChecksum() { return m_checksum_value; } //TreeItem *getSourceItem(); private: bool m_is_deleted; QStringList m_child_expanded; QStringList m_child_order; QList m_source_index; QList m_child_items; QList m_decoration; QList m_rows; ProxyModelItem *m_parent_item; QVariant m_font; QVariant m_color; //QModelIndex m_source_index; int m_item_type; int m_item_mass; QString m_item_name; QString m_item_edit; bool m_has_offline_separator; bool m_has_online_separator; bool m_has_nil_separator; QHash *m_source_list; int m_checksum_value; }; #endif /*PROXYMODELITEM_H_*/ qutim-0.2.0/src/corelayers/contactlist/contactlistsettings.ui0000644000175000017500000006067011251526352026264 0ustar euroelessareuroelessar ContactListSettingsClass 0 0 432 408 ContactListSettings 0 0 :/icons/core/contactlist.png:/icons/core/contactlist.png Main 4 Show accounts Hide empty groups Hide offline users Hide online/offline separators Sort contacts by status Draw the background with using alternating colors Show client icons Show avatars Look'n'Feel false false 4 0 0 0 0 100 16777215 Opacity: Qt::Horizontal QSizePolicy::Maximum 40 20 100 100 Qt::Horizontal QSlider::TicksAbove 35 0 35 16777215 100% 0 0 100 16777215 Window Style: Qt::Horizontal QSizePolicy::Maximum 40 20 0 0 Regular Window Theme border Borderless Window Tool window Qt::Vertical 20 40 Show groups :/icons/core/fonts.png:/icons/core/fonts.png Customize 4 Customize font: 4 0 0 Account: false false 6 24 9 false :/icons/crystal_project/colorpicker.png:/icons/crystal_project/colorpicker.png 0 0 Group: false false 6 24 9 false :/icons/crystal_project/colorpicker.png:/icons/crystal_project/colorpicker.png 0 0 Online: false false 6 24 10 false :/icons/crystal_project/colorpicker.png:/icons/crystal_project/colorpicker.png 0 0 Offline: false false 6 24 10 false :/icons/crystal_project/colorpicker.png:/icons/crystal_project/colorpicker.png 0 0 Separator: false false 6 24 false :/icons/crystal_project/colorpicker.png:/icons/crystal_project/colorpicker.png Qt::Vertical 20 40 accountFontBox toggled(bool) accountFontComboBox setEnabled(bool) 127 102 236 101 accountFontBox toggled(bool) accountFontSizeBox setEnabled(bool) 102 102 419 101 accountFontBox toggled(bool) accountColorButton setEnabled(bool) 102 102 451 102 groupFontBox toggled(bool) groupFontComboBox setEnabled(bool) 124 134 236 134 groupFontBox toggled(bool) groupFontSizeBox setEnabled(bool) 99 134 419 134 groupFontBox toggled(bool) groupColorButton setEnabled(bool) 112 134 451 135 onlineFontBox toggled(bool) onlineFontComboBox setEnabled(bool) 109 166 236 167 onlineFontBox toggled(bool) onlineFontSizeBox setEnabled(bool) 127 166 419 167 onlineFontBox toggled(bool) onlineColorButton setEnabled(bool) 125 166 451 168 offlineFontBox toggled(bool) offlineFontComboBox setEnabled(bool) 127 198 236 200 offlineFontBox toggled(bool) offlineFontSizeBox setEnabled(bool) 115 198 419 200 offlineFontBox toggled(bool) offlineColorButton setEnabled(bool) 127 198 451 201 separatorFontBox toggled(bool) separatorFontComboBox setEnabled(bool) 102 209 279 211 separatorFontBox toggled(bool) separatorFontSizeBox setEnabled(bool) 102 209 402 211 separatorFontBox toggled(bool) separatorColorButton setEnabled(bool) 102 209 448 211 qutim-0.2.0/src/corelayers/contactlist/treeitem.cpp0000644000175000017500000001747211242600105024126 0ustar euroelessareuroelessar/***************************************************************************** Tree Item Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "treeitem.h" #include "src/pluginsystem.h" #include "src/iconmanager.h" #include #include #include #include #include #include #include TreeItem::TreeItem(const QVariant &display, TreeItem *parent) { m_item_icons = QVector(13).toList(); m_item_bottom_rows = QVector(3).toList(); m_parent_item = parent; m_item_display = display; m_is_expanded=true; m_is_online=false; m_item_mass=1000; m_visible=0; m_invisible=0; m_is_visible=false; m_is_visible=true; m_is_always_visible=false; m_is_always_invisible=false; m_current_status_icon = IconManager::instance().getIcon("qutim"); m_item_icons[0] = m_current_status_icon; m_content = 0; m_visibility_flags = ShowDefault; m_notifications_flags = ShowAllNotifications; } TreeItem::~TreeItem() { ensure_invis1(); qDeleteAll(m_child_items); } TreeItem *TreeItem::child(int number) { return m_child_items.value(number); } int TreeItem::childCount() const { return m_child_items.size();//count(); } int TreeItem::childNumber() const { if (m_parent_item) return m_parent_item->m_child_items.indexOf(const_cast(this)); return 0; } QVariant TreeItem::data(int role) const { switch(role) { case Qt::DecorationRole: return reinterpret_cast(&m_item_icons); case Qt::DisplayRole: case Qt::EditRole: return m_item_display; case Qt::UserRole: return m_item_type; case Qt::UserRole+1: if(m_item_type==1) return m_parent_item->getChildPosition(m_structure.m_item_name); return m_item_mass; case Qt::UserRole+2: return reinterpret_cast(&m_item_bottom_rows); case Qt::UserRole+3: return m_item_status; case Qt::UserRole+4: return m_current_status_icon; case Qt::UserRole+5: return m_is_always_visible || m_is_visible; case Qt::ToolTipRole:{ if(m_item_type!=0) return QVariant(); QString tooltip = PluginSystem::instance().getItemToolTip(m_structure); if(tooltip.isNull()) return QVariant(); return tooltip;} default: return QVariant(); } } bool TreeItem::insertChildren(int position, int count) { if (position < 0 || position > m_child_items.size()) return false; for (int row = 0; row < count; ++row) { TreeItem *item = new TreeItem(QVariant(), this); m_child_items.insert(position, item); } return true; } TreeItem *TreeItem::parent() { return m_parent_item; } bool TreeItem::removeChildren(int position, int count) { if (position < 0 || position + count > m_child_items.size()) return false; for (int row = 0; row < count; ++row) { delete m_child_items[position]; m_child_items.removeAt(position); } return true; } bool TreeItem::removeChildren() { return removeChildren(0,m_child_items.size()); } bool TreeItem::setData(const QVariant &value, int role) { switch(role) { case Qt::DecorationRole: m_item_icons = value.toList(); return true; case Qt::UserRole: m_item_type = value; return true; case Qt::DisplayRole: m_item_display = value; return true; case Qt::UserRole+1: m_item_mass = value.toInt(); return true; case Qt::EditRole: m_item_display = value; return true; case Qt::UserRole+4: m_current_status_icon = value; default: return false; } } void TreeItem::getData(ItemData &data) { data.name = m_item_display.toString(); data.item = m_structure; data.status_mass = m_item_mass; data.status_id = m_item_status; data.status = m_item_bottom_rows[0].toList().toVector(); data.icons.clear(); data.icons.reserve(13); foreach(const QVariant &icon, m_item_icons) data.icons.append(qvariant_cast(icon)); data.attributes = m_content; data.visibility = m_visibility_flags; data.notifications = m_notifications_flags; } void TreeItem::setStructure(const TreeModelItem &structure) { m_structure = structure; } void TreeItem::setExpanded(bool expanded) { m_is_expanded = expanded; } const TreeModelItem &TreeItem::getStructure() { return m_structure; } QString TreeItem::getName() { return m_structure.m_item_name; } int TreeItem::indexOf(TreeItem *item) { return m_child_items.indexOf(item); } TreeItem *TreeItem::find(const QString &id) { return m_item_list.value(id); } void TreeItem::setHash(const QString &id, TreeItem *item) { m_item_list.insert(id, item); } void TreeItem::removeHash(const QString &id) { m_item_list.remove(id); } void TreeItem::setImage(const QIcon &icon, int column) { if(column<13&&column>-1) { if(column==1) { static int size=24; static QSize ava_size(size,size); QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(65535,65535)),QIcon::Normal,QIcon::On); if(!pixmap.isNull()) { static QPixmap alpha; if( alpha.isNull() ) { alpha = QPixmap( ava_size ); alpha.fill(QColor(0,0,0)); QPainter painter(&alpha); QPen pen(QColor(127,127,127)); painter.setRenderHint(QPainter::Antialiasing); pen.setWidth(0); painter.setPen(pen); painter.setBrush(QBrush(QColor(255,255,255))); painter.drawRoundedRect(QRectF(QPointF(0,0),QSize(size-1,size-1)),5,5); painter.end(); } pixmap = pixmap.scaled(ava_size,Qt::IgnoreAspectRatio,Qt::SmoothTransformation); pixmap.setAlphaChannel(alpha); m_item_icons[column] = QIcon(pixmap); } return; } if(column==0) m_current_status_icon=icon; m_item_icons[column] = icon; } } QIcon TreeItem::getImage(int column) { if(column>-1&&column<13) { return qvariant_cast(m_item_icons[column]); } return QIcon(); } void TreeItem::setRow(const QVariant &item, int row) { if(row<0||row>2) return; m_item_bottom_rows[row]=item; } void TreeItem::setStatus(const QString &text, const QIcon &icon, int mass) { m_item_icons[0]=icon; m_current_status_icon=icon; m_item_status=text; m_item_mass=mass; } bool TreeItem::isExpanded() { return m_is_expanded; } void TreeItem::setOnline(bool show) { m_is_online=show; } bool TreeItem::getOnline() { return m_is_online; } int TreeItem::getChildPosition(const QString &child) { if(child=="") return 10000; int position = m_child_order.indexOf(child); if(position<0) { position=m_child_order.size(); m_child_order.append(child); } return position; } void TreeItem::moveChild(const QString &child, int position) { if(child=="") return; m_child_order.removeAll(child); if(position<0) position=0; else if(position>m_child_order.size()) position=m_child_order.size(); m_child_order.insert(position, child); } void TreeItem::setChildOrder(const QStringList &order) { m_child_order=order; } const QStringList &TreeItem::getChildOrder() { return m_child_order; } void TreeItem::setAlwaysVisible(bool visible) { m_is_always_visible = visible; } bool TreeItem::getAlwaysVisible() { return m_is_always_visible; } void TreeItem::setAlwaysInvisible(bool invisible) { // if(!m_is_always_invisible && invisible) // m_parent_item->m_invisible++; // else if(m_is_always_invisible && !invisible) // m_parent_item->m_invisible--; m_is_always_invisible = invisible; } bool TreeItem::getAlwaysInvisible() { return m_is_always_invisible; } qutim-0.2.0/src/corelayers/contactlist/defaultcontactlist.h0000644000175000017500000001155011251517704025654 0ustar euroelessareuroelessar/***************************************************************************** DefaultContactList Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 DEFAULTCONTACTLIST_H #define DEFAULTCONTACTLIST_H #include #include #include #include #include #include "contactlistproxymodel.h" #include "treecontactlistmodel.h" #include "contactlistitemdelegate.h" #include "src/iconmanager.h" #include "include/qutim/layerinterface.h" class QtCustomWidget; class QMenuBar; enum CLWindowStyle { CLRegularWindow = 0, CLThemeBorder, CLBorderLessWindow, CLToolWindow }; namespace Ui { class DefaultContactList; } using namespace qutim_sdk_0_2; class DefaultContactListView : public QTreeView { public: DefaultContactListView(QWidget *parent); protected: virtual void drawRow(QPainter *painter, const QStyleOptionViewItem &options, const QModelIndex &index) const; virtual void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; }; class DefaultContactList : public QWidget, public ContactListLayerInterface, public EventHandler{ Q_OBJECT public: DefaultContactList(QWidget *parent = 0); virtual ~DefaultContactList(); virtual void addItem(const TreeModelItem &item, const QString &name = ""); virtual void removeItem(const TreeModelItem &item); virtual void moveItem(const TreeModelItem & old_item, const TreeModelItem & new_item); virtual void setItemName(const TreeModelItem &item, const QString & name); virtual void setItemIcon(const TreeModelItem &item, const QIcon &icon, int position); virtual void setItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &id, int mass); virtual void setItemText(const TreeModelItem &item, const QVector &text); virtual void setItemVisibility(const TreeModelItem &item, int flags); virtual void setItemNotifications(const TreeModelItem &item, int flags); virtual int getItemNotifications(const TreeModelItem &item); virtual void setItemAttribute(const TreeModelItem &item, ItemAttribute type, bool on); virtual QList getItemChildren(const TreeModelItem &item = TreeModelItem()); virtual const ItemData *getItemData(const TreeModelItem &item); virtual QHBoxLayout *getAccountButtonsLayout(); virtual void setMainMenu(QMenu *menu); virtual bool init(PluginSystemInterface *plugin_system); virtual void release() { saveSettings(); } virtual void setProfileName(const QString &profile_name); virtual void setLayerInterface( LayerType type, LayerInterface *interface); virtual void saveLayerSettings(); virtual QList getLayerSettingsList(); virtual void removeLayerSettings(); virtual void saveGuiSettingsPressed(); virtual void removeGuiLayerSettings() {} virtual void processEvent(Event &e); public slots: void on_showHideButton_clicked(); void on_showHideGroupsButton_clicked(); void on_soundOnOffButton_clicked(); void on_infoButton_clicked(); protected slots: void loadSettings(); void loadGuiSettings(); protected: void setItemHasUnviewedContent(const TreeModelItem &item, bool has_content) {} void setItemIsTyping(const TreeModelItem &item, bool is_typing) {} void saveSettings(); void reloadCLWindowStyle(const QSettings &settings); bool eventFilter(QObject *obj, QEvent *event); void hideEvent( QHideEvent *event ); void showEvent( QShowEvent *event ); virtual void changeEvent(QEvent *e); TreeContactListModel *m_item_model; ContactListProxyModel *m_proxy_model; ContactListItemDelegate *m_item_delegate; QString m_profile_name; IconManager &m_icon_manager; CLWindowStyle fWindowStyle; ItemData m_current_item_data; QTimer m_autohide_timer; bool m_autohide; bool m_groupexpandoneclick; int m_autohide_sec; Qt::WindowFlags m_default_flags; quint16 m_show_hide_cl; quint16 m_event_about; quint16 m_event_typng; quint16 m_event_unviewed; quint16 m_event_set_sound_enable; quint16 m_event_sound_enabled; private: PluginSystemInterface *m_ps; Ui::DefaultContactList *m_ui; ChatLayerInterface *m_chat_layer; QtCustomWidget *m_custom; QTreeView *m_contactListView; QMenuBar *menuBar; }; #endif // DEFAULTCONTACTLIST_H qutim-0.2.0/src/corelayers/contactlist/treecontactlistmodel.h0000644000175000017500000001270511242600105026177 0ustar euroelessareuroelessar/***************************************************************************** Tree Contact List Model Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 CONTACTLISTTREEMODEL_H_ #define CONTACTLISTTREEMODEL_H_ #include #include #include #include #include #include #include #include "treeitem.h" #include #include using namespace qutim_sdk_0_2; class TreeItem; class TreeContactListModel : public QAbstractItemModel { Q_OBJECT public: TreeContactListModel(const QStringList &headers, QObject *parent = 0); ~TreeContactListModel(); void saveSettings(); void loadSettings(const QString & profile_name); QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; Qt::ItemFlags flags(const QModelIndex &index) const; bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); TreeItem *findItem(const TreeModelItem & Item); TreeItem *findItemNoParent(const TreeModelItem & Item); QModelIndex findIndex(const TreeModelItem & Item); QList getItemChildren(const TreeModelItem &item = TreeModelItem()); bool addAccount(const TreeModelItem & Item, const QString &name); bool addGroup(const TreeModelItem & Item, const QString &name); bool addBuddy(const TreeModelItem & Item, const QString &name); bool removeAccount(const TreeModelItem & Item); bool removeGroup(const TreeModelItem & Item); bool removeBuddy(const TreeModelItem & Item); void removeChildren(TreeItem *item); bool moveBuddy(const TreeModelItem & oldItem, const TreeModelItem & newItem); bool setItemName(const TreeModelItem & Item, const QString &name); bool setItemIcon(const TreeModelItem & Item, const QIcon &icon, int position); bool setItemRow(const TreeModelItem & Item, const QList &var, int row); bool setItemStatus(const TreeModelItem & Item, const QIcon &icon, const QString &status, int mass); void reinsertAllItems(TreeItem *item=0); void setItemHasUnviewedContent(const TreeModelItem & Item, bool has_content); bool getItemHasUnviewedContent(const TreeModelItem & item); bool getItemHasUnviewedContent(TreeItem *item) { return m_has_unviewed_content.value(item, false); } void setItemIsTyping(const TreeModelItem & Item, bool has_content); bool getItemIsTyping(const TreeModelItem & item); bool getItemIsTyping(TreeItem *item) { return m_is_typing.value(item, false); } int getItemNotifications(const TreeModelItem &item); void setItemIsOnline(const TreeModelItem & Item, bool online); void signalToDoScreenShot(int time); void setItemVisibility(const TreeModelItem &item, int flags); void setItemNotifications(const TreeModelItem &item, int flags); void setItemVisible(const TreeModelItem &item, bool visible); void setItemInvisible(const TreeModelItem &item, bool invisible); public slots: void onTimerTimeout(); signals: void itemInserted(const QModelIndex &item); void itemRemoved(const QModelIndex &item); void itemNameChanged(const QModelIndex &item, const QString &value); void itemStatusChanged(const QModelIndex &item, const QIcon &icon, const QString &text, int mass); void itemVisibleChanged(const QModelIndex &item, bool visible); void checkItem(const QModelIndex &item); private: NotificationLayerInterface *m_notification_layer; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); TreeItem *getItem(const QModelIndex &index) const; TreeItem m_root_item; QTimer *m_icon_timer; QString m_profile_name; QString m_nil_group; QHash *> m_item_list; QHash m_has_unviewed_content; QHash m_is_typing; QHash m_changed_status; QHash m_block_status; QHash m_status_to_tr; QMutex m_mutex; bool m_show_special_status; qint32 m_time_screen_shot; //QHash m_item_list; //QString toHash(const TreeModelItem & Item); }; #endif /*TREECONTACTLISTMODEL_H_*/ qutim-0.2.0/src/corelayers/contactlist/contactlistitemdelegate.h0000644000175000017500000001114611236355476026673 0ustar euroelessareuroelessar/***************************************************************************** Contact List Item Delegate Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 CONTACTLISTITEMDELEGATE_H_ #define CONTACTLISTITEMDELEGATE_H_ #include #include #include #include #include #include #include #include #include #include #include #include //#include /*struct ItemDelegateStyle { QVector m_fonts; QVector m_colors; QVector m_integers; QVector m_pixmaps; QVector m_reals; QVector m_booleans; };*/ class ContactListItemDelegate : public QAbstractItemDelegate { Q_OBJECT public: explicit ContactListItemDelegate(QObject *parent = 0); virtual ~ContactListItemDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setTreeView(QAbstractItemView *tree); bool setThemeStyle(QString path=QString("")); void setSettings(QList show_icons, double opacity); QMap m_style_hash; //void setDefaultStyle(); private: struct StyleVar { StyleVar() : m_font_bold(false), m_font_italic(false), m_font_overline(false), m_font_underline(false), m_border_width(0) {} QFont m_font; int m_background_type; QVector m_stops; QVector m_colors; QColor m_text_color; bool m_font_bold; bool m_font_italic; bool m_font_overline; bool m_font_underline; QColor m_background; int m_border_width; QColor m_border_color; QColor m_status_color; QFont m_status_font; }; QPixmap getAlphaMask(QPainter *painter, QRect rect, int type) const; void drawList(QPainter *painter, const QStyleOptionViewItem & option, const QModelIndex & index, const QList & list) const; QMap appendStyleFile(QString path); QMap parse(const QDomNode & root_element); QSize size(const QStyleOptionViewItem &option, const QModelIndex & index, const QVariant &item) const; void draw(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QVariant &item) const; QSize uniPaint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, const bool &paint=false) const; QVariant getValue(const QString &name, const QVariant &def) const; QColor getColor(QVariant var) const; QFont getFont(QVariant var) const; void drawGradient(QPainter *painter, const QColor & up, const QColor & down, const QRect & rect/*, int type*/) const; void drawRect(QPainter *painter, const QColor & color/*, const QRect & rect, int type*/) const; void drawRect(QPainter *painter, QRect rect) const; QList m_show_icons; int m_margin; int m_style_type; // 0 - AdiumX, 1 - qutIM, 2 - light double m_opacity; QPoint m_margin_x; QPoint m_margin_y; QAbstractItemView *m_tree_view; QHash m_styles; QFont m_status_font; QHash m_status_color; QHash m_style_colors; QHash m_style_fonts; QHash m_style_bools; QHash m_style_ints; QHash m_style_reals; QHash m_style_strings; //ItemDelegateStyle m_style; }; #endif /*CONTACTLISTITEMDELEGATE_H_*/ qutim-0.2.0/src/corelayers/contactlist/contactlistsettings.cpp0000644000175000017500000002610411273076304026424 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "contactlistsettings.h" #include ContactListSettings::ContactListSettings(const QString &profile_name, QWidget *parent) : QWidget(parent) { ui.setupUi(this); m_profile_name = profile_name; m_gui_changed=false; loadSettings(); connect (ui.showAccountsBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.showGroupsBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.accountFontBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.groupFontBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.onlineFontBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.offlineFontBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.separatorFontBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.accountFontComboBox, SIGNAL(currentFontChanged ( const QFont & )), this, SLOT(widgetSettingsChanged())); connect (ui.groupFontComboBox, SIGNAL(currentFontChanged ( const QFont & )), this, SLOT(widgetSettingsChanged())); connect (ui.onlineFontComboBox, SIGNAL(currentFontChanged ( const QFont & )), this, SLOT(widgetSettingsChanged())); connect (ui.offlineFontComboBox, SIGNAL(currentFontChanged ( const QFont & )), this, SLOT(widgetSettingsChanged())); connect (ui.separatorFontComboBox, SIGNAL(currentFontChanged ( const QFont & )), this, SLOT(widgetSettingsChanged())); connect (ui.accountFontSizeBox, SIGNAL(valueChanged ( int )), this, SLOT(widgetSettingsChanged())); connect (ui.groupFontSizeBox, SIGNAL(valueChanged ( int )), this, SLOT(widgetSettingsChanged())); connect (ui.onlineFontSizeBox, SIGNAL(valueChanged ( int )), this, SLOT(widgetSettingsChanged())); connect (ui.offlineFontSizeBox, SIGNAL(valueChanged ( int )), this, SLOT(widgetSettingsChanged())); connect (ui.separatorFontSizeBox, SIGNAL(valueChanged ( int )), this, SLOT(widgetSettingsChanged())); connect (ui.showAccountsBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.hideEmptyBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.offlineBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.separatorBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.sortstatusCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.alternatingCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.clientIconCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect (ui.avatarIconCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetSettingsChanged())); connect(ui.opacitySlider, SIGNAL(valueChanged(int)), this, SLOT(onOpacitySliderValueChanged(int))); connect(ui.winStyleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetGuiSettingsChanged())); } ContactListSettings::~ContactListSettings() { } void ContactListSettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); #if defined(Q_OS_WIN32) int nWindowStyle = settings.value("windowstyle", 1).toInt(); #else int nWindowStyle = settings.value("windowstyle", 0).toInt(); #endif ui.winStyleComboBox->setCurrentIndex(nWindowStyle); ui.alternatingCheckBox->setChecked(settings.value("alternatingrc",false).toBool()); ui.avatarIconCheckBox->setChecked(settings.value("showicon1",false).toBool()); ui.clientIconCheckBox->setChecked(settings.value("showicon12",false).toBool()); ui.showAccountsBox->setChecked((settings.value("modeltype",0).toInt()&1)==0); ui.showGroupsBox->setChecked((settings.value("modeltype",0).toInt()&2)==0); ui.offlineBox->setChecked(!settings.value("showoffline",false).toBool()); ui.hideEmptyBox->setChecked(!settings.value("showempty",false).toBool()); ui.sortstatusCheckBox->setChecked(settings.value("sortstatus",false).toBool()); ui.separatorBox->setChecked(!settings.value("showseparator",false).toBool()); ui.opacitySlider->setValue(settings.value("opacity",1).toDouble()*100); ui.clOpacityPersLbl->setText(QString("%1%").arg(ui.opacitySlider->value())); QString family=settings.value("accountfontfml",QFont().family()).toString(); int size=settings.value("accountfontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); ui.accountFontComboBox->setCurrentFont(QFont(family)); ui.accountFontSizeBox->setValue(size); family=settings.value("groupfontfml",QFont().family()).toString(); size=settings.value("groupfontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); ui.groupFontComboBox->setCurrentFont(QFont(family)); ui.groupFontSizeBox->setValue(size); family=settings.value("onlinefontfml",QFont().family()).toString(); size=settings.value("onlinefontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); ui.onlineFontComboBox->setCurrentFont(QFont(family)); ui.onlineFontSizeBox->setValue(size); family=settings.value("offlinefontfml",QFont().family()).toString(); size=settings.value("offlinefontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); ui.offlineFontComboBox->setCurrentFont(QFont(family)); ui.offlineFontSizeBox->setValue(size); family=settings.value("separatorfontfml",QFont().family()).toString(); size=settings.value("separatorfontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); ui.separatorFontComboBox->setCurrentFont(QFont(family)); ui.separatorFontSizeBox->setValue(size); QVariant color; color=settings.value("accountcolor"); m_account_col=color.canConvert()?qvariant_cast(color):QColor(0,0,0); color=settings.value("groupcolor"); m_group_col=color.canConvert()?qvariant_cast(color):QColor(0,0,0); color=settings.value("onlinecolor"); m_online_col=color.canConvert()?qvariant_cast(color):QColor(0,0,0); color=settings.value("offlinecolor"); m_offline_col=color.canConvert()?qvariant_cast(color):QColor(0,0,0); color=settings.value("separatorcolor"); m_separator_col=color.canConvert()?qvariant_cast(color):QColor(0,0,0); ui.accountFontBox->setChecked(settings.value("useaccountfont",false).toBool()); ui.groupFontBox->setChecked(settings.value("usegroupfont",false).toBool()); ui.onlineFontBox->setChecked(settings.value("useonlinefont",false).toBool()); ui.offlineFontBox->setChecked(settings.value("useofflinefont",false).toBool()); ui.separatorFontBox->setChecked(settings.value("useseparatorfont",false).toBool()); settings.endGroup(); } void ContactListSettings::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); settings.setValue("windowstyle", ui.winStyleComboBox->currentIndex()); settings.setValue("opacity",((double)ui.opacitySlider->value())/100.0); settings.setValue("alternatingrc",ui.alternatingCheckBox->isChecked()); settings.setValue("showicon1",ui.avatarIconCheckBox->isChecked()); settings.setValue("showicon12",ui.clientIconCheckBox->isChecked()); int model_type = ui.showAccountsBox->isChecked()?0:1; model_type += ui.showGroupsBox->isChecked()?0:2; settings.setValue("modeltype",model_type); settings.setValue("showoffline",!ui.offlineBox->isChecked()); settings.setValue("showempty",!ui.hideEmptyBox->isChecked()); settings.setValue("sortstatus",ui.sortstatusCheckBox->isChecked()); settings.setValue("showseparator",!ui.separatorBox->isChecked()); settings.setValue("accountfontfml",ui.accountFontComboBox->currentFont().family()); settings.setValue("accountfontpnt",ui.accountFontSizeBox->value()); settings.setValue("useaccountfont",ui.accountFontBox->isChecked()); settings.setValue("groupfontfml",ui.groupFontComboBox->currentFont().family()); settings.setValue("groupfontpnt",ui.groupFontSizeBox->value()); settings.setValue("usegroupfont",ui.groupFontBox->isChecked()); settings.setValue("onlinefontfml",ui.onlineFontComboBox->currentFont().family()); settings.setValue("onlinefontpnt",ui.onlineFontSizeBox->value()); settings.setValue("useonlinefont",ui.onlineFontBox->isChecked()); settings.setValue("offlinefontfml",ui.offlineFontComboBox->currentFont().family()); settings.setValue("offlinefontpnt",ui.offlineFontSizeBox->value()); settings.setValue("useofflinefont",ui.offlineFontBox->isChecked()); settings.setValue("separatorfontfml",ui.separatorFontComboBox->currentFont().family()); settings.setValue("separatorfontpnt",ui.separatorFontSizeBox->value()); settings.setValue("useseparatorfont",ui.separatorFontBox->isChecked()); settings.setValue("accountcolor",m_account_col); settings.setValue("groupcolor",m_group_col); settings.setValue("onlinecolor",m_online_col); settings.setValue("offlinecolor",m_offline_col); settings.setValue("separatorcolor",m_separator_col); settings.endGroup(); // if(m_gui_changed) // AbstractContactList::instance().loadGuiSettings(); emit settingsSaved(); } void ContactListSettings::on_accountColorButton_clicked() { QColor color = QColorDialog::getColor(m_account_col, this); if(color.isValid() && m_account_col!=color) { m_account_col=color; emit settingsChanged(); } } void ContactListSettings::on_groupColorButton_clicked() { QColor color = QColorDialog::getColor(m_group_col, this); if(color.isValid() && m_group_col!=color) { m_group_col=color; emit settingsChanged(); } } void ContactListSettings::on_onlineColorButton_clicked() { QColor color = QColorDialog::getColor(m_online_col, this); if(color.isValid() && m_online_col!=color) { m_online_col=color; emit settingsChanged(); } } void ContactListSettings::on_offlineColorButton_clicked() { QColor color = QColorDialog::getColor(m_offline_col, this); if(color.isValid() && m_offline_col!=color) { m_offline_col=color; emit settingsChanged(); } } void ContactListSettings::on_separatorColorButton_clicked() { QColor color = QColorDialog::getColor(m_separator_col, this); if(color.isValid() && m_separator_col!=color) { m_separator_col=color; emit settingsChanged(); } } void ContactListSettings::widgetSettingsChanged() { emit settingsChanged(); } void ContactListSettings::widgetGuiSettingsChanged() { m_gui_changed=true; emit settingsChanged(); } void ContactListSettings::onOpacitySliderValueChanged(int value) { ui.clOpacityPersLbl->setText(QString("%1%").arg(value)); m_gui_changed=true; emit settingsChanged(); } qutim-0.2.0/src/corelayers/contactlist/treeitem.h0000644000175000017500000001011311242600105023554 0ustar euroelessareuroelessar/***************************************************************************** Tree Item Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 TREEITEM_H_ #define TREEITEM_H_ #include #include #include #include #include #include #include using namespace qutim_sdk_0_2; #ifndef ItemHasChangedStatus # define ItemHasChangedStatus 0x1000 #endif class TreeItem { public: TreeItem(const QVariant &display = QString(), TreeItem *parent = 0); virtual ~TreeItem(); TreeItem *child(int number); int childCount() const; QVariant data(int role) const; bool insertChildren(int position, int count); TreeItem *parent(); bool removeChildren(int position, int count); bool removeChildren(); int childNumber() const; bool setData(const QVariant &value, int role); void getData(ItemData &data); void setStructure(const TreeModelItem &structure); const TreeModelItem &getStructure(); QString getName(); int indexOf(TreeItem *t); TreeItem *find(const QString &id); void setHash(const QString &id, TreeItem *item); void removeHash(const QString &id); bool hasHash(const QString &id) { return m_item_list.contains(id); } void setImage(const QIcon &icon, int column); QIcon getImage(int column); void setRow(const QVariant &item, int row); void setStatus(const QString &text, const QIcon &icon, int mass); bool isExpanded(); void setExpanded(bool expanded); void setOnline(bool show); bool getOnline(); int getChildPosition(const QString &child); void moveChild(const QString &child, int position); void setChildOrder(const QStringList &order); const QStringList &getChildOrder(); inline void ensure_invis1() { if( m_parent_item && !(m_visibility_flags & ShowOnline) ) m_parent_item->m_invisible--; } inline void ensure_invis2() { if( m_parent_item && !(m_visibility_flags & ShowOnline) ) m_parent_item->m_invisible++; } void setItemVisibility(int flags) { ensure_invis1(); m_visibility_flags = flags; ensure_invis2(); } inline int getItemVisibility() { return m_visibility_flags; } void setItemNotifications(int flags) { m_notifications_flags = flags; } inline int getItemNotifications() { return m_notifications_flags; } void setAlwaysVisible(bool visible); bool getAlwaysVisible(); void setAlwaysInvisible(bool invisible); bool getAlwaysInvisible(); inline void setAttribute(int type, bool has){ m_content = has?m_content|type:m_content^(m_content&type); } // it is a hell, but should work inline bool hasAttributes() { return m_content>0; } inline bool hasAttribute(ItemAttribute type) { return m_content&type>0; } int getAttributes() { return m_content; } inline QList &getChildren() { return m_child_items; } inline QStringList getChildrenId() const { return m_item_list.keys(); } int m_visible; int m_invisible; bool m_is_visible; private: bool m_is_online; QStringList m_child_order; QList m_child_items; QVariant m_item_display; QList m_item_icons; QList m_item_bottom_rows; TreeItem *m_parent_item; QHash m_item_list; QVariant m_item_type; int m_item_mass; QString m_item_status; QVariant m_online_number; TreeModelItem m_structure; bool m_is_expanded; bool m_is_always_visible; bool m_is_always_invisible; QVariant m_current_status_icon; int m_content; int m_visibility_flags; int m_notifications_flags; }; #endif /*TreeItem_H_*/ qutim-0.2.0/src/corelayers/contactlist/contactlistproxymodel.cpp0000644000175000017500000007700011236633447026775 0ustar euroelessareuroelessar/***************************************************************************** Contact List Proxy Model Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "contactlistproxymodel.h" #include "src/pluginsystem.h" #include bool compareItem(ProxyModelItem *item1, ProxyModelItem *item2) { return item1->m_mass < item2->m_mass; } ContactListProxyModel::ContactListProxyModel(QObject *parent) : QAbstractProxyModel(parent) { m_root_item = new ProxyModelItem(QModelIndex(), &m_source_list); //qWarning() << "Root item:" << m_root_item; m_model_type = 0; m_show_offline=true; m_show_empty_group=true; m_sort_status=false; m_show_separator=true;//false; m_position_buddy = new ProxyModelItem(QModelIndex(), 0); m_empty_model = new QStandardItemModel(); m_append_to_expand_list = false; } void ContactListProxyModel::setSettings(int type, bool show_offline, bool show_empty, bool sort_status, bool show_separator, const QVariant & account_font, const QVariant & group_font, const QVariant & online_font, const QVariant & offline_font, const QVariant & separator_font, const QVariant & account_color, const QVariant & group_color, const QVariant & online_color, const QVariant & offline_color, const QVariant & separator_color) { m_model_type = type%4; m_show_offline = show_offline; m_show_empty_group = show_empty; m_sort_status = sort_status; m_show_separator = show_separator; m_account_font = account_font; m_group_font = group_font; m_online_font = online_font; m_offline_font = offline_font; m_separator_font = separator_font; m_account_color = account_color; m_group_color = group_color; m_online_color = online_color; m_offline_color = offline_color; m_separator_color = separator_color; removeAllItems(); } void ContactListProxyModel::loadProfile(const QString & profile_name) { m_profile_name=profile_name; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); setChildOrder(settings.value("grouporder",QStringList()).toStringList()); m_is_expanded = settings.value("expandedgroups",QStringList()).toStringList(); settings.endGroup(); } void ContactListProxyModel::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); settings.setValue("grouporder",getChildOrder()); settings.setValue("expandedgroups",m_is_expanded); settings.endGroup(); } ContactListProxyModel::~ContactListProxyModel() { delete m_root_item; delete m_position_buddy; delete m_empty_model; } QModelIndex ContactListProxyModel::mapToSource(const QModelIndex &proxyIndex) const { ProxyModelItem *item = getItem(proxyIndex); return item->getSourceIndex(); } QModelIndex ContactListProxyModel::mapFromSource(const QModelIndex &sourceIndex) const { QModelIndex proxy = m_source_list.value(reinterpret_cast(sourceIndex.internalPointer()),QModelIndex()); if(!proxy.isValid()) return QModelIndex(); ProxyModelItem *item = getItem(proxy); if(!item) return QModelIndex(); proxy=proxy.sibling(item->childNumber(),0); return proxy; } int ContactListProxyModel::columnCount(const QModelIndex &parent) const { return 1; } QVariant ContactListProxyModel::data(const QModelIndex &index, int role) const { if(index.column()!=0) return QVariant(); if (!index.isValid()) return QVariant(); ProxyModelItem *item = getItem(index); return item->data(role); } bool ContactListProxyModel::setData(const QModelIndex &index, const QVariant &value, int role) { if(role!=Qt::EditRole) return false; getItem(index)->setData(value,role); return true; } Qt::ItemFlags ContactListProxyModel::flags(const QModelIndex &index) const { Qt::ItemFlags default_flags = Qt::ItemIsEnabled; int type = index.isValid()?index.data(Qt::UserRole).toInt():-1000; switch(m_model_type) { case 0: if (!index.isValid()) return Qt::ItemIsEnabled; //default_flags |= Qt::ItemIsDragEnabled; if(type<2) default_flags |= Qt::ItemIsDragEnabled; if(type>0) default_flags |= Qt::ItemIsDropEnabled; if(type>-1) default_flags |= Qt::ItemIsSelectable; // if(type==0 || type==1) // default_flags |= Qt::ItemIsEditable; break; case 1: if (!index.isValid()) return Qt::ItemIsEnabled | Qt::ItemIsDropEnabled; if(type>-1) default_flags |= Qt::ItemIsSelectable; if(type==1) default_flags |= Qt::ItemIsDropEnabled; if(type>-1) default_flags |= Qt::ItemIsDragEnabled; // if(type==0 || type==1) // default_flags |= Qt::ItemIsEditable; break; case 2: case 3: if (!index.isValid()) return Qt::ItemIsEnabled; if(type==0) default_flags |= Qt::ItemIsDragEnabled; if(type==1) default_flags |= Qt::ItemIsDropEnabled; // if( type < 2 && type > -1 ) // default_flags |= Qt::ItemIsEditable; if(type>-1) default_flags |= Qt::ItemIsSelectable; break; default: break; } return default_flags; } Qt::DropActions ContactListProxyModel::supportedDropActions() const { return Qt::CopyAction; } bool ContactListProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { if (action == Qt::IgnoreAction) return true; if (!data->hasFormat("application/qutim.item")) return false; if (column > 0) return false; QByteArray encoded_data = data->data("application/qutim.item"); QDataStream stream(&encoded_data, QIODevice::ReadOnly); quint64 item_row,item_column; qint64 item_id; stream >> item_row >> item_column >> item_id; QModelIndex index = createIndex((int)item_row,(int)item_column,(quint32)item_id); if(!index.isValid()) return false; int type = index.data(Qt::UserRole).toInt(); int parent_type = parent.data(Qt::UserRole).toInt(); switch(m_model_type) { case 0: switch(type) { case 0: if(parent_type==1){ TreeModelItem old_item = static_cast(getItem(index)->getSourceIndex().internalPointer())->getStructure(); TreeModelItem new_item = old_item; new_item.m_account_name = static_cast(getItem(parent)->getSourceIndex().internalPointer())->getStructure().m_account_name; if(new_item.m_account_name!=old_item.m_account_name) return false; new_item.m_parent_name = static_cast(getItem(parent)->getSourceIndex().internalPointer())->getStructure().m_item_name; if(new_item.m_parent_name==old_item.m_parent_name) return false; PluginSystem::instance().moveItemSignalFromCL(old_item, new_item); return false;} case 1: if(parent_type==2){ if(parent!=index.parent()) return false; TreeItem *group = static_cast(getItem(index)->getSourceIndex().internalPointer()); group->parent()->moveChild(group->getStructure().m_item_name,row); m_tree_view->setUpdatesEnabled(false); removeAllItems(); m_tree_view->setUpdatesEnabled(true); return false; } return false; default: return false; } case 1: switch(type) { case 0: return false; case 1: if(parent==index.parent()) { moveChild(getItem(index)->getName(),row); m_tree_view->setUpdatesEnabled(false); removeAllItems(); m_tree_view->setUpdatesEnabled(true); } return false; } return false; default: return false; } } QStringList ContactListProxyModel::mimeTypes() const { QStringList types; types << "application/qutim.item"; return types; } QMimeData *ContactListProxyModel::mimeData(const QModelIndexList &indexes) const { QMimeData *mime_data = new QMimeData(); if(indexes.size()==0) return mime_data; QModelIndex index = indexes.at(0); if(!index.isValid()) return mime_data; int type = index.data(Qt::UserRole).toInt(); if(type<0 || type>2) return mime_data; if(type==0) mime_data->setText(static_cast(getItem(index)->getSourceIndex().internalPointer())->getStructure().m_item_name); QByteArray encoded_data; QDataStream stream(&encoded_data, QIODevice::WriteOnly); stream << (quint64)index.row() << (quint64)index.column() << (qint64)index.internalId(); mime_data->setData("application/qutim.item",encoded_data); return mime_data; } ProxyModelItem *ContactListProxyModel::getItem(const QModelIndex &index) const { if (index.isValid()){ ProxyModelItem *item = reinterpret_cast(index.internalPointer()); if (item) return item; return 0; } return m_root_item; } QVariant ContactListProxyModel::headerData(int section, Qt::Orientation orientation, int role) const { if(section!=0) return QVariant(); if (orientation == Qt::Horizontal && role == Qt::DisplayRole && section==0) return m_root_item->data(role); return QVariant(); } QModelIndex ContactListProxyModel::index(int row, int column, const QModelIndex &parent) const { if (parent.isValid() && parent.column() != 0) return QModelIndex(); ProxyModelItem *parentItem = getItem(parent); ProxyModelItem *childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); } bool ContactListProxyModel::insertColumns(int position, int columns, const QModelIndex &parent) { return false; } bool ContactListProxyModel::insertRows(int position, int rows, const QModelIndex &parent) { ProxyModelItem *parentItem = getItem(parent); bool success; beginInsertRows(parent, position, position + rows - 1); success = parentItem->insertChildren(position, rows); return success; } QModelIndex ContactListProxyModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); ProxyModelItem *childItem = getItem(index); if(childItem->getChecksum() != 0x12345678) return QModelIndex(); if(!childItem) return QModelIndex(); ProxyModelItem *parentItem = childItem->parent(); if(!parentItem || parentItem->getChecksum() != 0x12345678) return QModelIndex(); if (parentItem == m_root_item) return QModelIndex(); return createIndex(parentItem->childNumber(), 0, parentItem); } bool ContactListProxyModel::removeColumns(int position, int columns, const QModelIndex &parent) { return false; } bool ContactListProxyModel::removeRows(int position, int rows, const QModelIndex &parent) { ProxyModelItem *parent_item = getItem(parent); if(!parent_item) return false; if(position<0 || position+rows>parent_item->childCount()) return false; if(rows<1) return false; bool success = true; /*for(int i=position;ichild(i); QModelIndexList index_list = item->getSourceIndexes(); foreach(QModelIndex index, index_list) { m_source_list.remove(static_cast(index.internalPointer())); } }*/ beginRemoveRows(parent, position, position + rows - 1); success = parent_item->removeChildren(position, rows); endRemoveRows(); return success; } int ContactListProxyModel::rowCount(const QModelIndex &parent) const { ProxyModelItem *parentItem = getItem(parent); return parentItem->childCount(); } void ContactListProxyModel::setModel(TreeContactListModel *model) { m_tree_model = model; } void ContactListProxyModel::insertItem(const QModelIndex &source) { if( !source.isValid() ) return; TreeItem *source_item = static_cast(source.internalPointer()); QString name = source_item->data(Qt::DisplayRole).toString(); int mass = source_item->data(Qt::UserRole+1).toInt(); int visibility = source_item->getItemVisibility(); int attributes = source_item->getAttributes(); const TreeModelItem &structure = source_item->getStructure(); int source_type = structure.m_item_type; bool show = false; if( source_type == 0 ) { show |= ( mass == 1000 ) && ( visibility & ShowOffline || (m_show_offline && !( visibility & NotShowOffline ) ) ); show |= ( mass < 1000 ) && ( visibility & ShowOnline ); show |= ( attributes & ItemHasUnreaded ) && ( visibility & ShowMessage ); show |= ( attributes & ItemHasChangedStatus ) && ( visibility & ShowStatus ); show |= ( attributes & ItemIsTyping ) && ( visibility & ShowTyping ); } else show = true; if( !show ) return; QModelIndex proxy_index = mapFromSource(source.parent()); int position=getItem(proxy_index)->childCount(); QVariant font; QVariant color; if(source_type==0) { font=mass==1000?m_offline_font:m_online_font; color=mass==1000?m_offline_color:m_online_color; } else if(source_type==1) { font=m_group_font; color=m_group_color; } else if(source_type==2) { font=m_account_font; color=m_account_color; } if(source_type==0) { if(!m_sort_status && mass<1000) mass=0; if(m_model_type==2 || m_model_type==3) if(source_item->parent()->data(Qt::DisplayRole).toString().isEmpty()) mass+=2000; position = findPosition(proxy_index,name,mass); } else if(source_type==1) position = findPosition(proxy_index,name,mass); else if(source_type==2) mass=-100; switch(m_model_type) { case 2: // With accounts, without groups case 0:{ // Standart view if(source_type==0 && m_model_type==2) { proxy_index = mapFromSource(source.parent().parent()); position = findPosition(proxy_index,name,mass); } if(!proxy_index.isValid() && source_type!=2) { insertItem(source.parent()); proxy_index = mapFromSource(source.parent()); position = findPosition(proxy_index,name,mass); } switch(source_type) { case 1: if(m_model_type==2) return; if(!m_show_empty_group && ((source_item->m_visible+m_show_offline?source_item->childCount():0)==0)) return; case 0: case 2:{ // emit layoutAboutToBeChanged(); m_tree_view->setUpdatesEnabled(false); if(position>getItem(proxy_index)->childCount()) position=getItem(proxy_index)->childCount(); else if(position<0) position=0; bool expanded = false; if( source_type > 0 ) expanded = source_item->isExpanded(); insertRows(position,1,proxy_index); ProxyModelItem *item = getItem(proxy_index)->child(position); item->setSourceIndex(source); item->setMass(mass); item->setName(name); item->setData(font,Qt::FontRole); item->setData(color,Qt::UserRole+10); endInsertRows(); if(mass!=1000 && source_type==0) item->parent()->m_online_children++; m_source_list.insert(source_item,createIndex(0,0,item)); if( source_type > 0 && expanded ) { if( m_append_to_expand_list ) m_list_for_expand.append(item); else m_tree_view->setExpanded( createIndex_(item), true ); } m_tree_view->setUpdatesEnabled(true); // emit layoutChanged(); break; } } break; } case 3: // without accounts, wihtout groups if(source_type==1 || source_type==2) return; case 1:{ // View without separate to accounts TreeItem *source_item = static_cast(source.internalPointer()); int source_type = source_item->data(Qt::UserRole).toInt(); if(source_type==2) return; /*if(source_type==1) { if(!m_show_empty_group && source_item->childCount()==0) return; }*/ // Try to find exists group with needed name QString group_name; if(source_type==1) group_name = source_item->data(Qt::DisplayRole).toString(); else group_name = source_item->parent()->data(Qt::DisplayRole).toString(); //if(m_model_type==3 && !group_name.isEmpty()) // group_name=tr("In list"); ProxyModelItem *parent_item; QModelIndex group_index; if(m_model_type==1) { bool found=false; for(int i=0;ichildCount();i++) { ProxyModelItem *group = m_root_item->child(i); QString name = group->getName(); //if(m_model_type==3 && !name.isEmpty()) // name=tr("In list"); if(name==group_name) // if group exists, break { parent_item=group; found=true; break; } } if(source_type==1) group_index = createIndex(0,0,static_cast(source.internalPointer())); else group_index = createIndex(0,0,static_cast(source.parent().internalPointer())); if(!m_show_empty_group && m_model_type==1 && source_type==1 && static_cast(group_index.internalPointer())->m_visible==0) return; if(!found)// So create new group { // emit layoutAboutToBeChanged(); bool expanded=isExpanded(group_name); int group_mass = getChildPosition(group_name); position = findPosition(QModelIndex(), group_name, group_mass); if(position>m_root_item->childCount()) position=m_root_item->childCount(); else if(position<0) position=0; insertRows(position,1,QModelIndex()); parent_item = m_root_item->child(position); if(m_model_type==1 || group_name=="") { parent_item->setSourceIndex(group_index); m_source_list.insert(static_cast(group_index.internalPointer()),createIndex(0,0,m_root_item->child(position))); } parent_item->setMass(group_mass); parent_item->setName(group_name); parent_item->setData(font,Qt::FontRole); parent_item->setData(color,Qt::UserRole+10); endInsertRows(); if(expanded) { if( m_append_to_expand_list ) m_list_for_expand.append( parent_item ); else m_tree_view->setExpanded( createIndex(position,0,parent_item), true ); } // emit layoutChanged(); } if(!m_source_list.contains(static_cast(group_index.internalPointer()))) { parent_item->appendSourceIndex(group_index); m_source_list.insert(static_cast(group_index.internalPointer()),createIndex_(parent_item)); } if(source_type==1) // This is all for creating group return; } else { parent_item = m_root_item; } // emit layoutAboutToBeChanged(); //QModelIndex proxy_index = mapFromSource(source.parent());//mapFromSource(createIndex(0,0,source_item->parent())); int position = findPosition(createIndex_(parent_item),name,mass); insertRows(position,1,createIndex_(parent_item)); ProxyModelItem *item = parent_item->child(position); item->setSourceIndex(source); item->setName(name); item->setMass(mass); item->setData(font,Qt::FontRole); item->setData(color,Qt::UserRole+10); endInsertRows(); if(mass!=1000) item->parent()->m_online_children++; m_source_list.insert(source_item,createIndex(0,0,item)); proxy_index = createIndex_(parent_item); // emit layoutChanged(); break; } } position=getItem(proxy_index)->childCount(); //return; if(source_type==0) { if(!m_sort_status && mass<1000) mass=0; // Add separator if need if(m_show_separator) if((mass==1000 && !getItem(proxy_index)->getSeparator(1)) || (mass>-1 && mass<999 && !getItem(proxy_index)->getSeparator(0)) || (mass>1999 && !getItem(proxy_index)->getSeparator(2) )) { // emit layoutAboutToBeChanged(); int separator_mass; //int separator_position; QString separator_name; if(mass<1000) { getItem(proxy_index)->setSeparator(0,true); separator_mass=-1; separator_name=tr("Online"); } else if(mass==1000) { getItem(proxy_index)->setSeparator(1,true); separator_mass=999; separator_name=tr("Offline"); } else { getItem(proxy_index)->setSeparator(2,true); separator_mass=1500; separator_name=tr("Not in list"); } //getItem(proxy_index)->setSeparator(mass==1000?1:0,true); // Mass of offline separator is 999, of online -1 //int separator_mass= (mass==1000)?999:-1; int separator_position = findPosition(proxy_index,"",separator_mass); insertRows(separator_position,1,proxy_index); ProxyModelItem *item = getItem(proxy_index)->child(separator_position); item->setMass(separator_mass); //item->setName(mass==1000?tr("Offline"):tr("Online")); item->setName(separator_name); item->setData(m_separator_font,Qt::FontRole); item->setData(m_separator_color,Qt::UserRole+10); endInsertRows(); // emit layoutChanged(); } } } void ContactListProxyModel::removeItem(const QModelIndex &source) { QModelIndex proxy = mapFromSource(source); if(!proxy.isValid()) return; // emit layoutAboutToBeChanged(); TreeItem *source_item = static_cast(source.internalPointer()); TreeItem *source_parent_item = source_item->parent(); ProxyModelItem *item = getItem(proxy); ProxyModelItem *parent_item = item->parent(); int source_type = source_item->data(Qt::UserRole).toInt(); if(source_type==0) { if(item->getMass()!=1000) item->parent()->m_online_children--; int position = item->childNumber(); // Remove separator lines if it is last online/offline contact if(m_show_separator) { int mass = item->getMass(); if(mass<1000 && parent_item->getSeparator(0)) { if(position==1) { if(position==(parent_item->childCount()-1) || parent_item->child(position+1)->getMass()==999 || parent_item->child(position+1)->getMass()==1500) { removeRows(position-1,1,createIndex_(parent_item)); parent_item->setSeparator(0,false); } } } else if(mass==1000 && parent_item->getSeparator(1)) { if(parent_item->child(position-1)->getMass()==999) { if(position==(parent_item->childCount()-1) || parent_item->child(position+1)->getMass()==1500) { removeRows(position-1,1,createIndex_(parent_item)); parent_item->setSeparator(1,false); } } } else if(parent_item->getSeparator(2)) { if(parent_item->child(position-1)->getMass()==1500) { if(position==(parent_item->childCount()-1)) { removeRows(position-1,1,createIndex_(parent_item)); parent_item->setSeparator(2,false); } } } /*if(item->getMass()==1000 && position==parent_item->childCount()-1) { if(position==1 || position>0 && parent_item->child(position-1)->getMass()==999) { removeRows(position-1,1,createIndex(0,0,item->parent())); item->parent()->setSeparator(1,false); } } else if(position==1) if(parent_item->childCount()==2 || parent_item->childCount()>2 && parent_item->child(2)->getMass()==999) { removeRows(0,1,createIndex(0,0,item->parent())); item->parent()->setSeparator(0,false); }*/ } } switch(m_model_type) { case 0: m_source_list.remove(source_item); removeRows(item->childNumber(),1,createIndex_(item->parent())); if(source_type==0) { if(!m_show_empty_group && parent_item->childCount()==0) { m_source_list.remove(source_parent_item); removeRows(parent_item->childNumber(),1,createIndex_(parent_item->parent())); } } break; case 2: m_source_list.remove(source_item); removeRows(item->childNumber(),1,createIndex_(item->parent())); break; case 1: case 3:{ if(source_type==2) break; ProxyModelItem *group = item; TreeItem *source_group; if(source_type==1) { group = item; source_group = source_item; } else { group = item->parent(); source_group = source_item->parent(); } if(source_type==0) removeRows(item->childNumber(),1,createIndex_(item->parent())); if(m_model_type==3) break; if(source_type==1 || (!m_show_empty_group && group->childCount()==0)) //(!m_show_offline && source_group->m_visible==0 && group->m_online_children==0 && group->childCount()==0 || m_show_offline && source_group->childCount()==0))) { int num = group->childCount(); for(int i=0;igetSourceIndex(); if(child_index.isValid()) m_source_list.remove(static_cast(child_index.internalPointer())); //removeRows(0,1,createIndex(0,0,group)); } m_source_list.remove(source_group); removeRows(group->childNumber(),1,createIndex_(group->parent())); } break;} } /*if(!m_show_empty_group && source_type==0 && parent_item->childCount()==0) { QList list = parent_item->getSourceIndexes(); foreach(QModelIndex index, list) m_source_list.remove(static_cast(index.internalPointer())); removeRows(parent_item->childNumber(),1,createIndex(0,0,parent_item->parent())); }*/ m_source_list.remove(static_cast(source.internalPointer())); //qWarning() << "after remove" << m_source_list.keys(); // emit layoutChanged(); } void ContactListProxyModel::setName(const QModelIndex &source, const QString &value) { if(!source.isValid()) return; TreeItem *source_item = static_cast(source.internalPointer()); //qWarning() << source_item; int source_type = source_item->data(Qt::UserRole).toInt(); if(source_type==0) { removeItem(source); insertItem(source); } else { QModelIndex proxy_index = mapFromSource(source); if(!proxy_index.isValid()) return; ProxyModelItem *item = getItem(proxy_index); item->setName(value); } } void ContactListProxyModel::setStatus(const QModelIndex &source, const QIcon &/*icon*/, const QString &/*text*/, int mass) { removeItem(source); insertItem(source); } void ContactListProxyModel::checkItem(const QModelIndex &source) { if(!source.isValid()) return; TreeItem *source_item = static_cast(source.internalPointer()); int mass = source_item->data(Qt::UserRole+1).toInt(); int visibility = source_item->getItemVisibility(); int attributes = source_item->getAttributes(); const TreeModelItem &structure = source_item->getStructure(); int source_type = structure.m_item_type; bool show = false; if( source_type == 0 ) { show |= ( mass == 1000 ) && ( visibility & ShowOffline || (m_show_offline && !( visibility & NotShowOffline ) ) ); show |= (mass < 1000) && (visibility & ShowOnline); show |= (attributes & ItemHasUnreaded) && (visibility & ShowMessage); show |= (attributes & ItemHasChangedStatus) && (visibility & ShowStatus); show |= (attributes & ItemIsTyping) && (visibility & ShowTyping); } else show = true; bool exists = m_source_list.contains(source_item); if((exists && show) || !(exists || show)) return; if(show) insertItem(source); else removeItem(source); // if(exists && source_item->hasContent()) // return; // if(!(exists || source_item->hasContent())) // return; // if(!exists) // { // insertItem(source); // return; // } // int source_type = source_item->data(Qt::UserRole).toInt(); // int mass; // mass = source_item->data(Qt::UserRole+1).toInt(); // if( !m_show_offline && source_type==0 && (mass==1000)) // { // if(!source_item->getAlwaysVisible()) // { // removeItem(source); // return; // } // } // if(source_type==0) // { // if(source_item->getAlwaysInvisible()) // { // removeItem(source); // return; // } //// if(source_item->parent()->getAlwaysInvisible()) //// { //// removeItem(source); //// return; //// } // } //// else if(source_type==1) //// { //// if(source_item->getAlwaysInvisible()) //// { //// removeItem(source); //// return; //// } //// } } int ContactListProxyModel::findPosition(const QModelIndex &parent, const QString &name, int mass) { ProxyModelItem *item = getItem(parent); const QList *children = item->getChildren(); m_position_buddy->setMass(mass); m_position_buddy->setName(name); int position = qLowerBound(children->begin(),children->end(),m_position_buddy,compareItem)-children->begin(); return position; } void ContactListProxyModel::removeAllItems() { reset(); m_append_to_expand_list = true; m_tree_view->setModel(m_empty_model); // emit layoutAboutToBeChanged(); m_list_for_expand.clear(); // reset(); m_source_list.clear(); m_root_item->removeChildren(); // removeRows(0,m_root_item->childCount(),QModelIndex()); m_root_item->setSeparator(0,false); m_root_item->setSeparator(1,false); m_root_item->setSeparator(2,false); // emit layoutChanged(); m_tree_model->reinsertAllItems(); reset(); m_tree_view->setModel(this); foreach(ProxyModelItem *item, m_list_for_expand) m_tree_view->setExpanded(createIndex_(item), true); m_append_to_expand_list = false; } void ContactListProxyModel::setShowOffline(bool show) { if(show!=m_show_offline) { m_show_offline=show; removeAllItems(); } } void ContactListProxyModel::setShowEmptyGroup(bool show) { if(show!=m_show_empty_group) { m_show_empty_group=show; removeAllItems(); } } void ContactListProxyModel::setSortStatus(bool sort) { if(sort!=m_sort_status) { m_sort_status=sort; removeAllItems(); } } void ContactListProxyModel::setShowSeparator(bool show) { if(show!=m_show_separator) { m_show_separator=show; removeAllItems(); } } void ContactListProxyModel::setModelType(int type) { type%=4; if(type!=m_model_type) { m_model_type=type; removeAllItems(); } } void ContactListProxyModel::newData(const QModelIndex &left, const QModelIndex &right) { QModelIndex proxy_left = mapFromSource(left); QModelIndex proxy_right = mapFromSource(right); if(proxy_left.isValid() && proxy_right.isValid()) emit dataChanged(proxy_left,proxy_right); } bool ContactListProxyModel::getShowOffline() { return m_show_offline; } bool ContactListProxyModel::getShowEmptyGroup() { return m_show_empty_group; } bool ContactListProxyModel::getSortStatus() { return m_sort_status; } bool ContactListProxyModel::getShowSeparator() { return m_show_separator; } int ContactListProxyModel::getModelType() { return m_model_type; } void ContactListProxyModel::setTreeView(QTreeView *tree_view) { m_tree_view=tree_view; connect( m_tree_view, SIGNAL(collapsed(QModelIndex)), SLOT(collapsed(QModelIndex)) ); connect( m_tree_view, SIGNAL(expanded(QModelIndex)), SLOT(expanded(QModelIndex)) ); } int ContactListProxyModel::getChildPosition(const QString &child) { if(child=="") return 10000; int position = m_child_order.indexOf(child); if(position<0) { position=m_child_order.size(); m_child_order.append(child); } return position; } void ContactListProxyModel::moveChild(const QString &child, int position) { if(child=="") return; m_child_order.removeAll(child); if(position<0) position=0; else if(position>m_child_order.size()) position=m_child_order.size(); m_child_order.insert(position, child); } void ContactListProxyModel::setChildOrder(const QStringList &order) { m_child_order=order; } QStringList ContactListProxyModel::getChildOrder() { return m_child_order; } void ContactListProxyModel::setExpanded(const QString & child, bool expanded) { if(m_model_type==0 || m_model_type==2) return; if(!expanded) m_is_expanded.removeAll(child); else if(m_is_expanded.indexOf(child)<0) m_is_expanded.append(child); } bool ContactListProxyModel::isExpanded(const QString & child) { return !(m_is_expanded.indexOf(child)<0); } void ContactListProxyModel::setExpanded(const QModelIndex & index, bool expanded) { if(m_model_type==0 || m_model_type==2) { QModelIndex source_index = static_cast(index.internalPointer())->getSourceIndex(); if(!source_index.isValid()) return; TreeItem *item = static_cast(source_index.internalPointer()); item->setExpanded(expanded); } else { setExpanded(getItem(index)->getName(),expanded); } } QModelIndex ContactListProxyModel::createIndex_(ProxyModelItem *item) { if(!item) return QModelIndex(); if(item == m_root_item) return QModelIndex(); /*if(item == m_root_item) return createIndex(0,0,item);*/ return createIndex(item->childNumber(),0,item); } void ContactListProxyModel::collapsed( const QModelIndex &index ) { setExpanded( index, false ); } void ContactListProxyModel::expanded( const QModelIndex &index ) { setExpanded( index, true ); } qutim-0.2.0/src/corelayers/contactlist/proxymodelitem.cpp0000644000175000017500000002036711236355476025413 0ustar euroelessareuroelessar/***************************************************************************** Proxy Model Item Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "proxymodelitem.h" #include ProxyModelItem::ProxyModelItem(const QModelIndex &source, QHash *source_list, ProxyModelItem *parent) { if(source.isValid()) { m_item_type=0; m_item_mass=static_cast(m_source_index[0].internalPointer())->data(Qt::UserRole+1).toInt(); m_item_name=static_cast(m_source_index[0].internalPointer())->data(Qt::DisplayRole).toString(); } else { m_item_type=-1; m_item_mass=0; m_item_name=""; } m_is_deleted=false; m_online_children=0; m_source_index.append(source); m_parent_item=parent; m_has_offline_separator=false; m_has_online_separator=false; m_mass = QPair(m_item_mass, m_item_name.toLower()); m_source_list = source_list; m_decoration = QVector(13).toList(); m_rows = QVector(3).toList(); m_checksum_value = 0x12345678; } ProxyModelItem::~ProxyModelItem() { if(m_source_list) foreach(QModelIndex index, m_source_index) if(index.isValid()) m_source_list->remove(static_cast(index.internalPointer())); qDeleteAll(m_child_items); m_child_items.clear(); //foreach(ProxyModelItem *item, m_child_items); } ProxyModelItem *ProxyModelItem::clone() { ProxyModelItem *item = new ProxyModelItem(QModelIndex(),m_source_list,m_parent_item); for(int i=m_child_items.size()-1;i>=0;i++) item->insertChild(0,item); item->m_online_children=m_online_children; switch(m_item_type) { case -1: item->setSourceIndex(QModelIndex()); break; case 0: item->setSourceIndex(m_source_index.at(0)); break; case 1: for(int i=0;iappendSourceIndex(m_source_index.at(i)); break; } item->setSeparator(0,m_has_online_separator); item->setSeparator(1,m_has_offline_separator); return item; } void ProxyModelItem::moveChild(int old_position, int new_position) { if (old_position < 0 || old_position > m_child_items.size()-1) return; if (new_position < 0 || new_position > m_child_items.size()-1) return; ProxyModelItem *item = m_child_items.at(old_position); m_child_items.insert(new_position,item); m_child_items.removeAt(old_position); } ProxyModelItem *ProxyModelItem::child(int number) { return m_child_items.value(number); } int ProxyModelItem::childCount() const { return m_child_items.count(); } int ProxyModelItem::childNumber() const { if(m_checksum_value != 0x12345678) return 0; //qWarning() << "childNumber(); m_is_deleted = " << m_is_deleted; if (m_parent_item) return m_parent_item->m_child_items.indexOf(const_cast(this)); return 0; } QVariant ProxyModelItem::data(int role) const { switch(role) { case Qt::EditRole: return m_item_edit; case Qt::FontRole: return m_font; case Qt::UserRole+10: return m_color; } if(m_item_type==0||m_item_type==1) { TreeItem *item = static_cast(m_source_index[0].internalPointer());//getSourceItem(); switch(role) { case Qt::DisplayRole:{ int type = m_item_type==1?1:item->data(Qt::UserRole).toInt(); QString ans=m_item_name; //qWarning() << m_item_name << " " << m_item_name.isEmpty() << m_item_type; if(type==1) { if(item->getName().isEmpty())// && m_item_name.isEmpty()) ans=QObject::tr("Not in list"); int online=m_online_children;//childCount(); /*if(m_has_offline_separator) online--; if(m_has_online_separator) online--;*/ int num=0; foreach(QModelIndex index, m_source_index) num+=static_cast(index.internalPointer())->childCount()-static_cast(index.internalPointer())->m_invisible; ans+=" ("+QString().setNum(online)+"/"+QString().setNum(num)+")"; } return ans;} case Qt::UserRole+1: return m_item_mass; default: return item->data(role); } } else switch(role) { case Qt::DisplayRole: return m_item_name; case Qt::UserRole: return m_item_type; case Qt::UserRole+1: return m_item_mass; case Qt::DecorationRole: return reinterpret_cast(&m_decoration); case Qt::UserRole+2: return reinterpret_cast(&m_rows); case Qt::UserRole+4: return QVariant(); default: return QVariant(); } } bool ProxyModelItem::setData(const QVariant &value, int role) { switch(role) { case Qt::EditRole: m_item_edit = value.toString(); break; case Qt::FontRole: m_font = value; break; case Qt::UserRole+10: m_color = value; break; default: return false; } return true; } bool ProxyModelItem::insertChildren(int position, int count) { if (position < 0 || position > m_child_items.size()) return false; for (int row = 0; row < count; ++row) { ProxyModelItem *item = new ProxyModelItem(QModelIndex(), m_source_list, this); m_child_items.insert(position, item); } return true; } ProxyModelItem *ProxyModelItem::parent() { return m_parent_item; } bool ProxyModelItem::removeChildren(int position, int count) { if (position < 0 || position + count > m_child_items.size()) return false; for (int row = 0; row < count; ++row) { m_child_items[position]->removeChildren(); delete m_child_items[position]; //m_child_items[position]->deleteItem(); m_child_items.removeAt(position); } return true; } bool ProxyModelItem::removeChildren() { if(m_child_items.size()<1) return true; return removeChildren(0,m_child_items.size()); } bool ProxyModelItem::insertChild(int position, ProxyModelItem *item) { if (position < 0 || position > m_child_items.size()) return false; m_child_items.insert(position, item); return true; } QModelIndex ProxyModelItem::getSourceIndex() { if(m_source_index.size()>0) return m_source_index.at(0); else return QModelIndex(); } /*TreeItem *ProxyModelItem::getSourceItem() { return static_cast(m_source_index.internalPointer()); }*/ QList ProxyModelItem::getSourceIndexes() { return m_source_index; } int ProxyModelItem::getType() { return m_item_type; } void ProxyModelItem::setSourceIndex(const QModelIndex &source) { m_source_index.clear(); if(source.isValid()) m_item_type=0; else m_item_type=-1; m_source_index.append(source); } void ProxyModelItem::appendSourceIndex(const QModelIndex &source) { m_item_type=1; if(!m_source_index[0].isValid()) { m_source_index[0]=source; return; } if(m_source_index.indexOf(source)<0) m_source_index.append(source); } void ProxyModelItem::setName(const QString &name) { m_item_name = name; m_item_edit = name; m_mass.second = name.toLower(); } bool ProxyModelItem::operator >(ProxyModelItem *arg) { int dmass = m_item_mass - arg->getMass(); if(dmass>0) return true; else if(dmass==0) return m_item_name.compare(arg->getName()); return false; } int ProxyModelItem::getMass() { return m_item_mass; } void ProxyModelItem::setMass(int mass) { m_item_mass=mass; m_mass.first = mass; } QString ProxyModelItem::getName() { return m_item_name; } bool ProxyModelItem::getSeparator(int type) { switch(type) { case 0: return m_has_online_separator; case 1: return m_has_offline_separator; case 2: return m_has_nil_separator; default: return false; } } void ProxyModelItem::setSeparator(int type, bool value) { switch(type) { case 0: m_has_online_separator=value; break; case 1: m_has_offline_separator=value; break; case 2: m_has_nil_separator=value; default: break; } } void ProxyModelItem::deleteItem() { foreach(ProxyModelItem *item, m_child_items) item->deleteItem(); m_is_deleted=true; } qutim-0.2.0/src/corelayers/contactlist/contactlistitemdelegate.cpp0000644000175000017500000012411611236355476027230 0ustar euroelessareuroelessar/***************************************************************************** Contact List Item Delegate Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "contactlistitemdelegate.h" #include "proxymodelitem.h" #include #include #include #include #include #include #include #include #include "src/qutim.h" #include "src/abstractlayer.h" ContactListItemDelegate::ContactListItemDelegate(QObject *parent) : QAbstractItemDelegate(parent) { m_margin=1; m_margin_x = QPoint(m_margin,0); m_margin_y = QPoint(0,m_margin); m_style_type = 2; m_show_icons = QVector(13).toList(); for (int i = 0; i < 13; ++i) m_show_icons[i]=true; /*m_style.m_booleans=QVector(10); m_style.m_colors=QVector(10); m_style.m_fonts=QVector(10); m_style.m_integers=QVector(10); m_style.m_pixmaps=QVector(10); m_style.m_reals=QVector(10);*/ } ContactListItemDelegate::~ContactListItemDelegate() { } void ContactListItemDelegate::setSettings(QList show_icons, double opacity) { m_show_icons = show_icons; m_opacity = opacity; } void ContactListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option2, const QModelIndex &index) const { ProxyModelItem *item = static_cast(index.internalPointer()); QStyleOptionViewItem option = option2; QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(option.state & QStyle::State_Active)) cg = QPalette::Inactive; QBrush selected = option.palette.brush(cg, QPalette::Highlight); int type = index.data(Qt::UserRole).toInt(); QFont font=option.font; QVariant var_font = index.data(Qt::FontRole); if(var_font.type() == QVariant::Font) font=qvariant_cast(var_font); QColor font_color=painter->pen().color(); QVariant var_color = index.data(Qt::UserRole+10); if(var_color.type() == QVariant::Color) font_color=qvariant_cast(var_color); QFont status_font = font;; QColor status_color = font_color; int x1,x2,y1,y2; option.rect.getCoords(&x1,&y1,&x2,&y2); option.rect.setCoords(x1,y1,x1+m_tree_view->maximumViewportSize().width()-(m_tree_view->verticalScrollBar()->isVisible()?m_tree_view->verticalScrollBar()->frameSize().width():0),y2); // prepare painter->save(); switch(m_style_type) { case 0:{ // painter->setOpacity(m_opacity); QPixmap background_pixmap(option.rect.size()); background_pixmap.fill(QColor::fromRgb(0,0,0,0)); QPainter *background_painter = new QPainter(&background_pixmap); // Choose colors and fonts, based on type of item QPen pen = painter->pen(); QBrush brush = painter->brush(); QPixmap alpha; int rect_type=0; QRect rect=QRect(QPoint(0,0),option.rect.size()); background_painter->setPen(QColor(255,255,255,0)); background_painter->setBrush(QBrush(QColor(255,255,255,0))); switch(type) { case 0:{ if(item->childNumber()==item->parent()->childCount()-1) rect_type=2; QString type = index.data(Qt::UserRole+3).toString(); alpha = getAlphaMask(painter,rect,rect_type); font = m_style_fonts.value("contact",font); font_color = m_style_colors.value(type+"font",font_color); if (option.state & QStyle::State_Selected) { if(m_style_colors.contains(type+"label")) { QColor background = m_style_colors.value(type+"label"); drawRect(background_painter,background); } else background_painter->setBrush(selected); } else drawRect(background_painter,m_style_colors.value("background",painter->background().color())); break; } case -1: alpha = getAlphaMask(painter,rect,rect_type); drawRect(background_painter,m_style_colors.value("background",painter->background().color())); font = m_style_fonts.value("separator",font); font_color = m_style_colors.value("separatorfont",font_color); if (option.state & QStyle::State_Selected) { if(m_style_colors.contains(type+"label")) { QColor background = m_style_colors.value("separatorlabel"); drawRect(background_painter,background); } else background_painter->setBrush(selected); } break; case 1: case 2: rect_type = type==2?3:1; if(rect_type==1 && !static_cast(m_tree_view)->isExpanded(index)) rect_type=3; alpha = getAlphaMask(painter,rect,rect_type); drawRect(background_painter,m_style_colors.value("background",painter->background().color())); if(m_style_bools.value("groupgradient",false)) { drawGradient(background_painter, m_style_colors["groupup"],m_style_colors["groupdown"],rect); } else drawRect(background_painter,m_style_colors.value("groupbackground",painter->background().color())); if (option.state & QStyle::State_Selected) { if(m_style_colors.contains(type+"label")) { QColor background = m_style_colors.value("grouplabel"); drawRect(background_painter,background); } else background_painter->setBrush(selected); } font = m_style_fonts.value("group",option.font); font_color = m_style_colors.value("groupfont",font_color); break; } drawRect(background_painter,rect); background_painter->end(); background_pixmap.setAlphaChannel(alpha); painter->drawPixmap(option.rect,background_pixmap); painter->setPen(pen); painter->setBrush(brush); painter->setPen(font_color); painter->setFont(font); painter->setOpacity(1); option.rect.getCoords(&x1,&y1,&x2,&y2); option.rect.setCoords(x1+10,y1,x2-10,y2); break; } case 1:{ QPen pen = painter->pen(); QBrush brush = painter->brush(); int rect_type=0; QRect rect = option.rect; QString selection = "normal"; if(option.state & QStyle::State_Selected) selection = "down"; else if(option.state & QStyle::State_MouseOver) selection = "hover"; StyleVar *style_tmp; switch(type) { case 0:{ QString type = index.data(Qt::UserRole+3).toString(); style_tmp = &(*const_cast *>(&m_styles))[selection+type]; break; } case -1: style_tmp = &(*const_cast *>(&m_styles))[selection+"separator"]; break; case 1: style_tmp = &(*const_cast *>(&m_styles))[selection+"group"]; break; case 2: style_tmp = &(*const_cast *>(&m_styles))[selection+"account"]; break; default: painter->restore(); return; } StyleVar &style = *style_tmp; font_color = style.m_text_color; font = style.m_font; font.setBold(style.m_font_bold); font.setItalic(style.m_font_italic); font.setOverline(style.m_font_overline); font.setUnderline(style.m_font_underline); status_font = m_status_font; status_color = m_status_color[selection]; QPen border_pen(style.m_border_color); border_pen.setWidth(style.m_border_width); painter->setPen(border_pen); switch(style.m_background_type) { case 1: case 2:{ QLinearGradient gradient; if(style.m_background_type==1) gradient = QLinearGradient(QPoint(0,rect.top()),QPoint(0,rect.bottom())); else gradient = QLinearGradient(QPoint(0,0),QPoint(rect.width(),0)); for(int i=0;isetBrush(gradient); break; } case 0: painter->setBrush(style.m_background); break; } QRect background_rect = rect; background_rect.setBottomLeft( rect.bottomLeft() - QPoint( style.m_border_width + 1, style.m_border_width + 1 ) ); drawRect(painter, background_rect); painter->setBrush(brush); painter->setPen(font_color); painter->setFont(font); // option.rect.getCoords(&x1,&y1,&x2,&y2); // option.rect.setCoords(x1+5,y1,x2-5,y2); break; } default:{ if (option.state & QStyle::State_Selected) { QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(option.state & QStyle::State_Active)) cg = QPalette::Inactive; font_color = option.palette.color(cg, QPalette::HighlightedText); } QStyleOptionViewItemV4 opt(option2); QStyle *style = opt.widget ? opt.widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); status_color = font_color; break;} } QFontMetrics font_metrics(font); //qWarning() << font; // draw selection /* if (option.showDecorationSelected && (option.state & QStyle::State_Selected)) { QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(option.state & QStyle::State_Active)) cg = QPalette::Inactive; painter->fillRect(option.rect, option.palette.brush(cg, QPalette::Highlight)); }*/ // draw QPoint point(option.rect.left(),option.rect.top()); point+=m_margin_x; point+=m_margin_y; int height=0; QList &list = *reinterpret_cast *>(index.data(Qt::DecorationRole).value()); switch (type) { case 1: if(static_cast(m_tree_view)->isExpanded(index)) list[0]=IconManager::instance().getIcon("expanded"); else list[0]=IconManager::instance().getIcon("collapsed"); break; default: break; } if(m_show_icons[0]) { QVariant icon_variant = index.data(Qt::UserRole+4); if( (icon_variant.isValid() && icon_variant.type()==QVariant::Icon) || type==1) { QIcon icon = qvariant_cast(type==1?list[0]:icon_variant); QSize icon_size = size(option, index, type==1?list[0]:icon_variant); painter->drawPixmap(QRect(point, icon_size),icon.pixmap(icon_size,QIcon::Normal,QIcon::On)); point+=QPoint(icon_size.width(),0); point+=m_margin_x; if(icon_size.height()>height) height = icon_size.height(); } } for(int i=1;i<3;i++) { if(m_show_icons[i]) { if(list[i].isValid()&&list[i].type()==QVariant::Icon) { QIcon icon = qvariant_cast(list[i]); if(icon.isNull()) continue; QSize icon_size = i == 1 ? icon.actualSize(QSize(65535,65535),QIcon::Normal,QIcon::On) : size(option, index, list[i]); if(icon_size.width() <= 0) continue; painter->drawPixmap(QRect(point, icon_size),icon.pixmap(icon_size,QIcon::Normal,QIcon::On)); point+=QPoint(icon_size.width(),0); point+=m_margin_x; if(icon_size.height()>height) height = icon_size.height(); } } } QPoint point_r(option.rect.right(),option.rect.top()); for(int i=12;i>2;i--) { if(m_show_icons[i]) if(list[i].isValid()&&list[i].type()==QVariant::Icon) { QIcon icon = qvariant_cast(list[i]); if(icon.isNull()) continue; QSize icon_size = size(option, index, list[i]); if(icon_size.width() <= 0) continue; point_r-=QPoint(icon_size.width(),0); point_r-=m_margin_x; painter->drawPixmap(QRect(point_r, icon_size),icon.pixmap(icon_size,QIcon::Normal,QIcon::On)); if(icon_size.height()>height) height = icon_size.height(); } } point_r-=m_margin_x; QString text=index.data(Qt::DisplayRole).toString(); QSize item_size=QSize(point_r.x()-point.x(),font_metrics.height()); if(font_metrics.height()>height) height = font_metrics.height(); int delta_width = item_size.width() - font_metrics.width(text); if(type==-1 && delta_width>0) { item_size.setWidth(item_size.width()-delta_width); delta_width/=2; point+=QPoint(delta_width,0); } painter->setFont(font); painter->setPen(font_color); painter->drawText(QRect(point,QSize(item_size.width(),font_metrics.height())),font_metrics.elidedText(text,Qt::ElideRight,item_size.width())); QList &row_list = *reinterpret_cast *>(index.data(Qt::UserRole+2).value()); painter->setFont(status_font); painter->setPen(status_color); font_metrics = QFontMetrics(status_font); option.fontMetrics = font_metrics; option.font = status_font; foreach(const QVariant &row_variant, row_list) { QList row = row_variant.toList(); point.setX(option.rect.left()); point+=m_margin_x; point+=QPoint(0,height); height=0; for(int j=0;jheight) height = rect.height(); } } // done painter->restore(); } QSize ContactListItemDelegate::sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const { int type = index.data(Qt::UserRole).toInt(); QVariant value = index.data(Qt::SizeHintRole); if (value.isValid()) return qvariant_cast(value); QStyleOptionViewItem opt = option; QVariant font = index.data(Qt::FontRole); if(font.type() == QVariant::Font) opt.font=qvariant_cast(font); //opt.font=m_style.m_fonts[type<1?0:1]; if(m_style_type==0) switch(type) { case -1: case 0: opt.font = qvariant_cast(getValue("Contact Font",opt.font)); break; case 1: case 2: opt.font = qvariant_cast(getValue("Group Font",opt.font)); break; } else if(m_style_type==1) { switch(type) { case 0:{ QString type = index.data(Qt::UserRole+3).toString(); opt.font = m_styles["normal"+type].m_font; break; } case -1: opt.font = m_styles["normalseparator"].m_font; break; case 1: opt.font = m_styles["normalgroup"].m_font; break; case 2: opt.font = m_styles["normalaccount"].m_font; break; } } int height=size(opt, index, index.data(Qt::DisplayRole)).height(); QList &list = *reinterpret_cast *>(index.data(Qt::DecorationRole).value()); int icons_height = 0; for(int i=0;i<13;i++) if(m_show_icons[i]) { QSize icon_size = i == 1 ? qvariant_cast(list[i]).actualSize(QSize(65535,65535),QIcon::Normal,QIcon::On) : size(option, index, list[i]); icons_height = icon_size.height(); if(icons_height > height) height = icons_height; } height+=m_margin*2; QList &row_list = *reinterpret_cast *>(index.data(Qt::UserRole+2).value()); foreach(const QVariant &list, row_list) { int h = size(option, index, list).height(); if(h>0) height+=h+m_margin; } int width = m_tree_view->maximumViewportSize().width(); return QSize(width, height); } QWidget *ContactListItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { qDebug() << index.isValid() << index.data( Qt::DisplayRole ).toString() << index.data( Qt::EditRole ); if (!index.isValid()) return 0; // QVariant::Type t = static_cast(index.data(Qt::EditRole).userType()); return QItemEditorFactory::defaultFactory()->createEditor(QVariant::String, parent); } void ContactListItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { qDebug() << Q_FUNC_INFO; } void ContactListItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { qDebug() << Q_FUNC_INFO; } void ContactListItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { qDebug() << Q_FUNC_INFO; } void ContactListItemDelegate::drawList(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex & index, const QList & list) const { QFontMetrics font_metrics(option.font); int string_num=-1,separator=-1; int length=0; for (int i = 0; i < list.size(); ++i) { bool alive=true; if(!list[i].isValid() || list[i].isNull()) { //list.removeAt(i); i--; alive=false; } /*else if(list[i].isNull()) { if(separator<0) separator=i; list.removeAt(i); i--; alive=false; } else if(list[i].type()==QVariant::String) { if(string_num<0) string_num=i; else { list.removeAt(i); i--; alive=false; } }*/ if(alive) length+=size(option, index, list.at(i)).width(); } if(separator==-1) separator=list.size(); QPoint point(option.rect.left(),option.rect.top()); point+=m_margin_x; point+=m_margin_y; int height=0; if(length>option.rect.width()) { } else { for(int i=0;i(list[i]); QSize icon_size = size(option, index, list[i]); painter->drawPixmap(QRect(point, icon_size),icon.pixmap(icon_size,QIcon::Normal,QIcon::On)); point+=QPoint(icon_size.width(),0); point+=m_margin_x; if(icon_size.height()>height) height = icon_size.height(); } } QPoint point_r(option.rect.right(),option.rect.top()); for(int i=list.size()-1;i>separator;i--) { if(list[i].isValid()&&list[i].type()==QVariant::Icon) { QIcon icon = qvariant_cast(list[i]); QSize icon_size = size(option, index, list[i]); point_r-=QPoint(icon_size.width(),0); point_r-=m_margin_x; painter->drawPixmap(QRect(point_r, icon_size),icon.pixmap(icon_size,QIcon::Normal,QIcon::On)); if(icon_size.height()>height) height = icon_size.height(); } } point_r-=m_margin_x;QString text=index.data(Qt::DisplayRole).toString(); QSize item_size=QSize(point_r.x()-point.x(),font_metrics.height()); if(font_metrics.height()>height) height = font_metrics.height(); painter->drawText(QRect(point,QSize(item_size.width(),font_metrics.height())),font_metrics.elidedText(text,Qt::ElideRight,item_size.width())); } } QSize ContactListItemDelegate::size(const QStyleOptionViewItem &option, const QModelIndex & index, const QVariant &value) const { static QSize maxsize(16,16); if (value.isValid() && !value.isNull()) { switch (value.type()) { case QVariant::Invalid: break; case QVariant::Pixmap: return qvariant_cast(value).size(); case QVariant::Image: return qvariant_cast(value).size(); case QVariant::Icon:{ QIcon::Mode mode = QIcon::Normal;//d->iconMode(option.state); QIcon::State state = QIcon::On;//option.state&QStyle::State_On==QStyle::State_On?QIcon::On:QIcon::Off; QIcon icon = qvariant_cast(value); QSize size = icon.actualSize(maxsize);//, mode, state); return size;} case QVariant::Color: return option.decorationSize; case QVariant::List:{ int maxh=0; int width=0; foreach(QVariant item, value.toList()) { QSize item_size = size(option, index, item); width+=item_size.width(); if(item_size.height()>maxh) maxh=item_size.height(); } return QSize(width,maxh); } case QVariant::String:{ QFont fnt = option.font; QFontMetrics fm(fnt); return QSize(fm.width(value.toString()),fm.height());} default: break; } } return QSize(0,0); } void ContactListItemDelegate::drawGradient(QPainter *painter, const QColor & up, const QColor & down, const QRect & rect/*, int type*/) const { painter->setPen(QColor(255,255,255,0)); QLinearGradient gradient(QPoint(0,0),QPoint(0,rect.height())); if(!m_style_type) { gradient.setColorAt(0, up); gradient.setColorAt(1, down); } else { gradient.setColorAt(0, up); gradient.setColorAt(1, down); } painter->setBrush(gradient); } void ContactListItemDelegate::drawRect(QPainter *painter, const QColor & color/*, const QRect & rect, int type*/) const { if(!m_style_type) { QColor color2 = color; color2.setAlpha(50); painter->setBrush(color2); } else painter->setBrush(color); /*QPen pen = painter->pen(); QBrush brush = painter->brush();*/ painter->setPen(QColor(255,255,255,0)); /*drawRect(painter,rect,type); painter->setPen(pen); painter->setBrush(brush);*/ } void ContactListItemDelegate::drawRect(QPainter *painter, QRect rect) const { // int x1=rect.left(),y1=rect.top(),x2=rect.width(),y2=rect.height(); painter->drawRect(rect); /* QPixmap buffer(rect.size()); buffer.fill(QColor(255,255,255,0)); QPainter buffer_painter(&buffer); //buffer_painter.setRenderHints(painter->renderHints()); buffer_painter.setBrush(painter->brush()); buffer_painter.setPen(painter->pen()); buffer_painter.drawRect(QRect(QPoint(0,0),QSize(x2-1,y2))); buffer_painter.end(); buffer.setAlphaChannel(alpha); painter->drawPixmap(rect,buffer);*/ } QPixmap ContactListItemDelegate::getAlphaMask(QPainter *painter, QRect rect, int type) const { int x1=rect.left(),y1=rect.top(),x2=rect.width(),y2=rect.height(); QPixmap alpha_buffer(rect.size()); alpha_buffer.fill(QColor(0,0,0)); QPainter alpha_painter(&alpha_buffer); alpha_painter.setRenderHints(QPainter::Antialiasing); alpha_painter.setBrush(QColor(255,255,255)); alpha_painter.setPen(QColor(255,255,255)); if(type!=0) alpha_painter.drawRoundedRect(QRect(QPoint(0,0),QSize(x2-1,y2-1)),10,50); switch(type) { case 0: //draw rectangle y1=0; break; case 1: //draw rectangle rounded at top y2/=2; y1=y2; break; case 2: //draw rectangle rounded at bottom y2/=2; y1=0; break; default: //draw rounded rectangle break; } if(type<3) alpha_painter.drawRect(QRect(QPoint(0,y1),QSize(x2,y2))); alpha_painter.end(); return alpha_buffer; } void ContactListItemDelegate::draw(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QVariant &value) const { if (value.isValid() && !value.isNull()) { switch (value.type()) { case QVariant::Invalid: break; case QVariant::Pixmap: painter->drawPixmap(rect,qvariant_cast(value)); break; case QVariant::Image: painter->drawImage(rect,qvariant_cast(value)); break; case QVariant::Icon:{ //QIcon::Mode mode = QIcon::Normal;//d->iconMode(option.state); //QIcon::State state = QIcon::On;//option.state&QStyle::State_On==QStyle::State_On?QIcon::On:QIcon::Off; QIcon icon = qvariant_cast(value); painter->drawPixmap(rect,icon.pixmap(icon.actualSize(QSize(16,16)),QIcon::Normal,QIcon::On)); break;} case QVariant::String:{ QFont fnt = option.font; QFontMetrics font_metrics(fnt); painter->drawText(rect,font_metrics.elidedText(value.toString(),Qt::ElideRight,rect.width())); break;} default: break; } } } QMap ContactListItemDelegate::appendStyleFile(QString path) { QMap style_hash; QDir dir(path); QFileInfo theme_file_info(path);//dir.filePath(dir.dirName()+file)); QFile *theme_file; if(theme_file_info.isDir()) theme_file = new QFile(path+"/Contents/Resources/Data.plist");//QDir(QDir(QDir(theme_file_info.absoluteDir().filePath(dir.dirName()+file)).filePath("Contents")).filePath("Resources")).filePath("Data.plist")); else theme_file = new QFile(path);//dir.absoluteFilePath(dir.dirName()+file)); if (!theme_file->exists()) { delete theme_file; return QMap(); } if (theme_file->open(QIODevice::ReadOnly)) { QDomDocument theme_dom; if (theme_dom.setContent(theme_file)) { QDomElement root_element = theme_dom.documentElement(); if (root_element.isNull()) { delete theme_file; return QMap(); } style_hash = parse(root_element.firstChild()); } } delete theme_file; return style_hash; } QMap ContactListItemDelegate::parse(const QDomNode & root_element) { QMap style_hash; if (root_element.isNull()) return style_hash; QDomNode subelement =root_element;//.firstChild(); QString key=""; for (QDomNode node = subelement.firstChild(); !node.isNull(); node = node.nextSibling()) { QDomElement element = node.toElement(); if(element.nodeName()=="key") key=element.text(); else { QVariant value; if(element.nodeName()=="true") value=QVariant(true); else if(element.nodeName()=="false") value=QVariant(false); else if(element.nodeName()=="real") value=QVariant(element.text().toDouble()); else if(element.nodeName()=="string") { QString text = element.text(); if(key.indexOf("Font",Qt::CaseInsensitive)>-1) value=getFont(text); else if(key.indexOf("Color",Qt::CaseInsensitive)>-1||key.endsWith("Gradient")||key.endsWith("Background")) value=getColor(text); else value=QVariant(text); } else if(element.nodeName()=="integer") value=QVariant(element.text().toInt()); else if(element.nodeName()=="dict") { value = parse(node); } style_hash.insert(key,value); } } return style_hash; } bool ContactListItemDelegate::setThemeStyle(QString path) { m_style_type=2; m_style_hash.clear(); m_styles.clear(); if(path.isEmpty()) return false; QFileInfo dir(path); if(!dir.exists()) return false; QMap style_hash = appendStyleFile(path); if(style_hash.isEmpty()) return false; if(path.endsWith(".ListTheme")) { m_style_type=0; m_style_hash = style_hash; QColor &background = m_style_colors["background"] = qvariant_cast(style_hash["Background Color"]); background.setAlpha(0); QString css = "QTreeView { "; css.append(QString("background-color: rgba(%1, %2, %3, %4);").arg(background.red()).arg(background.green()).arg(background.blue()).arg(background.alpha())); css+=" }"; m_tree_view->setStyleSheet(css); m_style_fonts["contact"] = qvariant_cast(style_hash["Contact Font"]); if(style_hash.value("Grid Enabled",false).toBool()) m_style_colors["grid"] = qvariant_cast(style_hash["Grid Color"]); if(style_hash.value("Online Enabled",false).toBool()) { m_style_colors["onlinefont"] = qvariant_cast(style_hash["Online Color"]); m_style_colors["onlinelabel"] = qvariant_cast(style_hash["Online Label Color"]); } else { m_style_colors["onlinefont"] = qvariant_cast(style_hash["Contact Text Color"]); m_style_colors["onlinelabel"] = m_style_colors["background"]; } m_style_colors["ffcfont"] = m_style_colors["onlinefont"]; m_style_colors["ffclabel"] = m_style_colors["onlinelabel"]; m_style_colors["athomefont"] = m_style_colors["onlinefont"]; m_style_colors["athomelabel"] = m_style_colors["onlinelabel"]; m_style_colors["atworkfont"] = m_style_colors["onlinefont"]; m_style_colors["atworklabel"] = m_style_colors["onlinelabel"]; m_style_colors["lunchfont"] = m_style_colors["onlinefont"]; m_style_colors["lunchlabel"] = m_style_colors["onlinelabel"]; m_style_colors["evilfont"] = m_style_colors["onlinefont"]; m_style_colors["evillabel"] = m_style_colors["onlinelabel"]; m_style_colors["depressionfont"] = m_style_colors["onlinefont"]; m_style_colors["depressionlabel"] = m_style_colors["onlinelabel"]; if(style_hash.value("Offline Enabled",false).toBool()) { m_style_colors["offlinefont"] = qvariant_cast(style_hash["Offline Color"]); m_style_colors["offlinelabel"] = qvariant_cast(style_hash["Offline Label Color"]); } else { m_style_colors["offlinefont"] = qvariant_cast(style_hash["Contact Text Color"]); m_style_colors["offlinelabel"] = m_style_colors["background"]; } if(style_hash.value("Away Enabled",false).toBool()) { m_style_colors["awayfont"] = qvariant_cast(style_hash["Away Color"]); m_style_colors["awaylabel"] = qvariant_cast(style_hash["Away Label Color"]); } else { m_style_colors["awayfont"] = qvariant_cast(style_hash["Contact Text Color"]); m_style_colors["awaylabel"] = m_style_colors["background"]; } m_style_colors["nafont"] = m_style_colors["awayfont"]; m_style_colors["nalabel"] = m_style_colors["awaylabel"]; m_style_colors["occupiedfont"] = m_style_colors["awayfont"]; m_style_colors["occupiedlabel"] = m_style_colors["awaylabel"]; m_style_colors["dndfont"] = m_style_colors["awayfont"]; m_style_colors["dndlabel"] = m_style_colors["awaylabel"]; m_style_colors["invisiblefont"] = m_style_colors["awayfont"]; m_style_colors["invisiblelabel"] = m_style_colors["awaylabel"]; if(style_hash.value("Group Gradient",false).toBool()) { m_style_bools["groupgradient"]=true; m_style_colors["groupup"] = qvariant_cast(style_hash["Group Background"]); m_style_colors["groupdown"] = qvariant_cast(style_hash["Group Background Gradient"]); } else m_style_colors["groupbackground"] = qvariant_cast(style_hash["Group Background"]); m_style_colors["grouplabel"] = qvariant_cast(style_hash["Group Label Color"]); m_style_colors["groupfont"] = qvariant_cast(style_hash["Group Text Color"]); m_style_fonts["group"] = qvariant_cast(style_hash["Group Font"]); return true; } else { m_style_type = 1; m_style_hash = style_hash; QString theme_path; if(dir.isFile()) theme_path = dir.absolutePath(); else { QDir theme_dir(path); theme_dir.cdUp(); theme_path = theme_dir.absolutePath(); } QStringList types; QStringList short_types; types << "Separator" << "Group" << "Account" << "Contact"; short_types << "separator" << "group" << "account" << "contact"; types << "Online" << "FreeForChat" << "AtHome" << "AtWork" << "Lunch" << "Evil" << "Depression"; types << "Offline" << "Away" << "NA" << "DND" << "Occupied" << "Invisible"; short_types << "online" << "ffc" << "athome" << "atwork" << "lunch" << "evil" << "depression"; short_types << "offline" << "away" << "na" << "dnd" << "occupied" << "invisible"; QStringList selection_types; QStringList selection_short_types; selection_short_types << "normal" << "hover" << "down"; selection_types << "Normal" << "Hover" << "Down"; //QString css = "QAbstractItemView { "; QString css = "QTreeView { "; int full_background_type = style_hash.value("Background Type",0).toInt(); if(style_hash.contains("Gradients") && (full_background_type==1 || full_background_type==2)) { QString gradient = QString("background: qlineargradient(x1:0, y1:0, x2:%1, y2:%2").arg(full_background_type==1?0:1).arg(full_background_type==1?1:0); QMap gradients = style_hash.value("Gradients").toMap(); int n=1; while(gradients.contains("Color "+QString::number(n)) && gradients.contains("Stop "+QString::number(n))) { QColor color = qvariant_cast(gradients.value("Color "+QString::number(n))); gradient.append(QString(", stop: %1 rgba(%2, %3, %4, %5)").arg(gradients.value("Stop "+QString::number(n)).toDouble()).arg(color.red()).arg(color.green()).arg(color.blue()).arg(color.alpha())); n++; } gradient.append(");"); css.append(gradient); } else if(style_hash.contains("Background")) { QColor background = qvariant_cast(style_hash.value("Background")); css.append(QString("background-color: rgba(%1, %2, %3, %4);").arg(background.red()).arg(background.green()).arg(background.blue()).arg(background.alpha())); } if(style_hash.contains("Alternate Background")) { QColor background = qvariant_cast(style_hash.value("Alternate Background")); css.append(QString("alternate-background-color: rgba(%1, %2, %3, %4);").arg(background.red()).arg(background.green()).arg(background.blue()).arg(background.alpha())); } //int background_picture_type = style_hash.value("Background Picture Type",0).toInt(); if(style_hash.contains("Background Image")) { css.append(QString("background-image: url(\"%1\");").arg(theme_path+"/"+style_hash.value("Background Image").toString())); if(style_hash.contains("Background Repeat")) css.append(QString("background-repeat: repeat-%1;").arg(style_hash.value("Background Repeat").toString().toLower())); if(style_hash.contains("Background Position")) css.append(QString("background-repeat: position-%1;").arg(style_hash.value("Background Position").toString().toLower())); if(style_hash.contains("Background Attachment")) { if(style_hash.value("Background Attachment")=="Fixed") css.append(QString("background-attachment: fixed;")); } } css.append(" }"); qDebug() << css; m_tree_view->setStyleSheet(css); if(style_hash.contains("ScrollBar Policy")) { switch(style_hash.value("ScrollBar Policy",0).toInt()) { case 1: m_tree_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); break; case 2: m_tree_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); break; default: m_tree_view->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); break; } } m_styles["normal"].m_background_type = 0; m_styles["normal"].m_background = qvariant_cast(style_hash.value("Background",QColor(0,0,0,0))); m_styles["normal"].m_font = qvariant_cast(style_hash.value("Font",QApplication::font())); m_styles["normal"].m_font_bold = style_hash.value("Font Bold", false).toBool(); m_styles["normal"].m_font_italic = style_hash.value("Font Italic", false).toBool(); m_styles["normal"].m_font_overline = style_hash.value("Font Overline", false).toBool(); m_styles["normal"].m_font_underline = style_hash.value("Font Underline", false).toBool(); m_styles["normal"].m_border_width = 0; m_styles["normal"].m_border_color = QColor(0,0,0,0); m_styles["normal"].m_text_color = qvariant_cast(style_hash.value("Text Color",QApplication::palette().text().color())); m_status_font = qvariant_cast(style_hash.value("Status Font",QApplication::font())); m_status_color["normal"] = qvariant_cast(style_hash.value("Status Text Color",QApplication::palette().text().color())); for(int i=1;i(style_hash.value(selection_types[i]+"Status Text Color",m_status_color["normal"])); for(int i=1;i(style_hash.value(selection_types[i]+"Background")); if(style_hash.contains(selection_types[i]+"Font")) m_styles[selection_short_types[i]].m_font = qvariant_cast(style_hash.value(selection_types[i]+"Font",QApplication::font())); if(style_hash.contains(selection_types[i]+"Text Color")) m_styles[selection_short_types[i]].m_text_color = qvariant_cast(style_hash.value(selection_types[i]+"Text Color",QApplication::palette().text().color())); } QMap root = m_style_hash; for(int i=0;i item = root.value(types[i]).toMap(); if(item.contains("Font")) m_styles["normal"+short_types[i]].m_font = qvariant_cast(item.value("Font")); if(item.contains("Font Bold")) m_styles["normal"+short_types[i]].m_font_bold = item.value("Font Bold").toBool(); if(item.contains("Font Italic")) m_styles["normal"+short_types[i]].m_font_italic = item.value("Font Italic").toBool(); if(item.contains("Font Overline")) m_styles["normal"+short_types[i]].m_font_overline = item.value("Font Overline").toBool(); if(item.contains("Font Underline")) m_styles["normal"+short_types[i]].m_font_underline = item.value("Font Underline").toBool(); for(int j=0;j3?(selection_short_types[j]+"contact"):("normal"+short_types[i])]; if(item.contains(selection_types[j])) { QMap selection = item.value(selection_types[j]).toMap(); if(selection.contains("Text Color")) m_styles[selection_short_types[j]+short_types[i]].m_text_color = qvariant_cast(selection.value("Text Color")); if(selection.contains("Background Type")) m_styles[selection_short_types[j]+short_types[i]].m_background_type = selection.value("Background Type").toInt(); int background_type = m_styles[selection_short_types[j]+short_types[i]].m_background_type; switch(background_type) { case 1: case 2:{ m_styles[selection_short_types[j]+short_types[i]].m_stops.clear(); m_styles[selection_short_types[j]+short_types[i]].m_colors.clear(); if(selection.contains("Gradients")) { QMap gradients = selection.value("Gradients").toMap(); int n=1; while(gradients.contains("Color "+QString::number(n)) && gradients.contains("Stop "+QString::number(n))) { m_styles[selection_short_types[j]+short_types[i]].m_stops.append(gradients.value("Stop "+QString::number(n)).toDouble()); m_styles[selection_short_types[j]+short_types[i]].m_colors.append(qvariant_cast(gradients.value("Color "+QString::number(n)))); n++; } n--; break; } } default:{ m_styles[selection_short_types[j]+short_types[i]].m_background_type=0; if(selection.contains("Background")) m_styles[selection_short_types[j]+short_types[i]].m_background = qvariant_cast(selection.value("Background")); break; } } if(selection.contains("Border Width")) m_styles[selection_short_types[j]+short_types[i]].m_border_width = selection.value("Border Width").toInt(); if(selection.contains("Border Color")) m_styles[selection_short_types[j]+short_types[i]].m_border_color = qvariant_cast(selection.value("Border Color")); } } if(i==3) { root = item; for(int j=0;j3?(selection_short_types[j]+"contact"):("normal"+short_types[i])]; } return true; } } QVariant ContactListItemDelegate::getValue(const QString &name, const QVariant &def) const { QVariant var = m_style_hash.value(name); if(var.isValid()) return var; return def; } QColor ContactListItemDelegate::getColor(QVariant var) const { QStringList list = var.toString().split(","); if(list.size()>3) return QColor(list[0].toInt(),list[1].toInt(),list[2].toInt(),list[3].toInt()); else if(list.size() == 3) return QColor(list[0].toInt(),list[1].toInt(),list[2].toInt()); else return QColor(var.toString()); } QFont ContactListItemDelegate::getFont(QVariant var) const { QStringList list = var.toString().split(","); if(list.size() < 2) return QFont(var.toString(), 12); // qWarning() << var.toString() << QFont(list[0],list[1].toInt()); QFont font(list[0]); font.setPixelSize( list[1].toInt()); return font; //return QFont(list[0],list[1].toInt()); } /*void ContactListItemDelegate::setDefaultStyle() { //var = hash.value("Background Color"); m_style.m_colors[0]=QColor(0,0,0,0); //var = hash.value("Background Fade"); m_style.m_reals[0]=1.0; //var = hash.value("Background Image Style"); m_style.m_integers[0]=0; //var = hash.value("Contact Font"); m_style.m_fonts[0]=QFont(); //var = hash.value("Contact Text Alignment"); m_style.m_integers[1]=0; //var = hash.value("Contact Status Text Color"); m_style.m_colors[1]=QColor(0,0,0,255); //var = hash.value("Contact Left Indent"); m_style.m_integers[2]=5; //var = hash.value("Contact Right Indent"); m_style.m_integers[3]=5; //var = hash.value("Group Background"); m_style.m_colors[2]=QColor(0,0,0,0); //var = hash.value("Group Font"); m_style.m_fonts[1]=QFont(); //var = hash.value("Group Inverted Text Color"); m_style.m_colors[3]=QColor(255,255,255,255); //var = hash.value("Group Text Alignment"); m_style.m_integers[4]=0; //var = hash.value("Group Text Color"); m_style.m_colors[4]=QColor(0,0,0,255); }*/ void ContactListItemDelegate::setTreeView(QAbstractItemView *tree) { m_tree_view = tree; } qutim-0.2.0/src/corelayers/contactlist/treecontactlistmodel.cpp0000644000175000017500000006062411242600105026535 0ustar euroelessareuroelessar/***************************************************************************** Tree Contact List Model Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 "treecontactlistmodel.h" #include "src/abstractlayer.h" #include "iconmanager.h" //#include "src/abstractchatlayer.h" #include static QIcon contact_list_empty; static inline void ensure_contact_list_empty() { if( !contact_list_empty.isNull() ) return; QPixmap pixmap(16,16); pixmap.fill(Qt::transparent); contact_list_empty.addPixmap(pixmap); } TreeContactListModel::TreeContactListModel(const QStringList &headers, QObject *parent) : QAbstractItemModel(parent), m_notification_layer(0) { ensure_contact_list_empty(); QString nil_group( QChar(0) ); m_nil_group=nil_group; m_time_screen_shot = -2000; m_icon_timer = new QTimer(this); m_icon_timer->setInterval(500); connect(m_icon_timer, SIGNAL(timeout()), this, SLOT(onTimerTimeout())); m_icon_timer->start(); m_show_special_status=false; m_status_to_tr.insert("online",tr("Online")); m_status_to_tr.insert("ffc",tr("Free for chat")); m_status_to_tr.insert("away",tr("Away")); m_status_to_tr.insert("na",tr("Not available")); m_status_to_tr.insert("occupied",tr("Occupied")); m_status_to_tr.insert("dnd",tr("Do not disturb")); m_status_to_tr.insert("invisible",tr("Invisible")); m_status_to_tr.insert("offline",tr("Offline")); m_status_to_tr.insert("athome",tr("At home")); m_status_to_tr.insert("atwork",tr("At work")); m_status_to_tr.insert("lunch",tr("Having lunch")); m_status_to_tr.insert("evil",tr("Evil")); m_status_to_tr.insert("depression",tr("Depression")); m_status_to_tr.insert("noauth",tr("Without authorization")); } void TreeContactListModel::loadSettings(const QString & profile_name) { m_notification_layer = AbstractLayer::Notification(); m_profile_name = profile_name; } void TreeContactListModel::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); QList protocols = m_item_list.keys(); foreach(QString protocol, protocols) { QHash *v_protocol = m_item_list.value(protocol); QList accounts = v_protocol->keys(); foreach(QString account, accounts) { settings.beginGroup(protocol+"."+account); TreeItem *v_account = v_protocol->value(account); settings.setValue("expanded",v_account->isExpanded()); settings.setValue("grouporder",v_account->getChildOrder()); for(int i=0;ichildCount();i++) { TreeItem *v_group = v_account->child(i); QString group = v_group->getName(); if(group.isEmpty()) settings.beginGroup(m_nil_group); else settings.beginGroup(group); settings.setValue("expanded",v_group->isExpanded()); settings.endGroup(); } settings.endGroup(); } } settings.endGroup(); } TreeContactListModel::~TreeContactListModel() { } int TreeContactListModel::columnCount(const QModelIndex &parent) const { return 1; } QVariant TreeContactListModel::data(const QModelIndex &index, int role) const { if(index.column()!=0) return QVariant(); if (!index.isValid()) return QVariant(); TreeItem *item = getItem(index); return item->data(role); } Qt::ItemFlags TreeContactListModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::ItemIsEnabled; if(index.data(Qt::UserRole).toInt()<2) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } TreeItem *TreeContactListModel::getItem(const QModelIndex &index) const { if (index.isValid()){ TreeItem *item = static_cast(index.internalPointer()); if (item) return item; } return const_cast(&m_root_item); } QVariant TreeContactListModel::headerData(int section, Qt::Orientation orientation, int role) const { if(section!=0) return QVariant(); if (orientation == Qt::Horizontal && role == Qt::DisplayRole && section==0) return m_root_item.data(role); return QVariant(); } QModelIndex TreeContactListModel::index(int row, int column, const QModelIndex &parent) const { if (parent.isValid() && parent.column() != 0) return QModelIndex(); TreeItem *parentItem = getItem(parent); TreeItem *childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); } bool TreeContactListModel::insertColumns(int position, int columns, const QModelIndex &parent) { return false; } bool TreeContactListModel::insertRows(int position, int rows, const QModelIndex &parent) { TreeItem *parentItem = getItem(parent); bool success; beginInsertRows(parent, position, position + rows - 1); success = parentItem->insertChildren(position, rows);//m_root_item.columnCount()); endInsertRows(); return success; } QModelIndex TreeContactListModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); TreeItem *childItem = getItem(index); TreeItem *parentItem = childItem->parent(); if (parentItem == &m_root_item) return QModelIndex(); return createIndex(parentItem->childNumber(), 0, parentItem); } bool TreeContactListModel::removeColumns(int position, int columns, const QModelIndex &parent) { return false; } bool TreeContactListModel::removeRows(int position, int rows, const QModelIndex &parent) { TreeItem *parent_item = getItem(parent); if(position<0 || position+rows>parent_item->childCount()) return false; bool success = true; beginRemoveRows(parent, position, position + rows - 1); success = parent_item->removeChildren(position, rows); endRemoveRows(); return success; } int TreeContactListModel::rowCount(const QModelIndex &parent) const { TreeItem *parentItem = getItem(parent); return parentItem->childCount(); } bool TreeContactListModel::setData(const QModelIndex &index, const QVariant &value, int role) { if(index.column()!=0) return false; /*if (role != Qt::EditRole) return false;*/ TreeItem *item = getItem(index); return item->setData(value, role); } bool TreeContactListModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role) { if(section!=0) return false; if (role != Qt::EditRole || orientation != Qt::Horizontal) return false; return m_root_item.setData(value, role); } TreeItem *TreeContactListModel::findItem(const TreeModelItem & Item) { if(Item.m_item_type!=0 && Item.m_item_type!=1 && Item.m_item_type!=2) return 0; QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) return 0; TreeItem *parent = protocol->value(Item.m_account_name); if(!parent) return 0; if(Item.m_item_type==2) return parent; else if(Item.m_item_type==0) parent = parent->find(Item.m_parent_name); if(!parent) return 0; TreeItem *item = parent->find(Item.m_item_name); if(!item) return 0; return item; } TreeItem *TreeContactListModel::findItemNoParent(const TreeModelItem & Item) { if(Item.m_item_type!=0 && Item.m_item_type!=2) return 0; QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) return 0; TreeItem *parent = protocol->value(Item.m_account_name); if(!parent) return 0; if(Item.m_item_type==2) return parent; else if(Item.m_item_type==0) { int num = parent->childCount(); for(int i=0;ichild(i); if(group) { TreeItem *item = group->find(Item.m_item_name); if(item) return item; } } return 0; } return 0; } QModelIndex TreeContactListModel::findIndex(const TreeModelItem & Item) { return createIndex(0,0,findItem(Item)); } QList TreeContactListModel::getItemChildren(const TreeModelItem &item) { TreeItem *tree_item = 0; QList result; if(item.m_item_type < 32) { tree_item = findItem(item); if(tree_item) { foreach(TreeItem *item, tree_item->getChildren()) { result += item->getStructure(); } } } else { typedef const QHash *Account; foreach(const Account &accounts, m_item_list) { foreach(TreeItem *item, *accounts) { result += item->getStructure(); } } } return result; } bool TreeContactListModel::addAccount(const TreeModelItem & Item, const QString &name) { //qWarning() << 0 << Item.m_account_name; QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) { protocol = new QHash(); m_item_list.insert(Item.m_protocol_name, protocol); } if(protocol->contains(Item.m_account_name)) return false; insertRows(m_root_item.childCount(),1,QModelIndex()); TreeItem *item = m_root_item.child(m_root_item.childCount()-1); item->setStructure(Item); item->setData(name,Qt::DisplayRole); item->setData(QVariant(Item.m_item_type),Qt::UserRole); item->setData(0, Qt::UserRole+1); protocol->insert(Item.m_account_name, item); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); settings.beginGroup(Item.m_protocol_name+"."+Item.m_account_name); item->setExpanded(settings.value("expanded",true).toBool()); item->setChildOrder(settings.value("grouporder",QStringList()).toStringList()); settings.endGroup(); settings.endGroup(); emit itemInserted(createIndex(0,0,findItem(Item))); TreeModelItem double_item = Item; double_item.m_item_name=""; double_item.m_item_type=1; addGroup(double_item, ""); return true; } bool TreeContactListModel::addGroup(const TreeModelItem & Item, const QString &name) { //qWarning() << Item.m_item_type << Item.m_protocol_name << Item.m_account_name << Item.m_parent_name << Item.m_item_name; QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) return false; TreeItem *parent = protocol->value(Item.m_account_name); if(!parent) return false; if(parent->hasHash(Item.m_item_name)) return false; insertRows(parent->childCount(),1,createIndex(0,0,parent)); TreeItem *item = parent->child(parent->childCount()-1); item->setData(name,Qt::DisplayRole); item->setData(QVariant(Item.m_item_type),Qt::UserRole); item->setStructure(Item); int mass=0; if(Item.m_item_name=="") mass=1; item->setData(0, Qt::UserRole+1); parent->setHash(Item.m_item_name, item); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); settings.beginGroup(Item.m_protocol_name+"."+Item.m_account_name); settings.beginGroup(Item.m_item_name.isEmpty()?m_nil_group:Item.m_item_name); item->setExpanded(settings.value("expanded",true).toBool()); settings.endGroup(); settings.endGroup(); settings.endGroup(); emit itemInserted(createIndex(0,0,findItem(Item))); return true; } bool TreeContactListModel::addBuddy(const TreeModelItem & Item, const QString &name) { //qWarning() << 0 << Item.m_account_name << Item.m_parent_name << Item.m_item_name; QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) return false; TreeItem *account = protocol->value(Item.m_account_name); if(!account) return false; TreeItem *parent = account->find(Item.m_parent_name); if(!parent) return false; if(parent->hasHash(Item.m_item_name)) return false; insertRows(parent->childCount(),1,createIndex(0,0,parent)); TreeItem *item = parent->child(parent->childCount()-1); item->setData(name,Qt::DisplayRole); item->setData(QVariant(Item.m_item_type),Qt::UserRole); item->setData(1000, Qt::UserRole+1); item->setStructure(Item); parent->setHash(Item.m_item_name, item); // emit itemInserted(createIndex(0,0,findItem(Item))); return true; } void TreeContactListModel::reinsertAllItems(TreeItem *item) { if(item==0) item = &m_root_item; for(int i=0;ichildCount();i++) { emit itemInserted(createIndex(0,0,item->child(i))); reinsertAllItems(item->child(i)); } } void TreeContactListModel::setItemHasUnviewedContent(const TreeModelItem & Item, bool has_content) { TreeItem *item = findItemNoParent(Item); if(item) { bool should_check = has_content?!item->hasAttributes():item->getAttributes()==ItemHasUnreaded; if(has_content && !(item->getItemVisibility() & ShowMessage)) return; item->setAttribute(ItemHasUnreaded, has_content); if(should_check) emit checkItem(createIndex(0,0,item)); m_mutex.lock(); if(has_content) m_has_unviewed_content.insert(item,true); else { item->setData(item->getImage(0),Qt::UserRole+4); QModelIndex index = createIndex(0,0,item); emit dataChanged(index,index); m_has_unviewed_content.insert(item,false); } m_mutex.unlock(); } } bool TreeContactListModel::getItemHasUnviewedContent(const TreeModelItem & Item) { TreeItem *item = findItemNoParent(Item); if(item) return m_has_unviewed_content.value(item,false); return false; } void TreeContactListModel::setItemIsTyping(const TreeModelItem & Item, bool has_content) { TreeItem *item = findItem(Item); if(item) { bool should_check = has_content?!item->hasAttributes():item->getAttributes()==ItemIsTyping; if(has_content && !(item->getItemVisibility() & ShowTyping)) return; item->setAttribute(ItemIsTyping, has_content); if(should_check) emit checkItem(createIndex(0,0,item)); m_mutex.lock(); if(has_content) m_is_typing.insert(item,true); else { item->setData(item->getImage(0),Qt::UserRole+4); QModelIndex index = createIndex(0,0,item); emit dataChanged(index,index); m_is_typing.insert(item,false); } m_mutex.unlock(); } } bool TreeContactListModel::getItemIsTyping(const TreeModelItem & Item) { TreeItem *item = findItem(Item); if(item) return m_is_typing.value(item,false); return false; } int TreeContactListModel::getItemNotifications(const TreeModelItem &item) { TreeItem *t_item = findItem(item); if(t_item) return t_item->getItemNotifications(); return ShowAllNotifications; } void TreeContactListModel::signalToDoScreenShot(int time) { m_time_screen_shot=time; } void TreeContactListModel::onTimerTimeout() { m_mutex.lock(); QList keys = m_has_unviewed_content.keys(); foreach(TreeItem *key, keys) { if(!key) m_has_unviewed_content.remove(key); else { bool special = m_has_unviewed_content.value(key,false); static Icon icon("message"); if(m_show_special_status && special) key->setData(icon,Qt::UserRole+4); else key->setData(contact_list_empty,Qt::UserRole+4); QModelIndex index = createIndex(0,0,key); if(!special) { key->setData(key->getImage(0),Qt::UserRole+4); m_has_unviewed_content.remove(key); bool should_check = key->getAttributes()==ItemHasUnreaded; key->setAttribute(ItemHasUnreaded, false); if(should_check) emit checkItem(index); } emit dataChanged(index,index); } } m_mutex.unlock(); m_mutex.lock(); keys = m_is_typing.keys(); foreach(TreeItem *key, keys) { if(!key) m_is_typing.remove(key); else if(!m_has_unviewed_content.value(key,false)) { bool special = m_is_typing.value(key,false); static Icon icon("typing"); if(m_show_special_status && special) key->setData(icon,Qt::UserRole+4); else key->setData(contact_list_empty,Qt::UserRole+4); QModelIndex index = createIndex(0,0,key); if(!special) { key->setData(key->getImage(0),Qt::UserRole+4); m_is_typing.remove(key); bool should_check = key->getAttributes()==ItemIsTyping; key->setAttribute(ItemIsTyping, false); if(should_check) emit checkItem(index); } emit dataChanged(index,index); } } m_mutex.unlock(); m_mutex.lock(); keys = m_changed_status.keys(); foreach(TreeItem *key, keys) { if(!key) m_changed_status.remove(key); else { int special = m_changed_status.value(key,-1); if(!m_has_unviewed_content.value(key,false) && !m_is_typing.value(key,false)) { QIcon icon = key->getImage(0); if(m_show_special_status && special>0) { icon = QIcon(icon.pixmap(QSize(16,16),QIcon::Disabled)); key->setData(icon,Qt::UserRole+4); } else key->setData(icon,Qt::UserRole+4); QModelIndex index = createIndex(0,0,key); emit dataChanged(index,index); } if(special<=0) { m_changed_status.remove(key); bool should_check = key->getAttributes()==ItemHasChangedStatus; key->setAttribute(ItemHasChangedStatus, false); if(should_check) emit checkItem(createIndex(0,0,key)); } else m_changed_status.insert(key,special-m_icon_timer->interval()); } } m_mutex.unlock(); m_mutex.lock(); keys = m_block_status.keys(); foreach(TreeItem *key, keys) { if(!key) m_block_status.remove(key); else { int special = m_block_status.value(key,-1); if(special<=0) m_block_status.remove(key); else m_block_status.insert(key,special-m_icon_timer->interval()); } } m_mutex.unlock(); m_show_special_status=!m_show_special_status; // if(m_time_screen_shot>-1500) // { // m_mutex.lock(); // if(m_time_screen_shot>0) // { // m_time_screen_shot-=m_icon_timer->interval(); // m_mutex.unlock(); // } // else // { // m_time_screen_shot=-2000; // m_mutex.unlock(); // AbstractContactList::instance().startDoScreenShot(); // } // } } bool TreeContactListModel::removeAccount(const TreeModelItem & Item) { QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) return false; TreeItem *account = protocol->value(Item.m_account_name); if(!account) return false; int row = m_root_item.indexOf(account); if(row<0) return false; removeChildren(account); emit itemRemoved(createIndex(0,0,account)); removeRows(row,1,QModelIndex()); protocol->remove(Item.m_account_name); return true; } bool TreeContactListModel::removeGroup(const TreeModelItem & Item) { QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) return false; TreeItem *account = protocol->value(Item.m_account_name); if(!account) return false; TreeItem *group = account->find(Item.m_item_name); if(!group) return false; int row = account->indexOf(group); if(row<0) return false; removeChildren(group); emit itemRemoved(createIndex(0,0,group)); removeRows(row,1,createIndex(0,0,account)); account->removeHash(Item.m_item_name); return true; } bool TreeContactListModel::removeBuddy(const TreeModelItem & Item) { QHash *protocol = m_item_list.value(Item.m_protocol_name); if(!protocol) return false; TreeItem *account = protocol->value(Item.m_account_name); if(!account) return false; TreeItem *group = account->find(Item.m_parent_name); if(!group) return false; TreeItem *contact = group->find(Item.m_item_name); m_has_unviewed_content.remove(contact); m_is_typing.remove(contact); m_changed_status.remove(contact); int row = group->indexOf(contact); if(row<0) return false; emit itemRemoved(createIndex(0,0,contact)); removeRows(row,1,createIndex(0,0,group)); group->removeHash(Item.m_item_name); return true; } void TreeContactListModel::removeChildren(TreeItem *item) { QList &children = item->getChildren(); foreach(TreeItem *child, children) { removeChildren(child); emit itemRemoved(createIndex(0,0,child)); } } bool TreeContactListModel::moveBuddy(const TreeModelItem & oldItem, const TreeModelItem & newItem) { TreeItem *old_item = findItem(oldItem); QString status = old_item->data(Qt::UserRole+3).toString(); return true; } bool TreeContactListModel::setItemName(const TreeModelItem & Item, const QString &name) { if(name.isEmpty()) return false; TreeItem *item = findItem(Item); if(item==0) return false; item->setData(name,Qt::DisplayRole); emit itemNameChanged(createIndex(0,0,findItem(Item)), name); QModelIndex index = createIndex(0,0,item); emit dataChanged(index,index); return true; } bool TreeContactListModel::setItemIcon(const TreeModelItem & Item, const QIcon &icon, int position) { TreeItem *item = findItem(Item); if(item==0 || (position==0 && Item.m_item_type==0)) return false; item->setImage(icon,position); QModelIndex index = createIndex(0,0,item); emit dataChanged(index,index); return true; } bool TreeContactListModel::setItemRow(const TreeModelItem & Item, const QList &var, int row) { TreeItem *item = findItem(Item); if(item==0) return false; item->setRow(QVariant(var), row); QModelIndex index = createIndex(0,0,item); emit dataChanged(index,index); return true; } bool TreeContactListModel::setItemStatus(const TreeModelItem & Item, const QIcon &icon, const QString &status, int mass) { TreeItem *item = findItem(Item); if(item==0 || Item.m_item_type!=0) return false; bool new_item = item->data(Qt::UserRole+3).toString().isEmpty(); int old_mass = item->data(Qt::UserRole+1).toInt(); item->setStatus(status, icon, mass); QModelIndex index = createIndex(0,0,item); if(Item.m_item_type==0) { if(old_mass==1000 && mass<1000) item->parent()->m_visible++; else if(old_mass<1000 && mass==1000) item->parent()->m_visible--; } if(/*!new_item &&*/ Item.m_item_type==0) { if(m_block_status.value(item->parent()->parent(),0) < 1) { ChatLayerInterface *cli = AbstractLayer::Chat(); if( !new_item ) { QString tr_status = m_status_to_tr.value(status,status); if(old_mass==1000 && mass<1000) { if( item->getItemNotifications() & ShowSignOn ) m_notification_layer->userMessage(Item,tr_status, NotifyOnline); cli->newServiceMessageArriveTo(Item,tr_status); } else if(old_mass<1000 && mass==1000) { if( item->getItemNotifications() & ShowSignOff ) m_notification_layer->userMessage(Item,tr_status, NotifyOffline); cli->newServiceMessageArriveTo(Item,tr_status); } else if(old_mass!=mass) { if( item->getItemNotifications() & ShowChangeStatus ) m_notification_layer->userMessage(Item,tr_status, NotifyStatusChange); } if(item->getItemVisibility() & ShowStatus) { m_mutex.lock(); m_changed_status.insert(item,5000); bool should_check = !item->hasAttributes(); item->setAttribute(ItemHasChangedStatus, true); if(should_check) emit checkItem(index); m_mutex.unlock(); } } cli->contactChangeHisStatus(Item, icon); } } //qWarning() << item->parent()->m_visible; emit itemStatusChanged(createIndex(0,0,findItem(Item)), icon, status, mass); emit dataChanged(index,index); return true; } void TreeContactListModel::setItemIsOnline(const TreeModelItem & Item, bool online) { TreeItem *item = findItem(Item); if(item==0 || Item.m_item_type!=2) return; if(item->getOnline()!=online) { m_mutex.lock(); m_block_status.insert(item,5000); m_mutex.unlock(); item->setOnline(online); } } void TreeContactListModel::setItemVisibility(const TreeModelItem &item, int flags) { if(item.m_item_type > 0) return; TreeItem *tree_item = findItem(item); if(!tree_item) return; if(tree_item->getItemVisibility() == flags) return; tree_item->setItemVisibility(flags); } void TreeContactListModel::setItemNotifications(const TreeModelItem &item, int flags) { if(item.m_item_type > 0) return; TreeItem *tree_item = findItem(item); if(!tree_item) return; if(tree_item->getItemNotifications() == flags) return; tree_item->setItemNotifications(flags); } void TreeContactListModel::setItemVisible(const TreeModelItem &Item, bool visible) { TreeItem *item = findItem(Item); if(item==0 || Item.m_item_type==2) return; item->setAlwaysVisible(visible); QModelIndex index = createIndex(0,0,item); // emit itemRemoved(index,index); // emit itemInserted(index,index); } void TreeContactListModel::setItemInvisible(const TreeModelItem &Item, bool invisible) { TreeItem *item = findItem(Item); if(item==0 || Item.m_item_type==2) return; item->setAlwaysInvisible(invisible); QModelIndex index = createIndex(0,0,item); // emit itemRemoved(index,index); // emit itemInserted(index,index); } qutim-0.2.0/src/corelayers/contactlist/contactlistsettings.h0000644000175000017500000000343511236355476026104 0ustar euroelessareuroelessar/* ContactListSettings Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 CONTACTLISTSETTINGS_H_ #define CONTACTLISTSETTINGS_H_ #include #include #include #include #include #include "ui_contactlistsettings.h" class ContactListSettings : public QWidget { Q_OBJECT public: ContactListSettings(const QString &profile_name, QWidget *parent = 0); virtual ~ContactListSettings(); void loadSettings(); void saveSettings(); public slots: void on_accountColorButton_clicked(); void on_groupColorButton_clicked(); void on_onlineColorButton_clicked(); void on_offlineColorButton_clicked(); void on_separatorColorButton_clicked(); void onOpacitySliderValueChanged(int value); signals: void settingsChanged(); void settingsSaved(); private: QString m_profile_name; QColor m_account_col; QColor m_group_col; QColor m_online_col; QColor m_offline_col; QColor m_separator_col; bool m_gui_changed; Ui::ContactListSettingsClass ui; private slots: void widgetSettingsChanged(); void widgetGuiSettingsChanged(); }; #endif /*CONTACTLISTSETTINGS_H_*/ qutim-0.2.0/src/corelayers/contactlist/contactlistproxymodel.h0000644000175000017500000001233111236355476026441 0ustar euroelessareuroelessar/***************************************************************************** Contact List Proxy Model Copyright (c) 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 CONTACTLISTPROXYMODEL_H_ #define CONTACTLISTPROXYMODEL_H_ #include #include #include #include #include #include "treecontactlistmodel.h" #include "proxymodelitem.h" using namespace qutim_sdk_0_2; class ContactListProxyModel : public QAbstractProxyModel { Q_OBJECT public: ContactListProxyModel( QObject * parent = 0 ); virtual ~ContactListProxyModel(); QModelIndex mapToSource(const QModelIndex &proxyIndex) const; QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; QVariant data(const QModelIndex &index, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; Qt::ItemFlags flags(const QModelIndex &index) const; Qt::DropActions supportedDropActions() const; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); QStringList mimeTypes() const; QMimeData *mimeData(const QModelIndexList &indexes) const; bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); void setModel(TreeContactListModel *model); void setTreeView(QTreeView *tree_view); int findPosition(const QModelIndex &parent, const QString &name, int mass=-100); void removeAllItems(); void setShowOffline(bool show); void setShowEmptyGroup(bool show); void setSortStatus(bool sort); void setShowSeparator(bool show); void setModelType(int type); bool getShowOffline(); bool getShowEmptyGroup(); bool getSortStatus(); bool getShowSeparator(); int getModelType(); void setSettings(int type, bool show_offline, bool show_empty, bool sort_status, bool show_separator, const QVariant & account_font, const QVariant & group_font, const QVariant & online_font, const QVariant & offline_font, const QVariant & separator_font, const QVariant & account_color, const QVariant & group_color, const QVariant & online_color, const QVariant & offline_color, const QVariant & separator_color); void loadProfile(const QString & profile_name); void saveSettings(); void setExpanded(const QModelIndex & index, bool expanded); private: int getChildPosition(const QString &child); void moveChild(const QString &child, int position); void setChildOrder(const QStringList &order); QStringList getChildOrder(); void setExpanded(const QString & child, bool expanded); bool isExpanded(const QString & child); QString m_profile_name; QStringList m_is_expanded; QStringList m_child_order; ProxyModelItem *getItem(const QModelIndex &index) const; ProxyModelItem *m_root_item; TreeContactListModel *m_tree_model; QHash m_source_list; QTreeView *m_tree_view; int m_model_type; bool m_show_offline; bool m_show_empty_group; bool m_sort_status; bool m_show_separator; QVariant m_account_font; QVariant m_group_font; QVariant m_online_font; QVariant m_offline_font; QVariant m_separator_font; QVariant m_account_color; QVariant m_group_color; QVariant m_online_color; QVariant m_offline_color; QVariant m_separator_color; QModelIndex createIndex_(ProxyModelItem *item); ProxyModelItem* m_position_buddy; QAbstractItemModel *m_empty_model; QLinkedList m_list_for_expand; bool m_append_to_expand_list; private slots: void collapsed( const QModelIndex &index ); void expanded( const QModelIndex &index ); public slots: void insertItem(const QModelIndex &source); void removeItem(const QModelIndex &source); void setName(const QModelIndex &source, const QString &value); void setStatus(const QModelIndex &source, const QIcon &icon, const QString &text, int mass); void newData(const QModelIndex &left, const QModelIndex &right); void checkItem(const QModelIndex &source); }; #endif /*CONTACTLISTPROXYMODEL_H_*/ qutim-0.2.0/src/corelayers/contactlist/defaultcontactlist.cpp0000644000175000017500000007556311255727367026241 0ustar euroelessareuroelessar/***************************************************************************** DefaultContactList Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 #include #include #include #include #include #include "defaultcontactlist.h" #include "solutions/qtcustomwidget.h" #include "ui_defaultcontactlist.h" //#include "src/abstractchatlayer.h" #include "src/abstractcontextlayer.h" #include "contactlistsettings.h" #include "3rdparty/qtwin/qtwin.h" DefaultContactListView::DefaultContactListView(QWidget *parent) { setHeaderHidden(true); setIndentation(0); setExpandsOnDoubleClick(true); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setDragEnabled(true); setAcceptDrops(true); setDropIndicatorShown(true); } void DefaultContactListView::drawRow(QPainter *painter, const QStyleOptionViewItem &options, const QModelIndex &index) const { QStyleOptionViewItem mod_options = options; mod_options.showDecorationSelected = false; QTreeView::drawRow(painter, mod_options, index); } void DefaultContactListView::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const { } DefaultContactList::DefaultContactList(QWidget *parent) : QWidget(parent), m_ui(new Ui::DefaultContactList), m_icon_manager(IconManager::instance()) { m_groupexpandoneclick = false; setWindowFlags( 0 ); m_default_flags = windowFlags(); m_ui->setupUi(this); m_contactListView = new DefaultContactListView(this); m_ui->verticalLayout->insertWidget(1, m_contactListView); QStringList headers; headers<<"1"; m_item_model = new TreeContactListModel (headers); m_proxy_model = new ContactListProxyModel(); QObject::connect(m_item_model, SIGNAL(itemInserted(QModelIndex)), m_proxy_model, SLOT(insertItem(QModelIndex))); QObject::connect(m_item_model, SIGNAL(itemRemoved(QModelIndex)), m_proxy_model, SLOT(removeItem(QModelIndex))); QObject::connect(m_item_model, SIGNAL(checkItem(QModelIndex)), m_proxy_model, SLOT(checkItem(QModelIndex))); QObject::connect(m_item_model, SIGNAL(itemNameChanged(QModelIndex,QString)), m_proxy_model, SLOT(setName(QModelIndex,QString))); QObject::connect(m_item_model, SIGNAL(itemStatusChanged(QModelIndex,QIcon,QString,int)), m_proxy_model, SLOT(setStatus(QModelIndex,QIcon,QString,int))); m_contactListView->setModel(m_proxy_model); m_proxy_model->setModel(m_item_model); m_proxy_model->setTreeView(m_contactListView); m_item_delegate = new ContactListItemDelegate(); m_contactListView->setItemDelegate(m_item_delegate); m_item_delegate->setTreeView(m_contactListView); QObject::connect(m_item_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), m_proxy_model, SLOT(newData(QModelIndex,QModelIndex))); m_contactListView->installEventFilter(this); m_contactListView->findChild("qt_scrollarea_viewport")->installEventFilter(this); setVisible(false); setAttribute(Qt::WA_AlwaysShowToolTips, true); m_autohide = false; m_autohide_timer.setSingleShot( true ); connect( &m_autohide_timer, SIGNAL(timeout()), SLOT(hide()) ); m_custom = new QtCustomWidget(this); setWindowRole("contactlist"); #if defined(Q_OS_MAC) menuBar = new QMenuBar(0); m_ui->toolbuttonWidget->setVisible(false); #endif } DefaultContactList::~DefaultContactList() { delete m_ui; } void DefaultContactList::addItem(const TreeModelItem &item, const QString &name) { m_contactListView->setUpdatesEnabled(false); QModelIndex parent_index = m_proxy_model->mapFromSource(m_item_model->findIndex(item)).parent(); bool result = false; switch(item.m_item_type) { case 0: // buddy item result = m_item_model->addBuddy(item, name.isEmpty()?item.m_item_name:name); break; case 1: // group item result = m_item_model->addGroup(item, name.isEmpty()?item.m_item_name:name); break; case 2: // account item result = m_item_model->addAccount(item, name.isEmpty()?item.m_account_name:name); break; } if(parent_index.isValid() && result) if(m_contactListView->isExpanded(parent_index)) { m_contactListView->setExpanded(parent_index,false); m_contactListView->setExpanded(parent_index,true); } m_contactListView->setUpdatesEnabled(true); } void DefaultContactList::removeItem(const TreeModelItem &item) { bool result=false; QModelIndex parent_index = m_proxy_model->mapFromSource(m_item_model->findIndex(item)).parent(); m_contactListView->setUpdatesEnabled(false); switch(item.m_item_type) { case 0: // buddy item result = m_item_model->removeBuddy(item); break; case 1: // group item result = m_item_model->removeGroup(item); break; case 2: // account item result = m_item_model->removeAccount(item); break; } if(parent_index.isValid() && result) if(m_contactListView->isExpanded(parent_index)) { m_contactListView->setExpanded(parent_index,false); m_contactListView->setExpanded(parent_index,true); } m_contactListView->setUpdatesEnabled(true); } void DefaultContactList::moveItem(const TreeModelItem & old_item, const TreeModelItem & new_item) { if(old_item.m_item_type!=0) return; TreeItem *tree_item = m_item_model->findItem(old_item); if(!tree_item) return; QVariant display = tree_item->data(Qt::DisplayRole); QList decoration = *reinterpret_cast *>(tree_item->data(Qt::DecorationRole).value()); int mass = tree_item->data(Qt::UserRole+1).toInt(); QList rows = *reinterpret_cast *>(tree_item->data(Qt::UserRole+2).value()); QString status = tree_item->data(Qt::UserRole+3).toString(); bool always_visible = tree_item->getAlwaysVisible(); bool always_invisible = tree_item->getAlwaysInvisible(); if(m_item_model->removeBuddy(old_item)) { if(m_item_model->addBuddy(new_item,display.toString())) { m_contactListView->setUpdatesEnabled(false); tree_item = m_item_model->findItem(new_item); tree_item->setData(decoration,Qt::DecorationRole); // for (int i = 0; i < rows.size(); i++) setItemText(new_item,rows[0].toList().toVector()); // setItemVisible(new_item,always_visible); // setItemInvisible(new_item,always_invisible); setItemStatus(new_item,qvariant_cast(decoration[0]),status,mass); } } } void DefaultContactList::setItemName(const TreeModelItem &item, const QString & name) { m_contactListView->setUpdatesEnabled(false); m_item_model->setItemName(item, name); m_contactListView->setUpdatesEnabled(true); } void DefaultContactList::setItemIcon(const TreeModelItem &item, const QIcon &icon, int position) { m_item_model->setItemIcon(item, icon, position); if(position==12) m_chat_layer->contactChangeHisClient(item); } void DefaultContactList::setItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &id, int mass) { if(item.m_item_type == 0) { m_chat_layer->contactChangeHisStatus(item,icon); m_contactListView->setUpdatesEnabled(false); m_item_model->setItemStatus(item, icon, id, mass); m_contactListView->setUpdatesEnabled(true); } else if(item.m_item_type == 2) { m_item_model->setItemIsOnline(item, mass < 1000); } } void DefaultContactList::setItemText(const TreeModelItem &item, const QVector &text) { m_contactListView->setUpdatesEnabled(false); m_item_model->setItemRow(item, text.toList(), 0); m_contactListView->setUpdatesEnabled(true); } void DefaultContactList::setItemVisibility(const TreeModelItem &item, int flags) { m_item_model->setItemVisibility(item, flags); } void DefaultContactList::setItemNotifications(const TreeModelItem &item, int flags) { m_item_model->setItemNotifications(item, flags); } int DefaultContactList::getItemNotifications(const TreeModelItem &item) { return m_item_model->getItemNotifications(item); } void DefaultContactList::setItemAttribute(const TreeModelItem &item, ItemAttribute type, bool on) { Event e(-1, 2, &item, &on); switch(type) { case ItemHasUnreaded: e.id = m_event_unviewed; m_item_model->setItemHasUnviewedContent(item, on); break; case ItemIsTyping: e.id = m_event_typng; m_item_model->setItemIsTyping(item, on); break; default: return; } PluginSystem::instance().sendEvent(e); } QList DefaultContactList::getItemChildren(const TreeModelItem &item) { if(m_item_model) return m_item_model->getItemChildren(item); else return QList(); } const ItemData *DefaultContactList::getItemData(const TreeModelItem &item) { Q_UNUSED(item); TreeItem *tree_item = m_item_model->findItem(item); if(tree_item) { tree_item->getData(m_current_item_data); m_current_item_data.attributes = (m_item_model->getItemHasUnviewedContent(tree_item)?ItemHasUnreaded:0) | (m_item_model->getItemIsTyping(tree_item)?ItemIsTyping:0); return &m_current_item_data; } return 0; } QHBoxLayout *DefaultContactList::getAccountButtonsLayout() { return m_ui->horizontalLayout; } void DefaultContactList::setMainMenu(QMenu *menu) { m_ui->menuButton->setMenu(menu); #if defined(Q_OS_MAC) menu->setTitle(tr("&File")); menuBar->insertMenu(menuBar->actions().at(0), menu); #endif } bool DefaultContactList::init(PluginSystemInterface *plugin_system) { m_event_about = PluginSystem::instance().registerEventHandler("Core/OpenWidget/About"); m_show_hide_cl = PluginSystem::instance().registerEventHandler("Core/ContactList/ShowHide", this); m_event_typng = PluginSystem::instance().registerEventHandler("Core/ContactList/ItemIsTyping"); m_event_unviewed = PluginSystem::instance().registerEventHandler("Core/ContactList/ItemHasUnreaded"); m_event_set_sound_enable = plugin_system->registerEventHandler("Core/Notification/SetSoundIsEnabled"); m_event_sound_enabled = plugin_system->registerEventHandler("Core/Notification/SoundIsEnabled", this); m_ps = plugin_system; return true; } void DefaultContactList::setProfileName(const QString &profile_name) { m_profile_name = profile_name; setWindowIcon(m_icon_manager.getIcon("qutim")); setWindowTitle("qutIM"); m_ui->menuButton->setIcon(m_icon_manager.getIcon("menu")); m_ui->showHideGroupsButton->setIcon(m_icon_manager.getIcon("folder")); m_ui->soundOnOffButton->setIcon(m_icon_manager.getIcon("player_volume")); m_ui->showHideButton->setIcon(m_icon_manager.getIcon("shhideoffline")); m_ui->infoButton->setIcon(m_icon_manager.getIcon("info")); m_item_model->loadSettings(m_profile_name); m_proxy_model->loadProfile(m_profile_name); // AbstractThemeEngine::instance().loadProfile(profile_name); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); QDesktopWidget &desktop = *QApplication::desktop(); int main_window_screen = settings.value("mainwindow/screenNum", desktop.primaryScreen()).toInt(); // Check wheather target screen is connected if (main_window_screen > desktop.numScreens()) { main_window_screen = desktop.primaryScreen(); settings.setValue("mainwindow/screenNum", QVariant(main_window_screen)); } int screenX = desktop.availableGeometry(main_window_screen).x(); int screenY = desktop.availableGeometry(main_window_screen).y(); int screenHeight = desktop.availableGeometry(main_window_screen).height(); this->move(screenX, screenY); QPoint offs = mapFromGlobal(pos()); QPoint moveTo(desktop.availableGeometry(main_window_screen).right() - 150, screenY); this->resize(150, screenHeight); if (settings.value("general/savesizpos", true).toBool()) { QSize sze = settings.value("mainwindow/size", QSize(0,0)).toSize(); moveTo = settings.value("mainwindow/position", moveTo).toPoint(); if (sze.width() >= sizeHint().width() || sze.height() >= sizeHint().height()) this->resize(sze); } // if (frameGeometry().height() > desktop.availableGeometry(main_window_screen).bottom()) // { // resize(width(), desktop.availableGeometry(main_window_screen).bottom() + height() - frameGeometry().height() + 1); // } // Rellocating contact list' window // #if defined(Q_OS_WIN32) // this->move(moveTo + QPoint(-8,-52)); // #else // this->move(moveTo); // #endif // createMenuAccounts = settings.value("general/accountmenu", true).toBool(); // // Qt::WindowFlags flags = 0; // // if ( settings.value("general/ontop", false).toBool()) // flags |= Qt::WindowStaysOnTopHint; // else // flags &= ~Qt::WindowStaysOnTopHint; // // setWindowFlags(flags); // m_abstract_layer.setCurrentAccountIconName(settings.value("general/currentaccount", "").toString()); // m_auto_away = settings.value("general/autoaway", true).toBool(); // m_auto_away_minutes = settings.value("general/awaymin", 10).toUInt(); loadGuiSettings(); loadSettings(); this->move(moveTo); if( !settings.value("general/hidestart", false).toBool()) { show(); setFocus(Qt::ActiveWindowFocusReason); } #if defined(Q_OS_MAC) QMenu * menu = menuBar->addMenu(tr("Control")); menu->addAction(m_icon_manager.getIcon("shhideoffline"), tr("Show offline"), this, SLOT(on_showHideButton_clicked())); menu->addAction(m_icon_manager.getIcon("folder"), tr("Hide groups"), this, SLOT(on_showHideGroupsButton_clicked())); menu->addAction(m_icon_manager.getIcon("player_volume"), tr("Mute"), this, SLOT(on_soundOnOffButton_clicked())); menu->addAction(m_icon_manager.getIcon("info"), tr("About"), this, SLOT(on_infoButton_clicked())); quint16 num = menu->actions().count(); for(int q=0; qactions().at(q)->setCheckable(true); } menuBar->addMenu(menu); menuBar->actions().at(0)->menu()->actions().at(0)->setChecked(m_ui->showHideButton->isChecked()); //Show/Hide offline menuBar->actions().at(0)->menu()->actions().at(1)->setChecked(m_ui->showHideGroupsButton->isChecked()); //Show/Hide groups menuBar->actions().at(0)->menu()->actions().at(2)->setChecked(m_ui->soundOnOffButton->isChecked()); //Mute #endif Q_REGISTER_EVENT(event_cl_loaded, "Core/ContactList/Loaded"); Event(event_cl_loaded, 1, winId()).send(); } void DefaultContactList::setLayerInterface( LayerType type, LayerInterface *layer_interface) { switch(type) { case ChatLayer:m_chat_layer = reinterpret_cast(layer_interface); default: Q_UNUSED(type); Q_UNUSED(layer_interface); } } void DefaultContactList::saveLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { ContactListSettings *cls = dynamic_cast(settings.settings_widget); if(cls) cls->saveSettings(); } loadGuiSettings(); loadSettings(); } void DefaultContactList::saveGuiSettingsPressed() { QTimer::singleShot( 0, this, SLOT(loadGuiSettings()) ); } QList DefaultContactList::getLayerSettingsList() { m_ui->showHideButton->setEnabled(false); m_ui->showHideGroupsButton->setEnabled(false); m_ui->soundOnOffButton->setEnabled(false); SettingsStructure settings; settings.settings_item = new QTreeWidgetItem(); settings.settings_item ->setText(0, QObject::tr("Contact List")); settings.settings_item ->setIcon(0, IconManager::instance().getIcon("contactlist")); settings.settings_widget = new ContactListSettings(m_profile_name); m_settings.append(settings); return m_settings; } void DefaultContactList::removeLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { delete settings.settings_item; delete settings.settings_widget; } m_settings.clear(); m_ui->showHideButton->setEnabled(true); m_ui->showHideGroupsButton->setEnabled(true); m_ui->soundOnOffButton->setEnabled(true); } void DefaultContactList::loadGuiSettings() { m_contactListView->setStyleSheet(""); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); m_contactListView->setUpdatesEnabled(false); bool show_window = !this->isHidden(); reloadCLWindowStyle(settings); settings.beginGroup("contactlist"); double opacity = settings.value("opacity",1).toDouble(); int window_style = settings.value("windowstyle",0).toInt(); settings.endGroup(); settings.beginGroup("gui"); m_contactListView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); bool style_result = m_item_delegate->setThemeStyle(settings.value("listtheme",":/style/cl/default.ListQutim").toString()); if(settings.value("listtheme", ":/style/cl/default.ListQutim").toString().endsWith(".ListTheme") && style_result && window_style==2) { m_contactListView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } else { this->setWindowOpacity(opacity); opacity=1; if(show_window) this->show(); } settings.endGroup(); m_contactListView->setUpdatesEnabled(true); } void DefaultContactList::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); m_autohide = settings.value( "general/autohide",false ).toBool(); m_autohide_sec = settings.value( "general/hidesecs",60 ).toInt(); m_autohide_timer.setInterval( m_autohide_sec * 1000 ); if( m_autohide && isVisible() ) m_autohide_timer.start(); m_contactListView->setUpdatesEnabled(false); settings.beginGroup("contactlist"); m_groupexpandoneclick = settings.value("groupexpandoneclick", false).toBool(); double opacity = settings.value("opacity",1).toDouble(); m_contactListView->setAlternatingRowColors(settings.value("alternatingrc",false).toBool()); QList show_icons; show_icons.append(settings.value("showicon0",true).toBool()); show_icons.append(settings.value("showicon1",false).toBool()); for(int i=2;i<12;i++) show_icons.append(settings.value("showicon"+QString::number(i),true).toBool()); show_icons.append(settings.value("showicon12",false).toBool()); m_item_delegate->setSettings(show_icons, opacity); int model_type = settings.value("modeltype",0).toInt(); bool show_offline=settings.value("showoffline",false).toBool(); bool show_empty_group=settings.value("showempty",false).toBool(); bool sort_status=settings.value("sortstatus",false).toBool(); bool show_separator=settings.value("showseparator",false).toBool(); QString family=settings.value("accountfontfml",QFont().family()).toString(); int size=settings.value("accountfontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); QVariant account_font=settings.value("useaccountfont",false).toBool()?QFont(family,size):QVariant(); family=settings.value("groupfontfml",QFont().family()).toString(); size=settings.value("groupfontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); QVariant group_font=settings.value("usegroupfont",false).toBool()?QFont(family,size):QVariant(); family=settings.value("onlinefontfml",QFont().family()).toString(); size=settings.value("onlinefontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); QVariant online_font=settings.value("useonlinefont",false).toBool()?QFont(family,size):QVariant(); family=settings.value("offlinefontfml",QFont().family()).toString(); size=settings.value("offlinefontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); QVariant offline_font=settings.value("useofflinefont",false).toBool()?QFont(family,size):QVariant(); family=settings.value("separatorfontfml",QFont().family()).toString(); size=settings.value("separatorfontpnt",QFont().pointSize()).toInt(); size=qBound(6, size, 24); QVariant separator_font=settings.value("useseparatorfont",false).toBool()?QFont(family,size):QVariant(); QVariant account_color=settings.value("useaccountfont",false).toBool()?settings.value("accountcolor",QVariant()):QVariant(); QVariant group_color=settings.value("usegroupfont",false).toBool()?settings.value("groupcolor",QVariant()):QVariant(); QVariant online_color=settings.value("useonlinefont",false).toBool()?settings.value("onlinecolor",QVariant()):QVariant(); QVariant offline_color=settings.value("useofflinefont",false).toBool()?settings.value("offlinecolor",QVariant()):QVariant(); QVariant separator_color=settings.value("useseparatorfont",false).toBool()?settings.value("separatorcolor",QVariant()):QVariant(); m_proxy_model->setSettings(model_type, show_offline, show_empty_group, sort_status, show_separator, account_font, group_font, online_font, offline_font, separator_font, account_color, group_color, online_color, offline_color, separator_color); settings.endGroup(); m_contactListView->setUpdatesEnabled(true); m_ui->showHideButton->setChecked( show_offline ); m_ui->showHideGroupsButton->setChecked( model_type & 2 ); } void DefaultContactList::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); //window size and position saving //save if "save size and position" feature is enabled if ( settings.value("general/savesizpos", false).toBool()) { QDesktopWidget &desktop = *QApplication::desktop(); settings.beginGroup("mainwindow"); // Save current contact list' screen settings.setValue("screenNum", desktop.screenNumber(this)); // Save size settings.setValue("size", this->size()); // Save position on the screen settings.setValue("position", this->pos()); settings.endGroup(); } if( m_item_delegate ) delete m_item_delegate; if( m_proxy_model ) { m_proxy_model->saveSettings(); delete m_proxy_model; } if( m_item_model ) { m_item_model->saveSettings(); delete m_item_model; } m_item_model = 0; m_proxy_model = 0; m_item_delegate = 0; } bool DefaultContactList::eventFilter(QObject *obj, QEvent *event) { switch( event->type() ) { case QEvent::MouseButtonDblClick: case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: case QEvent::MouseTrackingChange: case QEvent::KeyPress: case QEvent::KeyRelease: case QEvent::KeyboardLayoutChange: case QEvent::HoverMove: case QEvent::Wheel: if( m_autohide_timer.isActive() ) m_autohide_timer.start(); default: break; } if(event->type() == QEvent::ContextMenu) { QContextMenuEvent *menu_event = static_cast(event); QTreeView *tree_view = dynamic_cast(obj->parent()); if(!tree_view) return QObject::eventFilter(obj, event); QModelIndex index = tree_view->indexAt(menu_event->pos()); if(index.isValid()) { QModelIndex source_index = static_cast(index.internalPointer())->getSourceIndex(); if(!source_index.isValid()) return QObject::eventFilter(obj, event); TreeModelItem item = static_cast(source_index.internalPointer())->getStructure(); AbstractContextLayer::instance().itemContextMenu(item, menu_event->globalPos()); } } if(m_groupexpandoneclick && event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouse_event = static_cast(event); QTreeView *tree_view = dynamic_cast(obj->parent()); if(!tree_view) return QObject::eventFilter(obj, event); QModelIndex index = tree_view->indexAt(mouse_event->pos()); if(index.isValid()) { QModelIndex source_index = static_cast(index.internalPointer())->getSourceIndex(); if(!source_index.isValid()) return QObject::eventFilter(obj, event); TreeModelItem item = static_cast(source_index.internalPointer())->getStructure(); if(item.m_item_type == 1) tree_view->setExpanded(index, !tree_view->isExpanded(index)); } } if(event->type() == QEvent::MouseButtonDblClick) { QMouseEvent *mouse_event = static_cast(event); QTreeView *tree_view = dynamic_cast(obj->parent()); if(!tree_view) return QObject::eventFilter(obj, event); QModelIndex index = tree_view->indexAt(mouse_event->pos()); if(index.isValid()) { QModelIndex source_index = static_cast(index.internalPointer())->getSourceIndex(); if(!source_index.isValid()) return QObject::eventFilter(obj, event); TreeModelItem item = static_cast(source_index.internalPointer())->getStructure(); if(item.m_item_type==0) { if ( m_chat_layer ) m_chat_layer->createChat(item); /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.createChat(item); setItemHasUnviewedContent(item, false);*/ } } event->accept(); } if(event->type() == QEvent::KeyPress) { QKeyEvent *key_event = static_cast(event); if(!key_event->isAutoRepeat()) { if(key_event->key() == Qt::Key_F2) { QModelIndexList list = m_contactListView->selectionModel()->selectedIndexes(); if( list.size() ) m_contactListView->edit( list.first() ); } else if(key_event->key() == Qt::Key_Delete) { QModelIndexList list = m_contactListView->selectionModel()->selectedIndexes(); foreach(QModelIndex index, list) { QModelIndex source_index = static_cast(index.internalPointer())->getSourceIndex(); if(!source_index.isValid()) return QObject::eventFilter(obj, event); const TreeModelItem &item = static_cast(source_index.internalPointer())->getStructure(); if(item.m_item_type==0||item.m_item_type==1) { PluginSystem::instance().deleteItemSignalFromCL(item); } } } else if(key_event->key() == Qt::Key_Enter || key_event->key() == Qt::Key_Return) { QTreeView *tree_view = dynamic_cast(obj); if(!tree_view) return QObject::eventFilter(obj, event); QModelIndexList list = tree_view->selectionModel()->selectedIndexes(); foreach(QModelIndex index, list) { QModelIndex source_index = static_cast(index.internalPointer())->getSourceIndex(); if(!source_index.isValid()) return QObject::eventFilter(obj, event); TreeModelItem item = static_cast(source_index.internalPointer())->getStructure(); if(item.m_item_type==0) { m_chat_layer->createChat(item); setItemHasUnviewedContent(item, false); } } } else return QObject::eventFilter(obj, event); return true; } } return QObject::eventFilter(obj, event); } void DefaultContactList::hideEvent( QHideEvent * ) { if( m_autohide_timer.isActive() ) m_autohide_timer.stop(); } void DefaultContactList::showEvent( QShowEvent * ) { if( m_autohide ) m_autohide_timer.start(); } void DefaultContactList::reloadCLWindowStyle(const QSettings &settings) { Qt::WindowFlags flags = m_default_flags; flags &= ~Qt::Tool; flags |= Qt::Window; if ( settings.value("general/ontop", false).toBool()) flags |= Qt::WindowStaysOnTopHint; else flags &= ~Qt::WindowStaysOnTopHint; #if defined(Q_OS_WIN32) fWindowStyle = static_cast(settings.value("contactlist/windowstyle", CLThemeBorder).toInt()); #else fWindowStyle = static_cast(settings.value("contactlist/windowstyle", CLRegularWindow).toInt()); #endif #if defined(Q_WS_MAC) if(fWindowStyle==CLThemeBorder) fWindowStyle = CLRegularWindow; #endif switch( fWindowStyle ) { case CLToolWindow: flags |= Qt::Tool; default: case CLRegularWindow: m_custom->stop(); // AbstractThemeEngine::instance().stopSkiningCl(); clearMask(); //TODO need config options // #ifdef Q_WS_X11 // this->setAttribute(Qt::WA_TranslucentBackground); // this->setAttribute(Qt::WA_NoSystemBackground, false); // QPalette pal = this->palette(); // QColor bg = pal.window().color(); // bg.setAlpha(180); // pal.setColor(QPalette::Window, bg); // this->setPalette(pal); // this->ensurePolished(); // workaround Oxygen filling the background // this->setAttribute(Qt::WA_StyledBackground, false); // #endif // aero integration if (QtWin::isCompositionEnabled()) { QtWin::extendFrameIntoClientArea(this); } setContentsMargins( 0, 0, 0, 0 ); break; case CLThemeBorder: if(flags & Qt::WindowStaysOnTopHint) flags = Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint; else flags = Qt::FramelessWindowHint; m_custom->start(settings.value("gui/borders", ":/style/border").toString()); // AbstractThemeEngine::instance().reloadContent(); // AbstractThemeEngine::instance().setCLBorder( this ); break; case CLBorderLessWindow: m_custom->stop(); // AbstractThemeEngine::instance().stopSkiningCl(); // Strange behaviour happens on Mac OS X, so we will disable this flag for a while #if !defined(Q_OS_MAC) flags |= Qt::FramelessWindowHint; #endif setMask( QRegion( m_contactListView->geometry().left(), m_contactListView->geometry().top(), m_contactListView->geometry().width(), m_contactListView->geometry().height() ) ); break; } if( flags != windowFlags() ) setWindowFlags( flags ); } void DefaultContactList::processEvent(Event &e) { if(e.id == m_show_hide_cl) { if( e.size() && e.at(0) == ( isVisible() && !isMinimized() ) ) return; if( isVisible() && !isMinimized() ) QTimer::singleShot( 0, this, SLOT(hide()) ); else { show(); setWindowState(windowState() & ~Qt::WindowMinimized); activateWindow(); raise(); } } else if(e.id == m_event_sound_enabled) { m_ui->soundOnOffButton->setChecked( e.at(0) ); #if defined(Q_OS_MAC) menuBar->actions().at(0)->menu()->actions().at(2)->setChecked(m_ui->soundOnOffButton->isChecked()); #endif } } void DefaultContactList::on_showHideButton_clicked() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); bool show = settings.value("showoffline",true).toBool(); settings.setValue("showoffline",!show); settings.endGroup(); QTimer::singleShot( 0, this, SLOT(loadSettings()) ); #if defined(Q_OS_MAC) menuBar->actions().at(1)->menu()->actions().at(0)->setChecked(!show); #endif } void DefaultContactList::on_showHideGroupsButton_clicked() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("contactlist"); int type = settings.value("modeltype",0).toInt(); if( type&2 ) type-=2; else type+=2; settings.setValue("modeltype",type); settings.endGroup(); QTimer::singleShot( 0, this, SLOT(loadSettings()) ); #if defined(Q_OS_MAC) menuBar->actions().at(1)->menu()->actions().at(1)->setChecked(! type&2 ); #endif } void DefaultContactList::on_infoButton_clicked() { Event e(m_event_about); PluginSystem::instance().sendEvent(e); } void DefaultContactList::on_soundOnOffButton_clicked() { bool sound_on = m_ui->soundOnOffButton->isChecked(); Event ev(m_event_set_sound_enable, 1, &sound_on); PluginSystem::instance().sendEvent(ev); } void DefaultContactList::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } qutim-0.2.0/src/corelayers/emoticons/0000755000175000017500000000000011273100754021253 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/emoticons/abstractemoticonslayer.h0000644000175000017500000000434211243315250026204 0ustar euroelessareuroelessar /* AbstractEmoticonsLayer Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 ABSTRACTEMOTICONSLAYER_H_ #define ABSTRACTEMOTICONSLAYER_H_ #include "../../../include/qutim/plugininterface.h" #include "../../../include/qutim/layerinterface.h" using namespace qutim_sdk_0_2; namespace CoreEmoticons { class AbstractEmoticonsLayer: public EmoticonsLayerInterface, public EventHandler { public: AbstractEmoticonsLayer(); virtual ~AbstractEmoticonsLayer() {} void loadSettings(); virtual void release() {} virtual void setProfileName(const QString &profile_name); virtual void setLayerInterface( LayerType type, LayerInterface *linterface){} virtual void saveLayerSettings() {} virtual QList getLayerSettingsList() { QList list; return list; } virtual void removeLayerSettings() {} virtual bool init(PluginSystemInterface *plugin_system) {return true;} virtual void saveGuiSettingsPressed() {} virtual void removeGuiLayerSettings() {} void processEvent(Event &e) {} virtual QHash getEmoticonsList() { return m_emoticon_list; } virtual void checkMessageForEmoticons(QString &message); static bool lengthLessThan(const QString &s1, const QString &s2); virtual QString getEmoticonsPath() { return m_dir_path; } private: void setEmoticonPath(const QString &path); QString m_profile_name; QString m_emoticons_path; QHash m_emoticon_list; QHash m_urls; QList > m_emoticons; QString m_dir_path; bool m_check_space; }; } #endif /*ABSTRACTEMOTICONSLAYER_H_*/ qutim-0.2.0/src/corelayers/emoticons/abstractemoticonslayer.cpp0000644000175000017500000001412611247741520026547 0ustar euroelessareuroelessar /* AbstractEmoticonsLayer Copyright (c) 2009 by Rustam Chakin Nigmatullin Ruslan *************************************************************************** * * * 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 "abstractemoticonslayer.h" #include #include #include #include namespace CoreEmoticons { AbstractEmoticonsLayer::AbstractEmoticonsLayer() { m_check_space = false; } void AbstractEmoticonsLayer::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("gui"); m_emoticons_path = settings.value("emoticons",":/style/emoticons/emoticons.xml").toString(); m_check_space = settings.value("emospaces", false).toBool(); settings.endGroup(); setEmoticonPath(m_emoticons_path); } void AbstractEmoticonsLayer::setProfileName(const QString &profile_name) { m_profile_name = profile_name; loadSettings(); } void AbstractEmoticonsLayer::setEmoticonPath(const QString &path) { m_emoticon_list.clear(); m_emoticons.clear(); QFile file(path); QString dirPath = QFileInfo( path ).absolutePath(); m_dir_path = dirPath; QDir dir ( dirPath ); QStringList fileList = dir.entryList(QDir::Files); if (file.exists() && file.open(QIODevice::ReadOnly) ) { QDomDocument doc; if ( doc.setContent(&file) ) { QDomElement rootElement = doc.documentElement(); int emoticonCount = rootElement.childNodes().count(); QDomElement emoticon = rootElement.firstChild().toElement(); for ( int i = 0; i < emoticonCount ; i++ ) { if ( emoticon.tagName() == "emoticon") { QString regexp = "(^"; regexp += QRegExp::escape(emoticon.attribute("file")); regexp += "\\.\\w+$)|(^"; regexp += QRegExp::escape(emoticon.attribute("file")); regexp += "$)"; QStringList fileName = fileList.filter(QRegExp(regexp)); if ( !fileName.isEmpty()) { QStringList strings; QPixmap tmp; int stringCount = emoticon.childNodes().count(); QDomElement emoticonString = emoticon.firstChild().toElement(); for(int j = 0; j < stringCount; j++) { if ( emoticonString.tagName() == "string") { if(tmp.isNull()) tmp = QPixmap(dirPath + "/" + fileName.at(0)); QString text = Qt::escape(emoticonString.text()); m_urls.insert(Qt::escape(emoticonString.text()), QString("\"%4\"") .arg(dirPath + "/" + fileName.at(0)).arg(tmp.size().width()) .arg(tmp.size().height()) //.arg(text.replace("\"", """)) ); strings.append(emoticonString.text()); } emoticonString = emoticonString.nextSibling().toElement(); } m_emoticon_list.insert(QString::number(i+1)+"|"+dirPath + "/" + fileName.at(0),strings); } } emoticon = emoticon.nextSibling().toElement(); } QStringList emoticon_keys = m_urls.keys(); qSort(emoticon_keys.begin(), emoticon_keys.end(), lengthLessThan); m_emoticons.clear(); foreach( const QString &emoticon, emoticon_keys ) { m_emoticons << qMakePair( emoticon.toLower(), m_urls.value(emoticon) ); } } } } bool AbstractEmoticonsLayer::lengthLessThan(const QString &s1, const QString &s2) { return s1.size() > s2.size(); } enum HtmlState { OutsideHtml = 0, FirstTag, TagText, SecondTag }; bool inline compareEmoticon(const QChar *c, const QString &smile) { const QChar *s = smile.constData(); while(c->toLower() == *s) { if(s->isNull()) return true; s++; c++; } return s->isNull(); } void inline appendEmoticon(QString &text, const QString &url, const QStringRef &emo) { int i = 0, last = 0; while((i = url.indexOf(QLatin1String("%4"), last)) != -1) { text += QStringRef(&url, last, i - last); text += emo; last = i + 2; } text += QStringRef(&url, last, url.length() - last); } void AbstractEmoticonsLayer::checkMessageForEmoticons(QString &message) { HtmlState state = OutsideHtml; bool at_amp = false; const QChar *begin = message.constData(); const QChar *chars = message.constData(); QChar cur; QString result; QList >::const_iterator it; while(!chars->isNull()) { cur = *chars; if(cur == '<') { if(state == OutsideHtml) state = FirstTag; else state = SecondTag; } else if(state == FirstTag || state == SecondTag) { switch(cur.unicode()) { case L'/': state = SecondTag; break; case L'"': case L'\'': do result += *(chars++); while(!chars->isNull() && *chars != cur); break; case L'>': state = static_cast((state + 1) % 4); break; default: break; } } else if(state != TagText && at_amp) { do result += *(chars++); while(!chars->isNull() && *chars != ';'); cur = *chars; at_amp = false; } else if(state != TagText) { bool found = false; at_amp = cur == '&'; if(!m_check_space || chars == begin || (chars-1)->isSpace()) { it = m_emoticons.constBegin(); for( ; it != m_emoticons.constEnd(); it++ ) { int length = (*it).first.length(); if(compareEmoticon(chars, (*it).first) && (!m_check_space || (chars+length)->isNull() || (chars+length)->isSpace())) { appendEmoticon(result, (*it).second, QStringRef(&message, chars - begin, (*it).first.length())); found = true; at_amp = false; chars += length; cur = *chars; break; } } if(found) continue; } } if(cur.isNull()) break; result += cur; chars++; } message = result; } } qutim-0.2.0/src/corelayers/speller/0000755000175000017500000000000011273100754020721 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/speller/spellerlayerclass.cpp0000644000175000017500000000605211273076304025164 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "spellerlayerclass.h" SpellerLayerClass::SpellerLayerClass() { } bool SpellerLayerClass::init(PluginSystemInterface *plugin_system) { m_name = "qutim"; quint8 major, minor, secminor; quint16 svn; plugin_system->getQutimVersion(major, minor, secminor, svn); m_version = QString("%1.%2.%3 r%4").arg(major).arg(minor).arg(secminor).arg(svn); return true; } void SpellerLayerClass::release() { } void SpellerLayerClass::setProfileName(const QString &profile_name) { Q_UNUSED(profile_name); } void SpellerLayerClass::setLayerInterface( LayerType type, LayerInterface *layer_interface) { Q_UNUSED(type); Q_UNUSED(layer_interface); } void SpellerLayerClass::saveLayerSettings() { } QList SpellerLayerClass::getLayerSettingsList() { return m_settings; } void SpellerLayerClass::removeLayerSettings() { } void SpellerLayerClass::saveGuiSettingsPressed() { } QList SpellerLayerClass::getGuiSettingsList() { return m_gui_settings; } void SpellerLayerClass::removeGuiLayerSettings() { } void SpellerLayerClass::startSpellCheck( QTextEdit *document ) { #if 0 if( m_highlighters.contains( document ) ) { m_highlighters.value( document )->setActive( true ); } else { SpellerHighlighter *highlighter = new SpellerHighlighter( document ); connect( highlighter, SIGNAL(destroyed(QObject*)), this, SLOT(onDestruction(QObject*)) ); m_highlighters.insert( document, highlighter ); } #else Q_UNUSED(document); #endif } void SpellerLayerClass::stopSpellCheck( QTextEdit *document ) { #if 0 if( !m_highlighters.contains( document ) ) return; m_highlighters.value( document )->setActive( false ); #else Q_UNUSED(document); #endif } bool SpellerLayerClass::isCorrect( const QString &word ) const { #if 0 return MacSpeller::instance().isCorrect( word ); #else return true; #endif } bool SpellerLayerClass::isMisspelled( const QString &word ) const { #if 0 return !MacSpeller::instance().isCorrect( word ); #else return false; #endif } QStringList SpellerLayerClass::suggest( const QString &word ) const { #if 0 return MacSpeller::instance().suggestions( word ); #else return QStringList() << word; #endif } #if 0 void SpellerLayerClass::onDestruction( QObject *object ) { SpellerHighlighter *highlighter = qobject_cast( object ); if( highlighter ) m_highlighters.remove( m_highlighters.key( highlighter ) ); } #endif qutim-0.2.0/src/corelayers/speller/spellerhighlighter.h0000644000175000017500000000206111273076304024761 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 SPELLERHIGHLIGHTER_H #define SPELLERHIGHLIGHTER_H #include #include class SpellerHighlighter : public QSyntaxHighlighter { Q_OBJECT public: SpellerHighlighter( QTextEdit *edit ); void setActive( bool active ); protected: virtual void highlightBlock( const QString &text ); private: bool m_active; }; #endif // SPELLERHIGHLIGHTER_H qutim-0.2.0/src/corelayers/speller/spellerlayerclass.h0000644000175000017500000000364511273076304024636 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 SPELLERLAYERCLASS_H #define SPELLERLAYERCLASS_H #include "include/qutim/layerinterface.h" #if 0 #include "spellerhighlighter.h" #endif using namespace qutim_sdk_0_2; class SpellerLayerClass : #if 0 public QObject, #endif public SpellerLayerInterface { #if 0 Q_OBJECT #endif public: SpellerLayerClass(); virtual bool init(PluginSystemInterface *plugin_system); virtual void release(); virtual void setProfileName(const QString &profile_name); virtual void setLayerInterface( LayerType type, LayerInterface *layer_interface); virtual void saveLayerSettings(); virtual QList getLayerSettingsList(); virtual void removeLayerSettings(); virtual void saveGuiSettingsPressed(); virtual QList getGuiSettingsList(); virtual void removeGuiLayerSettings(); virtual void startSpellCheck( QTextEdit *document ); virtual void stopSpellCheck( QTextEdit *document ); virtual bool isCorrect( const QString &word ) const; virtual bool isMisspelled( const QString &word ) const; virtual QStringList suggest( const QString &word ) const; #if 0 private slots: void onDestruction( QObject *object ); private: QHash m_highlighters; #endif }; #endif // SPELLERLAYERCLASS_H qutim-0.2.0/src/corelayers/speller/spellerhighlighter.cpp0000644000175000017500000000252211273076304025316 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "spellerhighlighter.h" SpellerHighlighter::SpellerHighlighter( QTextEdit *edit ) : QSyntaxHighlighter(edit) { m_active = true; } void SpellerHighlighter::setActive( bool active ) { if( m_active == active ) return; m_active = active; rehighlight(); } void SpellerHighlighter::highlightBlock ( const QString &text ) { #if 0 static QRegExp regexp("\\b\\w+\\b"); int pos = 0; while( ( ( pos = regexp.indexIn( text, pos ) ) != -1 ) ) { int length = regexp.matchedLength(); if( !MacSpeller::instance().isCorrect( regexp.cap() ) ) setFormat( pos, length, QTextCharFormat::SpellCheckUnderline ); pos += length; } #else Q_UNUSED(text); #endif } qutim-0.2.0/src/corelayers/tray/0000755000175000017500000000000011273100754020232 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/tray/defaulttraylayer.cpp0000644000175000017500000001171411257451426024332 0ustar euroelessareuroelessar/* AbstractTrayLayer Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "defaulttraylayer.h" #include "src/iconmanager.h" #include "src/pluginsystem.h" #include #if defined(Q_OS_MAC) // macx specific functions, that exported by QT GUI lib extern void qt_mac_set_dock_menu(QMenu *menu); #endif DefaultTrayLayer::DefaultTrayLayer() { m_tray_icon = 0; m_tray_menu = 0; m_quit_action = 0; } bool DefaultTrayLayer::init(PluginSystemInterface *plugin_system) { m_name = "qutim"; quint8 major, minor, secminor; quint16 svn; plugin_system->getQutimVersion(major, minor, secminor, svn); m_version = QString("%1.%2.%3 r%4").arg(major).arg(minor).arg(secminor).arg(svn); createTrayIcon(); m_event_context = plugin_system->registerEventHandler("Core/Tray/ContextRequested"); m_event_trigger = plugin_system->registerEventHandler("Core/Tray/Clicked"); m_event_double_click = plugin_system->registerEventHandler("Core/Tray/DoubleClicked"); m_event_middle_click = plugin_system->registerEventHandler("Core/Tray/MiddleClicked"); m_event_get_visible = plugin_system->registerEventHandler("Core/Tray/GetVisible", this); m_event_set_visible = plugin_system->registerEventHandler("Core/Tray/SetVisible", this); m_event_visible = plugin_system->registerEventHandler("Core/Tray/IsVisible"); return true; } void DefaultTrayLayer::setProfileName(const QString &) { if(m_quit_action) { m_quit_action->setText(QObject::tr("&Quit")); m_quit_action->setIcon(IconManager::instance().getIcon("exit")); } if(m_tray_icon) m_tray_icon->show(); bool visible = !!m_tray_icon; Event(m_event_visible, 1, &visible).send(); } void DefaultTrayLayer::createTrayIcon() { m_tray_menu = new QMenu(); #if !defined(Q_OS_MAC) // Mac OS has it's own quit trigger in Dock menu m_quit_action = m_tray_menu->addAction(QObject::tr("Quit"), QCoreApplication::instance(), SLOT(quit())); #endif #if defined(Q_OS_WIN32) || defined(Q_OS_MAC) m_tray_icon = new ExSysTrayIcon(); #else m_tray_icon = new QSystemTrayIcon(); #endif m_tray_icon->setIcon(IconManager::instance().getIcon("qutim")); // It's very unlikely for Mac OS X application to have // tray menu and reactions to the tray action at the same time. // So we decided to add tray menu to Dock #if !defined(Q_OS_MAC) m_tray_icon->setContextMenu(m_tray_menu); #else qt_mac_set_dock_menu(m_tray_menu); #endif connect(m_tray_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(activated(QSystemTrayIcon::ActivationReason))); } void DefaultTrayLayer::release() { if(m_tray_menu) delete m_tray_menu; if(m_tray_icon) { m_tray_icon->hide(); delete m_tray_icon; } m_tray_menu = 0; m_tray_icon = 0; } QMenu *DefaultTrayLayer::contextMenu() const { return m_tray_menu; } QIcon DefaultTrayLayer::icon() const { if(m_tray_icon) return m_tray_icon->icon(); else return QIcon(); } void DefaultTrayLayer::setContextMenu(QMenu * menu) { if(m_tray_icon) return m_tray_icon->setContextMenu(menu); } void DefaultTrayLayer::setIcon(const QIcon & icon) { if(m_tray_icon) return m_tray_icon->setIcon(icon); } void DefaultTrayLayer::setToolTip(const QString & tip) { if(m_tray_icon) return m_tray_icon->setToolTip(tip); } void DefaultTrayLayer::showMessage(const QString & title, const QString & message, int timeout_hint) { if(m_tray_icon) return m_tray_icon->showMessage(title, message, QSystemTrayIcon::NoIcon, timeout_hint); } QString DefaultTrayLayer::toolTip() const { if(m_tray_icon) return m_tray_icon->toolTip(); else return ""; } void DefaultTrayLayer::activated(QSystemTrayIcon::ActivationReason reason) { Event e; switch(reason) { case QSystemTrayIcon::Context: e.id = m_event_context; break; case QSystemTrayIcon::DoubleClick: e.id = m_event_double_click; break; case QSystemTrayIcon::Trigger: e.id = m_event_trigger; break; case QSystemTrayIcon::MiddleClick: e.id = m_event_middle_click; break; default: return; } PluginSystem::instance().sendEvent(e); } void DefaultTrayLayer::processEvent(Event &event) { if(event.id == m_event_set_visible && m_tray_icon && event.size()) m_tray_icon->setVisible(event.at(0)); bool visible = m_tray_icon && m_tray_icon->isVisible(); Event(m_event_visible, 1, &visible).send(); } qutim-0.2.0/src/corelayers/tray/defaulttraylayer.h0000644000175000017500000000462011257451426023775 0ustar euroelessareuroelessar/* AbstractTrayLayer Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 DEFAULTTRAYLAYER_H #define DEFAULTTRAYLAYER_H #include "../../../include/qutim/plugininterface.h" #include "../../../include/qutim/layerinterface.h" #include #if defined(Q_OS_WIN32) || defined(Q_OS_MAC) #include "exsystrayicon.h" #else #include #endif using namespace qutim_sdk_0_2; class DefaultTrayLayer : public QObject, public TrayLayerInterface, public EventHandler { Q_OBJECT public: DefaultTrayLayer(); virtual bool init(PluginSystemInterface *plugin_system); void createTrayIcon(); virtual void release(); virtual void setProfileName(const QString &); virtual void setLayerInterface( LayerType, LayerInterface *) {} virtual void saveLayerSettings() {} virtual void removeLayerSettings() {} virtual void saveGuiSettingsPressed() {} virtual void removeGuiLayerSettings() {} virtual QMenu *contextMenu() const; virtual QIcon icon() const; virtual void setContextMenu(QMenu * menu); virtual void setIcon(const QIcon & icon); virtual void setToolTip(const QString & tip); virtual void showMessage(const QString & title, const QString & message, int timeout_hint = 10000); virtual QString toolTip() const; public slots: void activated(QSystemTrayIcon::ActivationReason reason); private: virtual void processEvent(Event &event); QAction *m_quit_action; QMenu *m_tray_menu; quint16 m_event_context; quint16 m_event_trigger; quint16 m_event_double_click; quint16 m_event_middle_click; quint16 m_event_set_visible; quint16 m_event_get_visible; quint16 m_event_visible; #ifndef Q_OS_WIN32 QSystemTrayIcon *m_tray_icon; #else ExSysTrayIcon *m_tray_icon; #endif }; #endif // DEFAULTTRAYLAYER_H qutim-0.2.0/src/corelayers/tray/exsystrayicon.cpp0000644000175000017500000000462311236355476023703 0ustar euroelessareuroelessar/***************************************************************************** ** ** ** Copyright (C) 2008 Denisss (Denis Novikov). All rights reserved. ** ** ** ** This file contains implementation of class ExSysTray, a subclass ** ** of QSystemTrayIcon ** ** ** ** This file may be used under the terms of the GNU General Public ** ** License version 3.0 as published by the Free Software Foundation. ** ** Alternatively you may (at your option) use any later version of ** ** the GNU General Public License if such license has been publicly ** ** approved by Trolltech ASA (or its successors, if any) and the KDE ** ** Free Qt Foundation. ** ** ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, ** ** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND ** ** FITNESS FOR A PARTICULAR PURPOSE. ** ** ** *****************************************************************************/ #include #include #include #include "exsystrayicon.h" #ifdef _MSC_VER #pragma warning (disable:4100) // Unref local parameter #endif ExSysTrayIcon::ExSysTrayIcon(const QIcon &icon, QObject *parent) :QSystemTrayIcon(icon, parent), desktop(*QApplication::desktop()) { init(); } ExSysTrayIcon::ExSysTrayIcon(QObject *parent) :QSystemTrayIcon(parent), desktop(*QApplication::desktop()) { init(); } void ExSysTrayIcon::init() { tipShown = false; startTimer(400); } void ExSysTrayIcon::timerEvent(QTimerEvent *event) { if (!geometry().contains(QCursor::pos())) { if (tipShown) QToolTip::hideText(); tipShown = false; return; } if (tipShown || toolTipText.isEmpty()) return; QToolTip::showText(QCursor::pos(), toolTipText); tipShown = true; } void ExSysTrayIcon::setToolTip(const QString &tip) { toolTipText = tip; return; } qutim-0.2.0/src/corelayers/tray/exsystrayicon.h0000644000175000017500000000401111236355476023337 0ustar euroelessareuroelessar/***************************************************************************** ** ** ** Copyright (C) 2008 Denisss (Denis Novikov). All rights reserved. ** ** ** ** This file contains declarations of class ExSysTray, a subclass ** ** of QSystemTrayIcon ** ** ** ** This file may be used under the terms of the GNU General Public ** ** License version 3.0 as published by the Free Software Foundation. ** ** Alternatively you may (at your option) use any later version of ** ** the GNU General Public License if such license has been publicly ** ** approved by Trolltech ASA (or its successors, if any) and the KDE ** ** Free Qt Foundation. ** ** ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, ** ** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND ** ** FITNESS FOR A PARTICULAR PURPOSE. ** ** ** *****************************************************************************/ #ifndef EXSYSTRAYICON_H #define EXSYSTRAYICON_H #include #include #include class QTimerEvent; class ExSysTrayIcon : public QSystemTrayIcon { Q_OBJECT public: ExSysTrayIcon(const QIcon &icon, QObject *parent = 0); ExSysTrayIcon(QObject *parent = 0); void setToolTip (const QString &tip); protected: void timerEvent(QTimerEvent *event); void init(); private: QString toolTipText; QDesktopWidget &desktop; bool tipShown; }; #endif // EXSYSTRAYICON_H qutim-0.2.0/src/corelayers/videoengine/0000755000175000017500000000000011273100754021547 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/history/0000755000175000017500000000000011273100754020754 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/history/historywindow.ui0000644000175000017500000000757111270577057024271 0ustar euroelessareuroelessar HistoryWindowClass 0 0 592 412 HistoryWindow 4 Account: From: In: %L1 Out: %L1 All: %L1 Qt::Horizontal 40 20 Search Return false false Qt::Horizontal 0 0 10 true 1 qutim-0.2.0/src/corelayers/history/historysettings.h0000644000175000017500000000250111264363464024416 0ustar euroelessareuroelessar/* HistorySettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 HISTORYSETTINGS_H #define HISTORYSETTINGS_H #include #include "ui_historysettings.h" namespace JsonHistoryNamespace { class HistorySettings : public QWidget { Q_OBJECT public: HistorySettings(const QString &profile_name,QWidget *parent = 0); ~HistorySettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } signals: void settingsChanged(); void settingsSaved(); private: Ui::HistorySettingsClass ui; bool changed; QString m_profile_name; }; } #endif // HISTORYSETTINGS_H qutim-0.2.0/src/corelayers/history/jsonengine.cpp0000644000175000017500000002301211264363464023626 0ustar euroelessareuroelessar/* JsonEngine Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "jsonengine.h" #include "k8json.h" #include "historywindow.h" #include "historysettings.h" #include "src/iconmanager.h" namespace JsonHistoryNamespace { JsonEngine::JsonEngine() { m_settings_widget = 0; m_save_history = m_show_recent_messages = true; m_max_num = 4; } bool JsonEngine::init(PluginSystemInterface *plugin_system) { m_name = "json"; m_version = "0.1.0"; plugin_system->registerEventHandler("Core/ContactList/ItemAdded", this); return true; } void JsonEngine::release() { m_history_hash.clear(); } void JsonEngine::setProfileName(const QString &profile_name) { SystemsCity::instance().setProfileName(profile_name); QString path = SystemsCity::PluginSystem()->getProfilePath(); if(path.endsWith(QDir::separator())) path.chop(1); path += QDir::separator(); path += "history"; m_history_path = path; m_history_dir = path; loadSettings(); } void JsonEngine::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+SystemsCity::ProfileName(), "profilesettings"); settings.beginGroup("history"); m_save_history = settings.value("save", true).toBool(); m_show_recent_messages = settings.value("showrecent", true).toBool(); m_max_num = settings.value("recentcount", 4).toUInt(); settings.endGroup(); } void JsonEngine::setLayerInterface( LayerType type, LayerInterface *layer_interface) { LayersCity::instance().setLayerInterface(type, layer_interface); } void JsonEngine::saveLayerSettings() { if ( m_settings_widget ) m_settings_widget->saveSettings(); loadSettings(); } QList JsonEngine::getLayerSettingsList() { m_settings.clear(); if ( !m_settings_widget ) { m_settings_widget = new HistorySettings(SystemsCity::ProfileName()); m_settings_item = new QTreeWidgetItem; m_settings_item->setText(0,QObject::tr("History")); m_settings_item->setIcon(0,Icon("history")); SettingsStructure tmp_struct; tmp_struct.settings_item = m_settings_item; tmp_struct.settings_widget = m_settings_widget; m_settings.append(tmp_struct); } return m_settings; } void JsonEngine::removeLayerSettings() { if ( m_settings_widget ) { delete m_settings_widget; m_settings_widget = 0; delete m_settings_item; m_settings_item = 0; } } void JsonEngine::openWindow(const TreeModelItem &item) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name).arg(item.m_account_name).arg(item.m_item_name); if(!m_history_windows.value(identification)) { TreeModelItem tmp = item; tmp.m_item_name = m_history_hash.value(identification, item.m_item_name); m_history_windows.insert(identification, QPointer(new HistoryWindow(tmp, this))); } } uint JsonEngine::findEnd(QFile &file) { int len = file.size(); QByteArray data; uchar *fmap = file.map(0, file.size()); if(!fmap) { data = file.readAll(); fmap = (uchar *)data.constData(); } uint end = file.size(); const uchar *s = K8JSON::skipBlanks(fmap, &len); uchar qch = *s; if(!s || (qch != '[' && qch != '{')) { if(data.isEmpty()) file.unmap(fmap); return end; } qch = (qch == '{' ? '}' : ']'); s++; len--; bool first = true; while(s) { s = K8JSON::skipBlanks(s, &len); if(len < 2 || (s && *s == qch)) { if(*(s-1) == '\n') s--; end = (uint)(s - fmap); break; } if(!s) break; if((!first && *s != ',') || (first && *s == ',')) break; first = false; if(*s == ',') { s++; len--; } if(!(s = K8JSON::skipRec(s, &len))) break; } if(data.isEmpty()) file.unmap(fmap); return end; } bool JsonEngine::storeMessage(const HistoryItem &item) { if(!m_save_history) return false; QFile file(getAccountDir(item.m_user).filePath(getFileName(item))); bool new_file = !file.exists(); if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) return false; if(new_file) { file.write("[\n"); } else { uint end = findEnd(file); file.resize(end); file.seek(end); file.write(",\n"); } file.write(" {\n \"datetime\": \""); file.write(item.m_time.toString(Qt::ISODate).toLatin1()); file.write("\",\n \"type\": "); file.write(QString::number(item.m_type).toLatin1()); file.write(",\n \"in\": "); file.write(item.m_in ? "true" : "false"); file.write(",\n \"text\": "); file.write(K8JSON::quote(item.m_message).toUtf8()); file.write("\n }\n]"); file.close(); // It will produce something like this: // { // "datetime": "2009-06-20T01:42:22", // "type": 1, // "in": true, // "text": "some cool text" // } return true; } QList JsonEngine::getMessages(const TreeModelItem &item, const QDateTime &last_time) { QList items; if(!m_show_recent_messages) return items; QDir dir = getAccountDir(item); QString identification = QString("%1.%2.%3").arg(item.m_protocol_name).arg(item.m_account_name).arg(item.m_item_name); QString filter = quote(m_history_hash.value(identification, item.m_item_name)); filter += ".*.json"; QStringList files = dir.entryList(QStringList() << filter, QDir::Readable | QDir::Files | QDir::NoDotAndDotDot,QDir::Name); if(files.isEmpty()) return items; for(int i=files.size()-1; i>=0; i--) { QList pointers; QFile file(dir.filePath(files[i])); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) continue; int len = file.size(); QByteArray data; const uchar *fmap = file.map(0, file.size()); if(!fmap) { data = file.readAll(); fmap = (uchar *)data.constData(); } const uchar *s = K8JSON::skipBlanks(fmap, &len); uchar qch = *s; if(!s || (qch != '[' && qch != '{')) continue; qch = (qch == '{' ? '}' : ']'); s++; len--; bool first = true; while(s) { s = K8JSON::skipBlanks(s, &len); if(len < 2 || (s && *s == qch)) break; if((!first && *s != ',') || (first && *s == ',')) break; first = false; if(*s == ',') { s++; len--; } pointers.prepend(s); if(!(s = K8JSON::skipRec(s, &len))) { pointers.removeFirst(); break; } } QVariant value; for(int i=0; i= last_time) continue; item.m_in = message.value("in", false).toBool(); item.m_type = message.value("type", 1).toInt(); item.m_message = message.value("text").toString(); items.prepend(item); if(items.size() >= m_max_num) return items; } } return items; } QString JsonEngine::quote(const QString &str) { const static bool true_chars[128] = {// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 3 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 4 */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 5 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, /* 6 */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 7 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0 }; QString result; result.reserve(str.size() * 5); // the worst variant const QChar *s = str.data(); while(!s->isNull()) { if(s->unicode() < 0xff && true_chars[s->unicode()]) result += *s; else { result += '%'; if(s->unicode() < 0x1000) result += '0'; if(s->unicode() < 0x100) result += '0'; if(s->unicode() < 0x10) result += '0'; result += QString::number(s->unicode(), 16); } s++; } return result; } QString JsonEngine::unquote(const QString &str) { QString result; bool ok = false; result.reserve(str.size()); // the worst variant const QChar *s = str.data(); while(!s->isNull()) { if(s->unicode() == L'%') { result += QChar(QString(++s, 4).toUShort(&ok, 16)); s += 3; } else result += *s; s++; } return result; } QString JsonEngine::getFileName(const HistoryItem &item) const { QString identification = QString("%1.%2.%3") .arg(item.m_user.m_protocol_name) .arg(item.m_user.m_account_name) .arg(item.m_user.m_item_name); QString file = quote(m_history_hash.value(identification, item.m_user.m_item_name)); file += item.m_time.toString(".yyyyMM.'json'"); return file; } QDir JsonEngine::getAccountDir(const TreeModelItem &item) const { QString path = quote(item.m_protocol_name); path += "."; path += quote(item.m_account_name); if(!m_history_dir.exists(path)) m_history_dir.mkpath(path); return m_history_dir.filePath(path); } void JsonEngine::setHistory(const TreeModelItem &item) { if(item.m_item_history.isEmpty()) return; QString identification = QString("%1.%2.%3").arg(item.m_protocol_name).arg(item.m_account_name).arg(item.m_item_name); m_history_hash.insert(identification, item.m_item_history); } void JsonEngine::processEvent(Event &event) { setHistory(event.at(0)); } } qutim-0.2.0/src/corelayers/history/k8json.h0000644000175000017500000000377511264363464022366 0ustar euroelessareuroelessar/* K8JSON Copyright (c) 2009 by Ketmar // Avalon Group *************************************************************************** * * * 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 K8JSON_H #define K8JSON_H //#define K8JSON_INCLUDE_GENERATOR #include #include #include #include #include #ifdef K8JSON_INCLUDE_GENERATOR # include #endif namespace K8JSON { /* * quote string to JSON-friendly format, add '"' */ QString quote (const QString &str); /* * skip blanks and comments * return ptr to first non-blank char or 0 on error * 'maxLen' will be changed */ const uchar *skipBlanks (const uchar *s, int *maxLength); /* * skip one record * the 'record' is either one full field ( field: val) * or one list/object. * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *skipRec (const uchar *s, int *maxLength); /* * parse one simple record (f-v pair) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseSimple (QString &fname, QVariant &fvalue, const uchar *s, int *maxLength); /* * parse one record (list or object) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseRec (QVariant &res, const uchar *s, int *maxLength); #ifdef K8JSON_INCLUDE_GENERATOR bool generate (QByteArray &res, const QVariant &val, int indent=0); #endif } #endif qutim-0.2.0/src/corelayers/history/historywindow.h0000644000175000017500000000324111264363464024067 0ustar euroelessareuroelessar/* HistoryWindow Copyright (c) 2008 by Rustam Chakin 2009 by Ruslan Nigmatullin *************************************************************************** * * * 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 HISTORYWINDOW_H #define HISTORYWINDOW_H #include #include #include #include "ui_historywindow.h" using namespace qutim_sdk_0_2; namespace JsonHistoryNamespace { class JsonEngine; class HistoryWindow : public QWidget { Q_OBJECT public: HistoryWindow(const TreeModelItem &item, JsonEngine *engine, QWidget *parent = 0); private slots: void fillContactComboBox(int index); void fillDateTreeWidget(int index, const QString &search_word = QString()); void fillMonth(QTreeWidgetItem *month); void on_dateTreeWidget_currentItemChanged( QTreeWidgetItem* current, QTreeWidgetItem* previous ); void on_searchButton_clicked(); private: void fillAccountComboBox(); void setIcons(); Ui::HistoryWindowClass ui; qutim_sdk_0_3::TreeModelItem m_item; QString m_history_path; QString m_search_word; JsonEngine *m_engine; }; } #endif // HISTORYWINDOW_H qutim-0.2.0/src/corelayers/history/historywindow.cpp0000644000175000017500000003257611270773162024434 0ustar euroelessareuroelessar/* HistoryWindow Copyright (c) 2008 by Rustam Chakin 2009 by Ruslan Nigmatullin *************************************************************************** * * * 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 "historywindow.h" #include #include #include #include #include #include "jsonengine.h" #include "src/iconmanager.h" #include "src/pluginsystem.h" #include #include "k8json.h" namespace JsonHistoryNamespace { HistoryWindow::HistoryWindow(const TreeModelItem &item, JsonEngine *engine, QWidget *parent) : QWidget(parent), m_item(item), m_engine(engine) { ui.setupUi(this); ui.historyLog->setHtml("

" + tr("No History") + "

"); ui.label_in->setText( tr( "In: %L1").arg( 0 ) ); ui.label_out->setText( tr( "Out: %L1").arg( 0 ) ); ui.label_all->setText( tr( "All: %L1").arg( 0 ) ); SystemsCity::PluginSystem()->centerizeWidget(this); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); QList sizes; sizes.append(80); sizes.append(250); ui.splitter->setSizes(sizes); ui.splitter->setCollapsible(1,false); m_history_path = engine->getHistoryPath(); setIcons(); fillAccountComboBox(); connect(ui.accountComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(fillContactComboBox(int))); connect(ui.dateTreeWidget, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(fillMonth(QTreeWidgetItem*))); int account_index = ui.accountComboBox->findData( m_item.protocol + "." + JsonEngine::quote(m_item.account)); if ( !account_index ) fillContactComboBox(0); else ui.accountComboBox->setCurrentIndex(account_index); connect(ui.fromComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(fillDateTreeWidget(int))); int from_index = ui.fromComboBox->findData(m_item.name); if ( !from_index ) fillDateTreeWidget(0); else ui.fromComboBox->setCurrentIndex(from_index); show(); } void HistoryWindow::setIcons() { setWindowIcon(Icon("history")); ui.searchButton->setIcon(Icon("search")); } void HistoryWindow::fillAccountComboBox() { QDir history_dir(m_history_path); QStringList accounts = history_dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); PluginSystem &ps = PluginSystem::instance(); static const QStringList filter = QStringList() << "*.*.json"; foreach(QString account, accounts) { QDir account_dir = history_dir.filePath(account); if(account_dir.entryList(filter).isEmpty()) continue; QString protocol = account.section(".",0,0); QString account_name = JsonEngine::unquote(account.section(".",1)); Icon protocol_icon(protocol.toLower(), IconInfo::Protocol); qutim_sdk_0_3::TreeModelItem item; item.protocol = protocol; item.account = account_name; item.name = account_name; item.type = 0; QStringList account_info = ps.getAdditionalInfoAboutContact(item); QString account_nickname = account_name; if ( account_info.count() > 0 ) { account_nickname.append( " - " + account_info.at(0) ); } ui.accountComboBox->addItem(protocol_icon, account_nickname, account); } } void HistoryWindow::fillContactComboBox(int index) { if ( ui.accountComboBox->count() > 0 ) { QString item_data = ui.accountComboBox->itemData(index).toString(); QString protocol = item_data.section(".",0,0); QString account_name = JsonEngine::unquote(item_data.section(".",1,-1)); QDir account_history_dir(m_history_path + "/" + item_data); QStringList log_list = account_history_dir.entryList(QDir::Files | QDir::NoDotAndDotDot); ui.fromComboBox->clear(); foreach(QString contact, log_list) { QString contact_name = JsonEngine::unquote(contact.section(".",0,-3)); if ( ui.fromComboBox->findData(contact_name) != -1 ) continue; qutim_sdk_0_3::TreeModelItem item; item.protocol = protocol; item.account = account_name; item.name = contact_name; item.type = 0; QStringList contact_info = SystemsCity::PluginSystem()->getAdditionalInfoAboutContact(item); QString contact_nickname = contact_name; if ( contact_info.count() > 0 ) { contact_nickname.append( " - " + contact_info.at(0) ); } ui.fromComboBox->addItem(contact_nickname, contact_name); } } ui.fromComboBox->model()->sort( 0 ); } void HistoryWindow::fillDateTreeWidget(int index, const QString &search_word) { m_search_word = search_word; if ( ui.fromComboBox->count() > 0 ) { int account_index = ui.accountComboBox->currentIndex(); if ( account_index < 0 ) return; QString item_data = ui.accountComboBox->itemData(account_index).toString(); QDir account_history_dir(m_history_path + "/" + item_data); QStringList filters; QString from_name = ui.fromComboBox->itemData(index).toString(); filters<clear(); QTreeWidgetItem *year_item = 0; QTreeWidgetItem *month_item = 0; QTreeWidgetItem *last_item = 0; foreach(QString history_file, from_files) { date = history_file.section( '.', -2, -2 ); if( date.length() != 6 ) continue; int tmp_year = date.mid(0,4).toInt(); int tmp_month = date.mid(4,2).toInt(); if( year != tmp_year || !year_item ) { year = tmp_year; year_item = new QTreeWidgetItem(ui.dateTreeWidget); year_item->setText(0, date.mid(0,4)); year_item->setIcon(0, Icon("year")); year_item->setExpanded(true); } if( tmp_month != month ) { month = tmp_month; month_item = new QTreeWidgetItem(year_item); month_item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); month_item->setText(0, QDate::longMonthName(month)); month_item->setData(0, Qt::UserRole, account_history_dir.absoluteFilePath(history_file)); month_item->setExpanded(false); if ( month <= 2 || month == 12 ) month_item->setIcon(0, Icon("winter")); else if ( month >= 3 && month <=5 ) month_item->setIcon(0, Icon("spring")); else if ( month >= 6 && month <=8 ) month_item->setIcon(0, Icon("summer")); else if ( month >= 9 && month <=11 ) month_item->setIcon(0, Icon("autumn")); } } if( month_item ) { fillMonth(month_item); if( month_item->childCount() > 0 ) { month_item->setExpanded(true); last_item = month_item->child(month_item->childCount() - 1); } } if ( last_item ) ui.dateTreeWidget->setCurrentItem(last_item); setWindowTitle(QString("%1(%2)").arg(ui.fromComboBox->currentText()) .arg(ui.accountComboBox->currentText())); } } void HistoryWindow::fillMonth(QTreeWidgetItem *month_item) { QString file_path = month_item->data(0, Qt::UserRole).toString(); if( month_item->childCount() || file_path.isEmpty() ) return; QFile file(file_path); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMap days_list; int len = file.size(); QByteArray data; const uchar *fmap = file.map(0, file.size()); if(!fmap) { data = file.readAll(); fmap = (uchar *)data.constData(); } const uchar *s = K8JSON::skipBlanks(fmap, &len); QVariant val; uchar qch = *s; if(!s || (qch != '[' && qch != '{')) return; qch = (qch == '{' ? '}' : ']'); s++; len--; bool first = true; QDateTime history_date_time; QString history_message; QRegExp search_regexp("(" + QRegExp::escape(m_search_word) + ")", Qt::CaseInsensitive); while(s) { val.clear(); s = K8JSON::skipBlanks(s, &len); if(len < 2 || (s && *s == qch)) break; if((!first && *s != ',') || (first && *s == ',')) break; first = false; if(*s == ',') { s++; len--; } if(!(s = K8JSON::parseRec(val, s, &len))) break; else { QVariantMap message = val.toMap(); history_date_time = QDateTime::fromString(message.value("datetime").toString(), Qt::ISODate); history_message = message.value("text").toString(); int day = history_date_time.date().day(); if ( ( m_search_word.isEmpty() && !days_list.contains(day) ) || ( !m_search_word.isEmpty() && !days_list.contains(day) && ( history_message.contains(search_regexp) ) )) { days_list.insert(day,history_date_time); } } } file.close(); if ( days_list.count() ) { int day = -1; foreach(const QDateTime &history_date, days_list) { int tmp_day = history_date.date().day(); if ( tmp_day != day ) { day = tmp_day; QTreeWidgetItem *day_item = new QTreeWidgetItem(month_item); day_item->setText(0, QString::number(day) + history_date.time().toString("(hh:mm)")); day_item->setIcon(0, Icon("day")); day_item->setData(0, Qt::UserRole, history_date); } } } } } void HistoryWindow::on_dateTreeWidget_currentItemChanged( QTreeWidgetItem* current, QTreeWidgetItem* ) { if ( current ) { QDateTime item_date_time = current->data(0, Qt::UserRole).toDateTime(); if ( !item_date_time.isNull() ) { QString search_word = ui.searchEdit->text(); QRegExp search_regexp("(" + QRegExp::escape(search_word) + ")", Qt::CaseInsensitive); int account_index = ui.accountComboBox->currentIndex(); int from_index = ui.fromComboBox->currentIndex(); if ( account_index < 0 || from_index < 0) return; int in=0, out=0; QDir account_history_dir(m_history_path + "/" + ui.accountComboBox->itemData(account_index).toString()); QFile file(account_history_dir.absoluteFilePath( JsonEngine::quote(ui.fromComboBox->itemData(from_index).toString()) + "." + item_date_time.date().toString("yyyyMM") + ".json")); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { int len = file.size(); QByteArray data; const uchar *fmap = file.map(0, file.size()); if(!fmap) { data = file.readAll(); fmap = (uchar *)data.constData(); } const uchar *s = K8JSON::skipBlanks(fmap, &len); QVariant val; uchar qch = *s; if(!s || (qch != '[' && qch != '{')) return; qch = (qch == '{' ? '}' : ']'); s++; len--; bool first = true; int day = item_date_time.date().day(); QString account_nickname = ui.accountComboBox->currentText(); if ( account_nickname.contains( "-" ) ) account_nickname.remove( QRegExp( ".*-\\s" ) ); QString from_nickname = ui.fromComboBox->currentText(); if ( from_nickname.contains( "-" ) ) from_nickname.remove( QRegExp( ".*-\\s" ) ); QString history_html; QDateTime history_date_time; bool history_in; QString history_message; while(s) { val.clear(); s = K8JSON::skipBlanks(s, &len); if(len < 2 || (s && *s == qch)) break; if((!first && *s != ',') || (first && *s == ',')) break; first = false; if(*s == ',') { s++; len--; } if(!(s = K8JSON::parseRec(val, s, &len))) break; else { QVariantMap message = val.toMap(); history_date_time = QDateTime::fromString(message.value("datetime").toString(), Qt::ISODate); history_in = message.value("in", false).toBool(); history_message = message.value("text").toString(); if ( history_date_time.date().day() == day ) { QString history_html_2; history_in ? in++ : out++; history_html_2 += history_in ? "" : ""; history_html_2 += history_in ? from_nickname : account_nickname; history_html_2 += " ( "; history_html_2 += history_date_time.time().toString(); history_html_2 += " )
"; if ( search_word.isEmpty() ) { history_html_2 += history_message; history_html_2 += "
"; } else { static QString result( "\\1" ); history_html_2 += ""; history_html_2 += history_message.replace(search_regexp, result); history_html_2 += "
"; } history_html += history_html_2; } } } file.close(); ui.historyLog->setHtml(history_html); if(search_word.isEmpty()) ui.historyLog->moveCursor(QTextCursor::End); else ui.historyLog->find(search_word); ui.historyLog->setLineWrapColumnOrWidth(ui.historyLog->lineWrapColumnOrWidth()); ui.historyLog->ensureCursorVisible(); } ui.label_in->setText( tr( "In: %L1").arg( in ) ); ui.label_out->setText( tr( "Out: %L1").arg( out ) ); ui.label_all->setText( tr( "All: %L1").arg( in + out ) ); } } } void HistoryWindow::on_searchButton_clicked() { if ( ui.accountComboBox->count() && ui.fromComboBox->count() ) { if( m_search_word == ui.searchEdit->text() ) { if(!ui.historyLog->find(m_search_word)) { ui.historyLog->moveCursor(QTextCursor::Start); ui.historyLog->find(m_search_word); ui.historyLog->ensureCursorVisible(); } } else fillDateTreeWidget(ui.fromComboBox->currentIndex(), ui.searchEdit->text().toLower()); } } } qutim-0.2.0/src/corelayers/history/historysettings.ui0000644000175000017500000000636611264363464024621 0ustar euroelessareuroelessar HistorySettingsClass 0 0 400 300 HistorySettings 0 0 0 1 QFrame::StyledPanel QFrame::Raised 6 Save message history Show recent messages in messaging window false 0 0 1 40 4 Qt::Vertical 20 40 recentBox toggled(bool) messagesCountBox setEnabled(bool) 211 48 377 52 qutim-0.2.0/src/corelayers/history/historysettings.cpp0000644000175000017500000000424311264363464024756 0ustar euroelessareuroelessar/* HistorySettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "historysettings.h" #include namespace JsonHistoryNamespace { HistorySettings::HistorySettings(const QString &profile_name,QWidget *parent) : QWidget(parent), m_profile_name(profile_name) { ui.setupUi(this); changed = false; loadSettings(); connect(ui.saveHistoryBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.recentBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.messagesCountBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); } HistorySettings::~HistorySettings() { } void HistorySettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("history"); ui.saveHistoryBox->setChecked(settings.value("save", true).toBool()); ui.recentBox->setChecked(settings.value("showrecent", true).toBool()); ui.messagesCountBox->setValue(settings.value("recentcount", 4).toUInt()); settings.endGroup(); } void HistorySettings::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("history"); settings.setValue("save", ui.saveHistoryBox->isChecked()); settings.setValue("showrecent", ui.recentBox->isChecked()); settings.setValue("recentcount", ui.messagesCountBox->value()); settings.endGroup(); if ( changed ) emit settingsSaved(); changed = false; } } qutim-0.2.0/src/corelayers/history/jsonengine.h0000644000175000017500000000476311264363464023307 0ustar euroelessareuroelessar/* JsonEngine Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 JSONENGINE_H #define JSONENGINE_H #include #include #include #include using namespace qutim_sdk_0_2; namespace JsonHistoryNamespace { class HistoryWindow; class HistorySettings; class JsonEngine : public HistoryLayerInterface, public EventHandler { public: JsonEngine(); virtual bool init(PluginSystemInterface *plugin_system); virtual void release(); virtual void setProfileName(const QString &profile_name); void loadSettings(); virtual void setLayerInterface( LayerType type, LayerInterface *layer_interface); virtual void saveLayerSettings(); virtual QList getLayerSettingsList(); virtual void removeLayerSettings(); virtual void saveGuiSettingsPressed() {} virtual void removeGuiLayerSettings() {} virtual void openWindow(const TreeModelItem &item); uint findEnd(QFile &file); virtual bool storeMessage(const HistoryItem &item); virtual QList getMessages(const TreeModelItem &item, const QDateTime &last_time); QString getFileName(const HistoryItem &item) const; QDir getAccountDir(const TreeModelItem &item) const; static QString quote(const QString &str); static QString unquote(const QString &str); void setHistory(const TreeModelItem &item); inline const QString &getHistoryPath() const { return m_history_path; } void processEvent(Event &event); private: // struct LastMessage // { // QDateTime time; // uint position; // }; QString m_history_path; QDir m_history_dir; QHash m_history_hash; QHash > m_history_windows; HistorySettings *m_settings_widget; QTreeWidgetItem *m_settings_item; bool m_save_history; bool m_show_recent_messages; quint16 m_max_num; // QHash m_hash; }; } #endif // JSONENGINE_H qutim-0.2.0/src/corelayers/history/k8json.cpp0000644000175000017500000005607211264363464022717 0ustar euroelessareuroelessar/* K8JSON Copyright (c) 2009 by Ketmar // Avalon Group *************************************************************************** * * * 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. * * * *************************************************************************** */ #ifdef K8JSON_INCLUDE_GENERATOR # include #endif #include "k8json.h" namespace K8JSON { static const quint8 utf8Length[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x00-0x0f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x10-0x1f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x20-0x2f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x30-0x3f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x40-0x4f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x50-0x5f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x60-0x6f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x70-0x7f 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0x80-0x8f 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0x90-0x9f 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0xa0-0xaf 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0xb0-0xbf 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xc0-0xcf c0-c1: overlong encoding: start of a 2-byte sequence, but code point <= 127 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xd0-0xdf 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, //0xe0-0xef 4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,8 //0xf0-0xff }; QString quote (const QString &str) { int len = str.length(), c; QString res('"'); res.reserve(len+128); for (int f = 0; f < len; f++) { QChar ch(str[f]); ushort uc = ch.unicode(); if (uc < 32) { // control char switch (uc) { case '\b': res += "\\b"; break; case '\f': res += "\\f"; break; case '\n': res += "\\n"; break; case '\r': res += "\\r"; break; case '\t': res += "\\t"; break; default: res += "\\u"; for (c = 4; c > 0; c--) { ushort n = (uc>>12)&0x0f; n += '0'+(n>9?7:0); res += (uchar)n; } break; } } else { // normal char switch (uc) { case '"': res += "\\\""; break; case '\\': res += "\\\\"; break; default: res += ch; break; } } } res += '"'; return res; } /* * skip blanks and comments * return ptr to first non-blank char or 0 on error * 'maxLen' will be changed */ const uchar *skipBlanks (const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 0) return 0; while (maxLen > 0) { // skip blanks uchar ch = *s++; maxLen--; if (ch <= ' ') continue; // skip comments if (ch == '/') { if (maxLen < 2) return 0; switch (*s) { case '/': while (maxLen > 0) { s++; maxLen--; if (s[-1] == '\n') break; if (maxLen < 1) return 0; } break; case '*': s++; maxLen--; // skip '*' while (maxLen > 0) { s++; maxLen--; if (s[-1] == '*' && s[0] == '/') { s++; maxLen--; // skip '/' break; } if (maxLen < 2) return 0; } break; default: return 0; // error } continue; } // it must be a token s--; maxLen++; break; } // done *maxLength = maxLen; return s; } //FIXME: table? static inline bool isValidIdChar (const uchar ch) { return ( ch == '$' || ch == '_' || ch >= 128 || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') ); } /* * skip one record * the 'record' is either one full field ( field: val) * or one list/object. * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *skipRec (const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 0) return 0; int fieldNameSeen = 0; while (maxLen > 0) { // skip blanks if (!(s = skipBlanks(s, &maxLen))) return 0; if (!maxLen) break; uchar qch, ch = *s++; maxLen--; // fieldNameSeen<1: no field name was seen // fieldNameSeen=1: waiting for ':' // fieldNameSeen=2: field name was seen, ':' was seen too, waiting for value // fieldNameSeen=3: everything was seen, waiting for terminator if (ch == ':') { if (fieldNameSeen != 1) return 0; // wtf? fieldNameSeen++; continue; } // it must be a token, skip it bool again = false; switch (ch) { case '{': case '[': if (fieldNameSeen == 1) return 0; // waiting for delimiter; error fieldNameSeen = 3; // recursive skip qch = (ch=='{' ? '}' : ']'); // end char for (;;) { if (!(s = skipRec(s, &maxLen))) return 0; if (maxLen < 1) return 0; // no closing char ch = *s++; maxLen--; if (ch == ',') continue; // skip next field/value pair if (ch == qch) break; // end of the list or object return 0; // error! } break; case ']': case '}': case ',': // terminator if (fieldNameSeen != 3) return 0; // incomplete field s--; maxLen++; // back to this char break; case '"': case '\x27': // string if (fieldNameSeen == 1 || fieldNameSeen > 2) return 0; // no delimiter fieldNameSeen++; qch = ch; while (*s && maxLen > 0) { ch = *s++; maxLen--; if (ch == qch) { s--; maxLen++; break; } if (ch != '\\') continue; if (maxLen < 2) return 0; // char and quote ch = *s++; maxLen--; switch (ch) { case 'u': if (maxLen < 5) return 0; if (s[0] == qch || s[0] == '\\' || s[1] == qch || s[1] == '\\') return 0; s += 2; maxLen -= 2; // fallthru case 'x': if (maxLen < 3) return 0; if (s[0] == qch || s[0] == '\\' || s[1] == qch || s[1] == '\\') return 0; s += 2; maxLen -= 2; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': if (maxLen < 4) return 0; if (s[0] == qch || s[0] == '\\' || s[1] == qch || s[1] == '\\' || s[2] == qch || s[2] == '\\') return 0; s += 3; maxLen -= 3; break; default: ; // escaped char already skiped } } if (maxLen < 1 || *s != qch) return 0; // error s++; maxLen--; // skip quote again = true; break; default: // we can check for punctuation here, but i'm too lazy to do it if (fieldNameSeen == 1 || fieldNameSeen > 2) return 0; // no delimiter fieldNameSeen++; if (isValidIdChar(ch)) { // good token, skip it again = true; // just a token, skip it and go on // check for valid utf8? while (*s && maxLen > 0) { ch = *s++; maxLen--; if (ch != '.' && !isValidIdChar(ch)) { s--; maxLen++; break; } } } else return 0; // error } if (!again) break; } if (fieldNameSeen != 3) return 0; // skip blanks if (!(s = skipBlanks(s, &maxLen))) return 0; // done *maxLength = maxLen; return s; } /* * parse json-quoted string. a little relaxed parsing, it allows "'"-quoted strings, * whereas json standard does not. also \x and \nnn are allowed. * return position after the string or 0 * 's' should point to the quote char on entry */ static const uchar *parseString (QString &str, const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 2) return 0; uchar ch = 0, qch = *s++; maxLen--; if (qch != '"' && qch != '\x27') return 0; // calc string length and check string for correctness int strLen = 0, tmpLen = maxLen; const uchar *tmpS = s; while (tmpLen > 0) { ch = *tmpS++; tmpLen--; strLen++; if (ch == qch) break; if (ch != '\\') { // ascii or utf-8 quint8 t = utf8Length[ch]; if (t&0x08) return 0; // invalid utf-8 sequence if (t) { // utf-8 if (tmpLen < t) return 0; // invalid utf-8 sequence while (--t) { quint8 b = *tmpS++; tmpLen--; if (utf8Length[b] != 9) return 0; // invalid utf-8 sequence } } continue; } // escape sequence ch = *tmpS++; tmpLen--; //!strLen++; if (tmpLen < 2) return 0; int hlen = 0; switch (ch) { case 'u': hlen = 4; case 'x': if (!hlen) hlen = 2; if (tmpLen < hlen+1) return 0; while (hlen-- > 0) { ch = *tmpS++; tmpLen--; if (ch >= 'a') ch -= 32; if (!(ch >= '0' && ch <= '9') && !(ch >= 'A' && ch <= 'F')) return 0; } hlen = 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': // octal char if (tmpLen < 3) return 0; for (hlen = 2; hlen > 0; hlen--) { ch = *tmpS++; tmpLen--; if (ch < '0' || ch > '7') return 0; } break; case '"': case '\x27': ch = 0; break; default: ; // one escaped char; will be checked later } } if (ch != qch) return 0; // no terminating quote // str.reserve(str.length()+strLen+1); ch = 0; //fprintf(stderr, "\n"); while (maxLen > 0) { ch = *s++; maxLen--; //fprintf(stderr, "[%c] %i\n", ch, maxLen); if (ch == qch) break; if (ch != '\\') { // ascii or utf-8 quint8 t = utf8Length[ch]; if (!t) str.append(ch); // ascii else { // utf-8 int u = 0; s--; maxLen++; while (t--) { quint8 b = *s++; maxLen--; u = (u<<6)+(b&0x3f); } if (u > 0x10ffff) u &= 0xffff; if ((u >= 0xd800 && u <= 0xdfff) || // utf16/utf32 surrogates (u >= 0xfdd0 && u <= 0xfdef) || // just for fun (u >= 0xfffe && u <= 0xffff)) continue; // bad unicode, skip it QChar zch(u); str.append(zch); } continue; } ch = *s++; maxLen--; // at least one char left here int uu = 0; int escCLen = 0; switch (ch) { case 'u': // unicode char, 4 hex digits //fprintf(stderr, "escape U\n"); escCLen = 4; // fallthru case 'x': { // ascii char, 2 hex digits if (!escCLen) { //fprintf(stderr, "escape X\n"); escCLen = 2; } //fprintf(stderr, "escape #%i\n", escCLen); while (escCLen-- > 0) { ch = *s++; maxLen--; if (ch >= 'a') ch -= 32; uu = uu*16+ch-'0'; if (ch >= 'A'/* && ch <= 'F'*/) uu -= 7; } //fprintf(stderr, " code: %04x\n", uu); if (uu > 0x10ffff) uu &= 0xffff; if ((uu >= 0xd800 && uu <= 0xdfff) || // utf16/utf32 surrogates (uu >= 0xfdd0 && uu <= 0xfdef) || // just for fun (uu >= 0xfffe && uu <= 0xffff)) uu = -1; // bad unicode, skip it if (uu >= 0) { QChar zch(uu); str.append(zch); } } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': { // octal char //fprintf(stderr, "escape O\n"); s--; maxLen++; uu = 0; for (int f = 3; f > 0; f--) { ch = *s++; maxLen--; uu = uu*8+ch-'0'; } QChar zch(uu); str.append(zch); } break; case '\\': str.append('\\'); break; case '/': str.append('/'); break; case 'b': str.append('\b'); break; case 'f': str.append('\f'); break; case 'n': str.append('\n'); break; case 'r': str.append('\r'); break; case 't': str.append('\t'); break; case '"': case '\x27': str.append(ch); /*ch = 0;*/ break; default: // non-standard! if (ch != '\t' && ch != '\r' && ch != '\n') { //fprintf(stderr, "escape BAD [%c]\n", ch); return 0; // all other chars are BAD } str.append(ch); } } //fprintf(stderr, "[%c] [%c]\n", ch, qch); if (ch != qch) return 0; *maxLength = maxLen; return s; } /* * parse identifier */ static const uchar *parseId (QString &str, const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 1) return 0; uchar ch = 0; // calc string length and check string for correctness int strLen = 0, tmpLen = maxLen; const uchar *tmpS = s; while (tmpLen > 0) { ch = *tmpS++; tmpLen--; if (!isValidIdChar(ch)) { if (!strLen) return 0; break; } strLen++; // ascii or utf-8 quint8 t = utf8Length[ch]; if (t&0x08) return 0; // invalid utf-8 sequence if (t) { // utf-8 if (tmpLen < t) return 0; // invalid utf-8 sequence while (--t) { quint8 b = *tmpS++; tmpLen--; if (utf8Length[b] != 9) return 0; // invalid utf-8 sequence } } continue; } /* str = "true"; while (isValidIdChar(*s)) { s++; (*maxLength)--; } return s; */ // str.reserve(str.length()+strLen+1); ch = 0; while (maxLen > 0) { ch = *s++; maxLen--; if (!isValidIdChar(ch)) { s--; maxLen++; break; } // ascii or utf-8 quint8 t = utf8Length[ch]; if (!t) str.append(ch); // ascii else { // utf-8 int u = 0; s--; maxLen++; while (t--) { quint8 ch = *s++; maxLen--; u = (u<<6)+(ch&0x3f); } if (u > 0x10ffff) u &= 0xffff; if ((u >= 0xd800 && u <= 0xdfff) || // utf16/utf32 surrogates (u >= 0xfdd0 && u <= 0xfdef) || // just for fun (u >= 0xfffe && u <= 0xffff)) continue; // bad unicode, skip it QChar zch(u); str.append(zch); } continue; } *maxLength = maxLen; return s; } /* * parse number */ static const uchar *parseNumber (QVariant &num, const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 1) return 0; uchar ch = *s++; maxLen--; // check for negative number bool negative = false, fr = false; if (ch == '-') { if (maxLen < 1) return 0; ch = *s++; maxLen--; negative = true; } if (ch < '0' || ch > '9') return 0; // invalid integer part double fnum = 0.0; // parse integer part while (ch >= '0' && ch <= '9') { ch -= '0'; fnum = fnum*10+ch; if (!maxLen) goto done; ch = *s++; maxLen--; } // check for fractional part if (ch == '.') { // parse fractional part if (maxLen < 1) return 0; ch = *s++; maxLen--; double frac = 0.1; fr = true; if (ch < '0' || ch > '9') return 0; // invalid fractional part while (ch >= '0' && ch <= '9') { ch -= '0'; fnum += frac*ch; if (!maxLen) goto done; frac /= 10; ch = *s++; maxLen--; } } // check for exp part if (ch == 'e' || ch == 'E') { if (maxLen < 1) return 0; // check for exp sign bool expNeg = false; ch = *s++; maxLen--; if (ch == '+' || ch == '-') { if (maxLen < 1) return 0; expNeg = (ch == '-'); ch = *s++; maxLen--; } // check for exp digits if (ch < '0' || ch > '9') return 0; // invalid exp quint32 exp = 0; // 64? %-) while (ch >= '0' && ch <= '9') { exp = exp*10+ch-'0'; if (!maxLen) { s++; maxLen--; break; } ch = *s++; maxLen--; } while (exp--) { if (expNeg) fnum /= 10; else fnum *= 10; } if (expNeg && !fr) { if (fnum > 2147483647.0 || ((qint64)fnum)*1.0 != fnum) fr = true; } } s--; maxLen++; done: if (!fr && fnum > 2147483647.0) fr = true; if (negative) fnum = -fnum; if (fr) num = fnum; else num = (qint32)fnum; *maxLength = maxLen; return s; } static const QString sTrue("true"); static const QString sFalse("false"); static const QString sNull("null"); /* * parse one simple record (f-v pair) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseSimple (QString &fname, QVariant &fvalue, const uchar *s, int *maxLength) { if (!s) return 0; //int maxLen = *maxLength; fname.clear(); fvalue.clear(); if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 1) return 0; uchar ch = *s; // field name if (isValidIdChar(ch)) { // id if (!(s = parseId(fname, s, maxLength))) return 0; } else if (ch == '"' || ch == '\x27') { // string if (!(s = parseString(fname, s, maxLength))) return 0; //if (fname.isEmpty()) return 0; } // ':' if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 2 || *s != ':') return 0; s++; (*maxLength)--; // field value if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 1) return 0; ch = *s; if (ch == '-' || (ch >= '0' && ch <= '9')) { // number if (!(s = parseNumber(fvalue, s, maxLength))) return 0; } else if (isValidIdChar(ch)) { // identifier (true/false/null) QString tmp; //s--; (*maxLength)++; //while (isValidIdChar(*s)) { s++; (*maxLength)--; } //tmp = "true"; if (!(s = parseId(tmp, s, maxLength))) return 0; if (tmp == sTrue) fvalue = true; else if (tmp == sFalse) fvalue = false; else if (tmp != sNull) return 0; // invalid id } else if (ch == '"' || ch == '\x27') { // string QString tmp; if (!(s = parseString(tmp, s, maxLength))) return 0; fvalue = tmp; } else if (ch == '{' || ch == '[') { // object or list if (!(s = parseRec(fvalue, s, maxLength))) return 0; } else return 0; // unknown if (!(s = skipBlanks(s, maxLength))) return 0; return s; } /* * parse one record (list or object) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseRec (QVariant &res, const uchar *s, int *maxLength) { if (!s) return 0; //int maxLen = *maxLength; res.clear(); if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 1) return 0; QString str; QVariant val; // field name or list/object start uchar ch = *s; switch (ch) { case '{': { // object if (*maxLength < 2) return 0; s++; (*maxLength)--; QVariantMap obj; for (;;) { str.clear(); if (!(s = parseSimple(str, val, s, maxLength))) return 0; obj[str] = val; if (*maxLength > 0) { ch = *s++; (*maxLength)--; if (ch == ',') continue; // next field/value pair if (ch == '}') break; // end of the object } // error s = 0; break; } res = obj; return s; } // it will never comes here case '[': { // list if (*maxLength < 2) return 0; s++; (*maxLength)--; QVariantList lst; for (;;) { if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength > 0) { // value bool err = false; ch = *s; if (ch == '[' || ch == '{') { // list/object const uchar *tmp = s; if (!(s = parseRec(val, s, maxLength))) { QString st(QByteArray((const char *)tmp, 64)); err = true; } else lst << val; } else if (isValidIdChar(ch)) { // identifier str.clear(); if (!(s = parseId(str, s, maxLength))) { err = true; } else { if (str == sTrue) lst << true; else if (str == sFalse) lst << false; else if (str == sNull) lst << QVariant(); else { err = true; } } } else if (ch == '"' || ch == '\x27') { // string str.clear(); if (!(s = parseString(str, s, maxLength))) { err = true; } else lst << str; } else if (ch == '-' || (ch >= '0' && ch <= '9')) { // number if (!(s = parseNumber(val, s, maxLength))) { err = true; } else lst << val; } else { err = true; } // if (!err) { if ((s = skipBlanks(s, maxLength))) { if (*maxLength > 0) { ch = *s++; (*maxLength)--; if (ch == ',') continue; // next value if (ch == ']') break; // end of the list } } } } // error s = 0; break; } res = lst; return s; } // it will never comes here } if (!(s = parseSimple(str, val, s, maxLength))) return 0; QVariantMap obj; obj[str] = val; res = obj; return s; } #ifdef K8JSON_INCLUDE_GENERATOR bool generate (QByteArray &res, const QVariant &val, int indent) { switch (val.type()) { case QVariant::Invalid: res += "null"; break; case QVariant::Bool: res += (val.toBool() ? "true" : "false"); break; case QVariant::Char: res += quote(QString(val.toChar())).toUtf8(); break; case QVariant::Double: res += QString::number(val.toDouble()).toAscii(); break; //CHECKME: is '.' always '.'? case QVariant::Int: res += QString::number(val.toInt()).toAscii(); break; case QVariant::String: res += quote(val.toString()).toUtf8(); break; case QVariant::UInt: res += QString::number(val.toUInt()).toAscii(); break; case QVariant::ULongLong: res += QString::number(val.toULongLong()).toAscii(); break; case QVariant::Map: { //for (int c = indent; c > 0; c--) res += ' '; res += "{"; indent++; bool comma = false; QVariantMap m(val.toMap()); QVariantMap::const_iterator i; for (i = m.constBegin(); i != m.constEnd(); ++i) { if (comma) res += ",\n"; else { res += '\n'; comma = true; } for (int c = indent; c > 0; c--) res += ' '; res += quote(i.key()).toUtf8(); res += ": "; if (!generate(res, i.value(), indent)) return false; } indent--; if (comma) { res += '\n'; for (int c = indent; c > 0; c--) res += ' '; } res += '}'; indent--; } break; case QVariant::List: { //for (int c = indent; c > 0; c--) res += ' '; res += "["; indent++; bool comma = false; QVariantList m(val.toList()); foreach (const QVariant &v, m) { if (comma) res += ",\n"; else { res += '\n'; comma = true; } for (int c = indent; c > 0; c--) res += ' '; if (!generate(res, v, indent)) return false; } indent--; if (comma) { res += '\n'; for (int c = indent; c > 0; c--) res += ' '; } res += ']'; indent--; } break; case QVariant::StringList: { //for (int c = indent; c > 0; c--) res += ' '; res += "["; indent++; bool comma = false; QStringList m(val.toStringList()); foreach (const QString &v, m) { if (comma) res += ",\n"; else { res += '\n'; comma = true; } for (int c = indent; c > 0; c--) res += ' '; res += quote(v).toUtf8(); } indent--; if (comma) { res += '\n'; for (int c = indent; c > 0; c--) res += ' '; } res += ']'; indent--; } break; default: return false; } return true; } #endif } qutim-0.2.0/src/corelayers/antispam/0000755000175000017500000000000011273100754021067 5ustar euroelessareuroelessarqutim-0.2.0/src/corelayers/antispam/antispamlayersettings.h0000644000175000017500000000251011236355476025704 0ustar euroelessareuroelessar/* AntiSpamLayerSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ANTISPAMLAYERSETTINGS_H #define ANTISPAMLAYERSETTINGS_H #include #include "ui_antispamlayersettings.h" class AntiSpamLayerSettings : public QWidget { Q_OBJECT public: AntiSpamLayerSettings(const QString &profile_name, QWidget *parent = 0); ~AntiSpamLayerSettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } signals: void settingsChanged(); void settingsSaved(); private: Ui::AntiSpamLayerSettingsClass ui; bool changed; QString m_profile_name; }; #endif // ANTISPAMLAYERSETTINGS_H qutim-0.2.0/src/corelayers/antispam/antispamlayersettings.ui0000644000175000017500000001030411251526352026060 0ustar euroelessareuroelessar AntiSpamLayerSettingsClass 0 0 475 400 AntiSpamSettings 0 QFrame::StyledPanel QFrame::Raised 4 Accept messages only from contact list Notify when blocking message Do not accept NIL messages concerning authorization Do not accept NIL messages with URLs Enable anti-spam bot false true true 4 Anti-spam question: 0 0 40 0 Answer to question: Message after right answer: Don't send question/reply if my status is "invisible" qutim-0.2.0/src/corelayers/antispam/antispamlayersettings.cpp0000644000175000017500000000703411236355476026245 0ustar euroelessareuroelessar/* AntiSpamLayerSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "antispamlayersettings.h" #include AntiSpamLayerSettings::AntiSpamLayerSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_profile_name(profile_name) { ui.setupUi(this); changed = false; loadSettings(); connect(ui.fromClBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.notifyBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.authorizationBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.urlBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.botGroupBox, SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(ui.questionTextEdit, SIGNAL(textChanged()), this, SLOT(widgetStateChanged())); connect(ui.answerLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(widgetStateChanged())); connect(ui.afterAnswerLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(widgetStateChanged())); connect(ui.invisibleBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); } AntiSpamLayerSettings::~AntiSpamLayerSettings() { } void AntiSpamLayerSettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("antispam"); ui.fromClBox->setChecked(settings.value("fromcl", false).toBool()); ui.notifyBox->setChecked(settings.value("notify", true).toBool()); ui.authorizationBox->setChecked(settings.value("authorization", false).toBool()); ui.urlBox->setChecked(settings.value("urls", false).toBool()); ui.botGroupBox->setChecked(settings.value("botenabled", false).toBool()); ui.questionTextEdit->setPlainText(settings.value("question", "").toString()); ui.answerLineEdit->setText(settings.value("answer", "").toString()); ui.afterAnswerLineEdit->setText(settings.value("afteranswer", "").toString()); ui.invisibleBox->setChecked(settings.value("oninvisible", false).toBool()); settings.endGroup(); } void AntiSpamLayerSettings::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("antispam"); settings.setValue("fromcl", ui.fromClBox->isChecked()); settings.setValue("notify", ui.notifyBox->isChecked()); settings.setValue("authorization", ui.authorizationBox->isChecked()); settings.setValue("urls", ui.urlBox->isChecked()); settings.setValue("botenabled", ui.botGroupBox->isChecked()); settings.setValue("question", ui.questionTextEdit->toPlainText()); settings.setValue("answer", ui.answerLineEdit->text()); settings.setValue("afteranswer", ui.afterAnswerLineEdit->text()); settings.setValue("oninvisible", ui.invisibleBox->isChecked()); settings.endGroup(); if ( changed ) emit settingsSaved(); changed = false; } qutim-0.2.0/src/corelayers/antispam/abstractantispamlayer.h0000644000175000017500000000425711236355476025661 0ustar euroelessareuroelessar/* AbstractAntiSpamLayer Copyright (c) 2008-2009 by Rustam Chakin *************************************************************************** * * * 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 ABSTRACTANTISPAMLAYER_H_ #define ABSTRACTANTISPAMLAYER_H_ #include #include using namespace qutim_sdk_0_2; class AbstractAntiSpamLayer : public AntiSpamLayerInterface { public: AbstractAntiSpamLayer(); virtual ~AbstractAntiSpamLayer(); void loadSettings(); virtual bool init(PluginSystemInterface *plugin_system); virtual void release() {} virtual void setProfileName(const QString &profile_name); virtual void setLayerInterface( LayerType type, LayerInterface *layer_interface) { Q_UNUSED(type); Q_UNUSED(layer_interface); } virtual void saveLayerSettings(); virtual QList getLayerSettingsList(); virtual void removeLayerSettings(); virtual void saveGuiSettingsPressed() {} virtual void removeGuiLayerSettings() {} virtual bool checkForMessageValidation(const TreeModelItem &item, const QString &message, MessageType message_type, bool special_status); private: void notifyAboutBlock(const TreeModelItem &item, const QString &message); void answerToContact(const TreeModelItem &item, QString &message); bool checkForUrls(const QString &message); QString m_profile_name; bool m_accept_from_cl_only; bool m_notify_on_block; bool m_block_authorization_from_nil; bool m_block_nil_urls; bool m_anti_spam_bot_enabled; QString m_bot_question; QString m_bot_answer; QString m_bot_after_answer; bool m_do_not_answer_if_invisible; QStringList m_banned_contacts; }; #endif /*ABSTRACTANTISPAMLAYER_H_*/ qutim-0.2.0/src/corelayers/antispam/abstractantispamlayer.cpp0000644000175000017500000001201611236355476026204 0ustar euroelessareuroelessar/* AbstractAntiSpamLayer Copyright (c) 2008-2009 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "abstractantispamlayer.h" #include #include #include #include "src/pluginsystem.h" #include "src/abstractlayer.h" #include "antispamlayersettings.h" #include "src/iconmanager.h" AbstractAntiSpamLayer::AbstractAntiSpamLayer() { } AbstractAntiSpamLayer::~AbstractAntiSpamLayer() { } bool AbstractAntiSpamLayer::init(PluginSystemInterface *plugin_system) { Q_UNUSED(plugin_system); return true; } void AbstractAntiSpamLayer::saveLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { AntiSpamLayerSettings *widget = dynamic_cast(settings.settings_widget); if(widget) widget->saveSettings(); } loadSettings(); } QList AbstractAntiSpamLayer::getLayerSettingsList() { SettingsStructure settings; settings.settings_widget = new AntiSpamLayerSettings(m_profile_name); settings.settings_item = new QTreeWidgetItem(); settings.settings_item->setText(0, QObject::tr("Anti-spam")); settings.settings_item->setIcon(0, IconManager::instance().getIcon("antispam")); m_settings.append(settings); return m_settings; } void AbstractAntiSpamLayer::removeLayerSettings() { foreach(const SettingsStructure &settings, m_settings) { delete settings.settings_widget; delete settings.settings_item; } m_settings.clear(); } void AbstractAntiSpamLayer::setProfileName(const QString &profile_name) { m_profile_name = profile_name; loadSettings(); } void AbstractAntiSpamLayer::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("antispam"); m_accept_from_cl_only = settings.value("fromcl", false).toBool(); m_notify_on_block = settings.value("notify", true).toBool(); m_block_authorization_from_nil = settings.value("authorization", false).toBool(); m_block_nil_urls = settings.value("urls", false).toBool(); m_anti_spam_bot_enabled = settings.value("botenabled", false).toBool(); m_bot_question = settings.value("question", "").toString(); m_bot_answer = settings.value("answer", "").toString(); m_bot_after_answer = settings.value("afteranswer", "").toString(); m_do_not_answer_if_invisible = settings.value("oninvisible", false).toBool(); settings.endGroup(); } bool AbstractAntiSpamLayer::checkForMessageValidation(const TreeModelItem &item, const QString &message, MessageType message_type, bool special_status) { if ( m_accept_from_cl_only ) { notifyAboutBlock(item, message); return false; } if ( m_block_authorization_from_nil && message_type == 1 ) { notifyAboutBlock(item, QObject::tr("Authorization blocked")); return false; } if ( m_do_not_answer_if_invisible && special_status ) { notifyAboutBlock(item, message); return false; } if ( m_block_nil_urls && checkForUrls(message) ) { notifyAboutBlock(item, message); return false; } if ( m_anti_spam_bot_enabled ) { if ( message != m_bot_answer ) { QString identification = QString("%1.%2.%3").arg(item.m_protocol_name) .arg(item.m_account_name).arg(item.m_item_name); if ( !m_banned_contacts.contains(identification) ) { notifyAboutBlock(item, message); answerToContact(item, m_bot_question); m_banned_contacts<userMessage(item, message, NotifyBlockedMessage); } } void AbstractAntiSpamLayer::answerToContact(const TreeModelItem &item, QString &message) { PluginSystem &ps = PluginSystem::instance(); ps.sendMessageToContact(item, message, 0); } bool AbstractAntiSpamLayer::checkForUrls(const QString &message) { bool containsURLs = false; containsURLs = message.contains("http:", Qt::CaseInsensitive) ? true : containsURLs; containsURLs = message.contains("ftp:", Qt::CaseInsensitive) ? true : containsURLs; containsURLs = message.contains("www.", Qt::CaseInsensitive) ? true : containsURLs; return containsURLs; } qutim-0.2.0/src/accountmanagement.ui0000644000175000017500000000427011251526352021140 0ustar euroelessareuroelessar AccountManagementClass 0 0 400 300 AccountManagement 0 QFrame::StyledPanel QFrame::Raised 4 0 Add :/icons/crystal_project/add.png:/icons/crystal_project/add.png Edit Remove :/icons/crystal_project/remove.png:/icons/crystal_project/remove.png qutim-0.2.0/src/accountmanagement.cpp0000644000175000017500000000523211251410655021302 0ustar euroelessareuroelessar/* AccountManagement Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "accountmanagement.h" #include "src/iconmanager.h" AccountManagement::AccountManagement(QWidget *parent) : QWidget(parent) { ui.setupUi(this); updateAccountList(); ui.editButton->setIcon(IconManager::instance().getIcon("edituser")); ui.addButton->setIcon(IconManager::instance().getIcon("add")); ui.removeButton->setIcon(IconManager::instance().getIcon("remove")); connect(ui.m_account_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(on_editButton_clicked())); } AccountManagement::~AccountManagement() { } void AccountManagement::updateAccountList() { ui.m_account_list->clear(); PluginSystem &ps = PluginSystem::instance(); QList accounts_list = ps.getAccountsList(); foreach ( AccountStructure account, accounts_list ) { QListWidgetItem *item = new QListWidgetItem(account.account_name); item->setIcon(Icon(account.protocol_name.toLower(), IconInfo::Protocol)); item->setToolTip(account.protocol_name); ui.m_account_list->addItem(item); } if ( ui.m_account_list->count() ) { ui.m_account_list->setCurrentRow(0); } } void AccountManagement::on_addButton_clicked() { AbstractLayer &al = AbstractLayer::instance(); al.createNewAccount(); updateAccountList(); emit updateAccountComboBoxFromMainSettings(); } void AccountManagement::on_removeButton_clicked() { if ( ui.m_account_list->count() ) { QListWidgetItem *selected_item = ui.m_account_list->currentItem(); PluginSystem &ps = PluginSystem::instance(); ps.removeAccount(selected_item->toolTip(), selected_item->text()); updateAccountList(); emit updateAccountComboBoxFromMainSettings(); AbstractLayer &al = AbstractLayer::instance(); al.updateStausMenusInTrayMenu(); } } void AccountManagement::on_editButton_clicked() { if ( ui.m_account_list->count() ) { QListWidgetItem *selected_item = ui.m_account_list->currentItem(); PluginSystem &ps = PluginSystem::instance(); ps.editAccount(selected_item->toolTip(), selected_item->text()); } } qutim-0.2.0/src/guisettingswindow.h0000644000175000017500000000353611251361263021060 0ustar euroelessareuroelessar/* GuiSetttingsWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 GUISETTTINGSWINDOW_H #define GUISETTTINGSWINDOW_H #include #include #include "ui_guisettingswindow.h" #include "iconmanager.h" class GuiSetttingsWindow : public QDialog { Q_OBJECT public: GuiSetttingsWindow(const QString &profile_name, QWidget *parent = 0); ~GuiSetttingsWindow(); private slots: void enableApplyButton(); void on_applyButton_clicked(); void on_okButton_clicked(); private: void reloadContent(); QPoint desktopCenter(); void addUiContent(); void addEmoticonThemes(const QString &path); void addListThemes(const QString &path); void addChatThemes(const QString &path); void addWebkitThemes(const QString &path); void addPopupThemes(const QString &path); void addStatusThemes(const QString &path); void addSystemThemes(const QString &path); void addLanguages(const QString &path); void addApplicationStyles(const QString &path); void addBorderThemes(const QString &path); void addSoundThemes(const QString &path); void saveSettings(); void loadSettings(); QString m_profile_name; quint64 m_event_notify_reload; Ui::GuiSetttingsWindowClass ui; }; #endif // GUISETTTINGSWINDOW_H qutim-0.2.0/src/accountmanagement.h0000644000175000017500000000240511236355476020762 0ustar euroelessareuroelessar/* AccountManagement Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ACCOUNTMANAGEMENT_H #define ACCOUNTMANAGEMENT_H #include #include "ui_accountmanagement.h" #include "abstractlayer.h" #include "pluginsystem.h" class AccountManagement : public QWidget { Q_OBJECT public: AccountManagement(QWidget *parent = 0); ~AccountManagement(); private slots: void on_addButton_clicked(); void on_removeButton_clicked(); void on_editButton_clicked(); signals: void updateAccountComboBoxFromMainSettings(); private: Ui::AccountManagementClass ui; void updateAccountList(); }; #endif // ACCOUNTMANAGEMENT_H qutim-0.2.0/src/addaccountwizard.cpp0000644000175000017500000000770611273076304021152 0ustar euroelessareuroelessar/* Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "addaccountwizard.h" #include "iconmanager.h" AddAccountWizard::AddAccountWizard(QWidget *parent) : QWizard(parent) { m_protocol_page = new ProtocolPage; m_login_page = new LastLoginPage; setPage(Page_Protocol, m_protocol_page); setPage(Page_Login, m_login_page); setStartId(Page_Protocol); #ifndef Q_WS_MAC setWizardStyle(ModernStyle); #endif setPixmap(QWizard::LogoPixmap, Icon("qutim").pixmap(QSize(64,64))); setWindowTitle(tr("Add Account Wizard")); connect(this, SIGNAL(currentIdChanged(int)), SLOT(on_currentIdChanged(int))); PluginSystem::instance().centerizeWidget(this); } AddAccountWizard::~AddAccountWizard() { delete m_protocol_page; delete m_login_page; } void AddAccountWizard::addProtocolsToWizardList(const PluginInfoList &protocol_list) { foreach(PluginInfo information_about_plugin, protocol_list) { m_protocol_page->addItemToList(information_about_plugin); } } QString AddAccountWizard::getChosenProtocol() const { return m_protocol_page->getChosenProtocol(); } void AddAccountWizard::on_currentIdChanged(int id) { QString protocol_name = m_protocol_page->getChosenProtocol(); if ( !id && !protocol_name.isEmpty() ) { PluginSystem &ps = PluginSystem::instance(); ps.removeLoginWidgetByName(protocol_name); } else if ( id == 1 && !protocol_name.isEmpty()) { PluginSystem &ps = PluginSystem::instance(); m_login_page->setLoginForm(ps.getLoginWidget(protocol_name)); } } QPoint AddAccountWizard::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } ProtocolPage::ProtocolPage(QWidget *parent) : QWizardPage(parent) { setTitle(tr("Please choose IM protocol")); setPixmap(QWizard::WatermarkPixmap, QPixmap(":/pictures/wizard.png")); m_top_label = new QLabel(tr("This wizard will help you add your account of " "chosen protocol. You always can add or delete " "accounts from Main settings -> Accounts"), this); m_top_label->setWordWrap(true); m_protocol_list = new QListWidget(this); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(m_top_label); layout->addWidget(m_protocol_list); setLayout(layout); } void ProtocolPage::addItemToList(const PluginInfo &information_about_plugin) { QListWidgetItem *item = new QListWidgetItem(information_about_plugin.name); item->setIcon(Icon(information_about_plugin.name.toLower(), IconInfo::Protocol)); m_protocol_list->addItem(item); if ( m_protocol_list->count() ) { m_protocol_list->setCurrentRow(0); } } int ProtocolPage::nextId() const { return AddAccountWizard::Page_Login; } QString ProtocolPage::getChosenProtocol() const { if( m_protocol_list->count() ) { return m_protocol_list->currentItem()->text(); } else { return QString(); } } LastLoginPage::LastLoginPage(QWidget *parent) : QWizardPage(parent) { setTitle(tr("Please type chosen protocol login data")); setSubTitle(tr("Please fill all fields.")); layout = new QVBoxLayout; setLayout(layout); } int LastLoginPage::nextId() const { return -1; } void LastLoginPage::setLoginForm(QWidget *login_form) { if ( login_form ) { layout->addWidget(login_form); } } qutim-0.2.0/src/systeminfo.cpp0000644000175000017500000002345511273076304020023 0ustar euroelessareuroelessar/***************************************************************************** System Info Copyright (c) 2007-2008 by Remko Tronçon 2008 by Nigmatullin Ruslan *************************************************************************** * * * 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 #include #include #include #include #include #include #include #include #if defined(Q_WS_X11) || defined(Q_WS_MAC) #include #include #include #include #endif #ifdef Q_WS_WIN #include #endif #ifdef Q_WS_MAC #include #endif #include "systeminfo.h" #if defined(Q_WS_X11) static QString lsbRelease(const QStringList& args) { QStringList path = QString(qgetenv("PATH")).split(':'); QString found; foreach(QString dirname, path) { QDir dir(dirname); QFileInfo cand(dir.filePath("lsb_release")); if (cand.isExecutable()) { found = cand.absoluteFilePath(); break; } } if (found.isEmpty()) { return QString(); } QProcess process; process.start(found, args, QIODevice::ReadOnly); if(!process.waitForStarted()) return QString(); // process failed to start QTextStream stream(&process); QString ret; while(process.waitForReadyRead()) ret += stream.readAll(); process.close(); return ret.trimmed(); } static QString unixHeuristicDetect() { QString ret; struct utsname u; uname(&u); ret.sprintf("%s", u.sysname); // get description about os enum LinuxName { LinuxNone = 0, LinuxMandrake, LinuxDebian, LinuxRedHat, LinuxGentoo, LinuxSlackware, LinuxSuSE, LinuxConectiva, LinuxCaldera, LinuxLFS, LinuxASP, // Russian Linux distros LinuxALT, LinuxMOPS, LinuxPLD, // Polish Linux distros LinuxAurox, LinuxArch }; enum OsFlags { OsUseName = 0, OsUseFile, OsAppendFile }; struct OsInfo { LinuxName id; OsFlags flags; QString file; QString name; } osInfo[] = { { LinuxALT, OsUseFile, "/etc/altlinux-release", "Alt Linux" }, { LinuxMandrake, OsUseFile, "/etc/mandrake-release", "Mandrake Linux" }, { LinuxDebian, OsAppendFile, "/etc/debian_version", "Debian GNU/Linux" }, { LinuxGentoo, OsUseFile, "/etc/gentoo-release", "Gentoo Linux" }, { LinuxMOPS, OsAppendFile, "/etc/mopslinux-version", "MOPSLinux"}, { LinuxSlackware, OsAppendFile, "/etc/slackware-version", "Slackware Linux" }, { LinuxPLD, OsUseFile, "/etc/pld-release", "PLD Linux" }, { LinuxAurox, OsUseName, "/etc/aurox-release", "Aurox Linux" }, { LinuxArch, OsUseFile, "/etc/arch-release", "Arch Linux" }, { LinuxLFS, OsAppendFile, "/etc/lfs-release", "LFS Linux" }, // untested { LinuxSuSE, OsUseFile, "/etc/SuSE-release", "SuSE Linux" }, { LinuxConectiva, OsUseFile, "/etc/conectiva-release", "Conectiva Linux" }, { LinuxCaldera, OsUseFile, "/etc/.installed", "Caldera Linux" }, // many distros use the /etc/redhat-release for compatibility, so RedHat will be the last :) { LinuxRedHat, OsUseFile, "/etc/redhat-release", "RedHat Linux" }, { LinuxNone, OsUseName, "", "" } }; for (int i = 0; osInfo[i].id != LinuxNone; i++) { QFileInfo fi( osInfo[i].file ); if ( fi.exists() ) { char buffer[128]; QFile f( osInfo[i].file ); f.open( QIODevice::ReadOnly ); f.readLine( buffer, 128 ); QString desc(buffer); desc = desc.simplified ();//stripWhiteSpace (); switch ( osInfo[i].flags ) { case OsUseFile: ret = desc; if(!ret.isEmpty()) break; case OsUseName: ret = osInfo[i].name; break; case OsAppendFile: ret = osInfo[i].name + " (" + desc + ")"; break; } break; } } return ret; } #endif SystemInfo::SystemInfo() { // Initialize m_timezone_offset = 0; m_timezone_str = "N/A"; m_os_str = "Unknown"; // Detect #if defined(Q_WS_X11) || defined(Q_WS_MAC) time_t x; time(&x); char str[256]; char fmt[32]; strcpy(fmt, "%z"); strftime(str, 256, fmt, localtime(&x)); if(strcmp(fmt, str)) { int offset; QString s = str; if(s.at(0) == '+') { s.remove(0,1); offset = 1; } else if(s.at(0) == '-') { s.remove(0,1); offset = -1; } else offset = 1; int tmp = s.toInt(); offset *= (tmp/100)*60 + tmp%100; m_timezone_offset = offset; } strcpy(fmt, "%Z"); strftime(str, 256, fmt, localtime(&x)); if(strcmp(fmt, str)) m_timezone_str = str; #endif #if defined(Q_WS_X11) // attempt to get LSB version before trying the distro-specific approach m_os_str = lsbRelease(QStringList() << "--description" << "--short"); if(m_os_str.isEmpty()) { m_os_str = unixHeuristicDetect(); } #elif defined(Q_WS_MAC) long minor_version, major_version, bug_fix; Gestalt(gestaltSystemVersionMajor, &major_version); Gestalt(gestaltSystemVersionMinor, &minor_version); Gestalt(gestaltSystemVersionBugFix, &bug_fix); m_os_str = QString("Mac OS X %1.%2.%3").arg(major_version).arg(minor_version).arg(bug_fix); m_name = "MacOS X"; m_version = QString("%1.%2.%3").arg(major_version, minor_version, bug_fix); #endif #if defined(Q_WS_WIN) TIME_ZONE_INFORMATION i; //GetTimeZoneInformation(&i); //m_timezone_offset = (-i.Bias) / 60; memset(&i, 0, sizeof(i)); bool inDST = (GetTimeZoneInformation(&i) == TIME_ZONE_ID_DAYLIGHT); int bias = i.Bias; if(inDST) bias += i.DaylightBias; m_timezone_offset = -bias; m_timezone_str = ""; for(int n = 0; n < 32; ++n) { int w = inDST ? i.DaylightName[n] : i.StandardName[n]; if(w == 0) break; m_timezone_str += QChar(w); } m_os_str = QString(); m_name = "Windows"; OSVERSIONINFOEX osvi; BOOL bOsVersionInfoEx; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) { osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) return; } switch (osvi.dwPlatformId) { // Check fo family Windows NT. case VER_PLATFORM_WIN32_NT:{ // Check product version if ( osvi.dwMajorVersion <= 4 ) m_os_str.append(" NT"); if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) m_os_str.append(" 2000"); if( bOsVersionInfoEx ) // Use information from GetVersionEx. { // Check workstation's type if ( osvi.wProductType == VER_NT_WORKSTATION ) { if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) { m_os_str.append(" XP"); if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) m_os_str.append(" Home Edition" ); else m_os_str.append(" Professional" ); } else if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ) { m_os_str.append(" Vista"); if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) m_os_str.append(" Home" ); } else if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1 ) { m_os_str.append(" 7"); } else if ( osvi.dwMajorVersion == 7 && osvi.dwMinorVersion == 0 ) { m_os_str.append(" 7"); } else m_os_str.append(QString(" NT %1.%2").arg(osvi.dwMajorVersion).arg(osvi.dwMinorVersion)); } // Check server version else if ( osvi.wProductType == VER_NT_SERVER ) { if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) m_os_str.append(" 2003"); else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) m_os_str.append(" 2003 R2"); else if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ) m_os_str.append(" 2008"); else m_os_str.append(QString(" NT %1.%2").arg(osvi.dwMajorVersion).arg(osvi.dwMinorVersion)); if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) m_os_str.append(" DataCenter Server" ); else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) { if( osvi.dwMajorVersion == 4 ) m_os_str.append(" Advanced Server" ); else m_os_str.append(" Enterprise Server" ); } else if ( osvi.wSuiteMask == VER_SUITE_BLADE ) m_os_str.append(" Web Server" ); else m_os_str.append(" Server" ); } else m_os_str = QString(" Unknown Shit %1.%2").arg(osvi.dwMajorVersion).arg(osvi.dwMinorVersion); } else // Use register for earlier versions of Windows NT m_os_str.append(" NT"); if ( osvi.dwMajorVersion <= 4 ) m_os_str.append(QString(" %1.%2").arg(osvi.dwMajorVersion).arg(osvi.dwMinorVersion)); break;} // Check for family Windows 95. case VER_PLATFORM_WIN32_WINDOWS: if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) { m_os_str.append(" 95"); if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' ) m_os_str.append(" OSR2" ); } else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) { m_os_str.append(" 98"); if ( osvi.szCSDVersion[1] == 'A' ) m_os_str.append(" SE" ); } else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) { m_os_str.append(" Millennium Edition"); } else m_os_str.append(" 9x/Me"); break; } m_version = m_os_str.mid(1); m_os_str = m_os_str.prepend("Windows"); #endif } SystemInfo &SystemInfo::instance() { static SystemInfo sys_info; return sys_info; } void SystemInfo::getSystemInfo(QString &version, QString &timezone, int &timezone_offset) { version = m_os_str; timezone = m_timezone_str; timezone_offset = m_timezone_offset; } qutim-0.2.0/src/proxyfactory.cpp0000644000175000017500000000456011236355476020401 0ustar euroelessareuroelessar/***************************************************************************** ProxyFactory Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "proxyfactory.h" #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) #include "include/qutim/plugininterface.h" #if 0 # define DEBUG_PROXY qDebug #else # define DEBUG_PROXY if(0) qDebug #endif using namespace qutim_sdk_0_2; ProxyFactory::ProxyFactory() { } ProxyFactory::~ProxyFactory() { } void ProxyFactory::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+SystemsCity::ProfileName(), "profilesettings"); settings.beginGroup("proxy"); int proxy_type = settings.value("proxy/proxyType", 0).toInt(); switch (proxy_type) { case 0: m_proxy.setType(QNetworkProxy::NoProxy); break; case 1: m_proxy.setType(QNetworkProxy::HttpProxy); break; case 2: m_proxy.setType(QNetworkProxy::Socks5Proxy); break; default: m_proxy.setType(QNetworkProxy::NoProxy); } m_proxy.setHostName(settings.value("proxy/host", "").toString()); m_proxy.setPort(settings.value("proxy/port", 1).toInt()); if ( settings.value("proxy/auth", false).toBool() ) { m_proxy.setUser(settings.value("proxy/user", "").toString()); m_proxy.setPassword(settings.value("proxy/pass", "").toString()); } settings.endGroup(); } QList ProxyFactory::queryProxy(const QNetworkProxyQuery &query) { QList proxies; if(query.protocolTag() == "qrc") { proxies << QNetworkProxy(QNetworkProxy::NoProxy); } else { proxies << m_proxy; DEBUG_PROXY() << query.queryType() << query.protocolTag() << query.peerHostName() << query.peerPort(); } return proxies; } #endif qutim-0.2.0/src/qutimsettings.cpp0000644000175000017500000003470011251361263020533 0ustar euroelessareuroelessar/* qutimSettings Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 #include "qutimsettings.h" #include "pluginsettings.h" #include "pluginsystem.h" //#include "abstractchatlayer.h" //#include "abstracthistorylayer.h" //#include "notifications/abstractnotificationlayer.h" #include "globalsettings/abstractglobalsettings.h" qutimSettings::qutimSettings(const QString &profile_name, QWidget *parent) : QDialog(parent), m_iconManager(IconManager::instance()) , m_profile_name(profile_name) { ui.setupUi(this); //To delete. accountBox is disable now. //connect( ui.accountBox, SIGNAL(currentIndexChanged(int)), // this, SLOT(changeProtocolSettings(int))); PluginSystem::instance().centerizeWidget(this); // move dialog to desktop center setMinimumSize(size()); ui.settingsTree->header()->hide(); createSettingsWidget(); ui.okButton->setIcon (m_iconManager.getIcon("apply" )); ui.applyButton->setIcon (m_iconManager.getIcon("apply" )); ui.cancelButton->setIcon (m_iconManager.getIcon("cancel")); protocol_list = PluginSystem::instance().getPluginsByType("protocol"); fillProtocolComboBox(); } qutimSettings::~qutimSettings() { delete msettings; delete m_account_management_widget; //delete m_chat_window_settings; // delete m_anti_spam_settings; // delete m_notification_settings; // delete m_sound_settings; // delete m_history_settings; delete m_proxy_settings; for(int type = 0;type(type)); if(layer_interface) { layer_interface->removeLayerSettings(); } } //deleteCurrentProtocolSettings(); deleteProtocolsSettings(); } void qutimSettings::fillProtocolComboBox() { QTreeWidgetItem *m_protocol_subtree_item; PluginSystem &ps = PluginSystem::instance(); //PluginInfoList protocol_list = ps.getPluginsByType("protocol"); foreach(PluginInfo information_about_plugin, protocol_list) { QList settings_list = ps.getSettingsByName(information_about_plugin.name); if ( settings_list.count() > 0 ) { m_protocol_subtree_item = addSettingsSubtree ( settings_list, information_about_plugin.name ); protocols_subtree_items.append ( m_protocol_subtree_item );//list of subtree protocols settings (for deleting) } //ui.accountBox->addItem(Icon(information_about_plugin.name.toLower(), IconInfo::Protocol), information_about_plugin.name); } } void qutimSettings::createSettingsWidget() { m_account_management_item = new QTreeWidgetItem(ui.settingsTree); m_account_management_item->setText(0, tr("Accounts")); m_account_management_item->setIcon(0, m_iconManager.getIcon("switch_user")); m_account_management_widget = new AccountManagement; ui.settingsStack->addWidget(m_account_management_widget); general = new QTreeWidgetItem(ui.settingsTree); general->setText(0, tr("General")); general->setIcon(0, m_iconManager.getIcon("mainsettings")); msettings = new mainSettings(m_profile_name); connect(msettings, SIGNAL(settingsChanged()), this, SLOT(enableApply())); connect(msettings, SIGNAL(settingsSaved()), this, SLOT(mainSettingsChanged())); connect(m_account_management_widget, SIGNAL(updateAccountComboBoxFromMainSettings()), msettings, SLOT(updateAccountComboBox())); ui.settingsStack->addWidget(msettings); // m_contact_list_settings_item = new QTreeWidgetItem(ui.settingsTree); // m_contact_list_settings_item->setText(0, tr("Contact list")); // m_contact_list_settings_item->setIcon(0, m_iconManager.getIcon("contactlist")); // // m_contact_list_settings = new ContactListSettings(m_profile_name); // ui.settingsStack->addWidget(m_contact_list_settings); // connect(m_contact_list_settings, SIGNAL(settingsChanged()), // this, SLOT(enableApply())); // connect(m_contact_list_settings, SIGNAL(settingsSaved()), // this, SLOT(contactListSettingsChanged())); /* m_chat_settings_item = new QTreeWidgetItem(ui.settingsTree); m_chat_settings_item->setText(0, tr("Chat window")); m_chat_settings_item->setIcon(0, m_iconManager.getIcon("messaging")); */ //m_chat_window_settings = new ChatWindowSettings(m_profile_name); // ui.settingsStack->addWidget(m_chat_window_settings); //connect(m_chat_window_settings, SIGNAL(settingsChanged()), // this, SLOT(enableApply())); //connect(m_chat_window_settings, SIGNAL(settingsSaved()), // this, SLOT(chatWindowSettingsChanged())); /* m_history_settings_item = new QTreeWidgetItem(ui.settingsTree); m_history_settings_item->setText(0, tr("History")); m_history_settings_item->setIcon(0, m_iconManager.getIcon("history")); m_history_settings = new HistorySettings(m_profile_name); ui.settingsStack->addWidget(m_history_settings); connect(m_history_settings, SIGNAL(settingsChanged()), this, SLOT(enableApply())); connect(m_history_settings, SIGNAL(settingsSaved()), this, SLOT(historySettingsChanged())); */ for(int type = 0;type(type)); if(layer_interface) { addSettings(layer_interface->getLayerSettingsList()); } } // m_notifications_settings_item = new QTreeWidgetItem(ui.settingsTree); // m_notifications_settings_item ->setText(0, tr("Notifications")); // m_notifications_settings_item ->setIcon(0, m_iconManager.getIcon("events")); // m_notification_settings = new NotificationsLayerSettings(m_profile_name); // ui.settingsStack->addWidget(m_notification_settings); // connect(m_notification_settings, SIGNAL(settingsChanged()), // this, SLOT(enableApply())); // connect(m_notification_settings, SIGNAL(settingsSaved()), // this, SLOT(notificationsSettingsChanged())); // m_anti_spam_settings_item = new QTreeWidgetItem(ui.settingsTree); // m_anti_spam_settings_item->setText(0, tr("Anti-spam")); // m_anti_spam_settings_item->setIcon(0, m_iconManager.getIcon("antispam")); // // m_anti_spam_settings = new AntiSpamLayerSettings(m_profile_name); // ui.settingsStack->addWidget(m_anti_spam_settings); // connect(m_anti_spam_settings, SIGNAL(settingsChanged()), // this, SLOT(enableApply())); // connect(m_anti_spam_settings, SIGNAL(settingsSaved()), // this, SLOT(antiSpamSettingsChanged())); // m_sound_settings_item = new QTreeWidgetItem(ui.settingsTree); // m_sound_settings_item->setText(0, tr("Sound")); // m_sound_settings_item->setIcon(0, m_iconManager.getIcon("soundsett")); // // m_sound_settings = new SoundLayerSettings(m_profile_name); // ui.settingsStack->addWidget(m_sound_settings); // connect(m_sound_settings, SIGNAL(settingsChanged()), // this, SLOT(enableApply())); // connect(m_sound_settings, SIGNAL(settingsSaved()), // this, SLOT(soundSettingsChanged())); m_global_proxy_item = new QTreeWidgetItem(ui.settingsTree); m_global_proxy_item->setText(0, tr("Global proxy")); m_global_proxy_item->setIcon(0, m_iconManager.getIcon("proxy")); m_proxy_settings = new GlobalProxySettings(m_profile_name); ui.settingsStack->addWidget(m_proxy_settings); connect(m_proxy_settings, SIGNAL(settingsChanged()), this, SLOT(enableApply())); connect(m_proxy_settings, SIGNAL(settingsSaved()), this, SLOT(globalProxySettingsChanged())); ui.settingsTree->resizeColumnToContents(0); connect(ui.settingsTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(changeSettings(QTreeWidgetItem *, QTreeWidgetItem *))); ui.settingsTree->setCurrentItem(m_account_management_item); } void qutimSettings::addSettings(const QList &settings_list) { foreach( const SettingsStructure &settings_structure, settings_list ) { ui.settingsTree->addTopLevelItem(settings_structure.settings_item); QWidget *settings_widget = settings_structure.settings_widget; connect( settings_widget, SIGNAL(settingsChanged()), this, SLOT(enableApply()) ); ui.settingsStack->addWidget(settings_widget); } } QTreeWidgetItem *qutimSettings::addSettingsSubtree(const QList &settings_list, QString subtreeHeaderName) { QTreeWidgetItem *m_settings_subtree_item = new QTreeWidgetItem(ui.settingsTree); m_settings_subtree_item->setText(0, subtreeHeaderName); m_settings_subtree_item->setIcon(0, m_iconManager.getIcon(subtreeHeaderName.toLower(), IconInfo::Protocol)); foreach( const SettingsStructure &settings_structure, settings_list ) { m_settings_subtree_item->addChild(settings_structure.settings_item);//adding childitem to subtree QWidget *settings_widget = settings_structure.settings_widget; connect( settings_widget, SIGNAL(settingsChanged()), this, SLOT(enableApply()) ); ui.settingsStack->addWidget(settings_widget); } return m_settings_subtree_item; } void qutimSettings::changeSettings(QTreeWidgetItem *current, QTreeWidgetItem *previous) { if (!current) current = previous; int index = 0; int i; if(ui.settingsTree->indexOfTopLevelItem(current) != -1){ // if current is toplevel item for(i=0;iindexOfTopLevelItem(current);i++){//for all previous items if(ui.settingsTree->topLevelItem(i)->childCount())//if one of previous item have child(is subtree) add count of children to index index += ui.settingsTree->topLevelItem(i)->childCount(); else index++; } } //else if current is child item //do analogically but with parent item //and add index(in subtree) of child item else{ QTreeWidgetItem *parent = current->parent(); for(i=0;iindexOfTopLevelItem(parent);i++){ if(ui.settingsTree->topLevelItem(i)->childCount()) index += ui.settingsTree->topLevelItem(i)->childCount(); else index++; } index += parent->indexOfChild(current); } ui.settingsStack->setCurrentIndex(index); //ui.settingsStack->setCurrentIndex(ui.settingsTree->indexOfTopLevelItem(current)); } void qutimSettings::on_okButton_clicked() { /* if (ui.applyButton->isEnabled() && ui.accountBox->count()) signalForSettingsSaving(ui.accountBox->currentText()); else if(ui.applyButton->isEnabled()) signalForSettingsSaving(); */ if(ui.applyButton->isEnabled()) foreach(PluginInfo information_about_plugin, protocol_list) signalForSettingsSaving(information_about_plugin.name); accept(); } void qutimSettings::on_applyButton_clicked() { PluginSystem &ps = PluginSystem::instance(); foreach(PluginInfo information_about_plugin, protocol_list) signalForSettingsSaving(information_about_plugin.name); ui.applyButton->setEnabled(false); } void qutimSettings::saveAllSettings() { msettings->saveSettings(); // m_contact_list_settings->saveSttings(); // m_chat_window_settings->saveSettings(); // m_anti_spam_settings->saveSettings(); // m_notification_settings->saveSettings(); // m_sound_settings->saveSettings(); // m_history_settings->saveSettings(); m_proxy_settings->saveSettings(); for(int type = 0;type(type)); if(layer_interface) { layer_interface->saveLayerSettings(); } } } //To delete. accountBox is disable now. void qutimSettings::changeProtocolSettings(int index) { if ( ui.applyButton->isEnabled() ) { QMessageBox msgBox(QMessageBox::NoIcon, tr("Save settings"), tr("Save %1 settings?").arg(m_current_account_name), QMessageBox::Yes | QMessageBox::No, this); switch( msgBox.exec() ) { case QMessageBox::Yes: signalForSettingsSaving(m_current_account_name); ui.applyButton->setEnabled(false); break; case QMessageBox::No: break; default: break; } } deleteCurrentProtocolSettings(); } void qutimSettings::onUpdateTranslation() { general->setText(0, tr("General")); } void qutimSettings::signalForSettingsSaving(const QString &protocol_name) { saveAllSettings(); if(protocol_name.isEmpty()) return; PluginSystem &ps = PluginSystem::instance(); ps.applySettingsPressed(protocol_name); } void qutimSettings::deleteCurrentProtocolSettings() { if( !m_current_account_name.isEmpty() ) { PluginSystem &ps = PluginSystem::instance(); ps.removeProtocolSettingsByName(m_current_account_name); } } void qutimSettings::deleteProtocolsSettings() { PluginSystem &ps = PluginSystem::instance(); //PluginInfoList protocol_list = ps.getPluginsByType("protocol"); foreach(PluginInfo information_about_plugin, protocol_list)//remove protocols settings ps.removeProtocolSettingsByName(information_about_plugin.name); foreach(QTreeWidgetItem *m_protocol_subtree_item, protocols_subtree_items)//remove protocols settings subtree headers delete m_protocol_subtree_item; protocols_subtree_items.clear(); } void qutimSettings::mainSettingsChanged() { AbstractLayer &as = AbstractLayer::instance(); as.reloadGeneralSettings(); } void qutimSettings::chatWindowSettingsChanged() { // AbstractChatLayer &acl = AbstractChatLayer::instance(); // acl.loadSettings(); } //void qutimSettings::antiSpamSettingsChanged() //{ // AbstractAntiSpamLayer &aasl = AbstractAntiSpamLayer::instance(); // aasl.loadSettings(); //} //void qutimSettings::notificationsSettingsChanged() //{ // AbstractNotificationLayer &anl = AbstractNotificationLayer::instance(); // anl.loadSettings(); //} //void qutimSettings::soundSettingsChanged() //{ //} //void qutimSettings::contactListSettingsChanged() //{ //// AbstractContactList::instance().loadSettings(); //} void qutimSettings::historySettingsChanged() { // AbstractHistoryLayer::instance().loadSettings(); } void qutimSettings::globalProxySettingsChanged() { AbstractGlobalSettings::instance().loadNetworkSettings(); } qutim-0.2.0/src/iconmanager.cpp0000644000175000017500000002452111236355476020112 0ustar euroelessareuroelessar/* iconManager Copyright (c) 2008 by Alexey Pereslavtsev Nigmatullin Ruslan Dmitri Arekhta This file is a part of qutIM project. You can find more information at http://qutim.org *************************************************************************** * * * 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 "iconmanager.h" #include "pluginsystem.h" #include static bool icon_manager_initialized = false; IconManager::IconManager() { for( int i = 0; i < IconInfo::Invalid; i++ ) m_icons << Icons(); } IconManager &IconManager::instance() { static IconManager ims; return ims; } static inline void setPath( IconManager::Icons &icons, const QString &path, const QString &qrc_path ) { QDir dir = path; if( dir.exists() ) icons.path = path; icons.qrc_path = qrc_path; } void IconManager::loadSettings() { icon_manager_initialized = true; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings" ); settings.beginGroup( "gui" ); setPath( m_icons[IconInfo::System], settings.value( "systemicon", QString() ).toString(), ":/icons/core" ); setPath( m_icons[IconInfo::Status], settings.value( "statusicon", QString() ).toString(), ":/icons" ); if( m_icons[IconInfo::Status].path.isEmpty() ) m_icons[IconInfo::Status].path = m_icons[IconInfo::System].path; setPath( m_icons[IconInfo::Client], settings.value( "clienticon", QString() ).toString(), ":/icons/clients" ); setPath( m_icons[IconInfo::Protocol], settings.value( "protocolicon", QString() ).toString(), ":/icons/protocol" ); setStatusIconPackage( m_icons[IconInfo::Status] ); settings.endGroup(); } void IconManager::loadProfile(const QString & profile_name) { m_profile_name = profile_name; loadSettings(); } static QString tryGetFilePath( const QDir &dir, const QString &name, bool ini = true ) { QString base_path = dir.absoluteFilePath( name ); QString path = base_path; if( !dir.exists( name ) ) { if( ini && dir.exists( name + ".ini" ) ) return dir.filePath( name + ".ini" ); QFileInfo file; file.setFile( dir, name ); QList extensions = QImageReader::supportedImageFormats(); int current = extensions.indexOf( file.suffix().toLatin1() ); if( current > 0 ) extensions.swap( 0, current ); current = 0; do { path = base_path + QLatin1Char('.') + QString::fromLatin1(extensions.at(current++).constData()); file.setFile( path ); } while( current < extensions.size() && !file.exists() ); if( !file.exists() ) path = QString(); } return path; } bool IconManager::setStatusIconPackage( Icons &icons ) { QDir dir = icons.path; if( !dir.exists() ) return false; if( icons.path.endsWith( ".AdiumStatusIcons", Qt::CaseInsensitive ) ) { QHash from_adium; from_adium.insert( "Generic Available", "online" ); from_adium.insert( "Free for Chat", "ffc" ); from_adium.insert( "Generic Away", "away" ); from_adium.insert( "Not Available", "na" ); from_adium.insert( "Occupied", "occupied" ); from_adium.insert( "DND", "dnd" ); from_adium.insert( "Invisible", "invisible" ); from_adium.insert( "Offline", "offline" ); from_adium.insert( "Unknown", "connecting" ); from_adium.insert( "Available At Home", "athome" ); from_adium.insert( "Available At Work", "atwork" ); from_adium.insert( "Lunch", "lunch" ); from_adium.insert( "Available Evil", "evil" ); from_adium.insert( "Available Depression", "depression" ); from_adium.insert( "Without Authorization", "noauth" ); QSettings style(dir.filePath( "Icons.plist"), PluginSystem::instance().plistFormat()); QVariantMap tabs = style.value( "Tabs" ).toMap(); if( !tabs.isEmpty() ) { QVariantMap::iterator it = tabs.begin(); for( ; it != tabs.end(); it++ ) { QString name = from_adium.value( it.key(), QString() ); if( name.isEmpty() ) continue; QString path = tryGetFilePath( dir, it.value().toString(), false ); if( !path.isEmpty() ) icons.standart.insert( name, Icon( path, QIcon(path) ) ); } } if( !icons.standart.contains( "online") || !icons.standart.contains( "offline" ) ) { icons.standart.clear(); return false; } icons.use_default = true; icons.path = icons.qrc_path = QString(); if( !icons.standart.contains( "ffc" ) ) icons.standart["ffc"] = icons.standart["online"]; if( !icons.standart.contains( "na" ) ) icons.standart["na"] = icons.standart["away"]; if( !icons.standart.contains( "occupied" ) ) icons.standart["occupied"] = icons.standart["away"]; if( !icons.standart.contains( "dnd" ) ) icons.standart["dnd"] = icons.standart["away"]; if( !icons.standart.contains( "athome" ) ) icons.standart["athome"] = icons.standart["online"]; if( !icons.standart.contains( "atwork" ) ) icons.standart["atwork"] = icons.standart["online"]; if( !icons.standart.contains( "lunch" ) ) icons.standart["lunch"] = icons.standart["online"]; if( !icons.standart.contains( "evil" ) ) icons.standart["evil"] = icons.standart["online"]; if( !icons.standart.contains( "depression" ) ) icons.standart["depression"] = icons.standart["online"]; if( !icons.standart.contains( "noauth" ) ) icons.standart["noauth"] = icons.standart["offline"]; return true; } return false; } bool IconManager::tryAddIcon( const QString &name, IconInfo::Type category, const QString &subtype, bool qrc ) { if( category >= IconInfo::Invalid ) return false; Icons &icons = m_icons[category]; if( !qrc && icons.path.isEmpty() ) qrc = true; QDir dir = qrc ? icons.qrc_path : icons.path; if( !subtype.isEmpty() ) { // qDebug() << name << subtype << dir.absolutePath(); bool result = dir.cd(subtype); // qDebug() << dir.absolutePath() << result; if( !result ) return qrc ? false : tryAddIcon( name, category, subtype, true ); } QString path = tryGetFilePath( dir, name ); if( path.isEmpty() ) return qrc ? false : tryAddIcon( name, category, subtype, true ); else if( path.endsWith( ".ini" ) ) { QSettings settings( path, QSettings::IniFormat ); QString default_icon = settings.value( "icon/default", QString() ).toString(); QStringList icons_list = settings.value( "icon/list", QStringList() ).toStringList(); if( icons_list.isEmpty() ) { path = tryGetFilePath( dir, name, false ); if( path.isEmpty() ) return qrc ? false : tryAddIcon( name, category, subtype, true ); } else { if( default_icon.isEmpty() ) default_icon = icons_list.first(); QStringIconHash &hash = ( icons.use_default || subtype.isEmpty() ) ? icons.standart : icons.icons[subtype]; QIcon icon; foreach( const QString &path, icons_list ) icon.addFile( dir.absoluteFilePath( path ) ); hash.insert( name, Icon( dir.absoluteFilePath( default_icon ), icon ) ); return true; } } QIcon icon( path ); QStringIconHash &hash = ( icons.use_default || subtype.isEmpty() ) ? icons.standart : icons.icons[subtype]; hash.insert( name, Icon( path, icon ) ); return true; } static const IconManager::Icon null_icon = IconManager::Icon( QString(), QIcon() ); const IconManager::Icon *IconManager::getIconInfo( const QString &name, IconInfo::Type category, const QString &subtype ) { if( category < 0 || category >= IconInfo::Invalid || !icon_manager_initialized ) return &null_icon; Icons &icons = m_icons[category]; QStringIconHash *hash = 0; if( icons.use_default || subtype.isEmpty() ) hash = &icons.standart; else { QHash::iterator iter = icons.icons.find( subtype ); if( iter == icons.icons.end() ) { if( tryAddIcon( name, category, subtype ) ) iter = icons.icons.find( subtype ); else return getIconInfo( name, category, QString() ); } hash = &iter.value(); } QStringIconHash::iterator it = hash->find( name ); if( it == hash->end() ) { if( tryAddIcon( name, category, subtype ) ) it = hash->find( name ); else { if( icons.use_default || subtype.isEmpty() ) return &(hash->operator []( name ) = null_icon); return getIconInfo( name, category, QString() ); } } return &it.value(); } QIcon IconManager::getIcon( const QString &name, IconInfo::Type category, const QString &subtype ) const { const Icon *icon = const_cast(this)->getIconInfo( name, category, subtype ); if( !icon ) return QIcon(); return icon->second; } QString IconManager::getIconPath( const QString &name, IconInfo::Type category, const QString &subtype ) const { const Icon *icon = const_cast(this)->getIconInfo( name, category, subtype ); if( !icon ) return QString(); return icon->first; } bool IconManager::setIcon( const IconInfo &icon, const QString &path ) { if( icon.category < 0 || icon.category >= IconInfo::Invalid ) return false; Icons &icons = m_icons[icon.category]; QStringIconHash *hash = 0; if( icons.use_default || icon.subtype.isEmpty() ) hash = &icons.standart; else hash = &icons.icons[icon.subtype]; Icon &new_icon = hash->operator []( icon.name ); if( !new_icon.first.isEmpty() ) return false; QString tmp_path = path; if(path.isEmpty()) { QSize size; #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) QList sizes = icon.icon.availableSizes(); if(sizes.isEmpty()) size = QSize(16, 16); else { size = sizes.first(); for(int i=1; i < sizes.size(); i++) { if(sizes.at(i).height() < size.height()) size = sizes.at(i); } } #else size = QSize(16, 16); #endif QPixmap pixmap = icon.icon.pixmap(size); QTemporaryFile *file = new QTemporaryFile(QDir::temp().filePath("qutim_temp")); QObject::connect(qApp, SIGNAL(aboutToQuit()), file, SLOT(deleteLater())); pixmap.save(file, "png"); tmp_path = file->fileName(); } new_icon.first = tmp_path; new_icon.second = icon.icon; return true; } bool IconManager::addPack( const QString &name, const IconInfoList &pack ) { QStringList icon_names; foreach(const IconInfo &info, pack) setIcon(info, QString()); return true; } qutim-0.2.0/src/logindialog.cpp0000644000175000017500000002014211236355476020112 0ustar euroelessareuroelessar/* loginDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "logindialog.h" #include "pluginsystem.h" loginDialog::loginDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); notStart = false; PluginSystem::instance().centerizeWidget(this); setFixedSize(size()); ui.accountBox->lineEdit()->setMaxLength(12); // max account length QRegExp rx("[1-9][0-9]{1,9}"); QValidator *validator = new QRegExpValidator(rx, this); ui.accountBox->lineEdit()->setValidator(validator); //if account and password not empty then enable button ui.signButton->setEnabled(ui.accountBox->lineEdit()->text() != "" && ui.passwordEdit->text() != ""); connect( ui.accountBox, SIGNAL(editTextChanged ( const QString &)), this, SLOT(signInEnable(const QString &))); connect( ui.passwordEdit, SIGNAL(textChanged ( const QString &) ), this, SLOT(signInEnable(const QString &))); connect( ui.accountBox, SIGNAL(editTextChanged( const QString &)), this, SLOT(accountEdit(const QString &))); connect( ui.accountBox, SIGNAL(currentIndexChanged( const QString &)), this, SLOT(accountChanged(const QString &))); IconManager &im =IconManager::instance(); ui.signButton ->setIcon(im.getIcon("signin" )); ui.deleteButton->setIcon(im.getIcon("delete_user")); } loginDialog::~loginDialog() { } QPoint loginDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void loginDialog::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "mainsettings"); settings.setValue("logindialog/showstart", ui.openBox->isChecked()); saveAccounts(); } void loginDialog::saveAccounts() { //add new account to account list QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "accounts"); QStringList accounts = settings.value("accounts/list").toStringList(); QString curraccount(ui.accountBox->currentText()); //save current acount settings savePersonalSettings(curraccount); if(!accounts.contains(curraccount)) { QString curraccount(ui.accountBox->currentText()); accounts<<(curraccount); accounts.sort(); settings.setValue("accounts/list", accounts); if( notStart ) emit addingAccount(curraccount); } //set default on app run account settings.setValue("accounts/default", accounts.indexOf(curraccount)); } void loginDialog::savePersonalSettings(const QString &account) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/ICQ."+account, "account"); settings.setValue("main/account",account); if ( ui.saveBox->isChecked() ) { // bool des3 = settings.value("encryption/pass3DES", false).toBool(); // EncryptionManager encrypt; // settings.setValue("main/password",ui.passwordEdit->text()); // Encrypt and save password QString passwd = ui.passwordEdit->text(); passwd.truncate(8); QByteArray roastedPass; for ( int i = 0; i < passwd.length(); i++ ) roastedPass[i] = passwd.at(i).unicode() ^ crypter[i]; settings.setValue("main/password",roastedPass); } else { settings.remove("main/password"); } settings.setValue("main/savepass", ui.saveBox->isChecked()); settings.setValue("connection/auto", ui.connectBox->isChecked()); settings.setValue("connection/md5", ui.securBox->isChecked()); } void loginDialog::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "mainsettings"); ui.openBox->setChecked(settings.value("logindialog/showstart", true).toBool()); loadAccounts(); } void loginDialog::loadAccounts() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "accounts"); ui.accountBox->addItems(settings.value("accounts/list").toStringList()); ui.accountBox->setCurrentIndex(settings.value("accounts/default", 0).toInt()); ui.deleteButton->setEnabled(ui.accountBox->count()); loadPersonalSettings(ui.accountBox->currentText()); } void loginDialog::loadPersonalSettings(const QString &account) { if(ui.accountBox->currentText() != "") { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/ICQ."+account, "account"); if(account == settings.value("main/account").toString() ) { QByteArray tmpPass = settings.value("main/password").toByteArray(); QByteArray roastedPass; for ( int i = 0; i < tmpPass.length(); i++ ) roastedPass[i] = tmpPass.at(i) ^ crypter[i]; ui.passwordEdit->setText(roastedPass); ui.saveBox->setChecked(settings.value("main/savepass", true).toBool()); ui.connectBox->setChecked(settings.value("connection/auto", true).toBool()); ui.securBox->setChecked(settings.value("connection/md5", true).toBool()); ui.deleteButton->setEnabled(true); } else { ui.accountBox->lineEdit()->clear(); } } } void loginDialog::signInEnable(const QString &) { ui.signButton->setEnabled(ui.accountBox->lineEdit()->text() != "" && ui.passwordEdit->text() != ""); } void loginDialog::accountEdit(const QString & account) { //on account uin editing QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "accounts"); QStringList accountList = settings.value("accounts/list").toStringList(); if ( accountList.contains(account) ) loadPersonalSettings(account); else { ui.passwordEdit->clear(); ui.saveBox->setChecked(true); ui.connectBox->setChecked(true); ui.securBox->setChecked(true); ui.deleteButton->setEnabled(false); } } void loginDialog::on_deleteButton_clicked() { QString account(ui.accountBox->currentText()); QMessageBox msgBox(QMessageBox::NoIcon, tr("Delete account"), tr("Delete %1 account?").arg(account), QMessageBox::Yes | QMessageBox::No, this); switch( msgBox.exec() ) { case QMessageBox::Yes: deleteCurrentAccount(account); break; case QMessageBox::No: break; default: break; } } void loginDialog::deleteCurrentAccount(const QString &account) { if ( notStart ) emit removingAccount(account); ui.accountBox->removeItem(ui.accountBox->currentIndex()); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "accounts"); QStringList accountList = settings.value("accounts/list").toStringList(); accountList.removeAll(account); //delete from account list if( accountList.count() ) settings.setValue("accounts/list", accountList); else settings.remove("accounts/list"); if(ui.accountBox->currentText() >= 0) settings.setValue("accounts/default", 0); else settings.remove("accounts/default"); if( !ui.accountBox->count() ) ui.deleteButton->setEnabled(false); QSettings dirSettingsPath(QSettings::defaultFormat(), QSettings::UserScope, "qutim/ICQ."+account, "account"); QDir accountDir(dirSettingsPath.fileName()); accountDir.cdUp(); //delete account directory if( accountDir.exists() ) removeAccountDir(accountDir.path()); } void loginDialog::removeAccountDir(const QString &path) { //recursively delete all files in directory QFileInfo fileInfo(path); if( fileInfo.isDir() ) { QDir dir( path ); QFileInfoList fileList = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot); for (int i = 0; i < fileList.count(); i++) removeAccountDir(fileList.at(i).absoluteFilePath()); dir.rmdir(path); } else { QFile::remove(path); } } void loginDialog::on_saveBox_stateChanged(int state) { if ( state ) { ui.passwordEdit->setEnabled(true); if ( ui.passwordEdit->text().isEmpty()) ui.signButton->setEnabled(false); else ui.signButton->setEnabled(true); } else { ui.passwordEdit->setEnabled(false); ui.signButton->setEnabled(true); } } qutim-0.2.0/src/globalsettings/0000755000175000017500000000000011273100754020124 5ustar euroelessareuroelessarqutim-0.2.0/src/globalsettings/globalproxysettings.h0000644000175000017500000000255311236355476024441 0ustar euroelessareuroelessar/* GlobalProxySettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 GLOBALPROXYSETTINGS_H #define GLOBALPROXYSETTINGS_H #include #include "ui_globalproxysettings.h" class GlobalProxySettings : public QWidget { Q_OBJECT public: GlobalProxySettings(const QString &profile_name, QWidget *parent = 0); ~GlobalProxySettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } void on_typeBox_2_currentIndexChanged(int type); signals: void settingsChanged(); void settingsSaved(); private: Ui::GlobalProxySettingsClass ui; bool changed; QString m_profile_name; }; #endif // GLOBALPROXYSETTINGS_H qutim-0.2.0/src/globalsettings/globalproxysettings.ui0000644000175000017500000001412511251526352024613 0ustar euroelessareuroelessar GlobalProxySettingsClass 0 0 504 428 GlobalProxySettings 0 QFrame::StyledPanel QFrame::Raised 4 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Type: Host: Port: 140 0 None HTTP SOCKS 5 false false 1 65535 Qt::Horizontal 40 20 false Authentication Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter User name: Password: false false QLineEdit::Password Qt::Vertical 20 40 authBox_2 toggled(bool) userNameEdit_2 setEnabled(bool) 94 145 128 172 authBox_2 toggled(bool) userPasswordEdit_2 setEnabled(bool) 51 150 109 202 qutim-0.2.0/src/globalsettings/abstractglobalsettings.h0000644000175000017500000000212411236355476025055 0ustar euroelessareuroelessar/* AbstractGlobalSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #ifndef ABSTRACTGLOBALSETTINGS_H_ #define ABSTRACTGLOBALSETTINGS_H_ class AbstractGlobalSettings { public: AbstractGlobalSettings(); virtual ~AbstractGlobalSettings(); static AbstractGlobalSettings &instance(); void setProfileName(const QString &profile_name); void loadNetworkSettings(); private: QString m_profile_name; }; #endif /*ABSTRACTGLOBALSETTINGS_H_*/ qutim-0.2.0/src/globalsettings/abstractglobalsettings.cpp0000644000175000017500000000470611236355476025420 0ustar euroelessareuroelessar/* AbstractGlobalSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "abstractglobalsettings.h" #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) #include "proxyfactory.h" #endif #include #include #include AbstractGlobalSettings::AbstractGlobalSettings() { } AbstractGlobalSettings::~AbstractGlobalSettings() { } AbstractGlobalSettings &AbstractGlobalSettings::instance() { static AbstractGlobalSettings ags; return ags; } void AbstractGlobalSettings::setProfileName(const QString &profile_name) { m_profile_name = profile_name; loadNetworkSettings(); } void AbstractGlobalSettings::loadNetworkSettings() { #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) static QPointer factory; if(!factory) { factory = new ProxyFactory; QNetworkProxyFactory::setApplicationProxyFactory(factory); } factory->loadSettings(); #else QNetworkProxy global_proxy; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("proxy"); int proxy_type = settings.value("proxy/proxyType", 0).toInt(); switch (proxy_type) { case 0: global_proxy.setType(QNetworkProxy::NoProxy); break; case 1: global_proxy.setType(QNetworkProxy::HttpProxy); break; case 2: global_proxy.setType(QNetworkProxy::Socks5Proxy); break; default: global_proxy.setType(QNetworkProxy::NoProxy); } global_proxy.setHostName(settings.value("proxy/host", "").toString()); global_proxy.setPort(settings.value("proxy/port", 1).toInt()); if ( settings.value("proxy/auth", false).toBool() ) { global_proxy.setUser(settings.value("proxy/user", "").toString()); global_proxy.setPassword(settings.value("proxy/pass", "").toString()); } settings.endGroup(); QNetworkProxy::setApplicationProxy(global_proxy); #endif } qutim-0.2.0/src/globalsettings/globalproxysettings.cpp0000644000175000017500000000673111236355476024776 0ustar euroelessareuroelessar/* GlobalProxySettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "globalproxysettings.h" GlobalProxySettings::GlobalProxySettings(const QString &profile_name, QWidget *parent) : QWidget(parent) { ui.setupUi(this); m_profile_name = profile_name; changed = false; loadSettings(); connect(ui.typeBox_2, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.proxyHostEdit_2, SIGNAL(textChanged(const QString &)), this, SLOT(widgetStateChanged())); connect(ui.proxyPortBox_2, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.authBox_2, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.userNameEdit_2, SIGNAL(textChanged(const QString &)), this, SLOT(widgetStateChanged())); connect(ui.userPasswordEdit_2, SIGNAL(textChanged(const QString &)), this, SLOT(widgetStateChanged())); } GlobalProxySettings::~GlobalProxySettings() { } void GlobalProxySettings::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("proxy"); ui.proxyHostEdit_2->setText(settings.value("proxy/host", "").toString()); ui.proxyPortBox_2->setValue(settings.value("proxy/port", 1).toInt()); ui.authBox_2->setChecked(settings.value("proxy/auth", false).toBool()); ui.userNameEdit_2->setText(settings.value("proxy/user", "").toString()); ui.userPasswordEdit_2->setText(settings.value("proxy/pass", "").toString()); int proxy_type = settings.value("proxy/proxyType", 0).toInt(); ui.typeBox_2->setCurrentIndex(proxy_type); on_typeBox_2_currentIndexChanged(proxy_type); settings.endGroup(); } void GlobalProxySettings::saveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); settings.beginGroup("proxy"); settings.setValue("proxy/proxyType", ui.typeBox_2->currentIndex()); settings.setValue("proxy/host", ui.proxyHostEdit_2->text()); settings.setValue("proxy/port", ui.proxyPortBox_2->value()); settings.setValue("proxy/auth", ui.authBox_2->isChecked()); settings.setValue("proxy/user", ui.userNameEdit_2->text()); settings.setValue("proxy/pass", ui.userPasswordEdit_2->text()); settings.endGroup(); if ( changed ) emit settingsSaved(); changed = false; } void GlobalProxySettings::on_typeBox_2_currentIndexChanged(int type) { if ( type ) { ui.proxyHostEdit_2->setEnabled(true); ui.proxyPortBox_2->setEnabled(true); ui.authBox_2->setEnabled(true); if ( ui.authBox_2->isChecked() ) { ui.userNameEdit_2->setEnabled(true); ui.userPasswordEdit_2->setEnabled(true); } } else { ui.userNameEdit_2->setEnabled(false); ui.userPasswordEdit_2->setEnabled(false); ui.proxyHostEdit_2->setEnabled(false); ui.proxyPortBox_2->setEnabled(false); ui.authBox_2->setEnabled(false); } } qutim-0.2.0/src/pluginsettings.cpp0000644000175000017500000000462711236355476020713 0ustar euroelessareuroelessar/***************************************************************************** Plugin System Copyright (c) 2008 by m0rph *************************************************************************** * * * 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 #include #include #include "pluginsettings.h" PluginSettings::PluginSettings(QWidget *parent) : QDialog(parent) { ui.setupUi(this); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); setMinimumSize(size()); moveToDesktopCenter(); ui.pluginsTree->header()->hide(); connect(ui.pluginsTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(changeStackWidget(QTreeWidgetItem *))); PluginSystem &ps = PluginSystem::instance(); for(int i = 0; i < ps.pluginsCount(); ++i) { SimplePluginInterface *plugin = ps.getPluginByIndex(i); addPluginItem(plugin); } } PluginSettings::~PluginSettings() { } void PluginSettings::moveToDesktopCenter() { PluginSystem::instance().centerizeWidget(this); } void PluginSettings::addPluginItem(SimplePluginInterface *plugin) { if(!plugin) return; QTreeWidgetItem *item = new QTreeWidgetItem(ui.pluginsTree); item->setText(0,plugin->name()); if( plugin->icon()) item->setIcon(0, *plugin->icon()); ui.pluginsStack->addWidget(plugin->settingsWidget()); } void PluginSettings::changeStackWidget(QTreeWidgetItem *current) { int index = ui.pluginsTree->indexOfTopLevelItem(current); ui.pluginsStack->setCurrentIndex(index); } void PluginSettings::closeEvent(QCloseEvent * /*event*/) { PluginSystem::instance().removePluginsSettingsWidget(); } void PluginSettings::on_cancelButton_clicked() { close(); } void PluginSettings::on_okButton_clicked() { PluginSystem::instance().saveAllPluginsSettings(); close(); } qutim-0.2.0/src/mainsettings.cpp0000644000175000017500000001200011236355476020321 0ustar euroelessareuroelessar/* mainSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "mainsettings.h" mainSettings::mainSettings(const QString &profile_name, QWidget *parent) : QWidget(parent) , m_iconManager(IconManager::instance()) , m_profile_name(profile_name) { ui.setupUi(this); changed = false; loadSettings(); updateAccountComboBox(); connect(ui.sizePosBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.hideBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.loginDialogBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.menuAccountBox,SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.singleBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.onTopBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.autoAwayBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.ahideBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.secondsBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.awayMinBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect(ui.accountComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); } mainSettings::~mainSettings() { } void mainSettings::loadSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QSettings profile_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); profile_settings.beginGroup("general"); ui.sizePosBox->setChecked(profile_settings.value("savesizpos", true).toBool()); ui.hideBox->setChecked(profile_settings.value("hidestart", false).toBool()); ui.menuAccountBox->setChecked(profile_settings.value("accountmenu", true).toBool()); ui.onTopBox->setChecked(profile_settings.value("ontop", false).toBool()); ui.ahideBox->setChecked(profile_settings.value("autohide", false).toBool()); ui.secondsBox->setValue(profile_settings.value("hidesecs", 60).toUInt()); ui.autoAwayBox->setChecked(profile_settings.value("autoaway", true).toBool()); ui.awayMinBox->setValue(profile_settings.value("awaymin", 10).toUInt()); m_current_account_icon = profile_settings.value("currentaccount", "").toString(); profile_settings.endGroup(); ui.loginDialogBox->setChecked(settings.value("general/showstart", true).toBool()); ui.singleBox->setChecked(settings.value("general/single", true).toBool()); } void mainSettings::saveSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QSettings profile_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "profilesettings"); profile_settings.beginGroup("general"); profile_settings.setValue("savesizpos", ui.sizePosBox->isChecked()); profile_settings.setValue("hidestart", ui.hideBox->isChecked()); profile_settings.setValue("accountmenu", ui.menuAccountBox->isChecked()); profile_settings.setValue("ontop", ui.onTopBox->isChecked()); profile_settings.setValue("autohide", ui.ahideBox->isChecked()); profile_settings.setValue("hidesecs", ui.secondsBox->value()); profile_settings.setValue("autoaway", ui.autoAwayBox->isChecked()); profile_settings.setValue("awaymin", ui.awayMinBox->value()); m_current_account_icon = ui.accountComboBox->itemData(ui.accountComboBox->currentIndex()).toString(); profile_settings.setValue("currentaccount", m_current_account_icon); profile_settings.endGroup(); settings.setValue("general/showstart", ui.loginDialogBox->isChecked()); settings.setValue("general/single", ui.singleBox->isChecked()); if ( changed ) emit settingsSaved(); changed = false; } void mainSettings::updateAccountComboBox() { ui.accountComboBox->clear(); PluginSystem &ps = PluginSystem::instance(); QList accounts_list = ps.getAccountsList(); foreach ( AccountStructure account, accounts_list ) { ui.accountComboBox->addItem(Icon(account.protocol_name.toLower(), IconInfo::Protocol), account.account_name, account.protocol_name + "." + account.account_name); } int account_index; if ( (account_index = ui.accountComboBox->findData(m_current_account_icon)) >= 0) { ui.accountComboBox->setCurrentIndex(account_index); } else { saveSettings(); } } qutim-0.2.0/src/3rdparty/0000755000175000017500000000000011273100754016653 5ustar euroelessareuroelessarqutim-0.2.0/src/3rdparty/qtwin/0000755000175000017500000000000011273100754020015 5ustar euroelessareuroelessarqutim-0.2.0/src/3rdparty/qtwin/qtwin.cpp0000755000175000017500000001532011255127345021674 0ustar euroelessareuroelessar/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Use, modification and distribution is allowed without limitation, ** warranty, liability or support of any kind. ** ****************************************************************************/ #include "qtwin.h" #include #include #include #include #include #ifdef Q_WS_WIN #include // Blur behind data structures #define DWM_BB_ENABLE 0x00000001 // fEnable has been specified #define DWM_BB_BLURREGION 0x00000002 // hRgnBlur has been specified #define DWM_BB_TRANSITIONONMAXIMIZED 0x00000004 // fTransitionOnMaximized has been specified #define WM_DWMCOMPOSITIONCHANGED 0x031E // Composition changed window message typedef struct _DWM_BLURBEHIND { DWORD dwFlags; BOOL fEnable; HRGN hRgnBlur; BOOL fTransitionOnMaximized; } DWM_BLURBEHIND, *PDWM_BLURBEHIND; typedef struct _MARGINS { int cxLeftWidth; int cxRightWidth; int cyTopHeight; int cyBottomHeight; } MARGINS, *PMARGINS; typedef HRESULT (WINAPI *PtrDwmIsCompositionEnabled)(BOOL* pfEnabled); typedef HRESULT (WINAPI *PtrDwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS* pMarInset); typedef HRESULT (WINAPI *PtrDwmEnableBlurBehindWindow)(HWND hWnd, const DWM_BLURBEHIND* pBlurBehind); typedef HRESULT (WINAPI *PtrDwmGetColorizationColor)(DWORD *pcrColorization, BOOL *pfOpaqueBlend); static PtrDwmIsCompositionEnabled pDwmIsCompositionEnabled= 0; static PtrDwmEnableBlurBehindWindow pDwmEnableBlurBehindWindow = 0; static PtrDwmExtendFrameIntoClientArea pDwmExtendFrameIntoClientArea = 0; static PtrDwmGetColorizationColor pDwmGetColorizationColor = 0; /* * Internal helper class that notifies windows if the * DWM compositing state changes and updates the widget * flags correspondingly. */ class WindowNotifier : public QWidget { public: WindowNotifier() { winId(); } void addWidget(QWidget *widget) { widgets.append(widget); } void removeWidget(QWidget *widget) { widgets.removeAll(widget); } bool winEvent(MSG *message, long *result); private: QWidgetList widgets; }; static bool resolveLibs() { if (!pDwmIsCompositionEnabled) { QLibrary dwmLib(QString::fromAscii("dwmapi")); pDwmIsCompositionEnabled =(PtrDwmIsCompositionEnabled)dwmLib.resolve("DwmIsCompositionEnabled"); pDwmExtendFrameIntoClientArea = (PtrDwmExtendFrameIntoClientArea)dwmLib.resolve("DwmExtendFrameIntoClientArea"); pDwmEnableBlurBehindWindow = (PtrDwmEnableBlurBehindWindow)dwmLib.resolve("DwmEnableBlurBehindWindow"); pDwmGetColorizationColor = (PtrDwmGetColorizationColor)dwmLib.resolve("DwmGetColorizationColor"); } return pDwmIsCompositionEnabled != 0; } #endif /*! * Chekcs and returns true if Windows DWM composition * is currently enabled on the system. * * To get live notification on the availability of * this feature, you will currently have to * reimplement winEvent() on your widget and listen * for the WM_DWMCOMPOSITIONCHANGED event to occur. * */ bool QtWin::isCompositionEnabled() { #ifdef Q_WS_WIN if (resolveLibs()) { HRESULT hr = S_OK; BOOL isEnabled = false; hr = pDwmIsCompositionEnabled(&isEnabled); if (SUCCEEDED(hr)) return isEnabled; } #endif return false; } /*! * Enables Blur behind on a Widget. * * \a enable tells if the blur should be enabled or not */ bool QtWin::enableBlurBehindWindow(QWidget *widget, bool enable) { Q_ASSERT(widget); bool result = false; #ifdef Q_WS_WIN if (resolveLibs()) { DWM_BLURBEHIND bb = {0}; HRESULT hr = S_OK; bb.fEnable = enable; bb.dwFlags = DWM_BB_ENABLE; bb.hRgnBlur = NULL; widget->setAttribute(Qt::WA_TranslucentBackground, enable); widget->setAttribute(Qt::WA_NoSystemBackground, enable); hr = pDwmEnableBlurBehindWindow(widget->winId(), &bb); if (SUCCEEDED(hr)) { result = true; windowNotifier()->addWidget(widget); } } #endif return result; } /*! * ExtendFrameIntoClientArea. * * This controls the rendering of the frame inside the window. * Note that passing margins of -1 (the default value) will completely * remove the frame from the window. * * \note you should not call enableBlurBehindWindow before calling * this functions * * \a enable tells if the blur should be enabled or not */ bool QtWin::extendFrameIntoClientArea(QWidget *widget, int left, int top, int right, int bottom) { Q_ASSERT(widget); Q_UNUSED(left); Q_UNUSED(top); Q_UNUSED(right); Q_UNUSED(bottom); bool result = false; #ifdef Q_WS_WIN if (resolveLibs()) { QLibrary dwmLib(QString::fromAscii("dwmapi")); HRESULT hr = S_OK; MARGINS m = {left, top, right, bottom}; hr = pDwmExtendFrameIntoClientArea(widget->winId(), &m); if (SUCCEEDED(hr)) { result = true; windowNotifier()->addWidget(widget); } widget->setAttribute(Qt::WA_TranslucentBackground, result); } #endif return result; } /*! * Returns the current colorizationColor for the window. * * \a enable tells if the blur should be enabled or not */ QColor QtWin::colorizatinColor() { QColor resultColor = QApplication::palette().window().color(); #ifdef Q_WS_WIN if (resolveLibs()) { DWORD color = 0; BOOL opaque = FALSE; QLibrary dwmLib(QString::fromAscii("dwmapi")); HRESULT hr = S_OK; hr = pDwmGetColorizationColor(&color, &opaque); if (SUCCEEDED(hr)) resultColor = QColor(color); } #endif return resultColor; } #ifdef Q_WS_WIN WindowNotifier *QtWin::windowNotifier() { static WindowNotifier *windowNotifierInstance = 0; if (!windowNotifierInstance) windowNotifierInstance = new WindowNotifier; return windowNotifierInstance; } /* Notify all enabled windows that the DWM state changed */ bool WindowNotifier::winEvent(MSG *message, long *result) { if (message && message->message == WM_DWMCOMPOSITIONCHANGED) { bool compositionEnabled = QtWin::isCompositionEnabled(); foreach(QWidget * widget, widgets) { if (widget) { widget->setAttribute(Qt::WA_NoSystemBackground, compositionEnabled); } widget->update(); } } return QWidget::winEvent(message, result); } #endif qutim-0.2.0/src/3rdparty/qtwin/qtwin.h0000755000175000017500000000215511255127345021343 0ustar euroelessareuroelessar/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Use, modification and distribution is allowed without limitation, ** warranty, liability or support of any kind. ** ****************************************************************************/ #ifndef QTWIN_H #define QTWIN_H #include #include /** * This is a helper class for using the Desktop Window Manager * functionality on Windows 7 and Windows Vista. On other platforms * these functions will simply not do anything. */ class WindowNotifier; class QtWin { public: static bool enableBlurBehindWindow(QWidget *widget, bool enable = true); static bool extendFrameIntoClientArea(QWidget *widget, int left = -1, int top = -1, int right = -1, int bottom = -1); static bool isCompositionEnabled(); static QColor colorizatinColor(); private: static WindowNotifier *windowNotifier(); }; #endif // QTWIN_H qutim-0.2.0/src/3rdparty/qtsolutions/0000755000175000017500000000000011273100754021257 5ustar euroelessareuroelessarqutim-0.2.0/src/3rdparty/qtsolutions/qtlockedfile.h0000644000175000017500000000667111236355476024124 0ustar euroelessareuroelessar/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #ifndef QTLOCKEDFILE_H #define QTLOCKEDFILE_H #include #ifdef Q_OS_WIN #include #endif #if defined(Q_WS_WIN) # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) # define QT_QTLOCKEDFILE_EXPORT # elif defined(QT_QTLOCKEDFILE_IMPORT) # if defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # endif # define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport) # elif defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport) # endif #else # define QT_QTLOCKEDFILE_EXPORT #endif class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile { public: enum LockMode { NoLock = 0, ReadLock, WriteLock }; QtLockedFile(); QtLockedFile(const QString &name); ~QtLockedFile(); bool open(OpenMode mode); bool lock(LockMode mode, bool block = true); bool unlock(); bool isLocked() const; LockMode lockMode() const; private: #ifdef Q_OS_WIN Qt::HANDLE wmutex; Qt::HANDLE rmutex; QVector rmutexes; QString mutexname; Qt::HANDLE getMutexHandle(int idx, bool doCreate); bool waitMutex(Qt::HANDLE mutex, bool doBlock); #endif LockMode m_lock_mode; }; #endif qutim-0.2.0/src/3rdparty/qtsolutions/qtlockedfile_win.cpp0000644000175000017500000001515711236355476025333 0ustar euroelessareuroelessar/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include "qtlockedfile.h" #include #include #define MUTEX_PREFIX "QtLockedFile mutex " // Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS #define MAX_READERS MAXIMUM_WAIT_OBJECTS Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) { if (mutexname.isEmpty()) { QFileInfo fi(*this); mutexname = QString::fromLatin1(MUTEX_PREFIX) + fi.absoluteFilePath().toLower(); } QString mname(mutexname); if (idx >= 0) mname += QString::number(idx); Qt::HANDLE mutex; if (doCreate) { QT_WA( { mutex = CreateMutexW(NULL, FALSE, (TCHAR*)mname.utf16()); }, { mutex = CreateMutexA(NULL, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { qErrnoWarning("QtLockedFile::lock(): CreateMutex failed"); return 0; } } else { QT_WA( { mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); }, { mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { if (GetLastError() != ERROR_FILE_NOT_FOUND) qErrnoWarning("QtLockedFile::lock(): OpenMutex failed"); return 0; } } return mutex; } bool QtLockedFile::waitMutex(Qt::HANDLE mutex, bool doBlock) { Q_ASSERT(mutex); DWORD res = WaitForSingleObject(mutex, doBlock ? INFINITE : 0); switch (res) { case WAIT_OBJECT_0: case WAIT_ABANDONED: return true; break; case WAIT_TIMEOUT: break; default: qErrnoWarning("QtLockedFile::lock(): WaitForSingleObject failed"); } return false; } bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); if (!wmutex && !(wmutex = getMutexHandle(-1, true))) return false; if (!waitMutex(wmutex, block)) return false; if (mode == ReadLock) { int idx = 0; for (; idx < MAX_READERS; idx++) { rmutex = getMutexHandle(idx, false); if (!rmutex || waitMutex(rmutex, false)) break; CloseHandle(rmutex); } bool ok = true; if (idx >= MAX_READERS) { qWarning("QtLockedFile::lock(): too many readers"); rmutex = 0; ok = false; } else if (!rmutex) { rmutex = getMutexHandle(idx, true); if (!rmutex || !waitMutex(rmutex, false)) ok = false; } if (!ok && rmutex) { CloseHandle(rmutex); rmutex = 0; } ReleaseMutex(wmutex); if (!ok) return false; } else { Q_ASSERT(rmutexes.isEmpty()); for (int i = 0; i < MAX_READERS; i++) { Qt::HANDLE mutex = getMutexHandle(i, false); if (mutex) rmutexes.append(mutex); } if (rmutexes.size()) { DWORD res = WaitForMultipleObjects(rmutexes.size(), rmutexes.constData(), TRUE, block ? INFINITE : 0); if (res != WAIT_OBJECT_0 && res != WAIT_ABANDONED) { if (res != WAIT_TIMEOUT) qErrnoWarning("QtLockedFile::lock(): WaitForMultipleObjects failed"); m_lock_mode = WriteLock; // trick unlock() to clean up - semiyucky unlock(); return false; } } } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; if (m_lock_mode == ReadLock) { ReleaseMutex(rmutex); CloseHandle(rmutex); rmutex = 0; } else { foreach(Qt::HANDLE mutex, rmutexes) { ReleaseMutex(mutex); CloseHandle(mutex); } rmutexes.clear(); ReleaseMutex(wmutex); } m_lock_mode = QtLockedFile::NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); if (wmutex) CloseHandle(wmutex); } qutim-0.2.0/src/3rdparty/qtsolutions/qtlockedfile_unix.cpp0000644000175000017500000000721311236355476025513 0ustar euroelessareuroelessar/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include #include #include #include #include "qtlockedfile.h" bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = (mode == ReadLock) ? F_RDLCK : F_WRLCK; int cmd = block ? F_SETLKW : F_SETLK; int ret = fcntl(handle(), cmd, &fl); if (ret == -1) { if (errno != EINTR && errno != EAGAIN) qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = F_UNLCK; int ret = fcntl(handle(), F_SETLKW, &fl); if (ret == -1) { qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); } qutim-0.2.0/src/3rdparty/qtsolutions/qtlocalpeer.h0000644000175000017500000000556511236355476023772 0ustar euroelessareuroelessar/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include #include #include namespace QtLP_Private { #include "qtlockedfile.h" } class QtLocalPeer : public QObject { Q_OBJECT public: QtLocalPeer(QObject *parent = 0, const QString &appId = QString()); bool isClient(); bool sendMessage(const QString &message, int timeout); QString applicationId() const { return id; } Q_SIGNALS: void messageReceived(const QString &message); protected Q_SLOTS: void receiveConnection(); protected: QString id; QString socketName; QLocalServer* server; QtLP_Private::QtLockedFile lockFile; private: static const char* ack; }; qutim-0.2.0/src/3rdparty/qtsolutions/qtlocalpeer.cpp0000644000175000017500000001520611236355476024316 0ustar euroelessareuroelessar/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include "qtlocalpeer.h" #include #include #if defined(Q_OS_WIN) #include #include typedef BOOL(WINAPI*PProcessIdToSessionId)(DWORD,DWORD*); static PProcessIdToSessionId pProcessIdToSessionId = 0; #endif #if defined(Q_OS_UNIX) #include #endif namespace QtLP_Private { #include "qtlockedfile.cpp" #if defined(Q_OS_WIN) #include "qtlockedfile_win.cpp" #else #include "qtlockedfile_unix.cpp" #endif } const char* QtLocalPeer::ack = "ack"; QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId) : QObject(parent), id(appId) { QString prefix = id; if (id.isEmpty()) { id = QCoreApplication::applicationFilePath(); #if defined(Q_OS_WIN) id = id.toLower(); #endif prefix = id.section(QLatin1Char('/'), -1); } prefix.remove(QRegExp("[^a-zA-Z]")); prefix.truncate(6); QByteArray idc = id.toUtf8(); quint16 idNum = qChecksum(idc.constData(), idc.size()); socketName = QLatin1String("qtsingleapp-") + prefix + QLatin1Char('-') + QString::number(idNum, 16); #if defined(Q_OS_WIN) if (!pProcessIdToSessionId) { QLibrary lib("kernel32"); pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); } if (pProcessIdToSessionId) { DWORD sessionId = 0; pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); socketName += QLatin1Char('-') + QString::number(sessionId, 16); } #else socketName += QLatin1Char('-') + QString::number(::getuid(), 16); #endif server = new QLocalServer(this); QString lockName = QDir(QDir::tempPath()).absolutePath() + QLatin1Char('/') + socketName + QLatin1String("-lockfile"); lockFile.setFileName(lockName); lockFile.open(QIODevice::ReadWrite); } bool QtLocalPeer::isClient() { if (lockFile.isLocked()) return false; if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) return true; bool res = server->listen(socketName); #if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) // ### Workaround if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { QFile::remove(QDir::cleanPath(QDir::tempPath())+QLatin1Char('/')+socketName); res = server->listen(socketName); } #endif if (!res) qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); return false; } bool QtLocalPeer::sendMessage(const QString &message, int timeout) { if (!isClient()) return false; QLocalSocket socket; bool connOk = false; for(int i = 0; i < 2; i++) { // Try twice, in case the other instance is just starting up socket.connectToServer(socketName); connOk = socket.waitForConnected(timeout/2); if (connOk || i) break; int ms = 250; #if defined(Q_OS_WIN) Sleep(DWORD(ms)); #else struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; nanosleep(&ts, NULL); #endif } if (!connOk) return false; QByteArray uMsg(message.toUtf8()); QDataStream ds(&socket); ds.writeBytes(uMsg.constData(), uMsg.size()); bool res = socket.waitForBytesWritten(timeout); res &= socket.waitForReadyRead(timeout); // wait for ack res &= (socket.read(qstrlen(ack)) == ack); return res; } void QtLocalPeer::receiveConnection() { QLocalSocket* socket = server->nextPendingConnection(); if (!socket) return; while (socket->bytesAvailable() < (int)sizeof(quint32)) socket->waitForReadyRead(); QDataStream ds(socket); QByteArray uMsg; quint32 remaining; ds >> remaining; uMsg.resize(remaining); int got = 0; char* uMsgBuf = uMsg.data(); do { got = ds.readRawData(uMsgBuf, remaining); remaining -= got; uMsgBuf += got; } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); if (got < 0) { qWarning() << "QtLocalPeer: Message reception failed" << socket->errorString(); delete socket; return; } QString message(QString::fromUtf8(uMsg)); socket->write(ack, qstrlen(ack)); socket->waitForBytesWritten(1000); delete socket; emit messageReceived(message); //### (might take a long time to return) } qutim-0.2.0/src/3rdparty/qtsolutions/qtlockedfile.cpp0000644000175000017500000001434111236355476024450 0ustar euroelessareuroelessar/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include "qtlockedfile.h" /*! \class QtLockedFile \brief The QtLockedFile class extends QFile with advisory locking functions. A file may be locked in read or write mode. Multiple instances of \e QtLockedFile, created in multiple processes running on the same machine, may have a file locked in read mode. Exactly one instance may have it locked in write mode. A read and a write lock cannot exist simultaneously on the same file. The file locks are advisory. This means that nothing prevents another process from manipulating a locked file using QFile or file system functions offered by the OS. Serialization is only guaranteed if all processes that access the file use QLockedFile. Also, while holding a lock on a file, a process must not open the same file again (through any API), or locks can be unexpectedly lost. The lock provided by an instance of \e QtLockedFile is released whenever the program terminates. This is true even when the program crashes and no destructors are called. */ /*! \enum QtLockedFile::LockMode This enum describes the available lock modes. \value ReadLock A read lock. \value WriteLock A write lock. \value NoLock Neither a read lock nor a write lock. */ /*! Constructs an unlocked \e QtLockedFile object. This constructor behaves in the same way as \e QFile::QFile(). \sa QFile::QFile() */ QtLockedFile::QtLockedFile() : QFile() { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Constructs an unlocked QtLockedFile object with file \a name. This constructor behaves in the same way as \e QFile::QFile(const QString&). \sa QFile::QFile() */ QtLockedFile::QtLockedFile(const QString &name) : QFile(name) { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Opens the file in OpenMode \a mode. This is identical to QFile::open(), with the one exception that the Truncate mode flag is disallowed. Truncation would conflict with the advisory file locking, since the file would be modified before the write lock is obtained. If truncation is required, use resize(0) after obtaining the write lock. Returns true if successful; otherwise false. \sa QFile::open(), QFile::resize() */ bool QtLockedFile::open(OpenMode mode) { if (mode & QIODevice::Truncate) { qWarning("QtLockedFile::open(): Truncate mode not allowed."); return false; } return QFile::open(mode); } /*! Returns \e true if this object has a in read or write lock; otherwise returns \e false. \sa lockMode() */ bool QtLockedFile::isLocked() const { return m_lock_mode != NoLock; } /*! Returns the type of lock currently held by this object, or \e QtLockedFile::NoLock. \sa isLocked() */ QtLockedFile::LockMode QtLockedFile::lockMode() const { return m_lock_mode; } /*! \fn bool QtLockedFile::lock(LockMode mode, bool block = true) Obtains a lock of type \a mode. The file must be opened before it can be locked. If \a block is true, this function will block until the lock is aquired. If \a block is false, this function returns \e false immediately if the lock cannot be aquired. If this object already has a lock of type \a mode, this function returns \e true immediately. If this object has a lock of a different type than \a mode, the lock is first released and then a new lock is obtained. This function returns \e true if, after it executes, the file is locked by this object, and \e false otherwise. \sa unlock(), isLocked(), lockMode() */ /*! \fn bool QtLockedFile::unlock() Releases a lock. If the object has no lock, this function returns immediately. This function returns \e true if, after it executes, the file is not locked by this object, and \e false otherwise. \sa lock(), isLocked(), lockMode() */ /*! \fn QtLockedFile::~QtLockedFile() Destroys the \e QtLockedFile object. If any locks were held, they are released. */ qutim-0.2.0/src/logindialog.ui0000644000175000017500000001413211251361263017733 0ustar euroelessareuroelessar loginDialogClass Qt::NonModal 0 0 162 250 Account :/icons/icq.png:/icons/icq.png 0 Account: 4 true 10 true false Remove profile ... :/icons/crystal_project/delete_user.png:/icons/crystal_project/delete_user.png 0 Password: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximum length of ICQ password is limited to 8 characters.</span></p></body></html> 32 QLineEdit::Password 0 true Save my password true Autoconnect true Secure login true Show on startup 4 Sign in :/icons/crystal_project/signin.png:/icons/crystal_project/signin.png true Qt::Vertical 20 40 accountBox passwordEdit saveBox connectBox securBox signButton deleteButton signButton clicked() loginDialogClass accept() 93 241 6 9 qutim-0.2.0/src/qutim.h0000644000175000017500000001151111236355476016426 0ustar euroelessareuroelessar/* qutim Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 QUTIM_H #define QUTIM_H //#include #include #include #include #include #include "../include/qutim/layerinterface.h" #include "iconmanager.h" #include "pluginsettings.h" //#include "ui_qutim.h" #include "idle/idle.h" //#if defined(Q_OS_WIN32) || defined(Q_OS_MAC) // #include "ex/exsystrayicon.h" //#else #include //#endif class QCloseEvent; class QMutex; class QMenu; class aboutInfo; class AbstractLayer; class eventEater : public QObject { Q_OBJECT public: eventEater(QObject *parent = 0) : QObject(parent), fChanged(false) { } inline bool getChanged() const { return fChanged; } inline void setChanged(const bool changed) { fChanged = changed; } protected: bool fChanged; bool eventFilter(QObject *obj, QEvent *event); }; class qutIM : public QObject, public EventHandler { Q_OBJECT public: qutIM(QObjectList plugins, QObject *parent = 0); virtual ~qutIM(); static qutIM *instance(); bool isShouldRun() { return bShouldRun; } void reloadGeneralSettings(); void updateTrayIcon(const QIcon &); void animateNewMessageInTray(); void stopNewMessageAnimation(); void showBallon(const QString &title, const QString &message, int time); void reloadStyleLanguage(); void addActionToList(QAction *); void processEvent(Event &e); inline const QString &translationPath() const { return m_translation_path; } private slots: // void trayActivated(QSystemTrayIcon::ActivationReason); void appQuit(); void qutimSettingsMenu(); void qutimPluginSettingsMenu();//!< Now it only shows plug-in settings window. void pluginSettingsDeleted(QObject *); void destroySettings(); void switchUser(); void openGuiSettings(); void guiSettingsDeleted(QObject *); void checkEventChanging(); void updateTrayToolTip(); void on_infoButton_clicked(); void infoWindowDestroyed(QObject *); // void on_showHideButton_clicked(); void onSecondsIdle(int); void updateMessageIcon(); // void on_showHideGroupsButton_clicked(); // void on_soundOnOffButton_clicked(); // void on_toolButton_clicked(); //protected: // virtual void resizeEvent ( QResizeEvent * event ); // virtual void closeEvent(QCloseEvent *event); // virtual void focusOutEvent( QFocusEvent * event ); // virtual void focusInEvent ( QFocusEvent * event ); // void keyPressEvent ( QKeyEvent *event ); private: static qutIM *fInstance; static QMutex fInstanceGuard; // Ui::qutIMClass ui; QList m_plugin_actions; QAction *quitAction; QAction *settingsAction; QAction *m_pluginSettingsAction;//!< This action connected with qutimPluginSettingsMenu(); QAction *switchUserAction; QAction *m_gui_settings_action; QMenu *trayMenu; QMenu *mainMenu; bool bShouldRun; bool createMenuAccounts; bool letMeQuit; IconManager& m_iconManager;//!< use it to get icons from file or program bool unreadMessages; bool autoHide; int hideSec; bool m_auto_away; bool msgIcon; quint32 m_auto_away_minutes; /* * Event Id's */ quint16 m_event_qutim_settings; quint16 m_event_plugins_settings; quint16 m_event_gui_settings; quint16 m_event_switch_user; quint16 m_event_show_menu; quint16 m_event_about; TrayLayerInterface *trayIcon; //#ifndef Q_OS_WIN32 // QSystemTrayIcon *trayIcon; //#else // ExSysTrayIcon *trayIcon; //#endif QTimer *timer; eventEater *eventObject; aboutInfo *infoWindow; bool aboutWindowOpen; QList m_translators; QString m_translation_path; QIcon tempIcon; // Idle detector Idle fIdleDetector; void createTrayIcon(); void createActions(); void createMainMenu(); void saveMainSettings(); void loadMainSettings(); void updateTrayStatus(); void readMessages(); void loadStyle(); void loadTranslation( const QFileInfoList &files ); void loadTranslation(const int); void readTranslation(); void initIcons();//!< It loads all icons by icon manager. AbstractLayer &m_abstract_layer; QString m_profile_name; bool m_switch_user; PluginSettings *m_plugin_settings; signals: void updateTranslation(); }; #endif // QUTIM_H qutim-0.2.0/src/aboutinfo.cpp0000644000175000017500000000413011271115625017574 0ustar euroelessareuroelessar/* aboutInfo Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "aboutinfo.h" #include #include #include #include #include aboutInfo::aboutInfo(QWidget *parent) : QWidget(parent) { ui.setupUi(this); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); ui.label->setText(ui.label->text().arg(QCoreApplication::applicationVersion(), QLatin1String(qVersion()))); ui.label_3->setText(ui.label_3->text().arg(tr("Support project with a donation:"), tr("Yandex.Money"))); QString translators = tr("Enter there your names, dear translaters"); if(translators == QLatin1String("Enter there your names, dear translaters")) ui.tabWidget->removeTab(3); else ui.translatorsTextBrowser->setText(translators); connect(ui.label_4, SIGNAL(linkActivated(QString)), this, SLOT(showLicense())); } void aboutInfo::showLicense() { static QPointer license; if(!license.isNull()) { license->show(); license->raise(); return; } license = new QDialog(this); license->setWindowTitle(tr("GNU General Public License, version 2")); license->setMinimumSize(500, 400); QVBoxLayout *layout = new QVBoxLayout(license); QTextBrowser *browser = new QTextBrowser(license); layout->addWidget(browser); browser->setText(QLatin1String((const char *)QResource( ":/GPL" ).data())); license->show(); } aboutInfo::~aboutInfo() { } qutim-0.2.0/src/qutimtranslation.cpp0000644000175000017500000000502111273076304021226 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "qutimtranslation.h" #include #include QString QutimTranslatorHook::translate( const char *context, const char *sourceText, const char *comment ) const { TranslatorInterface *translator = SystemsCity::Translator(); if(!translator) return QString(); QString result; if(context && context[0]) result = translator->translate(context, sourceText, comment); if(result.isEmpty()) result = translator->translate(0, sourceText, comment); return result; } QutimTranslation::QutimTranslation( const QString &dir ) : m_dir(dir), m_translators(0), m_locale(0), m_lang(0) { } QutimTranslation::~QutimTranslation() { deinit(); if(m_lang) delete m_lang; if(m_locale) delete m_locale; } void QutimTranslation::init() { if(m_translators) deinit(); static const QStringList filter = QStringList() << "*.qm"; QFileInfoList files = QDir(m_dir).entryInfoList(filter, QDir::Files); foreach(const QFileInfo &info, files) { qDebug() << info.absoluteFilePath(); QTranslator *translator = new QTranslator(this); translator->load(info.absoluteFilePath()); *m_translators << translator; } } void QutimTranslation::deinit() { if(!m_translators) return; QList translators = *m_translators; m_translators->clear(); qDeleteAll(*translators); } QString QutimTranslation::translate( const char *context, const char *source_text, const char *comment = 0, int n = -1 ) const { if(!m_translators) init(); QString result; for(int i=0; isize(); i++) { result = m_translators->at(i)->translate(context, source_text, comment, n); if(!result.isEmpty()) break; } return result; } QString QutimTranslation::lang() { if(!m_lang) m_lang = new QString(QDir(m_dir).dirName()); return *m_lang; } QLocale QutimTranslation::locale() { if(!m_locale) m_locale = new QLocale(lang()); return *m_locale; } qutim-0.2.0/src/pluginsystem.cpp0000644000175000017500000020412211273076304020356 0ustar euroelessareuroelessar/***************************************************************************** Plugin System Copyright (c) 2008 by m0rph 2008-2009 by Rustam Chakin Nigmatullin Ruslan *************************************************************************** * * * 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. * * * *************************************************************************** *****************************************************************************/ #define QUTIM_BUILD_VERSION_MAJOR 0 #define QUTIM_BUILD_VERSION_MINOR 2 #define QUTIM_BUILD_VERSION_SECMINOR 0 #include #include #include #include #include #include #include "pluginsystem.h" #include "systeminfo.h" #include "abstractlayer.h" #include "abstractcontextlayer.h" #include "console.h" #include "iconmanager.h" #ifndef NO_CORE_ANTISPAM # include "corelayers/antispam/abstractantispamlayer.h" #endif #ifndef NO_CORE_CHAT # include "corelayers/chat/chatlayerclass.h" #endif #ifndef NO_CORE_CONTACTLIST # include "corelayers/contactlist/defaultcontactlist.h" #endif #ifndef NO_CORE_EMOTICONS # include "corelayers/emoticons/abstractemoticonslayer.h" #endif #ifndef NO_CORE_HISTORY # include "corelayers/history/jsonengine.h" #endif #ifndef NO_CORE_NOTIFICATION # include "corelayers/notification/defaultnotificationlayer.h" #endif #ifndef NO_CORE_SETTINGS # include "corelayers/settings/qsettingslayer.h" #endif #ifndef NO_CORE_SOUNDENGINE # include "corelayers/soundengine/defaultsoundenginelayer.h" #endif #ifndef NO_CORE_SPELLER # include "corelayers/speller/spellerlayerclass.h" #endif #ifndef NO_CORE_STATUS # include "corelayers/status/defaultstatuslayer.h" #endif #ifndef NO_CORE_TRAY # include "corelayers/tray/defaulttraylayer.h" #endif #ifndef NO_CORE_VIDEOENGINE //# include "corelayers/videoengine/defaultvideoenginelayer.h" #endif #include #include #include #include enum DebugType { DebugConsole = 0x01, DebugFile = 0x02, DebugWindow = 0x04 }; Q_DECLARE_FLAGS(DebugTypes,DebugType) static DebugTypes debug_type; static int &debug_int = *reinterpret_cast( &debug_type ); static std::ofstream debug_out; static Console *debug_console = 0; #define DEBUG_MESSAGE(Type) \ case Qt##Type##Msg: \ if( debug_type & DebugConsole ) \ printf( #Type ": %s\n", msg ) ; \ if( debug_type & DebugFile ) \ debug_out << #Type ": " << msg << std::endl; \ break; void globalHandleDebug(QtMsgType type, const char *msg) { switch( type ) { DEBUG_MESSAGE(Debug) DEBUG_MESSAGE(Warning) DEBUG_MESSAGE(Critical) DEBUG_MESSAGE(Fatal) } if( debug_type & DebugFile ) debug_out.flush() ; if( (debug_type & DebugWindow) && debug_console ) debug_console->appendMsg( QString::fromLocal8Bit( msg, qstrlen( msg ) ), type ); } QSettings::SettingsMap parseDict(const QDomNode & root_element) { QSettings::SettingsMap style_hash; if (root_element.isNull()) return style_hash; QDomNode subelement =root_element;//.firstChild(); QString key=""; for (QDomNode node = subelement.firstChild(); !node.isNull(); node = node.nextSibling()) { QDomElement element = node.toElement(); if(element.nodeName()=="key") key=element.text(); else { QVariant value; if(element.nodeName()=="true") value=QVariant(true); else if(element.nodeName()=="false") value=QVariant(false); else if(element.nodeName()=="real") value=QVariant(element.text().toDouble()); else if(element.nodeName()=="string") value=QVariant(element.text()); else if(element.nodeName()=="integer") value=QVariant(element.text().toInt()); else if(element.nodeName()=="dict") value = parseDict(node); style_hash.insert(key,value); } } return style_hash; } bool plistReadFunc(QIODevice &device, QSettings::SettingsMap &map) { QDomDocument theme_dom; if (theme_dom.setContent(&device)) { QDomElement root_element = theme_dom.documentElement(); if (root_element.isNull()) return false; map = parseDict(root_element.firstChild()); } return true; } bool plistWriteFunc(QIODevice &device, const QSettings::SettingsMap &map) { return false; } struct PluginSystem::EventId { quint16 contact_context; quint16 item_added; quint16 item_removed; quint16 item_moved; quint16 item_icon_changed; quint16 item_changed_name; quint16 item_changed_status; quint16 account_is_online; quint16 sending_message_before_showing; quint16 sending_message_after_showing; quint16 senging_message_after_showing_last_output; quint16 pointers_are_initialized; quint16 system_notification; quint16 user_notification; quint16 receiving_message_first_level; quint16 receiving_message_second_level; quint16 receiving_message_third_level; quint16 receiving_message_fourth_level; quint16 item_typing_notification; quint16 item_ask_tooltip; quint16 item_ask_additional_info; quint16 all_plugins_loaded; }; static struct AbstractArgStructure { AbstractArgStructure() : argc(0), argv(0) {} int argc; char **argv; } qutIM_args; PluginSystem::PluginSystem() : m_abstract_layer(AbstractLayer::instance()), m_new_event_id(0) { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); #if defined(Q_OS_WIN) debug_int = settings.value("debug/type", 0).toInt(); #else debug_int = settings.value("debug/type", DebugConsole).toInt(); #endif if(debug_type & DebugFile) { QString file_name = QFileInfo(settings.fileName()).absoluteDir().filePath(settings.value("debug/file","system.log").toString()); bool append = settings.value("debug/append",false).toBool(); debug_out.open(file_name.toLocal8Bit(), append ? std::ios_base::app : std::ios_base::out ); } debug_console = 0; qInstallMsgHandler(globalHandleDebug); } void PluginSystem::init() { qRegisterMetaType("QTextCursor"); if(debug_type & DebugWindow) debug_console = new Console(); QCoreApplication::setApplicationName("qutIM"); QCoreApplication::setApplicationVersion("0.2"); QCoreApplication::setOrganizationDomain("qutim.org"); m_plist_format = QSettings::registerFormat("plist",plistReadFunc,plistWriteFunc); m_events = new EventId; m_events->contact_context = registerEventHandler("Core/ContactList/ContactContext"); m_events->item_added = registerEventHandler("Core/ContactList/ItemAdded"); m_events->item_removed = registerEventHandler("Core/ContactList/ItemRemoved"); m_events->item_moved = registerEventHandler("Core/ContactList/ItemMoved"); m_events->item_icon_changed = registerEventHandler("Core/ContactList/ItemIconChanged"); m_events->item_changed_name = registerEventHandler("Core/ContactList/ItemChangedName"); m_events->item_changed_status = registerEventHandler("Core/ContactList/ItemChangedStatus"); m_events->account_is_online = registerEventHandler("Core/Protocol/AccountIsOnline"); m_events->sending_message_before_showing = registerEventHandler("Core/ChatWindow/SendLevel1"); m_events->sending_message_after_showing = registerEventHandler("Core/ChatWindow/SendLevel2"); m_events->senging_message_after_showing_last_output = registerEventHandler("Core/ChatWindow/SendLevel3"); m_events->pointers_are_initialized = registerEventHandler("Core/Layers/Initialized"); m_events->system_notification = registerEventHandler("Core/Notification/System"); m_events->user_notification = registerEventHandler("Core/Notification/User"); m_events->receiving_message_first_level = registerEventHandler("Core/ChatWindow/ReceiveLevel1"); m_events->receiving_message_second_level = registerEventHandler("Core/ChatWindow/ReceiveLevel2"); m_events->receiving_message_third_level = registerEventHandler("Core/ChatWindow/ReceiveLevel3"); m_events->receiving_message_fourth_level = registerEventHandler("Core/ChatWindow/ReceiveLevel4"); m_events->item_typing_notification = registerEventHandler("Core/Notification/Typing"); m_events->item_ask_tooltip = registerEventHandler("Core/ContactList/AskTooltip"); m_events->item_ask_additional_info = registerEventHandler("Core/ContactList/AskItemAdditionalInfo"); m_events->all_plugins_loaded = registerEventHandler("Core/AllPluginsLoaded"); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QDir dir = qApp->applicationDirPath(); QDir::setCurrent( qApp->applicationDirPath() ); QDir current_dir = QDir::current(); QString path = dir.absolutePath(); // 1. Windows, ./ m_share_paths << current_dir.relativeFilePath( path ); // 2. MacOS X, ../Resources dir.cdUp(); #if defined(Q_WS_MAC) path = dir.absolutePath(); path += QDir::separator(); path += "Resources"; m_share_paths << current_dir.relativeFilePath( path ); #endif // 3. Unix, ../share/qutim path = dir.absolutePath(); path += QDir::separator(); path += "share"; path += QDir::separator(); path += "qutim"; m_share_paths << current_dir.relativeFilePath( path ); // 4. Safe way, ~/.config/qutim QFileInfo config_dir = settings.fileName(); dir = qApp->applicationDirPath(); if( config_dir.canonicalPath().contains( dir.canonicalPath() ) ) m_share_paths << current_dir.relativeFilePath( config_dir.absolutePath() ); else m_share_paths << config_dir.absolutePath(); #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) m_share_paths.removeDuplicates(); #else m_share_paths = QSet().fromList(m_share_paths).toList(); #endif qDebug() << m_share_paths; } PluginSystem::~PluginSystem() { delete m_events; } PluginSystem &PluginSystem::instance() { static PluginSystem ps; return ps; } void PluginSystem::aboutToQuit() { foreach(LayerInterface *layer_interface, m_layer_interfaces.values()) { if(layer_interface) layer_interface->release(); } foreach(PluginInterface *plugin, m_plugins) { if(plugin) plugin->release(); } foreach(ProtocolInterface *protocol, m_protocols) { if(protocol) protocol->release(); } debug_out.close(); delete debug_console; debug_console = 0; } PluginInterface *PluginSystem::loadPlugin(QObject *instance) { PluginInterface *plugin = qobject_cast(instance); if( !plugin ) { delete instance; return 0; } if( !plugin->init(this) ) { delete instance; return 0; } if( plugin->type() == "protocol" ) { if( ProtocolInterface *protocol = plugin_cast(instance) ) { m_protocols.insert (protocol->name(), instance); qDebug( "Protocol \"%s\" was loaded", qPrintable(plugin->name()) ); } else { qDebug( "Protocol \"%s\" was not loaded", qPrintable(plugin->name()) ); plugin->release(); delete instance; return 0; } } else { m_plugins.append(instance); if( plugin_cast(instance) && plugin->type() == "layer" ) qDebug( "Layer plugin \"%s\" was loaded", qPrintable(plugin->name()) ); else if( plugin_cast(instance) ) qDebug( "Deprecated simple plugin \"%s\" was loaded", qPrintable(plugin->name()) ); else if( plugin_cast(instance) ) qDebug( "Simple plugin \"%s\" was loaded", qPrintable(plugin->name()) ); else qDebug( "Unknown plugin \"%s\" was loaded", qPrintable(plugin->name()) ); } return plugin; } bool PluginSystem::unloadPlugin(const QString &name) { for(int i = 0; i < m_plugins.count(); ++i) { PluginInterface *plugin = m_plugins[i]; if( plugin && plugin->name() == name ) { plugin->release(); delete plugin; m_plugins.removeAt(i); return true; } } return false; } bool PluginSystem::unloadPlugin(PluginInterface *object) { if(!object) return false; for(int i = 0; i < m_plugins.count(); ++i) { PluginInterface *plugin = m_plugins[i]; if( plugin == object ) { plugin->release(); delete plugin; m_plugins.removeAt(i); return true; } } return false; } int PluginSystem::pluginsCount() { return m_plugins.count(); } SimplePluginInterface *PluginSystem::getPluginByIndex(int index) { //assert (!m_loaders.empty()); //assert (0 <= index && index < m_loaders.count()); SimplePluginInterface *plugin = plugin_cast(m_plugins[index]); if( plugin ) return plugin; return plugin_cast(m_plugins[index]); } void PluginSystem::registerEventHandler(const EventType &type, DeprecatedSimplePluginInterface *plugin) { m_registered_events_plugins.insert(type, plugin); } void PluginSystem::releaseEventHandler(const QString &event_id, PluginInterface *plugin) { // PluginEventLists::iterator it; // it = m_event_lists.find(event_id); // if(it == m_event_lists.end()) // return; // // SimplePluginList *handlers_list = &it.value(); // int i = handlers_list->indexOf(plugin); // if(i == -1) // return; // // handlers_list->removeAt(i); // if(handlers_list->isEmpty()) // m_event_lists.erase(it); } void PluginSystem::processEvent(PluginEvent &event) { // PluginEventLists::iterator it; // it = m_event_lists.find(event.id); // if(it == m_event_lists.end()) // return; // // SimplePluginList *handlers_list = &m_event_lists[event.id]; // // foreach(SimplePluginInterdace *plugin, (*handlers_list)) // { // plugin->processEvent(event); // } } QObjectList PluginSystem::findPlugins(const QString &path, const QStringList &paths) { static QSet plugin_paths_list; QObjectList result; QDir plugins_dir = path; #ifdef Q_OS_WIN32 qDebug("Search plugins at: \"%s\"", qPrintable(path)); qDebug("Files: \"%s\"", qPrintable(plugins_dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot).join("\", \""))); #endif // // We should load only libraries //#ifdef Q_OS_WIN // QStringList filters = QStringList() << "*.dll"; //#elif defined(Q_OS_MAC) // QStringList filters = QStringList() << "*.dylib"; //#elif defined(Q_OS_UNIX) // QStringList filters = QStringList() << "*.so"; //#else // QStringList filters = QStringList() << "*.*"; //#endif QFileInfoList files = plugins_dir.entryInfoList(QDir::AllEntries); for(int i = 0; i < files.count(); ++i) { QString filename = files[i].canonicalFilePath(); if(plugin_paths_list.contains(filename) || !QLibrary::isLibrary(filename) || !files[i].isFile()) continue; plugin_paths_list << filename; qDebug() << filename; QPluginLoader *loader = new QPluginLoader(filename); QObject *object = loader->instance(); PluginInterface *plugin = qobject_cast(object); if( CmdArgsHandler *cmdhandler = qobject_cast( object ) ) cmdhandler->setCmdArgs( qutIM_args.argc, qutIM_args.argv ); if(plugin) { // PluginInfo info = { plugin->name(), plugin->description(), plugin->type(), QIcon() }; result << object; PluginContainerInterface *container = plugin_cast(object); if( container ) { QObjectList plugins = container->loadPlugins(paths); while( !plugins.isEmpty() ) result << plugins.takeFirst(); } } else { qWarning("Error while loading plugin %s: %s", qPrintable(filename), qPrintable(loader->errorString())); loader->unload(); } delete loader; } return result; } QObjectList PluginSystem::loadPlugins(int argc, char *argv[]) { qutIM_args.argc = argc; qutIM_args.argv = argv; QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QObjectList plugins; QStringList paths; QDir root_dir = QApplication::applicationDirPath(); // 1. Windows, ./plugins QString plugin_path = root_dir.canonicalPath(); plugin_path += QDir::separator(); plugin_path += "plugins"; paths << plugin_path; root_dir.cdUp(); // 2. Linux, /usr/lib/qutim // May be it should be changed to /usr/lib/qutim/plugins ?.. plugin_path = root_dir.canonicalPath(); plugin_path += QDir::separator(); plugin_path += "lib"; plugin_path += QDir::separator(); plugin_path += "qutim"; paths << plugin_path; plugin_path += QDir::separator(); plugin_path += "plugins"; paths << plugin_path; // 3. MacOS X, ../PlugIns plugin_path = root_dir.canonicalPath(); plugin_path += QDir::separator(); plugin_path += "PlugIns"; paths << plugin_path; // 4. Safe way, ~/.config/qutim/plugins plugin_path = QFileInfo(settings.fileName()).canonicalPath(); plugin_path += QDir::separator(); plugin_path += "plugins"; paths << plugin_path; // 5. From config QStringList config_paths = settings.value("General/libpaths", QStringList()).toStringList(); while(config_paths.size()) paths << config_paths.takeFirst(); qDebug() << paths; foreach(const QString &path, paths) plugins << findPlugins(path, paths); return plugins; } void PluginSystem::initPlugins( QObjectList plugins ) { foreach(QObject *plugin, plugins) loadPlugin(plugin); #ifndef NO_CORE_SETTINGS if( !m_layer_interfaces.contains( SettingsLayer ) ) { LayerInterface *layer_interface = new QSettingsLayer(); layer_interface->init(this); m_layer_interfaces.insert(SettingsLayer, layer_interface); } #endif m_settings = static_cast( m_layer_interfaces.value( SettingsLayer ) ); } PluginInfoList PluginSystem::getPluginsByType(const QString &type) { PluginInfoList temp; if ( type != "protocol") { for(int i = 0; i < pluginsCount(); ++i) { PluginInterface *plugin = getPluginByIndex(i); if( !plugin ) continue; if(plugin->type() == type) { PluginInfo info; info.name = plugin->name(); info.description = plugin->description(); info.type = plugin->type(); if(plugin->icon()) info.icon = *plugin->icon(); temp.append(info); } } } else { foreach(ProtocolInterface *plugin, m_protocols.values() ) { if( !plugin ) continue; PluginInfo info; info.name = plugin->name(); info.description = plugin->description(); info.type = plugin->type(); if(plugin->icon()) info.icon = *plugin->icon(); temp.append(info); } } return temp; } bool PluginSystem::setLayerInterface( LayerType type, LayerInterface *layer_interface) { if(type<0 || type>=InvalidLayer) type = InvalidLayer; if(type == InvalidLayer || m_layer_interfaces.contains(type) || !layer_interface) return false; if(layer_interface->init(this)) { m_layer_interfaces.insert(type, layer_interface); return true; } return false; } LayerInterface *PluginSystem::getLayerInterface(LayerType type) { return m_layer_interfaces.value(type, 0); } void PluginSystem::initiateLayers(const QString &profile_name) { #ifndef NO_CORE_ANTISPAM if(!m_layer_interfaces.contains(AntiSpamLayer)) { LayerInterface *layer_interface = new AbstractAntiSpamLayer(); layer_interface->init(this); m_layer_interfaces.insert(AntiSpamLayer, layer_interface); } #endif #ifndef NO_CORE_CHAT if(!m_layer_interfaces.contains(ChatLayer)) { LayerInterface *layer_interface = new ChatLayerClass(); layer_interface->init(this); m_layer_interfaces.insert(ChatLayer, layer_interface); } #endif #ifndef NO_CORE_CONTACTLIST if(!m_layer_interfaces.contains(ContactListLayer)) { LayerInterface *layer_interface = new DefaultContactList(); layer_interface->init(this); m_layer_interfaces.insert(ContactListLayer, layer_interface); } #endif #ifndef NO_CORE_EMOTICONS if(!m_layer_interfaces.contains(EmoticonsLayer)) { LayerInterface *layer_interface = new CoreEmoticons::AbstractEmoticonsLayer(); layer_interface->init(this); m_layer_interfaces.insert(EmoticonsLayer, layer_interface); } #endif #ifndef NO_CORE_HISTORY if(!m_layer_interfaces.contains(HistoryLayer)) { LayerInterface *layer_interface = new JsonHistoryNamespace::JsonEngine(); layer_interface->init(this); m_layer_interfaces.insert(HistoryLayer, layer_interface); } #endif #ifndef NO_CORE_NOTIFICATION if(!m_layer_interfaces.contains(NotificationLayer)) { LayerInterface *layer_interface = new DefaultNotificationLayer(); layer_interface->init(this); m_layer_interfaces.insert(NotificationLayer, layer_interface); } #endif #ifndef NO_CORE_SOUNDENGINE if(!m_layer_interfaces.contains(SoundEngineLayer)) { LayerInterface *layer_interface = new DefaultSoundEngineLayer(); layer_interface->init(this); m_layer_interfaces.insert(SoundEngineLayer, layer_interface); } #endif #ifndef NO_CORE_VIDEOENGINE // if(!m_layer_interfaces.contains(VideoEngineLayer)) // { // LayerInterface *layer_interface = new DefaultVideoEngineLayer(); // layer_interface->init(this); // m_layer_interfaces.insert(SoundVideoLayer, layer_interface); // } #endif #ifndef NO_CORE_SPELLER if(!m_layer_interfaces.contains(SpellerLayer)) { LayerInterface *layer_interface = new SpellerLayerClass(); layer_interface->init(this); m_layer_interfaces.insert(SpellerLayer, layer_interface); } #endif #ifndef NO_CORE_STATUS if(!m_layer_interfaces.contains(StatusLayer)) { LayerInterface *layer_interface = new DefaultStatusLayer(); layer_interface->init(this); m_layer_interfaces.insert(StatusLayer, layer_interface); } #endif #ifndef NO_CORE_TRAY if(!m_layer_interfaces.contains(TrayLayer)) { LayerInterface *layer_interface = new DefaultTrayLayer(); layer_interface->init(this); m_layer_interfaces.insert(TrayLayer, layer_interface); } #endif // AbstractContactList::instance().setLayerInterface(m_layer_interfaces.value(ContactListLayer)); // AbstractNotificationLayer::instance().setLayerInterface(m_layer_interfaces.value(NotificationLayer)); for(int type = 0;type(type), 0); AbstractLayer::instance().setLayerInterface(static_cast(type), interface); if(interface) { for(int type2 = 0;type2(type2), 0); if(interface2 && type2 != type) interface->setLayerInterface(static_cast(type2), interface2); } } } for(int type = 0;type(type), 0); if(interface) interface->setProfileName(profile_name); } Event event(m_events->all_plugins_loaded, 0); sendEvent(event); } QWidget *PluginSystem::getLoginWidget(const QString &protocol_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return 0; return protocol->loginWidget(); } void PluginSystem::removeLoginWidgetByName(const QString &protocol_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->removeLoginWidget(); } void PluginSystem::removeAccount(const QString &protocol_name, const QString &account_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->removeAccount(account_name); } void PluginSystem::loadProfile(const QString &profile_name) { m_profile_name = profile_name; SystemsCity::instance().setProfileName( profile_name ); // loadPlugins(); initiateLayers(profile_name); QList all_plugins; foreach(PluginInterface *plugin, m_plugins) all_plugins << plugin; foreach(ProtocolInterface *protocol, m_protocols) all_plugins << protocol; foreach(PluginInterface *plugin, all_plugins) { if(plugin) { qDebug( "\"%s\"", qPrintable(plugin->name()) ); plugin->setProfileName(m_profile_name); } } IconInfoList pack; foreach(PluginInterface *plugin, all_plugins) { if(plugin) { QIcon *icon = plugin->icon(); if(icon) { IconInfo info; info.name = plugin->name().toLower(); info.category = IconInfo::Plugin; info.icon = *icon; pack << info; } } } IconManager::instance().addPack("plugins", pack); } void PluginSystem::applySettingsPressed(const QString &protocol_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->applySettingsPressed(); } QList PluginSystem::addStatusMenuToTrayMenu() { QList status_menu_list; foreach(ProtocolInterface *protocol, m_protocols) { if(protocol) { foreach(QMenu *account_menu, protocol->getAccountStatusMenu()) { status_menu_list.append(account_menu); } } } return status_menu_list; } void PluginSystem::addAccountButtonsToLayout(QHBoxLayout *account_buttons_layout) { // if(m_layer_interfaces.contains(ContactListLayer)) // reinterpret_cast(m_layer_interfaces.value(ContactListLayer))->setAccountButtonsLayout(account_buttons_layout); foreach(ProtocolInterface *protocol, m_protocols) { if(protocol) { protocol->addAccountButtonsToLayout(account_buttons_layout); } } Q_REGISTER_EVENT(account_buttons, "Core/ContactList/AccountButtonsLayout"); Event(account_buttons, 1, &account_buttons_layout).send(); } void PluginSystem::saveLoginDataByName(const QString &protocol_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->saveLoginDataFromLoginWidget(); } QList PluginSystem::getSettingsByName(const QString &protocol_name) const { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) { QList list; return list; } return protocol->getSettingsList(); } void PluginSystem::removeProtocolSettingsByName(const QString &protocol_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->removeProtocolSettings(); } QList PluginSystem::getAccountsList() const { QList full_account_list; foreach(ProtocolInterface *protocol, m_protocols) { if(protocol) { foreach(AccountStructure account_structure, protocol->getAccountList()) { full_account_list.append(account_structure); } } } return full_account_list; } QList PluginSystem::getAccountsStatusesList() const { QList full_account_list; foreach(ProtocolInterface *protocol, m_protocols) { if(protocol) { foreach(AccountStructure account_structure, protocol->getAccountStatuses()) { full_account_list.append(account_structure); } } } return full_account_list; } void PluginSystem::updateStatusIcons() { AbstractLayer &as = AbstractLayer::instance(); as.updateTrayIcon(); } void PluginSystem::setAutoAway() { foreach(ProtocolInterface *protocol, m_protocols) { if(protocol) { protocol->setAutoAway(); } } } void PluginSystem::setStatusAfterAutoAway() { foreach(ProtocolInterface *protocol, m_protocols) { if(protocol) { protocol->setStatusAfterAutoAway(); } } } bool PluginSystem::addItemToContactList(const TreeModelItem &item, const QString &name) { bool result = true; if(item.m_item_type < 3) m_abstract_layer.contactList()->addItem(item, name); //TODO:GET THIS EVENT FOR HISTORY LAYER! //AbstractHistoryLayer::instance().setContactHistoryName(item); Event event(m_events->item_added, 2, &item, &name); sendEvent(event); // if(result) // { // foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ItemAddedAction)) // { // PluginEvent event; // event.system_event_type = ItemAddedAction; // event.args.append(&item); // event.args.append(&name); // plugin->processEvent(event); // } // } return result; } bool PluginSystem::removeItemFromContactList(const TreeModelItem &item) { bool result = false; if(item.m_item_type < 3) m_abstract_layer.contactList()->removeItem(item); Event event(m_events->item_removed, 1, &item); sendEvent(event); // if(result) // { // foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ItemRemovedAction)) // { // PluginEvent event; // event.system_event_type = ItemRemovedAction; // event.args.append(&item); // plugin->processEvent(event); // } // } return result; } bool PluginSystem::moveItemInContactList(const TreeModelItem &old_item, const TreeModelItem &new_item) { bool result = true; m_abstract_layer.contactList()->moveItem(old_item, new_item); Event event(m_events->item_moved, 2, &old_item, &new_item); sendEvent(event); // if(result) // { // foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ItemMovedAction)) // { // PluginEvent event; // event.system_event_type = ItemMovedAction; // event.args.append(&old_item); // event.args.append(&new_item); // plugin->processEvent(event); // } // } return result; } bool PluginSystem::setContactItemName(const TreeModelItem &item, const QString &name) { bool result = true; if(item.m_item_type < 3) m_abstract_layer.contactList()->setItemName(item, name); Event event(m_events->item_changed_name, 2, &item, &name); sendEvent(event); // if(result) // { // foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ItemChangedNameAction)) // { // PluginEvent event; // event.system_event_type = ItemChangedNameAction; // event.args.append(&item); // event.args.append(&name); // plugin->processEvent(event); // } // } return result; } bool PluginSystem::setContactItemIcon(const TreeModelItem &item, const QIcon &icon, int position) { bool result = true; if(item.m_item_type < 3) m_abstract_layer.contactList()->setItemIcon(item, icon, position); Event event(m_events->item_icon_changed, 3, &item, &icon, &position); sendEvent(event); return result; } bool PluginSystem::setContactItemRow(const TreeModelItem &item, const QList &row, int position) { Q_UNUSED(position); bool result = true; if(item.m_item_type < 3) m_abstract_layer.contactList()->setItemText(item, row.toVector()); return result; } bool PluginSystem::setContactItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &text, int mass) { bool result = true; if(item.m_item_type < 3) m_abstract_layer.contactList()->setItemStatus(item, icon, text, mass); Event event(m_events->item_changed_status, 4, &item, &icon, &text, &mass); sendEvent(event); // if(result) // { // foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ItemChangedStatusAction)) // { // PluginEvent event; // event.system_event_type = ItemChangedStatusAction; // event.args.append(&item); // event.args.append(&icon); // event.args.append(&text); // event.args.append(&mass); // plugin->processEvent(event); // } // } return result; } void PluginSystem::itemActivated(const TreeModelItem &item) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; protocol->itemActivated(item.m_account_name, item.m_item_name); } void PluginSystem::itemContextMenu(const QList &action_list, const TreeModelItem &item, const QPoint &menu_point) { setCurrentContextItemToPlugins(item); ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; protocol->itemContextMenu(action_list,item.m_account_name, item.m_item_name, item.m_item_type, menu_point); } bool PluginSystem::setStatusMessage(QString &status_message, bool &dshow) { return m_abstract_layer.status()->setStatusMessage(status_message, dshow); } void PluginSystem::sendMessageToContact(const TreeModelItem &item, QString &message, int message_icon_position) { TreeModelItem tmp_item = item; Event event(m_events->sending_message_after_showing, 2, &item, &message); sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(SendingMessageAfterShowing)) { PluginEvent event; event.system_event_type = SendingMessageAfterShowing; QList params; params.append(&tmp_item); params.append(&message); event.args = params; plugin->processEvent(event); } event.id = m_events->senging_message_after_showing_last_output; sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(SengingMessageAfterShowingLastOutput)) { PluginEvent event; event.system_event_type = SengingMessageAfterShowingLastOutput; QList params; params.append(&tmp_item); params.append(&message); event.args = params; plugin->processEvent(event); } ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; if ( item.m_item_type != 32 ) protocol->sendMessageTo(item.m_account_name, item.m_item_name, item.m_item_type, message, message_icon_position); else { protocol->sendMessageToConference(item.m_item_name, item.m_account_name, message); } } void PluginSystem::addMessageFromContact(const TreeModelItem &item, const QString &message , const QDateTime &message_date) { QString tmp_message = message; bool stop_on_this_level = false; TreeModelItem tmp_item = item; Event event(m_events->receiving_message_first_level, 2, &tmp_item, &message); sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ReceivingMessageFirstLevel)) { PluginEvent event; event.system_event_type = ReceivingMessageFirstLevel; QList params; params.append(&tmp_item); params.append(&tmp_message); event.args = params; plugin->processEvent(event); } event.id = m_events->receiving_message_second_level; event.args.append(&stop_on_this_level); sendEvent(event); if(stop_on_this_level) return; foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ReceivingMessageSecondLevel)) { PluginEvent event; event.system_event_type = ReceivingMessageSecondLevel; QList params; params.append(&tmp_item); params.append(&tmp_message); params.append(&stop_on_this_level); event.args = params; plugin->processEvent(event); if ( stop_on_this_level ) return; } if(AbstractLayer::Chat()) AbstractLayer::Chat()->newMessageArrivedTo(item,message, message_date, false,true); //TODO: remove it later /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.addModifiedMessage(item, tmp_message, true, message_date);*/ } void PluginSystem::addServiceMessage(const TreeModelItem &item, const QString &message) { if(AbstractLayer::Chat()) AbstractLayer::Chat()->newServiceMessageArriveTo(item,message); /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.addServiceMessage(item, message);*/ } QStringList PluginSystem::getAdditionalInfoAboutContact(const TreeModelItem &item) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) { QStringList additional_info; Event ev(m_events->item_ask_additional_info, 2, &item, &additional_info); sendEvent(ev); return additional_info; } return protocol->getAdditionalInfoAboutContact(item.m_account_name, item.m_item_name, item.m_item_type); } void PluginSystem::showContactInformation(const TreeModelItem &item) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; return protocol->showContactInformation(item.m_account_name, item.m_item_name, item.m_item_type); } void PluginSystem::sendImageTo(const TreeModelItem &item, const QByteArray &image_raw) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; return protocol->sendImageTo(item.m_account_name, item.m_item_name, item.m_item_type, image_raw); } void PluginSystem::addImage(const TreeModelItem &item, const QByteArray &image_raw) { AbstractLayer::Chat()->addImage(item, image_raw); } void PluginSystem::sendFileTo(const TreeModelItem &item, const QStringList &file_names) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; return protocol->sendFileTo(item.m_account_name, item.m_item_name, item.m_item_type, file_names); } void PluginSystem::sendTypingNotification(const TreeModelItem &item, int notification_type) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; return protocol->sendTypingNotification(item.m_account_name, item.m_item_name, item.m_item_type, notification_type); } void PluginSystem::contactTyping(const TreeModelItem &item, bool typing) { Event(m_events->item_typing_notification, 2, &item, &typing); if(AbstractLayer::Chat()) AbstractLayer::Chat()->setItemTypingState(item,(TypingAttribute)typing); /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.contactTyping(item, typing);*/ AbstractLayer::ContactList()->setItemAttribute(item, ItemIsTyping, typing); // AbstractContactList &ac = AbstractContactList::instance(); // ac.setItemIsTyping(item,typing); } void PluginSystem::messageDelievered(const TreeModelItem &item, int message_position) { if(AbstractLayer::Chat()) AbstractLayer::Chat()->messageDelievered(item,message_position); //AbstractChatLayer &acl = AbstractChatLayer::instance(); //acl.messageDelievered(item, message_position); } bool PluginSystem::checkForMessageValidation(const TreeModelItem &item, const QString &message, int message_type, bool special_status) { return AbstractLayer::AntiSpam()->checkForMessageValidation(item, message, static_cast(message_type), special_status); } void PluginSystem::notifyAboutBirthDay(const TreeModelItem &item) { AbstractLayer::Notification()->userMessage(item, "", NotifyBirthday); } void PluginSystem::systemNotification(const TreeModelItem &item, const QString &message) { AbstractLayer::Notification()->systemMessage(item, message); TreeModelItem tmp_item = item; QString tmp_message = message; Event event(m_events->system_notification, 2, &tmp_item, &tmp_message); sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(SystemNotification)) { PluginEvent event; event.system_event_type = SystemNotification; event.args.append(&tmp_item); event.args.append(&tmp_message); plugin->processEvent(event); } } void PluginSystem::userNotification(TreeModelItem item, QString message, int type) { Event event(m_events->user_notification, 3, &item, &message, &type); sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(UserNotification)) { PluginEvent event; event.system_event_type = UserNotification; event.args.append(&item); event.args.append(&message); event.args.append(&type); plugin->processEvent(event); } } void PluginSystem::customNotification(const TreeModelItem &item, const QString &message) { m_abstract_layer.notification()->userMessage(item, message, NotifyCustom); } QString PluginSystem::getIconFileName(const QString & icon_name) { return IconManager::instance().getIconFileName(icon_name); } QIcon PluginSystem::getIcon(const QString & icon_name) { return IconManager::instance().getIcon(icon_name); } QString PluginSystem::getStatusIconFileName(const QString & icon_name, const QString & default_path) { return IconManager::instance().getStatusIconFileName(icon_name, default_path); } QIcon PluginSystem::getStatusIcon(const QString & icon_name, const QString & default_path) { return IconManager::instance().getStatusIcon(icon_name, default_path); } void PluginSystem::moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item) { ProtocolInterface *protocol = m_protocols.value(old_item.m_protocol_name); if(!protocol) return; protocol->moveItemSignalFromCL(old_item, new_item); } QString PluginSystem::getItemToolTip(const TreeModelItem &item) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) { QString tooltip = item.m_item_name; Event e(m_events->item_ask_tooltip, 2, &item, &tooltip); sendEvent(e); return tooltip; } return protocol->getItemToolTip(item.m_account_name, item.m_item_name); } void PluginSystem::deleteItemSignalFromCL(const TreeModelItem& item) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; protocol->deleteItemSignalFromCL(item.m_account_name, item.m_item_name, item.m_item_type); } void PluginSystem::setAccountIsOnline(const TreeModelItem &item, bool online) { QString status = online?"online":"offline"; setContactItemStatus(item, IconManager::instance().getStatusIcon(status, item.m_protocol_name), status, online?0:1000); // AbstractContactList::instance().setAccountIsOnline(item, online); TreeModelItem tmp_item = item; Event(m_events->account_is_online, 2, &tmp_item, &online).send(); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(AccountIsOnlineAction)) { PluginEvent event; event.system_event_type = AccountIsOnlineAction; event.args.append(&tmp_item); event.args.append(&online); plugin->processEvent(event); } } void PluginSystem::createChat(const TreeModelItem &item) { Q_REGISTER_EVENT(create_event, "Core/ChatWindow/CreateChat"); bool create = true; TreeModelItem tmp_item = item; Event(create_event, 2, &tmp_item, &create).send(); if(AbstractLayer::Chat() && create) AbstractLayer::Chat()->createChat(tmp_item); //AbstractChatLayer::instance().createChat(item); } void PluginSystem::getQutimVersion(quint8 &major, quint8 &minor, quint8 &secminor, quint16 &svn) { major = QUTIM_BUILD_VERSION_MAJOR; minor = QUTIM_BUILD_VERSION_MINOR; secminor = QUTIM_BUILD_VERSION_SECMINOR; svn = QUTIM_SVN_REVISION; } void PluginSystem::chatWindowOpened(const TreeModelItem &item) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; protocol->chatWindowOpened(item.m_account_name, item.m_item_name); } void PluginSystem::chatWindowAboutToBeOpened(const TreeModelItem &item) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; protocol->chatWindowAboutToBeOpened(item.m_account_name, item.m_item_name); } void PluginSystem::chatWindowClosed(const TreeModelItem &item) { if ( item.m_item_type == 32 ) { leaveConference(item.m_protocol_name, item.m_item_name, item.m_account_name); } else { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; protocol->chatWindowClosed(item.m_account_name, item.m_item_name); } } void PluginSystem::createConference(const QString &protocol_name, const QString &conference_name, const QString &account_name) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = account_name; item.m_protocol_name = protocol_name; item.m_item_name = conference_name; item.m_item_type = 32; if(AbstractLayer::Chat()) AbstractLayer::Chat()->createChat(item); // AbstractChatLayer::instance().createConference(protocol_name, //conference_name, account_name); } void PluginSystem::addMessageToConference(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &from, const QString &message, const QDateTime &date, bool history) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = conference_name; item.m_protocol_name = protocol_name; item.m_item_name = from; item.m_item_type = 34; if(AbstractLayer::Chat()) AbstractLayer::Chat()->newMessageArrivedTo(item,message, date, history); //TODO: delete it later /*AbstractChatLayer::instance().addMessageToConference( protocol_name, conference_name,account_name, from, message, date, history);*/ } void PluginSystem::sendMessageToConference( const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &message) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->sendMessageToConference(conference_name, account_name, message); } void PluginSystem::changeOwnConferenceNickName(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = account_name; item.m_protocol_name = protocol_name; item.m_item_name = conference_name; item.m_item_type = 32; if(AbstractLayer::Chat()) AbstractLayer::Chat()->changeOwnNickNameInConference(item,nickname); /*AbstractChatLayer::instance().changeOwnConferenceNickName(protocol_name, conference_name, account_name, nickname);*/ } void PluginSystem::setConferenceTopic(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &topic) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = account_name; item.m_protocol_name = protocol_name; item.m_item_name = conference_name; item.m_item_type = 32; if(AbstractLayer::Chat()) AbstractLayer::Chat()->setConferenceTopic(item,topic); /*AbstractChatLayer::instance().setConferenceTopic( protocol_name, conference_name, account_name, topic);*/ } void PluginSystem::addSystemMessageToConference(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &message, const QDateTime &date, bool history) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = account_name; item.m_protocol_name = protocol_name; item.m_item_name = conference_name; item.m_item_type = 32; if(AbstractLayer::Chat()) AbstractLayer::Chat()->newServiceMessageArriveTo(item,message); /*AbstractChatLayer::instance().addSystemMessageToConference( protocol_name, conference_name,account_name, message, date, history);*/ } void PluginSystem::leaveConference(const QString &protocol_name, const QString &conference_name, const QString &account_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->leaveConference(conference_name, account_name); } void PluginSystem::addConferenceItem(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = conference_name; item.m_protocol_name = protocol_name; item.m_item_name = nickname; item.m_item_type = 33; if(AbstractLayer::Chat()) AbstractLayer::Chat()->addConferenceItem(item,nickname); //TODO: remove it later /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.addConferenceItem(protocol_name, conference_name, account_name, nickname);*/ //END remove } void PluginSystem::removeConferenceItem(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = conference_name; item.m_protocol_name = protocol_name; item.m_item_name = nickname; item.m_item_type = 33; if(AbstractLayer::Chat()) AbstractLayer::Chat()->removeConferenceItem(item); //TODO: remove it later /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.removeConferenceItem(protocol_name, conference_name, account_name, nickname); */ } void PluginSystem::renameConferenceItem(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QString &new_nickname) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = conference_name; item.m_protocol_name = protocol_name; item.m_item_name = nickname; item.m_item_type = 33; if(AbstractLayer::Chat()) AbstractLayer::Chat()->renameConferenceItem(item, new_nickname); //TODO: remove it later /* AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.renameConferenceItem(protocol_name, conference_name, account_name, nickname, new_nickname); */ } void PluginSystem::setConferenceItemStatus(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QIcon &icon, const QString &status, int mass) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = conference_name; item.m_protocol_name = protocol_name; item.m_item_name = nickname; item.m_item_type = 33; if(AbstractLayer::Chat()) AbstractLayer::Chat()->setConferenceItemStatus(item,icon,status,mass); //TODO: remove it later /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.setConferenceItemStatus(protocol_name, conference_name, account_name, nickname, icon, status, mass);*/ } void PluginSystem::setConferenceItemIcon(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QIcon &icon, int position) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = conference_name; item.m_protocol_name = protocol_name; item.m_item_name = nickname; item.m_item_type = 33; if(AbstractLayer::Chat()) AbstractLayer::Chat()->setConferenceItemIcon(item,icon,position); //TODO: remove it later /* AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.setConferenceItemIcon(protocol_name, conference_name, account_name, nickname, icon, position);*/ } void PluginSystem::setConferenceItemRole(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QIcon &icon, const QString &role, int mass) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = conference_name; item.m_protocol_name = protocol_name; item.m_item_name = nickname; item.m_item_type = 33; if(AbstractLayer::Chat()) AbstractLayer::Chat()->setConferenceItemRole(item,icon,role,mass); //TODO: remove it later /*AbstractChatLayer &acl = AbstractChatLayer::instance(); acl.setConferenceItemRole(protocol_name, conference_name, account_name, nickname, icon, role, mass);*/ } QStringList PluginSystem::getConferenceItemsList(const QString &protocol_name, const QString &conference_name, const QString &account_name) { TreeModelItem item; item.m_account_name = account_name; item.m_parent_name = account_name; item.m_protocol_name = protocol_name; item.m_item_name = conference_name; item.m_item_type = 32; return AbstractLayer::Chat()->getConferenceItemsList(item); } void PluginSystem::setItemVisible(const TreeModelItem &item, bool visible) { AbstractLayer::ContactList()->setItemVisibility(item, visible?ShowAlwaysVisible:ShowDefault); // AbstractContactList::instance().setItemVisible(item, visible); } void PluginSystem::setItemInvisible(const TreeModelItem &item, bool invisible) { AbstractLayer::ContactList()->setItemVisibility(item, invisible?ShowAlwaysInvisible:ShowDefault); // AbstractContactList::instance().setItemInvisible(item, invisible); } void PluginSystem::conferenceItemActivated(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->conferenceItemActivated(conference_name, account_name, nickname); } void PluginSystem::conferenceItemContextMenu(const QList &action_list, const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QPoint &menu_point) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->conferenceItemContextMenu(action_list, conference_name, account_name, nickname, menu_point); } QString PluginSystem::getConferenceItemToolTip(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return nickname; return protocol->getConferenceItemToolTip(conference_name, account_name, nickname); } void PluginSystem::showConferenceContactInformation(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->showConferenceContactInformation(conference_name, account_name, nickname); } void PluginSystem::removePluginsSettingsWidget() { for(int i = 0; i < m_plugins.count(); ++i) { SimplePluginInterface *plugin = getPluginByIndex(i); if(plugin) { plugin->removeSettingsWidget(); } } } void PluginSystem::saveAllPluginsSettings() { for(int i = 0; i < m_plugins.count(); ++i) { SimplePluginInterface *plugin = getPluginByIndex(i); if(plugin) { plugin->saveSettings(); } } } void PluginSystem::registerContactMenuAction(QAction *plugin_action, DeprecatedSimplePluginInterface *pointer_this) { AbstractContextLayer::instance().registerContactMenuAction(plugin_action); if(pointer_this) m_registered_events_plugins.insert(ContactContextAction, pointer_this); } void PluginSystem::setCurrentContextItemToPlugins(const TreeModelItem &item) { TreeModelItem tmp_item = item; Event(m_events->contact_context, 1, &tmp_item).send(); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ContactContextAction)) { PluginEvent event; event.system_event_type = ContactContextAction; QList params; params.append(&tmp_item); event.args = params; plugin->processEvent(event); } } void PluginSystem::sendCustomMessage(const TreeModelItem &item, const QString &message, bool silent) { if ( silent ) { ProtocolInterface *protocol = m_protocols.value(item.m_protocol_name); if(!protocol) return; protocol->sendMessageTo(item.m_account_name, item.m_item_name, item.m_item_type, message, 0); } else AbstractLayer::Chat()->newMessageArrivedTo(item,message, QDateTime::currentDateTime(), false,false); } void PluginSystem::registerMainMenuAction(QAction *menu_action) { AbstractLayer::instance().addActionToMainMenu(menu_action); } void PluginSystem::showTopicConfig(const QString &protocol_name, const QString &account_name, const QString &conference) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->showConferenceTopicConfig(conference, account_name); } void PluginSystem::showConferenceMenu(const QString &protocol_name, const QString &account_name, const QString &conference_name, const QPoint &menu_point) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->showConferenceMenu(conference_name, account_name, menu_point); } void PluginSystem::redirectEventToProtocol(const QStringList &protocol_name, const QList &event) { if ( !protocol_name.count() ) { foreach(ProtocolInterface *protocol, m_protocols) { protocol->getMessageFromPlugins(event); } } else { foreach(QString protocol_n, protocol_name) { ProtocolInterface *protocol = m_protocols.value(protocol_n); if(protocol) protocol->getMessageFromPlugins(event); } } } void PluginSystem::sendMessageBeforeShowing(const TreeModelItem &item, QString &message) { TreeModelItem tmp_item = item; Event event(m_events->sending_message_before_showing, 2, &tmp_item, &message); sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(SendingMessageBeforeShowing)) { PluginEvent event; event.system_event_type = SendingMessageBeforeShowing; QList params; params.append(&tmp_item); params.append(&message); event.args = params; plugin->processEvent(event); } } void PluginSystem::pointersAreInitialized() { Event event(m_events->pointers_are_initialized, 0); sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(PointersAreInitialized)) { PluginEvent event; event.system_event_type = PointersAreInitialized; plugin->processEvent(event); } } void PluginSystem::playSoundByPlugin(QString path) { foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(SoundAction)) { PluginEvent event; event.system_event_type = SoundAction; QList params; params.append(&path); plugin->processEvent(event); } } void PluginSystem::playSound(NotificationType event) { // AbstractLayer::Notification()->playSound(event); } void PluginSystem::playSound(const QString &file_name) { AbstractLayer::SoundEngine()->playSound(file_name); } void PluginSystem::receivingMessageBeforeShowing(const TreeModelItem &item, QString &message) { TreeModelItem tmp_item = item; Event event(m_events->receiving_message_third_level, 2, &tmp_item, &message); sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ReceivingMessageThirdLevel)) { PluginEvent event; event.system_event_type = ReceivingMessageThirdLevel; QList params; params.append(&tmp_item); params.append(&message); event.args = params; plugin->processEvent(event); } event.id = m_events->receiving_message_fourth_level; sendEvent(event); foreach(DeprecatedSimplePluginInterface *plugin, m_registered_events_plugins.values(ReceivingMessageFourthLevel)) { PluginEvent event; event.system_event_type = ReceivingMessageFourthLevel; QList params; params.append(&tmp_item); params.append(&message); event.args = params; plugin->processEvent(event); } } void PluginSystem::editAccount(const QString &protocol_name, const QString &account_name) { ProtocolInterface *protocol = m_protocols.value(protocol_name); if(!protocol) return; protocol->editAccount(account_name); } bool PluginSystem::changeChatWindowID(const TreeModelItem &item, const QString &id) { //return AbstractChatLayer::instance().changeChatWindowID(item, id); Event event(registerEventHandler("Core/ChatWindow/ChangeID"), 2, &item, &id); sendEvent(event); return true; } quint16 PluginSystem::registerEventHandler(const QString &event_id, EventHandler *handler, quint16 priority) { quint16 id = m_events_id.value(event_id, m_new_event_id); if(id == m_new_event_id) { m_events_id.insert(event_id, m_new_event_id); m_new_event_id++; m_event_handlers.resize(m_new_event_id); } if(handler) { EventHandlerInfo info; info.first = priority; info.second = new Track( handler ); int position = qUpperBound(m_event_handlers[id], info) - m_event_handlers[id].constBegin(); m_event_handlers[id].insert(position, info); } return id; } void PluginSystem::removeEventHandler(quint16 id, EventHandler *handler) { if(id >= m_event_handlers.size() || !handler) return; QVector &handlers = m_event_handlers[id]; for( int i=handlers.size()-1; i>=0; i-- ) if( handlers[i].second->handler == handler ) { delete handlers[i].second; handlers.remove(i); } } void PluginSystem::removeEventHandler( EventHandler *handler ) { if( !handler ) return; for( int i=0; i &handlers = m_event_handlers[i]; for( int j=handlers.size()-1; j>=0; j-- ) { if( handlers[j].second->handler == handler ) { delete handlers[j].second; handlers.remove(j); } } } } quint16 PluginSystem::registerEventHandler(const QString &event_id, EventHandler *handler, EventHandlerFunc member, quint16 priority) { quint16 id = m_events_id.value(event_id, m_new_event_id); if(id == m_new_event_id) { m_events_id.insert(event_id, m_new_event_id); m_new_event_id++; m_event_handlers.resize(m_new_event_id); } if( handler && member ) { EventHandlerInfo info; info.first = priority; info.second = new Track( handler, member ); int position = qUpperBound(m_event_handlers[id], info) - m_event_handlers[id].constBegin(); m_event_handlers[id].insert(position, info); } return id; } void PluginSystem::removeEventHandler(quint16 id, EventHandler *handler, EventHandlerFunc member) { if(id >= m_event_handlers.size() || !handler || !member) return; QVector &handlers = m_event_handlers[id]; for( int i=handlers.size()-1; i>=0; i-- ) if( handlers[i].second->handler == handler && handlers[i].second->method == member ) { delete handlers[i].second; handlers.remove(i); } } void PluginSystem::removeEventHandler( EventHandler *handler, EventHandlerFunc member ) { if( !handler || !member ) return; for( int i=0; i &handlers = m_event_handlers[i]; for( int j=handlers.size()-1; j>=0; j-- ) { if( handlers[j].second->handler == handler && handlers[j].second->method == member ) { delete handlers[j].second; handlers.remove(j); } } } } quint16 PluginSystem::registerEventHandler(const QString &event_id, ProcessEventFunc func, quint16 priority) { quint16 id = m_events_id.value(event_id, m_new_event_id); if(id == m_new_event_id) { m_events_id.insert(event_id, m_new_event_id); m_new_event_id++; m_event_handlers.resize(m_new_event_id); } if( func ) { EventHandlerInfo info; info.first = priority; info.second = new Track( func ); int position = qUpperBound(m_event_handlers[id], info) - m_event_handlers[id].constBegin(); m_event_handlers[id].insert(position, info); } return id; } void PluginSystem::removeEventHandler(quint16 id, ProcessEventFunc func) { if(id >= m_event_handlers.size() || !func ) return; QVector &handlers = m_event_handlers[id]; for( int i=handlers.size()-1; i>=0; i-- ) if( handlers[i].second->func == func ) { delete handlers[i].second; handlers.remove(i); } } void PluginSystem::removeEventHandler( ProcessEventFunc func ) { if( !func ) return; for( int i=0; i &handlers = m_event_handlers[i]; for( int j=handlers.size()-1; j>=0; j-- ) { if( handlers[j].second->func == func ) { delete handlers[j].second; handlers.remove(j); } } } } quint16 PluginSystem::registerEventHandler(const QString &event_id, QObject *object, const char *member, quint16 priority ) { quint16 id = m_events_id.value(event_id, m_new_event_id); if(id == m_new_event_id) { m_events_id.insert(event_id, m_new_event_id); m_new_event_id++; m_event_handlers.resize(m_new_event_id); } if( object && member && ( (*member - '0') == QSIGNAL_CODE || (*member - '0') == QSLOT_CODE ) ) { EventHandlerInfo info; info.first = priority; info.second = new Track( object, member ); int position = qUpperBound(m_event_handlers[id], info) - m_event_handlers[id].constBegin(); m_event_handlers[id].insert(position, info); } return id; } void PluginSystem::removeEventHandler(quint16 id, QObject *object, const char *member) { if( id >= m_event_handlers.size() || !object ) return; QVector &handlers = m_event_handlers[id]; int slot_id = member ? object->metaObject()->indexOfSlot(member) : -1; for( int i=handlers.size()-1; i>=0; i-- ) if( handlers[i].second->object == object && ( slot_id < 0 || handlers[i].second->slot_id == slot_id ) ) { delete handlers[i].second; handlers.remove(i); } } void PluginSystem::removeEventHandler( QObject *object ) { if( !object ) return; for( int i=0; i &handlers = m_event_handlers[i]; for( int j=handlers.size()-1; j>=0; j-- ) { if( handlers[j].second->object == object ) { delete handlers[j].second; handlers.remove(j); } } } } bool PluginSystem::sendEvent(Event &event) { if( event.id >= m_event_handlers.size() ) return false; // Some plugins or something loke this changes m_event_handlers // during event processing, so we don't use pointer QVector handlers = m_event_handlers[event.id]; if( !handlers.size() ) return false; void **args = 0; for( int i=0; itype ) { case Track::Interface: handlers[i].second->handler->processEvent( event ); break; case Track::Method: ( handlers[i].second->handler->*handlers[i].second->method )( event ); break; case Track::Func: ( *handlers[i].second->func )( event ); break; case Track::Slot: case Track::Signal: if( handlers[i].second->object.isNull() ) continue; if( !args ) { args = (void **)qMalloc( sizeof(void *) * ( event.size() + 1 ) ); args[0] = 0; qMemCopy( args + 1, event.args.constData(), sizeof(void *) * event.args.size() ); } if( handlers[i].second->type == Track::Slot ) handlers[i].second->object->qt_metacall( QMetaObject::InvokeMetaMethod, handlers[i].second->slot_id, args ); else QMetaObject::activate( handlers[i].second->object, handlers[i].second->slot_id, args ); break; } if( args ) qFree( args ); return true; } void PluginSystem::getSystemInfo(QString &version, QString &timezone, int &timezone_offset) { SystemInfo::instance().getSystemInfo(version, timezone, timezone_offset); } IconManagerInterface *PluginSystem::getIconManager() { return &IconManager::instance(); } TranslatorInterface *PluginSystem::getTranslator() { return 0; } TranslatorInterface *PluginSystem::getTranslator( const QString &lang ) { return 0; } QStringList PluginSystem::availableTranslations() { return QStringList(); } SettingsInterface *PluginSystem::getSettings( const TreeModelItem &item ) { return m_settings ? m_settings->getSettings( item ) : 0; } SettingsInterface *PluginSystem::getSettings( const QString &name ) { return m_settings ? m_settings->getSettings( name ) : 0; } QString PluginSystem::getProfilePath() { return m_settings ? m_settings->getProfilePath() : QString(); } QDir PluginSystem::getProfileDir() { return m_settings ? m_settings->getProfileDir() : QDir(); } void PluginSystem::centerizeWidget(QWidget *widget) { QRect rect = QApplication::desktop()->screenGeometry(QCursor::pos()); QPoint position(rect.left() + rect.width() / 2 - widget->size().width() / 2, rect.top() + rect.height() / 2 - widget->size().height() / 2); widget->move(position); } QList PluginSystem::getItemChildren(const TreeModelItem &item) { return AbstractLayer::ContactList()->getItemChildren(item); } void PluginSystem::setItemVisibility(const TreeModelItem &item, int flags) { return AbstractLayer::ContactList()->setItemVisibility(item, flags); } void PluginSystem::setItemNotifications(const TreeModelItem &item, int flags) { return AbstractLayer::ContactList()->setItemNotifications(item, flags); } void PluginSystem::anotherClient(const QString &message) { QStringList args; if(message.startsWith("arguments: ")) { QByteArray tmp = QByteArray::fromBase64(message.mid(11).toLatin1()); QDataStream s(tmp); s >> args; } if(args.isEmpty()) { Q_REGISTER_EVENT( show_hide_cl, "Core/ContactList/ShowHide" ); bool show = true; Event( show_hide_cl, 1, &show ).send(); } else { Q_REGISTER_EVENT( arg_event, "Core/AnotherInstanceArguments" ); Event(arg_event, 1, &args).send(); } } void PluginSystem::setTrayMessageIconAnimating(bool animate) { if (animate) m_abstract_layer.animateTrayNewMessage(); else m_abstract_layer.stopTrayNewMessageAnimation(); } qutim-0.2.0/src/qutimsettings.ui0000644000175000017500000001045411255127345020373 0ustar euroelessareuroelessar qutimSettingsClass 0 0 734 537 Settings :/icons/crystal_project/settings.png:/icons/crystal_project/settings.png 4 0 0 175 0 175 16777215 false QAbstractItemView::ScrollPerItem QAbstractItemView::ScrollPerItem true true true true 1 330 16 -1 Qt::Horizontal 71 27 OK :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png false Apply :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Cancel :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png cancelButton clicked() qutimSettingsClass reject() 495 386 158 346 qutim-0.2.0/src/qutimtranslation.h0000644000175000017500000000272111273076304020677 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 QUTIMTRANSLATION_H #define QUTIMTRANSLATION_H #include using namespace qutim_sdk_0_2; class QutimTranslatorHook : public QTranslator { virtual QString translate( const char *context, const char *sourceText, const char *comment = 0 ) const; }; class QutimTranslation : public TranslatorInterface { Q_DISABLE_COPY(QutimTranslation) public: QutimTranslation( const QString &dir ); virtual ~QutimTranslation(); void init(); void deinit(); virtual QString translate( const char *context, const char *source_text, const char *comment = 0, int n = -1 ) const; virtual QString lang() const; virtual QLocale locale() const; private: QString m_dir; QList *m_translators; QLocale *m_locale; QString *m_lang; }; #endif // QUTIMTRANSLATION_H qutim-0.2.0/src/qutim.ui0000644000175000017500000001533211236355476016621 0ustar euroelessareuroelessar qutIMClass 0 0 186 548 100 100 16777215 16777215 qutIM :/icons/qutim.png:/icons/qutim.png QTreeView::branch { background: grey; } 0 2 0 26 16777215 26 ArrowCursor false 0 0 Qt::Horizontal 81 16 0 26 2 0 2 0 0 22 22 :/icons/crystal_project/menu.png:/icons/crystal_project/menu.png QToolButton::InstantPopup true 22 22 :/icons/crystal_project/shhideoffline.png:/icons/crystal_project/shhideoffline.png true true 22 22 :/icons/crystal_project/folder.png:/icons/crystal_project/folder.png true true 22 22 :/icons/crystal_project/player_volume.png:/icons/crystal_project/player_volume.png true true Qt::Horizontal 67 20 22 22 :/icons/crystal_project/info.png:/icons/crystal_project/info.png true qutim-0.2.0/src/pluginsystem.h0000644000175000017500000004052011247741520020023 0ustar euroelessareuroelessar/***************************************************************************** Plugin System Copyright (c) 2008 by m0rph 2008-2009 by Rustam Chakin Nigmatullin Ruslan *************************************************************************** * * * 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 PLUGINSYSTEM_H #define PLUGINSYSTEM_H #include #include #include #include #include #include #include #include "../include/qutim/plugininterface.h" #include "../include/qutim/protocolinterface.h" #include "../include/qutim/layerinterface.h" #include "pluginpointer.h" using namespace qutim_sdk_0_2; struct PluginInfo { QString name; QString description; QString type; QIcon icon; }; typedef QList PluginInfoList; typedef QList PluginList; typedef QList > QPluginLoaderList; typedef QList SimplePluginList; //! List of protocol plug-ins, which is sorted by protocol name. typedef QHash ProtocolList; //! There QString is a type of message, which can be processed from plug-ins of 'SimplePluginList' typedef QHash PluginEventLists; class AbstractLayer; class PluginSystem : public QObject, public PluginSystemInterface { Q_OBJECT public: static PluginSystem &instance(); void init(); void aboutToQuit(); struct EventId; PluginInterface *loadPlugin(QObject *instance); QObjectList loadPlugins(int argc, char *argv[]); void initPlugins( QObjectList plugins ); bool unloadPlugin(const QString &name); bool unloadPlugin(PluginInterface *object); int pluginsCount(); SimplePluginInterface *getPluginByIndex(int index); PluginInfoList getPluginsByType(const QString &type); virtual bool setLayerInterface(LayerType type, LayerInterface *interface); LayerInterface *getLayerInterface(LayerType type); void initiateLayers(const QString &profile_name); void processEvent(PluginEvent &event); void registerEventHandler(const EventType &type, DeprecatedSimplePluginInterface *plugin); void releaseEventHandler(const QString &event_id, PluginInterface *plugin); QWidget *getLoginWidget(const QString &protocol_name); void removeLoginWidgetByName(const QString &protocol_name); void loadProfile(const QString &profile_name); //! It removes account with 'account_name' name by protocol with 'protocol_name' name //! \example plugin_system->removeAccoun("jabber", "qutimdevelop@jabber.ru"); void removeAccount(const QString &protocol_name, const QString &account_name); //This plugin - system function for protocols will be emited if button 'OK' or 'Apply' //from settings dialog was pressed. void applySettingsPressed(const QString &protocol_name); //Plugin - system function for getting protocol statuses menu from all accounts and all protocols QList addStatusMenuToTrayMenu(); //Plugin - system function for giving QHBoxLayout pointer to protocol plugin. //Protocol plugin must add account button with status menu and etc to this layout. void addAccountButtonsToLayout(QHBoxLayout *); //Plugin - system function for saving all login protocol data from login widget. void saveLoginDataByName(const QString &); //Plugin - system function for getting protocol settings list by name. QList getSettingsByName(const QString &) const; //Plugin - system function for deleting protocol settings from memory by name. void removeProtocolSettingsByName(const QString &); //Function return all accounts list from all loaded protocols QList getAccountsList() const; //Function return all accounts status icons list from all loaded protocols QList getAccountsStatusesList() const; //Function for updating status icon from accounts void updateStatusIcons(); //Function notify about auto-away to all protocols void setAutoAway(); //Function notify about changing status from auto-away to all protocols void setStatusAfterAutoAway(); //Function for adding item to contact list bool addItemToContactList(const TreeModelItem &item, const QString &name = QString()); //Function for removing item from contact list bool removeItemFromContactList(const TreeModelItem &item); //Function for moving item in contact list bool moveItemInContactList(const TreeModelItem &old_item, const TreeModelItem &new_item); //Function for renaming contact bool setContactItemName(const TreeModelItem &item, const QString &name); //Function for adding igon to contact (1,2 - left side; 3...12 - right side) bool setContactItemIcon(const TreeModelItem &item, const QIcon &icon, int position); //Function for adding text row below contact ( 1..3) bool setContactItemRow(const TreeModelItem &item, const QList &row, int position); //Function for settings contact status, text - status name for adium icons packs, //mass status mass, 1000 - offline, 999-offline separator, -1 - online separator bool setContactItemStatus(const TreeModelItem &item, const QIcon &icon, const QString &text, int mass); void itemActivated(const TreeModelItem &Item); void itemContextMenu(const QList &action_list, const TreeModelItem &item, const QPoint &menu_point); bool setStatusMessage(QString &status_message, bool &dshow); virtual void sendMessageToContact(const TreeModelItem &item, QString &message, int message_icon_position); void addMessageFromContact(const TreeModelItem &item, const QString &message, const QDateTime &message_date = QDateTime::currentDateTime()); void addServiceMessage(const TreeModelItem &item, const QString &message); QStringList getAdditionalInfoAboutContact(const TreeModelItem &item); void showContactInformation(const TreeModelItem &item); void sendImageTo(const TreeModelItem &item, const QByteArray &image_raw); void addImage(const TreeModelItem &item, const QByteArray &image_raw); void sendFileTo(const TreeModelItem &item, const QStringList &file_names); void sendTypingNotification(const TreeModelItem &item, int notification_type); void contactTyping(const TreeModelItem &item, bool typing); void messageDelievered(const TreeModelItem &item, int message_position); void createChat(const TreeModelItem &item); bool checkForMessageValidation(const TreeModelItem &item, const QString &message, int message_type, bool special_status); void notifyAboutBirthDay(const TreeModelItem &item); void systemNotification(const TreeModelItem &item, const QString &message); void userNotification(TreeModelItem item, const QString, int); void customNotification(const TreeModelItem &item, const QString &message); QString getIconFileName(const QString & icon_name); QIcon getIcon(const QString & icon_name); QString getStatusIconFileName(const QString & icon_name, const QString & default_path); QIcon getStatusIcon(const QString & icon_name, const QString & default_path); void setAccountIsOnline(const TreeModelItem &Item, bool online); //do not forget to implement all below in ICQ void moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item); QString getItemToolTip(const TreeModelItem &item); void deleteItemSignalFromCL(const TreeModelItem& item); void getQutimVersion(quint8 &major, quint8 &minor, quint8 &secminor, quint16 &svn); void createConference(const QString &protocol_name, const QString &conference_name, const QString &account_name); void addMessageToConference(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &from, const QString &message, const QDateTime &date, bool history); void sendMessageToConference(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &message); void changeOwnConferenceNickName(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname); virtual void setConferenceTopic(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &topic); virtual void addSystemMessageToConference(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &message, const QDateTime &date, bool history); void leaveConference(const QString &protocol_name, const QString &conference_name, const QString &account_name); void addConferenceItem(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname); void removeConferenceItem(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname); void renameConferenceItem(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QString &new_nickname); void setConferenceItemStatus(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QIcon &icon, const QString &status, int mass); void setConferenceItemIcon(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QIcon &icon, int position); virtual void setConferenceItemRole(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QIcon &icon, const QString &role, int mass); virtual QStringList getConferenceItemsList(const QString &protocol_name, const QString &conference_name, const QString &account_name); virtual void conferenceItemActivated(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname); virtual void conferenceItemContextMenu(const QList &action_list, const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname, const QPoint &menu_point); virtual QString getConferenceItemToolTip(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname); virtual void showConferenceContactInformation(const QString &protocol_name, const QString &conference_name, const QString &account_name, const QString &nickname); virtual void setItemVisible(const TreeModelItem &item, bool visible); virtual void setItemInvisible(const TreeModelItem &item, bool invisible); virtual void registerContactMenuAction(QAction *plugin_action, DeprecatedSimplePluginInterface *pointer_this = 0); void removePluginsSettingsWidget(); void saveAllPluginsSettings(); void setCurrentContextItemToPlugins(const TreeModelItem &item); virtual void sendCustomMessage(const TreeModelItem &item, const QString &message, bool silent = false); virtual void registerMainMenuAction(QAction *menu_action); void showTopicConfig(const QString &protocol_name, const QString &account_name, const QString &conference); void showConferenceMenu(const QString &protocol_name, const QString &account_name, const QString &conference_name, const QPoint &menu_point); virtual void redirectEventToProtocol(const QStringList &protocol_name, const QList &event); void sendMessageBeforeShowing(const TreeModelItem &item, QString &message); void pointersAreInitialized(); void playSoundByPlugin(QString path); virtual void playSound(NotificationType event); virtual void playSound(const QString &file_name); void receivingMessageBeforeShowing(const TreeModelItem &item, QString &message); virtual QSettings::Format plistFormat(){ return m_plist_format; } void editAccount(const QString &protocol_name, const QString &account_name); virtual bool changeChatWindowID(const TreeModelItem &item, const QString &id); virtual quint16 registerEventHandler(const QString &event_id, EventHandler *handler = 0, quint16 priority = EventHandler::NormalPriority); virtual void removeEventHandler(quint16 id, EventHandler *handler); virtual bool sendEvent(Event &event); virtual void getSystemInfo(QString &version, QString &timezone, int &timezone_offset); virtual void setTrayMessageIconAnimating(bool animate); quint16 registerEventHandler(const QString &event_id, EventHandler *handler, EventHandlerFunc member, quint16 priority = EventHandler::NormalPriority); void removeEventHandler(quint16 id, EventHandler *handler, EventHandlerFunc member); quint16 registerEventHandler(const QString &event_id, ProcessEventFunc func, quint16 priority = EventHandler::NormalPriority); void removeEventHandler(quint16 id, ProcessEventFunc func); quint16 registerEventHandler(const QString &event_id, QObject *object, const char *member, quint16 priority = EventHandler::NormalPriority ); void removeEventHandler(quint16 id, QObject *object, const char *member = 0); void removeEventHandler( EventHandler *handler ); void removeEventHandler( ProcessEventFunc func ); void removeEventHandler( EventHandler *handler, EventHandlerFunc member ); void removeEventHandler( QObject *object ); IconManagerInterface *getIconManager(); virtual void chatWindowOpened(const TreeModelItem &item); virtual void chatWindowAboutToBeOpened(const TreeModelItem &item); virtual void chatWindowClosed(const TreeModelItem &item); QStringList getSharePaths() { return m_share_paths; } void appendSharePath( const QString &path ) { if( !m_share_paths.contains( path ) ) m_share_paths << path; } void removeSharePath( const QString &path ) { m_share_paths.removeOne( path ); } TranslatorInterface *getTranslator(); TranslatorInterface *getTranslator( const QString &lang ); QStringList availableTranslations(); virtual SettingsInterface *getSettings( const TreeModelItem &item ); virtual SettingsInterface *getSettings( const QString &name ); virtual QString getProfilePath(); virtual QDir getProfileDir(); virtual void centerizeWidget(QWidget *widget); virtual QList getItemChildren(const TreeModelItem &item = TreeModelItem()); virtual void setItemVisibility(const TreeModelItem &item, int flags); virtual void setItemNotifications(const TreeModelItem &item, int flags); public slots: void anotherClient(const QString &message); private: PluginSystem(); ~PluginSystem(); PluginSystem(const PluginSystem &); QObjectList findPlugins(const QString &path, const QStringList &paths); QSettings::Format m_plist_format; ProtocolList m_protocols; //!< it has all protocol plug-ins PluginList m_plugins; //!< it is all non-protocol plug-ins SettingsLayerInterface *m_settings; PluginEventLists m_event_lists; QString m_profile_name; AbstractLayer &m_abstract_layer; QMultiHash m_registered_events_plugins; QHash m_layer_interfaces; struct Track { enum Type { Interface, Method, Func, Slot, Signal }; inline Track( EventHandler *handler_ ) : type(Interface), handler(handler_), method(0), func(0), object(0), slot_id(-1) {} inline Track( EventHandler *handler_, EventHandlerFunc method_ ) : type(Method), handler(handler_), method(method_), func(0), object(0), slot_id(-1) {} inline Track( ProcessEventFunc func_ ) : type(Func), handler(0), method(0), func(func_), object(0), slot_id(-1) {} inline Track( QObject *object_, const char *member) : type((*member-'0')==QSLOT_CODE?Slot:Signal), handler(0), method(0), func(0), object(object_), slot_id(type==Slot?object->metaObject()->indexOfSlot(member+1):object->metaObject()->indexOfSignal(member+1)) {} const Type type; EventHandler *handler; EventHandlerFunc method; ProcessEventFunc func; QPointer object; int slot_id; }; typedef QPair EventHandlerInfo; QVector > m_event_handlers; QHash m_events_id; quint16 m_new_event_id; EventId *m_events; QStringList m_share_paths; }; #endif qutim-0.2.0/src/console.cpp0000644000175000017500000000274511273076304017264 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "console.h" #include Console::Console(QWidget *parent) : QWidget(parent) { ui.setupUi(this); setWindowTitle("Debug Console"); show(); } void Console::appendMsg(const QString &xml, QtMsgType type) { QString color; QString msgtype; switch (type) { case QtDebugMsg: color = "#B2B2B2"; msgtype = "Debug"; break; case QtWarningMsg: color = "#B2B2B2"; msgtype = "Warning"; break; case QtCriticalMsg: color = "#B21717"; msgtype = "Critical"; break; case QtFatalMsg: color = "#B21717"; msgtype = "Fatal"; break; } QString html = QString("%2: %3
").arg(color).arg(msgtype).arg(Qt::escape(xml).replace("\n","
")); ui.textBrowser->append(html); } void Console::closeEvent(QCloseEvent *event) { showMinimized(); event->ignore(); } qutim-0.2.0/src/qutimsettings.h0000644000175000017500000000740511243305367020206 0ustar euroelessareuroelessar/* qutimSettings Copyright (c) 2008 by Rustam Chakin 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 QUTIMSETTINGS_H #define QUTIMSETTINGS_H #include #include #include #include #include #include #include "ui_qutimsettings.h" #include "mainsettings.h" //#include "pluginsettings.h" #include "iconmanager.h" #include "accountmanagement.h" //#include "chatwindow/chatwindowsettings.h" //#include "antispam/antispamlayersettings.h" //#include "notifications/notificationslayersettings.h" //#include "contactlist/contactlistsettings.h" //#include "history/historysettings.h" #include "globalsettings/globalproxysettings.h" class qutimSettings : public QDialog { Q_OBJECT public: qutimSettings(const QString &profile_name, QWidget *parent = 0); ~qutimSettings(); void applyDisable() { ui.applyButton->setEnabled(false); } public slots: void onUpdateTranslation(); private slots: void changeSettings(QTreeWidgetItem *, QTreeWidgetItem *); void on_okButton_clicked(); void on_applyButton_clicked(); void changeProtocolSettings(int); void enableApply() { ui.applyButton->setEnabled(true); } void mainSettingsChanged(); void chatWindowSettingsChanged(); // void antiSpamSettingsChanged(); // void notificationsSettingsChanged(); // void soundSettingsChanged(); // void contactListSettingsChanged(); void historySettingsChanged(); void globalProxySettingsChanged(); signals: void generalSettingsChanged(); private: void signalForSettingsSaving(const QString &protocol_name=""); void saveAllSettings(); void createSettingsWidget(); void addSettings(const QList &settings_list); QTreeWidgetItem *addSettingsSubtree(const QList &settings_list, QString subtreeHeaderName); void fillProtocolComboBox(); void deleteCurrentProtocolSettings(); void deleteProtocolsSettings(); QSettings *settings; QString m_current_account_name; QString m_profile_name; int currentSettingsIndex; Ui::qutimSettingsClass ui; mainSettings *msettings; //ChatWindowSettings *m_chat_window_settings; // AntiSpamLayerSettings *m_anti_spam_settings; // NotificationsLayerSettings *m_notification_settings; // SoundLayerSettings *m_sound_settings; // ContactListSettings *m_contact_list_settings; //HistorySettings *m_history_settings; GlobalProxySettings *m_proxy_settings; QTreeWidgetItem *m_chat_settings_item; QTreeWidgetItem *m_anti_spam_settings_item; QTreeWidgetItem *m_contact_list_settings_item; QTreeWidgetItem *general; QTreeWidgetItem *m_account_management_item; QTreeWidgetItem *m_notifications_settings_item; QTreeWidgetItem *m_sound_settings_item; QTreeWidgetItem *m_history_settings_item; QTreeWidgetItem *m_global_proxy_item; AccountManagement *m_account_management_widget; IconManager& m_iconManager;//!< use it to get icons from file or program PluginInfoList protocol_list; QList protocols_subtree_items;//list of subtree protocols settings (for deleting) }; #endif // QUTIMSETTINGS_H qutim-0.2.0/src/profilelogindialog.ui0000644000175000017500000000773111251526352021325 0ustar euroelessareuroelessar ProfileLoginDialogClass 0 0 210 252 ProfileLoginDialog 4 200 40 200 40 QFrame::StyledPanel QFrame::Plain :/pictures/logo.png Name: true Remove profile Password: QLineEdit::Password Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Remember password true Don't show on startup Qt::Vertical 197 11 false Sign in Cancel cancelButton clicked() ProfileLoginDialogClass reject() 156 230 205 217 qutim-0.2.0/src/profilelogindialog.cpp0000644000175000017500000001670711236355476021507 0ustar euroelessareuroelessar/* ProfileLoginDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "profilelogindialog.h" #include #include ProfileLoginDialog::ProfileLoginDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); PluginSystem::instance().centerizeWidget(this); setFixedSize(size()); setWindowTitle(tr("Log in")); setWindowIcon(QIcon(":/icons/qutim.png")); ui.signButton->setIcon(QIcon(":/icons/core/signin.png")); ui.cancelButton->setIcon(QIcon(":/icons/core/cancel.png")); ui.deleteButton->setIcon(QIcon(":/icons/core/delete_user.png")); m_new_registered_profile = false; m_has_new_password = PluginSystem::instance().registerEventHandler("Core/ProfileLogin/PasswordEntered"); m_has_loged_in = PluginSystem::instance().registerEventHandler("Core/ProfileLogin/LoggedIn"); loadData(); } ProfileLoginDialog::~ProfileLoginDialog() { } QPoint ProfileLoginDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void ProfileLoginDialog::enableOrDisableSignIn() { ui.signButton->setEnabled( !ui.nameComboBox->currentText().isEmpty() && !ui.passwordEdit->text().isEmpty() ); } void ProfileLoginDialog::on_signButton_clicked() { if(checkPassword()) { saveData(); m_current_profile = ui.nameComboBox->currentText(); accept(); } else QMessageBox::critical(this, tr("Profile"), tr("Incorrect password")); } bool ProfileLoginDialog::checkPassword() { QString password = ui.passwordEdit->text(); Event event(m_has_new_password, 1, &password); PluginSystem::instance().sendEvent(event); QString current_profile(ui.nameComboBox->currentText()); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+current_profile, "profilesettings"); if(!QFileInfo(settings.fileName()).exists()) return true; if(!settings.contains("main/name") || !settings.contains("main/password")) return false; if(settings.value("main/name").toString() == current_profile) { if(settings.value("main/password").toString() == ui.passwordEdit->text()) { return true; } return false; } return false; } void ProfileLoginDialog::saveData() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); settings.setValue("general/showstart", ui.showDialogBox->isChecked()); //Save new profile or existed profile's changed options //add new profile to profile list QStringList profiles = settings.value("profiles/list").toStringList(); QString current_profile(ui.nameComboBox->currentText()); //save current acount settings saveProfileSettings(current_profile); qDebug() << profiles << current_profile; if( !profiles.contains(current_profile) ) { profiles<text()); settings.setValue("main/savepass", ui.savePasswordBox->isChecked()); } void ProfileLoginDialog::loadData() { //loading profiles QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); ui.nameComboBox->addItems(settings.value("profiles/list").toStringList()); ui.nameComboBox->setCurrentIndex(settings.value("profiles/last", 0).toInt()); ui.showDialogBox->setChecked(settings.value("general/showstart", false).toBool()); // ui.deleteButton->setEnabled(ui.accountBox->count()); loadProfileSettings(ui.nameComboBox->currentText()); } void ProfileLoginDialog::loadProfileSettings(const QString &profile_name) { if(ui.nameComboBox->currentText() != "") { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+profile_name, "profilesettings"); if(profile_name == settings.value("main/name").toString() ) { ui.savePasswordBox->setChecked(settings.value("main/savepass", true).toBool()); if ( ui.savePasswordBox->isChecked() ) { ui.passwordEdit->setText(settings.value("main/password").toString()); } else { ui.passwordEdit->clear(); } // ui.deleteButton->setEnabled(true); } else { ui.nameComboBox->lineEdit()->clear(); } } } void ProfileLoginDialog::on_nameComboBox_editTextChanged(const QString &profile_name) { enableOrDisableSignIn(); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QStringList accountList = settings.value("profiles/list").toStringList(); if ( accountList.contains(profile_name) ) loadProfileSettings(profile_name); else { ui.passwordEdit->clear(); ui.savePasswordBox->setChecked(true); // ui.deleteButton->setEnabled(false); } } void ProfileLoginDialog::on_deleteButton_clicked() { QString profile_name(ui.nameComboBox->currentText()); QMessageBox msgBox(QMessageBox::NoIcon, tr("Delete profile"), tr("Delete %1 profile?").arg(profile_name), QMessageBox::Yes | QMessageBox::No, this); switch( msgBox.exec() ) { case QMessageBox::Yes: removeProfile(profile_name); break; case QMessageBox::No: break; default: break; } } void ProfileLoginDialog::removeProfile(const QString &profile_name) { ui.nameComboBox->removeItem(ui.nameComboBox->currentIndex()); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim", "qutimsettings"); QStringList profiles_list = settings.value("profiles/list").toStringList(); profiles_list.removeAll(profile_name); //delete from profile list if( profiles_list.count() ) settings.setValue("profiles/list", profiles_list); else settings.remove("profiles/list"); if(ui.nameComboBox->count() >= 0) settings.setValue("profiles/last", 0); else settings.remove("profiles/last"); if( !ui.nameComboBox->count() ) ui.deleteButton->setEnabled(false); QSettings dir_settings_path(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+profile_name, "profilesettings"); QDir profile_dir(dir_settings_path.fileName()); profile_dir.cdUp(); //delete profile directory if( profile_dir.exists() ) removeProfileDir(profile_dir.path()); } void ProfileLoginDialog::removeProfileDir(const QString &path) { //recursively delete all files in directory QFileInfo fileInfo(path); if( fileInfo.isDir() ) { QDir dir( path ); QFileInfoList fileList = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot); for (int i = 0; i < fileList.count(); i++) removeProfileDir(fileList.at(i).absoluteFilePath()); dir.rmdir(path); } else { QFile::remove(path); } } qutim-0.2.0/COPYING0000644000175000017500000000073011273076304015352 0ustar euroelessareuroelessarCopyright (c) 2008-2009 by qutim.org team (see file AUTHORS). qutIM source code is licensed under GNU GPL v2 or any later release. Full text of GNU GPLv2 license is included in the archive, you can find it in the ./GPL file. All application icons and other artwork is licensed under CC-BY-SA 3.0 license. Full text of CC-BY-SA 3.0 license is included in the archive, you can find it in the ./CCBYSA file. All logos, used in client icons are proprietary of their owners. qutim-0.2.0/pictures/0000755000175000017500000000000011273100754016152 5ustar euroelessareuroelessarqutim-0.2.0/pictures/front.png0000644000175000017500000000546311236355476020034 0ustar euroelessareuroelessarPNG  IHDR{F pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FNIDATxڴ S&8VP1PQUGqVP@B45RkA̴r3>_Rۈ;gF{IENDB`qutim-0.2.0/pictures/logo.png0000644000175000017500000004031411236355476017636 0ustar euroelessareuroelessarPNG  IHDR( pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F5IDATxtWeǑ&:TQx@#BU !PbJbVW0д EG ,NpH)5` %XX.fZm cq\1a7D <0 {;yYH~\PR҆>ٴ)kqyukQU%b>w#G21* 1FoѴs(Km h;B3D B@!D~=WP*B)@y):QJ}#^h ܥAz=(a$G'/ ZZ~(zZ!@3hJ]iBy+l.EĘ?18PfCΑRR*D@i TU uUb;`Z,)sF߄0nА7h/ḲBY4msz!2PR-(N2YU #V10YnC:;Xn&EܤUUow!xJi!}t96ŽkCZY@\t!{0FA@ ,b1ZCZr( T޺1ӚAI ,6?(b@/886zz56;lw<\3 Z*#D&m_V Ueh!3D\eYR$%R.6ygCe^ K˲jvMMZǴw>J8LH0rI!}%E>}C?R3HR;t㵡d.jAHF BY4sr: 9}pm1Bd7Ns &)NHDӗ"הiQN7!=@?'\A TbE!T0h=p{?b$ćx#N0Gyc8`t,1riPg OCTZ>O6M (!!}hl;l6; 9cXZUiv}.E壀La\BܸpMP>PiD7ᅔ |/ cX \~?i;(d(腂D.*'"o0)ƒ(ƈR n˸!BBRj o Gbެ PBBKh;д-E,1nd~cPYWJAkEDFdDQPJAi,r4FCs3JA*n]h98R`(_) qZB+; zkQM3) (M O " vC^hB0B50x2s!煔J zJ)(7b3q#Tri0%$ck9>xDPtO *-xC&Q1P 2H% rŢ$ƺ5mӡ\j>=(!xSB( Nqz|:д )&<=TM% > Έ@m+0pH`Zim[+`Fa V c84<iS$3[b7Fxd1j)%oH:C@Yb8GRJ`Br̞ ȑDPZS,"W:Pva*vRA) k=9ex 6!' '?a2-Ph5LE^#]8>0Lw"BϿ%S|b.s63QW !!( a1Nl {NG^VBqORPG) #IS*)$ ( u=њI*GJu}<)#6ѨJݮ`ZcZ`>pqyE1ʲȄ &#yP3"I ebB6cEa8hZ8!%W1!"Fa0Ơ:Quw 1#{ ux3[g~.?hewkLL D 2=)D#.])@1L`'FIbfA.i*D$}6 9n68Z ePGg c\%Z?@Dg^ *i/)qTBe6@aJUc4fUt`-w1 @tcD izqwߢ{h:H*qqh[zBT2E~4F}ܝw82Kc@ʡ)LM ɀ)cK!c)"eAuޡ@D'!%sZ]DOs bFS[OR ~" T~$-/Bs[k.,0XKE>Z), <{Z+|b6vO0RLˏ39Ei3nR_'Q查BU uU( cAv6) rϛ@~7 88g!%QDI( C;(^84mˁlYV\f3UUz8*#t']A@qzAL̸Lj<,y J(,Cq&Ґ6Fk.rp6tJ}. s[J HTtR"blPH8 2S]GBWc\+1  =JjϟZ׿#HqJ2XZ2rdxHeL=|PJ=HMfMaP% Eus ;89 6_Ba1g;yaPAIh FU@T|^c|0@k(8[ȼb$], m({`l'U<sk].an`)GZcє=Fk8E B&MDL\JN:&eq ~^Cdٻtz\N !Hf%Sfx{D 0RCb>! 㚻<~gkI`8SkBeipvrOo}$ 0B*iL63/PmohM, Vʢ@u`8k{P"gl( C?`\IORx*yODA۶2x1>\|;Xx4#FK&@ۍgR $r02F0 v*BbVU\zuPR 513.1ٓ\ 1FX^|<>D2+@FU|}o7l!A i:}R2_tI1f8tӓ#=>] m!c]ӋB C@>EEQTey=z|^9nO84MfbPR,2[b` 4*712Qc hZB+H)\ΡćK8X!Ddw2a sB`ƛl9JeTppcZTdi;$6@ZԇȐuHUb-sg5~3a!M) ;B.ے/޶Rgj wĢR#^غRm0~d+I'&:$WVKE)$x -}ߍ&42J#j@rJx?ay* dHF)AHqIHjwpv'C*qt oZ Cߓn8zAD?I Ǡw6S}hXaKsC1?9ǯo?`_9Ʋ(X`Lc)8X lƧ!!@H^ whxxq`zumo$1]iFj4j}7 1$@0j9 Xnnrf'/VH=  nS&&HLR,4 -0vnnX==Em3xNENe3|vGtu|z}A:j2Jx4uK%e.-s/Z-p~v opwAsp&(sM$E*ɐ"1{%n׵̀CpF,>}F?Xz4t%$wЅ̮d ɳF$WC>B Z_}N>TE*qs{tYp"0X"c`W>v泚˾`:H!{ɫ%h=u]!i[QCk /ո,'pL5T!Ro3Spw/0jL M|b 0R]2[+H b>=޾nÈYljKS`bG<Nh9*o.?~af!;X8&%{ޒ%g -RrD,͡eżv )f2RF:Zr -,)㸃s)wCIF%0,RлlR@g%Sd2܌1FQ%ʲq<a" ;d˵KcZq_z ~\]ߢl(akm`Gt#Ly L5/듌gDYxl=.~~`OћYteDdOWF5Vv?'ߟt7!>Tea9Rw;xZB3UYRO5BpcC43H !-V~@Ӵٞn*F#X FkhaCZahfG~t#FOkKΡ+=9mWCJkő!B$6ic]HM5!׭x9mI RJIjyϟ=nn臞kS!$f:#isLbaI']0AWijza݁+~1p$!!Nr\>GrqN>*?Z숖R1-*`J>^|X(xZ 5}_P y{l`L&(%]A""p&URaZ{T>IsCӢ* f c*NfȺ\:O϶*1s謵 FS*%pP"7XG`\q'Yj\p"l/IX({t]ˢ&PJc/cX>^|nZ-/PT%bdc ', d;B?P$ %+Wwf{@uLJܱ1Ӧq\U('"RTsV܌~|Rh T?t}bCB@Racf=)|>C]WI6@Dl' ,SL稍f@u!x )ѹL+U`;iwETF Ѫ(U5ʲw"nƈ`-,,h J_~1F;\ah#kh"9 Av/K',F#%VB lqu}33Ys- F)79H.,swx$o}GWxcHg]89Z}ھ+fSÛSCBє&"<&, 69֡mG&Hk1|jd{ˠ* T"O]ߣ.ˌ3`q{b>:W wپ/3qd5L&u9ĀJl%/;/~IvzɁs"2]!W^ [".>}-fH&@ZZ i*gEjlVh*|vv #"h'p Prr!@+k9*dMQEaqjc?uhmۑ)'fQ\#VZ|n*΀B tĈms)Eުm >Ӷ)((i8aa )s< vN]{hntdl+XU :*h}: IU7Fw=g'v*`+Ujv=׊ pT=#WFd$rvߠM\c$+@Z+ %K?gϢ(p||F^"fo}:C Y-IW0UQ, gOc|Oxs]ޡ{rĚUjmG?{ )=p:\BKX2vnwxtzЋ+l;x~˥>ud8=9) eIA&&7Վq5ba?`i㧵8=ͥŧ+$CGuřhaMZA4e4ڥ/+),9+~->Fud e5Ybѹu0AV9NOpvrbдZ8g٢qwA۵U59pct9J[kfЀrG+qebpAeH8)ԩf@~{= @P%xoh;=1\Tٸ׷v&EDwZҠ, |p_߽Q YiaDmxcȱCZݺ4wAf3"l%y.m}v>]9- RT<1l0#iC%۸#da-B/>_@ }~-Cnd=Ry6QmWIJ'kcXwSVnkYsФl!s5T`W74C~%֚Kk]Nb2W:F۶d-gfa Ҡ,K,s=Vv=enu007#6~zWԗ“h)BnVAf|4KG(?yG4"6*hMT vC^3u]kERI_u L72Dy0B,ݞi~P0y{wO$ƘFP%?DkNJ&uU* xsdG?z lUY`^q~v#||5nn1 CnŴ=rqJ̅BCi (hxtv5W7{@EaPU 5Uay e/TCSeQp+'(6(fM K uzoBHި VX-|u"TeKQϔ}.'j5Ǐ%Lm}'PJi{(I:Bx[|-ِvA G% c?4FY"H v3D+e٬zuG~{(J|JBs \.?]#)ENY18ZH94P@j/ :vRUGK#"?yG?؜5ds$7nTe(J+ -?:r13nn.@) whڻKxL0Q̌UUݨ{C=ӹcM>34)r!1F?^,Z..>uz5y z'{7%D#RFi:DDhqzF]W;|"ҁduu Nz}$>1RM0AOƓ(:~1 WNZy MXQ ZY\,*4.5$/Sd%MuUrS@UXx޿} J{!R~Ѩ Yg'pΫ|Gγ{:c J2#B.]I(nٌAͣ|Ët Ӥ6N'#ۖk}ߑ[q)1X "lҎGyJ8=^SaLT8ģ59_\g]y6Ц6+ڎ] 4RN϶B 0%$~2O2k#o {rZ:v'Qjɞ cPV$zC$ %֊Or uMCj|z~W/{/ڞ9OPF=`}@QX,DQ bcxvlOWxS̼hi$M{IJ)2Nٖ2N[ˡɭZIͻ!yFݜJIh] +¼C*Sm_&w &#-b==6_crG8[t:G IIג.W7FiVQc4dϸ|^`̔jY 8ҬX*O,Ɋ+ 9ij/W_&r#c1a^Tkjl֫%NOQDi+]={o^f׷46 yg5Gifqq#M˸dڞ'sk6yS:Q抙J@ك WCQUfpgu,r6N#M0$5*жyæ]#C|FɣSTe׿fCv}qwūϸd9NPUe-(EW<"uy2Ak-aAAISztv>_q/(]yzwL/X)C0j?:ׯ^0? 7wp >`=ԃ tec+,f5f%^|jǏNouy!ZJX;`,a.41D* I.4]'_Ce97NwL^dp~@ӳKGҕBhzď?mQWn7$MFW^B ^=#L݃hY]eBa O_O <MCIvK._UvO+1W -34MGN o1ІIWF\)H)QԺw=Z~%?Jl#-"4R`R@V+Zԅ1X.˷_g%^w[lI< z9 U_Op{?22iX"‡Z(D)8IN6-7܇#F,H@1хliА7-uy93yZ0@"ߡir)@Gl>>:—_$EAf) lN5)zݮ(K !@WV|F+|kyCo #@ޗ3DJsKTUt[aq2iH5[3qA:O/ H2M'[DLPb mǵ*wk'q:FS)M 4ۯ4M?Oװc~E? 0J,K\Zz#e5O<·߼R}Wwp>YǍA!OLI@r84lw76ޝd~`d 5O/ 6&pd]16cK}۶}LY[|?2w 4|HpS*umQ[ĖoiZt0^'1U }G8WRKZ gpYS~@Y/OJMnAN\[ %NNNPU8}Fq6/?}~fGmv;6O(˂"0"@I( ,1W̪ o}ŧkcvЀuO&gE?d0L# % |`R]Ga^M`iVP0lȢinI(J||EMA<4P#|>q9MnDr:Ҧ. %6=.?Ohچ3`sPY|.  r.Qb )%̀C~r㜂D'<6vE[bq銛$>e*m@BU!|TU%K G||K 5 /9t]ۻ<5k6<m,r6nj}͗~ ~{- GG+TU~zɹUt@7'&Hչ[PJ2 :jQHbKmc>3F> &=ZqH1$*%S"ۻ Rԡc*AdrfӊuZhEMG |ϞWpwO?0,D!`>A6GI98ֺ1(Sls[p=܎5lP3zKh B`6=8Áz,Q). <}v˟?pwl-e4> îH}@Ѣ6D}j)W_/@ӴJų>ޡ2^|`ytd-8Ҁ) C:m$ J%?xr)i1 4dkLRl=@Gxr~R먭ؓBN܊l9t<ZrX<=?.?]z4MiѴT$g5o%aӴp0L:W;gx({a;,J) IFϣFYr9y"њ+7tj =~lQ( sDf "OS: , W |9^<{Wx]>#B<- T<1EtnȀYEJ+c\npsS<:;AӶB*_D5x<2Fh}8NUR Wn SUf$B)YtG :d&MPaOs!ZWXg NOSI~nhmقֹKѤ'R5U˛LE9Y?579\^^9G6nl:ILu19T䡒ihx6复Yty\V;"^b*OѿyjD\.2+bIR`_z/o݁ ٟ"uMNRMGuEhhq"~1_Y]~_0fwNa?&Х fl!/qqݴbuƐ&'W-) vvȲ,жY?} w|@P釁W xɣ&#""Lqr|DRowYx /=y{=cƮ;xH"hHȳ|%u1>+9X |o2*&jk[{RkK8<Ǐph Z h!NУ|rƷ|!ϟq}}i-"-,_D>WzbCAc)Q[H)_uI3`>Omw5N#hKѣm۬sG^FQRAwd1ϹҬY1LJ!7> 1s#[ۃn#_fC ''G>~B?l&>Bk2w~.OSnikUUb#xb$Dz`ZGPl>,Д{BN0g Ns*DAsZ, Z+Terh$n#3%IENDB`qutim-0.2.0/pictures/wizard.png0000644000175000017500000025341111236355476020202 0ustar euroelessareuroelessarPNG  IHDR\~ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FL$IDATxגdْ%-}13#eEݘ!xÇ#x[誮.ɛ7I$ {+}<0)u+I81;EoowZ!<VD @:;0X^$91# %Z!&@PJA "TGgADg0)i_uD{_kn"%x}/A4Ӕ00D*r)`bRpZZqLE3*bƘivqus ĄqHcb3TR!UPtOUϯkWmF3G|~E=6=@ }V4˲-lYnAQ;Kk"*YS,d_4@{P `&l VR!Iu!dDφYtl!001c\sF.eڂԟYjЇD% `sƐ. "8  ?}_nNd ۷"wɞ=u8NJqU|)D߲PۅR@SQ@UMmôY>l~lN8- &A5U;Ip"HvJ-7\ bs@@΢a\{`ZP+;veœ8Ov*86B?TZ+Rw`x/n/+|!o;,$ ۬@XPto(YL^օ(ob?_$ !A8iNIUB9فe`GKxbe3Vu?t APSZ-Z+P YqD.[ϮIP\AB &,E~8 $l@) [??߮*(9'wxp~77 N~z ZuAJ`0|1S!%NOXue,6iB_D;ٸ-VN TMm"cE*6 H-jHLn0֓>kfN5ksN6Vqғ,&}I^/Pj y CJcKA%>"8ֲRϔ%0yM#ӂ}H1/zTD|D5zV =Qض_H `Jqi kSbXfB B?p&0Z7d웇 Aj?&U"\"#7SYaW#pJv5B 1 VZֻ}nOO*,CJ8㔯)"ђLFՃ7 h5vH۳8tt'e-hW(RZ䰈[9xm !P"{b[NNZ=,! ;Uk I*f ײf/ZժRvkG(pAfnfeѓ!$Y e V)5LVt*LH&T9RZ/zas!p;B"ԪoƈIxq<iD N˂eɆ$M&><1Ϳ Pp{R.4ؤ6(+3ě~ZlXQxJLj ,pL$֤䬸^'HWHlZN3t<N@SnkS,SOcltK%N@23%B"0zjM M%+r-V"Jџͤ?ϱCN[l7#81ӂ@g;AǴYzx#&0  b>!%L㨃| a[m"mJ C*un*qTAI'jSZ% L"V!^_OM4Bqռnb {ݿ?NIvd[]DH1d=w PkOM;;a1U&g]YǼ6;p}{ƃnq߂SPWբ4C8fl6mR%+~mHUAHV4hYAW8ꌷixu#bk0QD5Ny_$>jcV< 4$ Ɗ~ea}iΦ!T!! ʭ (¤y6ӶײGZV1 ی" idZqaY24P`\ta^{O8?SPpP"1E+YOZ3.c-ГmO턴z= 8,D;JjH%ňMw2G&*Q2p'~1eOdݣ CaCͦ9zXه e>)Slr 7A]d?N8+~a^b(1`_1ĺ\g`{щ Cq; Yw*KƓGָi'>/^k..%tp?aOiԊTi=گ$keUtX&^ƟU l`۵Ա{HXIzPEd@a+6Gk;x=%A %4 &3srb' ā u~2XE*k09INN')a@۞wǓ:!v;Rqg8%~|,5af%[ ]Lz3^]Oyd/?j QcQ/1E%IK Kѝð׀F8T-Q>(=$}]Lzmq:ZB[" ak4 s\\Fbqic%*6kɛBr;Kȡ!W.5wǣlam_ (qI5&IIA|V'S,Iu!vV" IP"`h+ٮPQEH}3U59a]5} k aJp)ζDA%z6^))'q )N}23۞gaDXlJƩmb!m!ȹbtR"N9%l7-DŽa8dQ% f\0/3ovrFvO6Oݼ-aH=K_ŃRMJ(Z͆p Q*ԁ*^K|Ԗ)Tl8/( h ` a F.F6zdl5 &4vQ^rC2?::."N)fM: 8iܲ;l%[%PKq(8mPJ~;ADp}wS`&Nxrӂ4$y Ab$UIh1F1H8UnJv:l[^ߙ:8H&"`Eis ;}26/,>k&$Ȫ] A N=kYtk-|_ktr1 L4hXK&SP퐘sQy|) 3sa)%eu fB) fVˌexpHP]|A#5W_"N1&%f$b#+d,YT P`ZuJ!&V1mV,>@_P{wؿKW$׊)Jjf/N="HA-l'_CJv'4R3I0 F6($?bp@،3N`pyv[Y'!YBbkڮ˜zn1+gcMF5V+6UZؑL "mJHo[qC5L) &[hXy<-;q8iYޯѥH[tGQQ:j dxtIǀoI1`ȥI4eYt!@ݩ pZm2L`X.[CsC=f\F Ӡ»ӬDn ӌ[()*mzZu鈩)}lR6%hS+ΝmoS X8!@Rj]!,%1$D[Jݴ˂߻PL)%{<8Ӈ|p8"wëwx{ur(L@BibƠogHCWcwb k*t*Q`$zHO `g R"[JU܍.RD#T0Ϫ!g 83fn'<{tk/n8ME]k㔹+-N;H`+'ԂdMr7i4&v58]c;kPVn=>}9/O?ݗ#S)WK j|"6%+Xm !#)݀:2_D/Y0bP! ]ڴJeN)#%]kmhQIR h116Ðpw8x1OWo!-y!$ c m381=j d=v>)YPpwi')*B $(\JZdU3п u0$>|?-q71 ө\>:+RQrRT)B_lF<@RjG !` FDKQ1`lufՀnfs( ,IXCVhkżd~oUɠAzd^ZLh$F]#${3 czogԀZl1|ٹ>iff)"" bZu1V\QqPKusRm0 Y擇Xr47xnF¿.TSKrT$*Fd m8b S31%O!$@UJ8?oo>>˗?o۫Bȶ$)|3Ps)N1c^O1)uԪP;vks1`JZoI<TLPFj~ <:TuĒrU E 4(Ԋ4aD/ݫwܜL:8)ן`o jWY ꔴ`#_$NȮ X ۗx/TCG騋;0׷wxW7;̗G HZ8*(fEanӪ5Lsgd_̒K0E :'8k*(JmGPEOːX!%h_T8L*LǗ{$T!%šW׷91hSĿWV^eU*NVCYj;IU4;pQ` ~z!Zq88 $8Ubvo&QYQD0!ȎW;ͼ0Rr6޴ X/85&r**>ZbY Ԃ'`ASیT.՛ J ou^%L--PھTJ+ K)s-[(c5Zj,Zc9kIЫ9tbgg9w``0XcaKd*/% LZN]¬f[@c;Ӧbk@Ęg6znokU \@g(ZgLЙv3"C{7%5z+LԔ kmGG@6b a $unl>)NNNX"{$,e5 TpWJH,{ q.9 Y'[k@te23]5զ$Jq-՝'S@.R3 v8yn-] ) WS 6tN("A֦UXM֟U'lDӇ8bS"vmlz$kJƟ{W<ߕKGmꖏu0搒-̎.굕RE!ѥKm(@azOt\zw0;]!=5jTki,1;-1;`3M8sb"L*# 񹩾!KŘ`&׸gm(\0>)~xΚ3/[7: "\k0~Zlv)n"e,@mabOkC>CneK]5GH-RVJJf֫{Օ8eBύd.N2ӥ臚LX@lrP_ҵ`6-*]Jh>^ԹdΣs,4>70]Ĕf{8 y$T@0S’ t3|>«wWa(lz3N])JQs΍pm _:i.0vs"oÒ;@hU?͖R=?Q1+-Jjx_Ǧ_ci]J6)s-ۅZڼ2]r^ZI%pܽvUHuL5j'O3G2q_j`όRX+MpyqfwWue(wp  }w+$jiS167x 11NSFDׅv (lvU`ԺN0 ;b|6:1퉴J1%De7lbP7ةAmUk1E*˜ cJVw=I/(Әlsa+lO)%0#3afa3 x! 7ww8_ԉJi$BJʺj/v<`nc fgz 9Ȝ`(7NcaUY]<5aݸ* !adժҍb:_,ۿ𧬢 "UF9:l9~N(NrSR ((pEN\K /6]TФiκȘurävv1LӒ+ppZpsJM9N @ ifNA93EMfc{MqDyܼ:mGںnL_MkGnVPJ Y `G G C1fL!'{ :+g+B2:Ȍ݄c_l;可q{0zQ&WhƩBfT.uT/(&1W"׎5wp;k| T*iHҐ蒣P1)6dUR1yGg ζrۻ#~)/ DLk̳-܋_³Ǘ8uƌiZ܃Δ9t5Ĵ.|&P{RX/l6{ ?1h:ØtLn3VXAy)g|oށur5HET ̈́!ʘ6!*uAi#ҪB+gDijRr7Y|{y6.PlGP,G3PV;S[F-k1 v<gN(-d.3'4*ƭ0_L.wS<8;[Otz* %`w*lc%G"R*t”,Ub՜9vdin_Il", x8~ë8XJF6j&EԤ]8L+e-% 'Hej@Sv5 6j߼og/{)ag3l6’+*jWy^ fӈDyQ[/.+5~sQ/k[Hoѱ75uTUI UtShV4RLfQ5%&>aOV\ ٰSf~{wӼ`Yj3V"nFEӤȊ9ɲhIX_!2Hh -w >OBU F׮'hPVҵ㆛cyMj> "b{D2vQdJV'@-־{fuYWոׄym&!՛(׊I?M OƄdU{+B'曞U،R.F<нG! dH^)5ȍV 8qӤMAd4ҫ(dAq=F1LQHiH Rv8a­"F:<A_H7]x8g)PcTJ&sQ' I)Y*h 3*Զ&T3h}V*h2Y0`7N'Oc6v ӌsP Aȸ~>Z0 URŬ ls{;RUKauEn6!UHNVɨA[~ꊪ&£h͐vSӦF{ŁT15YgJ'i>2W4]$Aq3_R$f ߣ隴aP`kg`@$[yVL/Dń*FRAVv &bcfIL!M E ؘUZcg Mbe@ r9[F$QJAo Y 9 @i}*}XQme/\29k%UVrm!UJEb)bDRy[y% ciNEya4 סԬu"@cH)I#j: P˸ԙ~gFY7w*hj"='lVy ͟ Op~-B])e|F3nBE"OXH+Ĕе(q哝Jsys qsQ,kǦ !d{ޙJY4VW`qy`@`B:7uuk i$,Z%S:*Vip`)wȹ`>-:Nj5g8 Hv.%Ŋ, Kq(Ew:Lf<9hݨ䂜3J}G.w 150ejS6<$:OiXz<5^"P:#zw,b/<օXFA֡1Ν̈́&]ȳ]6'AՋ&]ڝif3 IbԩI rܾkV~i)=bl5{ ~կ?-;KҬJ]ۤ1>z~~zݟq]1az"z[o/B2R11cbiJL̘vFsL:Mg4~&RLkvq-3 uÔ:o)FA턏5#Vw-`eZ!;\&[ "X ͨUڕoPe1m`j)%6.w=pzt†25Q8EHՑ`.9 W'zi7 0>J,5eiʄV,YcPgAp~ZiΈN8aZ* 1N$ڕLt6#wh[K~{?*M}m: ]Eք "g߷ kͽ{դ߸iz$# 01UM֝N8͋%{UfWͼ"iǔoPuA~ nQ6E"NJ0%cYW7``ڈU]XGKqX^;JvjVa2l qn%LC oo@@#q!x%R#C Gl5NֵSƕjj>BJ"m&ɀul1;dS0ARBLLQ]D eM$RVE: ݔFP1\b!jZ׎V>xX_n A"uߒ|551՛ofaFK8>)M)Cr.FxmR;B|:"||4#`MfܻW5xޮ+S+%;os0vcV V#EO8aNXnXK\Ki|_@84wH͠sf]̉ri7p"Kؽ IM2p |1v 7#9ktշQڌ0}kԀ>yOu*ڰhHCIxm[,6tfƅAPAƮNY {O(3Q{E9] a~T,ҙeyN?O}L#|?v;tZǯ񤂳,%})4 ƆFؚl轂нwܗ"7 NWO_\拋8č͝L@%]oZtaJU3?Ewj "5lFMC 6o'a<(ӶI$&>хƳA'³قU*j,S gqPO5ΥzbsmL9IN mU0Ü0N qn/9!p7xw}e.8{"XEvԮq".X`5 F6-Kp,[i7c#3p\UB}I7 /15쓴l»0Nſ|,$vF Z}=f3[˗总ir)XHJN`b(AS ToY񨭛FWy qpbZa~jDt'<^,HIbHUDta$1tLl40yP@`u;] X!w34|3bGxp{w}?4c+d%Vi's9f!gW!lѓ Z8BI0D1n,l5N-b^;]hm䪈K;]پ3e{Zxeى0R2‚>n1Sڶ&bভeP Hڸ2.RPl!y P6VU$^[OiYb%,C4W[v;]j͘\]#nN;1/gȣdCi6 UsZfTktE j߲Z[):Y%굨IcDNiS75] `2LɵxR1$`37*u؅$2oCf#@]a{qϦNӴ/]i \[a>GL=qRRhn2fqHx??ky$WFY>jؤץoG]0mbζ1@0Mbyl)DiA7a]npHP=+A)W\vQ#+=L D#8_,$g,˹z〣&;j) Oi0dLQ59nx a!j\c\D5>MCknEm 8DŽ4bӇxryܽ?k}S\ŨI,--Oed_zg蘜lY$Ӣɯf)viXj́a!Hh;טNlFU5BUT6j\B ^Q#j;)iXiaFz3'aظJs(&'Afn6L:z]JA*/o FK*KSbg4&\qyǧKp}{iVZkfyGe/'}/zmXjkύvlv9a! d+>ukHN >y0݇qo8's8%3($&F"]4p0AkQe!hHl<xS!4QQi]cT*ŨkuVɑТ= ]X{뚹5aT 3606 ajCWEΞ5)ͼ *UU)6!ۣ$,EǙ8XZ5H>ǍSG%-%>pn⯻ ) f t" Dm76%>yww{\.ȋ)YN!~JJƧR-U ))G,<ĨH\rk8qzr9yye1⦧!*-O4=z5G*4gu^x"K2"<6RRM'-#P"R7vjNUl v},s$tBӲ{G C11M#FIL8o^<}.-~7x s)u<e ^{!ХƠfE2VZգn"`Y1>$D@8 06Sl5l6H>^3$MR '͵XZ\)zZC5$ %״5 \J D))p^U^t$E݃4U iH8a;x>}v?~ R4?n㢪\S/4tF.(; Zèvz00t5fҺxZ̷P?;Śs- /\Ӭ`*`lA> KCDn6".>׈f ?)9 ɸwd<%U؉㐢IRߚ63QyA/Z̹dkEεEKp E@hg;da4)'8oqZ˗{|=tqH WNlqP6覹iSQׅfbN>ŖHXӠtſ[$tjm A"4rfpw:uMSX 2dWs9z ɪ`m]ac[r4% ̊V`$h2.HFR.YU 6 jѣ9 F*($`gA9'P>N!zZ lv؝cJ,W(4]-+}5C;&F`\ RUuQHÀ0`F\O9g|[| ^_wp<pZ0Nk5g 'qj7r~g5vzɌS,BqIڀΊ\IJFg.wcպqԮ3[ ᜵-!Y999qՂ>!nJ lqB*y1>7^h_ǗbI䳥}"|E^)-큠 ;wRkİ@(;@ZZx LN-'K ;'+ b40Lv[<8ç/gQJſ|/_Ň;g9cJ9iYs<-Lf7\[`LU5Ԣa?(K1} wⶐk1'噍]{y-MO!בWJ61ftY . Ti،+cI4(5AAͥb$됒"C4ق[$^R+ 1PsSm70rB8q,_#0:Ȅ(A]B#R6YI!:PT Ji i:{;2KHi90/Gѫ[ 7ʕtSjU"GyByB@& a# 0b;M&<~pO+@׸iV`}آiQ$jƮn&vp"emrvNCԚZ %"}bI@-BaN0g1Rm7DM^Yg/Z:YОs8aH Jz3;>?]fKh[M,)\Br$k_ՎƻLÀ)qf0M'WG_^o~ĻjZfDpۨ# JTqy- #گ͖6ܼnDLJaj o'2#[EPE-N1,.pist莛a8ݘ*TA4KKXS¨+p!GMI>dU WE/5GۍF!0 %\x4f{\^'OqyǛk,yƼNKDzt6A)v ׷A=kAJNPdʹa5h&ѝYQB5\՘<8A7:+,dvu8H1kAv+QPʬA$e[%+mi>QI\JpV*3y-狠g'$W cl=>y}KWWVɵ[\b<+\X,k^=kJq8%lq<HsX.#IqZ9s4,=*ȵ6_T#Ϻ͉V*kݛ}C͝WƴMVOݱаju; u h^q] 5*Ð,Ś%!󬹟$Mv/L}D+:9;iR7q~zUr7?[g”Z]ՆiZ&xEA$XRF]@s疒mk#>6ݐ<`fZrNs+ݴBpwC!8@s+Ga:3JJ]8CZP!6C,oT40Ljk8AM̘D alۮ\ųѝzwey.;=.UC&\g{:q4ϟ<į?yg= ׷'ܝN\T5w  A{u+jN ըS{~k\V,n%r?fو3d]NI~P$"0y2Mn7#,Uy*>j|^rљMUe&6Qoȹ ~ e r/YVx ј1}^(an3bl8>}D/߽z;N8f欛 jB b*ɁiF5^ʼn&!+3܌#r-Fx1AQGvq/!Iq5OLϑyɏCR_nf[z%cYph@M~%̖g1@9'F*UMAGsOWHJ^s߽z{e _WldFTd@/4FVu_L.XxgF lζl O7}-nG˜1zƖu;4H lh3ѣ'8n Թ4UIid%v32Ög*ͲfwZ,> JnZ㎗(K^ɮl?>BLM0E?g"b_xӜl=)-bLJfQs).;kS; L<A@Q}xi~'/'#O?|_ YEuu1=G6fkϭwZJYdO2F&ԛ(@yW$z@s7Hvp'vGG+<f;X f(+f4P |ZW)Qa#u>GDL>)~z_p:a38CK,XrUZicYN*4}z5bQBJ6&?U+=u`Iu1Mev /GOO|k|u=w(5.·R-ؕGE [ O9glAՊS)5>MkRx#^mLue)B }1{LS b^UMoUW9:6Pou 5*/jh8qk Fq=zBq0ZRiHx ;0/:+->oJT-U3{xdLLzLcvvӇS|ėbyhu `hbyu'82 !{gif$@^*2#3N pe֑5HK9lAE4!JLg%IVqDs-LI6߼z !G)55`no6< ̌;֜35*͌Bj[6Q[iI-2i.k]< /~—/_2J6&O?k1ZI]^)U pkXy]{/(~J78y޴$QDj ՞_o@H7bCMy>&o}mtNMcJXzU&Q3'gHj"T_:|cǿ%/00嫷[,K`m (]— $> OR,u3R¸Q~ggx}?~|{e1/QdKVk]gTH3h2tuq3޲b3D8l7#νm=i\螞\TV͠v]@k@O8ع5[66Om;٫^(_V/EE^=$v7vi34"i= ?}ɣ _݇;<^P%|)<f2ܘPˎ`:0?ǔ5f>y>'|[77ǸR2Ѐ>*9av)] B["UD͹z//I,Ee8GZ2?\33I2*Ѯ0tr"_c<|p~Kv1W26:~eMGxtq0 oO͈Ӳ}L-*g۠Vu41ONhQin3'_~#|W8- Nst)HiT|vz^0 =Y0*^rJ4fH7p9Hx\+NKWo n˟pswxamh`)a9e_9Ain3lųǗ勧c/_oq}w4h2/fx ل yq&ǯ5?1=z[zb]q>n< ͇|\vqJU [v#"܇ڎGid6|bk "wc7=ݻ=#=Wp;G#RW++*i%r7|qݫw7?৷p{+4YU %7wj5်&ViیXl֏kI3VIZWlFB' ZA5p4=qzRGrl`-Fމg oEuU~F^pQ5hiV6xiqpno>{Ǘx+*d'ZA6-kRP}ȳ&S{rv:NJ a 2ez=̑Ռo^=cbJаm!aMS k`n"ß]r֓4ܴmj3rw׈n ٵ4d-*8qI cj:(}np K8&fc@o6jB'H7?_;Ne66xAuesN:/MnL=܀f!D:Y'ŦL ['،ӄӢ;=5Í,N9,U۵[b(}VV.IQvu<ܱX="ҳ:W yt~]㪠}L:H{hdꐌg] `Tyo%NTX \*q ul"4yԣ?}#w| ՛G+A=LPqL 빐؜EҼЙ|u=m'_*h߿TN; 7}εHnÓ ͯ>/POr%Ns@*yE* mQG{ ?2LC?^yvBvW'YIJ&p$þ ұZd®!鉐LLx?%-5'_pSW?o~ěqg,XR5q?40R뫇HdϳOa-njK-s[O3K6~M4q^pܫ4ܝf ,UTrn\Jv`h <}Knb,i@'W/nPEMޞ?Q=:57Psiu5*$XV(1}fĐl7xͯ>vo~?[2YiMl5,II.\OQ.jiώ#Ԥb2́CRfև%G|GLo)kH *e>QJ =&MG+:Hh`^Uoo=Ȓ`!R_^NO!L˅D*̵Bƚ8Nn&\OO!1㟿V](NBM^CR1[j8OarR nmS=VsjR) ]UcϙK!0A{64pRi N3{o>\=A%kj{k;*Yq\(jOh ͊@V\"Ʈ;-$A.]{ qX^-=M"yX^^J$ˑbL<}xGx߿~?~=^xEmk` Rd&q[{S.&›eٓEMD}`5lMPvR++a_#[ *Kxֈ5]oLO3S-N9c3 0)Ƚ[n&`?ѩ%TՐ M‹t=9fҬ~ I}gR@"C3RBBvPME{0cų_~??% ^_p̸;X挥0nnHa[5:pӇ\A^T.F%ą^aN1kH9#^DbMUZ,a i<,yH5 =֒<)ncrv۟ːf;~'anN )^KeeqQD$(urw z.fTK#[Ts&[fWmAi7Èh?{O1~o^总 bUVupEiVsڬA?lz,eWw+~:YY;Lԓhʼn0X^cЛDmc9+Vu{kC_9AL[M͜0 dMO 4VM+,o}:Mn4~)>}˟SƜ8% a˘vNGװut&oF܃$iU>k; 6HW}|sT;F"t oVHnRޘɵ3ғ[0;㸢SG*9j8썕Z FL_0N'~Th풷]ΐw4-?]OxoeA^:_Bff*]7a9+m+MnX!6hG+&ljAf\Ο8#inpXL[[Kosw!Nĝ\!|e!jnC4$iM W;[0 }A9QE޳3m-m_#Hwcjt Gu ?yϰی|nfYݑ [Xlw5%aUrPnԚv;đحM#*8qx-:rmG5 =Ćic74SM!)fDa'˒U[YIb&^%s%'84u58z`)Q#$'{þsվʙ׵ uDnw'ݴn7ڂg g|-nORwxg ;Tx{n}^aB}k$d AB{hd8ݘ+Đ$+"4P˪y ǹObpS sh6:4ip}7]w-FQJjR]Ô Bmz#DOhW4@B;)"ڦqn݌xpo>y0;N8-Ez򈴰.TJZF2|z ۟{b)9 fd"m,r tЍg{lIO1O_n(gRHg9:|5K/4B) }19ZpJK+*{_z=K,XfXijfb]](Zda#v/?B-;|-8,KRrg.AF.6{0e>h %#S^u0jO\4Gn|Dbg|9=ajxfEK}Y~'&l NsPRAgcaShXmNd"sl(x7Y뫒39ʩYfq,D+pu8F7&Ǡ|qFsaݣVK Ń.!#v?ſ lo巯p}{(;*g]n;8Z(:2B~:\xs55bPiSFI'lZ#/DKlŦWU@Xە`Ӓܡז;d0[gV?SJ=sCi,{Fx8 ,6ޅD]5v q2vsO1=q3EOIs PI̐Djl e "#:KG`Zg'ć,|T+rq*5r}KJV9[Y\~0ʁ(]P+%葒WCke)LV6̌a kjxu84vh4K)ZwsrX{d7R n ly>؉AH G{|3'K|G3,M\}t6:…3dl W-dh/ n PJf$$ܰ7vm-:ztwȪamӌ\E'YtƂ)2%bQ{\CeGוC)AD}b\e+!†IU'?s*jZF2t'uU349> ȵ9,dddV,CP fSW`kpLgT0guۨұiʉw/(Fsb g-+Џ.4J9R#nƛB&fhP*5j!-;MmbzlJaHj|Whsxϟ[1BC”v/珐K{O3bE^*rf ht$à^ݧ*![$t i^H!1IJL|&hjЄi$H^;5֢l,^e淳RKf;Ԃww?>XA:Ydr3m mX7Y%ж?+k# o%=&'7$%"*9S-<8~֮6Rs)V\r҈~“ |#'7x;qy*{\٦IWNa/hk[bAvKU7NӒÔ,6p$f~n6h R91mqMChCJM[̋: }zLQ(}DLQa"5Qn.f 2lzv>~;/8ԡBrk!L!q BJeh4\-Z{o6 G",F|YL}7 |JjZu R8Bm^41) d$fVE!b ԢH#dn]ѵʥZFg;"X.bE,#w{l0*=qZ;q9&fpcx85~z7BK=ѽEVssˆ_STp.X\?w= s~&+k.URtl&\ifOXMd~ \;QBH]C%a[#ە4].& 7W22+)"t$f8|?'x>}G|;|qvE2fMaJ)P"ziƲWj|tbnA&ȦYҩ40~r*m&6;Ñ! l%gjgFkqÝ-6^3',*6!C/f(mcmgꮦL'Hh[$'>=m[.۩,is4(;oxry<'OWpfu-NTӜv_8U;Mӹ^->P"ș0'GRKtP奉uG~C471z$׀#j,׸O~Iכ:【[6}?L6a.O4E] c;x%> 8m \0ϚUﱸ= bEhIڻ)5Nе; %+&TP[s?=Yh/6ab==Žm&LӀ?~SKmԙMqRJ8VjqiCocCr!E/j0ad)p9&$:t/ʏ\4S%Nz"ܠ?N.{4ː>zZ9~zK.L-jbWqIU.{~X@g#E9ZZ+tgBUy5!uXơP 15l2gN',قɈ= LWsm#v JQf]IVڵɉDiSCk*"zH6yKjПЕE$ Fu.CVb5 @C֚:9j䮳5&l'1UMdwv%$)]3u pK1u#dJ˚q d!խI/hT^iրuO5/;ktƓ=&2wIa:4޿fIZ?(i]#6ϖ&TN̘+_~/ŷo9pTsy1XZۃZǨE4l߮fboW=rzMh2 Q,pƺ  N Rb2[76ib !o:ؖt뛚־b&Vd?2Uq8`jcpPl;J]UCZAncO rOA'![0Gդ wxs|Ȝ,Rj҂ecK׮6f6$J<' nFpsu YIt~snئh7kA׀:x&vsH KqXcefˏ ˗7W8OR3"~d^fCcw"8M7Crt@Tx=` O3 84b#Eup9$QJ؛40c.EgpQ0艻x/C}ލU`Ͽc}fW]o:q恣_-J,E+ô[ơ"1ӔN8o1݄?zO_| KZ .u˱8;ȥH .UPY6XF5@P?SW]&tuD?[6f RW>RQ7R1*u1 4}pI [մ~*&XǔPJ51 EHTShxmmuP_J!cv3E7kl֪`؇\-)q,$%% Ƅv{Gx7w'Yl&`Ө@,г5S\zEV?Q_Uzk`p:YA!RJmlPדCڱJrfd_D8}qFRs76Q!뷔A/"vXM56NBq A>S7WS6d?F<@ Vc&,RbLFE<Ӈ?_|#fٙp`j2XX6䵦ܳJ %PRTO1{hQk~'{ލ.tE2qUi}l9A]@m9 a26)a.ζ؎n"b.[a~OH^:`Sج~n_;T5-= ƆZٶHh2MłnACroX`~oty) 4xg~R×'k.ζReщ]ns*&KhO%BL\p[ Q5g= %2K%=ݒ(j$vk)aO=3«w78frPx +?U5ovt~<(AKb:!w@9վnW6&9udɯ~鏃^Żin3wO=»WkVd!16#.xn'xz;8R4uUe)6|FZNDVTͭDZw!e.tY`6=u4cR+J3)P)b8$N 8oOpo]1Ϛm4oymryռk[p%6K*aB ”Ӱ맵p5?c/4+lv\*No6OK~ӌR0}Ws&Bv هs+5|DO:r?,vwH0O..zYs[CcRNHIc6ðNFtV4 8aw|\> N#RyWӇXr?|Wo^[bŀg{*8fi"yS]d@T(v|WDT8t&1t9Y%Y$klD4`PjŒk(ńQƃq8$C“sxo?_x>y&&㈳ O__ >1+p0ϲ#aooq8-"s~ԓfFxÐd` [s6%ĬJUe:gb,?U‡c0j w;q8!A=~s,9pi)% :_H]gp)BGjp)A]{ qIA[Ϻc8a'5u.؉Ϗ)2[D a4D;a<'Z*, ӄg;0Uixcqeqq "8{$^IuqIA֘zIsGq3ˌ-xI7+b5k:|'Mz}uqTR$"<p܏lHwU~Zg;wr&wJ`_V)`e@ &HntO~>wn_ox 34w7I;XxVI.-ZNx1tyjR,횪ؽv uihλ茝 4֎l7W߿wWn&\qu{7WVgԪj3xsjWE"E$(IOKlo#Wfa\+Z$!yry_x=0>}]75:.Tב%->yz ^<}o?/ nqZ -v:pfvܙfי@PŇn5fpН)or@GqEf㸗*(j]aTgV13[2{m(jscJ<xwiÐT=i!E;;'[˱s DlQ֡$3jqC,8fE#b(6ۻ.hHj]%r6C;xsW/ᇷǯĻ;,E[Dd}X?:=۽W%L- 0 R^ ٣ OWx}u%/:lD~k+@liZ,ᵶ,{aiYOYEBo\7x1^KuzDQ|x4 8TB}w׷_w|"‡oqs8Ḩ*6-#5 %9ÌükYbKr`Op8HsHCmC;C%1CJ6f)RU%EcFa/jknڟޞ:FM:=E4[J lf>y)f԰"3OlDZsЇu@xȋ QM75+?Mp߂~^%:*8$O3n'|><ǫw76tѵu}Rf1bƿ;@%{t5Nw,w{F&ӯsqoMDSI:5.; `7X)M*BZn^<8nI-^<s.ޠAd)j_F5f@'=`u_[$-a6Ӣ5 K謝5%QR0g;$f<}x "b qZr8v{8᧷?|zmY,Mlp+CddV2K6._'$PJJsQ[綾ÜDuYq㜽r7bo~ǯ{߿#g} #mO2o]`}tuuuM@Q_l4/N.cVK?-(8G44I@T}͑ǒi5F*mb #"PNBiP"~ Qe\hʶ\X-Ƞ^x`ɇȢE!b˺[Ÿ́y 8 xZ!~+>o9Bs'g6*KrPոaa*rYku{5i劎 Ɣvqdy| ihB$^d'eF' !eR~(B6NW)?c?8xW0h )yB8_e.NOWz2a$ *i,7p r(47 ! |hyb"̂8}@yueCį}ob;`scl_4dT$}b ")CyMO:~ "\ƚlMsSdۭQ ښSX1N*Y 8:aJBUzA[Uhk c4M (8v{eպDʦ%Qlj(ъ˙d)wŻmcSk,q`|cVI)Ic^||1ȧLh3| O{RܱCPP$d* B<|9G!ࠧt1NuĘ dAWޙyvc2Ded 9ekEɆ \˵&@> W@QKqh$?E!mVQZk<,nڢRx$<85uᘔR1fyt.WLSC"yNcH5j-V))گ*ݾK›,)ABYi.sO#qv.OO ]ǃrhm # bh";J]y-Eס֊f'c!p!&=$%KMz$jntH'7Z^ETJ4j[a9kl>ܣ)bDPYGJ?ؕH# )Q&`8yfx߁'Bp!ǾόJ NR [Y9)m^r'h"Xį#©Fx5RTBP$&7s&!@5KBaGǤBXp1kk aL>\Bbn4EXԵ|g1bwGRB;4nd*uE iAU#L˰4:*c>Ea-KZl R8]Lxy8Fk8iG[%A$FWUUe?0D&>yBLe>cH ` 3u(Gg;#i=_LB &3Y*(YԐmw+=9 :mT\y&"h+|NiUX +EW8 jj$,хt% V|I?r'!'8];nEדG~`[b2- i/gdPg!C}Uo20tʗ 0IlAZҲEc}6Na mtI Y7O}7!AXtQz98ep?ӔHG941B*d!ٚi q+t%d_1*a 5u4QMxxd"Bt4r63}jG!-#D䢴 gj1r_aW&lgS 4t&%q#tlZo!(@"iJ@MI%cήDemjJIN-J!.DF$!~"lzBSsGA9"N%IYjخ,gRDL:IgLRTҥƾ(.hn(D7PRFb0TԌJ|MOwehB2g@$mIb$ t h"BJP (xјH#h9)4,rKt]- [D'Mdq?awi/Q)^[y։cPY/7J?tRc?HͤQ-U4tRC`w x!'_ fuFtID.Wa1H^Q[,UOTFL6oDH')ύ#ٌNCNdˑF(Rk0mj::hNdCad?gőC`kCg%_W_m}Gk*Ƭ""V)}&B",ZhMk囏 Fkg`-K@(TގȬ0Doь(p#>[|ì%C2EVQltrUb}PxUJ K-QAD.]n(t1r6g8'M }^;. orw (R}_1αw% ZrE@D{Rp c![Ӄݜk ͭާSf<Nj$;&!["_T[OZo"~LaNIO|Ʋ/:XBF 򘹖ZB2KƅCDXu'mE44^u=]>R V.RUF4xyq Cyx)CV)|"hF}L!FL]?$ո G~Bq"C&>4bg6z6aT>|ы:OG2e1j(r\Le{j|R~0 `,f0!mFČG8bXpu$ExqAx$KRFc6iqu@]c@2Pvch>@QG0jv|Re0m+H j'PsFelrGgWP y1bRW\*OdGJcDc,i'RcsœʞgqdXTZb)uTx6FAij)pKA]t%(;"Vn'|1ˋt*UdP×_|_}9?Yi?DWs6_HG+#0o|NWȢSMBЋyNFMQ0jF? EsIߗ*5]lB7G1w4P20TiIBSm#I \WXYPzP S@bf#hIJP%OuV W#:o~o{X@ETCRWBMcf nQlb&x#!3eD ҆4ꓠXPRpD%n164vӉhx@IM8mϢh805;UFG=H c! VA3Cڙ a@v<~ؐ,yqAɝ>apK]Rcad7s]7nOh5{< ˗S PA9xU@.P_)3\P>B12Km$h}GEK$ߍE "GI2U5ҩc/u *dy 9JR3 SDe_?nt ̈VwaDEV[ZQφ,ZI IBJq 6S570!O͕Y=`ϻ*kC@8NcXlVXAp)ˋ|fτ:SJ:,E&6S8n C)DZ ZII]'|V{h`Xm)R֑sT*ۜdCnd//zےp]gKT*5 QR(Wc!)@(G@zy O(e2X1ok\}ӖcTnD ;~|uWX@ʙlD?#[2p]Hӆu I0W:Q$Ik } 3\O!!5^87Z<5L_M i1Lg#RVs4q( ed+e>*vZA)SP_LiU 5`G4rXfč75Y Dո8Y`>mۮá'h=+bp Nj5H~t*r]>V,8- Q ]'y;,|!t EƊQ1`ά8Y#-T-o2I0!a5 v5J0uyW] Y I_Jgt1I +,U #R1c{/+Rɖ>/)VfdqOW/g-^/)֕>c}" 'aEjJ!)R*XˀU-B 5a,#̸e &i,Z:d)N⦏n*D])}Q6eEN_hkQ[=sSRtI F#)H(*ЊMRҨD S&<Oj|u}(iE6YL %ԕf m\<zaw|+I0YCC.YnL&5McM2P FǐYpGg٨[~{p,鳾iך"l>Q 1:oF8(i! zϭV:c\bB~$?LH'@g"*LV^@3,ܒylUI֕%`R3+.fX⻷971 %Ӛr:A7P&a= /B\+XFQ_"BJ+pi|CO̜t@{X Y781]U)K{r_?qV>鎋#@tUYhy|Ze( >wӚ|hyo ]=N->wB^Kl\HPIjS)Kb冊Ҙ5!#dI#F\R/ͥG׷@wP>i-M /B?SD? JyŔI3sIFNkŠx s^8mN0R+1#*Cqq2ë|>gmo+7cdKQ>?p8vi<@)ѕM /pyK@Pkj~~.Om`sHp(Q JuCf FtR!g6nE(XА:tBt^MJ :YSh%cIܣYLpLex rǚĩI*<+0~Z76h 輱P.dIן0K6AȚ GGMkuj4uIMd]Y C߿"~O`i$FƘ,T׶&Y1$v8O`sZd1MewCӊ-h e*.›6 ]Ax?S 8(&/ǵ& <2h,XBtT y⧛GqŻ!X_}¡nHȬR>Jqr̊#W9B~uU_A/lPS֬iڤe(>3%RVpnH I_H~,IpK&&ORƥ\ٞL[r^!QdTtYhi$/%Y[c?4FIZCD%/ yF+VJ$V'HBs FC)Հ: _YIFw,YȪbSuz˵"y %"1) gD>Opd>od@ pv:XۈBn#F c ;71*E!& ?|>ë;pBœT4 *.OP-k 916N0Klg y(UAkw8:qH; %"O4cV %!`ʨtnłoK@TU(1; JrZ.Oc?`;`?$JDź 0htwUorr(kY\Usi8m }8rϴEb13N=#vyT'G, .~'r0xn9NC*9ѥVudlGAlt|}ЂԖ+SCUDaUQU#ϧ&dAiYۈMbU)Dk3mp"65G*6p!&7$.ƒ^ő$EH <]fAb׍떕b тbd[?n+m-S}?Ei*<0f*\@#MeQYX ؛w>YkGdu/tikrj> n[}5ŋ\~&S}EAR 5GRsIc"09^n:K yĸA&#XG0(8xiK_Y[p"%uH 1Nbh'+/kKaWӶbb>ik[BSK8fVŒSt> `O!LQ*+' I ?||Z~:ҕP^|J3F2/e>pͶ@')zyݾLJԧtZ%E:$-S17k@A(јN2)jJ>~PJrhsRJZ zq"j[[: |Po!3UĪDMNZu%^/Zz Ů4ɣ.p5? Tʴ8TD'6g9L 1b9%(Tm ?_I4Hl f~57ߎIh![27deʛNlqDMj̦5%x]:2)-)I>`A8  2<O_8áͻ[>qޱ+P+(A>p8.1S9בue1m*-?8ǎ MI@"SnPJl1٘Hm"@/sAo(u6ma-|y嬅R Wg ME;|EsNsg(]LV xÔ m4Qp*-M% ʊϓ>t>gg+#8^"Lz..DE3eDel?;?l8Ɉ.1 k:!Frx|8ͪ8*Er'gk4^/QWwD; bpTIf9+${$VI K.3ZHLw"AG6qՋs wOtK7f{pv)Ñ3"9ݴ$Kr֤~86fmSc9k_<ׯ.py2'$Ɋ⻸iQ})m.tͅ#K$>* 2.Ej"R8d@A@{FKW)N4f ϻq6ޣV$vGzG"t+ۣPP^c]k{&:ٜSǺ ];ҪbjmgtŖ W@؂>jhĂ!k2$K,Pi7zaBL!eZ-77.Nn%n29.kBvV4MI]53~HzDsn@e܀P蝃snY%bTX:cI?G(԰8ueHLABqS9mk-x}u_] OqY&=%m,M G})jJ< 3-aM|S`\*@R.UArF,Mլ(Gi1t{VJa6wP02~ۅ0䨭>rĐ, >+c;>+r"t&|q4{q0Z&1CW֘,g5#{>@F\.Nѵ]s oʇ2H":^X>nvbR-mt/^_i,on ΐ%PŤHpKPD5F 6#y~h9P)NSy8Tg`L W9Vy(C?$pDike &%9BЉ!Li [tE'&I=*B+ wY*PUmeq}~gۻ'-֕¤q㳋|q}Nv1>jn) <)/+4.هB+0mBksy8H%Oh 1,o]Q|FixHR8Țʖ)IʚTCG4YCkm:W8w߼C#K (̧-Ւ/-gbC3y}GVV$7-i@>iCb /?//TxwB< ŐvRYhHO$ʦ+ +\, t0`p.e/F^l"tIvW#HIGhb7Egf>UW >9z6%,Ҹ]X,u'tb`#)1BC|EaDCe-4l% Xm8Mm=u3L5<,a Kx78|xXG>o>q8c߷3}JJrge f Ց/ L0G=o;mOcMP$#fLJ-H) E*X65^wb]̦x}qwxQ Cf}'kkds^JCOhFp4tY F[W@gQ9dLE$ȩC!r="x߭bQ޴i\Ss$T mCm;!hkp:)es=V{tw+ܯT [RAL `N/%^a>icj~zwvwġ#c1 FUh,!Wn4yTļ~ h|O=ufI߿Ⱦl674EzZC<,J1\O'\}'ttL1~!{ה&!=1mǤG 18h.PFh櫵%kv>SgZRǀPul)n jC>pN 6{ 1pam#!2hvt W/q~2 Coy E uBim` yTB~KDb?JV3|~} |h**$hkI^.֤U.Qw|oWʼn%Z5QR◧,fLڊ2 }p8zt^K'5Co `!-Nj][08~&e)a>yѡv261יP:КFDnm6cKuxn@I ly\cuGQ)k<b2]x$ Щ6ޔQ:ޱ~y8Sӵ#N}»g||PRpޥ$)njTbg1]ߴi 3|I`#>>n9`;9qN( 2.oLoqP\N C*Ҙ&M?j9 S*@.A9nPJ gLrP9pO}[Zd4tvFmkg W/_`9 ߿p;Sɤ G6f"e*q1EH/#>t orbGn47?y(e>l*SeH?8ƛG|x\c?`{ Q*8S-vX `&h6YWNf-.N&g Z5>ޯa qўB*H,:рxNHLL .ۘME~#7{t݀w&e4G)n-x/2<[$88e7zi}Z9!ZN!jj*k0i*/|n7{Zc?bw40-5Ae Av;G,sxI`I漏  Q5rG<D0mk/ _^}3߯a cM`U>!E֯40kG?d 2`604:[૗瘱x‡wGV dan 3(o"#=(!C;d(O'>]`qš'Fh@bڡ'K@tt:" S:VҚR |j(lQ/Hw0TP#ESS['hıu78t]؛Q蜃*EJ-Ӧw %W)P`dYyi_OU2, &Ek+̧xq4$6S9ǛG<sxX3WĝZ)\.gX:ɲs1iq_8g3Uj{ĻV;GzO5ca20KJ-+t b[ DB8ϯNѶ}{9 >*1FHS'(jIU)SXo8/XaܑsJ*5sC?tϮx+Dˋc? (*$} @uXQ: ` QR~*0h9XP j֐dϮN "( xn@#P|b W, NCI'ZjIopZcpȕ(hɤ"NR~4MB %ͦfr?qiSIF`I|U+rJ>HSJIr!{ԣR_2)Az*~x9߼昔ܞ;%9fUԳ"mH]$0KiV\YZk?id0i+\-4572c͏7x{ģ"9RnT+: R;iTh/Oi1b?Ұ|ÊG@DqGو"S^qf"_t.ZZk>oxwСG0gHgQ ƚ"L i\0h>DlA3'T"ĕBuQc7`="CSWpcpY꧒[BM!rOĬ1LR2 (C? ԰JȂI]IrɱspOkv- X< =sdP )_z(bQqGH)BGTES8_r TAO=||G\M"(X,9 ,DYL\W^-qRcE| T"ae~-%Is xd*%¤fr1mJ ED=,Y} +rQ/4llosQ0͍ܤ!EKlp*'sS [E@x{ϸ_oᒰ2|(h-I9i*-.SwO;tGuUaZSW. #>(ד /@?墄ʺFX|Z8[LW?3V#V.$agfg`RVc*ԤhUVa6:c1?݁' c EFV nKaqg(L2, LoM!Bɩ[)9M\E"@S6H޹" ÅBB1T0-54קs\b򔤟y~-G*Bdj0 5w5"дk7xz)O=~ڳ#ļ!(YJ#%XGRˣSאI'9}D 1Z8,,Qg_u1+$$i]!Bâr]CBaʿ$Q2O|-wL9M?@ 4ZCZ) ~H?JSۤx!ŸVtۂ-)l%b"p՘T5fm.OY;!=>ܯa͎(lnaeݤp>q|-#a#Ǜ{ueI ={O;tӚMS"1r ZJq1|9;ROG|Ylϱw߾vqַ|Bc^q 1eMe)\c 4hC08"fäT&'%W,cUrd0pxQ|ΜՓ1)ȨQ/߅ >F,ޥQdd7yQ}TYNڐ[pdŬ8[pa6 {4B:7  /h7aIX\"=DƐ'ň&h&` !<\rN^(9Ϫ[O- fQO- wkp~2ק &u܁77W{`#ѭu)=Meq5V;UP=o\2Z)QEL+ h;j@ty(I+EIKpiS9aR[/W9^^`p??>!eIGZRLAT3CQm HFU`Ӷ[wf\ہ]sC3ZFj*[2" `%'cm-hP1*SY|Cx@k2EM=XL1,OP/g֋l>m= 1iqy2×/QWwxq"#įF`L(gOAxš:b{k]WgčoaRΡ1@ED$0AU3|5X"v}_?}"Yoxwբ<=96 .Dԕ 엟wwxs‘OJ, dt+Rx3QSy܄<`umiK>|O7O0: Zy2!Ah@t֨,M<.Of`*)jaXm}i ''קXN[hqIuCyh;O]Hj>eϨ¸$ V@%H/N77uh &u//t5& _?4+|a<5醁t:iJGc=(V$&x}g':];E?<{qݞ\0(fP+ +*;[^UɒQ-RFT<46Īe R&CWt>|`=y{ġ\n*aG7. Hip|=(\[D[pdz2BWh#ʀ!|-s6!i"چl|s'->:痧\Kj{w;|O=|Do|8,K:G;3,ejmWeH\N'8Opq?RS /B7>o>)0*RHXR츴HAg›+B#*9Gs, ې }șCH v)^"T3҃^\H:i*lZ4{%LJuk¼^/q~2ŗ8lA#MkB7{4Nw <y.{JiDXV`p(YXΰy{jG?8GLi.?.ḤZ-_ K?~cLG0*kp~2>`;5 x" eC" E,FU̶ Orx 8bsG`GH9D4t"x7q}hxcśͫ=/v=i0rT !AVZka MaٯϝQ:JSi؏TRdS\s|vMn2#a'>m=v:M?C~tUwKZa?hJŋ3y=oQ+}OvLۍɻ8<~#nx{q+B)6g/HQGk PbRxҀ*`9˟a9m;=tr=}ygBg$UE<9m)\NVb~dCN46JٔAm(ɢag-/ψ/^S,fMJ{VĮě'x _3w:0+LZkl][S"F+E|c$ Ya7D,|>): 2¢!TFo<UK2Ş;3KrEG>.Ѱ(թ65zY,1.>§?'WxK|_8b:*L=5~}›Oxzp9X1>ꔕF)(sFS]w6 c%Mk[6{t_Augg)ET' bi#x\! " ]QˇIľP0XAmQh7-ۤݱKq~+Cj 4WvMm1XZ\|g(鋤xn KpŴm(0ͣ22i*@ :~' ;D<{sC6@GVD.Q R 1D1%p}q2Ǵm>pi4D6bP?f⍉"P=#"u.bY?T5:9LO89LNIEd5=Vk~)b>ih>YUvQOWZڐį8٤_8gW'<-4}>>?~LJ56Z)68?b˻SgP,؊Ҡē蔫tR3x)رyIwZ)2N阳C_mR ]|u_H,sĘݏ1a^BJ!ZÙ*ɝUUYN]StZkZNYB|+| 4Z3FA4Mm0k|vu^l1;Vc>iqlCy'E8v(J;S81VOZ,&5| Եea~8 H|R&X=)nLr466!ppsdj7//h*?aQUdŋtJ*N]`WA@c 7PEqc1M9\T4[.Q'٩>_pXFklG|j%YxaOU^BTE=Mp}:ק4V#q׻;pI>+Ju; Y@1ں8M0֘ Ji<8W9Mtfy2 $@ؕ|N *a%8O5(03D in)t)w^^.ŐeX$Qޠ8YIc ݢUQdhc! !R4^.YJ4AAUL_<Nj%?GZy4IZKDJݢڦbΉ"oqfOH'5=' cl!x8Ņl.3WFk6i0o+4ϿǷwϿ,({0rer_"8^+rfteNp :TA,@"ohgh"w6-,0(449icʪ0Oq=: P/95#kCNd9*6g!5 [YVJ\NG[̛/.ًs|~}y}Ƈ56P?0;=]mH Ce eR6M:j:_◯/14p?qE v`|BPw?)[6uk7;E%CG3@,:=}xLPlf,P䏥/cN^7%;0 a||D*+|ڬAY!un0JfON+{!5J@4G5֠2um0m\,s81O=6YFu뚺͎|.; `]H >|Q٤AS[8qKit ٤%9;^%| @ΌVwK!| &Bh; 'y<^-| nR=S1ɲZ%Qx98p8"BAˌXK2q ;ap1sID͒l0zTB3&\Jݧ߻MjuQ:'UEm¬xq>ǫ Ͽxywݱz{ c`$5a@"bF wHi[c+y]oڣ6[u:)SY!Y-04 lǀ~9]qÁ|~%zRqU#q1M!<"=MTM<^ W16H-Ttʜ'XL]c; 7tL8 01`T?!rɹxL4b8jF|Ֆ/N9z >b#monŰWAR|`AԘ)ɜ$g.1d.]?ҶjTV%3v^R24#z5C[Mk, g8v=n1n nY Tk@N 'S\,0k* sW*+NS7 Ak Tu_ ((wX}ysf#8ɞ@cjVpJNT) 9Tj;OVq6Kܭv8tv=1jzq?/N)uVcPxhN6ȃD f]gRGRw-|ni[o>%W1ww<S~㗟]"?fEsrC}:ܤZSvKELkMXo @TT GEQ  jPk:swHnRXRޞ1XxJ5d8gSU8;t6śG9dٕ:ut`;IkX<{ܭw0{ 8/ш;|ϻK 8@W5b9 ~yZ+ښO[VU:=365L:U/e*+/v,HlPRa<ǛN-ϖ9<1ry yOE5.sܯĺfs! bX9;{94h@LmPi2;?DV1-q$ a64*"q$D 8%!T!FHpK)!|V-+IS_8waja_L<Qֱ#ZLTYaք4ZMJRS{ b OBRcTR] pD~C? *̚g).\mmqo6  $%vR3Sh4pNf8Y "pd\dD".%ǡqOZ§=P'<}^R$1&'Ŕ,UpBfIcZh<=hx sX(aIDhVk>qs@3[G~o^3:GW@;Ge5p}!^` @Y j I ʈ fղM%qC >(DJ2=◟t1M]Xo:ESxXO=:#]XZLOѲh!%QEmxaiFfzf4#$ pQr>RHj K2ݡÚM;y8\Īj /b>B]ZAl*̧-N,NfΗ3G7a'3Q(Hph@BbqN&e$,!2kbռv".=6Ԑָ9Qױ(Y[a9mX/b{-n6}qCQP9wxٛ1HX4}JR 80@3'D`Pp!ձVIi1,䋡PJ 3 qPhxHzl=eT}Č6f Au50PZ2 3J3y`w1 r% Ji %$3+&э<> &QCȧqmBV|5>XGL<̾ᮞ񵢓TDe"Uk2D5I[t6gW4[[Q@?tzTY>0 8t*)}@:3ň_kʳcRx hE0WLeHBhj$h91 bz(V;֢-Nӓ .Ȯ|O Ðzywc^d,3U c q0Y Nh0cR\j.f2QYE3?i][I`VXLSn~Ñփ ZKLJ9:b'R#@AEbbJץHb$|"!umL!j*!ȿzO1L[A&Pn*07=m JC7iChOŬASYš]H/EH<NJ,%QJi)Gq,h s iYHq 1B8x)1L* m [T[w- |~u;|oW8 h`l416SqG/fާ!:U8BWdL>GjHAn}zmXg$ٞ>dVR6" .fL|x~(;NZa;ܯ{;Le6Ȉ*+h1kj&RX+ J&N[6&QTSss@3 g΄I-`*k"IDY߈8p7IHZe`~xvaH< rh"x !jT"$_&r( V\URћ1q=okXg>[*io ޳ѾǩeT6Y=/i+|=σJaaq #L\"./ˆr!Y@aTNnD?{B&R(i%o^p{6>5z%gDľstKԗOs!"izm1KR\RMwg/bݥ¤1vw$4S'y;4 e(ZkA&]Y@+1Z :FrussS;<..(]=:^$ao4e9bח'>~#W[bOG%>% h#9ۆwl*РW+;Ն<3NN=[La4ݭ0oTWY(ZI^ TXN\QT[WuG;z] @y> XN:͔Gň(q V}qh.7! Q $Аuc[۔`!~)BL<P8>Jd)k6ѥBdfG8 l ĈC`%t5NQz 'lоwڢm,~w]݁4y$g۲"L!lƲ?k)rA-V[025AX:[' 7#6;AzGb&jlAGcƄKSlKu\[wx8]D$QP!ͱW֤`w:by#:ktb:Ɯ 3RRf`8;DhU|xL.XXf+;&a$a $K5eh>ʀYb1q}Z%~xLR\IqeXSX#N/ &zNf-B8vzMݼJ9ڀƲ,$7sEn\NDn5(uҒNcءf`//p2o׿y;D]/Bm;"2{½'8b&پ(.QmB$RAV*эI jƾPi޻d^ Z#+aɺ'rMU̎.&a ;¶1NxxQFDmDܭVM:CuV0K={YtZȣ?¡a//:|WX@AG;wy}&u̴ќuM%F_wTvbQe|d]L/^_0uc1m8 GB1c3FE*^"8f9A,whȒ!cm)6)W{J֋*B!Rpd[WpCiI6:~H{SNH_"1DJ:b#fcIB~*NՊh'XmV0yHQ?&jie85"=Qy`1 gαx&aPJǴlg xW)F>X }:q} odÑP#<[_ܘ9\I#"W%"+lzT]=+;)]L>x±fIktΜֱ1V M3)ps܉pqd9||ڤ(?,Q G.vFډMcq?C&sY>}#ZBXKڼml#V1v!~`e} iJ9!Y>ƨj.⣉L-J35y}_~~fG䉁ʂC7M Sbk+acHRc<,4b0&{x!Щ]+j`@7 GVh-S ~WBD"a] y\¥_8#'t1 B+~ ;||XyCL{ݡ/F:9[^XLM҆Çqvծzw@J):VL u(Q|u%dGUZJkj쌡]FPQϩ|YL1nOmm]W͹Gs"nЇr k s)c֘Z), NS/XL"Z8֤%TUb '8tlZc19dD׊meXUM~i?ǏX:t@zP_Ú)`Knb9&tzNZk0D ,#3}tW'xyDI]aspFUqbpp MA H$,7qF'/< 54JqŴM[[U-M 7\L X6 Vn6s5 2ikC8h/f>]`1%١qz<ںɌ1Z]tlIQCe<ʐdyH4FJ/L1(lh*bH6?)>c%bGk& A$pg(QQ9afκS'F|"h3J:m8Oc`=8o%\تѓeLC5&mS`*xl#7hk¤8O5)Ntl]'m/|&9E-S׼Ǭs%~y jwG|[b'2\r_3V{4c¥4ΑQ%_w$Gıg'S,' k!D7~]sw1Ԗc< FIEaCH{}p*qz=o #rvG11D8aa &ѴkŁ^c>P3Z3A?s"3W'_^o~|q@78}G%`Gc qOŗK'Ԫ2O:_]>W/1PPXLf/48tV{[ mJлU:7XFg*ET8}p}J-><oqáqOObr4_TU,;X&N* Dl=#GPT&ÞL(Ҟ@{~mM"p2kC |Z{JJ[Vhre l3Z)E^l6d\N_8ū%\K: zB݀w6{MSIAQ >F("tTpUECEm P;ásdBdFtGʬ#}jZ\&|El#r/^g//p'-c{/'OSt*R(H?AV I,+YJS-@ eV7g+={컞5I>ãc(+dʷD{}E^}Pk i j%J=zSt80tTci:1[C-bB>-oy7#j[ABl[$r(!ood~;Zө":JbH%-U@s@EH ƊEg NmxiMʔ<ŴA`?i{ñHX U$ȱ9yFIk',5s[[uEu).3to?}{F Zg$!i˳ˈ {nHv7i7Hu#v{=!";8슞2fH%YmnےH Pj1&?C?ZzTUTǹԼAI X㲗=Do gÏnj9uUדN|$^-1O9dRIxEq/n lɸB~05O8Y*|i]0/6wP\!I?XTAbc7 D ݔkqLC79~|wwkIh Nfqdq@UmͰ7X4(!x:3b=~TYU&P+Ŭ%E齿f9d,->< B@0>F3 ʙLY"RV- + SsH4ERGi)A#`rwdUcLr/J8qHĈ+ cO@2Ιccw;wrX@"S^\k b{y}}'hRtBGVsx||h19 bf-UlVc՚i98#_Ox>t8uw"Qaˡc[%kTZㇷ7[\.<73a0ZVJ:%%o~$ Ow2X#\2' ;r}@nI,ϴE>LMkt gqtX`H5\LR(J=+fT{u OkE,>nkM ͢qY)_o ~#k- GYk+%~xwozJI?ysT0=\'ce-&iVS7k\`Txxa,L3&Mƞg<ԺI @bpů+6oJJ8R$EPC Y4,U!GN'*(ݐ"N!JZ;@0+OzPs 2T؝eQ| .Fj"VYvoxx90AgefQL׽ZKoV:l-蘿? ?,Դ4g8B( ^೙!Vm+: D7@O!dV( 4HI4R9+&ŘYp}* ׾%e^"KD)|=TySeNpSQjf&>~{ jm45JHlj}Ky-RhZaVWXw8t#-OY8/w6;}z`Ź" dz¼~d֋{iQ&M * <=El1zV8au-PM#pG_>1<cGxU nEJ#OTNI h|J!fCIa‡=s Gw j[؟z?fA는>ڹbYoqχv`+%)DB;۳nLЏrjG?$g`0}WvHy D=-~01ؔq]>Z>sd,RN;8 Q1HLn9Ϧ5&cY[ `8ҎܰJܹp̬5] RT odJyJ5 f]oY0Ld Cc7b0 _(h@`EMYjʁ?BH\,כ%>>~8exyuD:\!Ӟv#eIeR8QȫDM V<)|Z)@f^v\!UaI/AB9H@Ŕ%\rpa7s|y=RuS\E"!GdqRhk{2^KJ((I]6)1RIc܅1$ \sgF8_"4VBa=/o79 tJU*$1TZdmW)U!eY >AL4a>Z4UtS 3%!*ɢ,vfYy__=mcJX5pzTRc=7wojM|a2x>t_؍Jb֐"H+~zs:_,Ȱzk-\ A!4ul0& Qj5 41gNGPK1Sb8AɃ|> iD͉´uUaQ)ls. &YXy`mcJ)8O)r\SC\JAcIP¥d2ti NCHqBn嵅Rh y +fwe/H3:i!ֱ4Efu w3LO"/B2Ke:K4BQ;!1r`,cQQ8q`)pi@@'7UilHF49 3Jˍ^mEsnۯ1ȃx; y (ōɏJ"-aR@A*Y#ƤT^)<ۨ]C(zm?ndB"<)YDLz%z/z1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4] pHYs  2IDATEDZ! X@$D?dhbRZ2'IENDB`qutim-0.2.0/qutim.qrc0000644000175000017500000004475011273076304016177 0ustar euroelessareuroelessar icons/clients/RQ.png icons/clients/adiumX.png icons/clients/agile.png icons/clients/anastasia.png icons/clients/bot.png icons/clients/centericq.png icons/clients/corepager.png icons/clients/di_chat.png icons/clients/digsby.png icons/clients/gaim.png icons/clients/glicq.png icons/clients/icq.png icons/clients/icq2000.png icons/clients/icq2001.png icons/clients/icq2003.png icons/clients/icq2003pro.png icons/clients/icq2go.png icons/clients/icq4lite.png icons/clients/icq50.png icons/clients/icq51.png icons/clients/icq6.png icons/clients/icq60.png icons/clients/icq_mac.png icons/clients/icql4.png icons/clients/icql5.png icons/clients/im2.png icons/clients/imgate.png icons/clients/implus.png icons/clients/inlux.png icons/clients/jicq.png icons/clients/jimm.png icons/clients/k8qutim.png icons/clients/kopete.png icons/clients/kxicq.png icons/clients/licq.png icons/clients/mchat.png icons/clients/mdc.png icons/clients/meebo.png icons/clients/micq.png icons/clients/mip.png icons/clients/miranda.png icons/clients/naticq.png icons/clients/pidgin.png icons/clients/pigeon.png icons/clients/pyicq.png icons/clients/qip.png icons/clients/qipinf.png icons/clients/qippda.png icons/clients/qipsymb.png icons/clients/qutim.png icons/clients/rnq.png icons/clients/sim.png icons/clients/slick.png icons/clients/smaper.png icons/clients/sticq.png icons/clients/trillian.png icons/clients/unknown.png icons/clients/vmicq.png icons/clients/webicq.png icons/clients/yapp.png icons/core/about.png icons/core/add.png icons/core/add_user.png icons/core/additional.png icons/core/advanced.png icons/core/antispam.png icons/core/apply.png icons/core/auth.png icons/core/autumn.png icons/core/backcolor.png icons/core/birthday.png icons/core/cancel.png icons/core/changedetails.png icons/core/chat.png icons/core/checkstat.png icons/core/clear.png icons/core/collapsed.png icons/core/colorpicker.png icons/core/connection.png icons/core/contact_sett.png icons/core/contactinfo.png icons/core/contactlist.png icons/core/copy_uin.png icons/core/customfonts.png icons/core/day.png icons/core/delete_user.png icons/core/deletetab.png icons/core/deletetab2.png icons/core/deleteuser.png icons/core/edituser.png icons/core/emoticon.png icons/core/events.png icons/core/exit.png icons/core/expanded.png icons/core/filerequest.png icons/core/folder.png icons/core/fontcolor.png icons/core/fonts.png icons/core/general.png icons/core/gui.png icons/core/hideoffline.png icons/core/history.png icons/core/home.png icons/core/icq_xstatus.png icons/core/icq_xstatus0.png icons/core/icq_xstatus1.png icons/core/icq_xstatus10.png icons/core/icq_xstatus11.png icons/core/icq_xstatus12.png icons/core/icq_xstatus13.png icons/core/icq_xstatus14.png icons/core/icq_xstatus15.png icons/core/icq_xstatus16.png icons/core/icq_xstatus17.png icons/core/icq_xstatus18.png icons/core/icq_xstatus19.png icons/core/icq_xstatus2.png icons/core/icq_xstatus20.png icons/core/icq_xstatus21.png icons/core/icq_xstatus22.png icons/core/icq_xstatus23.png icons/core/icq_xstatus24.png icons/core/icq_xstatus25.png icons/core/icq_xstatus26.png icons/core/icq_xstatus27.png icons/core/icq_xstatus28.png icons/core/icq_xstatus29.png icons/core/icq_xstatus3.png icons/core/icq_xstatus30.png icons/core/icq_xstatus31.png icons/core/icq_xstatus32.png icons/core/icq_xstatus33.png icons/core/icq_xstatus34.png icons/core/icq_xstatus35.png icons/core/icq_xstatus36.png icons/core/icq_xstatus37.png icons/core/icq_xstatus38.png icons/core/icq_xstatus39.png icons/core/icq_xstatus4.png icons/core/icq_xstatus40.png icons/core/icq_xstatus41.png icons/core/icq_xstatus5.png icons/core/icq_xstatus6.png icons/core/icq_xstatus7.png icons/core/icq_xstatus8.png icons/core/icq_xstatus9.png icons/core/ignorelist.png icons/core/image.png icons/core/info.png icons/core/key_enter.png icons/core/mainsettings.png icons/core/menu.png icons/core/message.png icons/core/message_accept.png icons/core/messaging.png icons/core/moveuser.png icons/core/multiple.png icons/core/network.png icons/core/next.png icons/core/noavatar.png icons/core/note.png icons/core/notification.png icons/core/password.png icons/core/personal.png icons/core/player_play.png icons/core/player_volume.png icons/core/playsound.png icons/core/plugin.png icons/core/previous.png icons/core/privacy.png icons/core/privacylist.png icons/core/proxy.png icons/core/quote.png icons/core/readaway.png icons/core/readme.txt icons/core/remove.png icons/core/request.png icons/core/save_all.png icons/core/search.png icons/core/selall.png icons/core/servicemessage.png icons/core/settings.png icons/core/shhideoffline.png icons/core/show.png icons/core/signin.png icons/core/soundsett.png icons/core/spring.png icons/core/status.png icons/core/statuses.png icons/core/stop.png icons/core/summary.png icons/core/summer.png icons/core/switch_user.png icons/core/theme.png icons/core/translate.png icons/core/typing.png icons/core/visible.png icons/core/winter.png icons/core/work.png icons/core/xstatus.png icons/core/year.png icons/core/mail_work.png icons/core/mail_home.png icons/core/mail_unknown.png icons/core/phone_mobile.png icons/core/phone_work.png icons/core/phone_home.png icons/core/phone_unknown.png icons/core/vcard.png icons/icq/athome.png icons/icq/atwork.png icons/icq/away.png icons/icq/connecting.png icons/icq/depression.png icons/icq/dnd.png icons/icq/evil.png icons/icq/ffc.png icons/icq/invisible.png icons/icq/lunch.png icons/icq/na.png icons/icq/noauth.png icons/icq/occupied.png icons/icq/offline.png icons/icq/online.png icons/icq_protocol.png icons/jabber/away.png icons/jabber/connecting.png icons/jabber/dnd.png icons/jabber/ffc.png icons/jabber/invisible.png icons/jabber/na.png icons/jabber/offline.png icons/jabber/online.png icons/jabber/unknown.png icons/qutim.png icons/qutim_64.png icons/tray_pics/front.png icons/tray_pics/header.png icons/typing.png pictures/logo.png pictures/wizard.png icons/core/conference.png icons/core/conferenceuser.png icons/core/finduser.png icons/core/command.png icons/core/defaultservice.png icons/core/server.png style/cl/default.ListQutim style/border/cl_border/close_hover.png style/border/cl_border/close.png style/border/cl_border/config.ini style/border/cl_border/down_left.png style/border/cl_border/down.png style/border/cl_border/down_right.png style/border/cl_border/left.png style/border/cl_border/minimise_hover.png style/border/cl_border/minimise.png style/border/cl_border/right.png style/border/cl_border/up_left.png style/border/cl_border/up.png style/border/cl_border/up_right.png style/traytheme/msg/content.css style/traytheme/msg/content.html style/traytheme/msg/header.css style/traytheme/msg/headerg.png style/traytheme/msg/header.html style/traytheme/msg/headero.png style/traytheme/msg/header.png style/traytheme/onlalert/content.css style/traytheme/onlalert/content.html style/traytheme/onlalert/header.css style/traytheme/onlalert/header.html style/traytheme/system/content.css style/traytheme/system/content.html style/traytheme/system/header.css style/traytheme/system/header.html style/style/checkbox_checked_hover.png style/style/checkbox_checked.png style/style/checkbox_hover.png style/style/checkbox_normal.png style/style/combo_dropdown_hover.png style/style/combo_dropdown.png style/style/combo_dropdown_pressed.png style/style/qutim.qss style/style/radiobutton_checked_hover.png style/style/radiobutton_checked.png style/style/radiobutton_normal_hover.png style/style/radiobutton_normal.png style/style/scroll_button_down.png style/style/scroll_button_up.png style/style/scroll_left.png style/style/scroll_right.png style/style/spin_down.png style/style/spin_up.png icons/irc/online.png icons/irc/offline.png icons/irc/connecting.png icons/irc/away.png icons/core/ques.png icons/core/blue.png icons/core/green.png icons/core/orange.png icons/core/pink.png icons/core/red.png icons/core/white.png icons/core/black.png icons/core/gray.png icons/core/qutim.png icons/core/loading.gif icons/core/spelling.png icons/core/qutim.ini icons/core/qutim_64.png GPL style/emoticons/wink.png style/emoticons/victory.png style/emoticons/tremble.png style/emoticons/tongue.png style/emoticons/rotfl.png style/emoticons/rose.png style/emoticons/question.png style/emoticons/pissed-off.png style/emoticons/thinking.png style/emoticons/terror.png style/emoticons/smirk.png style/emoticons/party.png style/emoticons/musical-note.png style/emoticons/mail.png style/emoticons/glasses-cool.png style/emoticons/giggle.png style/emoticons/freaked-out.png style/emoticons/fingers-crossed.png style/emoticons/emoticons.xml style/emoticons/embarrassed.png style/emoticons/dont-know.png style/emoticons/sleepy.png style/emoticons/silly.png style/emoticons/sick.png style/emoticons/shut-mouth.png style/emoticons/love.png style/emoticons/laugh.png style/emoticons/kiss.png style/emoticons/hypnotized.png style/emoticons/shout.png style/emoticons/sarcastic.png style/emoticons/sad.png style/emoticons/handshake.png style/emoticons/good.png style/emoticons/go-away.png style/emoticons/doh.png style/emoticons/disapointed.png style/emoticons/devil.png style/emoticons/dance.png style/emoticons/cute.png style/emoticons/curl-lip.png style/emoticons/crying.png style/emoticons/cowboy.png style/emoticons/confused.png style/emoticons/clap.png style/emoticons/bomb.png style/emoticons/beer.png style/emoticons/arrogant.png style/emoticons/angel.png style/emoticons/alien.png icons/core/conftopic.png icons/core/confsettings.png icons/core/aim_tr.png icons/core/default_tr.png icons/core/icq_tr.png icons/core/jabber_tr.png icons/core/mrim_tr.png icons/core/msn_tr.png icons/protocol/vkontakte.png icons/protocol/msn.png icons/protocol/mrim.png icons/protocol/jabber.png icons/protocol/icq.png icons/protocol/aim.png style/webkitstyle/base.css style/webkitstyle/Footer.html style/webkitstyle/Header.html style/webkitstyle/Status.html style/webkitstyle/Template.html style/webkitstyle/Images/action.png style/webkitstyle/Images/background.png style/webkitstyle/Incoming/Action.html style/webkitstyle/Incoming/Content.html style/webkitstyle/Incoming/Context.html style/webkitstyle/Incoming/NextContent.html style/webkitstyle/Incoming/NextContext.html style/webkitstyle/Outgoing/Action.html style/webkitstyle/Outgoing/Content.html style/webkitstyle/Outgoing/Context.html style/webkitstyle/Outgoing/NextContent.html style/webkitstyle/Outgoing/NextContext.html style/webkitstyle/Variants/Big.css style/webkitstyle/Variants/Medium.css style/webkitstyle/Variants/Small.css qutim-0.2.0/qutim.rc0000644000175000017500000000007311236355476016015 0ustar euroelessareuroelessarIDI_ICON1 ICON DISCARDABLE "qutim.ico"qutim-0.2.0/CCBYSA0000644000175000017500000004620611236355476015227 0ustar euroelessareuroelessarTHE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. 3. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. 4. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. 5. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. 6. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. 7. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. 8. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. 9. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. 10. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. 11. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, 4. to Distribute and Publicly Perform Adaptations. 5. For the avoidance of doubt: 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. 2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. 3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. 4. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. qutim-0.2.0/style/0000755000175000017500000000000011273100754015454 5ustar euroelessareuroelessarqutim-0.2.0/style/traytheme/0000755000175000017500000000000011273100754017456 5ustar euroelessareuroelessarqutim-0.2.0/style/traytheme/onlalert/0000755000175000017500000000000011273100754021276 5ustar euroelessareuroelessarqutim-0.2.0/style/traytheme/onlalert/header.html0000755000175000017500000000053011236355476023431 0ustar euroelessareuroelessar Header %fromnick% qutim-0.2.0/style/traytheme/onlalert/content.css0000755000175000017500000000015211236355476023477 0ustar euroelessareuroelessarborder: none; border-bottom: 13px solid #232729; color: #babdb6; background-color: #171a1b; padding: 2px; qutim-0.2.0/style/traytheme/onlalert/content.html0000755000175000017500000000065411236355476023662 0ustar euroelessareuroelessar Header %message% qutim-0.2.0/style/traytheme/onlalert/header.css0000755000175000017500000000023411236355476023256 0ustar euroelessareuroelessarborder: 2px solid #171a1b; border-top: none; color: #eeeeec; font-weight: bold; background-color: #171a1b; background-image: url('%path%/msg/headerg.png'); qutim-0.2.0/style/traytheme/system/0000755000175000017500000000000011273100754021002 5ustar euroelessareuroelessarqutim-0.2.0/style/traytheme/system/header.html0000755000175000017500000000053411236355476023141 0ustar euroelessareuroelessar Header System message qutim-0.2.0/style/traytheme/system/content.css0000755000175000017500000000015211236355476023203 0ustar euroelessareuroelessarborder: none; border-bottom: 13px solid #232729; color: #babdb6; background-color: #171a1b; padding: 2px; qutim-0.2.0/style/traytheme/system/content.html0000755000175000017500000000070311236355476023361 0ustar euroelessareuroelessar Header %message% qutim-0.2.0/style/traytheme/system/header.css0000755000175000017500000000023411236355476022762 0ustar euroelessareuroelessarborder: 2px solid #171a1b; border-top: none; color: #eeeeec; font-weight: bold; background-color: #171a1b; background-image: url('%path%/msg/headero.png'); qutim-0.2.0/style/traytheme/msg/0000755000175000017500000000000011273100754020244 5ustar euroelessareuroelessarqutim-0.2.0/style/traytheme/msg/headerg.png0000755000175000017500000000036711236355476022376 0ustar euroelessareuroelessarPNG  IHDR,sRGBbKGD pHYs:duhtIME /FtEXtCommentCreated with GIMPWRIDATc,) ?C3B̌B1#T.); d)"F _ƛ͒G٤IENDB`qutim-0.2.0/style/traytheme/msg/header.html0000755000175000017500000000054511236355476022405 0ustar euroelessareuroelessar Header
%fromnick%
qutim-0.2.0/style/traytheme/msg/header.png0000755000175000017500000000035511236355476022224 0ustar euroelessareuroelessarPNG  IHDR,sRGBbKGD pHYs:duhtIME "htEXtCommentCreated with GIMPWHIDATc,FQ @0)F("ň[ݧ0)R0"Ȉ U+IENDB`qutim-0.2.0/style/traytheme/msg/content.css0000755000175000017500000000015211236355476022445 0ustar euroelessareuroelessarborder: none; border-bottom: 13px solid #232729; color: #babdb6; background-color: #171a1b; padding: 2px; qutim-0.2.0/style/traytheme/msg/content.html0000755000175000017500000000065411236355476022630 0ustar euroelessareuroelessar Header %message% qutim-0.2.0/style/traytheme/msg/headero.png0000755000175000017500000000040211236355476022374 0ustar euroelessareuroelessarPNG  IHDR,sRGBbKGD pHYs:duhtIME;6BxtEXtCommentCreated with GIMPW]IDATeϱ 0 D!쁨(؃$D"SI\=,[2OҾ{-@Hj$#߇όӎ6D%:){wi()5IENDB`qutim-0.2.0/style/traytheme/msg/header.css0000755000175000017500000000023311236355476022223 0ustar euroelessareuroelessarborder: 2px solid #171a1b; border-top: none; color: #eeeeec; font-weight: bold; background-color: #171a1b; background-image: url('%path%/msg/header.png'); qutim-0.2.0/style/style/0000755000175000017500000000000011273100754016614 5ustar euroelessareuroelessarqutim-0.2.0/style/style/scroll_left.png0000755000175000017500000000551511236355476021657 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FxIDATxb|2 'IҤo`lfAN0000001 pjLI)"]#!MX54͙G8T>Dt>A20000eGfBf8&;Fr9`!&hdIENDB`qutim-0.2.0/style/style/combo_dropdown_hover.png0000755000175000017500000000556011236355476023565 0ustar euroelessareuroelessarPNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb*goQ0)E5 *jvM&*Q,'O g&-oqrF0qdÒ3P㧟?AJQ ö3a03obӈMHA6a8#TW&lDS0R a7F[uIENDB`qutim-0.2.0/style/style/radiobutton_checked_hover.png0000755000175000017500000000556611236355476024560 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb? |8YalFFw/a$$.EQ4}}C3j¥5ڼE7f&$.MbȮab ̐`gê&Ra邡& nt.K 0l)]' ##eIDydtIENDB`qutim-0.2.0/style/style/checkbox_normal.png0000755000175000017500000000545011236355476022503 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FSIDATxb|2 'IҤo eAN0000001 Fx+/)R##Q1kIENDB`qutim-0.2.0/style/style/combo_dropdown.png0000755000175000017500000000556011236355476022362 0ustar euroelessareuroelessarPNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb|*OR0U}s fv &*Q,SR9sCq᧟oj/0qd7}$9mEXl! 4b#)R dH!U Ԯ9H<IENDB`qutim-0.2.0/style/style/spin_down.png0000755000175000017500000000550711236355476021350 0ustar euroelessareuroelessarPNG  IHDR o pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FrIDATxb|2 'IҤo`lfAN0000001 041o߾xAU.X]oj/ Sթ JH3^F # 0'$XIENDB`qutim-0.2.0/style/style/radiobutton_normal_hover.png0000755000175000017500000000555611236355476024461 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ @ Z^ T -UeSj:]M@R4\=C2ݾA6C ٹq n 5uB(ɏZp(}c=~qkGp)?KZgW,yQQ&]?IENDB`qutim-0.2.0/style/style/radiobutton_normal.png0000755000175000017500000000556211236355476023253 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ? 0wGqC?]2s &Eߔ?K! 4ztπ$@aXmg`Ηk k 5j ma]nk?.0{c[5S¶g @jxbDWj/ mg5sxY ԖlwIENDB`qutim-0.2.0/style/style/combo_dropdown_pressed.png0000755000175000017500000000555711236355476024115 0ustar euroelessareuroelessarPNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb*GP095 :ve&*Q,BP\8.*/@1&lXQy`G0ȩ`9-xFlb$E  )j4a#U`ʟFΞIENDB`qutim-0.2.0/style/style/checkbox_checked_hover.png0000755000175000017500000000555311236355476024010 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb2 óH$ No2000001 XU|\OwmiLI1+)§ E#$b.pMI \,Xcay(|tՏ0Ÿ4 |&;Fr9`/IENDB`qutim-0.2.0/style/style/checkbox_hover.png0000755000175000017500000000545011236355476022336 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FSIDATxb2 óH$ No2000001 Fxp+)R#.@.IENDB`qutim-0.2.0/style/style/scroll_button_down.png0000755000175000017500000000553311236355476023267 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FvIDATxb|2 'IҤo`lfAN0000001 Ɣ""|`|O2QM텳aj:Y!2# iʂiR#0+',cx^IENDB`qutim-0.2.0/style/style/qutim.qss0000755000175000017500000003455311236355476020534 0ustar euroelessareuroelessarSeparateChatWindow, TabbedChatWindow, SeparateConference, TabbedConference { background-color: rgb(237, 237, 237); } QGroupBox { border: 1px solid rgb(174, 199, 220); margin-top: 5px; padding-top: 5px; } QGroupBox::title { color: #3e4549; subcontrol-origin: margin; subcontrol-position: top center; padding: 0 3px; } QGroupBox::indicator { width: 14px; height: 14px; } QGroupBox::indicator:unchecked { image: url(%path%/checkbox_normal.png); } QGroupBox::indicator:unchecked:hover { image: url(%path%/checkbox_hover.png); } QGroupBox::indicator:checked { image: url(%path%/checkbox_checked.png); } QGroupBox::indicator:checked:hover { image: url(%path%/checkbox_checked_hover.png); } QRadioButton::indicator { width: 14px; height: 14px; } QRadioButton::indicator::unchecked { image: url(%path%/radiobutton_normal.png); } QRadioButton::indicator:unchecked:hover { image: url(%path%/radiobutton_normal_hover.png); } QRadioButton::indicator::checked { image: url(%path%/radiobutton_checked.png); } QRadioButton::indicator:checked:hover { image: url(%path%/radiobutton_checked_hover.png); } QCheckBox { spacing: 4px; } QCheckBox::indicator { width: 14px; height: 14px; } QCheckBox::indicator:unchecked { image: url(%path%/checkbox_normal.png); } QCheckBox::indicator:unchecked:hover { image: url(%path%/checkbox_hover.png); } QCheckBox::indicator:checked { image: url(%path%/checkbox_checked.png); } QCheckBox::indicator:checked:hover { image: url(%path%/checkbox_checked_hover.png); } QScrollBar:horizontal { background: white; max-height: 14px; padding-left:14px; padding-right:14px; } QScrollBar::handle:horizontal { background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.089 rgba(247, 247, 247, 255), stop:0.457 rgba(250, 249, 249, 255), stop:0.557 rgba(241, 241, 241, 255), stop:1 rgba(237, 237, 237, 255)); min-width: 14px; border-left: 1px solid rgb(172, 197, 255); border-top: 1px solid rgb(172, 197, 255); border-bottom: 1px solid rgb(172, 197, 255); border-right: 1px solid rgb(172, 197, 255); margin-top: 1px; margin-bottom: 1px; max-height: 10px; } QScrollBar::add-page:horizontal , QScrollBar::sub-page:horizontal { background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(246, 247, 249, 255), stop:0.493 rgba(250, 255, 255, 255), stop:1 rgba(242, 245, 255, 255)); } QScrollBar::sub-line:horizontal{ height: 14px; width: 14px; subcontrol-position: left; subcontrol-origin: margin; background-image: url(%path%/scroll_left.png); } QScrollBar::add-line:horizontal{ height: 14px; width: 14px; subcontrol-position: right; subcontrol-origin: margin; background-image: url(%path%/scroll_right.png); } QComboBox { background-color: white; border: 1px solid rgb(185, 185, 185); color: #3e4549; min-height: 20px; } QComboBox::drop-down { background-image: url(%path%/combo_dropdown.png); max-height: 20px; width: 20px; } QComboBox::drop-down:hover { background-image: url(%path%/combo_dropdown_hover.png); } QComboBox::drop-down:pressed{ background-image: url(%path%/combo_dropdown_pressed.png); } QSpinBox { background-color: white; border: 1px solid rgb(185, 185, 185); color: #3e4549; min-height: 20px; } QSpinBox::up-button { background-image: url(%path%/spin_up.png); width: 14px; } QSpinBox::down-button { width: 14px; background-image: url(%path%/spin_down.png); } QLineEdit { min-height: 20px; background-color: white; border: 1px solid rgb(185, 185, 185); color: #3e4549; } QProgressBar { border: 1px solid rgb(194, 202, 221); text-align: center; min-height: 20px; max-height: 20px; background-color: white; color: rgb(62, 62, 62); } QProgressBar::chunk { background-: #05B8CC; background-image: url(%path%/bar_chunk.png); width: 40px; } QSlider::groove:horizontal { height: 0px; border: 1px solid rgb(174, 199, 220); margin: 2px 0; } QSlider::handle:horizontal { background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.089 rgba(247, 247, 247, 255), stop:0.457 rgba(250, 249, 249, 255), stop:0.557 rgba(230, 230, 230, 255), stop:1 rgba(237, 237, 237, 255)); border: 1px solid rgb(185, 185, 185); width: 10px; min-height: 10px; margin: -5px 0; border-radius: 5px; } QSlider::groove:vertical { position: absolute; width: 0px; border: 1px solid rgb(174, 199, 220); } QSlider::handle:vertical { height: 10px; max-width: 10px; background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.089 rgba(247, 247, 247, 255), stop:0.457 rgba(250, 249, 249, 255), stop:0.557 rgba(230, 230, 230, 255), stop:1 rgba(237, 237, 237, 255)); border: 1px solid rgb(185, 185, 185); margin: 0 -5px; border-radius: 5px; } QTextEdit, QPlainTextEdit { background-color: white; border: 1px solid rgb(185, 185, 185); color: #3e4549; } QTextBrowser { padding-left: 5px; background:qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(222, 230, 230, 255), stop:0.937778 rgba(255, 254, 254, 255), stop:1 rgba(231, 236, 238, 255)); border: 1px solid rgb(174, 199, 220); } QPushButton { min-width: 75px; min-height: 24px; background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.089 rgba(247, 247, 247, 255), stop:0.457 rgba(250, 249, 249, 255), stop:0.557 rgba(230, 230, 230, 255), stop:1 rgba(237, 237, 237, 255)); border: 1px solid rgb(185, 185, 185); } QPushButton:hover { background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.089 rgba(247, 247, 247, 255), stop:0.457 rgba(250, 249, 249, 255), stop:0.557 rgba(230, 230, 230, 255), stop:1 rgba(237, 237, 237, 255)); border: 1px solid rgb(147, 147, 147); } QPushButton:pressed { background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(233, 234, 234, 255), stop:0.089 rgba(232, 232, 232, 255), stop:0.457 rgba(243, 242, 242, 255), stop:0.557 rgba(210, 210, 210, 255), stop:1 rgba(221, 221, 221, 255)); border: 1px solid rgb(147, 147, 147); } QToolButton{ padding-left: 2px; padding-right: 2px; } QToolButton:hover { border: 1px solid rgb(185, 185, 185); background-color: qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(226, 234, 241, 255), stop:0.5 rgba(237, 237, 237, 255), stop:1 rgba(226, 234, 241, 255)); } QToolButton:pressed { border: 1px solid rgb(172, 172, 172); background-color: rgb(255, 255, 255); } QToolButton:checked{ border: 1px solid rgb(194, 202, 221); background-color: qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(208, 225, 241, 255), stop:0.5 rgba(237, 237, 237, 255), stop:1 rgba(214, 228, 241, 255)); } QTabWidget::pane { border-top: 1px solid rgb(194, 202, 221); } QTabWidget::tab-bar { left: 2px; } QTabBar::tab { background-color: rgb(237, 237, 237); border: 1px solid rgb(194, 202, 221); border-bottom-color: #C2C7CB; min-width: 120px; padding: 2px; } QTabBar::tab:selected, QTabBar::tab:hover { background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.0894737 rgba(247, 247, 247, 255), stop:0.457895 rgba(250, 249, 249, 255), stop:0.557895 rgba(241, 241, 241, 255), stop:1 rgba(237, 237, 237, 255)); } QTabBar::tab:selected { border-color:rgb(194, 202, 221); border-bottom-color: #C2C7CB; } QTabBar::tab:!selected { margin-top: 2px; background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.089 rgba(247, 247, 247, 255), stop:0.457 rgba(250, 249, 249, 255), stop:0.557 rgba(230, 230, 230, 255), stop:1 rgba(237, 237, 237, 255)); } QListView, QTreeView { border: 1px solid rgb(174, 199, 220); background:qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(222, 230, 230, 255), stop:0.937778 rgba(255, 254, 254, 255), stop:1 rgba(231, 236, 238, 255)); alternate-background-color: rgba(203, 211, 255, 100); } qutIM{ background-color: rgb(237, 237, 237); margin : 0; padding: 0; } #toolbuttonWidget { background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.0894737 rgba(247, 247, 247, 255), stop:0.457895 rgba(250, 249, 249, 255), stop:0.557895 rgba(241, 241, 241, 255), stop:1 rgba(237, 237, 237, 255)); } #accountLine { background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(248, 249, 249, 255), stop:0.0894737 rgba(247, 247, 247, 255), stop:0.457895 rgba(250, 249, 249, 255), stop:0.557895 rgba(241, 241, 241, 255), stop:1 rgba(237, 237, 237, 255)); } qutIM QTreeView { margin-left: 5px; margin-right: 3px; border: 1px solid rgb(174, 199, 220); background:qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(222, 230, 230, 255), stop:0.937778 rgba(255, 254, 254, 255), stop:1 rgba(231, 236, 238, 255)); alternate-background-color: rgba(203, 211, 255, 100); } #toolbuttonWidget QToolButton{ padding-left: 2px; padding-right: 2px; } #toolbuttonWidget QToolButton:hover { border: 1px solid rgb(185, 185, 185); background-color: qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(226, 234, 241, 255), stop:0.5 rgba(237, 237, 237, 255), stop:1 rgba(226, 234, 241, 255)); } #toolbuttonWidget QToolButton:pressed { border: 1px solid rgb(172, 172, 172); background-color: rgb(255, 255, 255); } #toolbuttonWidget QToolButton:checked{ border: 1px solid rgb(194, 202, 221); background-color: qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(208, 225, 241, 255), stop:0.5 rgba(237, 237, 237, 255), stop:1 rgba(214, 228, 241, 255)); } #accountLine QToolButton:hover { border: 1px solid rgb(161, 186, 255); background-color: qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(226, 234, 241, 255), stop:0.5 rgba(237, 237, 237, 255), stop:1 rgba(226, 234, 241, 255)); } #accountLine QToolButton:pressed { border: 1px solid rgb(161, 186, 255); background-color: qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(226, 234, 241, 255), stop:0.5 rgba(237, 237, 237, 255), stop:1 rgba(226, 234, 241, 255)); } QScrollBar:vertical { background: white; width: 14px; margin: 14px 0 14px 0; } QScrollBar::handle:vertical { background: qlineargradient(spread:reflect, x1:0, y1:0.551, x2:1, y2:0.528, stop:0 rgba(248, 249, 249, 255), stop:0.0894737 rgba(247, 247, 247, 255), stop:0.457895 rgba(250, 249, 249, 255), stop:0.557895 rgba(241, 241, 241, 255), stop:1 rgba(237, 237, 237, 255)); min-height: 14px; border-left: 1px solid rgb(172, 197, 255); border-top: 1px solid rgb(172, 197, 255); border-bottom: 1px solid rgb(172, 197, 255); border-right: 1px solid rgb(172, 197, 255); margin-left: 1px; margin-right: 1px; } QScrollBar::add-line:vertical { background-image: url(%path%/scroll_button_down.png); height: 14px; width: 14px; subcontrol-position: bottom; subcontrol-origin: margin; } QScrollBar::sub-line:vertical { background-image: url(%path%/scroll_button_up.png); height: 14px; width: 14px; subcontrol-position: top; subcontrol-origin: margin; } QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(246, 247, 249, 255), stop:0.493333 rgba(255, 255, 255, 255), stop:1 rgba(242, 245, 247, 255)); } QTreeView::item:selected, QListView::item:selected { border: 1px solid rgb(169, 183, 247); border-radius: 3px; background-color:qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(208, 225, 241, 255), stop:0.5 rgba(205, 226, 255, 255), stop:1 rgba(214, 228, 241, 255)); color: rgb(22, 34, 56); } qutIM QTreeView::item:hover { background: none; border: none; } qutIM QTreeView::item:selected:hover { border: 1px solid rgb(169, 183, 247); border-radius: 3px; background-color:qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(208, 225, 241, 255), stop:0.5 rgba(205, 226, 255, 255), stop:1 rgba(214, 228, 241, 255)); color: rgb(22, 34, 56); } QToolButton::menu-indicator { image: url(menu_indicator.png); } QToolTip { border: 1px solid rgb(178, 208, 255); background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(222, 230, 230, 255), stop:0.937778 rgba(255, 254, 254, 255), stop:1 rgba(231, 236, 238, 255)); padding: 2px; opacity: 230; } qutIM QTreeView QToolTip { border: 1px solid rgb(178, 208, 255); background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(222, 230, 230, 255), stop:0.937778 rgba(255, 254, 254, 255), stop:1 rgba(231, 236, 238, 255)); opacity: 220; } QMenu { background: qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(226, 234, 241, 255), stop:0.5 rgba(237, 237, 237, 255), stop:1 rgba(226, 234, 241, 255)); border: 1px solid rgb(178, 208, 255); padding: 7px; } QMenu::item { background-color: transparent; padding-left: 22px; min-height: 22px; margin-right: 5px; } QMenu::item:selected { padding-right: 5px; padding-left: 22px; border: 1px solid rgb(169, 183, 247); border-radius: 3px; background-color:qlineargradient(spread:pad, x1:0.486, y1:0, x2:0.502, y2:1, stop:0 rgba(208, 225, 241, 255), stop:0.5 rgba(205, 226, 255, 255), stop:1 rgba(214, 228, 241, 255)); color: rgb(22, 34, 56); } QMenu::separator { height: 1px; margin-top: 2px; margin-bottom: 2px; background: rgb(169, 183, 247); margin-left: 10px; margin-right: 5px; } QMenu::item{ padding-right: 15px; } SeparateConference QListView { background: white; } qutim-0.2.0/style/style/scroll_button_up.png0000755000175000017500000000554311236355476022745 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F~IDATxb|2 'IҤo`lfAN0000001 1%!%4pik?ç 2Mko߾xAUߜ(P%*ɑM20>IENDB`qutim-0.2.0/style/style/scroll_right.png0000755000175000017500000000551111236355476022036 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FtIDATxb|2 'IҤo`lfAN0000001 jLI)"O#>x5ΙӇS3

+xm,.f````Ki"&8&;Fr9`!IENDB`qutim-0.2.0/style/style/checkbox_checked.png0000755000175000017500000000555311236355476022605 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb|2 'IҤo eAN0000001 XUPPF0M bL `iBoj/\1 |Xc(&OudHn" -/IENDB`qutim-0.2.0/style/style/radiobutton_checked.png0000755000175000017500000000562511236355476023351 0ustar euroelessareuroelessarPNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ @ E"8RAa7_.ΥCPR뉢KC Q׫C\^03(允4f3P|` 95 Sfp.IN{L+N6'$j0UIY^]w^j \vIENDB`qutim-0.2.0/style/style/spin_up.png0000755000175000017500000000552111236355476021021 0ustar euroelessareuroelessarPNG  IHDR o pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F|IDATxb|2 'IҤo`lfAN000000RRĐR&\j?ç 2Mko߾xAUߜ(?21 XM"0n0uIENDB`qutim-0.2.0/style/webkitstyle/0000755000175000017500000000000011273100754020022 5ustar euroelessareuroelessarqutim-0.2.0/style/webkitstyle/Variants/0000755000175000017500000000000011273100754021611 5ustar euroelessareuroelessarqutim-0.2.0/style/webkitstyle/Variants/Small.css0000755000175000017500000000010311273076304023373 0ustar euroelessareuroelessar @import url("../base.css"); body { font: 8pt Verdana; } qutim-0.2.0/style/webkitstyle/Variants/Medium.css0000755000175000017500000000010511273076304023545 0ustar euroelessareuroelessar @import url("../base.css"); body { font: 10pt Verdana; } qutim-0.2.0/style/webkitstyle/Variants/Big.css0000755000175000017500000000010511273076304023026 0ustar euroelessareuroelessar @import url("../base.css"); body { font: 12pt Verdana; } qutim-0.2.0/style/webkitstyle/Status.html0000644000175000017500000000022611273076304022176 0ustar euroelessareuroelessar

%time{%H:%M:%S}%: %message%
qutim-0.2.0/style/webkitstyle/Outgoing/0000755000175000017500000000000011273100754021615 5ustar euroelessareuroelessarqutim-0.2.0/style/webkitstyle/Outgoing/NextContext.html0000644000175000017500000000007611273076304024774 0ustar euroelessareuroelessar
%message%
qutim-0.2.0/style/webkitstyle/Outgoing/Action.html0000644000175000017500000000030211273076304023716 0ustar euroelessareuroelessar
%sender% %message%
qutim-0.2.0/style/webkitstyle/Outgoing/Context.html0000644000175000017500000000031411273076304024130 0ustar euroelessareuroelessar
%sender% (%time{%d.%m.%Y %H:%M}%)
%message%
qutim-0.2.0/style/webkitstyle/Outgoing/Content.html0000644000175000017500000000035411273076304024122 0ustar euroelessareuroelessar
%sender% (%time{%d.%m.%Y %H:%M}%)
%message%
qutim-0.2.0/style/webkitstyle/Outgoing/NextContent.html0000644000175000017500000000013611273076304024757 0ustar euroelessareuroelessar
%message%
qutim-0.2.0/style/webkitstyle/Template.html0000644000175000017500000001442011273076304022467 0ustar euroelessareuroelessar %@
%@ qutim-0.2.0/style/webkitstyle/base.css0000644000175000017500000000200711273076304021450 0ustar euroelessareuroelessar@-webkit-keyframes highlight { 0% { background-color: #FFFFA0; } 33% { background-color: #FFFFA0; } 100% { background-color: white; } } body { background: url('Images/background.png') repeat; } .replico { margin-bottom: 1em; } .inContact, .outContact, .inActionContact, .outActionContact { font-weight: bold; } .inContentTime, .outContentTime, .statusTime, .statusMessage { font-size: smaller; } .inContact, .inContentTime { color: red; } .outContact, .outContentTime { color: blue; } .inActionContact, .inActionMessage, .outActionContact, .outActionMessage { color: green; } .statusMessage, .statusTime { color: gray; } .m_highlight { -webkit-animation-name: highlight; -webkit-animation-duration: 1.2s; -webkit-animation-iteration-count: 1; -webkit-animation-timing-function: linear; } .m_sending { border-left: 2pt solid #FFFFA0; padding-left: 4pt; } .m_sended { border-left: 2pt solid #A0FFA0; padding-left: 4pt; } .m_received { border-left: 2pt solid #FFFFA0; padding-left: 4pt; } qutim-0.2.0/style/webkitstyle/Incoming/0000755000175000017500000000000011273100754021565 5ustar euroelessareuroelessarqutim-0.2.0/style/webkitstyle/Incoming/NextContext.html0000644000175000017500000000010011273076304024730 0ustar euroelessareuroelessar
%message%
qutim-0.2.0/style/webkitstyle/Incoming/Action.html0000644000175000017500000000030211273076304023666 0ustar euroelessareuroelessar
%sender% %message%
qutim-0.2.0/style/webkitstyle/Incoming/Context.html0000644000175000017500000000031411273076304024100 0ustar euroelessareuroelessar
%sender% (%time{%d.%m.%Y %H:%M}%)
%message%
qutim-0.2.0/style/webkitstyle/Incoming/Content.html0000644000175000017500000000035311273076304024071 0ustar euroelessareuroelessar
%sender% (%time{%d.%m.%Y %H:%M}%)
%message%
qutim-0.2.0/style/webkitstyle/Incoming/NextContent.html0000644000175000017500000000013711273076304024730 0ustar euroelessareuroelessar
%message%
qutim-0.2.0/style/webkitstyle/Images/0000755000175000017500000000000011273100754021227 5ustar euroelessareuroelessarqutim-0.2.0/style/webkitstyle/Images/background.png0000755000175000017500000000537011271376712024073 0ustar euroelessareuroelessarPNG  IHDRox OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME 36|c*IDAT]ȱ ge L :BFB>u}4^ҋIENDB`qutim-0.2.0/style/webkitstyle/Images/action.png0000644000175000017500000000543311271376712023226 0ustar euroelessareuroelessarPNG  IHDRH- OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME<ݑMIDAT(c2rG;rv`(%΄M!6.8ٺ"\(6:JaLhTdI|C'.,霰IENDB`qutim-0.2.0/style/webkitstyle/Footer.html0000644000175000017500000000000011273076304022137 0ustar euroelessareuroelessarqutim-0.2.0/style/webkitstyle/Header.html0000644000175000017500000000000111271376712022076 0ustar euroelessareuroelessar qutim-0.2.0/style/border/0000755000175000017500000000000011273100754016731 5ustar euroelessareuroelessarqutim-0.2.0/style/border/cl_border/0000755000175000017500000000000011273100754020664 5ustar euroelessareuroelessarqutim-0.2.0/style/border/cl_border/close_hover.png0000755000175000017500000000552111236355476023724 0ustar euroelessareuroelessarPNG  IHDR&/ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FlIDATxb?2ӧOY`[[[4>|YDiVSU(3X)\y%$W #0R$%IENDB`qutim-0.2.0/style/border/cl_border/right.png0000755000175000017500000000540511236355476022532 0ustar euroelessareuroelessarPNG  IHDR< pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F IDATxb``npinIENDB`qutim-0.2.0/style/border/cl_border/up_right.png0000755000175000017500000000550511236355476023237 0ustar euroelessareuroelessarPNG  IHDR' pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F`IDATxbTVQπXL᜛N30}ygc@_TQC Q ER7׭[IENDB`qutim-0.2.0/style/border/cl_border/.directory0000755000175000017500000000007011236355476022705 0ustar euroelessareuroelessar[Dolphin] ShowPreview=true Timestamp=2009,6,27,12,33,53 qutim-0.2.0/style/border/cl_border/up_left.png0000755000175000017500000000550311236355476023052 0ustar euroelessareuroelessarPNG  IHDR' pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F^IDATxڄ1 0 _zE7777.s+6$8Qn5^G: H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F+IDATxbTVQgp!&4c!n^: W24x;i|IENDB`qutim-0.2.0/style/border/cl_border/minimise.png0000755000175000017500000000550111236355476023224 0ustar euroelessareuroelessarPNG  IHDR&/ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F\IDATxb?##2Y`4ٳYDiT(PlO<ªXZF8)SKIENDB`qutim-0.2.0/style/border/cl_border/left.png0000755000175000017500000000540511236355476022347 0ustar euroelessareuroelessarPNG  IHDR< pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F IDATxbTVQgp!)SIENDB`qutim-0.2.0/style/border/cl_border/minimise_hover.png0000755000175000017500000000550111236355476024427 0ustar euroelessareuroelessarPNG  IHDR&/ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F\IDATxb?2ӧOY`[[[4>|YDiVSU(PlΞƪؔ8)Sm'8IENDB`qutim-0.2.0/style/border/cl_border/up.png0000755000175000017500000000544711236355476022047 0ustar euroelessareuroelessarPNG  IHDRLW pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FBIDATx\!@IH`ahvtBUܭ!M%Σ>Bk1x+ٌIENDB`qutim-0.2.0/style/border/cl_border/down.png0000755000175000017500000000540211236355476022361 0ustar euroelessareuroelessarPNG  IHDROU: pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxbd`n0Tg7bNIENDB`qutim-0.2.0/style/border/cl_border/close.png0000755000175000017500000000552111236355476022521 0ustar euroelessareuroelessarPNG  IHDR&/ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FlIDATxb?##2Y`4ٳYDiT(3GX\yAZF%$W #0R#4n+IENDB`qutim-0.2.0/style/border/cl_border/down_right.png0000755000175000017500000000541611236355476023563 0ustar euroelessareuroelessarPNG  IHDR~ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F)IDATxb``npi&4b`n*pi:z;Z2IENDB`qutim-0.2.0/style/border/cl_border/config.ini0000755000175000017500000000006511236355476022652 0ustar euroelessareuroelessar[buttons] up=true mup=3 mright=5 mleft=-1 mdown=-1 qutim-0.2.0/style/emoticons/0000755000175000017500000000000011273100754017454 5ustar euroelessareuroelessarqutim-0.2.0/style/emoticons/cowboy.png0000644000175000017500000000272211236355476021503 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<dIDATH[l\Wϙø:v.M jBJKRUqmWN 570wsNϝ;W\^^>8KOzZkwwy#_}d 4%m(W*zԩXk=ϛ>3} ٳgW"Tu}fR8.e~.e2STQ3_F'G|c Dus_W\. ޘX+t)TU9揀@Uttt c+h)7xw?[ `Kg ىGzwF[[[׿!===ԋA[(t:å˗U}a,9Np4?zUT1T@<u1QD#g+d2ϫ&~ykcR܃敋W f~ a ȷ8NafE1[TïpE.VVBM[\YZ(U\%tv]ָk3*_MpS20E$h|?܅juyp%D+*M}^'`@0">jv c<? AWPE @4@EEns,8ꊠΞ_FmuZ54h\4Ep/ T99gfUDWTn ps\^ h1BSs* (\V";Jr -w$S\`vn??I$0_́"׊(k؏{'z]{QqrDV2 @b}x!嵗ŘV,1~c9x[AL%H ["RE] L$x,@No?SZ Փ'_G4,L}g_!>y_w~!f1zF{q՛hZwEw u'O&ͫgQ`ν?oNL}l0M{вϩrܘҖ%g~Ljdŋo690pW\>/j[64{#yJ[(8QKƘ̅% ᥿}v-Jɠq'DHȉ3FS(# Iq*v *tIENDB`qutim-0.2.0/style/emoticons/dance.png0000644000175000017500000000251711236355476021255 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[lUUY{szNk[RD"j HD} D!%^1h _11Q)*!XE!zAj۹* +Yʚ3̚Uz.s]\/}gjـa5.$`9"Jg9_k \RoȏvATԫ4ǘ_i(z02CV{z3\꽠Y$!tOK4[cm?U0E5#Eʡ7.{xM휈29'l=>]? !2]$ ?4VJ2.wmwH>1`W}R=˪[A2'o[^V.QlJ˺Y\˪/@H˪U%@YBòn6]Q-/u3Qx5G֌QcȩQ#ɍ'l`ЄFijbQcM ֎Ys-? MFQe^IENDB`qutim-0.2.0/style/emoticons/wink.png0000644000175000017500000000237411236355476021154 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH_he?}_q:?h@+ay"b$dU]HB^F^hD@D4\APA#QXi֜͝ٿs{ytf~rG\ !>2e\kAZ-JD8KmC45D3To-o'`:eut,mx5q\G1Y^ E;Fr9 H]|=Ӓw,rjW­ KGAm 3Eej,lƷ 9l&8O#,JG~xѿM1ĬG(\<99N |z"kv=P#D8]ݱi aFA`*QSJH$j@2hWwL"GUSPO^^ 88 (10U*RqBmC}{!oU j-K?’53MD@dbB{aԁK5u)X1FO6^G+&<`EꃖP|lP:K*iꭨ+FL<}`f֥{vTK͂- Z9ne gE,6Wxku@t,NYV..R*9u:]h^zr?EX&,btsy52cy'4B 9G8 IMD[Myݕwcyޯq +vs^Ab7o^ȳ-ED ę )_оan8b"(aDBKwBh&pZ8#ZlE%*`fP^z2K/Ppx.%m?T9ޕ(mxX[0n-N o|x_2$hk{!Ʋ5:GےlN4s־5׌Hg/$i۽NhP3unOx& U Bwÿ.ĆOH^YVƘମ]sd677M`4a Yƨ E]k+WV5 k,cddڜIENDB`qutim-0.2.0/style/emoticons/kiss.png0000644000175000017500000000250111236355476021145 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH_he?}ϟsml.lPd ȰL D)` .)# .6Ut1lsjYͳMy}~]8:Ny_x'\澪=w]VMluҋGJwU> Ϣm aKʊ2 577'anDW [+4 am;e UziX0s[q(;[ Q<_j˖x4!< G 27\:͆ODg-b,T6pB75r#E/֧yf{剸YQ4Keci(Rc^yщDDʁʘTm,>]Wx ?0<4?ɬ5j1fwdZʍ.YvAcVkP@lV`ڵvȝ9sd6 K?2IENDB`qutim-0.2.0/style/emoticons/thinking.png0000644000175000017500000000240211236355476022007 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMhTW7&F&46JU)ݤ#-)*]vU Yd! u)]QRE+I7B"6`m '0$341Fx-.sQU0UpzHr'#;WP7;גR']M-ZKcasuqvf< ax6bJ}H|\D HjV+8o8X?q9qVՠG#^=bEe=,/aHdT ‘ RDz+}%Tfh0 PҜ9w3s8gOYGT$0#Tbt=pHIqA13XkqA ^f":40S:Z bCӒY(wrr-S% ~i.q&4;9ҎrWZk6`Q1;9ȿGp ^0c5Hjяqha .="ڰG$b`< *!ֺ XGhţreKE (>rcj qrɷf1`,"H K5 e.-aZj 3Soz:÷k?>ã#FD\Y Pt9;D`Ab[+10Neh }S8ѕظGү@Si]ەO>W 1jCZDu(x&Kg-Iɤ~Ho&/EĤP$ާZLb>tɖ˝ueO :xTzls;Cj2{HK'']9I'>Zr[$G4ݩr7a&T7'3 φ:˟sOtwtӥn+3jL۶Y7{wJ ?Q{lT\Y "ҽ{wАոثm5e+;(p/NLN'-GN\fV7^DlnfÆ Bʈ$XcXeyyz޼&ICD4O#IIENDB`qutim-0.2.0/style/emoticons/good.png0000644000175000017500000000176311236355476021135 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[hUƿ9gf/lI5@ Q A>T$|OV냢B_c76Fsi&u7ٙs>YRm=p3~g3Č[9-B=!O3hFShu7ց"TNr:t.r0tf#/ܨzDͨk,SDAn#uoy@%JfaRPi9,`xR O{8=AՒ7Vcjr~7;`f { CXQyiAGD؝H9-_xf$0e9)(^NXE^ s I@HNV0~ryoM|(!_x&N_fec+=pi BdZ!vFa%rm.u-n 2Ignb齭שD$FAɆ(jB&Lݲӭ{֠D$DmaBnEmqZv \ʃYUS~.ָ*ӃH" gsQ78EMW;s/ŏŷ+B,VT1v  マ^|^簦[-alkNZ`. ¹q]@F?}fLy^%og;:uxL &S*+ pr0.ҐaUNՈ{z"\Αmr:њH13 - $o m{c.oneJR)ahK!hcB(X! "[fV7c 6TIENDB`qutim-0.2.0/style/emoticons/shut-mouth.png0000644000175000017500000000243211236355476022314 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH_he?9GfN7=mFK3oJЍUL4*e !$S 0RL-aicۙ wܟwާ\'^|?|,y䖳a5.kgts#YNj0QM$)jꥱ:CӛnozlO'&&HoX*~i f2Άmsɜ1U;]Y6UR,h*Tcy|[IZwHԷg}ڞ &M&BX#(b悩#pQJ``;5zfq$)] Z FT" TC],N 6ԓ7qQ}{;Q`9zsʍq( Dm-gCa46T~jA-"O$߂h?v< X!( " >.k3HU#>j;,@} JPSgpY[Zˆ)e] HXP!Z@ rP_fVĢz`sl2$mKP@5 @]:ICm4C)NTH>@J;s}1L̀bLj5"ÃָUD3vm eٶ6.{vn cIf3->#R:7Vv$`nggk8>y7tl9P'>/JG ٬Gj)U)f/_V.wؽs\nygǜjPt%R޾h7g#:zlsɜcpB qH99b4kV9v>Us|rĀŸUfr.SMw4~ oޠ9"(!DP 4gOgHL{;{cnYRAb^ֿ&܅' ɤ7 O:-) o:-) 0:-) :-) =) :) :-( =( :( ;) :-P 8-) :-D :-[ =-O :-* :'( :-X >:o :-| :-\ *JOKINGLY* ]:-> [:-} *KISSED* :-! *TIRED* *STOP* *KISSING* @}->-- *THUMBS UP* *DRINK* *IN LOVE* @= *HELP* \m/ %) *OK* *WASSUP* *SORRY* *BRAVO* *ROFL* *PARDON* *NO* *CRAZY* *DONT_KNOW* *DANCE* *YAHOO* *HI* *BYE* *YES* ;D *WALL* *WRITE* *SCRATCH* qutim-0.2.0/style/emoticons/cute.png0000644000175000017500000000237311236355476021143 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMlTU;Ch)e@Ƥh.bt˜tqD. Ƙ2P41.jR ֖i t7?wf=[)E6&799sDUy#1 E{+Nzy HT8wT(jKrkjP!D"Jy@cl’-rm,tH|z #m&BD'8b6I"&(U%ED:LZqpLrV;XkqA"(QԤe "Y+.QrL5b+GoʐHśBĀ("H%%^vc@yH7 Mb+G:KKS̯,24hyk0t>4OSw Z^m)Rbۯ71Ah*6(B?+*XUl ."Mq4LCZ"r+u&7"σ  c,:1Q[1M.i%qkAA󠋌̀Ch0 A SKk#Rut}5~ 0E *vg>3mQ-A=tے(kqm-Rt Jߙ8|^A;*hPʨ@6ߦߏgV'dE ZR TD|Ԗ1DGUzS^+Nv- :Ygt  'A=ڶۮSxC슑&7CV[mځoz~`>D@{7^ns;? oKכ }0cUo"[_g_Ľ\, i?xH%5H}Io}3Ahrb!b|EkrjtU]v͛l74i Yƨ \kКټ.qKD>aZJjIENDB`qutim-0.2.0/style/emoticons/smirk.png0000644000175000017500000000235011236355476021323 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<zIDATHOhTW7df$hcbli(E7. bq)؅R BH),]E u\*.B4mjmCLLlB73ƈ/\p8=3iT9n 0ABc $2,B6hO:$E[&GJ0;ӓj#ޱC6d˅I,o= {$,ϡ& TT- x&J&oT4'M­A.ts?G':)Y &[PQAFyipxts.,IKd)Cd mW B\ cA ` ssT{ 悽kZx&"QUD|j8H\-%B$YHfބĹa9HcK3f)8ܗ8{~#Ͼq w -v@'-5ai PLQ2?z|?DmD@dIb< []n8P qbVdHP0+`e^G !]V ~W4WwH T}z_݅YhX2塾|J(YGؑ- ,9cGf9[%0AJb*aHIE2+EyLAs8uM:lEť> :EY,e"Xq`zR ^"cFF o$Myq!'>*ps!)+=71Vz2ɇu0kov趂r?$ITeQ{ύؕ ^hL0 p?Mܝcd!1tVZ^]֜:粃tÕ'nMiQ7;,B܉T9sjPB4/07n<ꈈ, RJ̯"IENDB`qutim-0.2.0/style/emoticons/bomb.png0000644000175000017500000000212611236355476021116 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMlTU}̛7_LK1(m0qC c"~$&Jbh7!,deb\( W0Qâ1JMI6̛uAAi5zw#J)0Mi8)`3||ݭ`dM PM%eN46>8لp-wTJز-ޅCύ| i:|άE MPɺ@/TNܵl4zr5#J e6c2{cD87>> VҝU@D'A4 am{yEo$Sa>-c+DD]ySȳ{ 8\z|~:;^_X8wrdnF~U+UMG; 0mPU)0!~w]_8|OZm CO.BWw7٬ETJrZ@G{[ʷ?i2|&wBk)_۬4Xr,|۶1 ayVV}pv-Auuu' 80 N"4!M{rr]}~-iٖq}a xGDF=9!'E\1nE)EA$O^{J)8^ɪ!S%yF%1y$)aIqА5 5V*9{SqYVbf1VւCԉ+$Ui$Q^=&`rbb!pOg.ymc?Wa`63}8>;=HwKNb"`Y+̥ZN `,"@xwhlk5۲FKʕTN^8 %R*^ w=!Rk4I?U}iiP\^RM"bm@[ @ĭ5 h6G"gVaIENDB`qutim-0.2.0/style/emoticons/doh.png0000644000175000017500000000240411236355476020750 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHKlUUϹKh ZbJS51jQI[pvqdLt@818"QGBcN( IR4ۄ{s^nmvZ{KTEv>ݸO ӏ23`%YD $QNQSYcT6S0=iud4R[B.ϱxtK(ڣq궊bU@"ZpUpO͊i];?2=tS7N5R,"*kTaYe=P5=xgotrpU4|6xx/>vCյ2iѪh "j`rx/I"Z`XG PYJ5+bQT`uJc4YT3@#. xdgKP"PE ƍAjUO?ӓOJxDy>FQ-E4 AL5LOZ|_2#9'(B`gEtiPÐA4 :YVtd42pwSLɮI1s$HA zP# g*pb{7hr7&F4 `J\ӈjKKaGt&}plCZt8'E$چ9Q/$yTb.kS9p":$16I7Q%wƭ6 y;>%hnq5zxӰ%lҁc&56oOF$gV$i޹JjPm%O$ -_p+Mܘ\}gݹ5)5:cI  GfccX.i vAVkPDlV`εv]tl6Hy_.GS IENDB`qutim-0.2.0/style/emoticons/question.png0000644000175000017500000000272311236355476022051 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<eIDATH}lW?{{若(Hp]%cp`adX64mY4._tdÿ\ta23zV`4Ҏrowhі1ٓ$<=lzP$?vo~Gko}p9syZ@|M^O*e|]Pr/='gE\q9ꣃWջen8# ]}|'ȋaaXg~ЮR[o6a jAx3G fy.5NRkcXH"%*ZÎGl7`Wv|bn&с'vW(˜IrWxZ FIqQ[-N_" 87$ /̩m[gc=}ϫ*/< ~^~ ;6,85qT(z){)9֨mܶR(¹ĉx$ W/K J ~<ɠ$%@[wI)űC (!/8~ dZ.ŀ8K(ԭHOxe0eג/^W@yVљ U++6n2;Gj8 r8w\Z.9W4j-X [r^kkJg'|e[{[R:Pcv4 h2A49Fۛҁ!-sSI3.Asf. #q@ FULs?EёuIKRM{,ࡶ<mdR qӫiV99&_v4̴64 ea|5L 9i=" 4q8[|Y?LI*wnC;g\8pmνW\; _[*iX.^뎠Ie_NCjBjΦ~'?[PvѓɍNTάj0Kec@0wo{(Yw#vsk'4oT D#E_VD wEj24py2򥆓9kjt~sLg:_b%[ BЈXcXbs>k'|ww@)IENDB`qutim-0.2.0/style/emoticons/giggle.png0000644000175000017500000000243111236355476021434 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMhTW;j2ILM44ZZ[m(&.vcK ).).\BWEE+FmQE0EOk83sgu19'ʳ\晪OS`'6\g\`8r\DS"5-mQ 8LOX̌t}$9=1Rį* aR-8s0z[tA+]*WUOAuR.hz,I,cYok) ئU¾qRy':'&Ⱦ?B1ĬS @LpQ*``s9Np4o֥q=pGp\{zcXkqA(8Z$E "Y7&G*@4IM b@\%%Rƀ8T9H[ӅvV;I[k/,2ty~1Xazӈ,FT&(¶jK7 MY6m`A=7>̯Pc{dp~ {߀&M65 2j=>UO˚$]IDgbzP!ZB |R-Cn @"!ZyT@].N"905AXD d!p-% ǸQȎ/hU9릶qDtzÙq4[k7E7#GLLOX|.TA_`@\QXi90>Ơ8^\enqc<o2s[;ߩ?71n FGH1 c/8',YrU`A X[kڑؽ}?GV"_yD7<m-0p6'ف:׊wѶv=Utc/7JjU?&qnqnVXYoz~`'2D@Wa7t薽/N[&h֘Mtة Tѩo4iիKDDn tgGKܘ(msL 3<zf|k^KDn|ժ-ٕMX!bDBV1jB99844T5J CDIENDB`qutim-0.2.0/style/emoticons/rotfl.png0000644000175000017500000000244611236355476021332 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATHKlU{̴(Pk:mhBD$X001*A >0SPC .4 ؂$D[-شvJtqaY9s=MwYtP/A"lġY<<(^pH[ t_ ۃ~,U5Q)dEEIܮ0%0?vGjޗA^le-_U H9%ie>;dn_t^r<9~(&oT砶̖;[cS콏OecUrì?uj4oKx:%Be؂z%~CJ#HpuJ^U~'CBOQ:Vj<4sXv1XīTW9`RTW.EM \6E0V+~!FDF)AՀD ":M 'H]M!C3+*,3;L  B0scYXVہ¡9O@<NpCEE=d fiNEuJVp!oD8!;#nh.om1u8Ojx0Z͏R|S@!e󕗁G;cIc9T<`PXxgץ0!.*"RT\ ˆ=/N럱x2\Y6+Qʗ/qvSSvFμ BaĐhxץwvt&sK4j ݓW($\ e ˑ|D hڶ(}utM NN*3 ct^NpzhZ3wbVٹ+&NS@DqÆ@ID7 nd֕Gfm/pw&} m:?z+ZrPN7G4oN4bf qR(dpfΜ9כo)p37JZIENDB`qutim-0.2.0/style/emoticons/sarcastic.png0000644000175000017500000000237211236355476022156 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMlTU7 -66jDcb*(~ED.`%$&]H?6 *Ƹ"R-Bi~̛y6&/_s*3mUܛ'[6M4K@tp3'9RES 1Zjk)4VM_`xjo_}cG]{n L@Dbm%Nj8VL_JӮ&6w ~ J]aE#ZJ,*[y>]27]jڤe{\ (q;@a:/nr5/=WO&ɇHDbmSҰE;44؊ `JQ)ArYEȣ$1i"07_$zh-\zQQSMZ "eWwr:S‡Ϻŀ8qH*jl[hIjkejA-j"wq.""3( R[SiVZ4S^il0FT}V$H @}P^ipi^&-B߀"Pɱ20QDG֥eZT}fzaJm3EQfqr8a+/TIT3@oP.L8(`0H ep-y YN`bHLk- 4Ã%&u$""*Bj,Y baxpz!@޾sϓ ܅܌ǽw)Mz8Ec9Q:jhI!#H8HH^@Zȃ,hP=vȉcp"vf4Q4Ed:DGV=v͢dЎh fd9phAb[G3{nۋ로?.[[IWGj[k+j;:I{wMWoxkRv]Ԭ  jw]BUtMtw/ iܸqP԰tݗMzU$M%N #W&~w#u*kMZc]c:OtɕYWW&ʒ6o4iXƨ f&\k'ܙ3g%SYj"JIENDB`qutim-0.2.0/style/emoticons/laugh.png0000644000175000017500000000234211236355476021277 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<tIDATHOL\U}o`vJ㴈.ZijFt6hdՅ!1. WMSPPZ(ZmwZ&a޽.(:аzy'{sÓ,DhX}"4csTu.cߢs݌B6kBybuRQQڌ.qwtd9Z aĦx-}Fa*0j)P@ĢOS#T2h~X@hɏc4M,Cl E2DDc>""ܥ)za Ȳ "oY (^e슈h84p5doȯ7Gbr; | E?Kݾ%rܝ;c^U:lk,aUʷ3eoV,8\&9n3_*l0kDA*q\,`7#KVӔ\v#]"PY B/7X{1#KWoѵh11T>/ _嗟 P9.6Jsg.IG>l_#LLoUqMӝT_Eߗ2^fhz| Cqm#+V HOwd96th]$\}Iܟ.FЋoxRqLׅE&>30CiIֈF;w1νEn]mI}ա 46TjwgO,V=%2"k=47Ww~;QI;ponSCvq6}*k YN`LMΗ5??ތVi̜R*}ά!lhhA&hJ Φ-.w)IENDB`qutim-0.2.0/style/emoticons/clap.png0000644000175000017500000000246611236355476021125 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMlTU;"T mfXnlQBjb&h ED#`b BDMńD(XhKig̽s6-L7Iys{DU?]W׊&X@99A'EmR/!PLdJXe4ӛJo)n׿b<$ڮ-0* A&]b rPZC;神 Wp)6l+J%0*eb0ϔͦ1MSmwU0&V4tM9_#5b JLtAJlf[B斈D J$ V jŐ)B$ B5/hsKDB`ZZH&'$"b8(6"6HJR(Hє &""HZ@hɰ uzrK0e͉zhYSCLY0Bc!C啖FGC㻟eCp,q;r--hP^i4;-cƪP"V5.^,#E, Ըfc4~HaPT]0iU8 +"˲IT>jR@p7C$Qx+ 9MN"Ӷ##h;X|xASvoUpJSRȞ!"H5KnrRU7^p (Wz"88;sM.kmcP+q^{2\<㼾ڍq[XN)U>V5+n׿4C_BFV6~i^iz/xY4"Ѓ_4= 4>s=ggZMR|w()Cd s&{e]|ax _6;ǟYވ-P>cÓa|*ㅣ>  ޕ#Cfx's՘Οs3G˷?x܆Em=YF2]]]޳R۰6"5ݻW 'N^qIENDB`qutim-0.2.0/style/emoticons/victory.png0000644000175000017500000000255311236355476021702 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[le盙vRҖVZ@Ũj4!>`k⋑$ިjRc REhnewgwfV-V/{e__*N"C Y.t&MBTV;c+F S׸H.hd~1CƆĸp$o3hY>=CFY#X`\"΁]JfJc#@._}Y}Q-ұ>Ŀ#}tltI&bQ\)Oi%*b2K-XQu onXB=CDfC"TIbL%` *?#. xI<^~e1b<t^̂FM }tg8xzV]VJ´]ܷؑtKⲻ$kcW+/3/fCˀΧ 8 Paij矔\V%5iP]7/dQj!mKKs+ilpXZx%֥DKjq8/'\z.>DeT FD_Hc*v 4McZ U A3{Hrj(B}ht e@m9 Qjc ?URS`'h,=D#̚? u'=dNva8y,͠6Glt;qfμ2>Eg g\zb=mlzdhXjН4I?ԔY+i1' SU olTIjD6 O GvvSGz/z3 hk6&r>4 _-Lՙ b^f.{rL#C?2|r/ O7<#U ikoj/5~I"1P ͍.2,.̌ՁTÓm;ym6sr~sF}yG\ 4.~$V5U8WVmub7kڕ~dP  I}.:$B& gP@Τ-yzry_P*::{["]ұ%Q JdHƩ8Ո3L*NJJ~ȶ[zN}pe>yH tcG21.HJ *(BUz):flO2z ~Jb3KX+͍AiZPEDg| ," 2Ӆ ?47V""vjb$jUEhZ@8QlC"K, $`50B t4Y4284)-"c)Y<ߢ?UyWށ~4ݏW'x7PLhD2A>qo$i]z>P԰&P,vz3addx~6oMFNc2G&K̥KJڢ I+ČHĊ5FU(!6/0Z;9^seL 9 HIENDB`qutim-0.2.0/style/emoticons/embarrassed.png0000644000175000017500000000240411236355476022466 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMh\UΛ7IjN$ Eж&EwR) v%EE.E ["R* k[Dh(CG3Й|d{HڦNS =QU2p=$R+{aK(#MAÍ d#[%՞:[ 4fO0;1eIOGbD!AugU@yU~.i|s81jޠ0@:3ȑ^jPPقXz|miHgOT< KƑ^%$T1ԃ$S8(U+K`GE[,]oC$" j_ZGIx`Qӈ"u TR@]IpC!(uqT{tF*D w78ufWΩ3kj HjeB=S`at;EՂZD,?a-Xf1/BD,V3Hg{C/-3 `$@ `@V (>hZE a[ 5G[5d}lq_'p=D XFUwgХuE5usC>g\mS7;oCy?:I]84=@FOFiˣɸ8NZA8ѶTH<*VKf^5 x$zbDA,GqT!nCLcˈ r3KUJ$ +%DQ[@4:O>%Et|beF{bdbTwt>eW|MUj=']sTȇP[$٬2;1dAl* +Y$PD#k%"DOV$Oub,d/"vKļ}СsEm?]ϭDyn#]6EI6"rn~HgD[AGw_}۞NΎ"jy*;w|P]7$ٻhLj;ڒSIOC$H SƗܱ7K1&?:22@7;wtf&0"Q+5Vؒc"r՚ټ!㖈>eKIENDB`qutim-0.2.0/style/emoticons/dont-know.png0000644000175000017500000000236111236355476022120 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHOhTW7$hcblBCC(VL]$MA WP" )T҅.X(Vt*-iSk1 8?Λ7޻q.{wEUy$.WmrbfD7LQ;? %wSM|f?۞m6;̖Yؙi;3g6doF$z{Wt]4f4jwd3'܋bSw/FO^ɫ9cL~dxxNWevtt͛3l74cYƨ z @ku DDK&gIENDB`qutim-0.2.0/style/emoticons/shout.png0000644000175000017500000000241011236355476021335 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATHMlTUΛ'J-cK qS‚WHdQ7Ĥ.Q"H`eLXl Ӳ-BP@Q"MKi;vf̼w)PJp;犪,yȵqa]@12_OBKJKAꛛ9B]!X>tx u鍟[𑘬G%]R&Q0Ӓ{"pjU Oi}1F{AKsX6j ap/Fi T+nb_9+zEF0 qD6 6!dmݳ6]Ok-"HO~gjƂFMY 0A|Y@{f8D}s&))D 4'% O?ԪT@rPܔkPa4G]jA-"DM2ff.C&X/¾cF|zP-ѳ 2HAK@뗠UhD?buyF0qD;;6,X%D;QrVĢ`sB#|]gʛol͡hqukcSԇ_~[A!P jWf1NZE!Ʃ]AtttE π]"fSJ2c@إri7 7..~9xe3LNi0rͰëQ"j38Tf'tpN}u ùi'6΅ B`ӊ\ΩKȰ[ZrOlUu]`+EߑYjyH]LUl/At|VK\>p< ~(=[wob+Il809vxM//m; Ott9lm#ydiVe67ΥԿ3^r&qɺkFdݼy.@DcϞj W?w>w_v$=?8=sl9zɋ9k1f袮]lmmub6mn4h a#bQc ,9.+WTDD F磾NIENDB`qutim-0.2.0/style/emoticons/arrogant.png0000644000175000017500000000243311236355476022015 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMhTW7Om>jt11j0*êҕFePHi!, vQA,tRD,M`@Q4hLb͛yE~Ĉ/ps=GTg3U'kef\%d=r' j4̕Ni67IKsņ%306bup͡k+sH<C1N%t{G I HVpwTNv{.8AY5(tkbtjeH4`ǫbYHhkT<a4RHz;Mb.ؙ*J d|SG Ԃf>]*B:v%v# TZD\8Ez/{bj7ͥ2~MՐH $8nqfVvmn"$U8$qoϗߜ%͚Kl!PjSi[BL܍݂ߡ&xbzxImzHb$}&ޚ.¸Y:Pݱ_i?.X*5<ʞc,eMp<8pFWF~K~7^0";U "nZ>Qko[_f*00ņoL/I'wʳfB1==E}@tΑj*7`AVsX!aDbV1jBkP>wܬ<'qKD^Up[KIENDB`qutim-0.2.0/style/emoticons/mail.png0000644000175000017500000000156111236355476021123 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHOoE3'HҒ\b ߀T iJZ!PC !8UB&u uD*CLB‰ݵLʎMTE#aW3ϼ3|'x~|ǟmZR)յ?jhv‚G;O6KEJ777CDZʱGVy ݽ]r91T*Uf`!^X+ î VҢX,ŗdF1xuwJTkzm_,#wQ*119:d"!D &<oDIZJZH)Yޤ^111N"@ΦJ"36F:=ˇ 280H\f<Ҍ6Jv0 c=;Al6q=֪CXoVVǶmT:C"c W%_!ry2~ >y缃4oMO'߽zt3 K%gls/BR&!a㺏q_%_yBQҥiR) ׭(W序Ie@:ʕř3gy2dogͽo7]`wuuU֒fg9 !M?suVض?2PaB FDi6}0umL̈́uwkkw%hxOg^^ R@0"OC5@B`Lod>QKUYIENDB`qutim-0.2.0/style/emoticons/alien.png0000644000175000017500000000265411236355476021275 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<>IDATHKl]W9iǎ_izm'DTN@%-Q"QI#!0("1bCB"[FR"NRWuh ;vڱ{}yܤS=Y[ֿ:UezDUֳ'2VyÆ8v2 ;ƽ deɱDUOqV|su33(['s);b\-npB{c'7s{׮홺;e=Ŷmk|GVQUKB VK 37޼x9jijJ@<u)(]gw&&  O]'Ic."A̮|bjf'S!ʅM]]~avagg[\2\trO,ebvaZgoPug7l?g~kd0`į"9X6A~uZGzɌGk_wy=R5"]i݇5]>A^;rt۷He𿗜!ص\IENDB`qutim-0.2.0/style/emoticons/glasses-cool.png0000644000175000017500000000242611236355476022575 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHKlUUϹ=Ui%Ubm)Q-*#02>8 c0C 1&6V1(`@>g/}B):a';g{-QU0p)Np">҇Y+ $ꐵ5R_PV5L+n_,/G𡘔O% ~a1jGqaʷi-d\WBE|:HtkO,(|n@#,RA,+m \[Bص'F3q :ddמX޿JQ,SGLpQ `3`r`ʦ5Nq$1mk cEP 10%)CfHmQ s,"H75!b@\#_^pWJL)]}3B~uBEmMT B}a2.1\Uz1'{=K䲅Jc$ @Zs|~ eDLYVe!JK<6o,eSk%ˊŽ.6*f/}S2[j aZ[904%:hm)!) 5!~5Fժ;=P>O8uE<.B#RE.{9營F΁Ma$es!kR)D(2>;v `31u OM!,>g(=z?x NeͲN 3to7yx,֥A'@8^z?3M)Nj-}IQI6,w-׷2X4􎴵GHTK=oM*[njÓ7z?>ݯ$hjzs {OȬ r!{}֑߫:3"I?9LnIKeo>zmxx#Ahەg$1&3 @lk֬qc+Vm.3h a#bQcM LNEyI ٵύV0aUIENDB`qutim-0.2.0/style/emoticons/love.png0000644000175000017500000000205511236355476021145 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[h\UeL2hR"SEdP[S*y}V iCh I6jHISm3Vj枙k 3q,8k}k{$"XPkZ`MT"mQѳRhrh*nȉiKr""Q3ww |mK˂A878L/,u']J37ob|h(>N7]=Du3LO.t*C:yʴwu^os98|8ŞyAd(X2M;vg8Pk `: 2Mlڹc./˂ĥ6jxDM3$vB!B<a^@/P|kbA^/,LWGOO?1t?TYnLN w`Z8Y}x<61A,/!">v,A { ЀIh^yW@,fbx8iÀmoݲ`ØN##kݒ-oSSW?5[Z>̭[qҥܯSS?-0wVEQԷmjk ۷Ijn'''g3O(iwdOenBUWkkqU׾:W^ i3mYq. jQR+o?`{._?UY`⁈ Q)x]UUO\۶rg6 m +"J (Kg4Qگh߱毊KI\"IENDB`qutim-0.2.0/style/emoticons/fingers-crossed.png0000644000175000017500000000253511236355476023300 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[lUkshZ"M*K5HyĘ}$@& $>PhjA_TNZ% +09pN99\NvNvﵖr+:kxn#++ga ,\IsD즵]:;R- ? c8z*?0ӘNN,X6Cd!Rp.,Up]:Bd9g or%]$5E}2:~[=cpȇܱ\}}/nG&H31pxs8|]<r9f$GZ _cyw xc!x[ /=w:(J3dPOUY]f_ai|! 8& xabE:+G,:U'/xe0~tϞJ~fqNy:峃-VY7-oy友W>|Ùg˷MnA\:p +'O_}2+Νξsʅˁ#"lժy@K?/oQrkkًgӉCfwXVW0gι]zőgjU:,B҉*95!ZU_6-w? hjS:IENDB`qutim-0.2.0/style/emoticons/rose.png0000644000175000017500000000204611236355476021150 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[hEg%YBX6BjZM`YxMh`K߼@A,KR>)mJ*RE6mhLmbmI$Io9>HD<Ι9 13O+ "z?|JQ]/1p$'^iAq%&zMgӕ랡 ?\1s8֭=V@=;wz^:,~>q൛7{?;6֙@ʹM5BDi", ֘[v3a4T̎,T=B"Kc[ lD$f^9nیR \./>$:@?9>\EkvL)&F=ߺxr0zz@(r]6pM+/&bhݶivs333r%z}Nj#|'L*DRCobw I j5gOݬ]qbz)jz፭}HFW6-`  rl.&ء[ك$2y=fckp8Ҝ3^u@̲O`G_;P~Ox B]ѯ3XX`r$H̾O`怙ۿ!$~~\&' zp?;mMeQ )0s|uWY4H#<)")S"/:~?cf0 d ET'w.ںzQ$|v atw5SEՂZXD!@XD|P`:.}c$jx` []PQzeP[E-@~8@mo*ب- p /\|P|T}z3ű)4T=ef(10)ԖA=hTDmwuip|~{hP&9$o/јp!?Vu9fn1Djg\ >ARv%H=@ԑlYqo*,!&*krUeղZZAq7#E$9Tr'ɍ毕j; {b D eb SNgO&9Tj>psLNF5 2b5YF ,Ag<jCGg^`cόkW6Gsg`֟H>R\ "{sF-zjMiu[ ;Eb䱽tx1&tppBgoѴ-YM͛{AVHkPE'Pt-塡|ULDB3_6:WIENDB`qutim-0.2.0/style/emoticons/silly.png0000644000175000017500000000236211236355476021335 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHOlTU7` -3JR-D CKtf႕Hh!1&n 6,ĴuqшJڴ4L̼=.P↛rs|QU0Op{\~"ƥW8WP sA d;Kb &44[ʛyXZ:5]`qzF=%G\Db'W?URV#;`oёޙ9N W\ANLMuR*.j5*;cyK#Xcw 'N&H tDWNLB#L->g_E@fD|漞rݏ8cH!KXkqA(1EM=bjA 1T#AclsQ~?Gijo#&ٸy?z0;PRuQ "~)M4GhjoˇGp^U jhS|é," !B/ +"fcX 0꣡8y/i"hЇfKo"D"^ |m_._za|xzLFjY_gB 4 Z!? w@]IσI';A3h ]ŰvlD =_ƪ K ָu눮,1Dalzc^A,6̖ 4` RdeL ΁A7eM0oB$/} DS?D O2sg4Ro6"/ !j}, 0;,N'肆qLFG‰-n74Ħn$+t"#y8|?9wFG.bQC7FרJ";_̩yl?\-8{_MUBo,Cnۄ9##Қc _η̾澥ϫZSMcOil ]iߛ՟-6nDA><1q-HwOO-P԰y&=ߔ,sr[ޜZO&FW1mtv%m4iXƨ %V]kWիW+z""kP^wSIENDB`qutim-0.2.0/style/emoticons/crying.png0000644000175000017500000000244711236355476021500 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH]hu?󜗝sy6;ԔR"׍]]DxA4h҅MTJ !&bh6sӝ<>usx?{UA@[؅6 X.}CIIj8gNi8Ǩ6IsCq2?QC% ]2{StSHKwLyXc . *&]q@l9:4uѱ?/j:֠K,l-J۰T؟$U輧j_؟ 5`jAR\l t1>9Rv(hG;!9 18HL-j4!RG5B(cgB]9vQm"$("Eqbt}J",H>6ƀ8 ȬMvU llMPXT-E´5w#"+(ҜA| v\ڨk06H#>Wҩpw)NE hЇKt#z"T9ӿ}5mzl[_5,g?ZAdž7 ȭk@K>,P:<:Q 9$PFԿn@]ȏIdIpCZzhxcφpblD ?25'sFE&Gؔ- |i_z+ ^ܛcij0 |1Qĩܨ%\GJgA7"cڟ폢t0#؉I 7IῸ F?/s;۝.N>v?jZ$Hƨ|K,b*DSObƬݚ3!PSEǴD0⑈y,LyԦ$ba8ƉE-w_}!j[*OOtDŷ'/slu\D5ٱ \z.Ǹ850|Ymww97i<ݓ`͚gbnUOAGBIENDB`qutim-0.2.0/style/emoticons/tongue.png0000644000175000017500000000235411236355476021503 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<~IDATHMlTe;_C[j%,jtQȰ4eI 64CqB BXQchRhm;M鴝;3~ZJ%7ɗ}o9F|Tj R,A}* fp=ڼ~ˆS"$hk]R/BX2UlP^6ˬEQq9vd3H 1ؑ6j(e $⨟~x{r?f Y LU ϛ&TguPADP\DN\cj6BX\[KdsFt|䄟@(]5]Dm,N!PŷA@@8.t|2R'0sd5{Z̓]WcsqZ\ioyhd2d.hr^\kPVYވ߾<]'ۄkzZ?iyd^Օ+ BpYM4ċ8T`zT=}=z䜌BoɁTN 1?Ԋ'i鴷l?zs/5@a7V3>ad`cg5kMgcL/F$wƮ7۷hNh|⩩w%&O B3KǗccgn&ɪEcLvtddQA7\n|ք-MMX!bDBV1jBE%%tݼw}pz<`kfwIENDB`qutim-0.2.0/style/emoticons/angel.png0000644000175000017500000000306311236355476021266 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[]Wkۜ53&5gHEI[%!R6%ŦU(V|B,Q**jb"DAhԨӦi\fl\eΜ>>f&+~e׷EUY+cn}"n/~נ-l`m4uYډ,jgi0A5M)#޹5(DU9vd8Bi`HK.׏j Z"TkJVINP봓bN?S;G_ iyux-F'KtcL7v;U$!"TCTi?5FK_?6!]!s\HwDЛ7ЅT#rK q mas#f&ӓĬB)#!pupP3˗~Y&#l`nN{!:vx[<38'όvP$Y^̝[7#]ֽ @GF p -[@h'8} h\+!B Y,(|B:jKkS}nW EYY.F &wqE?f6:߿z?۶}2oK7^ߵȍwm]lϙ5{O&4z! ]>t>AWW: ٶ{w/_֬#k˝}^_Pӫ_ ц166:h*,1h #;qƨq 1u gϞny_+ wkeIENDB`qutim-0.2.0/style/emoticons/disapointed.png0000644000175000017500000000231111236355476022476 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<[IDATHOlTU7 Ɩ" 1Q`Gꊖ4f႕11 b ]CXYH㢈*Jiy39.PdM^ron}#fƫ\ oψW4 |%(rc:Ih'IҘ JktJ_;]=́e~ V櫬/X r+I,1n#I%l& q<4nbbgZ<(T)c%:>BV={Rd{!c/̠4&.RpȒ $vhV6@։{]cz$5MF qH \2&!,F$ld4) qF%+`cxx mIp)lGCBw_oeӭ'=?3SDk!ٔ j,#}'`ց0]=NeD8 1k`ZC\ԁTB*f}#Dt8|[$e`@quLpU & TfZ+kQ2l3xY0 @+M#9":X2P=|f/KaZHni 3`,ZcO,.=+-q^ KMCn+!V+m0qy;JXs^Kb:7 ]n%0mnBEd2jXqcsU,{ cK|1'YTjU%߅\X_H>`ϳcnsK`m#Mp 1b'NOvEQnK|@[zXW W ha Rlj'Na7.>۶ۮUd3m'{P` W#?K Antj*X/?t_ /$z?'{>>{7Wh;vܾ>pѲE7ܣ~?0Mg'+[ DD2i2thf֢b1Fr[uys9~l@wGS{V!Db*95#Z(Ezݖټ#^[QiIENDB`qutim-0.2.0/style/emoticons/freaked-out.png0000644000175000017500000000232411236355476022405 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<fIDATHMh\U;dL1iR5iCC**-uZB "R ". E"m#ZLmhl&i̝{>I$~ }Ϲ'ʓ,D=8Ѕ> PaBP#'6"ZvTC3-~zCmjuq>YX: 35'> 7gMhsDa %<_kX<Ṝ#(Kߧ{S†RT.Jj(6"G=ΝM ,JI/n"Ո $5@ lCNlq~{`o"rXuqA( j"k@ %A&~z)8DY6Hi%qQ>Enl%,}ƀ8QMB9ơrB-~UU j 0w_0wD@d-bU]첏Th#VC`  SACGH\$SkSBbVP[Nw֥TḰ- ZDDgCL EA6K] 4Z/+YTs@]yX@]ϼ,qlx m'_(;@v`)9|fUAٗ3s: ^io4gˠ92PPKN+^TVٜ'37ͭu17F]ut 4킱2@b39gjvoR 9|Ȫ*"NMv7 Jfj<1™6nD ]>hy]Mc3ƭZUu܇ ~{_ %hĪv ΞϑN>]D\N.g>SykŦnx'[ w&W}0}G:~XAGkq7{g#e>!&[8:3ktXH|{'S|n_z!@DcϞj6Q;'nM'lnf6qM̫c'lmmu-MZ҈ĬXcX\k`hhl6oXDD~c P- IENDB`qutim-0.2.0/style/emoticons/confused.png0000644000175000017500000000240011236355476022000 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH_hu?}pmqshI`&Qv.C&H^I"RBօAJB!U"S.FV0Wy==]W/x_<*󘇪'A.\vvu2P`- Y rtJ 4H[kfCev f5>E&Ng𶘜O"ڝ&U SZpG `:^xԮ9>-<\%(*cy|[K67I|`O:M<#L-H1QE@. ,vS9+\^^q$Nf"₄Q" q0GV (H̡ݩD@8Uzhjm!"4"Eq8uNF~4+/@rڒ:KZ~&`QKۛ/ 7#/""+oik"+{\vl?>F|TJ5])PTK>c . goBaĔQ[S $ֺ^܂"%D=lN6ìEQ-#rhzcá@t Pzg.d#G05AXD 5h dZJ]øQNU\ffYS[go Qg+9ǟgjO~CC]4F\~Eʐ%&DQ;hgnp-́.qбPU rІg8A@uh2;'GL1:ʛ5q@!̃ǸuLj[$[%r>;2rHΝ@}BןҖDDi{'fbȩKykjtUkv7А%Π +DHȊ5FU(#6/Z\R4o`ETTz+IENDB`qutim-0.2.0/style/emoticons/hypnotized.png0000644000175000017500000000244311236355476022376 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHmhe*1ecE<Շi.x 7\_u]e+:3I"!,ex4K7'Q—AtMI8Lu]וRUc;L ՞ C}N=>h@]6-0U 2jGq ~Yδ;".;٦v*\QRmjiiRTfb2 l<;\.ZZ#jSmT0& &HS8]Nbo \ 8QQNߗҩvVI qX6}\_0Kln355Vƫ9<*m_氄8&qҋXGu]-Zgqp>-G}4ʮoP`i|>mk#fSȏBlP]W^ĺbr+WKY#9aٿE9knZ3t+Nxba3=R.1K`ħn oO>5 v4+k+CJuylO@Uem[>'ظrlp ԥSD#7 0HPBNmCQ;6qK!10U$Ã+̌ru끄P\DUEPͣF4 BL Zlr2E>gw%+C}Ktymc8bB(AD73U9L`Кh@tBvvIS]6hI; DqJ"֠GRZmߵ]_8"{^5;^  w1v"mMBc]]#:tڑpB7RY9AVkGlZ`̵v Ȝ>}h6OKp%"rK]߼[IENDB`qutim-0.2.0/style/emoticons/musical-note.png0000644000175000017500000000165511236355476022605 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<?IDATHՖkUoHLsXU7.ܸsaQD]Zw"nuF$RتE)զw9y]Մ:;{9QUkt{8 ""+}k yDEdyhF44IͥN}kM&k4zQDq48p<8ۜ*(/rG;yq^RU̡hc`XF`1'3'Z•UQ9qKWe| rK`]WT+z 8d?{cNOo@d23bt{IU}TDv]^1|8׊g $!qq d>,";6<|8I=j:jhqx$30! V NW)Uq2r9wWR1ql<>| \A;؎[3DQ,/ٽ5ԋWG(':k)Ys`tx͍5ڒ" )ٸڧ… ~ ^ևKtu(e%{ݸr/#E͂ :LS?Q h D*w^3Dic۪ /_CHQIA; E'wښk G^O 6QH@CTcBFjƌ`;wN&,:U |)VuU^)ɚnwr|/IENDB`qutim-0.2.0/style/emoticons/curl-lip.png0000644000175000017500000000236511236355476021733 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH]hu??;^rsSW!D]h7n^A!eDxFx%T(X25綳uyOg8{^DUya+:>4G\;]<60(Ar-H8EskBZ4WW)NYssl\ ;}1Y z;B|x9 HE}ip$rjUA֣x~sw5Jz,Oai³9lJa(Do֣ zDCPk1+Ԃ\2?֥vWG qJ#>XkqA(!(Z#H$j_fЮ8qr좹5A zXc)ԠT,PĐD qÐ`U)`:3~y QgyUAU(^1h,GKoH_#~aD["wm uBrRma:c?yk3?1PA7m8. ׬7u5E{;ra2y߫{I6nD^.zgd|qYέ[kooع6Vx9V\xq;~`jr>h&2rJ|Κ5Ƥgu 'sƍntʘ-Y!dDV1jB 9yy ?44Tu%xP}# LG\cBwIENDB`qutim-0.2.0/style/emoticons/party.png0000644000175000017500000000272011236355476021336 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<bIDATHmhgӓi^4gefg+nPatPR*N M Y ڡNfլ3'99iry.?$Ҋ澿\}]艀P,+oI+\v]^#;??HTv=};%z-Wp.ׯ.d y]K<.gQ7 0dCXĺ:d^;~7h Q[yo^ʦ#3C RY^XUje &qZ8TqcwL>W:&G8._BH 5'߱{C ԈJ+>q|6ӎ78e6ޣ%7µoGBtv=۳ܻdH c`jp 2'"Ah sټB~/O>O{O=y !$5q4DAAlTxCGb_&̕o_c%"HBi@ ـ4bײ}B޲R^^Az1=Mog2?E?ȣ/snb_4#~{DtA#miDw]s#{m XYxOg/f9{<$ ZGq"l2@TWvP9&y= i܌ংWka;-ls9z6kJ-0mᶝOhlmtS$8;-eK-cEoZS 8q& 4yFm'AY\YwuՅ*e C~Pop9Kf~in1 6Iޠ0bq9tb}jwĭKk6o*#e'*/2Z3HחDu1B*bBء"BV#W.3U̲{@ RʕL"^?E2`"9ԪRT>sJG}nhLCa}>&A~}䗪Ck_crDQ uӊ ѝXf=Ubn~X -#$ūNWPwa%(Ё tbكSWom{?- ¥փ}ۚICw`ڻ8]N֫sş}_6M[,MNqn jQߺshu{gԹrK^0=].'J)&F1cc˺t}VE}o2hl#7FPC@>y2>>o%fW C (iIENDB`qutim-0.2.0/style/emoticons/pissed-off.png0000644000175000017500000000247611236355476022246 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHoT;_ǩdd@,D YJ2E%#%( YFY.)SUQ,Xm1cH3;ws0&1ʆouk-OSU'}<'ǴSch.i6ICvS}J/LLLna|\ J ssy9Ș[O| fzfOT#b`r9 H^j7 K|所?hS/j2Li1t|tӯϹ?~[ba`?,8$aO>{ApAw9ݧÕJ^=haYvh spT,-A6 q)25 l1NcEHA`z=ȇ*@YּY~r9lko웅8n Cz~HwBp3=[c#00Q.thiݢ4]_GG&qW>̶,--o.א bom˩mn.///׮lpz,@_@mWZYٿ\diuUl8^!@x32zr[ׯ[^_q{NZFƜXViN68Z8^x-Bml@ʹnd̉%axo9p.rOȶZjAy}r;7y? ӏcz*y?8oTܱ)1fy*]P\Yj﮵6=}om>07w\ygR̮GN0FJ.SMw\;zsqZm}Űwq<q;m7eᙉ RwRZͳ2gff{Lhv9%1bXh;ƴҥKvǕ*m"R{IENDB`qutim-0.2.0/style/emoticons/tremble.png0000644000175000017500000000242211236355476021630 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHKlU~yi(0T[-6hB lTbPtaeAEM q QSĢ<c j)*B )mg:bPRKp/=)ʃ<恢=K׳a)>+IJ@}:E^`**D aZښU܂q* 9xik.kWKw#&&eiPE4EI<*6 RB!Y<ϟlKk>Yg[MDu 7ǂreoh88fᘃuedi\laꖔ F¿qs,g/h13"&(ypc#n!ܢī}R.Y21\wO´ꚦh9D|0H LjHQ H]0oATT\x<{wD˓YTc@<[/TTY;YTjk"68TCKmh;܍Cښq;}ೂ*lFZXTo728@Q͂Z<y2D fN%ɡ.f !D8#QA4h!xCޭZs7!u ٴa&H 0cӆ* 69ۉ4TA3wA&PNN/1u  NzۉQ]sﹹ-_VaDm:vHvJ%KʀxyӕمM BW 8u>q$̠2 vvt )Wf]]=e :!lDBN1jBqia߹a`ĉvwDDz85&IENDB`qutim-0.2.0/style/emoticons/sad.png0000644000175000017500000000240311236355476020744 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH_he?}p;6cYcu1IRA]xD؅E( !"B6 2x==bSs<<*s-N[p钀Nu@ P |JRD=QbIZ5ҍ q:H$֫ۻd6HPŪDYH#ฏ@oS.}PTn?z4w2r&QY%Q,kl5RP+ݟ$|l4ݟ,@*0 );0Kԩ/z7-뎃H㺽;2$IFMY"qBFw'$qv PhgMdO b@\>= $GJy2-B}sS[9U j} gϏb4g_ňGrK;p颮`#!VVHAkLN͡Z @+(6@]k@:5݈QĔQ)ҽ$4ֺt j=>%D+ذzup;2E[@eߞ 4}{2hU(>I%`L`.\<]hkI4O8 a89dj9S]c8 |}̏甮gV-"O5 OGxA!&,o2#E'8B g(}RnMƺyi9vr<h') -$(1$6'4Ds`Q;995GP;lVM\YT' YPD@Q  P[DmRV:p«DU —csst T%7mCOxZ]YoD'NB"6D ܵ'1T~Pg~/ckMxi>cSGeMkKY K1?#,{?{jDrA!yӥ""6U锆m}>Uq 02>6c8xrt1. [f[[Mْ]eДbF$b*[sΝ[֛WkZe%YyJCIENDB`qutim-0.2.0/style/emoticons/beer.png0000644000175000017500000000254611236355476021122 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[lUƿ3gfvfЛЂFBI$JƒJbx!5Wp+|c& i`-EmK23s>.-;FD?K^lv3IZIl`љT; .]P^UU ㆪj۶aiA'ӭuo)4ppm^odE@TՅ"4j@}6lYsWsYRT A  "ACY q]>J~jw(),NW?U㩯ܻ9 9Ƙ 0+[ WChA4ȱ"N@o9)pPiY,@`T|e `V 6wAN!䰂xܥ4!mmmrE "Dw42#lZ`/8#BcYvn/}(H3!IOapf8,!Ip:p!xZEW?qa] Da C(jFqe=S\92<رc k:Cz6=+0d 3Lo2ŴPxx-<xI&F4(EM[KQJ 32mۇ)BkͭqKyfaaeybYWA T:_M/KO}oc馭ORJjFW_cBע}^1 ʚ5,,_Lqq1Jضt롁X PWWGooZVt*]ZPÄJK6l8,0cb` nZv# }t]jWܽ0@0g -p( ߞLNHl+o*0gYY\?"Sm̛ `L'F9<&c=h7fs,^r&qJBx*r-7d(+LCr-oR`gʫ߈ߟDŽ=Nqpd_%Al6b{j@}:o^anYˌ 'I$Ƹի {h;ԩ!_((T>*,jp<c<+SdbcO _z0ߎ3H2kjjd~YY@U(ϒң2] $R yqFyrAgZ;eȋIENDB`qutim-0.2.0/style/emoticons/sick.png0000644000175000017500000000243511236355476021133 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHMlVe~-X[)F LNCp$3vBR]2nAݘ D76 03Hy D뼖l}?e~Wu q ⽌#$Xh,Pט=u[IV-ژ}R,CgF߀^IX)ǚgxYLdR3*^fA frn*"=9Ë7u2)NlnɳEPsXE^C"]lL>Ө^Fnoഎ`@!J>]J%wފ|ܮ@ձuG="!H Ӆ#TQ-d;Z*g9.A 8C I#b@BoS^x<e2/M11($Wap?<eӁpP l Q8&7.r묲\l<ȶC> pqFg3z#-ۿ׷Fw;Zzevs,,c*og'C>_wݳ?͞es@6/k^3Ezsuپ%7^=m =p h5յ7>wv`ѕnU^,cҕ$ MmzjDJ^1jBX`-~ H.]ԱZy덄>}IENDB`qutim-0.2.0/style/emoticons/handshake.png0000644000175000017500000000255611236355476022134 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATH[lTU9s9A ؊(x DTcoHb'D$Mb"v xCri3眽|N! >}+kk.{D׈ tЎ""UCC_?K겙ƖFZn4iU$?V2Upp{+by_<`G^K&enD% e& amhb ^#O r/3.#`f@S8ɀSKyzjH^_#W#kҫYz_Ei`jr d&$$V=Ҭ.׈sSdR1G "I\Ԁɰnoֽ7M' d.n'6:JLFt"t'bCڜVƩڵ)!ޓGIJ}wuj0xtL!69S`Q*Eu64-]J@$s6EZ2wt-NJ&nE*u5A᱇-Z@ɈC V=;ƪISߌRIUΧAtdȦm+v^)o8#[ (;uzeY)^xf}dژ{:<ђ_AvcQ?YZ>H ]]wK yWżyܚidg$l<R8k<+j9r( \k @{:89#/mކb/IENDB`qutim-0.2.0/style/emoticons/devil.png0000644000175000017500000000266111236355476021306 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<CIDATHOl\Wsߛ73؉'"I9IL /K,`]`Q`""۠*)!;j'ϼyfޟ{X.vT,8ҕ޽ݣ9GUEU%sk"1Q|5DU@""?W]c^>Z; c}ڟ\fK4Ώ ,onvT (Wc'OK ÇAh,޺rrxk}}4=Nш܊GFF=wX1`=C!X0rBqv>x=*&?wk$^q:1Q<4=M$(:P|dqIK Ǥr1+WX^Z k/'|Z#4f2Br 3PB%(HZ'ci8"Nl':h.P*2xrؼ#ff 1?}kjuhQv9%VW~{cH TF٣}vcZWV߄$A]^5KK lUj1:9YpyvF\& hp0lB . 4 N!I MJ`j&"J@(.ⷰ8A"lKaxc5UejQEN8/C>1| ct ^Mj\ǃYUul ygmmQ -lBns*頝~cQɩo7u+[7K޹ n6܂>?@ :O6K^o"w닋Fzm#jk_[ҿn? G|x9@&8lInqaeӼݤܬdfU߷kss={):Ck]&kcOf~n.ke;/^VDC 8  ]q?7oT3_ȹ/.-}~jcOVO ;2CC:]s'^_Yis2<4oD6N= "rxK+.D\Q dWd377<Ɵqjt؉I88g{l>+x.dXN!#rmիWO<]?~xǜlIENDB`qutim-0.2.0/style/cl/0000755000175000017500000000000011273100754016052 5ustar euroelessareuroelessarqutim-0.2.0/style/cl/default.ListQutim0000755000175000017500000000475511236355476021405 0ustar euroelessareuroelessar Account Font Tahoma,11 Normal Border Width 1 Border Color 220,220,220 Text Color 12,47,89 Background Type 1 Gradients Color 1 248,249,249 Stop 1 0 Color 2 247,247,247 Stop 2 0.089 Color 3 250,249,249 Stop 3 0.457 Color 4 241,241,241 Stop 4 0.557 Color 5 237,237,237 Stop 5 1 Group Font Tahoma,11 Normal Border Width 1 Border Color 220,220,220 Text Color 12,47,89 Background Type 1 Gradients Color 1 246,247,249 Stop 1 0 Color 2 250,255,255 Stop 2 0.5 Color 3 242,245,255 Stop 3 1 Contact Font Tahoma,11 Background 255,0,0,191 Normal Text Color 0,0,0 Down Background Type 1 Gradients Color 1 208,225,241 Stop 1 0 Color 2 205,226,255 Stop 2 0.5 Color 3 214,228,241 Stop 3 1 Border Width 1 Border Color 169,183,247 Status Font Tahoma,10 Status Text Color 60,80,80 qutim-0.2.0/CMakeLists.txt0000644000175000017500000003264411264363464017076 0ustar euroelessareuroelessarCMAKE_MINIMUM_REQUIRED (VERSION 2.6 FATAL_ERROR) IF (COMMAND cmake_policy) cmake_policy (SET CMP0003 NEW) ENDIF (COMMAND cmake_policy) PROJECT (qutim) SET(QT_MIN_VERSION "4.4.0") ADD_DEFINITIONS ( -DBUILD_QUTIM ) if( UNIX ) if( BSD ) SET( CMAKE_THREAD_LIBS -pthread ) SET( CMAKE_USE_PTHREADS ON ) SET( CMAKE_EXE_LINKER_FLAGS -pthread ) endif( BSD ) endif( UNIX ) if(NOT REVISION ) find_path(REVISION_ENTRY "entries" "${CMAKE_CURRENT_SOURCE_DIR}/.svn") if( REVISION_ENTRY ) file(STRINGS "${REVISION_ENTRY}/entries" QUTIM_SVN_INFO LIMIT_COUNT 4) list(GET QUTIM_SVN_INFO 3 QUTIM_SVN_REVISION) else( REVISION_ENTRY ) find_path(REVISION_FILE ".revision" "${CMAKE_CURRENT_SOURCE_DIR}") if( REVISION_FILE ) file(STRINGS "${REVISION_FILE}/.revision" QUTIM_SVN_INFO LIMIT_COUNT 2) list(GET QUTIM_SVN_INFO 0 QUTIM_SVN_REVISION) else( REVISION_FILE ) set( QUTIM_SVN_REVISION 0 ) endif( REVISION_FILE ) endif( REVISION_ENTRY ) else(NOT REVISION ) set( QUTIM_SVN_REVISION ${REVISION} ) endif(NOT REVISION ) message( "Current revision: ${QUTIM_SVN_REVISION}" ) ADD_DEFINITIONS( -DQUTIM_SVN_REVISION=${QUTIM_SVN_REVISION} ) SET (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") SET (CMAKE_BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/lib") SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) LIST (APPEND CMAKE_MODULE_PATH "cmake") LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") SET (QT_USE_QTNETWORK true) SET (QT_USE_QTXML true) IF(NOT NO_CHAT) SET (QT_USE_QTWEBKIT true) SET (QT_USE_QTUITOOLS true) ENDIF(NOT NO_CHAT) SET (QUTIM_LIBS "") IF( Phonon ) SET (PHONON_REQUIRED) include( FindPhonon ) IF(PHONON_FOUND) ADD_DEFINITIONS ( -DHAVE_PHONON ) LIST(APPEND QUTIM_LIBS ${PHONON_LIBS}) ENDIF(PHONON_FOUND) ENDIF( Phonon ) SET (QUTIM_PLUGINS_DEST "lib/qutim/") FIND_PACKAGE (Qt4 REQUIRED) INCLUDE (UseQt4) INCLUDE (MacroEnsureVersion) INCLUDE_DIRECTORIES (${QT_QTGUI_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTXML_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} . src src/3rdparty/qtsolutions src/plugins src/idle include ) macro_ensure_version( "4.5.0" ${QTVERSION} Qt4_HAS_4_5 ) IF (UNIX) include( FindPkgConfig ) pkg_check_modules (XSS xscrnsaver) IF( XSS_FOUND ) ADD_DEFINITIONS( -DHAVE_XSS ) FIND_LIBRARY( XSS_LIB NAMES Xss PATHS ${XSS_LIBDIR} ) LIST( APPEND QUTIM_LIBS ${XSS_LIB} ) INCLUDE_DIRECTORIES( ${XSS_INCLUDEDIR} ) ELSE( XSS_FOUND ) message(STATUS "Warning: libxss not found, idle detection won't be accurate") ENDIF( XSS_FOUND ) ENDIF (UNIX) SET (HEADERS include/qutim/plugininterface.h include/qutim/protocolinterface.h solutions/qtcustomwidget.h solutions/qtcustomwidget_p.h src/3rdparty/qtsolutions/qtlocalpeer.h src/3rdparty/qtwin/qtwin.h src/aboutinfo.h src/abstractcontextlayer.h src/abstractlayer.h src/accountmanagement.h src/addaccountwizard.h src/console.h src/globalsettings/abstractglobalsettings.h src/globalsettings/globalproxysettings.h src/guisettingswindow.h src/iconmanager.h src/idle/idle.h src/logindialog.h src/mainsettings.h src/pluginsettings.h src/pluginsystem.h src/profilelogindialog.h src/qutim.h src/qutimsettings.h src/systeminfo.h ) if( Qt4_HAS_4_5 ) LIST( APPEND HEADERS src/proxyfactory.h ) endif( Qt4_HAS_4_5 ) SET (SOURCES main.cpp solutions/qtcustomwidget.cpp src/3rdparty/qtsolutions/qtlocalpeer.cpp src/3rdparty/qtwin/qtwin.cpp src/aboutinfo.cpp src/abstractcontextlayer.cpp src/abstractlayer.cpp src/accountmanagement.cpp src/addaccountwizard.cpp src/console.cpp src/globalsettings/abstractglobalsettings.cpp src/globalsettings/globalproxysettings.cpp src/guisettingswindow.cpp src/iconmanager.cpp src/idle/idle.cpp src/idle/idle_mac.cpp src/idle/idle_win.cpp src/idle/idle_x11.cpp src/logindialog.cpp src/mainsettings.cpp src/pluginsettings.cpp src/pluginsystem.cpp src/profilelogindialog.cpp src/proxyfactory.cpp src/qutim.cpp src/qutimsettings.cpp src/systeminfo.cpp ) SET (RESOURCES qutim.qrc ) SET (FORMS src/aboutinfo.ui src/accountmanagement.ui src/console.ui src/globalsettings/globalproxysettings.ui src/guisettingswindow.ui src/logindialog.ui src/mainsettings.ui src/pluginsettings.ui src/profilelogindialog.ui src/qutim.ui src/qutimsettings.ui ) IF(NOT NO_ANTISPAM) LIST (APPEND HEADERS src/corelayers/antispam/abstractantispamlayer.h src/corelayers/antispam/antispamlayersettings.h ) LIST (APPEND SOURCES src/corelayers/antispam/abstractantispamlayer.cpp src/corelayers/antispam/antispamlayersettings.cpp ) LIST (APPEND FORMS src/corelayers/antispam/antispamlayersettings.ui ) ELSE(NOT NO_ANTISPAM) ADD_DEFINITIONS( -DNO_CORE_ANTISPAM ) ENDIF(NOT NO_ANTISPAM) IF(NOT NO_CHAT) LIST (APPEND HEADERS src/corelayers/chat/chatemoticonmenu.h src/corelayers/chat/chatforms/chatwindow.h src/corelayers/chat/chatforms/conferencewindow.h src/corelayers/chat/chatlayerclass.h src/corelayers/chat/chatwindowstyle.h src/corelayers/chat/chatwindowstyleoutput.h src/corelayers/chat/confcontactlist.h src/corelayers/chat/conferenceitem.h src/corelayers/chat/conferenceitemmodel.h src/corelayers/chat/conferencetabcompletion.h src/corelayers/chat/generalwindow.h src/corelayers/chat/logscity.h src/corelayers/chat/movielabel.h src/corelayers/chat/separatechats.h src/corelayers/chat/settings/chatlayersettings.h src/corelayers/chat/tabbedchats.h src/corelayers/chat/tempglobalinstance.h ) LIST (APPEND SOURCES src/corelayers/chat/chatemoticonmenu.cpp src/corelayers/chat/chatforms/chatwindow.cpp src/corelayers/chat/chatforms/conferencewindow.cpp src/corelayers/chat/chatlayerclass.cpp src/corelayers/chat/chatwindowstyle.cpp src/corelayers/chat/chatwindowstyleoutput.cpp src/corelayers/chat/confcontactlist.cpp src/corelayers/chat/conferenceitem.cpp src/corelayers/chat/conferenceitemmodel.cpp src/corelayers/chat/conferencetabcompletion.cpp src/corelayers/chat/generalwindow.cpp src/corelayers/chat/logscity.cpp src/corelayers/chat/movielabel.cpp src/corelayers/chat/separatechats.cpp src/corelayers/chat/settings/chatlayersettings.cpp src/corelayers/chat/tabbedchats.cpp src/corelayers/chat/tempglobalinstance.cpp ) LIST (APPEND FORMS src/corelayers/chat/chatforms/chatform.ui src/corelayers/chat/chatforms/conferenceform.ui src/corelayers/chat/settings/chatlayersettings.ui ) ELSE(NOT NO_CHAT) ADD_DEFINITIONS( -DNO_CORE_CHAT ) ENDIF(NOT NO_CHAT) IF(NOT NO_CONTACTLIST) LIST (APPEND HEADERS src/corelayers/contactlist/contactlistitemdelegate.h src/corelayers/contactlist/contactlistproxymodel.h src/corelayers/contactlist/contactlistsettings.h src/corelayers/contactlist/defaultcontactlist.h src/corelayers/contactlist/proxymodelitem.h src/corelayers/contactlist/treecontactlistmodel.h src/corelayers/contactlist/treeitem.h ) LIST (APPEND SOURCES src/corelayers/contactlist/contactlistitemdelegate.cpp src/corelayers/contactlist/contactlistproxymodel.cpp src/corelayers/contactlist/contactlistsettings.cpp src/corelayers/contactlist/defaultcontactlist.cpp src/corelayers/contactlist/proxymodelitem.cpp src/corelayers/contactlist/treecontactlistmodel.cpp src/corelayers/contactlist/treeitem.cpp ) LIST (APPEND FORMS src/corelayers/contactlist/contactlistsettings.ui src/corelayers/contactlist/defaultcontactlist.ui ) ELSE(NOT NO_CONTACTLIST) IF(NOT NO_CHAT) LIST (APPEND HEADERS src/corelayers/contactlist/contactlistitemdelegate.h) LIST (APPEND SOURCES src/corelayers/contactlist/contactlistitemdelegate.cpp) ENDIF(NOT NO_CHAT) ADD_DEFINITIONS( -DNO_CORE_CONTACTLIST ) ENDIF(NOT NO_CONTACTLIST) IF(NOT NO_EMOTICONS) LIST (APPEND HEADERS src/corelayers/emoticons/abstractemoticonslayer.h ) LIST (APPEND SOURCES src/corelayers/emoticons/abstractemoticonslayer.cpp ) ELSE(NOT NO_EMOTICONS) ADD_DEFINITIONS( -DNO_CORE_EMOTICONS ) ENDIF(NOT NO_EMOTICONS) IF(NOT NO_HISTORY) LIST (APPEND HEADERS src/corelayers/history/historysettings.h src/corelayers/history/historywindow.h src/corelayers/history/jsonengine.h src/corelayers/history/k8json.h ) LIST (APPEND SOURCES src/corelayers/history/historysettings.cpp src/corelayers/history/historywindow.cpp src/corelayers/history/jsonengine.cpp src/corelayers/history/k8json.cpp ) LIST (APPEND FORMS src/corelayers/history/historysettings.ui src/corelayers/history/historywindow.ui ) ELSE(NOT NO_HISTORY) ADD_DEFINITIONS( -DNO_CORE_HISTORY ) ENDIF(NOT NO_HISTORY) IF(NOT NO_NOTIFICATION) LIST (APPEND HEADERS src/corelayers/notification/defaultnotificationlayer.h src/corelayers/notification/notificationslayersettings.h src/corelayers/notification/popuptextbrowser.h src/corelayers/notification/popupwindow.h src/corelayers/notification/soundlayersettings.h ) LIST (APPEND SOURCES src/corelayers/notification/defaultnotificationlayer.cpp src/corelayers/notification/notificationslayersettings.cpp src/corelayers/notification/popuptextbrowser.cpp src/corelayers/notification/popupwindow.cpp src/corelayers/notification/soundlayersettings.cpp ) LIST (APPEND FORMS src/corelayers/notification/notificationslayersettings.ui src/corelayers/notification/popupwindow.ui src/corelayers/notification/soundlayersettings.ui ) ELSE(NOT NO_NOTIFICATION) ADD_DEFINITIONS( -DNO_CORE_NOTIFICATION ) ENDIF(NOT NO_NOTIFICATION) IF(NOT NO_SETTINGS) LIST (APPEND HEADERS src/corelayers/settings/qsettingslayer.h ) LIST (APPEND SOURCES src/corelayers/settings/qsettingslayer.cpp ) ELSE(NOT NO_SETTINGS) ADD_DEFINITIONS( -DNO_CORE_SETTINGS ) ENDIF(NOT NO_SETTINGS) IF(NOT NO_SOUNDENGINE) LIST (APPEND HEADERS src/corelayers/soundengine/defaultsoundenginelayer.h src/corelayers/soundengine/soundenginesettings.h ) LIST (APPEND SOURCES src/corelayers/soundengine/defaultsoundenginelayer.cpp src/corelayers/soundengine/soundenginesettings.cpp ) LIST (APPEND FORMS src/corelayers/soundengine/soundenginesettings.ui ) ELSE(NOT NO_SOUNDENGINE) ADD_DEFINITIONS( -DNO_CORE_SOUNDENGINE ) ENDIF(NOT NO_SOUNDENGINE) IF(NOT NO_SPELLER) LIST (APPEND HEADERS src/corelayers/speller/spellerhighlighter.h src/corelayers/speller/spellerlayerclass.h ) LIST (APPEND SOURCES src/corelayers/speller/spellerhighlighter.cpp src/corelayers/speller/spellerlayerclass.cpp ) ELSE(NOT NO_SPELLER) ADD_DEFINITIONS( -DNO_CORE_SPELLER ) ENDIF(NOT NO_SPELLER) IF(NOT NO_STATUS) LIST (APPEND HEADERS src/corelayers/status/defaultstatuslayer.h src/corelayers/status/statusdialog.h src/corelayers/status/statuspresetcaption.h ) LIST (APPEND SOURCES src/corelayers/status/defaultstatuslayer.cpp src/corelayers/status/statusdialog.cpp src/corelayers/status/statuspresetcaption.cpp ) LIST (APPEND FORMS src/corelayers/status/statusdialogvisual.ui src/corelayers/status/statuspresetcaption.ui ) ELSE(NOT NO_STATUS) ADD_DEFINITIONS( -DNO_CORE_STATUS ) ENDIF(NOT NO_STATUS) IF(NOT NO_TRAY) LIST (APPEND HEADERS src/corelayers/tray/defaulttraylayer.h src/corelayers/tray/exsystrayicon.h ) LIST (APPEND SOURCES src/corelayers/tray/defaulttraylayer.cpp src/corelayers/tray/exsystrayicon.cpp ) ELSE(NOT NO_TRAY) ADD_DEFINITIONS( -DNO_CORE_TRAY ) ENDIF(NOT NO_TRAY) IF (WIN32) # LIST (APPEND SOURCES # src/ex/exsystrayicon.cpp # src/idle/idle_win.cpp # ) # LIST (APPEND HEADERS # src/ex/exsystrayicon.h # ) if (MINGW) exec_program(windres ARGS "-i qutim.rc -o qutim_res.o --include-dir=${CMAKE_CURRENT_SOURCE_DIR}") LIST (APPEND SOURCES qutim_res.o) else(MINGW) LIST (APPEND SOURCES qutim.rc) endif(MINGW) ENDIF (WIN32) #IF (APPLE) # LIST (APPEND SOURCES # src/ex/exsystrayicon.cpp # src/idle/idle_mac.cpp # ) # LIST (APPEND HEADERS # src/ex/exsystrayicon.h # ) # SET (MACOSX_BUNDLE_ICON_FILE icons/qutim.icns) # #ELSEIF (UNIX) # LIST (APPEND SOURCES # src/idle/idle_x11.cpp # ) #ENDIF () set( QUTIM_DO_NOT_FIND "true" ) include( FindQutIM ) QT4_WRAP_CPP (MOC_SRCS ${HEADERS}) QT4_WRAP_UI (UIS_H ${FORMS}) QT4_ADD_RESOURCES (RCC ${RESOURCES}) if( APPLE ) SET (MACOSX_BUNDLE_ICON_FILE icons/qutim.icns) ADD_EXECUTABLE (qutim MACOSX_BUNDLE ${SOURCES} ${MOC_SRCS} ${UIS_H} ${RCC}) else( APPLE ) ADD_EXECUTABLE (qutim WIN32 ${SOURCES} ${MOC_SRCS} ${UIS_H} ${RCC}) endif( APPLE ) TARGET_LINK_LIBRARIES (qutim ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${QUTIM_LIBS} ) SET (module_install_dir "${CMAKE_ROOT}/Modules") SET (CMAKE_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindQutIM.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/qutimuic.cmake" ) SET (DEV_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/qutim/iconmanagerinterface.h" "${CMAKE_CURRENT_SOURCE_DIR}/include/qutim/layerinterface.h" "${CMAKE_CURRENT_SOURCE_DIR}/include/qutim/layerscity.h" "${CMAKE_CURRENT_SOURCE_DIR}/include/qutim/plugininterface.h" "${CMAKE_CURRENT_SOURCE_DIR}/include/qutim/protocolinterface.h" "${CMAKE_CURRENT_SOURCE_DIR}/include/qutim/settings.h" ) CONFIGURE_FILE( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") INSTALL (FILES ${CMAKE_MODULES} DESTINATION ${module_install_dir}) INSTALL (FILES ${DEV_HEADERS} DESTINATION "include/qutim") INSTALL (TARGETS qutim DESTINATION "bin") INSTALL (FILES "${CMAKE_CURRENT_SOURCE_DIR}/share/qutim.desktop" DESTINATION "share/applications") INSTALL (FILES "${CMAKE_CURRENT_SOURCE_DIR}/icons/qutim_64.png" DESTINATION "share/icons/hicolor/64x64/apps" RENAME "qutim.png") INSTALL (FILES "${CMAKE_CURRENT_SOURCE_DIR}/icons/qutim.xpm" DESTINATION "share/pixmaps") qutim-0.2.0/languages/0000755000175000017500000000000011273101321016251 5ustar euroelessareuroelessarqutim-0.2.0/languages/CC-BY-SA0000644000175000017500000004620611235565766017333 0ustar euroelessareuroelessarTHE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. 3. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. 4. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. 5. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. 6. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. 7. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. 8. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. 9. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. 10. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. 11. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, 4. to Distribute and Publicly Perform Adaptations. 5. For the avoidance of doubt: 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. 2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. 3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. 4. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. qutim-0.2.0/languages/COPYING0000644000175000017500000000046311235565766017340 0ustar euroelessareuroelessarCopyright (c) 2009 by qutim.org translators (see file AUTHORS) All translations are licensed under CC-BY-SA 3.0 license. Full text of CC-BY-SA 3.0 license is included in the archive, you can find it in the ./CC-BY-SA file. Copyright holders: MrFree Nightwolf_Ng kiroff Marvin42 Lms qutim-0.2.0/languages/uk_UA/0000755000175000017500000000000011273101310017253 5ustar euroelessareuroelessarqutim-0.2.0/languages/uk_UA/sources/0000755000175000017500000000000011273101310020736 5ustar euroelessareuroelessarqutim-0.2.0/languages/uk_UA/sources/jabber.ts0000755000175000017500000041564211243502505022562 0ustar euroelessareuroelessar AcceptAuthDialog Form Форма Authorize Авторизувати Deny Заборонити Ignore Ігнорувати AddContact Add User Додати користувача Jabber ID: Jabber ID: User information Інформація користувача Name: Ім'я: <no group> <немає групи> Send authorization request Надіслати запит авторизації Group: Група: Add Додати Cancel Скасувати Contacts Form Форма Show contact status text in contact list Показувати стан контакту в списку контактів Show mood icon in contact list Показувати іконки станів у списку контактів Show main activity icon in contact list Показувати основні іконки активності Show extended activity icon in contact list Показувати розширені іконки активності Show tune icon in contact list Показувати іконку налаштувань в списку контактів Show not authorized icon Показувати іконку авторизації Show QIP xStatus in contact list Показувати стутус в списку контактів Show main resource in notifications Показувати основний ресурс в сповіщеннях Dialog Dialog Діалог Ok Гаразд Cancel Скасувати JabberSettings Form Форма Default resource: Ресурс за замовчуванням: Reconnect after disconnect Перепід'єднуватися після роз'єднання Don't send request for avatars Не надсилати запит на аватари Listen port for filetransfer: Прослуховувати порт на передачу файлів: Priority depends on status Пріоритет залежить від статусу Online В мережі Free for chat Готовий для розмови Away Відійшов NA Недоступний DND Не турбувати JoinChat Join groupchat Приєднатися до мультичату Bookmarks Закладки Settings Налаштування Name Ім'я Conference Конференція Nick Нік Password Пароль Auto join Автовхід Save Зберегти Search Пошук Join Ввійти Close Закрити History Історія Request last Запит останніх messages повідомлень Request messages since the datetime Запит повідомлень за час H:mm:ss Г:хх:сс Request messages since Запит повідомлень з LoginForm Registration Реэстрація You must enter a valid jid Потрібно ввести коректний jid You must enter a password Потрібно ввести пароль <font color='green'>%1</font> <font color='green'>%1</font> <font color='red'>%1</font> <font color='red'>%1</font> LoginFormClass LoginForm Вікно входу JID: JID: Password: Пароль: Register this account Зареєструвати це обліковий запис Personal Form Форма General Основні E-mail E-mail Phone Телефон Home Домашній Work Робочий QObject Open File Відкрити файл All files (*) Всі файли (*) <font color='#808080'>%1</font> <font color='#808080'>%1</font> %1 %1 Join groupchat on Ввійти до мультичату <font size='2'><b>Status text:</b> %1</font> <font size='2'><b>Текст стану:</b> %1</font> <font size='2'><b>Possible client:</b> %1</font> <font size='2'><b>Можливий клієнт:</b> %1</font> <font size='2'><b>User went offline at:</b> <i>%1</i></font> <font size='2'><b>Користувач поза мережею з:</b> <i>%1</i></font> <font size='2'><b>User went offline at:</b> <i>%1</i> (with message: <i>%2</i>)</font> <font size='2'><b>Користувач поза мережею з:</b> <i>%1</i> (з повідомленням: <i>%2</i>)</font> <font size='2'><b>Authorization:</b> <i>None</i></font> <font size='2'><b>Авторизація:</b> <i>Немає</i></font> <font size='2'><b>Authorization:</b> <i>To</i></font> <font size='2'><b>Авторизація:</b> <i>до</i></font> <font size='2'><b>Authorization:</b> <i>From</i></font> <font size='2'><b>Авторизація:</b> <i>з</i></font> <font size='2'><i>%1</i></font> <font size='2'><i>%1</i></font> <font size='2'><i>%1:</i> %2</font> <font size='2'><i>%1:</i> %2</font> <font size='2'><i>Listening:</i> %1</font> <font size='2'><i>Прослуховує:</i> %1</font> Afraid Боюсь Amazed Здивування Amorous Флірт Angry Злюсь Annoyed Роздратований Anxious Заклопотаний Aroused Ashamed Засоромлений Bored Нудьгуючий Brave Хоробрий Calm Спокійний Cautious Обережний Cold Прохолодно Confident Впевнений Confused Збентежений Contemplative Задумливий Contented Задоволений Cranky Примхливий Crazy Божеволію трішки Creative Творчість Curious Допитливий Dejected Пригнічений Depressed Депресія Disappointed Розчарований Disgusted Відраза Dismayed Стривожений Distracted Спантеличений Embarrassed Зніяковілий Envious Заздрісний Excited Схвильований Flirtatious Кокетливий Frustrated У відчаї Grateful Вдячний Grieving Траур Grumpy Сердитий Guilty Вина Happy Щасливий Hopeful Успіх Hot Гаряче Humbled Принижений Humiliated Принижений Hungry Хочу хавати Hurt Біль Impressed Вражений In awe Благоговіння In love Закоханий Indignant Обурений Interested Цікавість Intoxicated Отруєний Invincible Непереможний Jealous Ревнивий Lonely Самотній Lost Втрачений Lucky Успішний Mean Moody Nervous Neutral Offended Outraged Playful Proud Relaxed Relieved Remorseful Restless Sad Сум Sarcastic Сарказм Satisfied Serious Shocked Shy Sick Sleepy Spontaneous Stressed Strong Surprised Thankful Вдячність Thirsty Tired Втома Undefined Weak Worried Unknown Doing chores buying groceries cleaning прибирання cooking doing maintenance doing the dishes doing the laundry gardening running an errand walking the dog Drinking having a beer having coffee having tea Eating Трапеза having a snack having breakfast having dinner having lunch обідає Exercising Вправи cycling dancing hiking jogging playing sports running skiing swimming плавання working out Grooming at the spa brushing teeth getting a haircut shaving taking a bath taking a shower Having appointment Inactive day off hanging out hiding on vacation praying scheduled holiday sleeping thinking Relaxing fishing gaming going out partying reading rehearsing shopping smoking socializing sunbathing watching TV watching a movie Talking Розмовляє in real life on the phone on video phone Traveling Подорож commuting driving in a car в авто on a bus в автобусі on a plane в літаку on a train в поїзді on a trip подорожує walking на прогулянці Working Робота coding програмує in a meeting на зустрічі studying навчається writing пише %1 seconds %1 секунд %1 second %1 секунда %1 minutes %1 хвилин 1 minute 1 хвилина %1 hours %1 годин 1 hour 1 година %1 days %1 днів 1 day 1 день %1 years %1 років 1 year 1 рік Mood Настрій Activity Активність Tune Налаштування RoomConfig Form Форма Apply Застосувати Ok Гаразд Cancel Скасувати RoomParticipant Form Форма Owners Власники JID JID Administrators Адміністратори Members Учасники Banned Забанені Reason Групи Apply Застосувати Ok Гаразд Cancel Скасувати Search Form Форма Server: Сервер: Fetch Завантажити Type server and fetch search fields. Введіть назву сервера і завантажте поля пошуку. Clear Очистити Search Пошук Close Закрити SearchConference Search conference Пошук конференції SearchService Search service Пошуковий сервіс SearchTransport Search transport Пошуковий транспорт ServiceBrowser jServiceBrowser Браузер сервісів jabber Server: Сервер: Close Закрити Name Ім'я JID JID Join conference Приєднатися до конференції Register Зареєструватися Search Пошук Execute command Виконати команду Show VCard Показати візитну картку Add to roster Додати до ростера Add to proxy list Додати до списку проксі VCardAvatar <img src='%1' width='%2' height='%3'/> <img src='%1' width='%2' height='%3'/> VCardBirthday Birthday: День народження: %1&nbsp;(<font color='#808080'>wrong date format</font>) %1&nbsp;(<font color='#808080'>невірний формат дати</font>) VCardRecord Site: Сайт: Company: Компанія: Department: Відділ: Title: Заголовок: Role: Посада: Country: Країна: Region: Район: City: Місто: Post code: Поштовий індекс: Street: Вулиця: PO Box: Абонентська скринька: XmlConsole <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Form Форма Clear Очистити XML Input... Ввід XML... Close Закрити XmlPrompt XML Input Ввід XML &Send &Надіслати &Close &Закрити activityDialogClass Choose your activity Виберіть стан Choose Вибрати Cancel Скасувати customStatusDialogClass Choose Вибрати Cancel Скасувати Choose your mood Виберіть настрій jAccount Conferences Конференції Join groupchat Ввійти до мультичату Additional Додатково Open XML console Відкрити консоль XML Add new contact Додати контакт Find users Знайти користувачів Service browser Огляд служб Privacy status Особистий стан Set mood Встановити настрій Set activity Встановити активність Online В мережі Offline Поза мережею Free for chat Готовий для розмови Away Відійшов NA Недоступний DND Не турбувати You must use a valid jid. Please, recreate your jabber account. Потрібно використовувати вірний jid. Повторно створыть обліковий запис jabber. You must enter a password in settings. Потрыбно ввести пароль в налаштуваннях. Services Служби Add new contact on Додати новий контакт в Invisible for all Невидимий для всіх Visible for all Видимий для всіх Visible only for visible list Видимий тільки для списку зрячих Invisible only for invisible list Невидимий тільки для списку незрячих View/change personal vCard Показати/змінити особисту візитну картку jAccountSettings Editing %1 Редагування %1 Warning Увага You must enter a password Потрібно ввести пароль jAccountSettingsClass jAccountSettings Налаштування облікового запису OK Гаразд Apply Застосувати Cancel Скасувати Account Обліковий запис JID: JID: Password: Пароль: Resource: Ресурс: Priority: Пріоритет: Set priority depending of the status Встановити залежність пріоритету від статусу Autoconnect at start З'єднуватись при запуску Use this option for servers doesn't support bookmark Використовувати цю опцію для серверів, які не підтримують закладки. Local bookmark storage Локальне сховище закладок Connection З'єднання Encrypt connection: Криптоване з'єднання: Never Ніколи When available Коли доступно Always Завжди Compress traffic (if possible) Стискати трафік (якщо можливо) Host: Хост: Port: Порт: Manually set server host and port Самостійно встановити хост і порт Proxy Проксі Proxy type: Тип проксі: None Немає HTTP HTTP SOCKS 5 SOCKS 5 Default За замовчуванням Authentication Автентифікація User name: Ім'я користувача: Keep previous session status Зберігати стан із попередньої сесії jAddContact <no group> <немає групи> Services Служби jAdhoc Finish Кінець Cancel Скасувати Previous Попереднє Next Наступне Complete Готово Ok Гаразд jConference Kick Викинути Ban Забанити Visitor ГІсть Participant Учасник Moderator Модератор Invite to groupchat Запросити до мультичату User %1 invite you to conference %2 with reason "%3" Accept invitation? Користувач %1 запрошує Вас до конференції %2 з причиною "%3" Прийняти запрошення? %1 has set the subject to: %2 %1 встановив тему: %2 The subject is: %2 Тема: %2 Not authorized: Password required. Не авторизовано. Потрібен пароль. Forbidden: Access denied, user is banned. Заборонено: доступ не надається через бан користувача. Item not found: The room does not exist. Елемент не знайдено. Кімната не існує. Not allowed: Room creation is restricted. Не дозволено: Створення кімнати заборонено. Not acceptable: Room nicks are locked down. Недоступно: ніки кімнат заблоковано. Registration required: User is not on the member list. Потрібна реєстрація: Користувача немає у списку учасників. Conflict: Desired room nickname is in use or registered by another user. Конфлікт: Вибраний нік кімнати вже використовується і зареєстрований іншим користувачем. Service unavailable: Maximum number of users has been reached. Служба недоступна: Перевищено максимальну кількість користувачів. Unknown error: No description. Невідома помилка: Немає опису. Join groupchat on Ввійти до мультичату %1 is now known as %2 %1 тепер відомий як %2 You have been kicked from Вас викинули з with reason: з причиною: without reason без причини You have been kicked Вас викинули You have been banned from Вас забанили з You have been banned Вас забанили %1 has been kicked %1 було викинуто %1 has been banned %1 забанено %1 has left the room %1 покидає кімнату %3 has joined the room as %1 and %2 %3 ввійшов до кімнати як %1 і %2 %2 has joined the room as %1 %2 ввійшов до кімнати як %1 %2 has joined the room %2 ввійшов до кімнати %4 (%3) has joined the room as %1 and %2 %4 (%3) ввійшов до кімнати як %1 і %2 %3 (%2) has joined the room as %1 %3 (%2) ввійшов до кімнати як %1 %2 (%1) has joined the room %2 (%1) ввійшов до кімнати %3 now is %1 and %2 %3 тепер %1 і %2 %2 now is %1 %2 тепер %1 %4 (%3) now is %1 and %2 %4 (%3) тепер %1 і %2 %3 (%2) now is %1 %3 (%2) тепер %1 moderator модератор participant учасник visitor гість banned забанено member учасник owner власник administrator адіміністратор guest гість <font size='2'><b>Role:</b> %1</font> <font size='2'><b>Обов'язок:</b> %1</font> <font size='2'><b>JID:</b> %1</font> <font size='2'><b>JID:</b> %1</font> Kick message Видалити повідомлення Ban message Забанити повідомлення Rejoin to conference Повторно ввійти до конференції Save to bookmarks Зберегти до закладок Room configuration Налаштування кімнати Room participants Учасники кімнати Room configuration: %1 Налаштування кімнати: %1 Room participants: %1 Учасники кімнати: %1 <font size='2'><b>Affiliation:</b> %1</font> <font size='2'><b>Місце роботи:</b> %1</font> Copy JID to clipboard Копіювати JID до буферу обміну Add to contact list Додати до списку контактів jFileTransferRequest Save File Зберегти файл Form Форма From: Від: File name: Назва: File size: Розмір файлу: Accept Прийняти Decline Відхилити jFileTransferWidget File transfer: %1 Передача файлу: %1 Waiting... Очікування... Sending... Надсилання... Getting... Прийом... Done... Зроблено... Close Закрити Form Форма Filename: Назва файлу: Done: Готово: Speed: Швидкість: File size: Розмір файлу: Last time: Пройшло часу: Remained time: Залишилось часу: Status: Стан: Open Відкрити Cancel Скасувати jJoinChat new chat створити чат New conference Створити конференцію jLayer Jabber General Основні Jabber Contacts Контакти jProtocol en xml:lang uk A stream error occured. The stream has been closed. Помилка потоку. Потік було закрито. The incoming stream's version is not supported Версія вхідного потоку не підтримується The stream has been closed (by the server). Потік було закрито сервером. The HTTP/SOCKS5 proxy requires authentication. HTTP/SOCKS5 проксі-сервер потребує автентифікації. HTTP/SOCKS5 proxy authentication failed. Невдала втентифікація HTTP/SOCKS5 проксі-сервера. The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. HTTP/SOCKS5 проксі-сервер вимагає непідтримуваного механізму авторизації. An I/O error occured. Помилка ввоlу/виводу. An XML parse error occurred. Помилка XML парсування. The connection was refused by the server (on the socket level). З'єднання розірвано сервером (на сокетному рівні). Resolving the server's hostname failed. Out of memory. Uhoh. Ого! Не вистачає пам'яті. The auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. The server's certificate could not be verified or the TLS handshake did not complete successfully. The server didn't offer TLS while it was set to be required or TLS was not compiled in. Negotiating/initializing compression failed. Authentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. Невдала авторихація. Неправильне ім'я користувача чи пароль бо обліковий запис не існує. Використовуйте ClientBase::authError(), щоб знайти причину. The user (or higher-level protocol) requested a disconnect. Запит роз'єднання від користувача (чи протоколу вищого рівня). There is no active connection. Немає активного з'єднання. Unknown error. It is amazing that you see it... O_o Невідома помилка. Це дивовижно, що Ви це бачите...O_o Services Служби Authorization request Запит авторизації You were authorized Вас авторизували Contacts's authorization was removed Авторизацію контакту видалено Your authorization was removed Вашу авторизацію видалено Sender: %2 <%1> Відправник: %2 <%1> Senders: Відправники: %2 <%1> %2 <%1> Subject: %1 Тема: %1 URL: %1 URL: %1 Unreaded messages: %1 Непрочитаних повідомлень: %1 vCard is succesfully saved Візитку успшно збережено JID: %1<br/>Idle: %2 JID: %1<br/>The feature requested is not implemented by the recipient or server. JID: %1<br/>The requesting entity does not possess the required permissions to perform the action. JID: %1<br/>It is unknown StanzaError! Please notify developers.<br/>Error: %2 jPubsubInfo <h3>Mood info:</h3> <h3>Інформація про настрій:</h3> Name: %1 Назва: %1 Text: %1 Текст:%1 <h3>Activity info:</h3> <h3>Інформація про активність:</h3> General: %1 Основне: %1 Specific: %1 Інше: %1 <h3>Tune info:</h3> <h3>Інформація про налаштування:</h3> Artist: %1 Виконавець: %1 Title: %1 Назва: %1 Source: %1 Джерело: %1 Track: %1 Доріжка: %1 Uri: <a href="%1">link</a> URL: <a href="%1">лінк</a> Length: %1 Довжина: %1 Rating: %1 Рейтинг: %1 jPubsubInfoClass Pubsub info Close Закрити jRoster Add to contact list Додати до списку контактів Rename contact Перейменувати контакт Delete contact Видалити контакт Move to group Перемістити до групи Authorization Авторизація Send authorization to Надіслати авторизацію до Ask authorization from Запит на авторизацію від Remove authorization from Видалити авторизацію від Transports Транспорти Register Зареєструватися Unregister Log In Ввійти Log Out Вийти Services Служби Copy JID to clipboard Скопіювати JID контакту Send message to: Надіслати повідомлення до: Send file to: Надіслати файл до: Get idle from: Execute command: Виконати команду: Invite to conference: Запрошення на конференцію: Send file Надіслати файл Get idle Execute command Виконати команду PubSub info: Name: Ім'я: Remove transport and his contacts? Видалити транспорт і його контакти? Delete with contacts Видалити із контактами Delete without contacts Видалити залишивши контакти Cancel Скасувати Contact will be deleted. Are you sure? Контакт буде видалений. Ви впевнені, що хочете цього? Move %1 Перемістити %1 Group: Група: Authorize contact? Авторизувати контакт? Ask authorization from %1 Запит авторизації від %1 Reason: Причина: Remove authorization from %1 Видалити авторизацію від %1 Conferences Конференції Delete from visible list Видалити із списку зрячих Add to visible list Додати до списку зрячих Delete from invisible list Видалити із списку незрячих Add to invisible list Додати до списку незрячих Delete from ignore list Видалити із списку ігнорованих Add to ignore list Додати до списку ігнорованих jSearch Search Пошук Jabber ID Jabber ID JID JID Nickname Нік Error Помилка jServiceBrowser <br/><b>Identities:</b><br/> <br/><b>Тотожності:</b><br/> category: категорія: type: тип: <br/><b>Features:</b><br/> <br/><b>Функції:</b><br/> jServiceDiscovery The sender has sent XML that is malformed or that cannot be processed. Access cannot be granted because an existing resource or session exists with the same name or address. The feature requested is not implemented by the recipient or server and therefore cannot be processed. The requesting entity does not possess the required permissions to perform the action. The recipient or server can no longer be contacted at this address. The server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error. The addressed JID or item requested cannot be found. The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme. The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server. The recipient or server does not allow any entity to perform the action. The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials. The item requested has not changed since it was last requested. The requesting entity is not authorized to access the requested service because payment is required. The intended recipient is temporarily unavailable. The recipient or server is redirecting requests for this information to another entity, usually temporarily. The requesting entity is not authorized to access the requested service because registration is required. A remote server or service specified as part or all of the JID of the intended recipient does not exist. A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time. The server or recipient lacks the system resources necessary to service the request. The server or recipient does not currently provide the requested service. The requesting entity is not authorized to access the requested service because a subscription is required. The unknown error condition. Невідома помилка стану. The recipient or server understood the request but was not expecting it at this time. The stanza 'from' address specified by a connected client is not valid for the stream. jSlotSignal %1@%2 %1@%2 Invisible for all Невидимий для всіх Visible for all Видимий для всіх Visible only for visible list Видимий тільки для списку зрячих Invisible only for invisible list Невидимий тільки для списку незрячих jTransport Register Зареєструватися Name Ім'я Nick Нік First Ім'я Last Прізвище E-Mail E-Mail Address Адреса City Місто State Область Zip Індекс Phone ТелефонТелефон URL URL Date Дата Misc Різне Text Текст Password Пароль jVCard Update photo Оновити фото Add name Додати ім'я Add nick Додати нік Add birthday Додати день народження Add homepage Додати домашню сторінку Add description Додати опис Add country Додати країну Add region Додати район Add city Додати місто Add postcode Додати поштовий індекс Add street Додати вулицю Add PO box Додати абонентську скриньку Add organization name Додати назву організації Add organization unit Додати відділ організації Add title Додати назву Add role Додати посаду Open File Відкрити файл Images (*.gif *.bmp *.jpg *.jpeg *.png) Малюнки (*.gif *.png *.bmp *.jpg *.jpeg) Open error Помилка відкривання Image size is too big Розмір малюнка занадто великий userInformation Інформація про користувача Request details Оновити дані Close Закрити Save Зберегти topicConfigDialogClass Change topic Змінити тему Change Змінити Cancel Скасувати qutim-0.2.0/languages/uk_UA/sources/core.ts0000755000175000017500000033055411243502505022263 0ustar euroelessareuroelessar AbstractContextLayer Send message Надіслати повідомлення Message history Історія повідомлень Contact details Дані контакту AccountManagementClass AccountManagement Управління обліковими записами Add Додати Edit Редагувати Remove Видалити AddAccountWizard Add Account Wizard Майстер додавання облікового запису AntiSpamLayerSettingsClass AntiSpamSettings Налаштування анти-спаму Accept messages only from contact list Приймати повідомлення тільки від списку контактів Notify when blocking message Сповіщати коли є вхідне спам-повідомлення Do not accept NIL messages concerning authorization Не приймати порожніх авторизаційних запитів Do not accept NIL messages with URLs Не приймати порожніх повідомлень із лінками Enable anti-spam bot Ввімкнути анти-спам систему Anti-spam question: Питання для перевірки: Answer to question: Відповідь на запитання: Message after right answer: Повідомлення після правильної відповіді: Don't send question/reply if my status is "invisible" Не починати перевірку коли мій статус "Невидимий" ChatForm Form Форма Contact history Історія повідомлень Ctrl+H Ctrl+H Emoticon menu Меню смайликів Ctrl+M Ctrl+M Send image < 7,6 KB Надіслати малюнок < 7.6 КБ Ctrl+I Ctrl+I Send file Надіслати файл Ctrl+F Ctrl+F Translit Трансліт Ctrl+T Ctrl+T Contact information Дані контакту Send message on enter Надсилати повідомлення натисканням на "Enter" Send typing notification Надсилати сповіщення про друк Quote selected text Процитувати виділений текст Ctrl+Q Ctrl+Q Clear chat log Очистити журнал розмови ... ... Send message Надіслати повідомлення Send Надіслати ChatLayerClass Chat window Вікно розмови ChatSettingsWidget Form Форма Tabbed mode Режим вкладок Chats and conferences in one window Розмови та конференцій в одному вікні Close button on tabs Кнопка закриття на вкладках Tabs are movable Переміщувані вкладки Remember openned privates after closing chat window Пам'ятати відкриті розмови після закриття вікна розмов Close tab/message window after sending a message Закривати вкладку/вікно розмови після надсилання повідомлення Open tab/message window if received message Відкривати вкладку/вікно повідомлень при взідному повідомленні Webkit mode Режим Webkit Don't show events if message window is open Не показуватисповіщень якщо відкрите вікно повідомлень Send message on enter Надсилати повідомлення натисканням на "Enter" Send message on double enter Надсилати повідомлення при подвійному натисканні на "Enter" Send typing notifications Надсилати сповіщення про друк Don't blink in task bar Не мигати на панелі задач After clicking on tray icon show all unreaded messages Після клацання по іконці в лотку показувати всі непрочитані повідомлення Remove messages from chat view after: Видаляти повідомлення із розмови після: Don't group messages after (sec): Не групувати повідомлень після (секунд): Text browser mode Режим текстового оглядача Show names Показувати імена Timestamp: Формат часу: ( hour:min:sec day/month/year ) ( год:хв:с день/місяць/рік ) ( hour:min:sec ) ( год:хв:с ) ( hour:min, full date ) ( год:хв, повна дата ) Colorize nicknames in conferences Різнокольорові ніки в конференціях ChatWindow <font color='green'>Typing...</font> <font color='green'>Тицяє пальцями...</font> Open File Відкрити файл Images (*.gif *.png *.bmp *.jpg *.jpeg) Малюнки (*.gif *.png *.bmp *.jpg *.jpeg) Open error Помилка при відкритті Image size is too big Розмір малюнку занадто великий ConfForm Form Форма Show emoticons Показувати смайлики Ctrl+M, Ctrl+S Ctrl+M, Ctrl+S Invert/translit message Інвертування/транслітеризація повідомлення Ctrl+T Ctrl+T Send on enter Надсилати повідомлення натисканням на "Enter" Quote selected text Процитувати виділений текст Ctrl+Q Ctrl+Q Clear chat Очистити вікно розмови Send Надіслати Console Form Форма <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> ContactListProxyModel Online В мережі Offline Поза мережею Not in list Не в списку ContactListSettingsClass ContactListSettings Налаштування списку контактів Main Основні Show accounts Показувати облікові записи Hide empty groups Приховувати порожні групи Hide offline users Приховувати користувачів, які поза мережею Hide online/offline separators Приховувати онлайн/оффлайн розділювачі Sort contacts by status Впорядкувати контакти за станом Draw the background with using alternating colors Альтернативні кольори фону Show client icons Показувати піктограмки клієнтів Show avatars Показувати аватари Look'n'Feel Вигляд Opacity: Прозорість 100% 100% Window Style: Стиль вікна: Regular Window Звичайне вікно Theme border Окантування теми Borderless Window Без окантування Tool window Діалогове вікно Show groups Показувати групи Customize Змінити Customize font: Змінити шрифт Account: Обліковий запис: Group: Група: Online: В мережі: Offline: Поза мережею: Separator: Розділювач: DefaultContactList qutIM qutIM Main menu Головне меню Show/hide offline Показувати/приховувати тих хто поза мережею Show/hide groups Показувати/приховувати групи Sound on/off Звук ввімк/вимк About Про програму GeneralWindow qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? йцукенгшщзхїфівапролджєячсмитьбю.ЙЦУКЕНГШЩЗХЇФІВАПРОЛДЖЄЯЧСМИТЬБЮ. Possible variants Можливі варіанти GlobalProxySettingsClass GlobalProxySettings Налаштування глобального проксі Proxy Проксі Type: Тип: Host: Хост: Port: Порт: None Немає HTTP HTTP SOCKS 5 SOCKS 5 Authentication Аутентифікація User name: Користувач: Password: Пароль: GuiSetttingsWindowClass User interface settings Налаштування інтерфейсу користувача Emoticons: Смайлики: <None> <Немає> Contact list theme: Тема списку контактів: <Default> <За замовчуванням> Chat window dialog: Вікно розмови: Chat log theme (webkit): Тема журналу розмови (webkit): Popup windows theme: Тема віконець сповіщень: Status icon theme: Тема піктограмок станів: System icon theme: Тема системних піктограмок: Language: Мова: <Default> ( English ) <За замо> ( English за замовчуванням) Application style: Стиль програми: Border theme: Тема окантування: <System> <Системна> Sounds theme: Звукова тема: <Manually> <Ручками> OK Гаразд Apply Застосувати Cancel Скасувати HistorySettingsClass HistorySettings Налаштування історії Save message history Зберігати історію повідомлень Show recent messages in messaging window Показувати останніх повідомлень в вікні розмови HistoryWindow No History Немає історії HistoryWindowClass HistoryWindow Вікно історії Account: Обліковий запис: From: З: Search Пошук Return Повернутись 1 1 LastLoginPage Please type chosen protocol login data Введіть авторизаційні дані вибраного протоколу Please fill all fields. Заповніть всі поля. NotificationsLayerSettingsClass NotificationsLayerSettings Сповіщення Show popup windows Показувати випливаючі віконця Width: Довжина: Height: Ширина: Show time: Показувати час: px пікс s с Position: Розташування: Style: Стиль: Upper left corner Верхній лівий кут Upper right corner Верхній правий кут Lower left corner Нижній лівий кут Lower right corner Нижній правий кут No slide Без ефектів Slide vertically Вертикальне випливання Slide horizontally Горизонтальне випливання Show balloon messages Показувати повідомлення-бульбашки Notify when: Сповіщати коли: Contact sign on Контакт ввійшов Contact sign off Контакт вийшов Contact typing message Контакт набирає повідомлення Contact change status Контакт змінює стан Message received Є вхідне повідомлення PluginSettingsClass Configure plugins - qutIM Опції модулів - qutIM 1 1 Ok Гаразд Cancel Скасувати PopupWindow <b>%1</b> <b>%1</b> <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 PopupWindowClass PopupWindow PopupWindow ProfileLoginDialog Log in Ввійти Profile Профіль Incorrect password Неправильний пароль Delete profile Видалити профіль Delete %1 profile? Видалити профіль %1? ProfileLoginDialogClass ProfileLoginDialog ProfileLoginDialog Name: Ім'я: Password: Пароль: Remember password Пам'ятати пароль Don't show on startup Не показувати при запуску Sign in Ввійти Cancel Скасувати ProtocolPage Please choose IM protocol Виберіть протокол надсилання повідомлень This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts Цей діалог допоможе Вам додати обліковий запис вибраного протоколу. Ви завжди можете додати чи видалити облікові записи із Основні налаштування -> Облікові записи QObject Anti-spam Анти-спам Authorization blocked Заблоковано авторизаційне повідомлення Open File Відкрити файл All files (*) Всі файли (*) 1st quarter 1-а чверть 2nd quarter 2-а чверть 3rd quarter 3-я чверть 4th quarter 4-а чверть Contact List Список контактів Not in list Не в списку History Історія Notifications Сповіщення Sound notifications Звукові сповіщення Message from %1: %2 Повідомлення від %1:%2 %1 is typing %1 тицяє пальцями typing тицяє пальцями Blocked message from %1: %2 Заблоковано повідомлення від %1: %2 (BLOCKED) (ЗАБЛОКОВАНО) %1 has birthday today!! У %1 сьогодні день народження!!! has birthday today!! сьогодні святкує день народження!!! Sound Звук &Quit &Вихід Quit Вихід SoundEngineSettings Select command path Введіть командний шлях Executables (*.exe *.com *.cmd *.bat) All files (*.*) Виконувані (*.exe *.com *.cmd *.bat) Всі файли (*.*) Executables Виконувані Form Форма ... ... Engine type Тип двигунця No sound Без звуку QSound QSound Command Команда SoundLayerSettings Startup Запуск System event Системна подія Outgoing message Вихідне повідомлення Incoming message Вхідне повідомлення Contact is online Контакт в мережі Contact changed status Контакт змінив стан Contact went offline Контакт поза мережею Contact's birthday is comming Наступає день народження контакту Sound files (*.wav);;All files (*.*) Don't remove ';' chars! Звукові файли (*.wav);;Всі файли (*.*) Open sound file Відкрити звуковий файл Export sound style Експорт звукового стилю XML files (*.xml) Файли XML (*.xml) Export... Експорт... All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue? Всі звукові файли будуть скопійовані в каталог "%1/". Існуючі файли будуть перезаписані без жодних запитів. Бажаєте продовжувати? Error Помилка Could not open file "%1" for writing. Неможливо відкрити файл "%1" для запису. Could not copy file "%1" to "%2". Неможливо скопіювати файл "%1" до "%2". Sound events successfully exported to file "%1". Звукові події успішно експортовано в файл "%1". Import sound style Імпортувати звукову тему Could not open file "%1" for reading. Неможливо відкрити файл "%1" для читання. An error occured while reading file "%1". Сталась помилка під час читання файлу "%1". File "%1" has wrong format. Файл "%1" має невірний формат. SoundSettingsClass soundSettings soundSettings Events Події Sound file: Звуковий файл: Play Відтворити Open Відкрити Apply Застосувати Export... Експорт... Import... Імпорт... You're using a sound theme. Please, disable it to set sounds manually. Ви використовуєте звукову тему. Вимкніть її, щоб мати змогу вибирати окремі звукові файли. StatusDialog Write your status message Введыть повыдомлення стану Preset caption Збережений стан StatusDialogVisualClass StatusDialog StatusDialog Preset: Профіль: <None> <Немає> Do not show this dialog Не показувати цей діалог Save Зберегти OK Гаразд Cancel Скасувати StatusPresetCaptionClass StatusPresetCaption StatusPresetCaption Please enter preset caption Введіть назву профілю OK Гаразд Cancel Скасувати TreeContactListModel Online В мережі Free for chat Готовий для розмови Away Відійшов Not available Недоступний Occupied Зайнятий Do not disturb Не турбувати Invisible Невидимий Offline Поза мережею At home Вдома At work На роботі Having lunch Обід Evil Злий Depression Депресія Without authorization Без авторизації aboutInfoClass About qutIM Про qutIM About Про <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, міжплатформова програма для обміну повідомленнями</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> Authors Автори <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Основний розробник та засновник проекту</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Основний розробник</span></p></body></html> Thanks To Подяки <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Іконки</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Іконки</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Смайлики </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Aвтор звукових подій</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Система визначення клієнтів</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Система підтримки шкурок</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> License Agreement Ліцензійна угода <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Close Закрити Return Повернутись loginDialog Delete account Видалити обліковий запис Delete %1 account? Видалити обліковий запис %1? loginDialogClass Account Обліковий запис Account: Обліковий запис: ... ... Password: Пароль: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximum length of ICQ password is limited to 8 characters.</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Максимальна довжина паролю не більша як 8 символів.</span></p></body></html> Save my password Зберегти пароль Autoconnect Автоз'єднання Secure login Безпечний вхід Show on startup Показувати при запуску Sign in Ввійти mainSettingsClass mainSettings mainSettings Save main window size and position Зберігати розмір і розташування основного вікна Hide on startup Ховати на старті Don't show login dialog on startup Не показувати діалог входу на старті Start only one qutIM at same time Запуск тільки однієї копії програми Add accounts to system tray menu Додати облікові записи в системний лоток Always on top Завжди зверху Auto-hide: Автоприховування: s с Auto-away after: Стан "Відійшов" після: min хв Show status from: Показувати стан з: qutIM &Quit &Вихід &Settings... &Налаштування... &User interface settings... &Налаштування інтерфейсу користувача... Plug-in settings... Налаштування модулів... Switch profile Змінити профіль Do you really want to switch profile? Ви дійсно бажаєте змінити профіль? qutIMClass qutIM qutIM qutimSettings Accounts Облікові записи General Основні Global proxy Глобальний проксі Save settings Зберегти налаштування Save %1 settings? Зберегти налаштування %1? qutimSettingsClass Settings Налаштування 1 1 OK Гаразд Apply Застосувати Cancel Скасувати qutim-0.2.0/languages/uk_UA/sources/vkontakte.ts0000755000175000017500000001527111237565256023354 0ustar euroelessareuroelessar EdditAccount Editing %1 Редагування %1 Form Форма General Основні Password: Пароль: Autoconnect on start З'єднуватись при запуску Keep-alive every: Перевіряти з'єднання кожні: s с Refresh friend list every: Оновлювати список друзів кожних: Check for new messages every: Перевіряти наявність нових повідомлень кожні: Updates Оновлення Check for friends updates every: Перевіряти оновлення друзів кожних: Enable friends photo updates notifications Ввімкнути сповіщення про оновлення фото друзів Insert preview URL on new photos notifications Додавати лінк на зменшену копію при сповіщеннях про фото Insert fullsize URL on new photos notifications Додавати лінк на повнорозмірне фото при сповіщеннях OK Гаразд Apply Застосувати Cancel Скасувати LoginForm Form Форма E-mail: E-Mail: Password: Пароль: Autoconnect on start З'єднуватись при запуску VcontactList Friends Друзі <font size='2'><b>Status message:</b>%1</font <font size='2'><b>Повідомлення стану:</b>%1</font Favorites Закладки VprotocolWrap Mismatch nick or password Пароль і нік не збігаються Vkontakte.ru updates Оновлення на vkontakte.ru %1 was tagged on photo %1 було позначено на фото %1 added new photo %1 додав нове фото VstatusObject Online В мережі Offline Поза мережею qutim-0.2.0/languages/uk_UA/sources/irc.ts0000755000175000017500000007134511240775420022115 0ustar euroelessareuroelessar AddAccountFormClass AddAccountForm Форма додавання облікових записів Password: Пароль: Save password Зберегти пароль Server: Сервер: irc.freenode.net irc.freenode.net Port: Порт: 6667 6667 Nick: Нік: Real Name: Справжнє ім'я: IrcConsoleClass IRC Server Console Консоль IRC-сервера ircAccount Channel owner Власник каналу Channel administrator Адміністратор каналу Channel operator Оператор каналу Channel half-operator Напівоператор каналу Voice Голос Banned Забанено Online В мережі Offline Поза мережею Away Відійшов Console Консоль Channels List Список каналів Join Channel Зайти на канал Change topic Змінити тему IRC operator IRC-оператор Mode Режим Private chat Приват Notify avatar Сповіщати аватар Give Op Дати статус оператора Take Op Взяти статус оператора Give HalfOp Дати напівоператора Take HalfOp Дати оператора Give Voice Дати голос Take Voice Взяти статус оператора Kick Викинути Kick with... Викинути з... Ban Забанити UnBan Зняти бан Information Довідка CTCP CTCP Modes Режими Kick / Ban Викинути/забанити Kick reason Причина викидання ircAccountSettingsClass IRC Account Settings Налаштування облікового запису IRC General Основні Nick: Нік: Alternate Nick: Альтернативний нік: Real Name: Справжнє ім'я: Autologin on start Входити при запуску Server: Сервер: Port: Порт: Codepage: Кодування: Apple Roman Apple Roman Big5 Big5 Big5-HKSCS Big5-HKSCS EUC-JP EUC-JP EUC-KR EUC-KR GB18030-0 GB18030-0 IBM 850 IBM 850 IBM 866 IBM 866 IBM 874 IBM 874 ISO 2022-JP ISO 2022-JP ISO 8859-1 ISO 8859-1 ISO 8859-2 ISO 8859-2 ISO 8859-3 ISO 8859-3 ISO 8859-4 ISO 8859-4 ISO 8859-5 ISO 8859-5 ISO 8859-6 ISO 8859-6 ISO 8859-7 ISO 8859-7 ISO 8859-8 ISO 8859-8 ISO 8859-9 ISO 8859-9 ISO 8859-10 ISO 8859-10 ISO 8859-13 ISO 8859-13 ISO 8859-14 ISO 8859-14 ISO 8859-15 ISO 8859-15 ISO 8859-16 ISO 8859-16 Iscii-Bng Iscii-Bng Iscii-Dev Iscii-Dev Iscii-Gjr Iscii-Gjr Iscii-Knd Iscii-Knd Iscii-Mlm Iscii-Mlm Iscii-Ori Iscii-Ori Iscii-Pnj Iscii-Pnj Iscii-Tlg Iscii-Tlg Iscii-Tml Iscii-Tml JIS X 0201 JIS X 0201 JIS X 0208 JIS X 0208 KOI8-R KOI8-R KOI8-U KOI8-U MuleLao-1 MuleLao-1 ROMAN8 ROMAN8 Shift-JIS Shift-JIS TIS-620 TIS-620 TSCII TSCII UTF-8 UTF-8 UTF-16 UTF-16 UTF-16BE UTF-16BE UTF-16LE UTF-16LE Windows-1250 Windows-1250 Windows-1251 Windows-1251 Windows-1252 Windows-1252 Windows-1253 Windows-1253 Windows-1254 Windows-1254 Windows-1255 Windows-1255 Windows-1256 Windows-1256 Windows-1257 Windows-1257 Windows-1258 Windows-1258 WINSAMI2 WINSAMI2 Identify Ідентифікація Age: Вік: Gender: Стать: Unspecified Не встановлено Male Чоловіча Female Жіноча Location Розташування Languages: Мови: Avatar URL: Лінк на аватар: Other: Інше: Advanced Розширені Part message: Частина повідомлення: Quit message: Вихідне повідомлення: Autosend commands after connect: Автонадсилання команд після з'єднання: OK Гаразд Cancel Скасувати Apply Застосувати ircProtocol Connecting to %1 З'єднання з %1 Trying alternate nick: %1 Спроба застосування альтернативного ніку: %1 %1 requests %2 %1 надсилає запит на %2 %1 requests unknown command %2 %1 надсилає запит на невідому команду %2 %1 reply from %2: %3 %1 відповідь від %2: %3 %1 has set mode %2 %1 встановив режим %2 ircSettingsClass ircSettings Налаштування IRC Main Основні Advanced Розширені joinChannelClass Join Channel Зайти на канал Channel: Канал: listChannel Sending channels list request... Запит списку каналів... Fetching channels list... %1 Отримання списку каналів... %1 Channels list loaded. (%1) Список каналів завантажено. (%1) Fetching channels list... (%1) Отримання списку каналів... (%1) listChannelClass Channels List Список каналів Filter by: Фільтр: Request list Список запитів <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> Users Користувачі Channel Канал Topic Тема textDialogClass textDialog Тестовий діалог qutim-0.2.0/languages/uk_UA/sources/plugman.ts0000755000175000017500000006000711241356617023000 0ustar euroelessareuroelessar ChooseCategoryPage Select art Вибрати графіку Select core Вибрати ядро Library (*.dll) Бібліотека (*.dll) Library (*.dylib *.bundle *.so) Бібліотека (*.dylib *.bundle *.so) Library (*.so) Бібліотека (*.so) Select library Виберіть бібліотеку WizardPage Сторінка майстра Package category: Категорія пакунку: Art Графіка Core Ядро Lib Бібліотека Plugin Модуль ... ... ChoosePathPage WizardPage Сторінка майстра ... ... ConfigPackagePage WizardPage Сторінка майстра Name: Назва: * * Version: Версія: Category: Категорія: Art Графіка Core Ядро Lib Бібліотека Plugin Модуль Type: Тип: Short description: Короткий опис: Url: Посилання: Author: Автор: License: Ліцензія: Platform: Платформа: Package name: Назва пакунку: QObject Package name is empty Назва пакунку порожня Package type is empty Тип пакунку порожній Invalid package version Неправильна версія пакунку Wrong platform Невірна платформа manager Plugman Управління модулями Not yet implemented Ще не реалізовано Apply Застосувати Actions Дії find знайти plugDownloader bytes/sec байт/с kB/s КБ/с MB/s МБ/с Downloading: %1%, speed: %2 %3 Завантаження: %1%, швидкість: %2 %3 plugInstaller Need restart! Потрібне перезавантаження! Unable to open archive: %1 Неможливо відкрити архів: %1 warning: trying to overwrite existing files! увага: спроба перезапису існуючих файлів! Unable to extract archive: %1 to %2 Неможливо розпакувати архів: %1 до %2 Installing: Встановлення: Unable to update package %1: installed version is later Неможливо оновити пакунок %1: встановлена версія є новішою Unable to install package: %1 Неможливо встановити пакунок: %1 Invalid package: %1 Неправильний пакунок: %1 Removing: Видалення: plugItemDelegate isUpgradable isUpgradable isInstallable isInstallable isDowngradable isDowngradable installed встановлено Unknown Невідомо Install Встановити Remove Видалити Upgrade Оновити plugMan Manage packages Керування пакунками plugManager Actions Дії Update packages list Install package from file Оновити список пакунків Upgrade all Оновити все Revert changes Скасувати зміни plugPackageModel Packages Пакунки plugXMLHandler Unable to open file Неможливо відкрити файл Unable to set content Неможливо встановити вміст Unable to write file Неможливо записати у файл Can't read database. Check your pesmissions. Неможливо прочитати базу даних. Перевірте ваші права. Broken package database Неправильний пакунок бази даних unable to open file неможливо відкрити файл unable to set content неможливо встановити вміст plugmanSettings Form Форма Settings Налаштування Not yet implemented Ще не реалізовано group packages групи пакунків <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mirror list</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Список дзеркал</span></p></body></html> Add Додати About Про модуль <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Просте управління розширеннями qutIM.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Контакти: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009</span></p></body></html> Name Назва Description Опис Url Посилання qutim-0.2.0/languages/uk_UA/sources/icq.ts0000755000175000017500000063762611240775420022126 0ustar euroelessareuroelessar AccountEditDialog Editing %1 Редагування %1 AddAccountFormClass AddAccountForm Форма додавання облікових записів UIN: УІН: Password: Пароль: Save password Зберегти пароль ContactSettingsClass ContactSettings Налаштування контакту Show contact xStatus icon Показувати іконку стану Show birthday/happy icon Показувати кульку щастя/дня народження Show not authorized icon Показувати іконку авторизації Show "visible" icon if contact in visible list Показувати іконку присутності контакту в списку зрячих Show "invisible" icon if contact in invisible list Показувати іконку присутності контакту в списку незрячих Show "ignore" icon if contact in ignore list Показувати іконку присутності контакту в списку ігнорування Show contact's xStatus text in contact list Показувати текст стану в списку контактів FileTransfer Send file Надіслати файл QObject Open File Відкрити файл All files (*) Всі файли (*) ICQ General ICQ основні Statuses Стани Contacts Контакти <font size='2'><b>External ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Зовнішня ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Internal ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Внутрішня ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Online time:</b> %1d %2h %3m %4s<br> <font size='2'><b>Часу в мережі:</b> %1d %2h %3m %4s<br> <b>Signed on:</b> %1<br> <b>Вхід здійснено:</b> %1<br> <font size='2'><b>Away since:</b> %1<br> <font size='2'><b>Неактивний:</b> %1<br> <font size='2'><b>N/A since:</b> %1<br> <font size='2'><b>Недоступний:</b> %1<br> <b>Reg. date:</b> %1<br> <b>Дата реєстрації:</b> %1<br> <b>Possible client:</b> %1</font> <b>Можливий клієнт:</b> %1</font> <font size='2'><b>Last Online:</b> %1</font> <font size='2'><b>Останній раз був у мережі:</b> %1</font> <b>External ip:</b> %1.%2.%3.%4<br> <b>Зовнішня ip:</b> %1.%2.%3.%4<br> <b>Internal ip:</b> %1.%2.%3.%4<br> <b>Внутрішня ip:</b> %1.%2.%3.%4<br> <b>Online time:</b> %1d %2h %3m %4s<br> <b>Часу в мережі:</b> %1d %2h %3m %4s<br> <b>Away since:</b> %1<br> <b>Неактивний з:</b> %1<br> <b>N/A since:</b> %1<br> <b>Недоступний з:</b> %1<br> <b>Possible client:</b> %1<br> <b>Можливий клієнт:</b> %1<br> acceptAuthDialogClass acceptAuthDialog Діалог підтвердження авторизації Authorize Авторизувати Decline Відхилити accountEdit Form Форма OK Гаразд Apply Застосувати Cancel Скасувати Icq settings Налаштування ICQ Password: Пароль: Save password Зберегти пароль AOL expert settings Експертні налаштування AOL Client id: ID клієнта: Client major version: Мажорна версія клієнту: Client minor version: Мінорна версія клієнту: Client lesser version: Lesser-версія клієнту: Client build number: Номер компіляції: Client id number: ID-код клієнта: Client distribution number: Номер дистрибутива клієнта: Seq first id: Seq first id: Server Сервер Host: Хост: Port: Порт: login.icq.com login.icq.com Keep connection alive Зберігати з'єднання Secure login Безпечний вхід Proxy connection З'єднання через проксі Listen port for file transfer: Прослуховувати порт на надсилання файлів: Proxy Проксі Type: Тип: None Немає HTTP HTTP SOCKS 5 SOCKS 5 Authentication Автентифікація User name: Нік: addBuddyDialog Move Перемістити Add %1 Додати %1 addBuddyDialogClass addBuddyDialog Додати аватар Local name: Локальне ім'я: Group: Група: Add Додати addRenameDialogClass addRenameDialog Діалог перейменування Name: Ім'я: OK Гаразд Return Повернутись closeConnection Invalid nick or password Неправильний нік чи пароль Service temporarily unavailable Служба тимчасово недоступна Incorrect nick or password Неправильний нік чи пароль Mismatch nick or password Пароль і нік не збігаються Internal client error (bad input to authorizer) Внутрішня помилка клієнта (неправильний ввід авторизатору) Invalid account Неправильний обліковий запис Deleted account Видалений обліковий запис Expired account Термін облікового запису вийшов No access to database Немає доступу до бази даних No access to resolver Invalid database fields Неправильні поля бази даних Bad database status Поганий стан бази даних Bad resolver status Internal error Внутрішня помилка Service temporarily offline Служба тимчасово недоступна Suspended account DB send error Помилка надсилання до БД DB link error Помилка зв'язку з базою даних Reservation map error Reservation link error The users num connected from this IP has reached the maximum Кількість клієнтів під'єднаних із цієї IP-адреси перевищила максимум The users num connected from this IP has reached the maximum (reservation) Кількість користувачів під'єднаних із цієї IP-адреси перевищила максимальний резерв Rate limit exceeded (reservation). Please try to reconnect in a few minutes User too heavily warned Reservation timeout You are using an older version of ICQ. Upgrade required Ви використовуєте стару версію ICQ. Потрібне оновлення You are using an older version of ICQ. Upgrade recommended Ви використовуєте стару версію ICQ. Рекомендовано оновитись Rate limit exceeded. Please try to reconnect in a few minutes Can't register on the ICQ network. Reconnect in a few minutes Неможливо зареєструватись в мережі ICQ. Перепід'єднання через кілька звилин Invalid SecurID Неправильний SecurID Account suspended because of your age (age < 13) Connection Error Помилка з 'єднання Another client is loggin with this uin Інший клієнт ввійшов з цим номером contactListTree is online в мережі is away відійшов is dnd не турбувати is n/a недоступний is occupied зайнятий is free for chat може розмовляти is invisible невидимий is offline поза мережею at home вдома at work на роботі having lunch обідає is evil злиться in depression депресує %1 is reading your away message %1 читає ваше вихідне повідомлення %1 is reading your x-status message %1 читає ваш стан Password is successfully changed Успішно змінено пароль Password is not changed Пароль не змінено Add/find users Додати/знайти користувачів Send multiple Надіслати багатьом Privacy lists Особисті списки View/change my details Показати/редагувати мої дані Change my password Змінити пароль You were added Вас додали New group Створити групу Rename group Перейменувати групу Delete group Видалити групу Send message Надіслати повідомлення Contact details Дані контакту Copy UIN to clipboard Скопіювати номер контакту Contact status check Перевірити статус Message history Історія повідомлень Read away message Прочитати вихідне повідомлення Rename contact Перейменувати контакт Delete contact Видалити контакт Move to group Перемістити до групи Add to visible list Додати до списку зрячих Add to invisible list Додати до списку незрячих Add to ignore list Додати до списку ігнорованих Delete from visible list Видалити із списку зрячих Delete from invisible list Видалити із списку незрячих Delete from ignore list Видалити із списку ігнорованих Authorization request Запит авторизації Add to contact list Додати до списку контактів Allow contact to add me Дозволити контакту додати мене Remove myself from contact's list Видалити себе із його списку контактів Read custom status Прочитати стан Edit note Редагувати нотатки Create group Створити групу Delete group "%1"? Видалити групу "%1"? %1 away message %1 вихідне повідомлення Delete %1 Видалити %1 Move %1 to: Перемістити %1 до: Accept authorization from %1 Запит авторизації від %1 Authorization accepted Авторизація пройшла успшно Authorization declined Авторизація відхилено %1 xStatus message Повідомлення стану %1 Contact does not support file transfer Контакт не підтримує передачу файлів customStatusDialog Angry Голод Taking a bath Водні процедури Tired Втома Party Вечірка Drinking beer Пиво Thinking Роздуми Eating Трапеза Watching TV Перегляд телепередач Meeting Зустріч Coffee Кава Listening to music Музика Business Справи Shooting Стріляю Having fun Розваги On the phone На дроті Gaming Ігри Studying Навчання Shopping Покупки Feeling sick Хворію Sleeping Сон Surfing Серфінг Browsing Веб-серфінг Working Робота Typing Набір текстів Picnic Пікнік On WC В туалеті To be or not to be Бути чи не бути PRO 7 PRO 7 Love Кохання Sex Секс Smoking Паління Cold Прохолодно Crying Ревіння Fear Страх Reading Читання Sport Спорт In tansport В траспорті ? ? customStatusDialogClass Custom status Вибрати стан Choose Вибрати Cancel Скасувати Set birthday/happy flag Кулька щастя/дня народження deleteContactDialogClass deleteContactDialog Видалити контакт Contact will be deleted. Are you sure? Контакт буде видалений. Ви впевнені, що хочете цього? Delete contact history Видалити історію повідомлень контакту Yes Так No Ні fileRequestWindow Save File Зберегти файл All files (*) Всі файли (*) fileRequestWindowClass File request Запит передачі файлу From: Від: IP: IP: File name: Назва: File size: Розмір: Accept Прийняти Decline Відххилити fileTransferWindow File transfer: %1 Передача файлу: %1 Waiting... Очікування... Declined by remote user Відхилено віддаленим користувачем Accepted Прийнято Sending... Надсилання... Done Зроблено Getting... Прийом... /s /s B Байт KB кБайт MB МБайт GB ГБайт fileTransferWindowClass File transfer Передача файлу Current file: Поточний файл: Done: Готово: Speed: Швидкість: File size: Розмір файлу: Files: Файли: 1/1 1/1 Last time: Пройшло часу: Remained time: Залишилось часу: Sender's IP: IP відправника: Status: Стан: Open Відкрити Cancel Скасувати icqAccount Online В мережі Offline Поза мережею Free for chat Готовий для розмови Away Відійшов NA Недоступний Occupied Зайнятий DND Не турбувати Invisible Невидимий Lunch Їм Evil Злий Depression Депресія At Home Вдома At Work На роботі Custom status Налаштувати стан Privacy status Особистий стан Visible for all Видимий для всіх Visible only for visible list Видимий тільки для списку зрячих Invisible only for invisible list Невидимий тільки для списку незрячих Visible only for contact list Видимий тільки для списку контактів Invisible for all Невидимий для всіх Additional Додатково is reading your away message читає Ваше вихідне повідомлення is reading your x-status message читає повідомлення Вашого стану icqSettingsClass icqSettings Налаштування ICQ Main Основні Autoconnect on start З'єднуватись при запуску Save my status on exit Зберігати мій стан при виході Don't send requests for avatarts Не надсилати запити на аватари Reconnect after disconnect Перепід'єднуватися після роз'єднання Client ID: ID клієнта: qutIM qutIM ICQ 6 ICQ 6 ICQ 5.1 ICQ 5.1 ICQ 5 ICQ 5 ICQ Lite 4 ICQ Lite 4 ICQ 2003b Pro ICQ 2003b Pro ICQ 2002/2003a ICQ 2002/2003a Mac ICQ Mac ICQ QIP 2005 QIP 2005 QIP Infium QIP Infium - - Protocol version: Версія протоколу: Client capability list: Список можливостей клієнта: Advanced Розширені Account button and tray icon Кнопка облікового запису та іконка в треї Show main status icon Показувати основну іконку стану Show custom status icon Показувати іконку вибраного стану Show last choosen Показувати вибране останній раз Codepage( note that online messages use utf-8 in most cases ): Кодування (більшість клієнтів використовує UTF-8): Apple Roman Apple Roman Big5 Big5 Big5-HKSCS Big5-HKSCS EUC-JP EUC-JP EUC-KR EUC-KR GB18030-0 GB18030-0 IBM 850 IBM 850 IBM 866 IBM 866 IBM 874 IBM 874 ISO 2022-JP ISO 2022-JP ISO 8859-1 ISO 8859-1 ISO 8859-2 ISO 8859-2 ISO 8859-3 ISO 8859-3 ISO 8859-4 ISO 8859-4 ISO 8859-5 ISO 8859-5 ISO 8859-6 ISO 8859-6 ISO 8859-7 ISO 8859-7 ISO 8859-8 ISO 8859-8 ISO 8859-9 ISO 8859-9 ISO 8859-10 ISO 8859-10 ISO 8859-13 ISO 8859-13 ISO 8859-14 ISO 8859-14 ISO 8859-15 ISO 8859-15 ISO 8859-16 ISO 8859-16 Iscii-Bng Iscii-Bng Iscii-Dev Iscii-Dev Iscii-Gjr Iscii-Gjr Iscii-Knd Iscii-Knd Iscii-Mlm Iscii-Mlm Iscii-Ori Iscii-Ori Iscii-Pnj Iscii-Pnj Iscii-Tlg Iscii-Tlg Iscii-Tml Iscii-Tml JIS X 0201 JIS X 0201 JIS X 0208 JIS X 0208 KOI8-R KOI8-R KOI8-U KOI8-U MuleLao-1 MuleLao-1 ROMAN8 ROMAN8 Shift-JIS Shift-JIS TIS-620 TIS-620 TSCII TSCII UTF-8 UTF-8 UTF-16 UTF-16 UTF-16BE UTF-16BE UTF-16LE UTF-16LE Windows-1250 Windows-1250 Windows-1251 Windows-1251 Windows-1252 Windows-1252 Windows-1253 Windows-1253 Windows-1254 Windows-1254 Windows-1255 Windows-1255 Windows-1256 Windows-1256 Windows-1257 Windows-1257 Windows-1258 Windows-1258 WINSAMI2 WINSAMI2 multipleSending Send multiple НАдіслати багатьом multipleSendingClass multipleSending Надсилання багатьом 1 1 Send Надіслати Stop Зупинити networkSettingsClass networkSettings НАлаштування мережі Connection З'єднання Server Сервер Host: Хост: Port: Порт: login.icq.com login.icq.com Keep connection alive Зберігати з'єднання Secure login Безпечний вхід Proxy connection З'єднання через проксі Listen port for file transfer: Прослуховувати порт на надсилання файлів: Proxy Проксі Type: Тип: None Немає HTTP HTTP SOCKS 5 SOCKS 5 Authentication Автентифікація User name: Ім'я користувача: Password: Пароль: noteWidgetClass noteWidget Віджет нотаток OK Гаразд Cancel Скасувати oscarProtocol The connection was refused by the peer (or timed out). The remote host closed the connection. Віддалений хост закрив з'єднання. The host address was not found. Адресу хоста не знайдено. The socket operation failed because the application lacked the required privileges. The local system ran out of resources (e.g., too many sockets). Системі не вистачає ресурсів (можливо задіяно занадто багато сокетів). The socket operation timed out. Вийшов час для сокетної операції. An error occurred with the network (e.g., the network cable was accidentally plugged out). Помилка мережі (можливо витягнуто мережевий кабель). The requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). Запитувана сокетна операція не підтримується локальною операційною системою (наприклад немає підтримки IPv6). The socket is using a proxy, and the proxy requires authentication. Сокет використовує проксі і проксі вимагає автентифікації. An unidentified network error occurred. Сталась невідома помилка. passwordChangeDialog Password error Помилка пароля Current password is invalid Поточний пароль недійсний Confirm password does not match Підтвердження пароля не збігається passwordChangeDialogClass Change password Зміна пароля Current password: Поточний пароль: New password: Новий пароль: Retype new password: Повтор нового пароля: Change Змінити passwordDialog Enter %1 password Введіть %1 пароль passwordDialogClass Enter your password Введіть Ваш пароль Your password: Ваш пароль: Save password Зберегти пароль OK Гаразд privacyListWindow Privacy lists Особисті списки privacyListWindowClass privacyListWindow Приватні списки Visible list Список зрячих UIN УІН Nick name Нік I I D D Invisible list Список незрячих Ignore list Список ігнорованих readAwayDialogClass readAwayDialog readAwayDialog <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Close Закрити Return Повернутись requestAuthDialogClass Authorization request Запит авторизації Send Надіслати searchUser Add/find users Додати/знайти користувачів Searching Пошук Nothing found Нічого не знайдено Done Зроблено Always Завжди Authorize Авторизувати Add to contact list Додати до списку контактів Contact details Дані контакту Send message Надіслати повідомлення Contact status check Перевірити стан контакту searchUserClass searchUser Пошук користувачів Search by: Пошук за: UIN УІН Email E-Mail Other Інше Nick name: Нік: First name: Ім'я: Last name: Прізвище: Online only Тільки в мережі More >> Більше >> Advanced Розширена інформація Gender: Стать: Female Жіноча Male Чоловіча Age: Вік: 13-17 13-17 18-22 18-22 23-29 23-29 30-39 30-39 40-49 40-49 50-59 50-59 60+ 60+ Country: Країна: Afghanistan Афганістан Albania Албанія Algeria Алжир American Samoa Американське Самоа Andorra Андорра Angola Ангола Anguilla Ангілья Antigua Антигуа Antigua & Barbuda Антигуа і Барбуда Antilles Антильські острови Argentina Аргентина Armenia Вірменія Aruba Аруба AscensionIsland Острів Вознесіння Australia Австралія Austria Австрія Azerbaijan Азербайджан Bahamas Багамські острови Bahrain Бахрейн Bangladesh Бангладеш Barbados Барбадос Barbuda Барбуда Belarus Білорусія Belgium Бельгія Belize Беліз Benin Бенін Bermuda Бермудські острови Bhutan Бутан Bolivia Болівія Botswana Ботсвана Brazil Бразилія Brunei Бруней Bulgaria Болгарія Burkina Faso Буркіна-Фасо Burundi Бурунді Cambodia Камбоджа Cameroon Камерун Canada Канада Canary Islands Канарські острови Cayman Islands Кайманові острови Chad Чад Chile, Rep. of Чилі China Китай Christmas Island Острів Різдва Христового Colombia Колумбія Comoros Коморські Острови CookIslands Острови Кука Costa Rica Коста-Ріка Croatia Хорватія Cuba Куба Cyprus Кипр Czech Rep. Чеська республіка Denmark Данія Diego Garcia Дієго Гарсія Djibouti Джибут Dominica Домініка Dominican Rep. Домініканська республіка Ecuador Еквадор Egypt Єгипет El Salvador Сальвадор Eritrea Еритрея Estonia Естонія Ethiopia Ефіопія Faeroe Islands Фарерські острови Falkland Islands Фолклендські острови Fiji Острови Фіджі Finland Фінляндія France Франція FrenchAntilles Французькі Антильські острови French Guiana Французька Гвіана French Polynesia Французька Полінезія Gabon Габон Gambia Гамбія Georgia Грузія Germany Німеччина Ghana Гана Gibraltar Гібралтар Greece Греція Greenland Гренландія Grenada Гренада Guadeloupe Гваделупа Guatemala Ґватемала Guinea Гвінея Guinea-Bissau Гвінея-Біссау Guyana Гвіана Haiti Гаїті Honduras Гондурас Hong Kong Гон-Конг Hungary Угорщина Iceland Ісландія India Індія Indonesia Індонезія Iraq Ірак Ireland Ірландія Israel Ізраїль Italy Італія Jamaica Ямайка Japan Японія Jordan Йордан Kazakhstan Казахстан Kenya Кенія Kiribati Кірібаті Korea, North Північна Корея Korea, South Південна Корея Kuwait Кувейт Kyrgyzstan Киргизстан Laos Лаос Latvia Латвія Lebanon Ліван Lesotho Лесото Liberia Ліберія Liechtenstein Ліхтенштейн Lithuania Латвія Luxembourg Люксембург Macau Макао Madagascar Мадагаскар Malawi Малаві Malaysia Малайзія Maldives Мальдіви Mali Малі Malta Мальта Marshall Islands Маршаллові острови Martinique Мартініка Mauritania Мавританія Mauritius Маврикій MayotteIsland Острів Майотта Mexico Мексика Moldova, Rep. of Республіка Молдова Monaco Монако Mongolia Монголія Montserrat Монтсеррат Morocco Марокко Mozambique Мозамбік Myanmar М'янмар Namibia Намібія Nauru Науру Nepal Непал Netherlands Нідерланди Nevis Невіс NewCaledonia Нова Каледонія New Zealand Нова Зеландія Nicaragua Нікарагуа Niger Нігер Nigeria Нігерія Niue Ніуе Norfolk Island Острів Норфолк Norway Норвегія Oman Оман Pakistan Пакистан Palau Палау Panama Панама Papua New Guinea Папуа Нова Гвінея Paraguay Парагвай Peru Перу Philippines Філіппіни Poland Польща Portugal Португалія Puerto Rico Пуерто-Ріко Qatar Катар Reunion Island Острів Реюньйон Romania Румунія Rota Island Острів Рота Russia Росія Rwanda Руанда Saint Lucia Сент-Люсія Saipan Island Острів Сайпан San Marino Сан Марино Saudi Arabia Саудівська Аравія Scotland Шотландія Senegal Сенегал Seychelles Сейшельські острови Sierra Leone Сьєрра Леоне Singapore Сингапур Slovakia Словакія Slovenia Словенія Solomon Islands Соломонові острови Somalia Сомалі SouthAfrica ПАР Spain Іспанія Sri Lanka Шрі-Ланка St. Helena Острів святої Єлени St. Kitts Сент-Кітс Sudan Судан Suriname Суринам Swaziland Свазіленд Sweden Швеція Switzerland Швейцарія Syrian ArabRep. Сирія Taiwan Тайвань Tajikistan Таджикистан Tanzania Танзанія Thailand Тайланд Tinian Island Острів Тініан Togo Того Tokelau Токелау Tonga Тонга Tunisia Туніс Turkey Туреччина Turkmenistan Туркменістан Tuvalu Тувалу Uganda Уганда Ukraine Україна United Kingdom Великобританія Uruguay Уругвай USA США Uzbekistan Узбекистан Vanuatu Вануату Vatican City Ватикан Venezuela Венесуела Vietnam В'єтнам Wales Уельс Western Samoa Західне Самоа Yemen Ємен Yugoslavia Югославія Yugoslavia - Montenegro Чорногорія Yugoslavia - Serbia Югославія - Сербія Zambia Замбія Zimbabwe Зімбабве City: Місто: Interests: Інтереси: Art Мистецтво Cars Автомобілі Celebrity Fans Кумири Collections Колекціонування Computers Комп'ютери Culture & Literature Культура та література Fitness Фітнес Games Ігри Hobbies Хоббі ICQ - Providing Help ICQ - Довідка Internet Інтернет Lifestyle Стиль життя Movies/TV Кіно/ТБ Music Музика Outdoor Activities Відпочинок на свіжому повітрі Parenting Батьківство Pets/Animals Домашні улюбленці/Тварини Religion Релігія Science/Technology Наука/Технології Skills Вміння Sports Спорт Web Design Веб-дизайн Nature and Environment Природа та довкілля News & Media Новини та медіа Government Влада Business & Economy Бізнес та економіка Mystics Містика Travel Подорожі Astronomy Астрономія Space Космос Clothing Одяг Parties Вечірки Women Жінки Social science Соціальні науки 60's 60-і 70's 70-і 80's 80-і 50's 50-і Finance and corporate Фінанси та корпорації Entertainment Розваги Consumer electronics Побутова техніка Retail stores Роздрібні магазини Health and beauty Здоров'я і краса Media Медіа Household products Побутові товари Mail order catalog Каталоги замовлення поштою Business services Бізнес-сервіси Audio and visual Аудіо та візуал Sporting and athletic Спорт та атлетика Publishing Видавництво Home automation Домашня автоматизація Language: Мова: Arabic Арабська Bhojpuri Бходжпурі Bulgarian Болгарська Burmese Бірманська Cantonese Кантонська Catalan Каталанська Chinese Китайська Croatian Хорватська Czech Чеська Danish Данська Dutch Голландська English Англійська Esperanto Есперанто Estonian Естонська Farsi Фарсі Finnish Фінська French Французька Gaelic Гаельська German Німецька Greek Грецька Hebrew Іврит Hindi Хінді Hungarian Угорська Icelandic Ісландська Indonesian Індонезійська Italian Італійська Japanese Японська Khmer Кхмерська Korean Корейська Lao Лаоська Latvian Латвійська Lithuanian Литовська Malay Малайська Norwegian Норвезька Polish Польська Portuguese Португальська Romanian Румунська Russian Російська Serbian Сербська Slovak Словацька Slovenian Словенська Somali Сомалійська Spanish Іспанська Swahili Суахілі Swedish Шведська Tagalog Тагальська Tatar Татарська Thai Тайська Turkish Турецька Ukrainian Українська Urdu Урду Vietnamese В'єтнамська Yiddish Ідиш Yoruba Йоруба Afrikaans Африкаанс Persian Перська Albanian Албанська Armenian Вірменська Kyrgyz Киргизька Maltese Мальтійська Occupation: Заняття: Academic Академічні Administrative Адміністрування Art/Entertainment Мистецтво/Розваги College Student Студент коледжу Community & Social Спільнота і соціум Education Освіта Engineering Інженерія Financial Services Економічні служби High School Student Студент вищої школи Home Дім Law Закон Managerial Управління Manufacturing Виробництво Medical/Health Медицина/Здоров'я Military Армія Non-Goverment Organisation Недержавна організація Professional Професіонал Retail Роздріб Retired Пенсіонери Science & Research Наука та дослідження Technical Техніка University student Студент університету Web building Веб програмування Other services Інші служби Keywords: Ключові слова: Marital status: Сімейний стан: Divorced Розлучена Engaged Заручений Long term relationship Довгострокові відносини Married Одружений/заміжня Open relationship Відкриті відносини Separated Живемо нарізно Single Самотній Widowed Вдова/вдівець Do not clear previous results Не очизати попередні результати Clear Очистити Search Пошук Return Повернутись Account Обліковий запис Nick name Нік First name Ім'я Last name Прізвище Gender/Age Стать/Вік Authorize Авторизувати snacChannel Invalid nick or password Неправильний нік чи пароль Service temporarily unavailable Служба тимчасово недоступна Incorrect nick or password Неправильний нік чи пароль Mismatch nick or password Пароль і нік не збігаються Internal client error (bad input to authorizer) Внутрішня помилка клієнта (поганий ввід авторизатора) Invalid account Неправильний обліковий запис Deleted account Видалений обліковий запис Expired account Термін облікового запису вийшов No access to database Немає доступу до бази даних No access to resolver Invalid database fields Неправильні поля бази даних Bad database status Поганий стан бази даних Bad resolver status Internal error Внутрішня помилка Service temporarily offline Служба тимчасово недоступна Suspended account DB send error Помилка надсилання до БД DB link error Помилка зв'язку з базою даних Reservation map error The users num connected from this IP has reached the maximum Кількість користувачів під'єднаних із цієї IP-адреси перевищила максимум The users num connected from this IP has reached the maximum (reservation) Кількість користувачів під'єднаних із цієї IP-адреси перевищила максимальний резерв Rate limit exceeded (reservation). Please try to reconnect in a few minutes User too heavily warned Reservation timeout You are using an older version of ICQ. Upgrade required Ви використовуєте стару версію ICQ. Потрібне оновлення You are using an older version of ICQ. Upgrade recommended Ви використовуєте стару версію ICQ. Рекомендовано оновитись Rate limit exceeded. Please try to reconnect in a few minutes Can't register on the ICQ network. Reconnect in a few minutes Неможливо зареєструватись в мережі ICQ. Перепід'єднання через кілька звилин Invalid SecurID Неправильний SecurID Account suspended because of your age (age < 13) Connection Error: %1 Помилка з 'єднання: %1 statusSettingsClass statusSettings Налаштування станів Allow other to view my status from the Web Дозволити бачити мій стан з Web-мережі Add additional statuses to status menu Додати стани до меню станів Ask for xStauses automatically Автоматично завантажувати стани інших Notify about reading your status Сповіщати коли читають Ваш статус Away Відійшов Lunch Їм Evil Злий Depression Депресія At home Вдома At work На роботі N/A Недоступний Occupied Зайнятий DND Не турбувати Don't show autoreply dialog Не показувати вікно автовідповіді userInformation %1 contact information Дані контакту %1 <img src='%1' height='%2' width='%3'> <img src='%1' height='%2' width='%3'> <b>Nick name:</b> %1 <br> <b>Нік:</b> %1 <br> <b>First name:</b> %1 <br> <b>Ім'я:</b> %1 <br> <b>Last name:</b> %1 <br> <b>Прізвище:</b> %1 <br> <b>Home:</b> %1 %2<br> <b>Дім:</b> %1 %2<br> <b>Gender:</b> %1 <br> <b>Стать:</b> %1 <br> <b>Age:</b> %1 <br> <b>Вік:</b> %1 <br> <b>Birth date:</b> %1 <br> <b>Дата народження:</b> %1 <br> <b>Spoken languages:</b> %1 %2 %3<br> <b>Розмовляє мовами:</b> %1 %2 %3<br> Open File Відкрити файл Images (*.gif *.bmp *.jpg *.jpeg *.png) Малюнки (*.gif *.png *.bmp *.jpg *.jpeg) Open error Помилка відкривання Image size is too big Розмір малюнка занадто великий <b>Protocol version: </b>%1<br> <b>Версія протоколу: </b>%1<br> <b>[Capabilities]</b><br> <b>[Можливості]</b><br> <b>[Short capabilities]</b><br> <b>[Коротко про можливості]</b><br> <b>[Direct connection extra info]</b><br> <b>[Екстра-інформація про пряме з'єднання]</b><br> userInformationClass userInformation Інформація про користувача Name Ім'я Nick name: Нік: Last login: Останній вхід: First name: Ім'я: Last name: Прізвище: Account info: Інформація облікового запису: UIN: УІН: Registration: Реєстрація: Email: E-Mail: Don't publish for all Не робити доступним для всіх Home address: Домашня адреса: Country Країна City: Місто: State: Область: Zip: Індекс: Phone: Телефон: Fax: Факс: Cellular: Мобільний телефон: Street address: Вулиця: Originally from: Родом з: Country: Країна: Work address Робоча адреса Street: Вулиця: Company Компанія Company name: Назва компанії: Occupation: Заняття: Div/dept: Position: Розташування: Web site: Сайт: Personal Особисте Marital status: Сімейний стан: Gender: Стать: Female Жіноча Male Чоловіча Home page: Домашня сторінка: Age: Вік: Birth date Дата народження Spoken language: Розмовляю мовами: Interests Цікавиться <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Authorization/webaware Авторизація My authorization is required Потрібна моя авторизація All uses can add me without authorization Всі користувачі можуть додавати мене без авторизації Allow others to view my status in search and from the web Дозволити всім бачити мій стан в пошуку та у Web Save Зберегти Close Закрити Summary Загально General Основні Home Дім Work Робота About Про себе Additinonal Додатково Request details Оновити дані qutim-0.2.0/languages/uk_UA/sources/mrim.ts0000755000175000017500000016434011241356617022306 0ustar euroelessareuroelessar AddContactWidget Incorrect email Некоректний email Email you entered is not valid or empty! Ви ввели скриньку неправильно або залишили поле порожнім! AddContactWidgetClass Add contact to list Додати контакт до списку Add to group: Додати до групи: Contact email: Поштова скринька контакту: Contact nickname: Нік контакту: Add Додати AddNumberWidget Phone numbers Телефонні номери Home: Домашній: Work: Робочий: Mobile: Мобільний: Save Зберегти ContactDetails M Ч F Ж No avatar Немає аватару ContactDetailsClass Contact details Дані контакту Personal data Особисті дані E-Mail E-Mail Nickname Нік Surname Прізвище Sex Стать Age Вік Birthday День народження Zodiac sign Знак зодіаку Living place Місце проживання <email> <email> <nickname> <нік> Name Ім'я <name> <ім'я> <surname> <прізвище> <sex> <стать> <age> <вік> <birthday> <день народження> <zodiac> <знак зодіаку> <living place> <lмісце проживання> Avatar Аватар No avatar Немає аватару Update Оновити Close Закрити EditAccount Edit %1 account settings Редагувати налаштування облікового запису %1 Edit account Редагувати обліковий запис Account Обліковий запис Connection З'єднання Use profile settings Використовувати налаштування профілю FileTransferRequestWidget File transfer request from %1 Запит надсилання файлів від %1 Choose location to save file(s) Виберіть куди зберегти файл(и) Form Форма From: Від: File(s): Файл(и): File name Назва файлу Size Розмір Total size: Загальний розмір: Accept Прийняти Decline Відхилити FileTransferWidget File transfer with: %1 Обмін файлами з: %1 Waiting... Очікування... /sec /sec Done! Зроблено! Getting file... Приймання файлу... Close Закрити Sending file... Надсилання файлу... Form Форма Filename: Назва файлу: Done: Готово: Speed: Швидкість: File size: Розмір файлу: Last time: Пройшло часу: Remained time: Залишилось часу: Status: Стан: Close window after tranfer is finished Закрити вікно після завершення передачі Open Відкрити Cancel Скасувати GeneralSettings GeneralSettings Основні налаштування General settings Основні налаштування Restore status at application's start Відновлювати стан при запуску програми Show phone contacts Показувати телефонні контакти Show status text in contact list Показувати стан в списку контактів LoginFormClass LoginForm Вікно входу Password: Пароль: E-mail: E-Mail: MRIMClient Add contact Додати контакт Open mailbox Відкрити поштову скриньку Search contacts Пошук контактів No MPOP session available for you, sorry... Немає доступної для Вас MPOP-сесії... Messages in mailbox: Повідомлень в скриньці: Unread messages: Непрочитані повідомлення: User %1 is requesting authorization: Користувач %1 подав запит на авторизацію: Authorization request accepted by Авторизацію прийнято Server closed the connection. Authentication failed! Сервер закрив з'єднання. Автентифікація не вдалась! Server closed the connection. Another client with same login connected! Сервер розірвав з'єднання. Інший клієнт вже працює під цим профілем! Server closed the connection for unknown reason... Сервер розірвав з'єднання з невідомих причин... Mailbox status changed! Змінено стан скриньки! Send SMS Надіслати SMS Authorize contact Авторизувати контакт Request authorization Попросити авторизацію Rename contact Перейменувати контакт Delete contact Видалити контакт Move to group Перемістити до групи Add phone number Додати телефонний номер Add to list Додати до списку Pls authorize and add me to your contact list! Thanks! Email: Будь ласка, авторизуйте мене та додайте до вашого списку контактів. Дякую! Пошта: Contact list operation failed! Невдала операція із списком контактів! No such user! Немає такого користувача! Internal server error! Внутрішня помилка сервера! Invalid info provided! Надана невірна інформація! User already exists! Користувач вже існує! Group limit reached! Вичерпаний ліміт групи! Unknown error! Невідома помилка! Sorry, no contacts found :( Try to change search parameters Не знайдено контактів. Спробуйте із іншими параметрами пошуку. MRIMCommonUtils B Байт KB КБ MB МБ GB ГБ MRIMContact Possible client: Можливий клієнт: Renaming %1 Перейменування %1 You can't rename a contact while you're offline! Ви не можете перейменувати контакт поки ви поза мережею! MRIMContactList Phone contacts Телефонні контакти MRIMLoginWidgetClass MRIMLoginWidget MRIMLoginWidget Email: E-Mail: Password: Пароль: MRIMPluginSystem General settings Основні налаштування Connection settings Параметри з'єднання MRIMProto Offline message Оффлайн повідомлення Pls authorize and add me to your contact list! Thanks! Будь ласка, авторизуйте мене та додайте до вашого списку контактів. Дякую! File transfer request from %1 couldn't be processed! Обмін файлами із %1 неможливий! MRIMSearchWidget Any Будь-який The Ram Овен The Bull Телець The Twins Близнюки The Crab Рак The Lion Лев The Virgin Діва The Balance Терези The Scorpion Скорпіон The Archer Стрілець The Capricorn Козеріг The Water-bearer Водолій The Fish Риби Male Чоловіча Female Жіноча January Січень February Лютий March Березень April Квітень May Травень June Червень July Липень August Серпень September Вересень October Жовтень November Листопад December Грудень MRIMSearchWidgetClass Search contacts Пошук контактів Search form Форма пошуку Nickname: Нік: Name: Ім'я: Surname: Прізвище: Sex: Стать: Country: Країна: Region: Район: Birthday: День народження: Day: День: Any Будь-який 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 Month: Місяць: Zodiac: Знак зодіаку: Age from: Вік від: to до Search only online contacts Шукати серед контактів у мережі Show avatars Показувати аватари E-Mail E-Mail Note: search is available only for following domains: Нотатка: пошук доступний тільки для наступних доменів: @mail.ru, @list.ru, @bk.ru, @inbox.ru @mail.ru, @list.ru, @bk.ru, @inbox.ru Start search! Розпочати пошук! MoveToGroupWidget Move Перемістити Move contact to group Перемістити контакт до групи Move! Перемістити! Group: Група: RenameWidget Rename Перейменувати Rename contact Перейменувати контакт New name: Нове ім'я: OK Гаразд SMSWidget Send SMS Надіслати SMS Reciever: Отримувач: TextLabel Тестова мітка Send! Надіслати! SearchResultsWidget M Ч F Ж SearchResultsWidgetClass Search results Результати пошуку Nick Нік E-Mail E-Mail Name Ім'я Surname Прізвище Sex Стать Age Вік Info Інформація Add contact Додати контакт SettingsWidget Default proxy Проксі за замовчуванням SettingsWidgetClass SettingsWidget Віджет налаштувань Connection params Параметри з'єднання MRIM server host: MRIM хост: MRIM server port: Порт сервера: Use proxy Використовувати проксі Proxy type: Тип проксі: Proxy host: Хост проксі: Proxy port: Порт проксі: Proxy username: Користувач: Password: Пароль: StatusManager Offline Поза мережею Do Not Disturb Не турбувати Free For Chat Готовий до розмови Online В мережі Away Відійшов Invisible Невидимий Sick Хворий At home Вдома Lunch Їм Where am I? Де я? WC Туалет Cooking Кухня Walking Прогулянка I'm an alien! Я чужий! I'm a shrimp! Я креведко! I'm lost :( Я втрачений :( Crazy %) Божевілля %) Duck Качка Playing Ігри Smoke Паління At work На роботі On the meeting На зустрічі Beer Пиво Coffee Кава Shovel Лопата Sleeping Сон On the phone На дроті In the university В універі School Школа You have the wrong number! У вас невірний номер! LOL LOL Tongue Мова Smiley Усмішка Hippy Хіппі Depression Депресія Crying Ревіння Surprised Здивований Angry Голодний Evil Злий Ass Дупа Heart Серце Crescent Півмісяць Coool! Клаааааас! Horns Дім Figa Дуля F*ck you! Йди під три чорти! Skull Череп Rocket Ракета Ktulhu Ктулху Goat Коза Must die!! Має вмерти!! Squirrel Білка Party! Вечірка! Music Музика ? ? XtrazSettings Form Форма Enable Xtraz Ввімкнути Xtraz Xtraz packages: Пакунки Xtraz: Information: Інформація: authwidgetClass Authorization request Запит авторизації Authorize Авторизувати Reject Відхилити qutim-0.2.0/languages/uk_UA/binaries/0000755000175000017500000000000011273101310021047 5ustar euroelessareuroelessarqutim-0.2.0/languages/uk_UA/binaries/plugman.qm0000755000175000017500000003364611241356617023111 0ustar euroelessareuroelessar1 5I\{9Y#DE 3lj ,#spsFk@&j 6n ;. \{ x A  p  @*x# 2` 2`3 Mg3 ~d ?d5 b J  ( <   d _ RV n   .& s4 5։ =zZ,B \C4r\̜` Ji4......ChooseCategoryPage@0DV:0ArtChooseCategoryPage/4@>CoreChooseCategoryPageV1;V>B5:0LibChooseCategoryPage$V1;V>B5:0 (*.dll)Library (*.dll)ChooseCategoryPageDV1;V>B5:0 (*.dylib *.bundle *.so)Library (*.dylib *.bundle *.so)ChooseCategoryPage"V1;V>B5:0 (*.so)Library (*.so)ChooseCategoryPage$0B53>@VO ?0:C=:C:Package category:ChooseCategoryPage >4C;LPluginChooseCategoryPage81@0B8 3@0DV:C Select artChooseCategoryPage81@0B8 O4@> Select coreChooseCategoryPage&815@VBL 1V1;V>B5:CSelect libraryChooseCategoryPage !B>@V=:0 <09AB@0 WizardPageChooseCategoryPage......ChoosePathPage !B>@V=:0 <09AB@0 WizardPageChoosePathPage**ConfigPackagePage@0DV:0ArtConfigPackagePage 2B>@:Author:ConfigPackagePage0B53>@VO: Category:ConfigPackagePage/4@>CoreConfigPackagePageV1;V>B5:0LibConfigPackagePageVF5=7VO:License:ConfigPackagePage 0720:Name:ConfigPackagePage0720 ?0:C=:C: Package name:ConfigPackagePage;0BD>@<0: Platform:ConfigPackagePage >4C;LPluginConfigPackagePage>@>B:89 >?8A:Short description:ConfigPackagePage"8?:Type:ConfigPackagePage>A8;0==O:Url:ConfigPackagePage5@AVO:Version:ConfigPackagePage !B>@V=:0 <09AB@0 WizardPageConfigPackagePage45?@028;L=0 25@AVO ?0:C=:CInvalid package versionQObject*0720 ?0:C=:C ?>@>6=OPackage name is emptyQObject("8? ?0:C=:C ?>@>6=V9Package type is emptyQObject"52V@=0 ?;0BD>@<0Wrong platformQObjectVWActionsmanager0AB>AC20B8Applymanager")5 =5 @50;V7>20=>Not yet implementedmanager&#?@02;V==O <>4C;O<8Plugmanmanager 7=09B8findmanagerF020=B065==O: %1%, H284:VABL: %2 %3Downloading: %1%, speed: %2 %3plugDownloader/AMB/splugDownloader 109B/A bytes/secplugDownloader/AkB/splugDownloaderAB0=>2;5==O: Installing: plugInstaller05?@028;L=89 ?0:C=>:: %1Invalid package: %1 plugInstaller4>B@V1=5 ?5@57020=B065==O! Need restart! plugInstaller840;5==O: Removing: plugInstallerJ5<>6;82> @>7?0:C20B8 0@EV2: %1 4> %2#Unable to extract archive: %1 to %2 plugInstaller@5<>6;82> 2AB0=>28B8 ?0:C=>:: %1Unable to install package: %1 plugInstaller85<>6;82> 2V4:@8B8 0@EV2: %1Unable to open archive: %1 plugInstallert5<>6;82> >=>28B8 ?0:C=>: %1: 2AB0=>2;5=0 25@AVO T =>2VH>N7Unable to update package %1: installed version is later plugInstallerRC2030: A?@>10 ?5@570?8AC VA=CNG8E D09;V2!,warning: trying to overwrite existing files! plugInstallerAB0=>28B8InstallplugItemDelegate840;8B8RemoveplugItemDelegate52V4><>UnknownplugItemDelegate=>28B8UpgradeplugItemDelegate2AB0=>2;5=> installedplugItemDelegateisDowngradableisDowngradableplugItemDelegateisInstallable isInstallableplugItemDelegateisUpgradable isUpgradableplugItemDelegate&5@C20==O ?0:C=:0<8Manage packagesplugManVWActions plugManager!:0AC20B8 7<V=8Revert changes plugManager.=>28B8 A?8A>: ?0:C=:V2Update packages list plugManager=>28B8 2A5 Upgrade all plugManager0:C=:8PackagesplugPackageModel>5?@028;L=89 ?0:C=>: 1078 40=8EBroken package databaseplugXMLHandlerj5<>6;82> ?@>G8B0B8 107C 40=8E. 5@52V@B5 20HV ?@020.,Can't read database. Check your pesmissions.plugXMLHandler.5<>6;82> 2V4:@8B8 D09;Unable to open fileplugXMLHandler45<>6;82> 2AB0=>28B8 2<VABUnable to set contentplugXMLHandler25<>6;82> 70?8A0B8 C D09;Unable to write fileplugXMLHandler.=5<>6;82> 2V4:@8B8 D09;unable to open fileplugXMLHandler4=5<>6;82> 2AB0=>28B8 2<VABunable to set contentplugXMLHandler<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">!?8A>: 475@:0;</span></p></body></html>

Mirror list

plugmanSettingsB<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">@>AB5 C?@02;V==O @>7H8@5==O<8 qutIM.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">>=B0:B8: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009</span></p></body></html>

simple qutIM extentions manager.

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com


2008-2009

plugmanSettings@> <>4C;LAboutplugmanSettings >40B8AddplugmanSettings?8A DescriptionplugmanSettings $>@<0FormplugmanSettings 0720NameplugmanSettings")5 =5 @50;V7>20=>Not yet implementedplugmanSettings0;0HBC20==OSettingsplugmanSettings>A8;0==OUrlplugmanSettings3@C?8 ?0:C=:V2group packagesplugmanSettings ) , qutim-0.2.0/languages/uk_UA/binaries/mrim.qm0000755000175000017500000005720611241356617022410 0ustar euroelessareuroelessarT9VTMYa@SZ,,PZFQ/^h,rj: !J/ OjZD Z.Z =(~n &N'L1w 5 SkP,NqdL<!L#n4 6}aBO\PlP2PzX. NQƨ R0Nf#0)-DY-D?E_V0oN"*Hdsߒ[ߒ D4S)$yŽj8d=- Z)O6. :ORtR[0bC`>m7wiF~l BDa.D8.CRq#fuGgGrȳHJ:QdɠI54.I N 0 J =R" t7J> yStQ q&  8 qJ ? ;) W~ "< "A! $7z9 4 9̡R C f H hE %T : > >(c >D 0 He  HeC6 X-0 Ty Y z;v "Ea -zE :E >'z R zZ Y, h^/6 R7 s% AL[ 0E d( '1#zF$t.t/vt8/u+/Ӆ Ӆ::(A)^k7m3"|@Cu V)iTr8 225;8 A:@8=L:C =5?@028;L=> 01> 70;8H8;8 ?>;5 ?>@>6=V<!(Email you entered is not valid or empty!AddContactWidget"5:>@5:B=89 emailIncorrect emailAddContactWidget >40B8AddAddContactWidgetClass0>40B8 :>=B0:B 4> A?8A:CAdd contact to listAddContactWidgetClass >40B8 4> 3@C?8: Add to group:AddContactWidgetClass4>HB>20 A:@8=L:0 :>=B0:BC:Contact email:AddContactWidgetClassV: :>=B0:BC:Contact nickname:AddContactWidgetClass><0H=V9:Home:AddNumberWidget>1V;L=89:Mobile:AddNumberWidget "5;5D>==V =><5@8 Phone numbersAddNumberWidget15@53B8SaveAddNumberWidget >1>G89:Work:AddNumberWidgetFContactDetails'MContactDetails5<0T 020B0@C No avatarContactDetails <2V:>ContactDetailsClass"<45=L =0@>465==O> ContactDetailsClass<email>ContactDetailsClass&<l<VAF5 ?@>6820==O>ContactDetailsClass <V<'O>ContactDetailsClass <=V:> ContactDetailsClass<AB0BL>ContactDetailsClass<?@V728I5> ContactDetailsClass<7=0: 7>4V0:C>ContactDetailsClassV:AgeContactDetailsClass 20B0@AvatarContactDetailsClass5=L =0@>465==OBirthdayContactDetailsClass0:@8B8CloseContactDetailsClass0=V :>=B0:BCContact detailsContactDetailsClass E-MailE-MailContactDetailsClass VAF5 ?@>6820==O Living placeContactDetailsClass<'ONameContactDetailsClassV:NicknameContactDetailsClass5<0T 020B0@C No avatarContactDetailsClassA>18ABV 40=V Personal dataContactDetailsClass !B0BLSexContactDetailsClass@V728I5SurnameContactDetailsClass=>28B8UpdateContactDetailsClass=0: 7>4V0:C Zodiac signContactDetailsClass1;V:>289 70?8AAccount EditAccount'T4=0==O Connection EditAccountX 5403C20B8 =0;0HBC20==O >1;V:>2>3> 70?8AC %1Edit %1 account settings EditAccount4 5403C20B8 >1;V:>289 70?8A Edit account EditAccountH8:>@8AB>2C20B8 =0;0HBC20==O ?@>DV;NUse profile settings EditAccount@89=OB8AcceptFileTransferRequestWidget<815@VBL :C48 715@53B8 D09;(8)Choose location to save file(s)FileTransferRequestWidgetV4E8;8B8DeclineFileTransferRequestWidget0720 D09;C File nameFileTransferRequestWidget<0?8B =04A8;0==O D09;V2 2V4 %1File transfer request from %1FileTransferRequestWidget$09;(8):File(s):FileTransferRequestWidget $>@<0FormFileTransferRequestWidgetV4:From:FileTransferRequestWidget  >7<V@SizeFileTransferRequestWidget"030;L=89 @>7<V@: Total size:FileTransferRequestWidget/sec/secFileTransferWidget!:0AC20B8CancelFileTransferWidget0:@8B8CloseFileTransferWidgetN0:@8B8 2V:=> ?VA;O 7025@H5==O ?5@540GV&Close window after tranfer is finishedFileTransferWidget@>1;5=>!Done!FileTransferWidget>B>2>:Done:FileTransferWidget >7<V@ D09;C: File size:FileTransferWidget&1<V= D09;0<8 7: %1File transfer with: %1FileTransferWidget0720 D09;C: Filename:FileTransferWidget $>@<0FormFileTransferWidget$@89<0==O D09;C...Getting file...FileTransferWidget@>9H;> G0AC: Last time:FileTransferWidgetV4:@8B8OpenFileTransferWidget 0;8H8;>AL G0AC:Remained time:FileTransferWidget&04A8;0==O D09;C...Sending file...FileTransferWidget(284:VABL:Speed:FileTransferWidget !B0=:Status:FileTransferWidgetGV:C20==O... Waiting...FileTransferWidget(A=>2=V =0;0HBC20==OGeneral settingsGeneralSettings(A=>2=V =0;0HBC20==OGeneralSettingsGeneralSettingsLV4=>2;N20B8 AB0= ?@8 70?CA:C ?@>3@0<8%Restore status at application's startGeneralSettings:>:07C20B8 B5;5D>==V :>=B0:B8Show phone contactsGeneralSettingsD>:07C20B8 AB0= 2 A?8A:C :>=B0:BV2 Show status text in contact listGeneralSettingsE-Mail:E-mail:LoginFormClassV:=> 2E>4C LoginFormLoginFormClass0@>;L: Password:LoginFormClass>40B8 :>=B0:B Add contact MRIMClient.>40B8 B5;5D>==89 =><5@Add phone number MRIMClient >40B8 4> A?8A:C Add to list MRIMClient(2B>@870FVN ?@89=OB>"Authorization request accepted by  MRIMClient(2B>@87C20B8 :>=B0:BAuthorize contact MRIMClientL5240;0 >?5@0FVO V7 A?8A:>< :>=B0:BV2!Contact list operation failed! MRIMClient 840;8B8 :>=B0:BDelete contact MRIMClient.8G5@?0=89 ;V<VB 3@C?8!Group limit reached! MRIMClient4=CB@VH=O ?><8;:0 A5@25@0!Internal server error! MRIMClient4040=0 =52V@=0 V=D>@<0FVO!Invalid info provided! MRIMClient,<V=5=> AB0= A:@8=L:8!Mailbox status changed! MRIMClient.>2V4><;5=L 2 A:@8=LFV:Messages in mailbox:  MRIMClient(5@5<VAB8B8 4> 3@C?8 Move to group MRIMClientJ5<0T 4>ABC?=>W 4;O 0A MPOP-A5AVW...+No MPOP session available for you, sorry... MRIMClient25<0T B0:>3> :>@8ABC20G0! No such user! MRIMClient2V4:@8B8 ?>HB>2C A:@8=L:C Open mailbox MRIMClientC4L ;0A:0, 02B>@87C9B5 <5=5 B0 4>409B5 4> 20H>3> A?8A:C :>=B0:BV2. O:CN! >HB0:>Pls authorize and add me to your contact list! Thanks! Email:  MRIMClient*5@59<5=C20B8 :>=B0:BRename contact MRIMClient*>?@>A8B8 02B>@870FVNRequest authorization MRIMClient>HC: :>=B0:BV2Search contacts MRIMClient04VA;0B8 SMSSend SMS MRIMClient^!5@25@ @>7V@202 7'T4=0==O 7 =52V4><8E ?@8G8=...2Server closed the connection for unknown reason... MRIMClient!5@25@ @>7V@202 7'T4=0==O. =H89 :;VT=B 265 ?@0FNT ?V4 F8< ?@>DV;5<!GServer closed the connection. Another client with same login connected! MRIMClientf!5@25@ 70:@82 7'T4=0==O. 2B5=B8DV:0FVO =5 240;0AL!4Server closed the connection. Authentication failed! MRIMClient|5 7=0945=> :>=B0:BV2. !?@>1C9B5 V7 V=H8<8 ?0@0<5B@0<8 ?>HC:C.<0 ?><8;:0!Unknown error! MRIMClient25?@>G8B0=V ?>2V4><;5==O:Unread messages:  MRIMClientT>@8ABC20G %1 ?>402 70?8B =0 02B>@870FVN: %User %1 is requesting authorization:  MRIMClient*>@8ABC20G 265 VA=CT!User already exists! MRIMClient09B BMRIMCommonUtils GBMRIMCommonUtils KBMRIMCommonUtils MBMRIMCommonUtils >6;8289 :;VT=B:Possible client: MRIMContact"5@59<5=C20==O %1 Renaming %1 MRIMContactp8 =5 <>65B5 ?5@59<5=C20B8 :>=B0:B ?>:8 28 ?>70 <5@565N!0You can't rename a contact while you're offline! MRIMContact$"5;5D>==V :>=B0:B8Phone contactsMRIMContactListE-Mail:Email:MRIMLoginWidgetClassMRIMLoginWidgetMRIMLoginWidgetMRIMLoginWidgetClass0@>;L: Password:MRIMLoginWidgetClass&0@0<5B@8 7'T4=0==OConnection settingsMRIMPluginSystem(A=>2=V =0;0HBC20==OGeneral settingsMRIMPluginSystem>1<V= D09;0<8 V7 %1 =5<>6;8289!4File transfer request from %1 couldn't be processed! MRIMProto(DD;09= ?>2V4><;5==OOffline message  MRIMProtoC4L ;0A:0, 02B>@87C9B5 <5=5 B0 4>409B5 4> 20H>3> A?8A:C :>=B0:BV2. O:CN!6Pls authorize and add me to your contact list! Thanks! MRIMProtoC4L-O:89AnyMRIMSearchWidget2VB5=LAprilMRIMSearchWidget!5@?5=LAugustMRIMSearchWidget@C45=LDecemberMRIMSearchWidget NB89FebruaryMRIMSearchWidget V=>G0FemaleMRIMSearchWidget !VG5=LJanuaryMRIMSearchWidget 8?5=LJulyMRIMSearchWidget'5@25=LJuneMRIMSearchWidget'>;>2VG0MaleMRIMSearchWidget5@575=LMarchMRIMSearchWidget"@025=LMayMRIMSearchWidget8AB>?04NovemberMRIMSearchWidget>2B5=LOctoberMRIMSearchWidget5@5A5=L SeptemberMRIMSearchWidget!B@V;5FL The ArcherMRIMSearchWidget "5@578 The BalanceMRIMSearchWidget "5;5FLThe BullMRIMSearchWidget>75@V3 The CapricornMRIMSearchWidget 0:The CrabMRIMSearchWidget 818The FishMRIMSearchWidget52The LionMRIMSearchWidget25=The RamMRIMSearchWidget!:>@?V>= The ScorpionMRIMSearchWidget;87=N:8 The TwinsMRIMSearchWidgetV20 The VirginMRIMSearchWidget>4>;V9The Water-bearerMRIMSearchWidgetL @mail.ru, @list.ru, @bk.ru, @inbox.ru& @mail.ru, @list.ru, @bk.ru, @inbox.ruMRIMSearchWidgetClass11MRIMSearchWidgetClass1010MRIMSearchWidgetClass1111MRIMSearchWidgetClass1212MRIMSearchWidgetClass1313MRIMSearchWidgetClass1414MRIMSearchWidgetClass1515MRIMSearchWidgetClass1616MRIMSearchWidgetClass1717MRIMSearchWidgetClass1818MRIMSearchWidgetClass1919MRIMSearchWidgetClass22MRIMSearchWidgetClass2020MRIMSearchWidgetClass2121MRIMSearchWidgetClass2222MRIMSearchWidgetClass2323MRIMSearchWidgetClass2424MRIMSearchWidgetClass2525MRIMSearchWidgetClass2626MRIMSearchWidgetClass2727MRIMSearchWidgetClass2828MRIMSearchWidgetClass2929MRIMSearchWidgetClass33MRIMSearchWidgetClass3030MRIMSearchWidgetClass3131MRIMSearchWidgetClass44MRIMSearchWidgetClass55MRIMSearchWidgetClass66MRIMSearchWidgetClass77MRIMSearchWidgetClass88MRIMSearchWidgetClass99MRIMSearchWidgetClassV: 2V4: Age from:MRIMSearchWidgetClassC4L-O:89AnyMRIMSearchWidgetClass 5=L =0@>465==O: Birthday:MRIMSearchWidgetClass@0W=0:Country:MRIMSearchWidgetClass 5=L:Day:MRIMSearchWidgetClass E-MailE-MailMRIMSearchWidgetClassVAOFL:Month:MRIMSearchWidgetClass <'O:Name:MRIMSearchWidgetClassV:: Nickname:MRIMSearchWidgetClassl>B0B:0: ?>HC: 4>ABC?=89 BV;L:8 4;O =0ABC?=8E 4><5=V2:5Note: search is available only for following domains:MRIMSearchWidgetClass  09>=:Region:MRIMSearchWidgetClass>HC: :>=B0:BV2Search contactsMRIMSearchWidgetClass$>@<0 ?>HC:C Search formMRIMSearchWidgetClass>(C:0B8 A5@54 :>=B0:BV2 C <5@56VSearch only online contactsMRIMSearchWidgetClass !B0BL:Sex:MRIMSearchWidgetClass$>:07C20B8 020B0@8 Show avatarsMRIMSearchWidgetClass  >7?>G0B8 ?>HC:! Start search!MRIMSearchWidgetClass@V728I5:Surname:MRIMSearchWidgetClass=0: 7>4V0:C:Zodiac:MRIMSearchWidgetClass4>toMRIMSearchWidgetClass @C?0:Group:MoveToGroupWidget5@5<VAB8B8MoveMoveToGroupWidget85@5<VAB8B8 :>=B0:B 4> 3@C?8Move contact to groupMoveToGroupWidget5@5<VAB8B8!Move!MoveToGroupWidget>25 V<'O: New name: RenameWidget 0@074OK RenameWidget5@59<5=C20B8Rename RenameWidget*5@59<5=C20B8 :>=B0:BRename contact RenameWidgetB@8<C20G: Reciever: SMSWidget04VA;0B8 SMSSend SMS SMSWidget04VA;0B8!Send! SMSWidget"5AB>20 <VB:0 TextLabel SMSWidgetFSearchResultsWidget'MSearchResultsWidget>40B8 :>=B0:B Add contactSearchResultsWidgetClassV:AgeSearchResultsWidgetClass E-MailE-MailSearchResultsWidgetClass=D>@<0FVOInfoSearchResultsWidgetClass<'ONameSearchResultsWidgetClassV:NickSearchResultsWidgetClass" 57C;LB0B8 ?>HC:CSearch resultsSearchResultsWidgetClass !B0BLSexSearchResultsWidgetClass@V728I5SurnameSearchResultsWidgetClass.@>:AV 70 70<>2GC20==O< Default proxySettingsWidget&0@0<5B@8 7'T4=0==OConnection paramsSettingsWidgetClassMRIM E>AB:MRIM server host:SettingsWidgetClass>@B A5@25@0:MRIM server port:SettingsWidgetClass0@>;L: Password:SettingsWidgetClass%>AB ?@>:AV: Proxy host:SettingsWidgetClass>@B ?@>:AV: Proxy port:SettingsWidgetClass"8? ?@>:AV: Proxy type:SettingsWidgetClass>@8ABC20G:Proxy username:SettingsWidgetClass$V465B =0;0HBC20=LSettingsWidgetSettingsWidgetClass,8:>@8AB>2C20B8 ?@>:AV Use proxySettingsWidgetClass?? StatusManager>;>4=89Angry StatusManagerC?0Ass StatusManager 4><0At home StatusManager0 @>1>BVAt work StatusManagerV4V9H>2Away StatusManager82>Beer StatusManager020Coffee StatusManager CE=OCooking StatusManager;000000A!Coool! StatusManager>652V;;O %)Crazy %) StatusManagerV2<VAOFLCrescent StatusManager 52V==OCrying StatusManager5?@5AVO Depression StatusManager5 BC@1C20B8Do Not Disturb StatusManager 0G:0Duck StatusManager;89Evil StatusManager$48 ?V4 B@8 G>@B8! F*ck you! StatusManagerC;OFiga StatusManager$>B>289 4> @>7<>28 Free For Chat StatusManager>70Goat StatusManager !5@F5Heart StatusManager %V??VHippy StatusManagerV<Horns StatusManager/ :@5254:>! I'm a shrimp! StatusManager/ GC689! I'm an alien! StatusManager/ 2B@0G5=89 :( I'm lost :( StatusManager C=V25@VIn the university StatusManager52848<89 Invisible StatusManager BC;ECKtulhu StatusManagerLOLLOL StatusManager<Lunch StatusManager C78:0Music StatusManager0T 2<5@B8!! Must die!! StatusManager>70 <5@565NOffline StatusManager0 7CAB@VGVOn the meeting StatusManager0 4@>BV On the phone StatusManager <5@56VOnline StatusManager5GV@:0!Party! StatusManager3@8Playing StatusManager  0:5B0Rocket StatusManager (:>;0School StatusManager >?0B0Shovel StatusManager %2>@89Sick StatusManager '5@5?Skull StatusManager!>=Sleeping StatusManager#A<VH:0Smiley StatusManager0;V==OSmoke StatusManager V;:0Squirrel StatusManager482>20=89 Surprised StatusManager>20Tongue StatusManager "C0;5BWC StatusManager@>3C;O=:0Walking StatusManager 5 O? Where am I? StatusManager*# 20A =52V@=89 =><5@!You have the wrong number! StatusManager2V<:=CB8 Xtraz Enable Xtraz XtrazSettings $>@<0Form XtrazSettings=D>@<0FVO: Information: XtrazSettings0:C=:8 Xtraz:Xtraz packages: XtrazSettings"0?8B 02B>@870FVWAuthorization requestauthwidgetClass2B>@87C20B8 AuthorizeauthwidgetClassV4E8;8B8RejectauthwidgetClass ) , qutim-0.2.0/languages/uk_UA/binaries/icq.qm0000755000175000017500000023653311240775420022216 0ustar euroelessareuroelessarSV =֍ِ$ِr&5(5(c6?7gb8%ƅ8%8)ƽF'H5PVEVEsc~ҏfPl:DpDV`py!ȵ : p}& p}e 8>^$ #d(%n+0ʫ4`G4R5x5`Y60iR70y808GHN<Hw9HHIABJ J J+KJ6VJ6K KdO\KʘKtTL7LMy^M5_M6_~MMn?,M JMAM/NNOOjzPOjzr[PJP~JP9Q1QRQSyĽSSSSĘUiSĘTtTT|OTTTЃUq7@V@mVԊVA$V:GVeV̌:WizIWiztWWxWt?YwkZgZg ZvBZlZZ~[D0[dE\F\u\\>]p^c_þe*g3.hnzi pX"w7xo(,Ӯw!,Ȅ6/.Z>RAU??aјg֍~$5*ںd<"hNIL+Fp49A&&:&.N|I?Dx}O yQhETT+z:&:Q0 9?27'7!!:-D+@2bEAH@@MYvK.t46g| E DfIkkB 3x8A0j Z3ƾhL7ȡ ~ ~u K$j6o~6o~q7H q6e& 6e8%8%,jP@8V@G>L؄VĘܓ~k軕l:/ /(Aqs,AMG<rSȡжWuhn4+"f%f g Jj~5&~(+b+b,.Q0 .1"4_8(Ŝ8`#8`<s=O܎=L:FG9G4(HJ0QNtT TVe0EV=hH1ԽlcodoA^thv(D v0C{_2OA j b.umY293N%3Xl{hs-hsS8)*zQiaf4hfw ~Fk6Cx56pGDP+5<0U .j$ۼZ%פh~U^8~ TW  ^*9-D7=1K6O̞@sDHKiZb`QoduR|eRfU9Xfugg9hIq$qumZ=w~/^pI0Ol3PlpıRBJHzA‰ZêՅKʸ 4^:4.S4. kS6hS6Zjjrl, 1H \1 ~ ' 1 94gǥ  7d ۠ ~L_ < SH jU j Ľ,ވ ȏ. ȣcz <e ʟ.ۍ 'M   ׭j[_ ۊ 8; ^ ! 3E Lu %io Ic JVd4 Ndt Rd Td Ve4 wet {e {e z, 'q0 , 1)1 7YG2 CQ F B Ws cj c dh di# f gH hPB k# l[ wǹ wǹB } c %- %' 4 85 /F :R > > >s K J1 *1 0 0I @k 8o | 8 LJq Ț Ce . Tyk yM dwO ۰ F + F H (} b1 L Y 7Ú ) ]M NM YNC 0% Sn Snty d#k dg S! S #* # 0EaMY 2. B3؏ CU, R? TdB a d ntT s$ vI! vI p N  ˫ Mɟ W%( W {" ׽ C& "  m mg m m nB n n o of /) j Džng MY M # 4: T s 2& 2r Ap`~ As` Ata AuaP Ava fo E E E T 0H P,J P0 u;O JW %z '1 (c (l -a / 5-' >Pg{ M} NT N0} R͊ R[ cP fi j tIF = C Cb ޔR a e H3=" 4.T O ds hC \ W $ bso S΂ c - Im Imv3 C5 C; (: Pw  uTS  L dq^u _ύ &T1+ 4~> 4~> J 8 Z O Z~ `>sF `>sS cB dt+ ls{ o;] o;^ o;^; qLM qL 8Q_D Qc 7 < Ĭ Ĭx < | ƍ4 8 8 A# mX K<#b^)h!ru#$h#Veh1'Sh+b L+bn7drl7X9G:K~4-ei E^#WPCG89NjVrE|~ʭ%%ʭ%^s G C> xjGە(P&RXasyax IfBgkBBkWm3.m3t9(J&T$G&T;GiQVN +i O 5403C20==O %1 Editing %1AccountEditDialogB$>@<0 4>4020==O >1;V:>28E 70?8AV2AddAccountFormAddAccountFormClass0@>;L: Password:AddAccountFormClass15@53B8 ?0@>;L Save passwordAddAccountFormClass#:UIN:AddAccountFormClass*0;0HBC20==O :>=B0:BCContactSettingsContactSettingsClassv>:07C20B8 V:>=:C ?@8ACB=>ABV :>=B0:BC 2 A?8A:C V3=>@C20==O,Show "ignore" icon if contact in ignore listContactSettingsClassp>:07C20B8 V:>=:C ?@8ACB=>ABV :>=B0:BC 2 A?8A:C =57@OG8E2Show "invisible" icon if contact in invisible listContactSettingsClassl>:07C20B8 V:>=:C ?@8ACB=>ABV :>=B0:BC 2 A?8A:C 7@OG8E.Show "visible" icon if contact in visible listContactSettingsClassL>:07C20B8 :C;L:C I0ABO/4=O =0@>465==OShow birthday/happy iconContactSettingsClass.>:07C20B8 V:>=:C AB0=CShow contact xStatus iconContactSettingsClassR>:07C20B8 B5:AB AB0=C 2 A?8A:C :>=B0:BV2+Show contact's xStatus text in contact listContactSettingsClass:>:07C20B8 V:>=:C 02B>@870FVWShow not authorized iconContactSettingsClass04VA;0B8 D09; Send file FileTransfer6<b>50:B82=89 7:</b> %1<br>Away since: %1
QObjectF<b>>2=VH=O ip:</b> %1.%2.%3.%4<br>#External ip: %1.%2.%3.%4
QObjectH<b>=CB@VH=O ip:</b> %1.%2.%3.%4<br>#Internal ip: %1.%2.%3.%4
QObject8<b>54>ABC?=89 7:</b> %1<br>N/A since: %1
QObjectR<b>'0AC 2 <5@56V:</b> %1d %2h %3m %4s<br>'Online time: %1d %2h %3m %4s
QObjectB<b>>6;8289 :;VT=B:</b> %1</font>!Possible client: %1
QObject<<b>>6;8289 :;VT=B:</b> %1<br>Possible client: %1
QObject<<b>0B0 @5TAB@0FVW:</b> %1<br>Reg. date: %1
QObject:<b>EV4 74V9A=5=>:</b> %1<br>Signed on: %1
QObjectP<font size='2'><b>50:B82=89:</b> %1<br>(Away since: %1
QObjectr<font size='2'><b>>2=VH=O ip:</b> %1.%2.%3.%4<br></font>9External ip: %1.%2.%3.%4
QObjectt<font size='2'><b>=CB@VH=O ip:</b> %1.%2.%3.%4<br></font>9Internal ip: %1.%2.%3.%4
QObjectt<font size='2'><b>AB0==V9 @07 1C2 C <5@56V:</b> %1</font>,Last Online: %1QObjectR<font size='2'><b>54>ABC?=89:</b> %1<br>'N/A since: %1
QObjectp<font size='2'><b>'0AC 2 <5@56V:</b> %1d %2h %3m %4s<br>6Online time: %1d %2h %3m %4s
QObjectAV D09;8 (*) All files (*)QObject>=B0:B8ContactsQObjectICQ >A=>2=V ICQ GeneralQObjectV4:@8B8 D09; Open FileQObject !B0=8StatusesQObject2B>@87C20B8 AuthorizeacceptAuthDialogClassV4E8;8B8DeclineacceptAuthDialogClass@V0;>3 ?V4B25@465==O 02B>@870FVWacceptAuthDialogacceptAuthDialogClass4:A?5@B=V =0;0HBC20==O AOLAOL expert settings accountEdit0AB>AC20B8Apply accountEdit2B5=B8DV:0FVOAuthentication accountEdit!:0AC20B8Cancel accountEdit"><5@ :><?V;OFVW:Client build number: accountEdit6><5@ 48AB@81CB820 :;VT=B0:Client distribution number: accountEditID-:>4 :;VT=B0:Client id number: accountEditID :;VT=B0: Client id: accountEdit,Lesser-25@AVO :;VT=BC:Client lesser version: accountEdit.06>@=0 25@AVO :;VT=BC:Client major version: accountEdit.V=>@=0 25@AVO :;VT=BC:Client minor version: accountEdit $>@<0Form accountEditHTTPHTTP accountEdit %>AB:Host: accountEdit 0;0HBC20==O ICQ Icq settings accountEdit&15@V30B8 7'T4=0==OKeep connection alive accountEditR@>A;CE>2C20B8 ?>@B =0 =04A8;0==O D09;V2:Listen port for file transfer: accountEdit 5<0TNone accountEdit 0@074OK accountEdit0@>;L: Password: accountEdit >@B:Port: accountEdit @>:AVProxy accountEdit,'T4=0==O G5@57 ?@>:AVProxy connection accountEditSOCKS 5SOCKS 5 accountEdit15@53B8 ?0@>;L Save password accountEdit57?5G=89 2EV4 Secure login accountEditSeq first id: Seq first id: accountEdit !5@25@Server accountEdit"8?:Type: accountEditV:: User name: accountEditlogin.icq.com login.icq.com accountEdit>40B8 %1Add %1addBuddyDialog5@5<VAB8B8MoveaddBuddyDialog >40B8AddaddBuddyDialogClass @C?0:Group:addBuddyDialogClass>:0;L=5 V<'O: Local name:addBuddyDialogClass>40B8 020B0@addBuddyDialogaddBuddyDialogClass <'O:Name:addRenameDialogClass 0@074OKaddRenameDialogClass>25@=CB8ALReturnaddRenameDialogClass*V0;>3 ?5@59<5=C20==OaddRenameDialogaddRenameDialogClassV;L:VABL :>@8ABC20GV2 ?V4'T4=0=8E V7 FVTW IP-04@5A8 ?5@528I8;0 <0:A8<0;L=89 @575@2K The users num connected from this IP has reached the maximum (reservation)closeConnectionD=H89 :;VT=B 22V9H>2 7 F8< =><5@><&Another client is loggin with this uincloseConnection.>30=89 AB0= 1078 40=8EBad database statuscloseConnection5<>6;82> 70@5TAB@C20B8AL 2 <5@56V ICQ. 5@5?V4'T4=0==O G5@57 :V;L:0 728;8==Can't register on the ICQ network. Reconnect in a few minutescloseConnection$><8;:0 7 'T4=0==OConnection ErrorcloseConnection:><8;:0 72'O7:C 7 107>N 40=8E DB link errorcloseConnection0><8;:0 =04A8;0==O 4>  DB send errorcloseConnection2840;5=89 >1;V:>289 70?8ADeleted accountcloseConnection>"5@<V= >1;V:>2>3> 70?8AC 289H>2Expired accountcloseConnection45?@028;L=89 =V: G8 ?0@>;LIncorrect nick or passwordcloseConnectiont=CB@VH=O ?><8;:0 :;VT=B0 (=5?@028;L=89 22V4 02B>@870B>@C)/Internal client error (bad input to authorizer)closeConnection"=CB@VH=O ?><8;:0Internal errorcloseConnection(5?@028;L=89 SecurIDInvalid SecurIDcloseConnection85?@028;L=89 >1;V:>289 70?8AInvalid accountcloseConnection65?@028;L=V ?>;O 1078 40=8EInvalid database fieldscloseConnection45?@028;L=89 =V: G8 ?0@>;LInvalid nick or passwordcloseConnection40@>;L V =V: =5 71V30NBLAOMismatch nick or passwordcloseConnection65<0T 4>ABC?C 4> 1078 40=8ENo access to databasecloseConnection6!;C610 B8<G0A>2> =54>ABC?=0Service temporarily offlinecloseConnection6!;C610 B8<G0A>2> =54>ABC?=0Service temporarily unavailablecloseConnection@8AB>2CTB5 AB0@C 25@AVN ICQ.  5:><5=4>20=> >=>28B8AL:You are using an older version of ICQ. Upgrade recommendedcloseConnectionl8 28:>@8AB>2CTB5 AB0@C 25@AVN ICQ. >B@V1=5 >=>2;5==O7You are using an older version of ICQ. Upgrade requiredcloseConnection.%1 28EV4=5 ?>2V4><;5==O%1 away messagecontactListTreeD%1 G8B0T 20H5 28EV4=5 ?>2V4><;5==O%1 is reading your away messagecontactListTree"%1 G8B0T 20H AB0=#%1 is reading your x-status messagecontactListTree*>2V4><;5==O AB0=C %1%1 xStatus messagecontactListTree00?8B 02B>@870FVW 2V4 %1Accept authorization from %1contactListTree4>40B8 4> A?8A:C :>=B0:BV2Add to contact listcontactListTree8>40B8 4> A?8A:C V3=>@>20=8EAdd to ignore listcontactListTree2>40B8 4> A?8A:C =57@OG8EAdd to invisible listcontactListTree.>40B8 4> A?8A:C 7@OG8EAdd to visible listcontactListTree4>40B8/7=09B8 :>@8ABC20GV2Add/find userscontactListTree<>72>;8B8 :>=B0:BC 4>40B8 <5=5Allow contact to add mecontactListTree42B>@870FVO ?@>9H;0 CA?H=>Authorization acceptedcontactListTree*2B>@870FVO 2V4E8;5=>Authorization declinedcontactListTree"0?8B 02B>@870FVWAuthorization requestcontactListTree<V=8B8 ?0@>;LChange my passwordcontactListTree0=V :>=B0:BCContact detailscontactListTreeH>=B0:B =5 ?V4B@8<CT ?5@540GC D09;V2&Contact does not support file transfercontactListTree"5@52V@8B8 AB0BCAContact status checkcontactListTree2!:>?VN20B8 =><5@ :>=B0:BCCopy UIN to clipboardcontactListTree!B2>@8B8 3@C?C Create groupcontactListTree840;8B8 %1 Delete %1contactListTree 840;8B8 :>=B0:BDelete contactcontactListTree<840;8B8 V7 A?8A:C V3=>@>20=8EDelete from ignore listcontactListTree6840;8B8 V7 A?8A:C =57@OG8EDelete from invisible listcontactListTree2840;8B8 V7 A?8A:C 7@OG8EDelete from visible listcontactListTree840;8B8 3@C?C Delete groupcontactListTree(840;8B8 3@C?C "%1"?Delete group "%1"?contactListTree$ 5403C20B8 =>B0B:8 Edit notecontactListTree&AB>@VO ?>2V4><;5=LMessage historycontactListTree$5@5<VAB8B8 %1 4>: Move %1 to:contactListTree(5@5<VAB8B8 4> 3@C?8 Move to groupcontactListTree!B2>@8B8 3@C?C New groupcontactListTree"0@>;L =5 7<V=5=>Password is not changedcontactListTree,#A?VH=> 7<V=5=> ?0@>;L Password is successfully changedcontactListTreeA>18ABV A?8A:8 Privacy listscontactListTree<@>G8B0B8 28EV4=5 ?>2V4><;5==ORead away messagecontactListTree@>G8B0B8 AB0=Read custom statuscontactListTreeL840;8B8 A515 V7 9>3> A?8A:C :>=B0:BV2!Remove myself from contact's listcontactListTree*5@59<5=C20B8 :>=B0:BRename contactcontactListTree&5@59<5=C20B8 3@C?C Rename groupcontactListTree,04VA;0B8 ?>2V4><;5==O Send messagecontactListTree$04VA;0B8 1030BL>< Send multiplecontactListTree8>:070B8/@5403C20B8 <>W 40=VView/change my detailscontactListTree0A 4>40;8You were addedcontactListTree 24><0at homecontactListTree=0 @>1>BVat workcontactListTree >1V40T having lunchcontactListTree45?@5ACT in depressioncontactListTree2V4V9H>2is awaycontactListTree=5 BC@1C20B8is dndcontactListTree7;8BLAOis evilcontactListTree<>65 @>7<>2;OB8is free for chatcontactListTree=52848<89 is invisiblecontactListTree=54>ABC?=89is n/acontactListTree709=OB89 is occupiedcontactListTree?>70 <5@565N is offlinecontactListTree2 <5@56V is onlinecontactListTree??customStatusDialog >;>4AngrycustomStatusDialogBrowsingcustomStatusDialog !?@028BusinesscustomStatusDialog020CoffeecustomStatusDialog@>E>;>4=>ColdcustomStatusDialog 52V==OCryingcustomStatusDialog82> Drinking beercustomStatusDialog"@0?570EatingcustomStatusDialog !B@0EFearcustomStatusDialog %2>@VN Feeling sickcustomStatusDialog3@8GamingcustomStatusDialog >72038 Having funcustomStatusDialog B@0A?>@BV In tansportcustomStatusDialog C78:0Listening to musiccustomStatusDialog>E0==OLovecustomStatusDialogCAB@VGMeetingcustomStatusDialog BC0;5BVOn WCcustomStatusDialog0 4@>BV On the phonecustomStatusDialog PRO 7PRO 7customStatusDialog5GV@:0PartycustomStatusDialog V:=V:PicniccustomStatusDialog'8B0==OReadingcustomStatusDialog!5:ASexcustomStatusDialog!B@V;ONShootingcustomStatusDialog>:C?:8ShoppingcustomStatusDialog!>=SleepingcustomStatusDialog0;V==OSmokingcustomStatusDialog !?>@BSportcustomStatusDialog02G0==OStudyingcustomStatusDialog!5@DV=3SurfingcustomStatusDialog>4=V ?@>F54C@8 Taking a bathcustomStatusDialog >74C<8ThinkingcustomStatusDialog B><0TiredcustomStatusDialogCB8 G8 =5 1CB8To be or not to becustomStatusDialog01V@ B5:ABV2TypingcustomStatusDialog(5@53;O4 B5;5?5@540G Watching TVcustomStatusDialog  >1>B0WorkingcustomStatusDialog!:0AC20B8CancelcustomStatusDialogClass81@0B8ChoosecustomStatusDialogClass81@0B8 AB0= Custom statuscustomStatusDialogClass6C;L:0 I0ABO/4=O =0@>465==OSet birthday/happy flagcustomStatusDialogClassj>=B0:B 1C45 2840;5=89. 8 2?52=5=V, I> E>G5B5 FL>3>?&Contact will be deleted. Are you sure?deleteContactDialogClassJ840;8B8 VAB>@VN ?>2V4><;5=L :>=B0:BCDelete contact historydeleteContactDialogClassVNodeleteContactDialogClass"0:YesdeleteContactDialogClass 840;8B8 :>=B0:BdeleteContactDialogdeleteContactDialogClassAV D09;8 (*) All files (*)fileRequestWindow15@53B8 D09; Save FilefileRequestWindow@89=OB8AcceptfileRequestWindowClassV4EE8;8B8DeclinefileRequestWindowClass 0720: File name:fileRequestWindowClass(0?8B ?5@540GV D09;C File requestfileRequestWindowClass >7<V@: File size:fileRequestWindowClassV4:From:fileRequestWindowClassIP:IP:fileRequestWindowClass09B BfileTransferWindow 09B GBfileTransferWindow :09B KBfileTransferWindow 09B MBfileTransferWindow/s/sfileTransferWindow@89=OB>AcceptedfileTransferWindowBV4E8;5=> 2V440;5=8< :>@8ABC20G5<Declined by remote userfileTransferWindow@>1;5=>DonefileTransferWindow$5@540G0 D09;C: %1File transfer: %1fileTransferWindow@89><... Getting...fileTransferWindow04A8;0==O... Sending...fileTransferWindowGV:C20==O... Waiting...fileTransferWindow1/11/1fileTransferWindowClass!:0AC20B8CancelfileTransferWindowClass>B>G=89 D09;: Current file:fileTransferWindowClass>B>2>:Done:fileTransferWindowClass >7<V@ D09;C: File size:fileTransferWindowClass5@540G0 D09;C File transferfileTransferWindowClass $09;8:Files:fileTransferWindowClass@>9H;> G0AC: Last time:fileTransferWindowClassV4:@8B8OpenfileTransferWindowClass 0;8H8;>AL G0AC:Remained time:fileTransferWindowClassIP 2V4?@02=8:0: Sender's IP:fileTransferWindowClass(284:VABL:Speed:fileTransferWindowClass !B0=:Status:fileTransferWindowClass>40B:>2> Additional icqAccount 4><0At Home icqAccount0 @>1>BVAt Work icqAccountV4V9H>2Away icqAccount 0;0HBC20B8 AB0= Custom status icqAccount5 BC@1C20B8DND icqAccount5?@5AVO Depression icqAccount;89Evil icqAccount&>B>289 4;O @>7<>28 Free for chat icqAccount52848<89 Invisible icqAccount$52848<89 4;O 2AVEInvisible for all icqAccountH52848<89 BV;L:8 4;O A?8A:C =57@OG8E!Invisible only for invisible list icqAccount<Lunch icqAccount54>ABC?=89NA icqAccount09=OB89Occupied icqAccount>70 <5@565NOffline icqAccount <5@56VOnline icqAccountA>18AB89 AB0=Privacy status icqAccount 848<89 4;O 2AVEVisible for all icqAccountF848<89 BV;L:8 4;O A?8A:C :>=B0:BV2Visible only for contact list icqAccount@848<89 BV;L:8 4;O A?8A:C 7@OG8EVisible only for visible list icqAccount>G8B0T 0H5 28EV4=5 ?>2V4><;5==Ois reading your away message icqAccount>G8B0T ?>2V4><;5==O 0H>3> AB0=C is reading your x-status message icqAccount--icqSettingsClassR=>?:0 >1;V:>2>3> 70?8AC B0 V:>=:0 2 B@5WAccount button and tray iconicqSettingsClass >7H8@5=VAdvancedicqSettingsClassApple Roman Apple RomanicqSettingsClass0'T4=C20B8AL ?@8 70?CA:CAutoconnect on starticqSettingsClassBig5Big5icqSettingsClassBig5-HKSCS Big5-HKSCSicqSettingsClassID :;VT=B0: Client ID:icqSettingsClass6!?8A>: <>6;82>AB59 :;VT=B0:Client capability list:icqSettingsClassd>4C20==O (1V;LHVABL :;VT=BV2 28:>@8AB>2CT UTF-8):>Codepage( note that online messages use utf-8 in most cases ):icqSettingsClass<5 =04A8;0B8 70?8B8 =0 020B0@8 Don't send requests for avatartsicqSettingsClass EUC-JPEUC-JPicqSettingsClass EUC-KREUC-KRicqSettingsClassGB18030-0 GB18030-0icqSettingsClassIBM 850IBM 850icqSettingsClassIBM 866IBM 866icqSettingsClassIBM 874IBM 874icqSettingsClassICQ 2002/2003aICQ 2002/2003aicqSettingsClassICQ 2003b Pro ICQ 2003b ProicqSettingsClass ICQ 5ICQ 5icqSettingsClassICQ 5.1ICQ 5.1icqSettingsClass ICQ 6ICQ 6icqSettingsClassICQ Lite 4 ICQ Lite 4icqSettingsClassISO 2022-JP ISO 2022-JPicqSettingsClassISO 8859-1 ISO 8859-1icqSettingsClassISO 8859-10 ISO 8859-10icqSettingsClassISO 8859-13 ISO 8859-13icqSettingsClassISO 8859-14 ISO 8859-14icqSettingsClassISO 8859-15 ISO 8859-15icqSettingsClassISO 8859-16 ISO 8859-16icqSettingsClassISO 8859-2 ISO 8859-2icqSettingsClassISO 8859-3 ISO 8859-3icqSettingsClassISO 8859-4 ISO 8859-4icqSettingsClassISO 8859-5 ISO 8859-5icqSettingsClassISO 8859-6 ISO 8859-6icqSettingsClassISO 8859-7 ISO 8859-7icqSettingsClassISO 8859-8 ISO 8859-8icqSettingsClassISO 8859-9 ISO 8859-9icqSettingsClassIscii-Bng Iscii-BngicqSettingsClassIscii-Dev Iscii-DevicqSettingsClassIscii-Gjr Iscii-GjricqSettingsClassIscii-Knd Iscii-KndicqSettingsClassIscii-Mlm Iscii-MlmicqSettingsClassIscii-Ori Iscii-OriicqSettingsClassIscii-Pnj Iscii-PnjicqSettingsClassIscii-Tlg Iscii-TlgicqSettingsClassIscii-Tml Iscii-TmlicqSettingsClassJIS X 0201 JIS X 0201icqSettingsClassJIS X 0208 JIS X 0208icqSettingsClass KOI8-RKOI8-RicqSettingsClass KOI8-UKOI8-UicqSettingsClassMac ICQMac ICQicqSettingsClassA=>2=VMainicqSettingsClassMuleLao-1 MuleLao-1icqSettingsClass"5@AVO ?@>B>:>;C:Protocol version:icqSettingsClassQIP 2005QIP 2005icqSettingsClassQIP Infium QIP InfiumicqSettingsClass ROMAN8ROMAN8icqSettingsClassH5@5?V4'T4=C20B8AO ?VA;O @>7'T4=0==OReconnect after disconnecticqSettingsClass:15@V30B8 <V9 AB0= ?@8 28E>4VSave my status on exiticqSettingsClassShift-JIS Shift-JISicqSettingsClassB>:07C20B8 V:>=:C 281@0=>3> AB0=CShow custom status iconicqSettingsClass>>:07C20B8 281@0=5 >AB0==V9 @07Show last choosenicqSettingsClass>>:07C20B8 >A=>2=C V:>=:C AB0=CShow main status iconicqSettingsClassTIS-620TIS-620icqSettingsClass TSCIITSCIIicqSettingsClass UTF-16UTF-16icqSettingsClassUTF-16BEUTF-16BEicqSettingsClassUTF-16LEUTF-16LEicqSettingsClass UTF-8UTF-8icqSettingsClassWINSAMI2WINSAMI2icqSettingsClassWindows-1250 Windows-1250icqSettingsClassWindows-1251 Windows-1251icqSettingsClassWindows-1252 Windows-1252icqSettingsClassWindows-1253 Windows-1253icqSettingsClassWindows-1254 Windows-1254icqSettingsClassWindows-1255 Windows-1255icqSettingsClassWindows-1256 Windows-1256icqSettingsClassWindows-1257 Windows-1257icqSettingsClassWindows-1258 Windows-1258icqSettingsClass 0;0HBC20==O ICQ icqSettingsicqSettingsClass qutIMqutIMicqSettingsClass$4VA;0B8 1030BL>< Send multiplemultipleSending11multipleSendingClass04VA;0B8SendmultipleSendingClassC?8=8B8StopmultipleSendingClass&04A8;0==O 1030BL><multipleSendingmultipleSendingClass2B5=B8DV:0FVOAuthenticationnetworkSettingsClass'T4=0==O ConnectionnetworkSettingsClassHTTPHTTPnetworkSettingsClass %>AB:Host:networkSettingsClass&15@V30B8 7'T4=0==OKeep connection alivenetworkSettingsClassR@>A;CE>2C20B8 ?>@B =0 =04A8;0==O D09;V2:Listen port for file transfer:networkSettingsClass 5<0TNonenetworkSettingsClass0@>;L: Password:networkSettingsClass >@B:Port:networkSettingsClass @>:AVProxynetworkSettingsClass,'T4=0==O G5@57 ?@>:AVProxy connectionnetworkSettingsClassSOCKS 5SOCKS 5networkSettingsClass57?5G=89 2EV4 Secure loginnetworkSettingsClass !5@25@ServernetworkSettingsClass"8?:Type:networkSettingsClass"<'O :>@8ABC20G0: User name:networkSettingsClasslogin.icq.com login.icq.comnetworkSettingsClass&;0HBC20==O <5@56VnetworkSettingsnetworkSettingsClass!:0AC20B8CancelnoteWidgetClass 0@074OKnoteWidgetClassV465B =>B0B>: noteWidgetnoteWidgetClassh><8;:0 <5@56V (<>6;82> 28BO3=CB> <5@565289 :015;L).ZAn error occurred with the network (e.g., the network cable was accidentally plugged out). oscarProtocol2!B0;0AL =52V4><0 ?><8;:0.'An unidentified network error occurred. oscarProtocol24@5AC E>AB0 =5 7=0945=>.The host address was not found. oscarProtocol!8AB5<V =5 28AB0G0T @5AC@AV2 (<>6;82> 704VO=> 70=04B> 1030B> A>:5BV2).?The local system ran out of resources (e.g., too many sockets). oscarProtocolBV440;5=89 E>AB 70:@82 7'T4=0==O.&The remote host closed the connection. oscarProtocol0?8BC20=0 A>:5B=0 >?5@0FVO =5 ?V4B@8<CTBLAO ;>:0;L=>N >?5@0FV9=>N A8AB5<>N (=0?@8:;04 =5<0T ?V4B@8<:8 IPv6).kThe requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). oscarProtocolt!>:5B 28:>@8AB>2CT ?@>:AV V ?@>:AV 28<030T 02B5=B8DV:0FVW.CThe socket is using a proxy, and the proxy requires authentication. oscarProtocolB89H>2 G0A 4;O A>:5B=>W >?5@0FVW.The socket operation timed out. oscarProtocolDV4B25@465==O ?0@>;O =5 71V30TBLAOConfirm password does not matchpasswordChangeDialog2>B>G=89 ?0@>;L =54V9A=89Current password is invalidpasswordChangeDialog><8;:0 ?0@>;OPassword errorpasswordChangeDialog<V=8B8ChangepasswordChangeDialogClass<V=0 ?0@>;OChange passwordpasswordChangeDialogClass >B>G=89 ?0@>;L:Current password:passwordChangeDialogClass>289 ?0@>;L: New password:passwordChangeDialogClass*>2B>@ =>2>3> ?0@>;O:Retype new password:passwordChangeDialogClass"254VBL %1 ?0@>;LEnter %1 passwordpasswordDialog$254VBL 0H ?0@>;LEnter your passwordpasswordDialogClass 0@074OKpasswordDialogClass15@53B8 ?0@>;L Save passwordpasswordDialogClass0H ?0@>;L:Your password:passwordDialogClassA>18ABV A?8A:8 Privacy listsprivacyListWindowDDprivacyListWindowClassIIprivacyListWindowClass$!?8A>: V3=>@>20=8E Ignore listprivacyListWindowClass!?8A>: =57@OG8EInvisible listprivacyListWindowClassV: Nick nameprivacyListWindowClass#UINprivacyListWindowClass!?8A>: 7@OG8E Visible listprivacyListWindowClass@820B=V A?8A:8privacyListWindowprivacyListWindowClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

readAwayDialogClass0:@8B8ClosereadAwayDialogClass>25@=CB8ALReturnreadAwayDialogClassreadAwayDialogreadAwayDialogreadAwayDialogClass"0?8B 02B>@870FVWAuthorization requestrequestAuthDialogClass04VA;0B8SendrequestAuthDialogClass4>40B8 4> A?8A:C :>=B0:BV2Add to contact list searchUser4>40B8/7=09B8 :>@8ABC20GV2Add/find users searchUser 02648Always searchUser2B>@87C20B8 Authorize searchUser0=V :>=B0:BCContact details searchUser05@52V@8B8 AB0= :>=B0:BCContact status check searchUser@>1;5=>Done searchUser$VG>3> =5 7=0945=> Nothing found searchUser >HC: Searching searchUser,04VA;0B8 ?>2V4><;5==O Send message searchUser 13-1713-17searchUserClass 18-2218-22searchUserClass 23-2923-29searchUserClass 30-3930-39searchUserClass 40-4940-49searchUserClass50-V50'ssearchUserClass 50-5950-59searchUserClass60-V60'ssearchUserClass60+60+searchUserClass70-V70'ssearchUserClass80-V80'ssearchUserClass:045<VG=VAcademicsearchUserClass1;V:>289 70?8AAccountsearchUserClass4<V=VAB@C20==OAdministrativesearchUserClass( >7H8@5=0 V=D>@<0FVOAdvancedsearchUserClassD30=VAB0= AfghanistansearchUserClassD@8:00=A AfrikaanssearchUserClassV::Age:searchUserClass;10=VOAlbaniasearchUserClass;10=AL:0AlbaniansearchUserClass ;68@AlgeriasearchUserClass$<5@8:0=AL:5 !0<>0American SamoasearchUserClass=4>@@0AndorrasearchUserClass =3>;0AngolasearchUserClass=3V;LOAnguillasearchUserClass=B83C0AntiguasearchUserClass"=B83C0 V 0@1C40Antigua & BarbudasearchUserClass$=B8;LAL:V >AB@>28AntillessearchUserClass@01AL:0ArabicsearchUserClass@35=B8=0 ArgentinasearchUserClassV@<5=VOArmeniasearchUserClassV@<5=AL:0ArmeniansearchUserClass8AB5FB2>ArtsearchUserClass"8AB5FB2>/ >72038Art/EntertainmentsearchUserClass @C10ArubasearchUserClass"AB@V2 >7=5AV==OAscensionIslandsearchUserClassAB@>=><VO AstronomysearchUserClassC4V> B0 2V7C0;Audio and visualsearchUserClass2AB@0;VO AustraliasearchUserClass2AB@VOAustriasearchUserClass2B>@87C20B8 AuthorizesearchUserClass75@109460= AzerbaijansearchUserClass"030<AL:V >AB@>28BahamassearchUserClass0E@59=BahrainsearchUserClass0=3;045H BangladeshsearchUserClass0@104>ABarbadossearchUserClass0@1C40BarbudasearchUserClassV;>@CAVOBelarussearchUserClass5;L3VOBelgiumsearchUserClass 5;V7BelizesearchUserClass 5=V=BeninsearchUserClass$5@<C4AL:V >AB@>28BermudasearchUserClassE>46?C@VBhojpurisearchUserClass CB0=BhutansearchUserClass>;V2VOBoliviasearchUserClass>BA20=0BotswanasearchUserClass@078;VOBrazilsearchUserClass @C=59BruneisearchUserClass>;30@VOBulgariasearchUserClass>;30@AL:0 BulgariansearchUserClassC@:V=0-$0A> Burkina FasosearchUserClassV@<0=AL:0BurmesesearchUserClassC@C=4VBurundisearchUserClass&V7=5A B0 5:>=><V:0Business & EconomysearchUserClassV7=5A-A5@2VA8Business servicessearchUserClass0<1>460CambodiasearchUserClass0<5@C=CameroonsearchUserClass 0=040CanadasearchUserClass"0=0@AL:V >AB@>28Canary IslandssearchUserClass0=B>=AL:0 CantonesesearchUserClass2B><>1V;VCarssearchUserClass0B0;0=AL:0CatalansearchUserClass"09<0=>2V >AB@>28Cayman IslandssearchUserClass C<8@8Celebrity FanssearchUserClass'04ChadsearchUserClass'8;VChile, Rep. ofsearchUserClass 8B09ChinasearchUserClass8B09AL:0ChinesesearchUserClass0AB@V2  V7420 %@8AB>2>3>Christmas IslandsearchUserClass VAB>:City:searchUserClassG8AB8B8ClearsearchUserClass4O3ClothingsearchUserClass>;5:FV>=C20==O CollectionssearchUserClass!BC45=B :>;546CCollege StudentsearchUserClass>;C<1VOColombiasearchUserClass$!?V;L=>B0 V A>FVC<Community & SocialsearchUserClass"><>@AL:V AB@>28ComorossearchUserClass><?'NB5@8 ComputerssearchUserClass >1CB>20 B5E=V:0Consumer electronicssearchUserClassAB@>28 C:0 CookIslandssearchUserClass>AB0- V:0 Costa RicasearchUserClass@0W=0:Country:searchUserClass%>@20BVOCroatiasearchUserClass%>@20BAL:0CroatiansearchUserClassC10CubasearchUserClass,C;LBC@0 B0 ;VB5@0BC@0Culture & LiteraturesearchUserClass8?@CyprussearchUserClass '5AL:0CzechsearchUserClass"'5AL:0 @5A?C1;V:0 Czech Rep.searchUserClass0=AL:0DanishsearchUserClass 0=VODenmarksearchUserClassVT3> 0@AVO Diego GarciasearchUserClass >7;CG5=0DivorcedsearchUserClass 681CBDjiboutisearchUserClass>5 >G870B8 ?>?5@54=V @57C;LB0B8Do not clear previous resultssearchUserClass><V=V:0DominicasearchUserClass0><V=V:0=AL:0 @5A?C1;V:0Dominican Rep.searchUserClass>;;0=4AL:0DutchsearchUserClass:204>@EcuadorsearchUserClass A2VB0 EducationsearchUserClass 38?5BEgyptsearchUserClass!0;L204>@ El SalvadorsearchUserClass E-MailEmailsearchUserClass0@CG5=89EngagedsearchUserClass=65=5@VO EngineeringsearchUserClass=3;V9AL:0EnglishsearchUserClass >72038 EntertainmentsearchUserClass@8B@5OEritreasearchUserClassA?5@0=B> EsperantosearchUserClassAB>=VOEstoniasearchUserClassAB>=AL:0EstoniansearchUserClassDV>?VOEthiopiasearchUserClass"$0@5@AL:V >AB@>28Faeroe IslandssearchUserClass($>;:;5=4AL:V >AB@>28Falkland IslandssearchUserClass $0@AVFarsisearchUserClass V=>G0FemalesearchUserClassAB@>28 $V46VFijisearchUserClass*$V=0=A8 B0 :>@?>@0FVWFinance and corporatesearchUserClass":>=><VG=V A;C618Financial ServicessearchUserClass$V=;O=4VOFinlandsearchUserClass$V=AL:0FinnishsearchUserClass<'O First namesearchUserClass <'O: First name:searchUserClass $VB=5AFitnesssearchUserClass$@0=FVOFrancesearchUserClass$@0=FC7L:0FrenchsearchUserClass"$@0=FC7L:0 2V0=0 French GuianasearchUserClass($@0=FC7L:0 >;V=57VOFrench PolynesiasearchUserClass:$@0=FC7L:V =B8;LAL:V >AB@>28FrenchAntillessearchUserClass 01>=GabonsearchUserClass05;LAL:0GaelicsearchUserClass 0<1VOGambiasearchUserClass3@8GamessearchUserClass!B0BL/V: Gender/AgesearchUserClass !B0BL:Gender:searchUserClass @C7VOGeorgiasearchUserClassV<5FL:0GermansearchUserClassV<5GG8=0GermanysearchUserClass0=0GhanasearchUserClassV1@0;B0@ GibraltarsearchUserClass ;040 GovernmentsearchUserClass @5FVOGreecesearchUserClass@5FL:0GreeksearchUserClass@5=;0=4VO GreenlandsearchUserClass@5=040GrenadasearchUserClass2045;C?0 GuadeloupesearchUserClass20B5<0;0 GuatemalasearchUserClass 2V=5OGuineasearchUserClass2V=5O-VAA0C Guinea-BissausearchUserClass 2V0=0GuyanasearchUserClass 0WBVHaitisearchUserClass 4>@>2'O V :@0A0Health and beautysearchUserClass 2@8BHebrewsearchUserClass&!BC45=B 28I>W H:>;8High School StudentsearchUserClass %V=4VHindisearchUserClass %>11VHobbiessearchUserClassV<HomesearchUserClass*><0H=O 02B><0B870FVOHome automationsearchUserClass>=4C@0AHondurassearchUserClass>=->=3 Hong KongsearchUserClass>1CB>2V B>20@8Household productssearchUserClass#3>@AL:0 HungariansearchUserClass#3>@I8=0HungarysearchUserClassICQ - >2V4:0ICQ - Providing HelpsearchUserClassA;0=4VOIcelandsearchUserClassA;0=4AL:0 IcelandicsearchUserClass =4VOIndiasearchUserClass=4>=57VO IndonesiasearchUserClass=4>=57V9AL:0 IndonesiansearchUserClass=B5@5A8: Interests:searchUserClass=B5@=5BInternetsearchUserClass@0:IraqsearchUserClass@;0=4VOIrelandsearchUserClass7@0W;LIsraelsearchUserClassB0;V9AL:0ItaliansearchUserClass B0;VOItalysearchUserClass /<09:0JamaicasearchUserClass /?>=VOJapansearchUserClass/?>=AL:0JapanesesearchUserClass >@40=JordansearchUserClass070EAB0= KazakhstansearchUserClass 5=VOKenyasearchUserClass;NG>2V A;>20: Keywords:searchUserClassE<5@AL:0KhmersearchUserClassV@V10BVKiribatisearchUserClassV2=VG=0 >@5O Korea, NorthsearchUserClassV245==0 >@5O Korea, SouthsearchUserClass>@59AL:0KoreansearchUserClass C259BKuwaitsearchUserClass8@387L:0KyrgyzsearchUserClass8@387AB0= KyrgyzstansearchUserClass >20: Language:searchUserClass0>AL:0LaosearchUserClass0>ALaossearchUserClass@V728I5 Last namesearchUserClass@V728I5: Last name:searchUserClass 0B2VOLatviasearchUserClass0B2V9AL:0LatviansearchUserClass 0:>=LawsearchUserClass V20=LebanonsearchUserClass 5A>B>LesothosearchUserClassV15@VOLiberiasearchUserClassVEB5=HB59= LiechtensteinsearchUserClass!B8;L 68BBO LifestylesearchUserClass 0B2VO LithuaniasearchUserClass8B>2AL:0 LithuaniansearchUserClass.>23>AB@>:>2V 2V4=>A8=8Long term relationshipsearchUserClassN:A5<1C@3 LuxembourgsearchUserClass 0:0>MacausearchUserClass04030A:0@ MadagascarsearchUserClass40B0;>38 70<>2;5==O ?>HB>NMail order catalogsearchUserClass 0;02VMalawisearchUserClass0;09AL:0MalaysearchUserClass0;097VOMalaysiasearchUserClass0;L4V28MaldivessearchUserClass'>;>2VG0MalesearchUserClass0;VMalisearchUserClass 0;LB0MaltasearchUserClass0;LBV9AL:0MaltesesearchUserClass#?@02;V==O ManagerialsearchUserClass8@>1=8FB2> ManufacturingsearchUserClass!V<59=89 AB0=:Marital status:searchUserClass"4@C65=89/70<V6=OMarriedsearchUserClass$0@H0;;>2V >AB@>28Marshall IslandssearchUserClass0@BV=V:0 MartiniquesearchUserClass02@8B0=VO MauritaniasearchUserClass02@8:V9 MauritiussearchUserClassAB@V2 09>BB0 MayotteIslandsearchUserClass 54V0MediasearchUserClass"548F8=0/4>@>2'OMedical/HealthsearchUserClass5:A8:0MexicosearchUserClass @<VOMilitarysearchUserClass$ 5A?C1;V:0 >;4>20Moldova, Rep. ofsearchUserClass >=0:>MonacosearchUserClass>=3>;VOMongoliasearchUserClass>=BA5@@0B MontserratsearchUserClassV;LH5 >>More >>searchUserClass0@>::>MoroccosearchUserClassV=>/" Movies/TVsearchUserClass>70<1V: MozambiquesearchUserClass C78:0MusicsearchUserClass'O=<0@MyanmarsearchUserClassVAB8:0MysticssearchUserClass0<V1VONamibiasearchUserClass&@8@>40 B0 4>2:V;;ONature and EnvironmentsearchUserClass 0C@CNaurusearchUserClass 5?0;NepalsearchUserClassV45@;0=48 NetherlandssearchUserClass 52VANevissearchUserClass>20 5;0=4VO New ZealandsearchUserClass>20 0;54>=VO NewCaledoniasearchUserClass>28=8 B0 <54V0 News & MediasearchUserClassV:0@03C0 NicaraguasearchUserClassV: Nick namesearchUserClassV:: Nick name:searchUserClass V35@NigersearchUserClassV35@VONigeriasearchUserClassVC5NiuesearchUserClass,545@602=0 >@30=V70FVONon-Goverment OrganisationsearchUserClassAB@V2 >@D>;:Norfolk IslandsearchUserClass>@253VONorwaysearchUserClass>@257L:0 NorwegiansearchUserClass0=OBBO: Occupation:searchUserClass<0=OmansearchUserClass"V;L:8 2 <5@56V Online onlysearchUserClass$V4:@8BV 2V4=>A8=8Open relationshipsearchUserClass=H5OthersearchUserClass=HV A;C618Other servicessearchUserClass:V4?>G8=>: =0 A2V6><C ?>2VB@VOutdoor ActivitiessearchUserClass0:8AB0=PakistansearchUserClass 0;0CPalausearchUserClass 0=0<0PanamasearchUserClass"0?C0 >20 2V=5OPapua New GuineasearchUserClass0@03209ParaguaysearchUserClass0BL:V2AB2> ParentingsearchUserClass5GV@:8PartiessearchUserClass5@AL:0PersiansearchUserClass5@CPerusearchUserClass2><0H=V C;N1;5=FV/"20@8=8 Pets/AnimalssearchUserClass$V;V??V=8 PhilippinessearchUserClass >;LI0PolandsearchUserClass>;LAL:0PolishsearchUserClass>@BC30;VOPortugalsearchUserClass>@BC30;LAL:0 PortuguesesearchUserClass@>D5AV>=0; ProfessionalsearchUserClass8402=8FB2> PublishingsearchUserClassC5@B>- V:> Puerto RicosearchUserClass 0B0@QatarsearchUserClass 5;V3VOReligionsearchUserClass >74@V1RetailsearchUserClass$ >74@V1=V <03078=8 Retail storessearchUserClass5=AV>=5@8RetiredsearchUserClass>25@=CB8ALReturnsearchUserClassAB@V2  5N=L9>=Reunion IslandsearchUserClass C<C=VORomaniasearchUserClass C<C=AL:0RomaniansearchUserClassAB@V2  >B0 Rota IslandsearchUserClass  >AVORussiasearchUserClass >AV9AL:0RussiansearchUserClass  C0=40RwandasearchUserClass!5=B-NAVO Saint LuciasearchUserClassAB@V2 !09?0= Saipan IslandsearchUserClass!0= 0@8=> San MarinosearchUserClass"!0C4V2AL:0 @02VO Saudi ArabiasearchUserClass(0C:0 B0 4>A;V465==OScience & ResearchsearchUserClass 0C:0/"5E=>;>3VWScience/TechnologysearchUserClass(>B;0=4VOScotlandsearchUserClass >HC:SearchsearchUserClass>HC: 70: Search by:searchUserClass!5=530;SenegalsearchUserClass825<> =0@V7=> SeparatedsearchUserClass!5@1AL:0SerbiansearchUserClass&!59H5;LAL:V >AB@>28 SeychellessearchUserClass!LT@@0 5>=5 Sierra LeonesearchUserClass!8=30?C@ SingaporesearchUserClass!0<>B=V9SinglesearchUserClass <V==OSkillssearchUserClass!;>20FL:0SlovaksearchUserClass!;>20:VOSlovakiasearchUserClass!;>25=VOSloveniasearchUserClass!;>25=AL:0 SloveniansearchUserClass!>FV0;L=V =0C:8Social sciencesearchUserClass$!>;><>=>2V >AB@>28Solomon IslandssearchUserClass!><0;V9AL:0SomalisearchUserClass !><0;VSomaliasearchUserClass  SouthAfricasearchUserClass >A<>ASpacesearchUserClassA?0=VOSpainsearchUserClassA?0=AL:0SpanishsearchUserClass"!?>@B B0 0B;5B8:0Sporting and athleticsearchUserClass !?>@BSportssearchUserClass(@V-0=:0 Sri LankasearchUserClass&AB@V2 A2OB>W ;5=8 St. HelenasearchUserClass!5=B-VBA St. KittssearchUserClass !C40=SudansearchUserClass!C@8=0<SurinamesearchUserClass!C0EV;VSwahilisearchUserClass!207V;5=4 SwazilandsearchUserClass (25FVOSwedensearchUserClass(254AL:0SwedishsearchUserClass(259F0@VO SwitzerlandsearchUserClass !8@VOSyrian ArabRep.searchUserClass"030;LAL:0TagalogsearchUserClass"0920=LTaiwansearchUserClass"0468:8AB0= TajikistansearchUserClass"0=70=VOTanzaniasearchUserClass"0B0@AL:0TatarsearchUserClass"5E=V:0 TechnicalsearchUserClass"09AL:0ThaisearchUserClass"09;0=4ThailandsearchUserClassAB@V2 "V=V0= Tinian IslandsearchUserClass">3>TogosearchUserClass">:5;0CTokelausearchUserClass ">=30TongasearchUserClass>4>@>6VTravelsearchUserClass "C=VATunisiasearchUserClass"C@5GG8=0TurkeysearchUserClass"C@5FL:0TurkishsearchUserClass"C@:<5=VAB0= TurkmenistansearchUserClass "C20;CTuvalusearchUserClass#UINsearchUserClass!(USAsearchUserClass #30=40UgandasearchUserClass#:@0W=0UkrainesearchUserClass#:@0W=AL:0 UkrainiansearchUserClass5;8:>1@8B0=VOUnited KingdomsearchUserClass(!BC45=B C=V25@A8B5BCUniversity studentsearchUserClass#@4CUrdusearchUserClass#@C3209UruguaysearchUserClass#715:8AB0= UzbekistansearchUserClass0=C0BCVanuatusearchUserClass0B8:0= Vatican CitysearchUserClass5=5AC5;0 VenezuelasearchUserClass'TB=0<VietnamsearchUserClass'TB=0<AL:0 VietnamesesearchUserClass #5;LAWalessearchUserClass51-48709= Web DesignsearchUserClass"51 ?@>3@0<C20==O Web buildingsearchUserClass0EV4=5 !0<>0 Western SamoasearchUserClass4>20/24V25FLWidowedsearchUserClass V=:8WomensearchUserClass<5=YemensearchUserClass48HYiddishsearchUserClass >@C10YorubasearchUserClass.3>A;02VO YugoslaviasearchUserClass'>@=>3>@VOYugoslavia - MontenegrosearchUserClass$.3>A;02VO - !5@1VOYugoslavia - SerbiasearchUserClass 0<1VOZambiasearchUserClassV<10125ZimbabwesearchUserClass$>HC: :>@8ABC20GV2 searchUsersearchUserClassV;L:VABL :>@8ABC20GV2 ?V4'T4=0=8E V7 FVTW IP-04@5A8 ?5@528I8;0 <0:A8<0;L=89 @575@2K The users num connected from this IP has reached the maximum (reservation) snacChannel.>30=89 AB0= 1078 40=8EBad database status snacChannel5<>6;82> 70@5TAB@C20B8AL 2 <5@56V ICQ. 5@5?V4'T4=0==O G5@57 :V;L:0 728;8==Can't register on the ICQ network. Reconnect in a few minutes snacChannel,><8;:0 7 'T4=0==O: %1Connection Error: %1 snacChannel:><8;:0 72'O7:C 7 107>N 40=8E DB link error snacChannel0><8;:0 =04A8;0==O 4>  DB send error snacChannel2840;5=89 >1;V:>289 70?8ADeleted account snacChannel>"5@<V= >1;V:>2>3> 70?8AC 289H>2Expired account snacChannel45?@028;L=89 =V: G8 ?0@>;LIncorrect nick or password snacChannelj=CB@VH=O ?><8;:0 :;VT=B0 (?>30=89 22V4 02B>@870B>@0)/Internal client error (bad input to authorizer) snacChannel"=CB@VH=O ?><8;:0Internal error snacChannel(5?@028;L=89 SecurIDInvalid SecurID snacChannel85?@028;L=89 >1;V:>289 70?8AInvalid account snacChannel65?@028;L=V ?>;O 1078 40=8EInvalid database fields snacChannel45?@028;L=89 =V: G8 ?0@>;LInvalid nick or password snacChannel40@>;L V =V: =5 71V30NBLAOMismatch nick or password snacChannel65<0T 4>ABC?C 4> 1078 40=8ENo access to database snacChannel6!;C610 B8<G0A>2> =54>ABC?=0Service temporarily offline snacChannel6!;C610 B8<G0A>2> =54>ABC?=0Service temporarily unavailable snacChannelV;L:VABL :>@8ABC20GV2 ?V4'T4=0=8E V7 FVTW IP-04@5A8 ?5@528I8;0 <0:A8<C<@8AB>2CTB5 AB0@C 25@AVN ICQ.  5:><5=4>20=> >=>28B8AL:You are using an older version of ICQ. Upgrade recommended snacChannell8 28:>@8AB>2CTB5 AB0@C 25@AVN ICQ. >B@V1=5 >=>2;5==O7You are using an older version of ICQ. Upgrade required snacChannel6>40B8 AB0=8 4> <5=N AB0=V2&Add additional statuses to status menustatusSettingsClassL>72>;8B8 10G8B8 <V9 AB0= 7 Web-<5@56V*Allow other to view my status from the WebstatusSettingsClassJ2B><0B8G=> 7020=B06C20B8 AB0=8 V=H8EAsk for xStauses automaticallystatusSettingsClass 4><0At homestatusSettingsClass0 @>1>BVAt workstatusSettingsClassV4V9H>2AwaystatusSettingsClass5 BC@1C20B8DNDstatusSettingsClass5?@5AVO DepressionstatusSettingsClassB5 ?>:07C20B8 2V:=> 02B>2V4?>2V4VDon't show autoreply dialogstatusSettingsClass;89EvilstatusSettingsClass<LunchstatusSettingsClass54>ABC?=89N/AstatusSettingsClassB!?>2VI0B8 :>;8 G8B0NBL 0H AB0BCA Notify about reading your statusstatusSettingsClass09=OB89OccupiedstatusSettingsClass&0;0HBC20==O AB0=V2statusSettingsstatusSettingsClass 0=V :>=B0:BC %1%1 contact informationuserInformation&<b>V::</b> %1 <br>Age: %1
userInformation><b>0B0 =0@>465==O:</b> %1 <br>Birth date: %1
userInformation(<b><'O:</b> %1 <br>First name: %1
userInformation*<b>!B0BL:</b> %1 <br>Gender: %1
userInformation*<b>V<:</b> %1 %2<br>Home: %1 %2
userInformation0<b>@V728I5:</b> %1 <br>Last name: %1
userInformation&<b>V::</b> %1 <br>Nick name: %1
userInformation><b>5@AVO ?@>B>:>;C: </b>%1<br>Protocol version: %1
userInformationJ<b> >7<>2;OT <>20<8:</b> %1 %2 %3<br>%Spoken languages: %1 %2 %3
userInformation.<b>[>6;82>ABV]</b><br>[Capabilities]
userInformationd<b>[:AB@0-V=D>@<0FVO ?@> ?@O<5 7'T4=0==O]</b><br>)[Direct connection extra info]
userInformationF<b>[>@>B:> ?@> <>6;82>ABV]</b><br>[Short capabilities]
userInformationJ<img src='%1' height='%2' width='%3'>%userInformation< >7<V@ <0;N=:0 70=04B> 25;8:89Image size is too biguserInformationP0;N=:8 (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.bmp *.jpg *.jpeg *.png)userInformationV4:@8B8 D09; Open FileuserInformation&><8;:0 2V4:@820==O Open erroruserInformation<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

userInformationClass@> A515AboutuserInformationClass:=D>@<0FVO >1;V:>2>3> 70?8AC: Account info:userInformationClass>40B:>2> AdditinonaluserInformationClassV::Age:userInformationClasshAV :>@8ABC20GV <>6CBL 4>4020B8 <5=5 157 02B>@870FVW)All uses can add me without authorizationuserInformationClass`>72>;8B8 2AV< 10G8B8 <V9 AB0= 2 ?>HC:C B0 C Web9Allow others to view my status in search and from the webuserInformationClass2B>@870FVOAuthorization/webawareuserInformationClass0B0 =0@>465==O Birth dateuserInformationClass$>1V;L=89 B5;5D>=: Cellular:userInformationClass VAB>:City:userInformationClass0:@8B8CloseuserInformationClass><?0=VOCompanyuserInformationClass0720 :><?0=VW: Company name:userInformationClass @0W=0CountryuserInformationClass@0W=0:Country:userInformationClass85 @>18B8 4>ABC?=8< 4;O 2AVEDon't publish for alluserInformationClassE-Mail:Email:userInformationClass $0:A:Fax:userInformationClass V=>G0FemaleuserInformationClass <'O: First name:userInformationClass !B0BL:Gender:userInformationClassA=>2=VGeneraluserInformationClassV<HomeuserInformationClass><0H=O 04@5A0: Home address:userInformationClass"><0H=O AB>@V=:0: Home page:userInformationClass&V:028BLAO InterestsuserInformationClassAB0==V9 2EV4: Last login:userInformationClass@V728I5: Last name:userInformationClass'>;>2VG0MaleuserInformationClass!V<59=89 AB0=:Marital status:userInformationClass0>B@V1=0 <>O 02B>@870FVOMy authorization is requireduserInformationClass<'ONameuserInformationClassV:: Nick name:userInformationClass0=OBBO: Occupation:userInformationClass >4>< 7:Originally from:userInformationClassA>18AB5PersonaluserInformationClass"5;5D>=:Phone:userInformationClass >7B0HC20==O: Position:userInformationClass 5TAB@0FVO: Registration:userInformationClass=>28B8 40=VRequest detailsuserInformationClass15@53B8SaveuserInformationClass" >7<>2;ON <>20<8:Spoken language:userInformationClass1;0ABL:State:userInformationClassC;8FO:Street address:userInformationClassC;8FO:Street:userInformationClass030;L=>SummaryuserInformationClass#:UIN:userInformationClass !09B: Web site:userInformationClass  >1>B0WorkuserInformationClass >1>G0 04@5A0 Work addressuserInformationClass=45:A:Zip:userInformationClass4=D>@<0FVO ?@> :>@8ABC20G0userInformationuserInformationClass ) , qutim-0.2.0/languages/uk_UA/binaries/core.qm0000755000175000017500000020406311243502505022356 0ustar euroelessareuroelessarL-YI9. ߵ@NmNkz*Ffzo\>f@*4 nS I[ )cWa?Y)ju:v:.E'mKOg4\dZJ Z rX.;`GEdbE+_bJb ~4"sl6o~4B8I/}QUiQW}_{c`!?jf~d8zdl+7.lsR<e[`?EAZNTOO`f qJ7I:IKIOIlInI|o    E t ųh͢cl:)/ ;GJd2'tO3D n5Oe6#C TSWQe0E'%e0Es-jlD]/t~ cy#4.N FA<LA29RJ@N82CNdznw?P0&0rߺK3ea9 5s>y#X6j'?^LS,VѥVѥ X*m=z,zó=Պ:DHhT`Y/{> k3ZZ%d I6L8Mi=d6i=i'iANikjx3kJ=00O*muOl<JLpGZfdӉ77E8e6=GB<4G ROa efuogp5<UܲUV!0V\ J:-4.p9Ձ.x ' a I HZ &  0|e \P%f q vR }G |H B Q ' @o ??1 jr =:  1T uD` 1Z> 7m# Q Y zGx " - A d8[# U ~s  zz9 g >5 >P > ( -V bh t C t F V ; 8 ]i =]% ~b$Qq s W TJ0 . ; ɔ- mN %l1 A 7N q{ ӕ *C0 t c/t Ea EYY #`s ;* >1g ?@ [NC g Rp b{ _] Z  - c1 s  ,S _NP P Y yc[ ur U;Z: W.C Z> q:=| rN rN t f z=B0:BCContact detailsAbstractContextLayer&AB>@VO ?>2V4><;5=LMessage historyAbstractContextLayer,04VA;0B8 ?>2V4><;5==O Send messageAbstractContextLayer<#?@02;V==O >1;V:>28<8 70?8A0<8AccountManagementAccountManagementClass >40B8AddAccountManagementClass 5403C20B8EditAccountManagementClass840;8B8RemoveAccountManagementClassF09AB5@ 4>4020==O >1;V:>2>3> 70?8ACAdd Account WizardAddAccountWizardb@89<0B8 ?>2V4><;5==O BV;L:8 2V4 A?8A:C :>=B0:BV2&Accept messages only from contact listAntiSpamLayerSettingsClass.V4?>2V4L =0 70?8B0==O:Answer to question:AntiSpamLayerSettingsClass,8B0==O 4;O ?5@52V@:8:Anti-spam question:AntiSpamLayerSettingsClass.0;0HBC20==O 0=B8-A?0<CAntiSpamSettingsAntiSpamLayerSettingsClassV5 ?@89<0B8 ?>@>6=VE 02B>@870FV9=8E 70?8BV23Do not accept NIL messages concerning authorizationAntiSpamLayerSettingsClassV5 ?@89<0B8 ?>@>6=VE ?>2V4><;5=L V7 ;V=:0<8$Do not accept NIL messages with URLsAntiSpamLayerSettingsClassb5 ?>G8=0B8 ?5@52V@:C :>;8 <V9 AB0BCA "52848<89"5Don't send question/reply if my status is "invisible"AntiSpamLayerSettingsClass62V<:=CB8 0=B8-A?0< A8AB5<CEnable anti-spam botAntiSpamLayerSettingsClassP>2V4><;5==O ?VA;O ?@028;L=>W 2V4?>2V4V:Message after right answer:AntiSpamLayerSettingsClassR!?>2VI0B8 :>;8 T 2EV4=5 A?0<-?>2V4><;5==ONotify when blocking messageAntiSpamLayerSettingsClass......ChatForm.G8AB8B8 6C@=0; @>7<>28Clear chat logChatForm&AB>@VO ?>2V4><;5=LContact historyChatForm0=V :>=B0:BCContact informationChatForm Ctrl+FCtrl+FChatForm Ctrl+HCtrl+HChatForm Ctrl+ICtrl+IChatForm Ctrl+MCtrl+MChatForm Ctrl+QCtrl+QChatForm Ctrl+TCtrl+TChatForm5=N A<09;8:V2 Emoticon menuChatForm $>@<0FormChatForm6@>F8BC20B8 284V;5=89 B5:ABQuote selected textChatForm04VA;0B8SendChatForm04VA;0B8 D09; Send fileChatForm404VA;0B8 <0;N=>: < 7.6 Send image < 7,6 KBChatForm,04VA;0B8 ?>2V4><;5==O Send messageChatFormZ04A8;0B8 ?>2V4><;5==O =0B8A:0==O< =0 "Enter"Send message on enterChatForm:04A8;0B8 A?>2VI5==O ?@> 4@C:Send typing notificationChatForm"@0=A;VBTranslitChatFormV:=> @>7<>28 Chat windowChatLayerClass,( 3>4:E2, ?>2=0 40B0 )( hour:min, full date )ChatSettingsWidget( 3>4:E2:A )( hour:min:sec )ChatSettingsWidget8( 3>4:E2:A 45=L/<VAOFL/@V: )( hour:min:sec day/month/year )ChatSettingsWidgetVA;O :;0F0==O ?> V:>=FV 2 ;>B:C ?>:07C20B8 2AV =5?@>G8B0=V ?>2V4><;5==O6After clicking on tray icon show all unreaded messagesChatSettingsWidgetJ >7<>28 B0 :>=D5@5=FV9 2 >4=><C 2V:=V#Chats and conferences in one windowChatSettingsWidget6=>?:0 70:@8BBO =0 2:;04:0EClose button on tabsChatSettingsWidgetz0:@820B8 2:;04:C/2V:=> @>7<>28 ?VA;O =04A8;0==O ?>2V4><;5==O0Close tab/message window after sending a messageChatSettingsWidgetD V7=>:>;L>@>2V =V:8 2 :>=D5@5=FVOE!Colorize nicknames in conferencesChatSettingsWidget25 <830B8 =0 ?0=5;V 7040GDon't blink in task barChatSettingsWidgetP5 3@C?C20B8 ?>2V4><;5=L ?VA;O (A5:C=4):!Don't group messages after (sec):ChatSettingsWidgetl5 ?>:07C20B8A?>2VI5=L O:I> 2V4:@8B5 2V:=> ?>2V4><;5=L+Don't show events if message window is openChatSettingsWidget $>@<0FormChatSettingsWidget|V4:@820B8 2:;04:C/2V:=> ?>2V4><;5=L ?@8 27V4=><C ?>2V4><;5==V+Open tab/message window if received messageChatSettingsWidgetl0<'OB0B8 2V4:@8BV @>7<>28 ?VA;O 70:@8BBO 2V:=0 @>7<>23Remember openned privates after closing chat windowChatSettingsWidgetN840;OB8 ?>2V4><;5==O V7 @>7<>28 ?VA;O:%Remove messages from chat view after:ChatSettingsWidgetv04A8;0B8 ?>2V4><;5==O ?@8 ?>42V9=><C =0B8A:0==V =0 "Enter"Send message on double enterChatSettingsWidgetZ04A8;0B8 ?>2V4><;5==O =0B8A:0==O< =0 "Enter"Send message on enterChatSettingsWidget:04A8;0B8 A?>2VI5==O ?@> 4@C:Send typing notificationsChatSettingsWidget >:07C20B8 V<5=0 Show namesChatSettingsWidget 568< 2:;04>: Tabbed modeChatSettingsWidget(5@5<VIC20=V 2:;04:8Tabs are movableChatSettingsWidget2 568< B5:AB>2>3> >3;O40G0Text browser modeChatSettingsWidget$>@<0B G0AC: Timestamp:ChatSettingsWidget 568< Webkit Webkit modeChatSettingsWidgetX<font color='green'>"8FOT ?0;LFO<8...</font>$Typing... ChatWindow< >7<V@ <0;N=:C 70=04B> 25;8:89Image size is too big ChatWindowP0;N=:8 (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.png *.bmp *.jpg *.jpeg) ChatWindowV4:@8B8 D09; Open File ChatWindow*><8;:0 ?@8 2V4:@8BBV Open error ChatWindow,G8AB8B8 2V:=> @>7<>28 Clear chatConfFormCtrl+M, Ctrl+SCtrl+M, Ctrl+SConfForm Ctrl+QCtrl+QConfForm Ctrl+TCtrl+TConfForm $>@<0FormConfFormT=25@BC20==O/B@0=A;VB5@870FVO ?>2V4><;5==OInvert/translit messageConfForm6@>F8BC20B8 284V;5=89 B5:ABQuote selected textConfForm04VA;0B8SendConfFormZ04A8;0B8 ?>2V4><;5==O =0B8A:0==O< =0 "Enter" Send on enterConfForm&>:07C20B8 A<09;8:8Show emoticonsConfForm(<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html>

Console $>@<0FormConsole5 2 A?8A:C Not in listContactListProxyModel>70 <5@565NOfflineContactListProxyModel <5@56VOnlineContactListProxyModel100%100%ContactListSettingsClass 1;V:>289 70?8A:Account:ContactListSettingsClass57 >:0=BC20==OBorderless WindowContactListSettingsClass:0;0HBC20==O A?8A:C :>=B0:BV2ContactListSettingsContactListSettingsClass<V=8B8 CustomizeContactListSettingsClass<V=8B8 H@8DBCustomize font:ContactListSettingsClass4;LB5@=0B82=V :>;L>@8 D>=C1Draw the background with using alternating colorsContactListSettingsClass @C?0:Group:ContactListSettingsClass2@8E>2C20B8 ?>@>6=V 3@C?8Hide empty groupsContactListSettingsClassT@8E>2C20B8 :>@8ABC20GV2, O:V ?>70 <5@565NHide offline usersContactListSettingsClassN@8E>2C20B8 >=;09=/>DD;09= @>74V;N20GVHide online/offline separatorsContactListSettingsClass 83;O4 Look'n'FeelContactListSettingsClassA=>2=VMainContactListSettingsClass>70 <5@565N:Offline:ContactListSettingsClass <5@56V:Online:ContactListSettingsClass@>7>@VABLOpacity:ContactListSettingsClass28G09=5 2V:=>Regular WindowContactListSettingsClass >74V;N20G: Separator:ContactListSettingsClass4>:07C20B8 >1;V:>2V 70?8A8 Show accountsContactListSettingsClass$>:07C20B8 020B0@8 Show avatarsContactListSettingsClass>>:07C20B8 ?V:B>3@0<:8 :;VT=BV2Show client iconsContactListSettingsClass >:07C20B8 3@C?8 Show groupsContactListSettingsClass>?>@O4:C20B8 :>=B0:B8 70 AB0=><Sort contacts by statusContactListSettingsClass :0=BC20==O B5<8 Theme borderContactListSettingsClassV0;>3>25 2V:=> Tool windowContactListSettingsClass!B8;L 2V:=0: Window Style:ContactListSettingsClass@> ?@>3@0<CAboutDefaultContactList>;>2=5 <5=N Main menuDefaultContactList8>:07C20B8/?@8E>2C20B8 3@C?8Show/hide groupsDefaultContactListV>:07C20B8/?@8E>2C20B8 B8E EB> ?>70 <5@565NShow/hide offlineDefaultContactList2C: 22V<:/28<: Sound on/offDefaultContactList qutIMqutIMDefaultContactList >6;82V 20@V0=B8Possible variants GeneralWindow9FC:5=3HI7EWDV20?@>;46TOGA<8BL1N.&#()%$ /'!",..Bqwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? GeneralWindowCB5=B8DV:0FVOAuthenticationGlobalProxySettingsClass>0;0HBC20==O 3;>10;L=>3> ?@>:AVGlobalProxySettingsGlobalProxySettingsClassHTTPHTTPGlobalProxySettingsClass %>AB:Host:GlobalProxySettingsClass 5<0TNoneGlobalProxySettingsClass0@>;L: Password:GlobalProxySettingsClass >@B:Port:GlobalProxySettingsClass @>:AVProxyGlobalProxySettingsClassSOCKS 5SOCKS 5GlobalProxySettingsClass"8?:Type:GlobalProxySettingsClass>@8ABC20G: User name:GlobalProxySettingsClass$<0 70<>2GC20==O<> GuiSetttingsWindowClassJ<0 70<>> ( English 70 70<>2GC20==O<) ( English )GuiSetttingsWindowClass< CG:0<8> GuiSetttingsWindowClass<5<0T>GuiSetttingsWindowClass<!8AB5<=0>GuiSetttingsWindowClass!B8;L ?@>3@0<8:Application style:GuiSetttingsWindowClass0AB>AC20B8ApplyGuiSetttingsWindowClass""5<0 >:0=BC20==O: Border theme:GuiSetttingsWindowClass!:0AC20B8CancelGuiSetttingsWindowClass<"5<0 6C@=0;C @>7<>28 (webkit):Chat log theme (webkit):GuiSetttingsWindowClassV:=> @>7<>28:Chat window dialog:GuiSetttingsWindowClass,"5<0 A?8A:C :>=B0:BV2:Contact list theme:GuiSetttingsWindowClass!<09;8:8: Emoticons:GuiSetttingsWindowClass >20: Language:GuiSetttingsWindowClass 0@074OKGuiSetttingsWindowClass0"5<0 2V:>=5FL A?>2VI5=L:Popup windows theme:GuiSetttingsWindowClass2C:>20 B5<0: Sounds theme:GuiSetttingsWindowClass0"5<0 ?V:B>3@0<>: AB0=V2:Status icon theme:GuiSetttingsWindowClass6"5<0 A8AB5<=8E ?V:B>3@0<>::System icon theme:GuiSetttingsWindowClassF0;0HBC20==O V=B5@D59AC :>@8ABC20G0User interface settingsGuiSetttingsWindowClass(0;0HBC20==O VAB>@VWHistorySettingsHistorySettingsClass:15@V30B8 VAB>@VN ?>2V4><;5=LSave message historyHistorySettingsClass^>:07C20B8 >AB0==VE ?>2V4><;5=L 2 2V:=V @>7<>28(Show recent messages in messaging windowHistorySettingsClass5<0T VAB>@VW No History HistoryWindow11HistoryWindowClass 1;V:>289 70?8A:Account:HistoryWindowClass:From:HistoryWindowClassV:=> VAB>@VW HistoryWindowHistoryWindowClass>25@=CB8ALReturnHistoryWindowClass >HC:SearchHistoryWindowClass&0?>2=VBL 2AV ?>;O.Please fill all fields. LastLoginPage\254VBL 02B>@870FV9=V 40=V 281@0=>3> ?@>B>:>;C&Please type chosen protocol login data LastLoginPage?V:A pxNotificationsLayerSettingsClassA sNotificationsLayerSettingsClass&>=B0:B 7<V=NT AB0=Contact change statusNotificationsLayerSettingsClass>=B0:B 289H>2Contact sign offNotificationsLayerSettingsClass>=B0:B 22V9H>2Contact sign onNotificationsLayerSettingsClass8>=B0:B =018@0T ?>2V4><;5==OContact typing messageNotificationsLayerSettingsClass(8@8=0:Height:NotificationsLayerSettingsClass 86=V9 ;V289 :CBLower left cornerNotificationsLayerSettingsClass"86=V9 ?@0289 :CBLower right cornerNotificationsLayerSettingsClass* 2EV4=5 ?>2V4><;5==OMessage receivedNotificationsLayerSettingsClass57 5D5:BV2No slideNotificationsLayerSettingsClass!?>2VI5==ONotificationsLayerSettingsNotificationsLayerSettingsClass!?>2VI0B8 :>;8: Notify when:NotificationsLayerSettingsClass >7B0HC20==O: Position:NotificationsLayerSettingsClassB>:07C20B8 ?>2V4><;5==O-1C;L10H:8Show balloon messagesNotificationsLayerSettingsClass:>:07C20B8 28?;820NGV 2V:>=FOShow popup windowsNotificationsLayerSettingsClass>:07C20B8 G0A: Show time:NotificationsLayerSettingsClass0>@87>=B0;L=5 28?;820==OSlide horizontallyNotificationsLayerSettingsClass,5@B8:0;L=5 28?;820==OSlide verticallyNotificationsLayerSettingsClass !B8;L:Style:NotificationsLayerSettingsClass"5@E=V9 ;V289 :CBUpper left cornerNotificationsLayerSettingsClass$5@E=V9 ?@0289 :CBUpper right cornerNotificationsLayerSettingsClass>268=0:Width:NotificationsLayerSettingsClass11PluginSettingsClass!:0AC20B8CancelPluginSettingsClass*?FVW <>4C;V2 - qutIMConfigure plugins - qutIMPluginSettingsClass 0@074OkPluginSettingsClass<b>%1</b> %1 PopupWindow<b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2b%1
%2 PopupWindowPopupWindow PopupWindowPopupWindowClass(840;8B8 ?@>DV;L %1?Delete %1 profile?ProfileLoginDialog 840;8B8 ?@>DV;LDelete profileProfileLoginDialog&5?@028;L=89 ?0@>;LIncorrect passwordProfileLoginDialog 2V9B8Log inProfileLoginDialog@>DV;LProfileProfileLoginDialog!:0AC20B8CancelProfileLoginDialogClass25 ?>:07C20B8 ?@8 70?CA:CDon't show on startupProfileLoginDialogClass <'O:Name:ProfileLoginDialogClass0@>;L: Password:ProfileLoginDialogClass$ProfileLoginDialogProfileLoginDialogProfileLoginDialogClass 0<'OB0B8 ?0@>;LRemember passwordProfileLoginDialogClass 2V9B8Sign inProfileLoginDialogClassP815@VBL ?@>B>:>; =04A8;0==O ?>2V4><;5=LPlease choose IM protocol ProtocolPageD&59 4V0;>3 4>?><>65 0< 4>40B8 >1;V:>289 70?8A 281@0=>3> ?@>B>:>;C. 8 702648 <>65B5 4>40B8 G8 2840;8B8 >1;V:>2V 70?8A8 V7 A=>2=V =0;0HBC20==O -> 1;V:>2V 70?8A8This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts ProtocolPage@# %1 AL>3>4=V 45=L =0@>465==O!!!%1 has birthday today!!QObject"%1 B8FOT ?0;LFO<8 %1 is typingQObject &8EV4&QuitQObject()  (BLOCKED) QObject1-0 G25@BL 1st quarterQObject2-0 G25@BL 2nd quarterQObject3-O G25@BL 3rd quarterQObject4-0 G25@BL 4th quarterQObjectAV D09;8 (*) All files (*)QObject=B8-A?0< Anti-spamQObjectL01;>:>20=> 02B>@870FV9=5 ?>2V4><;5==OAuthorization blockedQObjectF01;>:>20=> ?>2V4><;5==O 2V4 %1: %2Blocked message from %1: %2QObject !?8A>: :>=B0:BV2 Contact ListQObjectAB>@VOHistoryQObject,>2V4><;5==O 2V4 %1:%2Message from %1: %2QObject5 2 A?8A:C Not in listQObject!?>2VI5==O NotificationsQObjectV4:@8B8 D09; Open FileQObject 8EV4QuitQObject2C:SoundQObject$2C:>2V A?>2VI5==OSound notificationsQObjectFAL>3>4=V A2OB:CT 45=L =0@>465==O!!!has birthday today!!QObjectB8FOT ?0;LFO<8typingQObject......SoundEngineSettings><0=40CommandSoundEngineSettings"8? 4283C=FO Engine typeSoundEngineSettings8:>=C20=V ExecutablesSoundEngineSettingsh8:>=C20=V (*.exe *.com *.cmd *.bat) AV D09;8 (*.*)5Executables (*.exe *.com *.cmd *.bat) All files (*.*)SoundEngineSettings $>@<0FormSoundEngineSettings57 72C:CNo soundSoundEngineSettings QSoundQSoundSoundEngineSettings,254VBL :><0=4=89 H;OESelect command pathSoundEngineSettingsAV 72C:>2V D09;8 1C4CBL A:>?V9>20=V 2 :0B0;>3 "%1/". A=CNGV D09;8 1C4CBL ?5@570?8A0=V 157 6>4=8E 70?8BV2. 060TB5 ?@>4>26C20B8?All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue?SoundLayerSettingsV!B0;0AL ?><8;:0 ?V4 G0A G8B0==O D09;C "%1".)An error occured while reading file "%1".SoundLayerSettings&>=B0:B 7<V=82 AB0=Contact changed statusSoundLayerSettings >=B0:B 2 <5@56VContact is onlineSoundLayerSettings(>=B0:B ?>70 <5@565NContact went offlineSoundLayerSettingsB0ABC?0T 45=L =0@>465==O :>=B0:BCContact's birthday is commingSoundLayerSettingsN5<>6;82> A:>?VN20B8 D09; "%1" 4> "%2".!Could not copy file "%1" to "%2".SoundLayerSettingsR5<>6;82> 2V4:@8B8 D09; "%1" 4;O G8B0==O.%Could not open file "%1" for reading.SoundLayerSettingsP5<>6;82> 2V4:@8B8 D09; "%1" 4;O 70?8AC.%Could not open file "%1" for writing.SoundLayerSettings><8;:0ErrorSoundLayerSettings.:A?>@B 72C:>2>3> AB8;NExport sound styleSoundLayerSettings:A?>@B... Export...SoundLayerSettings<$09; "%1" <0T =52V@=89 D>@<0B.File "%1" has wrong format.SoundLayerSettings0<?>@BC20B8 72C:>2C B5<CImport sound styleSoundLayerSettings&EV4=5 ?>2V4><;5==OIncoming messageSoundLayerSettings,V4:@8B8 72C:>289 D09;Open sound fileSoundLayerSettings(8EV4=5 ?>2V4><;5==OOutgoing messageSoundLayerSettings^2C:>2V ?>4VW CA?VH=> 5:A?>@B>20=> 2 D09; "%1".0Sound events successfully exported to file "%1".SoundLayerSettingsL2C:>2V D09;8 (*.wav);;AV D09;8 (*.*)$Sound files (*.wav);;All files (*.*)SoundLayerSettings 0?CA:StartupSoundLayerSettings!8AB5<=0 ?>4VO System eventSoundLayerSettings"$09;8 XML (*.xml)XML files (*.xml)SoundLayerSettings0AB>AC20B8ApplySoundSettingsClass >4VWEventsSoundSettingsClass:A?>@B... Export...SoundSettingsClass<?>@B... Import...SoundSettingsClassV4:@8B8OpenSoundSettingsClassV4B2>@8B8PlaySoundSettingsClass2C:>289 D09;: Sound file:SoundSettingsClass8 28:>@8AB>2CTB5 72C:>2C B5<C. 8<:=VBL WW, I>1 <0B8 7<>3C 2818@0B8 >:@5<V 72C:>2V D09;8.FYou're using a sound theme. Please, disable it to set sounds manually.SoundSettingsClasssoundSettings soundSettingsSoundSettingsClass15@565=89 AB0=Preset caption StatusDialog4254KBL ?>2K4><;5==O AB0=CWrite your status message StatusDialog<5<0T>StatusDialogVisualClass!:0AC20B8CancelStatusDialogVisualClass05 ?>:07C20B8 F59 4V0;>3Do not show this dialogStatusDialogVisualClass 0@074OKStatusDialogVisualClass@>DV;L:Preset:StatusDialogVisualClass15@53B8SaveStatusDialogVisualClassStatusDialog StatusDialogStatusDialogVisualClass!:0AC20B8CancelStatusPresetCaptionClass 0@074OKStatusPresetCaptionClass*254VBL =072C ?@>DV;NPlease enter preset captionStatusPresetCaptionClass&StatusPresetCaptionStatusPresetCaptionStatusPresetCaptionClass 4><0At homeTreeContactListModel0 @>1>BVAt workTreeContactListModelV4V9H>2AwayTreeContactListModel5?@5AVO DepressionTreeContactListModel5 BC@1C20B8Do not disturbTreeContactListModel;89EvilTreeContactListModel&>B>289 4;O @>7<>28 Free for chatTreeContactListModel1V4 Having lunchTreeContactListModel52848<89 InvisibleTreeContactListModel54>ABC?=89 Not availableTreeContactListModel09=OB89OccupiedTreeContactListModel>70 <5@565NOfflineTreeContactListModel <5@56VOnlineTreeContactListModel57 02B>@870FVWWithout authorizationTreeContactListModel 6<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, <V6?;0BD>@<>20 ?@>3@0<0 4;O >1<V=C ?>2V4><;5==O<8</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html>

qutIM, multiplatform instant messenger

qutim.develop@gmail.com

(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin

aboutInfoClass/<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> :>=:8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> :>=:8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> !<09;8:8 </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> A2B>@ 72C:>28E ?>4V9</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> !8AB5<0 287=0G5==O :;VT=BV2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> !8AB5<0 ?V4B@8<:8 H:C@>:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html>

Georgy Surkov

Icons pack

mexanist@gmail.com

Yusuke Kamiyamane

Icons pack

http://www.pinvoke.com/

Tango team

Smile pack

http://tango.freedesktop.org/

Denis Novikov

Author of sound events

Alexey Ignatiev

Author of client identification system

twosev@gmail.com

Dmitri Arekhta

daemones@gmail.com

Markus K

Author of skin object

QSkinWindows

aboutInfoClassJ<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">A=>2=89 @>7@>1=8: B0 70A=>2=8: ?@>5:BC</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">A=>2=89 @>7@>1=8:</span></p></body></html>

Rustam Chakin

qutim.develop@gmail.com

Main developer and Project founder

Ruslan Nigmatullin

euroelessar@gmail.com

Main developer

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

aboutInfoClass@>AboutaboutInfoClass@> qutIM About qutIMaboutInfoClass 2B>@8AuthorsaboutInfoClass0:@8B8CloseaboutInfoClass VF5=7V9=0 C3>40License AgreementaboutInfoClass>25@=CB8ALReturnaboutInfoClass >4O:8 Thanks ToaboutInfoClass8840;8B8 >1;V:>289 70?8A %1?Delete %1 account? loginDialog0840;8B8 >1;V:>289 70?8ADelete account loginDialog......loginDialogClass:<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">0:A8<0;L=0 4>268=0 ?0@>;N =5 1V;LH0 O: 8 A8<2>;V2.</span></p></body></html>$

Maximum length of ICQ password is limited to 8 characters.

loginDialogClass1;V:>289 70?8AAccountloginDialogClass 1;V:>289 70?8A:Account:loginDialogClass2B>7'T4=0==O AutoconnectloginDialogClass0@>;L: Password:loginDialogClass15@53B8 ?0@>;LSave my passwordloginDialogClass57?5G=89 2EV4 Secure loginloginDialogClass,>:07C20B8 ?@8 70?CA:CShow on startuploginDialogClass 2V9B8Sign inloginDialogClassE2 minmainSettingsClassA smainSettingsClassP>40B8 >1;V:>2V 70?8A8 2 A8AB5<=89 ;>B>: Add accounts to system tray menumainSettingsClass02648 725@EC Always on topmainSettingsClass,!B0= "V4V9H>2" ?VA;O:Auto-away after:mainSettingsClass"2B>?@8E>2C20==O: Auto-hide:mainSettingsClassH5 ?>:07C20B8 4V0;>3 2E>4C =0 AB0@BV"Don't show login dialog on startupmainSettingsClass %>20B8 =0 AB0@BVHide on startupmainSettingsClass^15@V30B8 @>7<V@ V @>7B0HC20==O >A=>2=>3> 2V:=0"Save main window size and positionmainSettingsClass$>:07C20B8 AB0= 7:Show status from:mainSettingsClassF0?CA: BV;L:8 >4=VTW :>?VW ?@>3@0<8!Start only one qutIM at same timemainSettingsClassmainSettings mainSettingsmainSettingsClass &8EV4&QuitqutIM &0;0HBC20==O... &Settings...qutIMN&0;0HBC20==O V=B5@D59AC :>@8ABC20G0...&User interface settings...qutIMD8 4V9A=> 1060TB5 7<V=8B8 ?@>DV;L?%Do you really want to switch profile?qutIM.0;0HBC20==O <>4C;V2...Plug-in settings...qutIM<V=8B8 ?@>DV;LSwitch profilequtIM qutIMqutIM qutIMClass1;V:>2V 70?8A8Accounts qutimSettingsA=>2=VGeneral qutimSettings";>10;L=89 ?@>:AV Global proxy qutimSettings215@53B8 =0;0HBC20==O %1?Save %1 settings? qutimSettings*15@53B8 =0;0HBC20==O Save settings qutimSettings11qutimSettingsClass0AB>AC20B8ApplyqutimSettingsClass!:0AC20B8CancelqutimSettingsClass 0@074OKqutimSettingsClass0;0HBC20==OSettingsqutimSettingsClass ) , qutim-0.2.0/languages/uk_UA/binaries/irc.qm0000755000175000017500000003227511240775420022214 0ustar euroelessareuroelessar  A T.- I&~ I_ JV N R4 T{ V w { {P  ee u0  # > > .c  . ū) 7   -  }  ! !m ! " "] ÕF M  M%2 Ap@ As At Au' Avt K% ʌs% T T&1 Y'p 4W o;b o; o; z Ĭ <! $U u  7drRWROj%* Ә#kGd.i/66676667AddAccountFormClassB$>@<0 4>4020==O >1;V:>28E 70?8AV2AddAccountFormAddAccountFormClassV::Nick:AddAccountFormClass0@>;L: Password:AddAccountFormClass >@B:Port:AddAccountFormClass!?@026=T V<'O: Real Name:AddAccountFormClass15@53B8 ?0@>;L Save passwordAddAccountFormClass!5@25@:Server:AddAccountFormClass irc.freenode.netirc.freenode.netAddAccountFormClass&>=A>;L IRC-A5@25@0IRC Server ConsoleIrcConsoleClassV4V9H>2Away ircAccount010=8B8Ban ircAccount010=5=>Banned ircAccountCTCPCTCP ircAccount<V=8B8 B5<C Change topic ircAccount(4<V=VAB@0B>@ :0=0;CChannel administrator ircAccount(0?V2>?5@0B>@ :0=0;CChannel half-operator ircAccount?5@0B>@ :0=0;CChannel operator ircAccount;0A=8: :0=0;C Channel owner ircAccount!?8A>: :0=0;V2 Channels List ircAccount>=A>;LConsole ircAccount&0B8 =0?V2>?5@0B>@0 Give HalfOp ircAccount*0B8 AB0BCA >?5@0B>@0Give Op ircAccount0B8 3>;>A Give Voice ircAccountIRC->?5@0B>@ IRC operator ircAccount>2V4:0 Information ircAccount09B8 =0 :0=0; Join Channel ircAccount8:8=CB8Kick ircAccount"8:8=CB8/7010=8B8 Kick / Ban ircAccount"@8G8=0 28:840==O Kick reason ircAccount8:8=CB8 7... Kick with... ircAccount  568<Mode ircAccount  568<8Modes ircAccount !?>2VI0B8 020B0@ Notify avatar ircAccount>70 <5@565NOffline ircAccount <5@56VOnline ircAccount @820B Private chat ircAccount0B8 >?5@0B>@0 Take HalfOp ircAccount.7OB8 AB0BCA >?5@0B>@0 Take Op ircAccount,7OB8 AB0BCA >?5@0B>@0 Take Voice ircAccount=OB8 10=UnBan ircAccount >;>AVoice ircAccount >7H8@5=VAdvancedircAccountSettingsClassV::Age:ircAccountSettingsClass&;LB5@=0B82=89 =V::Alternate Nick:ircAccountSettingsClassApple Roman Apple RomanircAccountSettingsClass0AB>AC20B8ApplyircAccountSettingsClass&E>48B8 ?@8 70?CA:CAutologin on startircAccountSettingsClassL2B>=04A8;0==O :><0=4 ?VA;O 7'T4=0==O: Autosend commands after connect:ircAccountSettingsClassV=: =0 020B0@: Avatar URL:ircAccountSettingsClassBig5Big5ircAccountSettingsClassBig5-HKSCS Big5-HKSCSircAccountSettingsClass!:0AC20B8CancelircAccountSettingsClass>4C20==O: Codepage:ircAccountSettingsClass EUC-JPEUC-JPircAccountSettingsClass EUC-KREUC-KRircAccountSettingsClass V=>G0FemaleircAccountSettingsClassGB18030-0 GB18030-0ircAccountSettingsClass !B0BL:Gender:ircAccountSettingsClassA=>2=VGeneralircAccountSettingsClassIBM 850IBM 850ircAccountSettingsClassIBM 866IBM 866ircAccountSettingsClassIBM 874IBM 874ircAccountSettingsClassD0;0HBC20==O >1;V:>2>3> 70?8AC IRCIRC Account SettingsircAccountSettingsClassISO 2022-JP ISO 2022-JPircAccountSettingsClassISO 8859-1 ISO 8859-1ircAccountSettingsClassISO 8859-10 ISO 8859-10ircAccountSettingsClassISO 8859-13 ISO 8859-13ircAccountSettingsClassISO 8859-14 ISO 8859-14ircAccountSettingsClassISO 8859-15 ISO 8859-15ircAccountSettingsClassISO 8859-16 ISO 8859-16ircAccountSettingsClassISO 8859-2 ISO 8859-2ircAccountSettingsClassISO 8859-3 ISO 8859-3ircAccountSettingsClassISO 8859-4 ISO 8859-4ircAccountSettingsClassISO 8859-5 ISO 8859-5ircAccountSettingsClassISO 8859-6 ISO 8859-6ircAccountSettingsClassISO 8859-7 ISO 8859-7ircAccountSettingsClassISO 8859-8 ISO 8859-8ircAccountSettingsClassISO 8859-9 ISO 8859-9ircAccountSettingsClass45=B8DV:0FVOIdentifyircAccountSettingsClassIscii-Bng Iscii-BngircAccountSettingsClassIscii-Dev Iscii-DevircAccountSettingsClassIscii-Gjr Iscii-GjrircAccountSettingsClassIscii-Knd Iscii-KndircAccountSettingsClassIscii-Mlm Iscii-MlmircAccountSettingsClassIscii-Ori Iscii-OriircAccountSettingsClassIscii-Pnj Iscii-PnjircAccountSettingsClassIscii-Tlg Iscii-TlgircAccountSettingsClassIscii-Tml Iscii-TmlircAccountSettingsClassJIS X 0201 JIS X 0201ircAccountSettingsClassJIS X 0208 JIS X 0208ircAccountSettingsClass KOI8-RKOI8-RircAccountSettingsClass KOI8-UKOI8-UircAccountSettingsClass >28: Languages:ircAccountSettingsClass >7B0HC20==OLocationircAccountSettingsClass'>;>2VG0MaleircAccountSettingsClassMuleLao-1 MuleLao-1ircAccountSettingsClassV::Nick:ircAccountSettingsClass 0@074OKircAccountSettingsClass =H5:Other:ircAccountSettingsClass*'0AB8=0 ?>2V4><;5==O: Part message:ircAccountSettingsClass >@B:Port:ircAccountSettingsClass*8EV4=5 ?>2V4><;5==O: Quit message:ircAccountSettingsClass ROMAN8ROMAN8ircAccountSettingsClass!?@026=T V<'O: Real Name:ircAccountSettingsClass!5@25@:Server:ircAccountSettingsClassShift-JIS Shift-JISircAccountSettingsClassTIS-620TIS-620ircAccountSettingsClass TSCIITSCIIircAccountSettingsClass UTF-16UTF-16ircAccountSettingsClassUTF-16BEUTF-16BEircAccountSettingsClassUTF-16LEUTF-16LEircAccountSettingsClass UTF-8UTF-8ircAccountSettingsClass5 2AB0=>2;5=> UnspecifiedircAccountSettingsClassWINSAMI2WINSAMI2ircAccountSettingsClassWindows-1250 Windows-1250ircAccountSettingsClassWindows-1251 Windows-1251ircAccountSettingsClassWindows-1252 Windows-1252ircAccountSettingsClassWindows-1253 Windows-1253ircAccountSettingsClassWindows-1254 Windows-1254ircAccountSettingsClassWindows-1255 Windows-1255ircAccountSettingsClassWindows-1256 Windows-1256ircAccountSettingsClassWindows-1257 Windows-1257ircAccountSettingsClassWindows-1258 Windows-1258ircAccountSettingsClass*%1 2AB0=>282 @568< %2%1 has set mode %2 ircProtocol.%1 2V4?>2V4L 2V4 %2: %3%1 reply from %2: %3 ircProtocol.%1 =04A8;0T 70?8B =0 %2%1 requests %2 ircProtocolP%1 =04A8;0T 70?8B =0 =52V4><C :><0=4C %2%1 requests unknown command %2 ircProtocol'T4=0==O 7 %1Connecting to %1 ircProtocolX!?@>10 70AB>AC20==O 0;LB5@=0B82=>3> =V:C: %1Trying alternate nick: %1 ircProtocol >7H8@5=VAdvancedircSettingsClassA=>2=VMainircSettingsClass 0;0HBC20==O IRC ircSettingsircSettingsClass 0=0;:Channel:joinChannelClass09B8 =0 :0=0; Join ChanneljoinChannelClass@!?8A>: :0=0;V2 7020=B065=>. (%1)Channels list loaded. (%1) listChannel<B@8<0==O A?8A:C :0=0;V2... %1Fetching channels list... %1 listChannel@B@8<0==O A?8A:C :0=0;V2... (%1)Fetching channels list... (%1) listChannel.0?8B A?8A:C :0=0;V2... Sending channels list request... listChannel<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html>

listChannelClass 0=0;ChannellistChannelClass!?8A>: :0=0;V2 Channels ListlistChannelClass$V;LB@: Filter by:listChannelClass!?8A>: 70?8BV2 Request listlistChannelClass"5<0TopiclistChannelClass>@8ABC20GVUserslistChannelClass"5AB>289 4V0;>3 textDialogtextDialogClass ) , qutim-0.2.0/languages/uk_UA/binaries/jabber.qm0000755000175000017500000013460711243502505022661 0ustar euroelessareuroelessarJ+2nJ+BJ6 J62J65J6BJ6u}J6sJ6?J"oKduLbyLʘ2L)YM M tNy&NdNOJ1OjzRS)*TVTuTTVELVEWizUWV Y'bJGYb;Z <ZR[+^%ycn-Icn-i\ZUinqvrTy.c?^z~5mK1#n@>F_C'6)Ŗ4$ $HC01k]CWJ%. ? :A_ ~aOU9#X^3Z@kXm4[KsC JejR-egTt0`0D OrAPu4{F%pMsU_jv HfNF6Ch^eJ,NvW4[6o~O6<7G+TIIlXrYV^onrH%-|.%c9LÌ1zA]\=##I26^ P6`f!lrqJXytsw}7 Of7s~WT0III/I0ID IDIPIZ/Iu=IITIEfDJfE )"9WG$y7-y Qo4!PPZiab5%l:l:y&[&N'V{i.h(F$;SS*8156L9*7U4#C8C FHUe0E e0EIxnL2zU^^2:3+7k.3?zx!<}3TT0I<פ M#C ~-Dl7.[DFj:oFd%G(ZbM!Z~z'hD3m,*;ixLG?{N*wTqdLKL3G,Žj:LGLUZYA gֳNh/Y.Y.Ynntwt/{}pA#{$s3<8q@_n\>Zarhps{~t7~v85$t~M4t#W(>J"tolOtjKahb-ptp2A6#8eV8]CnzFCUo_n`v|0un\%s+FdA R%X_Je"J;JS u,[u.<̧&- )az 6_ 8aBm B5X I~nA P{q P^ _7  $ 9  Z đ4$ Ơ: 3V 7 # : a$ w] I k - 4$y > Cx, L <zZ eͲf f gDE gK gU lJV o +y %} / :y > >UH f * H #b # ( -zVD 0Eav S_Z dNu eKV ntH. nt $9 { 4 R9P %)D . %%j  G `B B7" B B '^F { E* Ek #  ! > ]$ gAK tt ( y SJ SY S\ S z: s (]t -F - " q6 %  !S r 2o q7 &TX ;I M! S* dt 7. PNw uS ~d <PY9.y\+nl=x=P Ci ,zulP;)+7/;J)"64f@@N/Gm S0!~B7lLJMORk>)Rk>gXPjrZw4-f&kL)km"^0qf}t"t-8Cuv [8?nfÒ'@ir/"i2B>@87C20B8 AuthorizeAcceptAuthDialog01>@>=8B8DenyAcceptAuthDialog $>@<0FormAcceptAuthDialog3=>@C20B8IgnoreAcceptAuthDialog<=5<0T 3@C?8>  AddContact >40B8Add AddContact$>40B8 :>@8ABC20G0Add User AddContact!:0AC20B8Cancel AddContact @C?0:Group: AddContactJabber ID: Jabber ID: AddContact <'O:Name: AddContact604VA;0B8 70?8B 02B>@870FVWSend authorization request AddContact,=D>@<0FVO :>@8ABC20G0User information AddContact $>@<0FormContactsH>:07C20B8 ABCBCA 2 A?8A:C :>=B0:BV2 Show QIP xStatus in contact listContactsV>:07C20B8 AB0= :>=B0:BC 2 A?8A:C :>=B0:BV2(Show contact status text in contact listContactsL>:07C20B8 @>7H8@5=V V:>=:8 0:B82=>ABV+Show extended activity icon in contact listContactsH>:07C20B8 >A=>2=V V:>=:8 0:B82=>ABV'Show main activity icon in contact listContactsP>:07C20B8 >A=>2=89 @5AC@A 2 A?>2VI5==OE#Show main resource in notificationsContactsV>:07C20B8 V:>=:8 AB0=V2 C A?8A:C :>=B0:BV2Show mood icon in contact listContacts:>:07C20B8 V:>=:C 02B>@870FVWShow not authorized iconContacts`>:07C20B8 V:>=:C =0;0HBC20=L 2 A?8A:C :>=B0:BV2Show tune icon in contact listContacts!:0AC20B8CancelDialog V0;>3DialogDialog 0@074OkDialogV4V9H>2AwayJabberSettings5 BC@1C20B8DNDJabberSettings0 5AC@A 70 70<>2GC20==O<:Default resource:JabberSettings:5 =04A8;0B8 70?8B =0 020B0@8Don't send request for avatarsJabberSettings $>@<0FormJabberSettings&>B>289 4;O @>7<>28 Free for chatJabberSettingsN@>A;CE>2C20B8 ?>@B =0 ?5@540GC D09;V2:Listen port for filetransfer:JabberSettings54>ABC?=89NAJabberSettings <5@56VOnlineJabberSettings<@V>@8B5B 70;568BL 2V4 AB0BCACPriority depends on statusJabberSettingsH5@5?V4'T4=C20B8AO ?VA;O @>7'T4=0==OReconnect after disconnectJabberSettings2B>2EV4 Auto joinJoinChat0:;04:8 BookmarksJoinChat0:@8B8CloseJoinChat>=D5@5=FVO ConferenceJoinChat:EE:AAH:mm:ssJoinChatAB>@VOHistoryJoinChat 2V9B8JoinJoinChat2@8T4=0B8AO 4> <C;LB8G0BCJoin groupchatJoinChat<'ONameJoinChatV:NickJoinChat 0@>;LPasswordJoinChat0?8B >AB0==VE Request last JoinChat&0?8B ?>2V4><;5=L 7Request messages sinceJoinChat00?8B ?>2V4><;5=L 70 G0A#Request messages since the datetimeJoinChat15@53B8SaveJoinChat >HC:SearchJoinChat0;0HBC20==OSettingsJoinChat?>2V4><;5=LmessagesJoinChat:<font color='green'>%1</font>%1 LoginForm6<font color='red'>%1</font>%1 LoginForm 5MAB@0FVO Registration LoginForm,>B@V1=> 225AB8 ?0@>;LYou must enter a password LoginForm:>B@V1=> 225AB8 :>@5:B=89 jidYou must enter a valid jid LoginFormJID:JID:LoginFormClassV:=> 2E>4C LoginFormLoginFormClass0@>;L: Password:LoginFormClass@0@5TAB@C20B8 F5 >1;V:>289 70?8ARegister this accountLoginFormClass E-mailE-mailPersonal $>@<0FormPersonalA=>2=VGeneralPersonal><0H=V9HomePersonal"5;5D>=PhonePersonal >1>G89WorkPersonal%1%1QObject%1 4=V2%1 daysQObject%1 3>48=%1 hoursQObject%1 E28;8= %1 minutesQObject%1 A5:C=40 %1 secondQObject%1 A5:C=4 %1 secondsQObject%1 @>:V2%1 yearsQObject 1 45=L1 dayQObject1 3>48=01 hourQObject1 E28;8=01 minuteQObject 1 @V:1 yearQObject><font color='#808080'>%1</font>%1QObjectd<font size='2'><b>2B>@870FVO:</b> <i>7</i></font>7Authorization: FromQObjectl<font size='2'><b>2B>@870FVO:</b> <i>5<0T</i></font>7Authorization: NoneQObjectf<font size='2'><b>2B>@870FVO:</b> <i>4></i></font>5Authorization: ToQObject`<font size='2'><b>>6;8289 :;VT=B:</b> %1</font>0Possible client: %1QObjectX<font size='2'><b>"5:AB AB0=C:</b> %1</font>,Status text: %1QObject<font size='2'><b>>@8ABC20G ?>70 <5@565N 7:</b> <i>%1</i> (7 ?>2V4><;5==O<: <i>%2</i>)</font>VUser went offline at: %1 (with message: %2)QObject<font size='2'><b>>@8ABC20G ?>70 <5@565N 7:</b> <i>%1</i></font><User went offline at: %1QObjectF<font size='2'><i>%1:</i> %2</font>#%1: %2QObject><font size='2'><i>%1</i></font>%1QObjectX<font size='2'><i>@>A;CE>2CT:</i> %1</font>*Listening: %1QObject:B82=VABLActivityQObject >NALAfraidQObjectAV D09;8 (*) All files (*)QObject482C20==OAmazedQObject $;V@BAmorousQObject ;NALAngryQObject >74@0B>20=89AnnoyedQObject0:;>?>B0=89AnxiousQObject0A>@><;5=89AshamedQObjectC4L3CNG89BoredQObject%>@>1@89BraveQObject!?>:V9=89CalmQObject15@56=89CautiousQObject@>E>;>4=>ColdQObject?52=5=89 ConfidentQObject15=B565=89ConfusedQObject04C<;8289 ContemplativeQObject04>2>;5=89 ContentedQObject@8<E;8289CrankyQObject >652>;VN B@VH:8CrazyQObject"2>@GVABLCreativeQObject>?8B;8289CuriousQObject@83=VG5=89DejectedQObject5?@5AVO DepressedQObject >7G0@>20=89 DisappointedQObjectV4@070 DisgustedQObject!B@82>65=89DismayedQObject!?0=B5;8G5=89 DistractedQObject"@0?570EatingQObject=VO:>2V;89 EmbarrassedQObject074@VA=89EnviousQObject!E28;L>20=89ExcitedQObject ?@028 ExercisingQObject>:5B;8289 FlirtatiousQObject# 2V4G0W FrustratedQObject4OG=89GratefulQObject "@0C@GrievingQObject!5@48B89GrumpyQObject8=0GuiltyQObject)0A;8289HappyQObject #A?VEHopefulQObject 0@OG5HotQObject@8=865=89HumbledQObject@8=865=89 HumiliatedQObject%>GC E020B8HungryQObjectV;LHurtQObject@065=89 ImpressedQObject;03>3>2V==OIn aweQObject0:>E0=89In loveQObject1C@5=89 IndignantQObject&V:02VABL InterestedQObjectB@CT=89 IntoxicatedQObject5?5@5<>6=89 InvincibleQObject 52=8289JealousQObject(2V9B8 4> <C;LB8G0BCJoin groupchat onQObject!0<>B=V9LonelyQObjectB@0G5=89LostQObject#A?VH=89LuckyQObject0AB@V9MoodQObjectV4:@8B8 D09; Open FileQObject!C<SadQObject!0@:07< SarcasticQObject >7<>2;OTTalkingQObject4OG=VABLThankfulQObject B><0TiredQObject>4>@>6 TravelingQObject0;0HBC20==OTuneQObject  >1>B0WorkingQObject?@818@0==OcleaningQObject?@>3@0<CTcodingQObject >1V40T having lunchQObject 2 02B>in a carQObject=0 7CAB@VGV in a meetingQObject2 02B>1CAVon a busQObject2 ;VB0:C on a planeQObject2 ?>W74V on a trainQObject?>4>@>6CT on a tripQObject=02G0TBLAOstudyingQObject?;020==OswimmingQObject=0 ?@>3C;O=FVwalkingQObject?8H5writingQObject0AB>AC20B8Apply RoomConfig!:0AC20B8Cancel RoomConfig $>@<0Form RoomConfig 0@074Ok RoomConfig4<V=VAB@0B>@8AdministratorsRoomParticipant0AB>AC20B8ApplyRoomParticipant010=5=VBannedRoomParticipant!:0AC20B8CancelRoomParticipant $>@<0FormRoomParticipantJIDJIDRoomParticipant#G0A=8:8MembersRoomParticipant 0@074OkRoomParticipant;0A=8:8OwnersRoomParticipant @C?8ReasonRoomParticipantG8AB8B8ClearSearch0:@8B8CloseSearch020=B068B8FetchSearch $>@<0FormSearch >HC:SearchSearch!5@25@:Server:Search^254VBL =072C A5@25@0 V 7020=B06B5 ?>;O ?>HC:C.$Type server and fetch search fields.Search">HC: :>=D5@5=FVWSearch conferenceSearchConference >HC:>289 A5@2VASearch service SearchService&>HC:>289 B@0=A?>@BSearch transportSearchTransport.>40B8 4> A?8A:C ?@>:AVAdd to proxy listServiceBrowser">40B8 4> @>AB5@0 Add to rosterServiceBrowser0:@8B8CloseServiceBrowser 8:>=0B8 :><0=4CExecute commandServiceBrowserJIDJIDServiceBrowser4@8T4=0B8AO 4> :>=D5@5=FVWJoin conferenceServiceBrowser<'ONameServiceBrowser0@5TAB@C20B8AORegisterServiceBrowser >HC:SearchServiceBrowser!5@25@:Server:ServiceBrowser.>:070B8 2V78B=C :0@B:C Show VCardServiceBrowser.@0C75@ A5@2VAV2 jabberjServiceBrowserServiceBrowserL<img src='%1' width='%2' height='%3'/>& VCardAvatarv%1&nbsp;(<font color='#808080'>=52V@=89 D>@<0B 40B8</font>)8%1 (wrong date format) VCardBirthday 5=L =0@>465==O: Birthday: VCardBirthday VAB>:City: VCardRecord><?0=VO:Company: VCardRecord@0W=0:Country: VCardRecordV44V;: Department: VCardRecord*1>=5=BAL:0 A:@8=L:0:PO Box: VCardRecord >HB>289 V=45:A: Post code: VCardRecord  09>=:Region: VCardRecord>A040:Role: VCardRecord !09B:Site: VCardRecordC;8FO:Street: VCardRecord03>;>2>::Title: VCardRecord<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

 XmlConsoleG8AB8B8Clear XmlConsole0:@8B8Close XmlConsole $>@<0Form XmlConsole2V4 XML... XML Input... XmlConsole&0:@8B8&Close XmlPrompt&04VA;0B8&Send XmlPrompt2V4 XML XML Input XmlPrompt!:0AC20B8CancelactivityDialogClass81@0B8ChooseactivityDialogClass815@VBL AB0=Choose your activityactivityDialogClass!:0AC20B8CancelcustomStatusDialogClass81@0B8ChoosecustomStatusDialogClass 815@VBL =0AB@V9Choose your moodcustomStatusDialogClass>40B8 :>=B0:BAdd new contactjAccount,>40B8 =>289 :>=B0:B 2Add new contact onjAccount>40B:>2> AdditionaljAccountV4V9H>2AwayjAccount>=D5@5=FVW ConferencesjAccount5 BC@1C20B8DNDjAccount&=09B8 :>@8ABC20GV2 Find usersjAccount&>B>289 4;O @>7<>28 Free for chatjAccount$52848<89 4;O 2AVEInvisible for alljAccountH52848<89 BV;L:8 4;O A?8A:C =57@OG8E!Invisible only for invisible listjAccount(2V9B8 4> <C;LB8G0BCJoin groupchatjAccount54>ABC?=89NAjAccount>70 <5@565NOfflinejAccount <5@56VOnlinejAccount(V4:@8B8 :>=A>;L XMLOpen XML consolejAccountA>18AB89 AB0=Privacy statusjAccount3;O4 A;C61Service browserjAccount !;C618ServicesjAccount*AB0=>28B8 0:B82=VABL Set activityjAccount$AB0=>28B8 =0AB@V9Set moodjAccountP>:070B8/7<V=8B8 >A>18ABC 2V78B=C :0@B:CView/change personal vCardjAccount 848<89 4;O 2AVEVisible for alljAccount@848<89 BV;L:8 4;O A?8A:C 7@OG8EVisible only for visible listjAccountN>B@K1=> 225AB8 ?0@>;L 2 =0;0HBC20==OE.&You must enter a password in settings.jAccount>B@V1=> 28:>@8AB>2C20B8 2V@=89 jid. >2B>@=> AB2>@KBL >1;V:>289 70?8A jabber.?You must use a valid jid. Please, recreate your jabber account.jAccount 5403C20==O %1 Editing %1jAccountSettings #2030WarningjAccountSettings,>B@V1=> 225AB8 ?0@>;LYou must enter a passwordjAccountSettings1;V:>289 70?8AAccountjAccountSettingsClass 02648AlwaysjAccountSettingsClass0AB>AC20B8ApplyjAccountSettingsClass2B5=B8DV:0FVOAuthenticationjAccountSettingsClass0'T4=C20B8AL ?@8 70?CA:CAutoconnect at startjAccountSettingsClass!:0AC20B8CanceljAccountSettingsClass<!B8A:0B8 B@0DV: (O:I> <>6;82>)Compress traffic (if possible)jAccountSettingsClass'T4=0==O ConnectionjAccountSettingsClass 0 70<>2GC20==O<DefaultjAccountSettingsClass*@8?B>20=5 7'T4=0==O:Encrypt connection:jAccountSettingsClassHTTPHTTPjAccountSettingsClass %>AB:Host:jAccountSettingsClassJID:JID:jAccountSettingsClassF15@V30B8 AB0= V7 ?>?5@54=L>W A5AVWKeep previous session statusjAccountSettingsClass2>:0;L=5 AE>28I5 70:;04>:Local bookmark storagejAccountSettingsClassB!0<>ABV9=> 2AB0=>28B8 E>AB V ?>@B!Manually set server host and portjAccountSettingsClass V:>;8NeverjAccountSettingsClass 5<0TNonejAccountSettingsClass 0@074OKjAccountSettingsClass0@>;L: Password:jAccountSettingsClass >@B:Port:jAccountSettingsClass@V>@8B5B: Priority:jAccountSettingsClass @>:AVProxyjAccountSettingsClass"8? ?@>:AV: Proxy type:jAccountSettingsClass 5AC@A: Resource:jAccountSettingsClassSOCKS 5SOCKS 5jAccountSettingsClassXAB0=>28B8 70;56=VABL ?@V>@8B5BC 2V4 AB0BCAC$Set priority depending of the statusjAccountSettingsClass8:>@8AB>2C20B8 FN >?FVN 4;O A5@25@V2, O:V =5 ?V4B@8<CNBL 70:;04:8.4Use this option for servers doesn't support bookmarkjAccountSettingsClass"<'O :>@8ABC20G0: User name:jAccountSettingsClass>;8 4>ABC?=>When availablejAccountSettingsClass<0;0HBC20==O >1;V:>2>3> 70?8ACjAccountSettingsjAccountSettingsClass<=5<0T 3@C?8>  jAddContact !;C618Services jAddContact!:0AC20B8CanceljAdhoc >B>2>CompletejAdhoc V=5FLFinishjAdhoc0ABC?=5NextjAdhoc 0@074OkjAdhoc>?5@54=TPreviousjAdhoc%1 7010=5=>%1 has been banned jConference %1 1C;> 28:8=CB>%1 has been kicked jConference$%1 ?>:840T :V<=0BC%1 has left the room jConference*%1 2AB0=>282 B5<C: %2%1 has set the subject to: %2 jConference,%1 B5?5@ 2V4><89 O: %2%1 is now known as %2 jConference4%2 (%1) 22V9H>2 4> :V<=0B8%2 (%1) has joined the room jConference*%2 22V9H>2 4> :V<=0B8%2 has joined the room jConference6%2 22V9H>2 4> :V<=0B8 O: %1%2 has joined the room as %1 jConference%2 B5?5@ %1 %2 now is %1 jConference@%3 (%2) 22V9H>2 4> :V<=0B8 O: %1!%3 (%2) has joined the room as %1 jConference %3 (%2) B5?5@ %1%3 (%2) now is %1 jConference@%3 22V9H>2 4> :V<=0B8 O: %1 V %2#%3 has joined the room as %1 and %2 jConference %3 B5?5@ %1 V %2%3 now is %1 and %2 jConferenceJ%4 (%3) 22V9H>2 4> :V<=0B8 O: %1 V %2(%4 (%3) has joined the room as %1 and %2 jConference*%4 (%3) B5?5@ %1 V %2%4 (%3) now is %1 and %2 jConferenceZ<font size='2'><b>VAF5 @>1>B8:</b> %1</font>,Affiliation: %1 jConferenceH<font size='2'><b>JID:</b> %1</font>$JID: %1 jConferenceT<font size='2'><b>1>2'O7>::</b> %1</font>%Role: %1 jConference4>40B8 4> A?8A:C :>=B0:BV2Add to contact list jConference010=8B8Ban jConference*010=8B8 ?>2V4><;5==O Ban message jConference>=D;V:B: 81@0=89 =V: :V<=0B8 265 28:>@8AB>2CTBLAO V 70@5TAB@>20=89 V=H8< :>@8ABC20G5<.HConflict: Desired room nickname is in use or registered by another user. jConference<>?VN20B8 JID 4> 1CD5@C >1<V=CCopy JID to clipboard jConferencel01>@>=5=>: 4>ABC? =5 =040TBLAO G5@57 10= :>@8ABC20G0.)Forbidden: Access denied, user is banned. jConference.0?@>A8B8 4> <C;LB8G0BCInvite to groupchat jConferenceL;5<5=B =5 7=0945=>. V<=0B0 =5 VA=CT.(Item not found: The room does not exist. jConference(2V9B8 4> <C;LB8G0BCJoin groupchat on jConference8:8=CB8Kick jConference*840;8B8 ?>2V4><;5==O Kick message jConference>45@0B>@ Moderator jConferenceH54>ABC?=>: =V:8 :V<=0B 701;>:>20=>.+Not acceptable: Room nicks are locked down. jConferenceV5 4>72>;5=>: !B2>@5==O :V<=0B8 701>@>=5=>.)Not allowed: Room creation is restricted. jConferenceB5 02B>@87>20=>. >B@V15= ?0@>;L."Not authorized: Password required. jConference#G0A=8: Participant jConferencet>B@V1=0 @5TAB@0FVO: >@8ABC20G0 =5<0T C A?8A:C CG0A=8:V2.6Registration required: User is not on the member list. jConference<>2B>@=> 22V9B8 4> :>=D5@5=FVWRejoin to conference jConference(0;0HBC20==O :V<=0B8Room configuration jConference00;0HBC20==O :V<=0B8: %1Room configuration: %1 jConference #G0A=8:8 :V<=0B8Room participants jConference(#G0A=8:8 :V<=0B8: %1Room participants: %1 jConference(15@53B8 4> 70:;04>:Save to bookmarks jConference!;C610 =54>ABC?=0: 5@528I5=> <0:A8<0;L=C :V;L:VABL :>@8ABC20GV2.>Service unavailable: Maximum number of users has been reached. jConference"5<0: %2The subject is: %2 jConference<52V4><0 ?><8;:0: 5<0T >?8AC.Unknown error: No description. jConference>@8ABC20G %1 70?@>HCT 0A 4> :>=D5@5=FVW %2 7 ?@8G8=>N "%3" @89=OB8 70?@>H5==O?GUser %1 invite you to conference %2 with reason "%3" Accept invitation? jConference ABLVisitor jConference0A 7010=8;8You have been banned jConference0A 7010=8;8 7You have been banned from jConference0A 28:8=C;8You have been kicked jConference0A 28:8=C;8 7You have been kicked from jConference04V<V=VAB@0B>@ administrator jConference7010=5=>banned jConference 3VABLguest jConferenceCG0A=8:member jConference<>45@0B>@ moderator jConference2;0A=8:owner jConferenceCG0A=8: participant jConference 3VABLvisitor jConference7 ?@8G8=>N: with reason: jConference157 ?@8G8=8without reason jConference@89=OB8AcceptjFileTransferRequestV4E8;8B8DeclinejFileTransferRequest 0720: File name:jFileTransferRequest >7<V@ D09;C: File size:jFileTransferRequest $>@<0FormjFileTransferRequestV4:From:jFileTransferRequest15@53B8 D09; Save FilejFileTransferRequest!:0AC20B8CanceljFileTransferWidget0:@8B8ClosejFileTransferWidget@>1;5=>...Done...jFileTransferWidget>B>2>:Done:jFileTransferWidget >7<V@ D09;C: File size:jFileTransferWidget$5@540G0 D09;C: %1File transfer: %1jFileTransferWidget0720 D09;C: Filename:jFileTransferWidget $>@<0FormjFileTransferWidget@89><... Getting...jFileTransferWidget@>9H;> G0AC: Last time:jFileTransferWidgetV4:@8B8OpenjFileTransferWidget 0;8H8;>AL G0AC:Remained time:jFileTransferWidget04A8;0==O... Sending...jFileTransferWidget(284:VABL:Speed:jFileTransferWidget !B0=:Status:jFileTransferWidgetGV:C20==O... Waiting...jFileTransferWidget(!B2>@8B8 :>=D5@5=FVNNew conference jJoinChatAB2>@8B8 G0Bnew chat jJoinChat>=B0:B8ContactsjLayerA=>2=V JabberJabber GeneraljLayer%2 <%1>%2 <%1> jProtocolF><8;:0 ?>B>:C. >BV: 1C;> 70:@8B>.3A stream error occured. The stream has been closed. jProtocol*><8;:0 22>lC/282>4C.An I/O error occured. jProtocol.><8;:0 XML ?0@AC20==O.An XML parse error occurred. jProtocol(5240;0 02B>@8E0FVO. 5?@028;L=5 V<'O :>@8ABC20G0 G8 ?0@>;L 1> >1;V:>289 70?8A =5 VA=CT. 8:>@8AB>2C9B5 ClientBase::authError(), I>1 7=09B8 ?@8G8=C.yAuthentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. jProtocol"0?8B 02B>@870FVWAuthorization request jProtocol:2B>@870FVN :>=B0:BC 2840;5=>$Contacts's authorization was removed jProtocolb5240;0 2B5=B8DV:0FVO HTTP/SOCKS5 ?@>:AV-A5@25@0.(HTTP/SOCKS5 proxy authentication failed. jProtocol23>! 5 28AB0G0T ?0<'OBV.Out of memory. Uhoh. jProtocol&V4?@02=8:: %2 <%1>Sender: %2 <%1> jProtocolV4?@02=8:8: Senders:  jProtocol !;C618Services jProtocol"5<0: %1 Subject: %1 jProtocolHTTP/SOCKS5 ?@>:AV-A5@25@ 28<030T =5?V4B@8<C20=>3> <5E0=V7<C 02B>@870FVW.=The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. jProtocoldHTTP/SOCKS5 ?@>:AV-A5@25@ ?>B@51CT 02B5=B8DV:0FVW..The HTTP/SOCKS5 proxy requires authentication. jProtocold'T4=0==O @>7V@20=> A5@25@>< (=0 A>:5B=><C @V2=V).?The connection was refused by the server (on the socket level). jProtocolN5@AVO 2EV4=>3> ?>B>:C =5 ?V4B@8<CTBLAO.The incoming stream's version is not supported jProtocol8>BV: 1C;> 70:@8B> A5@25@><.+The stream has been closed (by the server). jProtocol|0?8B @>7'T4=0==O 2V4 :>@8ABC20G0 (G8 ?@>B>:>;C 28I>3> @V2=O).;The user (or higher-level protocol) requested a disconnect. jProtocol45<0T 0:B82=>3> 7'T4=0==O.There is no active connection. jProtocolURL: %1URL: %1 jProtocolj52V4><0 ?><8;:0. &5 482>286=>, I> 8 F5 10G8B5...O_o3Unknown error. It is amazing that you see it... O_o jProtocol85?@>G8B0=8E ?>2V4><;5=L: %1Unreaded messages: %1 jProtocol 0A 02B>@87C20;8You were authorized jProtocol20HC 02B>@870FVN 2840;5=>Your authorization was removed jProtocoluken jProtocol0V78B:C CA?H=> 715@565=>vCard is succesfully saved jProtocolF<h3>=D>@<0FVO ?@> 0:B82=VABL:</h3>

Activity info:

 jPubsubInfo@<h3>=D>@<0FVO ?@> =0AB@V9:</h3>

Mood info:

 jPubsubInfoJ<h3>=D>@<0FVO ?@> =0;0HBC20==O:</h3>

Tune info:

 jPubsubInfo8:>=025FL: %1 Artist: %1 jPubsubInfoA=>2=5: %1 General: %1 jPubsubInfo>268=0: %1 Length: %1 jPubsubInfo0720: %1Name: %1 jPubsubInfo 59B8=3: %1 Rating: %1 jPubsubInfo65@5;>: %1 Source: %1 jPubsubInfo=H5: %1 Specific: %1 jPubsubInfo"5:AB:%1Text: %1 jPubsubInfo0720: %1 Title: %1 jPubsubInfo>@V6:0: %1 Track: %1 jPubsubInfo4URL: <a href="%1">;V=:</a>Uri: link jPubsubInfo0:@8B8ClosejPubsubInfoClass4>40B8 4> A?8A:C :>=B0:BV2Add to contact listjRoster8>40B8 4> A?8A:C V3=>@>20=8EAdd to ignore listjRoster2>40B8 4> A?8A:C =57@OG8EAdd to invisible listjRoster.>40B8 4> A?8A:C 7@OG8EAdd to visible listjRoster00?8B =0 02B>@870FVN 2V4Ask authorization fromjRoster00?8B 02B>@870FVW 2V4 %1Ask authorization from %1jRoster2B>@870FVO AuthorizationjRoster*2B>@87C20B8 :>=B0:B?Authorize contact?jRoster!:0AC20B8CanceljRoster>=D5@5=FVW ConferencesjRosterj>=B0:B 1C45 2840;5=89. 8 2?52=5=V, I> E>G5B5 FL>3>?&Contact will be deleted. Are you sure?jRoster.!:>?VN20B8 JID :>=B0:BCCopy JID to clipboardjRoster 840;8B8 :>=B0:BDelete contactjRoster<840;8B8 V7 A?8A:C V3=>@>20=8EDelete from ignore listjRoster6840;8B8 V7 A?8A:C =57@OG8EDelete from invisible listjRoster2840;8B8 V7 A?8A:C 7@OG8EDelete from visible listjRoster,840;8B8 V7 :>=B0:B0<8Delete with contactsjRoster6840;8B8 70;8H82H8 :>=B0:B8Delete without contactsjRoster 8:>=0B8 :><0=4CExecute commandjRoster"8:>=0B8 :><0=4C:Execute command:jRoster @C?0:Group:jRoster40?@>H5==O =0 :>=D5@5=FVN:Invite to conference:jRoster 2V9B8Log InjRoster 89B8Log OutjRoster5@5<VAB8B8 %1Move %1jRoster(5@5<VAB8B8 4> 3@C?8 Move to groupjRoster <'O:Name:jRoster@8G8=0:Reason:jRoster0@5TAB@C20B8AORegisterjRoster0840;8B8 02B>@870FVN 2V4Remove authorization fromjRoster6840;8B8 02B>@870FVN 2V4 %1Remove authorization from %1jRosterF840;8B8 B@0=A?>@B V 9>3> :>=B0:B8?"Remove transport and his contacts?jRoster*5@59<5=C20B8 :>=B0:BRename contactjRoster004VA;0B8 02B>@870FVN 4>Send authorization tojRoster04VA;0B8 D09; Send filejRoster$04VA;0B8 D09; 4>: Send file to:jRoster404VA;0B8 ?>2V4><;5==O 4>:Send message to:jRoster !;C618ServicesjRoster"@0=A?>@B8 TransportsjRoster><8;:0ErrorjSearchJIDJIDjSearchJabber ID Jabber IDjSearchV:NicknamejSearch >HC:SearchjSearch2<br/><b>$C=:FVW:</b><br/>
Features:
jServiceBrowser8<br/><b>">B>6=>ABV:</b><br/>
Identities:
jServiceBrowser:0B53>@VO: category: jServiceBrowserB8?:type: jServiceBrowser.52V4><0 ?><8;:0 AB0=C.The unknown error condition.jServiceDiscovery %1@%2%1@%2 jSlotSignal$52848<89 4;O 2AVEInvisible for all jSlotSignalH52848<89 BV;L:8 4;O A?8A:C =57@OG8E!Invisible only for invisible list jSlotSignal 848<89 4;O 2AVEVisible for all jSlotSignal@848<89 BV;L:8 4;O A?8A:C 7@OG8EVisible only for visible list jSlotSignal 4@5A0Address jTransport VAB>City jTransport0B0Date jTransport E-MailE-Mail jTransport<'OFirst jTransport@V728I5Last jTransport  V7=5Misc jTransport<'OName jTransportV:Nick jTransport 0@>;LPassword jTransport"5;5D>="5;5D>=Phone jTransport0@5TAB@C20B8AORegister jTransport1;0ABLState jTransport "5:ABText jTransportURLURL jTransport =45:AZip jTransport6>40B8 01>=5=BAL:C A:@8=L:C Add PO boxjVCard,>40B8 45=L =0@>465==O Add birthdayjVCard>40B8 <VAB>Add cityjVCard>40B8 :@0W=C Add countryjVCard>40B8 >?8AAdd descriptionjVCard.>40B8 4><0H=N AB>@V=:C Add homepagejVCard>40B8 V<'OAdd namejVCard>40B8 =V:Add nickjVCard0>40B8 =072C >@30=V70FVWAdd organization namejVCard2>40B8 2V44V; >@30=V70FVWAdd organization unitjVCard,>40B8 ?>HB>289 V=45:A Add postcodejVCard>40B8 @09>= Add regionjVCard>40B8 ?>A04CAdd rolejVCard>40B8 2C;8FN Add streetjVCard>40B8 =072C Add titlejVCard0:@8B8ClosejVCard< >7<V@ <0;N=:0 70=04B> 25;8:89Image size is too bigjVCardP0;N=:8 (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.bmp *.jpg *.jpeg *.png)jVCardV4:@8B8 D09; Open FilejVCard&><8;:0 2V4:@820==O Open errorjVCard=>28B8 40=VRequest detailsjVCard15@53B8SavejVCard=>28B8 D>B> Update photojVCard4=D>@<0FVO ?@> :>@8ABC20G0userInformationjVCard!:0AC20B8CanceltopicConfigDialogClass<V=8B8ChangetopicConfigDialogClass<V=8B8 B5<C Change topictopicConfigDialogClass ) , qutim-0.2.0/languages/uk_UA/binaries/vkontakte.qm0000755000175000017500000000565211237565256023456 0ustar euroelessareuroelessar`Cq >umaumj%' Ae cq >} >+ ) j0 iFC J  <;i A s EdditAccount0AB>AC20B8Apply EdditAccount0'T4=C20B8AL ?@8 70?CA:CAutoconnect on start EdditAccount!:0AC20B8Cancel EdditAccountF5@52V@OB8 >=>2;5==O 4@C7V2 :>6=8E: Check for friends updates every: EdditAccountZ5@52V@OB8 =0O2=VABL =>28E ?>2V4><;5=L :>6=V:Check for new messages every: EdditAccount 5403C20==O %1 Editing %1 EdditAccount\2V<:=CB8 A?>2VI5==O ?@> >=>2;5==O D>B> 4@C7V2*Enable friends photo updates notifications EdditAccount $>@<0Form EdditAccountA=>2=VGeneral EdditAccountf>4020B8 ;V=: =0 ?>2=>@>7<V@=5 D>B> ?@8 A?>2VI5==OE/Insert fullsize URL on new photos notifications EdditAccountp>4020B8 ;V=: =0 7<5=H5=C :>?VN ?@8 A?>2VI5==OE ?@> D>B>.Insert preview URL on new photos notifications EdditAccount65@52V@OB8 7'T4=0==O :>6=V:Keep-alive every: EdditAccount 0@074OK EdditAccount0@>;L: Password: EdditAccount@=>2;N20B8 A?8A>: 4@C7V2 :>6=8E:Refresh friend list every: EdditAccount=>2;5==OUpdates EdditAccount0'T4=C20B8AL ?@8 70?CA:CAutoconnect on start LoginFormE-Mail:E-mail: LoginForm $>@<0Form LoginForm0@>;L: Password: LoginFormb<font size='2'><b>>2V4><;5==O AB0=C:</b>%1</font-Status message:%1402 =>25 D>B>%1 added new photo VprotocolWrap2%1 1C;> ?>7=0G5=> =0 D>B>%1 was tagged on photo VprotocolWrap40@>;L V =V: =5 71V30NBLAOMismatch nick or password VprotocolWrap2=>2;5==O =0 vkontakte.ruVkontakte.ru updates VprotocolWrap>70 <5@565NOffline VstatusObject <5@56VOnline VstatusObject ) , qutim-0.2.0/languages/ru/0000755000175000017500000000000011273101310016675 5ustar euroelessareuroelessarqutim-0.2.0/languages/ru/Pinfo.xml0000644000175000017500000000073711235577034020523 0ustar euroelessareuroelessar languages art all ru --VERSION-- Russian languages for qutIM 0.2 Beta --URL-- Mr.Peabody, MrFree (f1.mrfree@gmail.com), skpy, NightWolf_NG Creative Commons BY-SA 3.0 http://sites.google.com/site/mrfreeproject/_/rsrc/1241599747240/Home/ru_qutim.png qutim-0.2.0/languages/ru/sources/0000755000175000017500000000000011273101310020360 5ustar euroelessareuroelessarqutim-0.2.0/languages/ru/sources/webhistory.ts0000644000175000017500000002474611225627111023155 0ustar euroelessareuroelessar historySettingsClass Settings Настройки URL: Login: Логин: Password: Пароль: Enable notification when get messages Включить уведомление при получении сообщений Store locally in SQLite database (SQL History plugin) Хранить локально в SQLite базе (плагин SQLHistory) Store locally in JSON files (JSON History plugin) Хранить локально в JSON файлах (плагин JSON History) About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Web History plugin for qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Store history on web-server</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Web History плагин для qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Хранение истории на Web сервере</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Александр Казарин</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> webhistoryPlugin Get messages from WebHistory: %1 Получение сообщений из ВэбИстории: %1 Store messages from WebHistory:<br/> Получить сообщение из WebHistory:<br/> in JSON: %1<br/> в JSON: %1<br/> in SQLite: %1<br/> в SQLite: %1<br/> qutim-0.2.0/languages/ru/sources/formules.ts0000644000175000017500000000220611247342743022606 0ustar euroelessareuroelessar formulesSettingsClass Settings Настройки Scale: Масштаб: Do next to show source text of evaluation: Для показа исходного текста выражения использовать: [tex]EVALUATION THERE[/tex] [tex]ВЫРАЖЕНИЕ[/tex] $$EVALUATION THERE$$ $$ВЫРАЖЕНИЕ$$ qutim-0.2.0/languages/ru/sources/imagepub.ts0000644000175000017500000003222311225627111022534 0ustar euroelessareuroelessar imagepubPlugin Choose image Выберите рисунок Image Files (*.png *.jpg *.gif) Рисунки (*.png *.jpg *.gif) Send image via ImagePub plugin Послать картинку через ImagePub Choose image file Выберите рисунок Canceled Отменено File size is null Файл пуст Sending image URL... Отправка рисунка... Image sent: %N (%S bytes) %U Рисунок отправлен: %N (%S байт) %U Image URL sent URL отправленной картинки Can't parse URL Не могу разобрать URL imagepubSettingsClass Settings Настройки Image hosting service: Служба хранения рисунков: Send image template: Шаблон сообщения со ссылкой: %N - file name; %U - file URL; %S - file size %N - Имя файла; %U - ссылка; %S - размер About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">ImagePub qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Send images via public web services</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Плагин qutIM - ImagePub </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Send images via public web services</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Александр Казарин</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> jVCard uploadDialog File: %1 Файл: %1 Uploading... Закачка... Progress: %1 / %2 Прогресс: %1 / %2 Elapsed time: %1 Осталось: %1 Speed: %1 kb/sec Скорость: %1 кб/с uploadDialogClass Uploading... Выгрузка... Upload started. Выгрузка запущена. File: Файл: Speed: Скорость: Cancel Отмена Progress: Прогресс: Elapsed time: Осталось: qutim-0.2.0/languages/ru/sources/urlpreview.ts0000644000175000017500000003052711225627111023154 0ustar euroelessareuroelessar urlpreviewPlugin URL Preview bytes байт Make URL previews in messages Просмотр картинок в чате из ссылок urlpreviewSettingsClass Settings Настройки General Основные Enable on incoming messages Включить для входящих сообщений Enable on outgoing messages Включить для исходящих сообщений Don't show info for text/html content type Не показывать информацию для text/html ссылок Info template: Шаблон информации: Macros: %TYPE% - Content-Type %SIZE% - Content-Length Макросы: %TYPE% - тип содержимого %SIZE% - Длина содержимого Images Картинки Max file size limit (in bytes) Предельный размер файла (в байтах) %MAXW% macro %MAXW% - размер по горизонтали %MAXH% macro %MAXH% - размер по вертикали Image preview template: Шаблон предпросмотра (в одну строку): Macros: %URL% - Image URL %UID% - Generated unique ID Макросы: %URL% - ссылка на картинку %UID% - уникальный id About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Make previews for URLs in messages</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview плагин для qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">версия из SVN</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Плагин показывает картинки в чате из отправленных/принятых ссылок</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Александр Казарин</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/ru/sources/histman.ts0000644000175000017500000002267611267600246022427 0ustar euroelessareuroelessar ChooseClientPage WizardPage Мастер ChooseOrDumpPage WizardPage Мастер Import history from one more client Импортировать историю Dump history Сбросить историю в файл ClientConfigPage Select your Jabber account. Выберите ваш Jabber/XMPP аккаунт. Select accounts for each protocol in the list. Выберите аккаунт для каждого протокола в списке. WizardPage Мастер Path to profile: Путь к профилю: ... ... Encoding: Кодировка: DumpHistoryPage WizardPage Мастер Choose format: Выберите формат: JSON Binary Бинарный Merging history state: Обьединение истории: Dumping history state: Сохранение истории: HistoryManager::ChooseClientPage Client Клиент Choose client which history you want to import to qutIM. Выберите клиент, историю которого нужно импортировать в qutIM. HistoryManager::ChooseOrDumpPage What to do next? Dump history or choose next client Что дальше? It is possible to choose another client for import history or dump history to the disk. Можно выбрать другой клиент для импортирования или сохранения истории на диск. HistoryManager::ClientConfigPage System Система Configuration Настройки Enter path of your %1 profile file. Укажите путь к файлу профиля %1. Enter path of your %1 profile dir. Укажите путь к папке профиля %1. If your history encoding differs from the system one, choose the appropriate encoding for history. Если кодировка истории отличается от ;системной, выберите требуемую. Select path Укажите путь HistoryManager::DumpHistoryPage Dumping Сожранение Choose appropriate format of history, binary is default qutIM format nowadays. Выберите формат истории, бинарный - стандартный для qutIM на сегодня. Last step. Click 'Dump' to start dumping process. Последний шаг. Нажмите "Сохранить" для обьединения историй. Manager merges history, it make take several minutes. Обьединение истории, это займет некоторое время. History has been succesfully imported. История успешно импортирована. HistoryManager::HistoryManagerWindow History manager Менеджер истории &Dump &Сохранить HistoryManager::ImportHistoryPage Loading Загрузка Manager loads all history to memory, it may take several minutes. Менеджер загружает всю историю в память, это может занять несколько минут. %n message(s) have been succesfully loaded to memory. %n сообщение было полностью заружено в память. %n сообщения было полностью заружено в память. %n сообщений было полностью заружено в память. It has taken %n ms. Это потребует %n минуту. Это потребует %n минуты. Это потребует %n минут. HistoryManagerPlugin Import history Импорт истории ImportHistoryPage WizardPage Масте qutim-0.2.0/languages/ru/sources/qt_ru.ts0000644000175000017500000103070111232306153022073 0ustar euroelessareuroelessar AudioOutput <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> <html>Звуковое устройство <b>%1</b> не работает.<br/>Используется <b>%2</b>.</html> <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> Revert back to device '%1' CloseButton Close Tab Закрыть вкладку PPDOptionsModel Name Имя Phonon:: Notifications Уведомления Music Музыка Video Видео Communication Связь Games Игры Accessibility Специальные возможности Phonon::Gstreamer::Backend Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled. Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled Phonon::Gstreamer::MediaObject Cannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed. A required codec is missing. You need to install the following codec(s) to play this content: %0 Could not open media source. Invalid source type. Could not locate media source. Could not open audio device. The device is already in use. Could not decode media source. Phonon::VolumeSlider Volume: %1% Громкость: %1% Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% Используйте этот бегунок для установки громкости. Левая позиция 0%, правая %1% Q3Accel %1, %2 not defined Ambiguous %1 not handled Q3DataTable True True False False Insert Вставить Update Обновить Delete Удалить Q3FileDialog Copy or Move a File Копировать или переместить файл Read: %1 Открытие: %1 Write: %1 Запись: %1 Cancel Отмена All Files (*) Все файлы (*) Name Имя Size Размер Type Тип Date Дата Attributes Атрибуты &OK &OK Look &in: &Смотреть в: File &name: &Имя файла: File &type: &Тип файла: Back Назад One directory up Вверх на один уровень Create New Folder Создать новый каталог List View Список Detail View Детальный вид Preview File Info Предпросмотр информации о файле Preview File Contents Предпросмотр содержимого файла Read-write Чтение-запись Read-only Только чтение Write-only Только запись Inaccessible Нет доступа Symlink to File Ссылка на файл Symlink to Directory Ссылка на каталог Symlink to Special Ссылка на спецфайл File Файл Dir Каталог Special Спецфайл Open Открыть Save As Сохранить как &Open &Открыть &Save &Сохранить &Rename &Переименовать &Delete &Удалить R&eload О&бновить Sort by &Name По &имени Sort by &Size По &размеру Sort by &Date По &дате &Unsorted &Не упорядочивать Sort Упорядочить Show &hidden files Показать &скрытые файлы the file файл the directory каталог the symlink ссылку Delete %1 Удалить %1 <qt>Are you sure you wish to delete %1 "%2"?</qt> <qt>Вы действительно хотите удалить %1 "%2"?</qt> &Yes &Да &No &Нет New Folder 1 Новый каталог 1 New Folder Новый каталог New Folder %1 Новый каталог %1 Find Directory Найти каталог Directories Каталоги Directory: Каталог: Error Ошибка %1 File not found. Check path and filename. %1 Файл не найден. Проверьте правильность пути и имени файла. All Files (*.*) Все файлы (*.*) Open Открыть Select a Directory Выбрать каталог Q3LocalFs Could not read directory %1 Невозможно просмотреть каталог %1 Could not create directory %1 Невозможно создать каталог %1 Could not remove file or directory %1 Невозможно удалить файл или каталог %1 Could not rename %1 to %2 Невозможно переименовать %1 в %2 Could not open %1 Невозможно открыть %1 Could not write %1 Невозможно записать %1 Q3MainWindow Line up Выровнять Customize... Настроить... Q3NetworkProtocol Operation stopped by the user Операция прервана пользователем Q3ProgressDialog Cancel Отмена Q3TabDialog OK OK Apply Применить Help Справка Defaults По умолчанию Cancel Отмена Q3TextEdit &Undo &Отменить &Redo &Повторить Cu&t &Вырезать &Copy &Копировать &Paste &Вставить Clear Очистить Select All Выделить все Q3TitleBar System Система Restore up Восстановить наверх Minimize Свернуть Restore down Восстановить вниз Maximize Развернуть Close Закрыть Contains commands to manipulate the window Puts a minimized back to normal Moves the window out of the way Puts a maximized window back to normal Makes the window full screen Рахвернуть окно на весь экран Closes the window Displays the name of the window and contains controls to manipulate it Q3ToolBar More... Больше... Q3UrlOperator The protocol `%1' is not supported Протокол `%1' не поддерживается The protocol `%1' does not support listing directories Протокол `%1' не поддерживает просмотр каталогов The protocol `%1' does not support creating new directories Протокол `%1' не поддерживает создание новых каталогов The protocol `%1' does not support removing files or directories Протокол `%1' не поддерживает удаление файлов или каталогов The protocol `%1' does not support renaming files or directories Протокол `%1' не поддерживает переименование файлов или каталогов The protocol `%1' does not support getting files Протокол `%1' не поддерживает доставку файлов The protocol `%1' does not support putting files Протокол `%1' не поддерживает отправку файлов The protocol `%1' does not support copying or moving files or directories Протокол `%1' не поддерживает копирование или перемещение файлов и каталогов (unknown) (неизвестно) Q3Wizard &Cancel &Отмена < &Back < &Назад &Next > &Вперед > &Finish &Финиш &Help &Справка QAbstractSocket Host not found Адрес не найден Connection refused Отказано в соединении Connection timed out Превышено время ожидания Operation on socket is not supported Socket operation timed out Socket is not connected Network unreachable Сеть не доступна QAbstractSpinBox &Step up &Вверх Step &down В&низ &Select All В&ыбрать все QApplication QT_LAYOUT_DIRECTION Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. LTR Executable '%1' requires Qt %2, found Qt %3. Программный модуль '%1' требует Qt %2, найдена версия %3. Incompatible Qt Library Error Ошибка совместимости библиотеки Qt Activate Активировать Activates the program's main window QAxSelect Select ActiveX Control OK OK &Cancel &Отмена COM &Object: QCheckBox Uncheck Check Проверить Toggle QColorDialog Hu&e: &Тон: &Sat: &Нас: &Val: &Ярк: &Red: &Крас: &Green: &Зел: Bl&ue: С&ин: A&lpha channel: &Альфа-канал: Select Color Выбрать цвет &Basic colors &Основные цвета &Custom colors &Собственные цвета &Define Custom Colors >> &Выбрать собственные цвета >> OK OK Cancel Отмена &Add to Custom Colors &Добавить к собственным цветам Select color Выбрать цвет QComboBox Open Открыть False False True True Close Закрыть QCoreApplication %1: key is empty QSystemSemaphore %1: unable to make key QSystemSemaphore %1: ftok failed QSystemSemaphore QDB2Driver Unable to connect Unable to commit transaction Unable to rollback transaction Unable to set autocommit QDB2Result Unable to execute statement Unable to prepare statement Unable to bind variable Unable to fetch record %1 Unable to fetch next Unable to fetch first QDateTimeEdit AM am PM pm QDial QDial SpeedoMeter SliderHandle QDialog What's This? Что это? Done QDialogButtonBox OK OK Save Сохранить &Save &Сохранить Open Открыть Cancel Отмена &Cancel &Отмена Close Закрыть &Close &Закрыть Apply Применить Reset Сбросить Help Справка Don't Save Не сохранять Discard Отклонить &Yes &Да Yes to &All Да для &всех &No &Нет N&o to All Н&ет для всех Save All Сохранить все Abort Отменить Retry Повторить Ignore Игнорировать Restore Defaults Восстановить умолчания Close without Saving Закрыть без сохранения &OK &OK QDirModel Name Имя Size Размер Kind Match OS X Finder Type All other platforms Тип Date Modified QDockWidget Close Закрыть Dock Float QDoubleSpinBox More Больше Less Меньше QErrorMessage &Show this message again &Показывать это сообщение в дальнейшем &OK &OK Debug Message: Отладочное сообщение: Warning: Предупреждение: Fatal Error: Критическая ошибка: QFile Destination file exists Cannot remove source file Cannot open %1 for input Cannot open for output Failure to write block Cannot create %1 for output QFileDialog All Files (*) Все файлы (*) Back Назад List View Список Detail View Детальный вид File Файл Open Открыть Save As Сохранить как &Open &Открыть &Save &Сохранить Recent Places &Rename &Переименовать &Delete &Удалить Show &hidden files Показать &скрытые файлы New Folder Новый каталог Find Directory Найти каталог Directories Каталоги All Files (*.*) Все файлы (*.*) Directory: Каталог: %1 already exists. Do you want to replace it? %1 File not found. Please verify the correct file name was given. My Computer Parent Directory Files of type: %1 Directory not found. Please verify the correct directory name was given. '%1' is write protected. Do you want to delete it anyway? Are sure you want to delete '%1'? Could not delete directory. Drive Unknown Show Forward Вперед &New Folder &Choose Remove Удалить File &name: &Имя файла: Look in: Create New Folder Создать новый каталог QFileSystemModel %1 TB %1 GB %1 MB %1 KB %1 bytes Invalid filename <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. Name Имя Size Размер Kind Match OS X Finder Type All other platforms Тип Date Modified My Computer Computer QFontDatabase Normal Bold Demi Bold Black Demi Light Italic Oblique Any Latin Greek Cyrillic Armenian Hebrew Arabic Syriac Thaana Devanagari Bengali Gurmukhi Gujarati Oriya Tamil Telugu Kannada Malayalam Sinhala Thai Lao Tibetan Myanmar Georgian Khmer Simplified Chinese Traditional Chinese Japanese Korean Vietnamese Symbol Ogham Runic QFontDialog &Font &Шрифт Font st&yle &Стиль шрифта &Size &Размер Effects Эффекты Stri&keout &Перечеркивать &Underline П&одчеркивать Sample Пример Select Font Выбрать шрифт Wr&iting System QFtp Host %1 found Обнаружен узел %1 Host found Узел обнаружен Connected to host %1 Установлено соединение с узлом %1 Connected to host Соединение с узлом установлено Connection to %1 closed Соединение с узлом %1 разорвано Connection closed Соединение разорвано Host %1 not found Узел %1 не обнаружен Connection refused to host %1 Отказано в соединении с узлом %1 Connection timed out to host %1 Unknown error Неизвестная ошибка Connecting to host failed: %1 Ошибка соединения с узлом: %1 Login failed: %1 Ошибка входа в систему: %1 Listing directory failed: %1 Ошибка просмотра каталога: %1 Changing directory failed: %1 Ошибка смены каталога: %1 Downloading file failed: %1 Ошибка загрузки файла: %1 Uploading file failed: %1 Ошибка отправки файла: %1 Removing file failed: %1 Ошибка удаления файла: %1 Creating directory failed: %1 Ошибка создания каталога: %1 Removing directory failed: %1 Ошибка удаления каталога: %1 Not connected Нет соединения Connection refused for data connection Отказано в соединении передачи данных QHostInfo Unknown error Неизвестная ошибка QHostInfoAgent Host not found Адрес не найден Unknown address type Неизвестный тип адреса Unknown error Неизвестная ошибка QHttp Connection refused Отказано в соединении Host %1 not found Узел %1 не обнаружен Wrong content length Неверная длина данных HTTPS connection requested but SSL support not compiled in Требуется SSL для установления HTTPS соединения, но поддержка не скомпилирована HTTP request failed Ошибка HTTP-запроса Host %1 found Обнаружен узел %1 Host found Узел обнаружен Connected to host %1 Установлено соединение с узлом %1 Connected to host Соединение с узлом установлено Connection to %1 closed Соединение с узлом %1 разорвано Connection closed Соединение разорвано Unknown error Неизвестная ошибка Request aborted Запрос отменен No server set to connect to Не выбран сервер для подключения Server closed connection unexpectedly Неожиданный разрыв соединения сервером Invalid HTTP response header Получен некорректный HTTP-заголовок Unknown authentication method Неизвестный метод аутентификации Invalid HTTP chunked body Некорректный HTTP-ответ Error writing response to device Proxy authentication required Authentication required Connection refused (or timed out) Proxy requires authentication Host requires authentication Data corrupted Unknown protocol specified SSL handshake failed QHttpSocketEngine Did not receive HTTP response from proxy Error parsing authentication request from proxy Authentication required Proxy denied connection Error communicating with HTTP proxy Proxy server not found Proxy connection refused Proxy server connection timed out Proxy connection closed prematurely QIBaseDriver Error opening database Could not start transaction Unable to commit transaction Unable to rollback transaction QIBaseResult Unable to create BLOB Unable to write BLOB Unable to open BLOB Unable to read BLOB Could not find array Could not get array data Could not get query info Could not start transaction Unable to commit transaction Could not allocate statement Could not prepare statement Could not describe input statement Could not describe statement Unable to close statement Unable to execute query Could not fetch next item Could not get statement info QIODevice Permission denied Too many open files No such file or directory No space left on device Unknown error Неизвестная ошибка QInputContext XIM XIM input method Windows input method Mac OS X input method QInputDialog Enter a value: QLibrary Could not mmap '%1': %2 Plugin verification data mismatch in '%1' Could not unmap '%1': %2 The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" Unknown error Неизвестная ошибка The shared library was not found. The file '%1' is not a valid Qt plugin. The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) Cannot load library %1: %2 Cannot unload library %1: %2 Cannot resolve symbol "%1" in %2: %3 QLineEdit &Undo &Отменить &Redo &Повторить Cu&t &Вырезать &Copy &Копировать &Paste В&ставить Select All Выделить все Delete Удалить QLocalServer %1: Name error %1: Permission denied %1: Address in use %1: Unknown error %2 QLocalSocket %1: Connection refused %1: Remote closed %1: Invalid name %1: Socket access error %1: Socket resource error %1: Socket operation timed out %1: Datagram too large %1: Connection error %1: The socket operation is not supported %1: Unknown error %1: Unknown error %2 QMYSQLDriver Unable to open database ' Unable to connect Unable to begin transaction Unable to commit transaction Unable to rollback transaction QMYSQLResult Unable to fetch data Unable to execute query Unable to store result Unable to prepare statement Unable to reset statement Unable to bind value Unable to execute statement Unable to bind outvalues Unable to store statement results Unable to execute next query Unable to store next result QMdiArea (Untitled) QMdiSubWindow %1 - [%2] %1 - [%2] Close Закрыть Minimize Свернуть Restore Down Восстановить &Restore &Восстановить &Move &Переместить &Size &Размер Mi&nimize &Свернуть Ma&ximize Р&азвернуть Stay on &Top Всегда &наверху &Close &Закрыть - [%1] Maximize Развернуть Unshade Shade Restore Help Справка Menu Меню QMenu Close Закрыть Open Открыть Execute Выполнить QMenuBar About О программе Config Конфигурация Preference Настройки Options Параметры Setting Настройки Setup Настройки Quit Выход Exit Выход QMessageBox OK OK About Qt Help Справка Show Details... Hide Details... <h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p> QMultiInputContext Select IM QMultiInputContextPlugin Multiple input method switcher Multiple input method switcher that uses the context menu of the text widgets QNativeSocketEngine The remote host closed the connection Network operation timed out Out of resources Unsupported socket operation Protocol type not supported Invalid socket descriptor Network unreachable Permission denied Connection timed out Connection refused Отказано в соединении The bound address is already in use The address is not available The address is protected Unable to send a message Unable to receive a message Unable to write Network error Another socket is already listening on the same port Unable to initialize non-blocking socket Unable to initialize broadcast socket Attempt to use IPv6 socket on a platform with no IPv6 support Host unreachable Datagram was too large to send Operation on non-socket Unknown error Неизвестная ошибка The proxy type is invalid for this operation QNetworkAccessCacheBackend Error opening %1 QNetworkAccessFileBackend Request for opening non-local file %1 Error opening %1: %2 Write error writing to %1: %2 Cannot open %1: Path is a directory Read error reading from %1: %2 QNetworkAccessFtpBackend No suitable proxy found Cannot open %1: is a directory Logging in to %1 failed: authentication required Error while downloading %1: %2 Error while uploading %1: %2 QNetworkAccessHttpBackend No suitable proxy found QNetworkReply Error downloading %1 - server replied: %2 Protocol "%1" is unknown QNetworkReplyImpl Operation canceled QOCIDriver Unable to logon Unable to initialize QOCIDriver Unable to begin transaction Unable to commit transaction Unable to rollback transaction QOCIResult Unable to bind column for batch execute Unable to execute batch statement Unable to goto next Unable to alloc statement Unable to prepare statement Unable to bind value Unable to execute statement QODBCDriver Unable to connect Unable to connect - Driver doesn't support all needed functionality Unable to disable autocommit Unable to commit transaction Unable to rollback transaction Unable to enable autocommit QODBCResult QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration Unable to execute statement Unable to fetch next Unable to prepare statement Unable to bind variable Unable to fetch last Unable to fetch Unable to fetch first Unable to fetch previous QObject Home Home Operation not supported on %1 Invalid URI: %1 Write error writing to %1: %2 Read error reading from %1: %2 Socket error on %1: %2 Remote host closed the connection prematurely on %1 Protocol error: packet of size 0 received No host name given QPPDOptionsModel Name Имя Value QPSQLDriver Unable to connect Could not begin transaction Could not commit transaction Could not rollback transaction Unable to subscribe Unable to unsubscribe QPSQLResult Unable to create query Unable to prepare statement QPageSetupWidget Centimeters (cm) Millimeters (mm) Inches (in) Points (pt) Form Paper Page size: Width: Ширина: Height: Высота: Paper source: Orientation Portrait Портрет Landscape Альбом Reverse landscape Reverse portrait Margins top margin left margin right margin bottom margin QPluginLoader Unknown error Неизвестная ошибка The plugin was not loaded. QPrintDialog locally connected локальный Aliases: %1 Алиасы: %1 unknown неизвестно OK OK Cancel Отмена Print in color if available Цветная печать Printer Принтер Print all Печатать все Print range Печатать диапазон Print last page first Начать с последней страницы Number of copies: Число копий: Paper format Формат бумаги Portrait Портрет Landscape Альбом A0 (841 x 1189 mm) A0 (841 x 1189 мм) A1 (594 x 841 mm) A1 (594 x 841 мм) A2 (420 x 594 mm) A2 (420 x 594 мм) A3 (297 x 420 mm) A3 (297 x 420 мм) A5 (148 x 210 mm) A5 (148 x 210 мм) A6 (105 x 148 mm) A6 (105 x 148 мм) A7 (74 x 105 mm) A7 (74 x 105 мм) A8 (52 x 74 mm) A8 (52 x 74 мм) A9 (37 x 52 mm) A9 (37 x 52 мм) B0 (1000 x 1414 mm) B0 (1000 x 1414 мм) B1 (707 x 1000 mm) B1 (707 x 1000 мм) B2 (500 x 707 mm) B2 (500 x 707 мм) B3 (353 x 500 mm) B3 (353 x 500 мм) B4 (250 x 353 mm) B4 (250 x 353 мм) B6 (125 x 176 mm) B6 (125 x 176 мм) B7 (88 x 125 mm) B7 (88 x 125 мм) B8 (62 x 88 mm) B8 (62 x 88 мм) B9 (44 x 62 mm) B9 (44 x 62 мм) B10 (31 x 44 mm) B10 (31 x 44 мм) C5E (163 x 229 mm) C5E (163 x 229 мм) DLE (110 x 220 mm) DLE (110 x 220 мм) Folio (210 x 330 mm) Folio (210 x 330 мм) Ledger (432 x 279 mm) Ledger (432 x 279 мм) Tabloid (279 x 432 mm) Tabloid (279 x 432 мм) US Common #10 Envelope (105 x 241 mm) Конверт US #10 (105x241 мм) A4 (210 x 297 mm, 8.26 x 11.7 inches) B5 (176 x 250 mm, 6.93 x 9.84 inches) Executive (7.5 x 10 inches, 191 x 254 mm) Legal (8.5 x 14 inches, 216 x 356 mm) Letter (8.5 x 11 inches, 216 x 279 mm) Print Print File Файл Print To File ... File %1 is not writable. Please choose a different file name. %1 already exists. Do you want to overwrite it? File exists <qt>Do you want to overwrite it?</qt> Print selection %1 is a directory. Please choose a different file name. A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 C5E DLE Executive Folio Ledger Legal Letter Tabloid US Common #10 Envelope Custom &Options >> &Print &Options << Print to File (PDF) Print to File (Postscript) Local file Write %1 file The 'From' value cannot be greater than the 'To' value. QPrintPreviewDialog Page Setup %1% Print Preview Next page Previous page First page Last page Fit width Fit page Zoom in Zoom out Portrait Портрет Landscape Альбом Show single page Show facing pages Show overview of all pages Print Print Page setup Close Закрыть Export to PDF Export to PostScript QPrintPropertiesDialog Save Сохранить OK OK QPrintPropertiesWidget Form Page Advanced QPrintSettingsOutput Form Copies Print range Печатать диапазон Print all Печатать все Pages from to Selection Output Settings Copies: Collate Reverse Options Параметры Color Mode Color Grayscale Duplex Printing None Long side Short side QPrintWidget Form Printer Принтер &Name: P&roperties Location: Preview Type: Тип: Output &file: ... ... QProcess Could not open input redirection for reading Could not open output redirection for writing Resource error (fork failure): %1 Process operation timed out Error reading from process Error writing to process Process crashed No program defined Process failed to start QProgressDialog Cancel Отмена QPushButton Open Открыть QRadioButton Check Проверить QRegExp no error occurred ошибки отсутствуют disabled feature used использовались отключенные возможности bad char class syntax bad char class syntax bad lookahead syntax bad lookahead syntax bad repetition syntax bad repetition syntax invalid octal value некорректное восьмеричное значение missing left delim отсутствует левый разделитель unexpected end неожиданный конец met internal limit достигнуто внутреннее ограничение QSQLite2Driver Error to open database Unable to begin transaction Unable to commit transaction Unable to rollback Transaction QSQLite2Result Unable to fetch results Unable to execute statement QSQLiteDriver Error opening database Error closing database Unable to begin transaction Unable to commit transaction Unable to rollback transaction QSQLiteResult Unable to fetch row Unable to execute statement Unable to reset statement Unable to bind parameters Parameter count mismatch No query QScrollBar Scroll here Left edge Top Right edge Bottom Page left Page up Page right Page down Scroll left Scroll up Scroll right Scroll down Line up Выровнять Position Line down QSharedMemory %1: unable to set key on lock %1: create size is less then 0 %1: unable to lock %1: unable to unlock %1: permission denied %1: already exists %1: doesn't exists %1: out of resources %1: unknown error %2 %1: key is empty %1: unix key file doesn't exists %1: ftok failed %1: unable to make key %1: system-imposed size restrictions %1: not attached %1: invalid size %1: key error %1: size query failed QShortcut Space Space Esc Esc Tab Tab Backtab Backtab Backspace Backspace Return Return Enter Enter Ins Ins Del Del Pause Pause Print Print SysReq SysReq Home Home End End Left Left Up Up Right Right Down Down PgUp PgUp PgDown PgDown CapsLock CapsLock NumLock NumLock ScrollLock ScrollLock Menu Меню Help Справка Back Назад Forward Вперед Stop Стоп Refresh Обновить Volume Down Тише Volume Mute Выключить звук Volume Up Громче Bass Boost Bass Boost Bass Up Bass Up Bass Down Bass Down Treble Up Treble Up Treble Down Treble Down Media Play Воспроизведение Media Stop Остановить воспроизведение Media Previous Воспроизвести предыдущее Media Next Воспроизвести следующее Media Record Запись Favorites Избранное Search Поиск Standby Дежурный режим Open URL Открыть URL Launch Mail Почта Launch Media Проигрыватель Launch (0) Запустить (0) Launch (1) Запустить (1) Launch (2) Запустить (2) Launch (3) Запустить (3) Launch (4) Запустить (4) Launch (5) Запустить (5) Launch (6) Запустить (6) Launch (7) Запустить (7) Launch (8) Запустить (8) Launch (9) Запустить (9) Launch (A) Запустить (A) Launch (B) Запустить (B) Launch (C) Запустить (C) Launch (D) Запустить (D) Launch (E) Запустить (E) Launch (F) Запустить (F) Print Screen Page Up Page Down Caps Lock Num Lock Number Lock Scroll Lock Insert Вставить Delete Удалить Escape System Request Select Yes Да No Нет Context1 Context2 Context3 Context4 Call Hangup Flip Ctrl Ctrl Shift Shift Alt Alt Meta Meta + + F%1 F%1 Home Page QSlider Page left Page up Position Page right Page down QSocks5SocketEngine Connection to proxy refused Connection to proxy closed prematurely Proxy host not found Connection to proxy timed out Proxy authentication failed Proxy authentication failed: %1 SOCKS version 5 protocol error General SOCKSv5 server failure Connection not allowed by SOCKSv5 server TTL expired SOCKSv5 command not supported Address type not supported Unknown SOCKSv5 proxy error code 0x%1 Network operation timed out QSpinBox More Less QSql Delete Удалить Delete this record? Удалить эту запись? Yes Да No Нет Insert Вставить Update Обновить Save edits? Сохранить изменения? Cancel Отмена Confirm Подтвердить Cancel your edits? Отменить изменения? QSslSocket Unable to write data: %1 Error while reading: %1 Error during SSL handshake: %1 Error creating SSL context (%1) Invalid or empty cipher list (%1) Error creating SSL session, %1 Error creating SSL session: %1 Cannot provide a certificate with no key, %1 Error loading local certificate, %1 Error loading private key, %1 Private key does not certificate public key, %1 QSystemSemaphore %1: out of resources %1: permission denied %1: already exists %1: does not exist %1: unknown error %2 QTDSDriver Unable to open connection Unable to use database QTabBar Scroll Left Прокрутить влево Scroll Right Прокрутить вправо QTcpServer Operation on socket is not supported QTextControl &Undo &Отменить &Redo &Повторить Cu&t &Вырезать &Copy &Копировать Copy &Link Location Скопировать &адрес ссылки &Paste &Вставить Delete Удалить Select All Выделить все QToolButton Press Open Открыть QUdpSocket This platform does not support IPv6 QUndoGroup Undo Отменить Redo Повторить QUndoModel <empty> <нет> QUndoStack Undo Отменить Redo Повторить QUnicodeControlCharacterMenu LRM Left-to-right mark RLM Right-to-left mark ZWJ Zero width joiner ZWNJ Zero width non-joiner ZWSP Zero width space LRE Start of left-to-right embedding RLE Start of right-to-left embedding LRO Start of left-to-right override RLO Start of right-to-left override PDF Pop directional formatting Insert Unicode control character QWebFrame Request cancelled Запрос отменен Request blocked Запрос блокирован Cannot show URL Не могу показать ссылку (URL) Frame load interruped by policy change Cannot show mimetype File does not exist Файл не существует QWebPage Bad HTTP request Submit default label for Submit buttons in forms on web pages Отправить Submit Submit (input element) alt text for <input> elements with no alt, title, or value Отправить Reset default label for Reset buttons in forms on web pages Сбросить This is a searchable index. Enter search keywords: text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' Choose File title for file button used in HTML forms Выберите файл No file selected text to display in file button used in HTML forms when no file is selected Нет выбранных файлов Open in New Window Open in New Window context menu item Открыть в новом окне Save Link... Download Linked File context menu item Сохранить ссылку... Copy Link Copy Link context menu item Копировать ссылку Open Image Open Image in New Window context menu item Открыть картинку Save Image Download Image context menu item Сохранить картинку Copy Image Copy Link context menu item Копировать картинку Open Frame Open Frame in New Window context menu item Открыть фрейм Copy Copy context menu item Копировать Go Back Back context menu item Назад Go Forward Forward context menu item Вперед Stop Stop context menu item Стоп Reload Reload context menu item Обновить Cut Cut context menu item Вырезать Paste Paste context menu item Вставить No Guesses Found No Guesses Found context menu item Ignore Ignore Spelling context menu item Игнорировать Add To Dictionary Learn Spelling context menu item Search The Web Search The Web context menu item Look Up In Dictionary Look Up in Dictionary context menu item Open Link Open Link context menu item Открыть ссылку Ignore Ignore Grammar context menu item Игнорировать Spelling Spelling and Grammar context sub-menu item Show Spelling and Grammar menu item title Hide Spelling and Grammar menu item title Check Spelling Check spelling context menu item Check Spelling While Typing Check spelling while typing context menu item Check Grammar With Spelling Check grammar with spelling context menu item Fonts Font context sub-menu item Bold Bold context menu item Italic Italic context menu item Underline Underline context menu item Outline Outline context menu item Direction Writing direction context sub-menu item Text Direction Text direction context sub-menu item Default Default writing direction context menu item LTR Left to Right context menu item RTL Right to Left context menu item Inspect Inspect Element context menu item No recent searches Label for only item in menu that appears when clicking on the search field image, when no searches have been performed Recent searches label for first item in the menu that appears when clicking on the search field image, used as embedded menu title Clear recent searches menu item in Recent Searches menu that empties menu's contents Unknown Unknown filesize FTP directory listing item %1 (%2x%3 pixels) Title string for images Web Inspector - %2 Scroll here Left edge Top Right edge Bottom Page left Page up Page right Page down Scroll left Scroll up Scroll right Scroll down %n file(s) number of chosen file JavaScript Alert - %1 JavaScript Confirm - %1 JavaScript Prompt - %1 Move the cursor to the next character Move the cursor to the previous character Move the cursor to the next word Move the cursor to the previous word Move the cursor to the next line Move the cursor to the previous line Move the cursor to the start of the line Move the cursor to the end of the line Move the cursor to the start of the block Move the cursor to the end of the block Move the cursor to the start of the document Move the cursor to the end of the document Select all Select to the next character Select to the previous character Select to the next word Select to the previous word Select to the next line Select to the previous line Select to the start of the line Select to the end of the line Select to the start of the block Select to the end of the block Select to the start of the document Select to the end of the document Delete to the start of the word Delete to the end of the word Insert a new paragraph Insert a new line QWhatsThisAction What's This? Что это? QWidget * QWizard < &Back < &Назад &Finish &Финиш &Help &Справка Go Back Назад Continue Продолжить Commit Применить Done Завершить Quit Выход Help Справка Cancel Отмена &Next &Вперед &Next > &Вперед > QWorkspace &Restore &Восстановить &Move &Переместить &Size &Размер Mi&nimize &Свернуть Ma&ximize Р&азвернуть &Close &Закрыть Stay on &Top Всегда &наверху Sh&ade Свернуть в за&головок %1 - [%2] %1 - [%2] Minimize Свернуть Restore Down Восстановить Close Закрыть &Unshade Восстановить из за&головка QXml no error occurred ошибки отсутствуют error triggered by consumer ошибка инициирована пользователем unexpected end of file неожиданный конец файла more than one document type definition определен более, чем один тип документов error occurred while parsing element в процессе грамматического разбора элемента произошла ошибка tag mismatch отсутствует тег error occurred while parsing content в процессе грамматического разбора произошла ошибка unexpected character неожиданный символ invalid name for processing instruction некорректное имя директивы version expected while reading the XML declaration при чтении XML-тега ожидался параметр version wrong value for standalone declaration некорректное значение параметра standalone encoding declaration or standalone declaration expected while reading the XML declaration при чтении XML-тега ожидался параметр encoding или параметр standalone standalone declaration expected while reading the XML declaration при чтении XML-тега ожидался параметр standalone error occurred while parsing document type definition в процессе грамматического разбора типа документа произошла ошибка letter is expected ожидался символ error occurred while parsing comment в процессе грамматического разбора комментария произошла ошибка error occurred while parsing reference в процессе грамматического разбора ссылки произошла ошибка internal general entity reference not allowed in DTD internal general entity reference not allowed in DTD external parsed general entity reference not allowed in attribute value external parsed general entity reference not allowed in attribute value external parsed general entity reference not allowed in DTD external parsed general entity reference not allowed in DTD unparsed entity reference in wrong context unparsed entity reference in wrong context recursive entities рекурсивные объекты error in the text declaration of an external entity error in the text declaration of an external entity QXmlStream Extra content at end of document. Invalid entity value. Invalid XML character. Sequence ']]>' not allowed in content. Namespace prefix '%1' not declared Attribute redefined. Unexpected character '%1' in public id literal. Invalid XML version string. Unsupported XML version. %1 is an invalid encoding name. Encoding %1 is unsupported Standalone accepts only yes or no. Invalid attribute in XML declaration. Premature end of document. Invalid document. Expected , but got ' Unexpected ' Expected character data. Recursive entity detected. Start tag expected. XML declaration not at start of document. NDATA in parameter entity declaration. %1 is an invalid processing instruction name. Invalid processing instruction name. Illegal namespace declaration. Invalid XML name. Opening and ending tag mismatch. Reference to unparsed entity '%1'. Entity '%1' not declared. Reference to external entity '%1' in attribute value. Invalid character reference. Encountered incorrectly encoded content. The standalone pseudo attribute must appear after the encoding. %1 is an invalid PUBLIC identifier. QtXmlPatterns An %1-attribute with value %2 has already been declared. An %1-attribute must have a valid %2 as value, which %3 isn't. Network timeout. Element %1 can't be serialized because it appears outside the document element. Attribute %1 can't be serialized because it appears at the top level. Year %1 is invalid because it begins with %2. Day %1 is outside the range %2..%3. Month %1 is outside the range %2..%3. Overflow: Can't represent date %1. Day %1 is invalid for month %2. Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; Time %1:%2:%3.%4 is invalid. Overflow: Date can't be represented. At least one component must be present. At least one time component must appear after the %1-delimiter. No operand in an integer division, %1, can be %2. The first operand in an integer division, %1, cannot be infinity (%2). The second operand in a division, %1, cannot be zero (%2). %1 is not a valid value of type %2. When casting to %1 from %2, the source value cannot be %3. Integer division (%1) by zero (%2) is undefined. Division (%1) by zero (%2) is undefined. Modulus division (%1) by zero (%2) is undefined. Dividing a value of type %1 by %2 (not-a-number) is not allowed. Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. A value of type %1 cannot have an Effective Boolean Value. Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. Value %1 of type %2 exceeds maximum (%3). Value %1 of type %2 is below minimum (%3). A value of type %1 must contain an even number of digits. The value %2 does not. %1 is not valid as a value of type %2. Operator %1 cannot be used on type %2. Operator %1 cannot be used on atomic values of type %2 and %3. The namespace URI in the name for a computed attribute cannot be %1. The name for a computed attribute cannot have the namespace URI %1 with the local name %2. Type error in cast, expected %1, received %2. When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. No casting is possible with %1 as the target type. It is not possible to cast from %1 to %2. Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. It's not possible to cast the value %1 of type %2 to %3 Failure when casting from %1 to %2: %3 A comment cannot contain %1 A comment cannot end with a %1. No comparisons can be done involving the type %1. Operator %1 is not available between atomic values of type %2 and %3. An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. A library module cannot be evaluated directly. It must be imported from a main module. No template by name %1 exists. A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. A positional predicate must evaluate to a single numeric value. The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. The data of a processing instruction cannot contain the string %1 No namespace binding exists for the prefix %1 No namespace binding exists for the prefix %1 in %2 %1 is an invalid %2 %1 takes at most %n argument(s). %2 is therefore invalid. %1 requires at least %n argument(s). %2 is therefore invalid. The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. %1 is not a valid XML 1.0 character. The first argument to %1 cannot be of type %2. If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. %1 was called. %1 must be followed by %2 or %3, not at the end of the replacement string. In the replacement string, %1 must be followed by at least one digit when not escaped. In the replacement string, %1 can only be used to escape itself or %2, not %3 %1 matches newline characters %1 and %2 match the start and end of a line. Matches are case insensitive Whitespace characters are removed, except when they appear in character classes %1 is an invalid regular expression pattern: %2 %1 is an invalid flag for regular expressions. Valid flags are: If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. It will not be possible to retrieve %1. The root node of the second argument to function %1 must be a document node. %2 is not a document node. The default collection is undefined %1 cannot be retrieved The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). A zone offset must be in the range %1..%2 inclusive. %3 is out of range. %1 is not a whole number of minutes. Required cardinality is %1; got cardinality %2. The item %1 did not match the required type %2. %1 is an unknown schema type. Only one %1 declaration can occur in the query prolog. The initialization of variable %1 depends on itself No variable by name %1 exists The variable %1 is unused Version %1 is not supported. The supported XQuery version is 1.0. The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. No function with signature %1 is available A default namespace declaration must occur before function, variable, and option declarations. Namespace declarations must occur before function, variable, and option declarations. Module imports must occur before function, variable, and option declarations. It is not possible to redeclare prefix %1. Prefix %1 is already declared in the prolog. The name of an option must have a prefix. There is no default namespace for options. The Schema Import feature is not supported, and therefore %1 declarations cannot occur. The target namespace of a %1 cannot be empty. The module import feature is not supported No value is available for the external variable by name %1. A construct was encountered which only is allowed in XQuery. A template by name %1 has already been declared. The keyword %1 cannot occur with any other mode name. The value of attribute %1 must of type %2, which %3 isn't. The prefix %1 can not be bound. By default, it is already bound to the namespace %2. A variable by name %1 has already been declared. A stylesheet function must have a prefixed name. The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 A function already exists with the signature %1. No external functions are supported. All supported functions can be used directly, without first declaring them as external An argument by name %1 has already been declared. Every argument name must be unique. When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. In an XSL-T pattern, function %1 cannot have a third argument. In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. %1 is an invalid template mode name. The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. None of the pragma expressions are supported. Therefore, a fallback expression must be present Each name of a template parameter must be unique; %1 is duplicated. The %1-axis is unsupported in XQuery %1 is not a valid name for a processing-instruction. %1 is not a valid numeric literal. No function by name %1 is available. The namespace URI cannot be the empty string when binding to a prefix, %1. %1 is an invalid namespace URI. It is not possible to bind to the prefix %1 Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). Two namespace declaration attributes have the same name: %1. The namespace URI must be a constant and cannot use enclosed expressions. An attribute by name %1 has already appeared on this element. A direct element constructor is not well-formed. %1 is ended with %2. The name %1 does not refer to any schema type. %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. %1 is not an atomic type. Casting is only possible to atomic types. %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. The name of an extension expression must be in a namespace. empty zero or one exactly one one or more zero or more Required type is %1, but %2 was found. Promoting %1 to %2 may cause loss of precision. The focus is undefined. It's not possible to add attributes after any other kind of node. An attribute by name %1 has already been created. Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. %1 is an unsupported encoding. %1 contains octets which are disallowed in the requested encoding %2. The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. Ambiguous rule match. In a namespace constructor, the value for a namespace cannot be an empty string. The prefix must be a valid %1, which %2 is not. The prefix %1 cannot be bound. Only the prefix %1 can be bound to %2 and vice versa. Circularity detected The parameter %1 is required, but no corresponding %2 is supplied. The parameter %1 is passed, but no corresponding %2 exists. The URI cannot have a fragment Element %1 is not allowed at this location. Text nodes are not allowed at this location. Parse error: %1 The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. Running an XSL-T 1.0 stylesheet with a 2.0 processor. Unknown XSL-T attribute %1. Attribute %1 and %2 are mutually exclusive. In a simplified stylesheet module, attribute %1 must be present. If element %1 has no attribute %2, it cannot have attribute %3 or %4. Element %1 must have at least one of the attributes %2 or %3. At least one mode must be specified in the %1-attribute on element %2. Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. The attribute %1 must appear on element %2. The element with local name %1 does not exist in XSL-T. Element %1 must come last. At least one %1-element must occur before %2. Only one %1-element can appear. At least one %1-element must occur inside %2. When attribute %1 is present on %2, a sequence constructor cannot be used. Element %1 must have either a %2-attribute or a sequence constructor. When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. Element %1 cannot have children. Element %1 cannot have a sequence constructor. The attribute %1 cannot appear on %2, when it is a child of %3. A parameter in a function cannot be declared to be a tunnel. This processor is not Schema-aware and therefore %1 cannot be used. Top level stylesheet elements must be in a non-null namespace, which %1 isn't. The value for attribute %1 on element %2 must either be %3 or %4, not %5. Attribute %1 cannot have the value %2. The attribute %1 can only appear on the first %2 element. At least one %1 element must appear as child of %2. VolumeSlider Muted Заглушить Volume: %1% Громкость: %1% qutim-0.2.0/languages/ru/sources/twitter.ts0000644000175000017500000000667111225627111022455 0ustar euroelessareuroelessar LoginForm Form twitter Username or email: Логин или Почта: Password: Пароль: Autoconnect on start Автовход при запуске twApiWrap Twitter protocol error: Ошибка протокола Twitter: twContactList Friends Друзья Followers Поклонники Name: Имя: Location: Откуда: Description: Описание: Followers count: Количество поклонников: Friends count: Число друзей: Favourites count: Число фаворитов: Statuses count: Количество статусов: Last status text: Последний текст статуса: twStatusObject Online В сети Offline Отключен qutim-0.2.0/languages/ru/sources/jabber.ts0000644000175000017500000035530611260607211022200 0ustar euroelessareuroelessar AcceptAuthDialog Form Authorize Авторизовать Deny Отклонить Ignore Игнорировать AddContact Add User Добавить пользователя Jabber ID: User information Информация о пользователе Name: Имя: <no group> <нет группы> Send authorization request Отправить запрос авторизации Group: Группа: Find user Найти пользователя Add Добавить Cancel Отмена Contacts Form Show contact status text in contact list Показывать текст статуса в списке контактов Show mood icon in contact list Показывать значок настроения в списке контактов Show main activity icon in contact list Показывать значок главной деятельности в списке контактов Show extended activity icon in contact list Показывать значок дополнительной деятельности в списке контактов Show tune icon in contact list Показывать значок музыки в списке контактов Show not authorized icon Показывать значок необходимости авторизации Show QIP xStatus in contact list Показывать х-статус QIP в списке контактов Show main resource in notifications Показывать основной ресурс в уведомлениях Dialog Dialog Диалог Ok Ок Cancel Отмена JabberSettings Form Default resource: Ресурс по-умолчанию: Reconnect after disconnect Подключаться после обрыва связи Don't send request for avatars Не посылать запросы на аватары Listen port for filetransfer: Порт для передачи файлов: Priority depends on status Приоритет зависит от статуса Online: Online В сети: Free for chat: Free for chat Готов поболтать: Away: Away Отошел: NA: NA Недоступен: DND: DND Не беспокоить: JoinChat Join groupchat Войти в групповой чат Bookmarks Закладки Settings Настройки Name Имя Conference Конференция Nick Ник Password Пароль Auto join Автоматически входить Save Сохранить Search Поиск Join Войти Close Закрыть History История Request last Получить последние messages сообщения (-ий) Request messages since the datetime Получить последние сообщения начиная с H:mm:ss Request messages since Получить последние сообщения начиная с LoginForm Enter Jabber Server, where you want register Введите Jabber-сервер на котором хотите зарегистрироваться Server: Сервер: Registration... Регистрация... Registration Регистрация You must enter a valid jid Вы должны ввести правильный JID You must enter a password Вы должны ввести пароль <font color='green'>%1</font> <font color='red'>%1</font> LoginFormClass LoginForm Password: Пароль: Register this account Зарегистрировать JID: Register new account Регистрация новой учетной записи Personal Form General Главные E-mail Электронная почта Phone Телефон Home Дом Work Работа QObject Open File Открыть файл All files (*) Все файлы (*) Join groupchat on Войти в групповой чат <font size='2'><b>Status text:</b> %1</font> <font size='2'><b>Статус:</b> %1</font> <font size='2'><b>Possible client:</b> %1</font> <font size='2'><b>Возможный клиент:</b> %1</font> <font size='2'><b>User went offline at:</b> <i>%1</i></font> <font size='2'><b>Пользователь ушел в:</b> <i>%1</i></font> <font size='2'><b>User went offline at:</b> <i>%1</i> (with message: <i>%2</i>)</font> <font size='2'><b>Пользователь ушел в:</b> <i>%1</i> (потому что: <i>%2</i>)</font> <font size='2'><b>Authorization:</b> <i>None</i></font> <font size='2'><b>Авторизация:</b> <i>Нет</i></font> <font size='2'><b>Authorization:</b> <i>To</i></font> <font size='2'><b>Авторизация:</b> <i>До</i></font> <font size='2'><b>Authorization:</b> <i>From</i></font> <font size='2'><b>Авторизация:</b> <i>До</i></font> <font size='2'><i>Listening:</i> %1</font> <font size='2'><i>Слушает:</i> %1</font> Afraid Испуганный Amazed Удивленный Amorous Влюбленный Angry Злой Annoyed Раздосадованный Anxious Тревожный Aroused Возбужденный Ashamed Пристыженный Bored Скучающий Brave Бросающий вызов Calm Спокойный Cautious Осторожный Cold Замерзший Confident Уверенный Confused Смущенный Contemplative Задумчивый Contented Довольный Cranky Раздраженный Crazy Сумасшедший Creative Творческий Curious Любопытный Dejected Грустный Depressed Депрессивный Disappointed Разочарованный Disgusted Отвращение Dismayed Испуганный Distracted Расстроенный Embarrassed Сконфуженный Envious Завидующий Excited Взволнованный Flirtatious Кокетливый Frustrated Разочарованный Grateful Благодарный Grieving Огорченный Grumpy Несдержанный Guilty Виноватый Happy Счастливый Hopeful Оптимистичный Hot Жарко Humbled Униженный Humiliated Оскорбленный Hungry Голодный Hurt Испытывающий боль Impressed Производящий впечатление In awe Боящийся In love Любящий Indignant Возмущенный Interested Интересующийся Intoxicated Отравившийся Invincible Непобедимый Jealous Ревнивый Lonely Одинокий Lost Потерявшийся Lucky Счастливый Mean Недалекий Moody В дурном настроении Nervous Нервный Neutral Безразличный Offended Нарушивший Outraged Гневящийся Playful Игривый Proud Гордый Relaxed Расслабленный Relieved Облегченный Remorseful Сожалеющий Restless Неугомонный Sad Грустный Sarcastic Саркастичный Satisfied Довольный Serious Серьезный Shocked В шоке Shy Стесняющийся Sick Приболевший Sleepy Сонный Spontaneous Непосредственный Stressed Напряженный Strong Сильный Surprised Удивленный Thankful Благодарный Thirsty Хотящий пить Tired Уставший Undefined Неопределившийся Weak Слабый Worried Взволнованный Unknown Неизвестный Doing chores Дела buying groceries покупаю продтовары cleaning убираюсь cooking готовлю doing maintenance ухаживаю doing the dishes делаю блюда doing the laundry стираю gardening занимаюсь содоводством running an errand в командировке walking the dog выгуливаю собаку Drinking Пью having a beer пиво having coffee кофе having tea чай Eating Ем having a snack перекусываю having breakfast завтракаю having dinner обедаю having lunch ужинаю Exercising Занимаюсь cycling на велосипеде dancing танцую hiking туризм jogging бег трусцой playing sports занимаюсь спортом running бегаю skiing на лыжах swimming плаваю working out тренируюсь Grooming Привожу себя в порядок at the spa в спа brushing teeth чищу зубы getting a haircut стригусь shaving бреюсь taking a bath принимаю ванну taking a shower принимаю душ Having appointment Занимаюсь в данный момент Inactive Бездействует day off выходной hanging out упорствую hiding прячусь on vacation в отпуске praying молюсь scheduled holiday планирую выходные sleeping сплю thinking думаю Relaxing Отдыхаю fishing рыбачу gaming играю going out гуляю partying на вечеринке reading читаю rehearsing рассказываю shopping хожу за покупками smoking курю socializing общаюсь sunbathing загораю watching TV смотрю ТВ watching a movie смотрю фильм Talking Говорю in real life в реальной жизни on the phone по телефону on video phone по видеосвязи Traveling Путешествую commuting еду на работу/с работы driving за рулем in a car в машине on a bus в автобусе on a plane в самолете on a train в поезде on a trip в дороге walking иду пешком Working Работаю coding программирую in a meeting на встрече studying учуст writing пишу <font size='2'><i>%1</i></font> <font size='2'><i>%1:</i> %2</font> <font color='#808080'>%1</font> %1 %1 seconds %1 секунд %1 second %1 секунда %1 minutes %1 минут 1 minute 1 минута %1 hours %1 часов 1 hour 1 час %1 days %1 дней 1 day 1 день %1 years %1 лет 1 year 1 год Mood Настроение Activity Деятельность Tune Настройка RoomConfig Form Apply Применить Ok Ок Cancel Отмена RoomParticipant Form Owners Владельцы JID JID Administrators Администраторы Members Регестрированый Banned Забанен Reason Причина Apply Применить Ok Ок Cancel Отмена SaveWidget Save to bookmarks Сохранить в закладки Bookmark name: Название: Conferene: битая строка Конференция: Nick: Ник: Password: Пароль: Auto join Автоматически входить Save Сохранить Cancel Отмена Search Form Поиск Server: Сервер: Fetch Получить Type server and fetch search fields. Введите сервер и начните поиск. Clear Очистить Search Поиск Close Закрыть SearchConference Search conference Поиск конференции SearchService Search service Поиск служб SearchTransport Search transport Поиск транспортов ServiceBrowser jServiceBrowser Обозреватель служб Server: Сервер: Close Закрыть Name Имя JID JID Join conference Войти в конференцию Register Зарегистрироваться Search Поиск Execute command Выполнить команду Show VCard Показать vCard Add to roster Добавить в ростер Add to proxy list Добавить в список прокси VCardAvatar <img src='%1' width='%2' height='%3'/> VCardBirthday Birthday: День Рождения: %1&nbsp;(<font color='#808080'>wrong date format</font>) %1&nbsp;(<font color='#808080'>неверный формат даты</font>) VCardRecord Site: Сайт: Company: Компания: Department: Департамент: Title: Название: Role: Род деятельности: Country: Страна: Region: Регион: City: Город: Post code: Индекс: Street: Улица: PO Box: Почтовый ящик: XmlConsole Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> Clear Очистить XML Input... XML ввод... Close Закрыть <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> XmlPrompt XML Input XML ввод &Send &Отправить &Close &Закрыть activityDialogClass Choose your activity Выберите деятельность Choose Выбор Cancel Отмена customStatusDialogClass Choose Выбрать Cancel Отмена Choose your mood Выберите ваше настроение jAccount Join groupchat Войти в групповой чат Additional Дополнительно Open XML console Открыть XML консоль Add new contact Добавить новый контакт Find users Найти пользователя Service browser Обозреватель служб View/change personal vCard Посмотреть/изменить визитку Privacy status Приватный статус Set mood Установить настроение Set activity Установить деятельность Online В сети Offline Отключен Free for chat Готов поболтать Away Отошел NA Недоступен DND Не беспокоить You must use a valid jid. Please, recreate your jabber account. Вы должны использовать действительный jid. Пожалуйста, пересоздайте учетную запись jabber. You must enter a password in settings. Вы должны указать пароль в настройках. Services Службы Conferences Конференции Add new contact on Добавить новый контакт на Invisible for all Невидимый для всех Visible for all Видимый для всех Visible only for visible list Видимый только для списка видимости Invisible only for invisible list Невидимый только для списка невидимости jAccountSettings Editing %1 Редактирование %1 Warning Предупреждение You must enter a password Вы должны ввести пароль jAccountSettingsClass jAccountSettings Настройка учетной записи Jabber OK Ок Apply Применить Cancel Отмена Account Учетная запись JID: Password: Пароль: Resource: Ресурс: Priority: Приоритет: Set priority depending of the status Установить приоритет, зависящий от статуса Autoconnect at start Автоматически подключаться при запуске Keep previous session status Сохранять статус с предыдущей сессии Use this option for servers doesn't support bookmark Используйте эту опцию для серверов, не поддурживающих закладки Local bookmark storage Хранить закладки локально Connection Соединение Encrypt connection: Защищенное соединение: Never Никогда When available Когда доступно Always Всегда Compress traffic (if possible) Сжимать траффик (если возможно) Host: Хост: Port: Порт: Proxy Прокси Proxy type: Тип прокси: None Нет HTTP SOCKS 5 Default По умолчанию Authentication Аутентификация User name: Имя пользователя: Manually set server host and port Установить вручную хост и порт jAddContact <no group> <нет группы> Services Службы jAdhoc Finish Закончить Cancel Отмена Previous Предыдущий Next Следующий Complete Завершить Ok Ок jConference Kick Кик Ban Бан Visitor Гость Participant Участник Moderator Модератор Invite to groupchat Пригласить в групповой чат User %1 invite you to conference %2 with reason "%3" Accept invitation? Пользователь %1 приглашает вас в конференцию %2 с причиной "%3" Принять приглашение? %1 has set the subject to: %2 %1 установил тему: %2 The subject is: %2 Тема: %2 Not authorized: Password required. Не авторизован: требуется пароль. Forbidden: Access denied, user is banned. Запрещено: Отказано в доступе, пользователь забанен. Item not found: The room does not exist. Пункт не найден: Комната не существует. Not allowed: Room creation is restricted. Не разрешено: Создание комнат ограничено. Not acceptable: Room nicks are locked down. Недопустимо: Ники в комнате заблокированы. Registration required: User is not on the member list. Требуется регистрация: Пользователь не в списке регистрированных. Conflict: Desired room nickname is in use or registered by another user. Конфликт: Желаемый ник используется в комнате или зарегистрирован другим пользователем. Service unavailable: Maximum number of users has been reached. Сервис недоступен: Достигнуто максимальное количество пользователей. Unknown error: No description. Неизвестна ошибка: Нет описания. Join groupchat on Войти в групповой чат %1 is now known as %2 %1 теперь известен как %2 You have been kicked from Вы были кикнуты из with reason: с причиной: without reason без причины You have been kicked Вы были кикнуты You have been banned from Вы были забанены из You have been banned Вы были забанены %1 has been kicked %1 был кикнут %1 has been banned %1 был забанен %1 has left the room %1 покинул комнату %3 has joined the room as %1 and %2 %3 вошел в комнату как %1 и %2 %2 has joined the room as %1 %2 вошел в комнату как %1 %2 has joined the room %2 вошел в комнату %4 (%3) has joined the room as %1 and %2 %4 (%3) вошел в комнату как %1 и %2 %3 (%2) has joined the room as %1 %3 (%2) вошел в комнату как %1 %2 (%1) has joined the room %2 (%1) вошел в комнату %3 now is %1 and %2 %3 теперь %1 и %2 %2 now is %1 %2 теперь %1 %4 (%3) now is %1 and %2 %4 (%3) теперь %1 и %2 %3 (%2) now is %1 %3 (%2) теперь %1 moderator модератор participant участник visitor посетитель banned забаненый member регистрированный owner владелец administrator администратор guest гость <font size='2'><b>Affiliation:</b> %1</font> <font size='2'><b>Присоединения:</b> %1</font> <font size='2'><b>Role:</b> %1</font> <font size='2'><b>Роль:</b> %1</font> <font size='2'><b>JID:</b> %1</font> <font size='2'><b>JID:</b> %1</font> Copy JID to clipboard Скопировать JID в буфер обмена Add to contact list Добавить в список контактов Kick message Кик-сообщение Ban message Бан-сообщение Rejoin to conference Join conference Войти в конференцию Save to bookmarks Сохранить в закладки Room configuration Конфигурация комнаты Room participants Участники комнаты Room configuration: %1 Конфигурация комнаты: %1 Room participants: %1 Участники комнаты: %1 jFileTransferRequest Save File Сохранить файл Form From: От: File name: Имя файла: File size: Размер файла: Accept Принять Decline Отклонить jFileTransferWidget File transfer: %1 Передача файла: %1 Waiting... Ожидание... Sending... Отправка... Getting... Прием... Done... Готово... Close Закрыть Form Filename: Имя файла: Done: Готово: Speed: Скорость: File size: Размер файла: Last time: Времени прошло: Remained time: Времени осталось: Status: Статус: Open Открыть Cancel Отмена jJoinChat new chat новый чат New conference Новая конференция jLayer Jabber General Jabber главные Contacts Контакты jProtocol en xml:lang A stream error occured. The stream has been closed. Ошибка. Поток был закрыт. The incoming stream's version is not supported Версия входящего потока не поддерживается The stream has been closed (by the server). Поток закрыт сервером. The HTTP/SOCKS5 proxy requires authentication. Прокси HTTP/SOCKS5 требует аутентификации. HTTP/SOCKS5 proxy authentication failed. Не удалось аутентифицироваться на прокси сервере. The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. Прокси требует не поддержваемого механизма аутентификации. An I/O error occured. Ошибка ввода-вывода. An XML parse error occurred. Ошибка разборки XML. The connection was refused by the server (on the socket level). Соединение отклонено сервером (на уровне сокетов). Resolving the server's hostname failed. Не удалось определить адрес сервера. Out of memory. Uhoh. The auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. The server's certificate could not be verified or the TLS handshake did not complete successfully. Сертификат сервера не верный или TLS соединение прервалось. The server didn't offer TLS while it was set to be required or TLS was not compiled in. Negotiating/initializing compression failed. Authentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. Логин/Пароль не верны или аккаунт не найден. Use ClientBase::authError() to find the reason. The user (or higher-level protocol) requested a disconnect. There is no active connection. Нет активного соединения. Unknown error. It is amazing that you see it... O_o ВАУ! Это неизвестная ошибка. То что вы её увидели просто не возможно - но увы это так 0_O Services Службы Authorization request Запрос авторизации You were authorized Вас авторизовали Contacts's authorization was removed Авторизация контакта отозвана Your authorization was removed Ваша авторизация отозвана Sender: %2 <%1> Отправитель: %2 <%1> Senders: Отправители: %2 <%1> %2 <%1> Subject: %1 Тема: %1 URL: %1 URL: %1 Unreaded messages: %1 Непрочитанные сообщения: %1 vCard is succesfully saved Визитка успешно сохранена JID: %1<br/>Idle: %2 JID: %1<br/>Бездействие: %2 JID: %1<br/>The feature requested is not implemented by the recipient or server. JID: %1<br/> функция не поддерживается чужим сервером. JID: %1<br/>The requesting entity does not possess the required permissions to perform the action. JID: %1<br/>It is unknown StanzaError! Please notify developers.<br/>Error: %2 jPubsubInfo <h3>Mood info:</h3> <h3>Информация о настроении:</h3> Name: %1 Имя: %1 Text: %1 Текст: %1 <h3>Activity info:</h3> <h3>Информация о деятельности:</h3> General: %1 Главные: %1 Specific: %1 Индивидуальные: %1 <h3>Tune info:</h3> <h3>Информация о песне:</h3> Artist: %1 Артист: %1 Title: %1 Название: %1 Source: %1 Источник: %1 Track: %1 Дорожка: %1 Uri: <a href="%1">link</a> Uri: <a href="%1">link</a> Length: %1 Длина: %1 Rating: %1 Рейтинг: %1 jPubsubInfoClass Pubsub info Информация PubSub Close Закрыть jRoster Add to contact list Добавить в список контактов Rename contact Переименовать контакт Delete contact Удалить контакт Move to group Переместить в группу Authorization Авторизация Send authorization to Авторизовать Ask authorization from Запросить авторизацию Remove authorization from Удалить авторизацию Transports Транспорты Register Зарегистрироваться Unregister Отменить регистрацию Log In Войти Log Out Выйти Copy JID to clipboard Скопировать JID в буфер обмена Send message to: Отправить сообщение: Send file to: Отправить файл: Get idle from: Запросить бездействие с: Execute command: Выполнить команду: Invite to conference: Пригасить в конференцию: Send file Отправить файл Get idle Запросить бездействие Execute command Выполнить команду PubSub info: Информация PubSub: Delete from visible list Удалить из списка видимости Add to visible list Добавить в список видимости Delete from invisible list Удалить из списка невидимости Add to invisible list Добавить в список невидимости Delete from ignore list Удалить из списка игнорирования Add to ignore list Добавить в список игнорирования Name: Имя: Conferences Конференции Services Службы Remove transport and his contacts? Удалить транспорт и его контакты? Delete with contacts Удалить с контактами Delete without contacts Удалить без контактов Cancel Отмена Contact will be deleted. Are you sure? Контакт будет удален. Вы уверены? Move %1 Переместить %1 Group: Группа: Authorize contact? Авторизовать контакт? Ask authorization from %1 Запросить авторизацию %1 Reason: Причина: Remove authorization from %1 Удалить авторизацию %1 jSearch Search Поиск Jabber ID Jabber ID JID JID Nickname Ник First Имя Last Фамилия Nick Ник E-Mail Электронная почта Error Ошибка jServiceBrowser <br/><b>Identities:</b><br/> <br/><b>Личное:</b><br/> category: категория: type: тип: <br/><b>Features:</b><br/> <br/><b>Особенности:</b><br/> jServiceDiscovery The sender has sent XML that is malformed or that cannot be processed. Access cannot be granted because an existing resource or session exists with the same name or address. The feature requested is not implemented by the recipient or server and therefore cannot be processed. The requesting entity does not possess the required permissions to perform the action. The recipient or server can no longer be contacted at this address. The server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error. The addressed JID or item requested cannot be found. The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme. The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server. The recipient or server does not allow any entity to perform the action. The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials. The item requested has not changed since it was last requested. The requesting entity is not authorized to access the requested service because payment is required. The intended recipient is temporarily unavailable. The recipient or server is redirecting requests for this information to another entity, usually temporarily. The requesting entity is not authorized to access the requested service because registration is required. A remote server or service specified as part or all of the JID of the intended recipient does not exist. A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time. The server or recipient lacks the system resources necessary to service the request. The server or recipient does not currently provide the requested service. The requesting entity is not authorized to access the requested service because a subscription is required. The unknown error condition. The recipient or server understood the request but was not expecting it at this time. The stanza 'from' address specified by a connected client is not valid for the stream. jSlotSignal %1@%2 Invisible for all Невидимый для всех Visible for all Видимый для всех Visible only for visible list Видимый только для списка видимости Invisible only for invisible list Невидимый только для списка невидимости jTransport Register Register transport Зарегистрироваться Name Имя Nick Ник E-Mail Электропочта Password Пароль First Имя Last Фамилия Address Адрес City Город State Область Zip Индекс Phone Телефон URL URL Date Дата Misc Прочие Text Текст jVCard Update photo Обновить фото Add name Добавить имя Add nick Добавить ник Add birthday Добавить День Рождения Add homepage Добавить домашнюю страницу Add country Добавить страну Add region Добавить регион Add city Добавить город Add postcode Добавить индекс Add street Добавить улицу Add PO box Добавить почтовый ящик Add description Добавить описание Add organization name Добавить название организации Add organization unit Добавить подразделение Add title Добавить название Add role Добавить должность Open File Открыть файл Images (*.gif *.bmp *.jpg *.jpeg *.png) Изображения (*.gif *.bmp *.jpg *.jpeg *.png) Open error Ошибка при открытии Image size is too big Размер изображения слишком велик userInformation Информация о пользователе Request details Запросить детали Close Закрыть Save Сохранить topicConfigDialogClass Change topic Изменить тему Change Изменить Cancel Отмена qutim-0.2.0/languages/ru/sources/ubuntunotify.ts0000644000175000017500000000465111225627111023522 0ustar euroelessareuroelessar QObject System message from %1: Системное сообщение от %1: Message from %1: %2 Сообщение от %1: %2 %1 is typing %1 печатает Blocked message from %1: %2 Блокированное сообщение от %1: %2 %1 has birthday today!! %1 празднует день рождений!! UbuntuNotificationLayer System message from %1: Системное сообщение от %1: Message from %1 Сообщение от %1 %1 is typing %1 печатает Blocked message from %1 Блокированное сообщение от %1 has birthday today!! празднует день рождений!! qutIM is started qutIM запущен qutim-0.2.0/languages/ru/sources/core.ts0000644000175000017500000051210011271416230021667 0ustar euroelessareuroelessar AbstractContextLayer Send message Отправить сообщение Message history История сообщений Contact details Детали контакта AccountManagementClass AccountManagement Управление учетными записями Add Добавить Edit Изменить Remove Удалить AddAccountWizard Add Account Wizard Мастер добавления учетных записей AntiSpamLayerSettingsClass AntiSpamSettings Настройки антиспама Accept messages only from contact list Принимать сообщения только от списка контактов Notify when blocking message Уведомлять о заблокированных сообщениях Do not accept NIL messages concerning authorization Не принимать запросы авторизации от контактов не в списке Do not accept NIL messages with URLs Не принимать сообщения, содержащие ссылки от контактов не в списке Enable anti-spam bot Включить антиспам фильтр Anti-spam question: Антиспам вопрос: Answer to question: Ответ на вопрос: Message after right answer: Сообщение после правильного ответа: Don't send question/reply if my status is "invisible" Не отправлять вопрос/ответ, если мой статус "невидимый" ChatForm Form Contact history История контакта Ctrl+H Ctrl+H Emoticon menu Смайлы Ctrl+M Ctrl+M Send image < 7,6 KB Отправить изображение <7,6 Кб Ctrl+I Ctrl+I Send file Отправить файл Ctrl+F Ctrl+F Translit Смена раскладки Ctrl+T Ctrl+T Contact information Информация о контакте Send message on enter Отправлять сообщения по Enter Send typing notification Отправлять оповещение о наборе Quote selected text Цитировать выделенный текст Ctrl+Q Ctrl+Q Clear chat log Очистить окно чата ... ... Send message Отправить сообщение Send Отправить Swap layout Смена раскладки ChatLayerClass Chat window Окно чата ChatSettingsWidget Form Tabbed mode Режим вкладок Chats and conferences in one window Чаты и конференции в одном окне Close button on tabs Кнопки закрытия на вкладках Tabs are movable Перемещаемые вкладки Remember openned privates after closing chat window Запоминать открытые чаты после закрытия окна Close tab/message window after sending a message Закрывать вкладку/окно чата после отправки сообщения Open tab/message window if received message Открывать вкладку/окно чата при получении сообщения Webkit mode Webkit-режим Don't show events if message window is open Не показывать события, когда окно чата открыто Send message on enter Отправлять сообщения по Enter Send message on double enter Отправлять сообщения по двойному Enter Send typing notifications Отправлять оповещение о наборе Don't blink in task bar Не мигать в панели задач After clicking on tray icon show all unreaded messages Показывать все непрочитанные сообщения при щелчке по значку в трее Remove messages from chat view after: Удалять сообщения из окна чата после: Don't group messages after (sec): Группировать сообщения через (сек): Text browser mode Текстовый режим Show names Показывать имена Timestamp: Дата: ( hour:min:sec day/month/year ) (часы:минуты:секунды день/месяц/год) ( hour:min:sec ) (часы:минуты:секунды) ( hour:min, full date ) Colorize nicknames in conferences Цветные ники в конференции General Главные Chat Чат ChatWindow <font color='green'>Typing...</font> <font color='green'>Печатает...</font> Open File Открыть файл Images (*.gif *.png *.bmp *.jpg *.jpeg) Изображения (*.gif *.png *.bmp *.jpg *.jpeg) Open error Ошибка при открытии Image size is too big Размер изображения слишком велик ConfForm Form Show emoticons Показать смайлы Ctrl+M, Ctrl+S Ctrl+M, Ctrl+S Invert/translit message Смена раскладки сообщения Ctrl+T Ctrl+T Send on enter Отправлять по Enter Quote selected text Цитировать выделенный текст Ctrl+Q Ctrl+Q Clear chat Очистить чат Send Отправить Console Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> ContactListProxyModel Online В сети Offline Отключен Not in list Не в списке ContactListSettingsClass ContactListSettings Спикок контактов Main Главные Show accounts Показывать учетные записи Hide empty groups Скрывать пустые группы Hide offline users Скрывать отключенных пользователей Hide online/offline separators Скрывать разделение "В сети/Отключен" Sort contacts by status Сортировать контакты по статусу Draw the background with using alternating colors Рисовать фон альтернативными цветами Show client icons Показывать значки клиентов Show avatars Показывать аватары Look'n'Feel Внешний вид Opacity: Прозрачность: 100% 100% Window Style: Стиль окна: Regular Window Обычное окно Theme border Рамка из темы Borderless Window Окно без рамки Tool window Тонкая рамка Show groups Показывать группы Customize Дополнительно Customize font: Настройки шрифтов: Account: Учетная запись: Group: Группа: Online: В сети: Offline: Отключен: Separator: Разделитель: DefaultContactList qutIM qutIM Main menu Главное меню Show/hide offline Показать/скрыть отключенных контакты Show/hide groups Показать/скрыть группы Sound on/off Звук вкл/выкл About О программе &File &Файл Control Управление Show offline Скрыть отключенных контакты Hide groups Скрыть группы Mute Выключить звук GeneralWindow qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ, Possible variants Возможные варианты GlobalProxySettingsClass GlobalProxySettings Глобальный прокси Proxy Прокси Type: Тип: Host: Хост: Port: Порт: None Нет HTTP SOCKS 5 Authentication Аутентификация User name: Имя пользователя: Password: Пароль: GuiSetttingsWindowClass User interface settings Оформление Emoticons: Смайлы: <None> <Нет> Contact list theme: Тема списка контактов: <Default> <По умолчанию> Chat window dialog: Диалог окна чата: Chat log theme (webkit): Тема окна чата (Webkit): Popup windows theme: Тема всплывающих уведомлений: Status icon theme: Тема значков статуса: System icon theme: Тема системных значков: Language: Язык: <Default> ( English ) <По умолчанию> (Английский) Application style: Стиль приложения: Border theme: Тема рамки: <System> <Системная> Sounds theme: Звуковая тема: <Manually> <Измененная> OK Ок Apply Применить Cancel Отмена HistorySettingsClass HistorySettings История Save message history Сохранять историю сообщений Show recent messages in messaging window Показывать последние сообщения в окне чата Show recent messages in messaging window: Показывать последние сообщения в окне чата: HistoryWindow No History Нет истории HistoryWindowClass HistoryWindow История Account: Учетная запись: From: От: In: %L1 Пришло: %L1 Out: %L1 Ушло: %L1 All: %L1 Всего: %L1 Search Поиск Return Вернуть 1 JsonHistoryNamespace::HistoryWindow No History Нет истории In: %L1 Пришло: %L1 Out: %L1 Ушло: %L1 All: %L1 Всего: %L1 LastLoginPage Please type chosen protocol login data Пожалуйста, наберите данные для входа Please fill all fields. Пожалуйста, заполните все поля. NotificationsLayerSettingsClass NotificationsLayerSettings Уведомления Show popup windows Показывать всплывающие окна Width: Ширина: Height: Высота: Show time: Время показа: px пикс s сек Position: Позиция: Style: Стиль: Upper left corner Верхний левый угол Upper right corner Верхний правый угол Lower left corner Нижний левый угол Lower right corner Нижний правый угол No slide Без скольжения Slide vertically Вертикальное скольжение Slide horizontally Горизонтальное скольжение Show balloon messages Показывать подсказки-уведомления Notify when: Оповещать когда: Contact sign on Контакт онлайн Contact sign off Контакт оффлайн Contact typing message Контакт печатает сообщение Contact change status Контакт меняет статус Message received Получено сообщение Show balloon messages: Показывать подсказки-уведомления: PluginSettingsClass Configure plugins - qutIM Настройка плагинов 1 1 Ok Ок Cancel Отмена PopupWindow <b>%1</b> <b>%1</b> <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 PopupWindowClass PopupWindow Всплывающее уведомление ProfileLoginDialog Log in Войти Profile Профиль Incorrect password Неправильный пароль Delete profile Удалить профиль Delete %1 profile? Удалить профиль %1? ProfileLoginDialogClass ProfileLoginDialog Вход в профиль Name: Имя: Password: Пароль: Remember password Запомнить пароль Don't show on startup Не показывать при запуске Sign in Войти Cancel Отмена Remove profile Удалить профиль ProtocolPage Please choose IM protocol Пожалуйста, выберите протокол This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts Мастер поможет вам добавить учетную запись. Вы всегда можете удалить учетную запись используя Настройки -> Учетные записи QObject Open File Открыть файл All files (*) Все файлы (*) Anti-spam Антиспам Authorization blocked Авторизация отклонена Not in list Не в списке Notifications Уведомления Sound notifications Звуковые уведомления Message from %1: %2 Сообщение от %1: %2 %1 is typing %1 печатает typing печатает Blocked message from %1: %2 Заблокировано сообщение от %1: %2 (BLOCKED) (ЗАБЛОКИРОВАНО) %1 has birthday today!! У %1 сегодня День Рождения!! has birthday today!! сегодня День Рождения!! Sound Звук &Quit &Выход Quit Выход Contact List Список контактов History История :'( 1st quarter 1й квартал 2nd quarter 2й квартал 3rd quarter 3й квартал 4th quarter 4й квартал SoundEngineSettings Select command path Выберите путь к команде Executables (*.exe *.com *.cmd *.bat) All files (*.*) Исполняемые (*.exe *.com *.cmd *.bat)Все файлы (*.*) Executables Исполняемые Form ... ... Engine type Звуковой движок No sound Нет звука QSound QSound Command Команда Custom sound player Внешняя программа воспроизведения звуков Command: Команда: SoundLayerSettings Startup Запуск System event Системное событие Outgoing message Исходящее сообщение Incoming message Входящее сообщение Contact is online Контакт В сети Contact changed status Контакт сменил статус Contact went offline Контакт отключился Contact's birthday is comming У контакта скоро День Рождения Sound files (*.wav) Звуковые файлы (*.wav) All files (*.*) Все файлы (*.*) Sound files (*.wav);;All files (*.*) Don't remove ';' chars! Звуки (*.wav);;Все файлы (*.*) Open sound file Открыть звуковой файл Export sound style Экспортировать звуковой стиль XML files (*.xml) XML-файлы (*.xml) Export... Экспортировать... All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue? Все звуковые файлы будут скопированы в папку "%1/". Существующие файлы будут заменены без каких-либо предупреждений. Придолжить? Error Ошибка Could not open file "%1" for writing. Не могу открыть файл "%1" для записи. Could not copy file "%1" to "%2". Не могу скопировать файл "%1" в "%2". Sound events successfully exported to file "%1". Звуковые события успешно экспортированы в файл "%1". Import sound style Импортировать звуковой стиль Could not open file "%1" for reading. Не могу открыть файл "%1" для чтения. An error occured while reading file "%1". Ошибка при чтении файла "%1". File "%1" has wrong format. Файл "%1" имеет неверный формат. SoundSettingsClass soundSettings Звук Events События Sound file: Звуковой файл: Play Проиграть Open Открыть Apply Применить Export... Экспорт темы... Import... Импорт темы... You're using a sound theme. Please, disable it to set sounds manually. Вы используете звуковую тему Пожалуйста, уберите тему, для установки звуков вручную. StatusDialog Write your status message Введите свое статус-сообщение Preset caption StatusDialogVisualClass StatusDialog Статус Preset: <None> <Нет> Do not show this dialog Не показывать этот диалог Save Сохранить OK Ок Cancel Отмена StatusPresetCaptionClass StatusPresetCaption Звуковые уведомления OK Ок Cancel Отмена Please enter preset caption: Укажите название шаблона: TreeContactListModel Online В сети Free for chat Свободен для разговора Away Отошел Not available Недоступен Occupied Занят Do not disturb Не беспокоить Invisible Невидимый Offline Отключен At home Дома At work На работе Having lunch Ем Evil Злой Depression Депрессия Without authorization Не авторизован aboutInfo Support project with a donation: Поддержите проект: Yandex.Money Enter there your names, dear translaters <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Алексеенко Станислав aka MrFree</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> поддержка текущего состояния перевода</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:f1.mrfree@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">f1.mrfree@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">NightWolf_NG</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Начальный перевод ядра и основных протоколов</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Mr.Peabody</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Помощь в переводе </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mrpeabody@mail.ru"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mrpeabody@mail.ru</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">skpy</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> помощь в переводе</span></p> </body></html> GNU General Public License, version 2 aboutInfoClass About qutIM О qutIM About О программе <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutIM - кроссплатформенный многопротокольный IM-клиент</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutim.develop@gmail.com</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">© 2008, Рустам Чакин, Руслан Нигматуллин.</p></body></html> Authors Авторы <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Рустам Чакин</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt; color:#090909;">Главный разработчик и основатель проекта</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt; color:#090909;"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt; color:#090909;">Руслан Нигматуллин </span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt; color:#000000;">Главный разработчик</span></p></body></html> Thanks To Благодарности <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Георгий Сурков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> комплект иконок</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> комплект иконок</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Команда Tango</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Набор смайлов </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Денис Новиков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Автор системы звуковых событий</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Алексей Игнатьев</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Автор системы идентификации клиентов</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Автор обьектов "шкурки"</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> License Agreement Лицензионное соглашение Close Закрыть Return Вернуться <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"><a href="mailto:qutim.develop@gmail.com">qutim.develop@gmail.com</a></span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, кроссплатформенный интернет пейджер</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"><a href="mailto:qutim.develop@gmail.com">qutim.develop@gmail.com</a></span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">© 2008-2009, Рустам Чакин, Руслан Нигматуллин</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">License agreements</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">Лицензионное соглашение</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Рустам Чакин</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Главный разработчик и основатель Проекта</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Руслан Нигматуллин</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Главный разработчик</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Георгий Сурков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Набор иконок</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Набор иконок</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">команда Tango</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Набор смайлов </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Денис Новиков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Алексей Игнатьев</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Автор распознавания клиентасобеседника</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p></body></html> Translators Переводчики <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>.</body></html> Donates Поблагодарить разработчиков <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, кросплатформенный интернет пейджер</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Рустам Чакин, Руслан Нигматуллин</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">License agreements</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">Лицензионное соглашение</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project leader</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Рустам Чакин</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Главный разработчик и основатель Проекта</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Руслан Нигматуллин</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Главный разработчик</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schröter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox library</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Георгий Сурков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Набор иконок</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Набор иконок</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Команда Tango</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Набор смайлов </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Денис Новиков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор системы звуковых событий</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Алексей Игнатьев</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор системы идентификации клиента собеседника</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"></p></body></html> jVCard loginDialog Delete account Удалить учетную запись Delete %1 account? Удалить учетную запись %1? loginDialogClass Account Учетная запись Account: Учетная запись: ... ... Password: Пароль: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximum length of ICQ password is limited to 8 characters.</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Максимальая длина пароля ICQ ограничена 8 символами.</span></p></body></html> Save my password Сохранить мой пароль Autoconnect Автоматически подключаться Secure login Безопасный вход Show on startup Показывать при запуске Sign in Войти Remove profile Удалить профиль mainSettingsClass mainSettings Главные Save main window size and position Сохранять размер и позицию главного окна Hide on startup Скрывать при запуске Don't show login dialog on startup Не показывать диалог входа при запуске Start only one qutIM at same time Разрешить запуск только одной копии qutIM Add accounts to system tray menu Добавить учетные записи в меню трея Always on top Всегда наверху Auto-hide: Автоматически скрывать: s сек Auto-away after: Автоматический статус "отсутствую" через: min мин Show status from: Показывать статус для: qutIM &Quit &Выход &Settings... &Настройки... &User interface settings... &Оформление... Plug-in settings... Настройки плагинов... Switch profile Сменить профиль Do you really want to switch profile? Вы действительно хотите сменить профиль? qutIMClass qutIM qutIM qutimSettings Accounts Учетные записи General Главные Global proxy Глобальный прокси Save settings Сохранить настройки Save %1 settings? Сохранить %1 настройки? qutimSettingsClass Settings Настройки 1 1 OK Ок Apply Применить Cancel Отмена qutim-0.2.0/languages/ru/sources/vkontakte.ts0000644000175000017500000001412311267600246022756 0ustar euroelessareuroelessar EdditAccount Editing %1 Правка %1 Form Настройки General Главные Password: Пароль: Autoconnect on start Автоматически подключаться Keep-alive every: Поддерживать подключение: s с Refresh friend list every: Обновлять список друзей каждые: Check for new messages every: Проверять сообщения каждые: Updates Обновления Check for friends updates every: Проверять друзей каждые: Enable friends photo updates notifications Уведомлять о смене фото друга Insert preview URL on new photos notifications Включать ссылку на превью в уведомление Insert fullsize URL on new photos notifications Включать ссылку на фото в уведомление OK Ок Apply Применить Cancel Отмена LoginForm Form Настройки E-mail: Password: Пароль: Autoconnect on start Подключаться при старте VcontactList Friends Друзья Favorites Фавориты <font size='2'><b>Status message:</b>&nbsp;%1</font <font size='2'><b>Статус:</b>&nbsp;%1</font Open user page Открыть страницу пользователя <font size='2'><b>Status message:</b>%1</font <font size='2'><b>Статус:</b>%1</font VprotocolWrap Mismatch nick or password Неверный ник или пароль Vkontakte.ru updates Vkontakte.ru обновлен %1 was tagged on photo %1был отмечен на фото %1 added new photo %1 добавил новую фотку VstatusObject Online В сети Offline Отключен qutim-0.2.0/languages/ru/sources/irc.ts0000644000175000017500000007104111225627111021521 0ustar euroelessareuroelessar AddAccountFormClass AddAccountForm Добавление учетных записей Password: Пароль: Save password Сохранить пароль Server: Сервер: irc.freenode.net Port: Порт: 6667 Nick: Ник: Real Name: Настоящее имя: IrcConsoleClass IRC Server Console Консоль IRC сервера ircAccount Channel owner Хозяин канала Channel administrator Администратор канала Channel operator Оператор канала Channel half-operator Модератор канала Voice Голос Banned Забанен Online В сети Offline Отключен Away Отошел Console Консоль Channels List Список каналов Join Channel Подключиться к каналу Change topic Изменить тему IRC operator Оператор IRC Mode Режим Private chat Личный чат Notify avatar Give Op Дать Опа Take Op Взять Опа Give HalfOp Дать полуОпа Take HalfOp Взять полуопа Give Voice Дать голос Take Voice взять Голос Kick Выкинуть Kick with... Выкинуть 7... Ban Забанить UnBan Разбанить Information Информация CTCP Modes Режимы Kick / Ban Кик / Бан Kick reason Причина кика ircAccountSettingsClass IRC Account Settings IRC General Главные Nick: Ник: Alternate Nick: Альтернативный ник: Real Name: Настоящее имя: Autologin on start Автоматически входить при запуске Server: Сервер: Port: Порт: Codepage: Кодировка: Apple Roman Big5 Big5-HKSCS EUC-JP EUC-KR GB18030-0 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 ISO 8859-16 Iscii-Bng Iscii-Dev Iscii-Gjr Iscii-Knd Iscii-Mlm Iscii-Ori Iscii-Pnj Iscii-Tlg Iscii-Tml JIS X 0201 JIS X 0208 KOI8-R KOI8-U MuleLao-1 ROMAN8 Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 WINSAMI2 Identify Идентификация Age: Возраст: Gender: Пол: Unspecified Не указано Male Мужской Female Женский Location Местоположение Languages: Языки: Avatar URL: URL аватара: Other: Другое: Advanced Дополнительно Part message: Quit message: Сообщение при выходе: Autosend commands after connect: Автоматически посылать команду после соединения: OK Ок Cancel Отмена Apply Применить ircProtocol Connecting to %1 Подключение к %1 Trying alternate nick: %1 Пробуем другой ник: %1 %1 requests %2 %1 запрашивает %2 %1 requests unknown command %2 %1запрашивает неизвестную команду %2 %1 reply from %2: %3 %1 ответил от: %2: %3 %1 has set mode %2 %1установил режим %2 ircSettingsClass ircSettings IRC Main Главные Advanced Дополнительно jVCard joinChannelClass Join Channel Подключиться к каналу Channel: Канал: listChannel Sending channels list request... Отправка запроса на список каналов... Fetching channels list... %1 Получение списка каналов... %1 Channels list loaded. (%1) Список каналов загружен (%1) Fetching channels list... (%1) Получение списка каналов... (%1) listChannelClass Channels List Список каналов Filter by: Фильтровать с учетом: Request list Запросить список <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> Users Пользователи Channel Канал Topic Тема textDialogClass textDialog qutim-0.2.0/languages/ru/sources/nowlistening.ts0000644000175000017500000010233711242431714023470 0ustar euroelessareuroelessar jVCard settingsUi Form Окно чата Mode Режим Current plugin mode Текущий режим плагина Deactivated Деактивирован Changes current X-status message Изменять текущее Х-статус сообщение Activates when X-status is "Listening to music" Активироваться при Х-статусе "Слушаю музыку" X-status message mask Маска Х-статуса Listening now: %artist - %title Слушаю сейчас: %artist - %title %artist - %title %artist - %title Settings Настройки Music Player Музыкальный плейер Info Информация background-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); background-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); Set mode for all accounts Для всех аккаунтов You have no ICQ or Jabber accounts. У вас нет ни ICQ ни Jabber аккаунта. For Jabber accounts Для аккаунта Jabber Activated Активен Info to be presented Информация, которая будет представлена For ICQ accounts Для ICQ©® аккаунтов About О плагине artist title RadioButton Amarok 2 Audacious QMMP Winamp <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">v 0.4</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Winamp module author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Плагин NowListening для qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">v 0.4</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Автор:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Ян 'NayZaK' Казлаускас</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Автор модуля Winamp:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Петр Русанов </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">(c) 2009</span></p></body></html> Amarok 1.4 AIMP MPD Rhythmbox Song Bird (Linux) VLC Check period (in seconds) Периордичность проверки (в секундах) 10 Hostname Имя компьютера 127.0.0.1 Port Порт 6600 Password Пароль <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For ICQ X-status message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - track length in minutes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - full path to file</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For Jabber Tune message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - track length in seconds</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - full path to file</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Для ICQ X-статусов действуют следующие сокращения:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - исполнитель</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - название</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - альбом</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - номер дорожки</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - длина записи в минутах</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - полный путь к файлу</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Для Jabber Tune статусов действуют следующие сокращения:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - исполнитель</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - название</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - альбом</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - нормер дорожки</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - длина записи в секундах</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - полный путь к файлу</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Winamp module author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Автор:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Автор модуля к Winamp:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">© 2009</span></p></body></html> qutim-0.2.0/languages/ru/sources/jsonhistory.ts0000644000175000017500000000477611225627111023352 0ustar euroelessareuroelessar HistorySettingsClass HistorySettings Настройки истории Save message history Сохранять сообщения в истории Show recent messages in messaging window Показывать последние сообщения в чате HistoryWindowClass HistoryWindow Account: Учетная запись: From: От: Search Искать Return Назад 1 JsonHistoryNamespace::HistoryWindow No History Нет истории :`-( QObject History История qutim-0.2.0/languages/ru/sources/kde-integration.ts0000644000175000017500000001660211261467354024045 0ustar euroelessareuroelessar KDENotificationLayer Open chat Открыть чат Close Закрыть KdeSpellerLayer Spell checker Орфография KdeSpellerSettings Form Настройки Select dictionary: Словарь: Autodetect of language Автоопределение QObject Notifications Уведомления System message from %1: System message from %1: <br /> Системно сообщение от: %1: Message from %1: Message from %1:<br />%2 Сообщение от %1: %1 is typing %1</b><br /> is typing %1 печатает Blocked message from %1 Blocked message from<br /> %1: %2 Заблокированое сообщение от <br /> %1 %1 has birthday today!! У %1 сегодня день рождения!! Custom message for %1 Сообщение для %1 plugmanSettings Form Настройки Settings Настройки Installed plugins: Установленные плагины: Install from internet Установить из сети Install from file Установить из файла About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Simple qutIM plugin</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Author: </span>Sidorov Aleksey</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Простой плагин для qutIM (kde-integration)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Автор: </span>Сидоров Алексей</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Почта: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html> qutim-0.2.0/languages/ru/sources/weather.ts0000644000175000017500000002162111227611644022410 0ustar euroelessareuroelessar weatherSettingsClass Settings Настройки Cities Города Add Добавить Delete city Удалить город Search Искать Enter city name Укажите название города Refresh period: Период обновления: Show weather in the status row Показывать погоду в статусе About О программе <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Weather qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Погодный плагин для qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Никита Белов</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">© 2008-2009</span></p></body></html> qutim-0.2.0/languages/ru/sources/plugman.ts0000644000175000017500000012466511251652706022431 0ustar euroelessareuroelessar ChooseCategoryPage Select art Выберите графику Select core Выберите ядро Library (*.dll) Библиотека (*.dll) Library (*.dylib *.bundle *.so) Библиотека (*.dylib *.bundle *.so) Library (*.so) Библиотека (*.so) Select library Выберите библиотеку WizardPage Мастер Package category: Категория пакета: Art Шкурки Core Ядро Lib Библиотека Plugin Плагин ... ChoosePathPage WizardPage Мастер ... ConfigPackagePage WizardPage Мастер Name: Название: * Version: Версия: Category: Категория: Art Шкурки Core Ядро Lib Библиотека Plugin Плагин Type: Тип: Short description: Описание: Url: Страница: Author: Автор: License: Лицензия: Platform: Платформа: Package name: Имя пакета: QObject Package name is empty Не указано имя пакета Package type is empty Не указан тип пакета Invalid package version Не верная версия пакета Wrong platform Платформа пакета не соответствует вашей UnZip ZIP operation completed successfully. ZIP операция успешно завершена. Failed to initialize or load zlib library. Не удалась инициализация или загрузка библиотеки zlib. zlib library error. Ошибка библиотеки zlib. Unable to create or open file. Невозможно создать или открыть файл. Partially corrupted archive. Some files might be extracted. Архив частично поврежден. Некоторые файлы возможно извлечены. Corrupted archive. Поврежденный архив. Wrong password. Неверный пароль. No archive has been created yet. Не создано ни одного архива. File or directory does not exist. Файл или папка не существуют. File read error. Ошибка чтения файла. File write error. Ошибка записи файла. File seek error. Ошибка поиска файла. Unable to create a directory. Невозможно создать папку. Invalid device. Недействительное устройство. Invalid or incompatible zip archive. Недействительный или несовместимый zip-архив. Inconsistent headers. Archive might be corrupted. Неполные заголовки. Возможно, архив поврежден. Unknown error. Неизвестная ошибка. Zip ZIP operation completed successfully. ZIP операция успешно завершена. Failed to initialize or load zlib library. Не удалась инициализация или загрузка библиотеки zlib. zlib library error. Ошибка библиотеки zlib. Unable to create or open file. Невозможно создать или открыть файл. No archive has been created yet. Не создано ни одного архива. File or directory does not exist. Файл или папка не существуют. File read error. Ошибка чтения файла. File write error. Ошибка записи файла. File seek error. Ошибка поиска файла. Unknown error. Неизвестная ошибка. jVCard manager Plugman Менеджер плагинов Not yet implemented Пока не готово :'-( Apply Применить Ok Ок Actions Действия find Найти plugDownloader bytes/sec бит/сек kB/s кБ/с MB/s МБ/с Downloading: %1%, speed: %2 %3 Загрузка:%1%, скорость: %2 %3 Failed to download: %1 Скачивание не удалось: %1 Downloading: %p% Скачивание: %p% plugInstaller Unable to open archive Невозможно открыть архив Unable to extract archive Невозможно распаковать архив Unable to open archive: %1 Не могу открыть архив: %1 warning: trying to overwrite existing files! Предупреждение: попытка перезаписи сущестующих файлов! Unable to extract archive: %1 Невозможно распаковать архив: %1 Need restart! Требуется перезапуск! Unable to extract archive: %1 to %2 Не могу распаковать архив: %1 в %2 Installing: Установка: Install package from file Установить пакет из файла Archives (*.zip) Архивы (*.zip) Unable to update package %1: installed version is later Не могу установить пакет %1: тк установленная версия более новая Unable to install package: %1 Невозможно установить пакет: %1 Invalid package: %1 Плохой пакет: %1 Removing: Удаление: Unable to install package Невозможно установить пакет plugItemDelegate isUpgradable доступно обновление isInstallable доступна установка isDowngradable доступна загрузка installed установлено Unknown Неизвестно Install Установить Remove Удалить Upgrade Обновить plugMan Install package from file Установить пакет из файла Manage packages Управление пакетами plugManager Actions Действия Update packages list Install package from file Обновить список пакетов Upgrade all Обновить все Revert changes Отменить изменения plugPackageModel Packages Пакеты Actions Действия plugXMLHandler Unable to open file Не могу открыть файл Unable to set content Не могу получить содержимое Unable to write file Не могу записать файл Can't read database. Check your pesmissions. Не могу прочесть базу, проверьте права доступа. Broken package database Ошибка в Базе unable to open file не могу открыть файл unable to set content не могу получить содержимое plugmanSettings Form Packages Пакеты Settings Настройки Collision protect Защита от конфликтов Not yet implemented Пока это еще не работает group packages Группы пакетов <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mirror list</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Список зеркал</span></p></body></html> Add Добавить About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;"><b>PlugMan</b><br />Простой менеждер расширений и дополнений qutIM</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Сидоров Алексей</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Контакт: </span><a href="mailto:sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">© 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;">Менеджер плагинов, пакетов со скинами, языками итп...</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Контакты: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009©</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Simple qutIM plugin manager</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Простой менеджер пакетов для qutIM</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Алексей Сидоров</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Контакты: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Simple qutIM plugin manager</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans';">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2008-2009</p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Простой менеджер плагинов для qutIM</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Автор: </span><span style=" font-family:'Bitstream Vera Sans';">Сидоров Алексей</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Контакты: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2008-2009</p></body></html> Name Имя Description Описание Url Страница qutim-0.2.0/languages/ru/sources/growlnotification.ts0000644000175000017500000001645411231555211024512 0ustar euroelessareuroelessar GrowlNotificationLayer QutIM message Growl Select sound file Выберите звуковой файл All files (*.*) Все файлы (*.*) GrowlSettings Form Pop-ups Уведомления Enabled Включить уведомления Notify about status changes Уведомлять о смене статуса Notify when user came offline Уведомлять о выходе из сети Notify when user came online Уведомлять о входе в сеть Notify when contact is typing Уведомлять о набираемом сообщении Notify when message is recieved Уведомлять о принятом сообщении Notify about birthdays Уведомлять о днях рождения Notify when message is blocked Уведомлять о блокированных сообщениях Notify about custom requests Уведомлять о запросах статуса Sounds Звуки ... System Event Системные события Incoming message Входящее сообщение Contact online Контакт в сети Contact offline Контакт вышел Status change Статус изменился Birthay День рождения reset Сбросить Startup Запуск qutIM Outgoing message Исходящее сообщение QObject %1 Typing Печатает Blocked message : %1 Заблокировано сообщение : %1 has birthday today!! сегодня День Рождения!! qutim-0.2.0/languages/ru/sources/nowplaying.ts0000644000175000017500000001340411225627111023132 0ustar euroelessareuroelessar jVCard nowplayingSettingsClass Settings Настройки General Главное On Включено Not change Не менять With this status: Работать только при статусе: X-Status title: Заголовок X-статуса: %artist% for the artist %title% for the name of song %album% for the album %artist% - артист%title% - название песни%album% - альбом ICQ ICQ Jabber Jabber About О плагине Change to: Изменить на: Forever Работать постоянно Change tune Работать с jabber Status message: Сообщение статуса: Convert tags from windows-1251 to utf8 Конвертировать тэги из win-1251 в utf8 <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/logo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Now playing qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> qutim-0.2.0/languages/ru/sources/massmessaging.ts0000644000175000017500000002263311245361741023616 0ustar euroelessareuroelessar Dialog Multiply Sending Спамилка Items Message Сообщение 15 Interval (in seconds): Интервал отправки (в секундах): <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Notes:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">You can use the templates:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Name of the recipient </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Name of the sender (profile name)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Current time</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Примечания:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Вы можете использовать шаблоны::</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Имя получалеля </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Имя отправителя (из профиля)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Текущее время</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TextLabel</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TextLabel</span></p></body></html> Actions Действия Stop слава богу! Остановить Send Спамить Manager Accounts Учетные записи Unknown Неизвестно Error: message is empty Ошибка: сообщение пусто Error: unknown account : %1 Ошибка: неизвестная учетная запись: %1 Messaging Multiply Sending Спамилка MessagingDialog Actions Действия Load buddy list Загрузить список Save buddy list Сохранить список Multiply sending: all jobs finished Спамилка: все сообщения разосланы Load custom buddy list Загрузить особый список Sending message to %1: %v/%m Отправка сообщения: %1: %v/%m Sending message to %1 Отправка ообщения к %1 Sending message to %1 (%2/%3), time remains: %4 Отправка сообщения %1 (%2/%3), времени осталось: %4 qutim-0.2.0/languages/ru/sources/protocolicon.ts0000644000175000017500000000152011225627111023451 0ustar euroelessareuroelessar PluginSettings Select protocol icon theme pack: Выберите тему протокольных иконок: <Default> <Стандартная> Change account icon Изменить иконку аккаунта Change contact icon Изменить иконку контакта jVCard qutim-0.2.0/languages/ru/sources/msn.ts0000644000175000017500000001204511251652706021547 0ustar euroelessareuroelessar EdditAccount Editing %1 Изменить %1 Form General Общее Password: Пароль: Autoconnect on start Подключаться при старте Statuses Статусы Online В сети Busy Занят Idle Бездействие Will be right back Вернусь Away Отошел On the phone На телефоне Out to lunch Обедаю Don't show autoreply dialog Не показывать запрос автоответа Network Сеть OK Ок Apply Применить Cancel Отмена LoginForm Form E-mail: E-mail: Password: Пароль: Autoconnect on start Подключаться при старте MSNConnStatusBox Online В сети Busy Занят Idle Бездействие Will be right back Вернусь Away Отошел On the phone На телефоне Out to lunch Обедаю Invisible Невидимый Offline Отключен MSNContactList Without group Без групп qutim-0.2.0/languages/ru/sources/chess.ts0000644000175000017500000001367611225627111022063 0ustar euroelessareuroelessar Drawer Error moving ???Неверный ход??? You cannot move this figure because the king is in check ???ы не можете переместить фигуру, тк король под ударом??? To castle ???В замок??? Yes Да No Нет Do you want to castle? FigureDialog What figure should I set? GameBoard End the game Конец игры Want you to end the game? You will lose it Закончить игру? Вам будет засчитан проигрыш Error! Ошибка! Yes, save Да, сохранить No, don't save Нет, не сохранять Game over Гаме овер QutIM chess plugin Игра шахматы (плагин qutIM) Your opponent has closed the game Ваш противник прекратил игру White game with Black game with Your turn. White game from Black game from Opponent turn. B K C Q Save image Do you want to save the image? You scored the game You have a mate. You lost the game. You have a stalemate chessPlugin Play chess Игра шахматы invites you to play chess. Accept? пригласил к игре в шахматы. Принять? QutIM chess plugin Игра шахматы (плагин qutIM) , with reason: " , потому что: " don't accept your invite to play chess Отклонил приглашение к игре gameboard QutIM chess plugin Игра шахматы (плагин qutIM) Your moves: Ваши ходы: Opponent moves: Ходы противника: Game chat Игровой чат jVCard qutim-0.2.0/languages/ru/sources/fmtune.ts0000644000175000017500000004464511267600246022262 0ustar euroelessareuroelessar EditStations Format Формат URL Delete station? Удалить станцию? Delete stream? Удалить поток? Export... Экспорт... FMtune XML (*.ftx) Name: Имя: Genre: Жанр: Language: Язык: URL: Format: Формат: Image: Картинка: Save Сохранить Delete stream Удалить поток Add stream Добавить поток Down Вниз Up Вверх Add station Добавит станцию Delete station Удалить станцию Import Импорт Export Экспорт <new> <нов.> Edit stations Изменить станции Stream URL: URL на поток: Equalizer Equalizer Темброблок FastAddStation stream поток Fast add station Быстро добавить станцию Name: Имя: Stream URL: Ссылка на поток: ImportExport Fast find: Быстро найти: Finish Завершить Info Stream: Поток: Radio: Радио: Song: Песня: Time: Время: Bitrate: Битрейт: Cover: Обложка: Information Информация QMessageBox An incorrect version of BASS was loaded. Не верная версия Bass библиотеки. Can't initialize device Не могу инициализировать устройство воспроизведения Recording Stop Остановить Pause Пауза Record Запись Recording Записываю Volume Mute заглушить звук Volume Громкость fmtunePlugin Radio on Включить Radio off Выключить Information Инфо Equalizer Эквалайзер Recording Запись Volume Громкость %1% Mute заглушить звук Edit stations Список станций Copy song name Комировать имя песни Fast add station Быстро добавить станцию fmtuneSettings <default> <Система> fmtuneSettingsClass Settings Настройки General Главные Shortcuts Горячие клавиши Turn on/off radio: Включение/выключение радио: Volume up: Увеличение громкости: Volume down: Уменьшение громкости: Volume mute: Выключение громкости: Activate global keyboard shortcuts Включить глобальные сочетания клавиш About О программе <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Плагин FMtune</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">© 2009</span></p></body></html> Output device: Устройство воспроизведения: Devices Устройства Plugins Плагины qutim-0.2.0/languages/ru/sources/yandexnarod.ts0000644000175000017500000003121511225627111023257 0ustar euroelessareuroelessar jVCard requestAuthDialogClass Authorization Авторизация Login: Логин: Password: Пароль: Captcha: Капча: about:blank uploadDialog Uploading Загрузка на север Done Готово uploadDialogClass Uploading... Выгрузка... Upload started. Выгрузка запущена. File: Файл: Speed: Скорость: Cancel Отмена Progress: Прогресс: Elapsed time: Осталось: yandexnarodManage Yandex.Narod file manager Управление файлами Yandex.Narod Choose file Выберите файл yandexnarodManageClass Form Окно чата New Item Новый Get Filelist Получить список Upload File Загрузить файл Actions: Действия: Clipboard Буфер обмена Delete File Удалить файл Close Закрыть Files list: Список файлов: line1 line2 yandexnarodNetMan Authorizing... Авторизация... Canceled Отменено Downloading filelist... Загрузка списка файлов... Deleting files... Удаление файлов... Getting storage... Получение хранилища... File size is null Файл нулегого размера Starting upload... Начало загрузки... Verifying... Проверка... Authorizing OK Авторизация успешна Authorization captcha request Авторизация просит ввода Капчи Authorizing failed ПРОВАЛЕНА Авторизация Filelist downloaded (%1 files) Список файлов получен (%1 файл(ов) ) File(s) deleted Файл(ы) удалены Uploaded successfully Загрузка завершена Verifying failed Ошибка проверки Authorization failed ПРОВАЛЕНА Авторизация yandexnarodPlugin Send file via Yandex.Narod Отправить файл в Яндекс.Народ Choose file Выберите файл Manage Yandex.Narod files Управление Yandex.Narod File sent Файл отправлен yandexnarodSettingsClass Settings Настройки Password Пароль Login Логин Test Authorization Тест авторизации status статус Send file template Послать шаблон файла %N - file name; %U - file URL; %S - file size %N - Имя файла; %U - ссылка; %S - размер About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">File exchange via </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"> service</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/ru/sources/libnotify.ts0000644000175000017500000000534311260607211022743 0ustar euroelessareuroelessar LibnotifyLayer System message Системное сообщение %1 Blocked message from %1 Блокированное сообщение от %1 has birthday today! празднует день рождений!! QObject System message from %1: Системное сообщение от %1: Message from %1: %2 Сообщение от %1: %2 %1 is typing %1 печатает Blocked message from %1: %2 Блокированное сообщение от %1: %2 %1 has birthday today!! %1 празднует день рождений!! UbuntuNotificationLayer System message from %1: Системное сообщение от %1: Message from %1 Сообщение от %1 %1 is typing %1 печатает Blocked message from %1 Блокированное сообщение от %1 has birthday today!! празднует день рождений!! qutIM is started qutIM запущен qutim-0.2.0/languages/ru/sources/connectioncheck.ts0000644000175000017500000006760411230564045024115 0ustar euroelessareuroelessar connectioncheckSettings Settings Настройки Check period (sec.): Периодичность проверки (сек.): Plugin status: Состояние плагина: Enabled Включен Disabled Отключен Check method: Метод: Route table Таблица маршрутов сети Ping Пинг About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Плагин qutIM - Проверка соединения</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Игорь 'Sqee' Сыромятников</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Плагин qutIM - Проверка соединения</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Игорь 'Sqee' Сыромятников</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Плагин qutIM - Проверка соединения</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Игорь 'Sqee' Сыромятников</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> Example: www.exgraphics.info Например: www.exgraphics.info URL2Ping: Что пинговать: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Serif'; font-size:11pt;"> </span><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7.1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" font-family:'Liberation Serif'; font-size:11pt; text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URL2Ping added by: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Evgeniy 'Dexif' Spitsyn</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">www.ExGraphics.info</p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Serif'; font-size:11pt;"> </span><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7.1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;">Плагин проверки наличия соединения с интернетом</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Игорь 'Sqee' Сыромятников</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" font-family:'Liberation Serif'; font-size:11pt; text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URL2Ping добавил: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Евгений 'Dexif' Спицын</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">www.ExGraphics.info</p></body></html> jVCard qutim-0.2.0/languages/ru/sources/icq.ts0000644000175000017500000055121011263623402021522 0ustar euroelessareuroelessar AccountEditDialog Editing %1 Редактирование %1 AddAccountFormClass AddAccountForm Добавление учетных записей UIN: Password: Пароль: Save password Сохранить пароль ContactSettingsClass ContactSettings Контакты Show contact xStatus icon Показывать х-статус контакта Show birthday/happy icon Показывать значок радостный/День Рождения Show not authorized icon Показывать значок авторизации Show "visible" icon if contact in visible list Показывать значок "видимости", если контакт в списке видимости Show "invisible" icon if contact in invisible list Показывать значок "невидимости", если контакт в списке невидимости Show "ignore" icon if contact in ignore list Показывать значок "игнорирования", если контакт в списке игнорирования Show contact's xStatus text in contact list Показывать текст х-статуса в списке контактов FileTransfer Send file Отправить файл QObject Open File Открыть файл All files (*) Все файлы (*) ICQ General ICQ главные Statuses Статусы Contacts Контакты <font size='2'><b>External ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Внешний IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Internal ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Внутренний IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Online time:</b> %1d %2h %3m %4s<br> <font size='2'><b>Время в сети:</b> %1d %2h %3m %4s<br> <b>Signed on:</b> %1<br> <b>Онлайн:</b> %1<br> <font size='2'><b>Away since:</b> %1<br> <font size='2'><b>Отошел с:</b> %1<br> <font size='2'><b>N/A since:</b> %1<br> <font size='2'><b>Недоступен с:</b> %1<br> <b>Reg. date:</b> %1<br> <b>Дата регистрации:</b> %1<br> <b>Possible client:</b> %1</font> <b>Возможный клиент:</b> %1</font> <font size='2'><b>Last Online:</b> %1</font> <font size='2'><b>Последний раз был в сети:</b> %1</font> <b>External ip:</b> %1.%2.%3.%4<br> <b>Внешний IP:</b> %1.%2.%3.%4<br> <b>Internal ip:</b> %1.%2.%3.%4<br> <b>Внутренний IP:</b> %1.%2.%3.%4<br> <b>Online time:</b> %1d %2h %3m %4s<br> <b>Время в сети:</b> %1d %2h %3m %4s<br> <b>Away since:</b> %1<br> <b>Отошел с:</b> %1<br> <b>N/A since:</b> %1<br> <b>Недоступен с:</b> %1<br> <b>Possible client:</b> %1<br> <b>Возможный клиент:</b> %1<br> acceptAuthDialogClass acceptAuthDialog Авторизация Authorize Авторизовать Decline Отклонить accountEdit Form OK Ок Apply Применить Cancel Отмена Icq settings Настройки ICQ Password: Пароль: Save password Сохранить пароль AOL expert settings Точные настройки AOL для специалистов Client id: Client major version: Client minor version: Client lesser version: Client build number: Client id number: Client distribution number: Seq first id: Autoconnect on start Автоматически подключаться при старте Save my status on exit Сохранять статус при выходе Server Сервер Host: Хост: Port: Порт: login.icq.com login.icq.com Save password: Сохранить пароль: Keep connection alive Поддерживать соединение Secure login Безопасный вход Proxy connection Соединение через прокси Listen port for file transfer: Порт для передачи файлов: Proxy Прокси Type: Тип: None Нет HTTP HTTP SOCKS 5 SOCKS5 Authentication Аутентификация User name: Имя пользователя: addBuddyDialog Move Переместить Add %1 Добавить %1 addBuddyDialogClass addBuddyDialog Добавить контакт Local name: Локальное имя: Group: Группа: Add Добавить addRenameDialogClass addRenameDialog Переименовать Name: Имя: OK Ок Return Вернуться closeConnection Invalid nick or password Недействительный ник или пароль Service temporarily unavailable Сервис временно недоступен Incorrect nick or password Некорректный ник или пароль Mismatch nick or password Несовпадение ника или пароля Internal client error (bad input to authorizer) Внутренняя ошибка клиента (неправильный ввод авторизации) Invalid account Недействительная учетная запись Deleted account Удалённая учетная запись Expired account Просроченная учетная запись No access to database Нет доступа к базе данных No access to resolver Нет доступа к DNS Invalid database fields Недействительные поля в базе данных Bad database status Плохой статус базы данных Bad resolver status Плохой статус DNS Internal error Внутренняя ошибка Service temporarily offline Сервис временно отключен Suspended account Замороженная учетная запись DB send error Ошибка запроса базы данных DB link error Ошибка связи с базой данных Reservation map error Reservation link error The users num connected from this IP has reached the maximum Количество пользователей с данного IP адреса достигло максимума The users num connected from this IP has reached the maximum (reservation) Количество пользователей с данного IP адреса достигло максимума Rate limit exceeded (reservation). Please try to reconnect in a few minutes Лимит частоты подключений достигнут. Пожалуйста, попробуйте заново через несколько минут User too heavily warned Reservation timeout Превышено время подключения You are using an older version of ICQ. Upgrade required Вы используете старую версию ICQ. Необходимо обновление You are using an older version of ICQ. Upgrade recommended Вы используете старую версию ICQ. Рекомендуется обновление Rate limit exceeded. Please try to reconnect in a few minutes Лимит частоты подключений достигнут. Пожалуйста, попробуйте заново через несколько минут Can't register on the ICQ network. Reconnect in a few minutes Невозможно зарегистрироваться в ICQ. Пожалуйста попробуйте заново через несколько минут Invalid SecurID Недействительный SecurID Account suspended because of your age (age < 13) Учетная запись заморожена из-за вашего возраста (возраст < 13) Connection Error Ошибка соединения Another client is loggin with this uin Другой клиент с этим номером зашёл в сеть contactListTree is online в сети is away отошел is dnd не беспокоить is n/a недоступен is occupied занят is free for chat готов поболтать is invisible невидимый is offline отключен at home дома at work на работе having lunch ест is evil злой in depression в депрессии %1 is reading your away message %1 читает ваше сообщение об отсутствии %1 is reading your x-status message %1 читает ваше х-статус сообщение Password is successfully changed Пароль успешно изменен Password is not changed Пароль не изменен Add/find users Найти/добавить пользователей Send multiple Групповая отправка Privacy lists Списки приватности View/change my details Посмотреть/изменить мои данные Change my password Изменить мой пароль You were added Вас добавили New group Новая группа Rename group Переименовать группу Delete group Удалить группу Send message Отправить сообщение Contact details Детали контакта Copy UIN to clipboard Скопировать UIN в буфер Contact status check Проверить статус контакта Message history История сообщения Read away message Прочитать сообщение об отсутствии Rename contact Переименовать контакт Delete contact Удалить контакт Move to group Переместить в группу Add to visible list Добавить в список видимости Add to invisible list Добавить в список невидимости Add to ignore list Добавить в список игнорирования Delete from visible list Удалить из списка видимости Delete from invisible list Удалить из списка невидимости Delete from ignore list Удалить из списка игнорирования Authorization request Запрос авторизации Add to contact list Добавить в список контактов Allow contact to add me Разрешить контакту добавить меня Remove myself from contact's list Удалить себя из его списка контактов Read custom status Прочитать статус Edit note Редактировать заметку Create group Создать группу Delete group "%1"? Удалить группу "%1"? %1 away message Сообщение об отсутствии %1 Delete %1 Удалить %1 Move %1 to: Переместить %1 в: Accept authorization from %1 Принять авторизацию от %1 Authorization accepted Авторизация принята Authorization declined Авторизация отклонена %1 xStatus message %1 х-статус Contact does not support file transfer Контакт не поддерживает передачу файлов customStatusDialog Angry Злой Taking a bath Принимаю душ/ванну Tired Устал Party Вечеринка Drinking beer Пью пиво Thinking Думаю Eating Ем Watching TV Смотрю ТВ Meeting Встреча Coffee Кофе Listening to music Слушаю музыку Business Дела Shooting Кино Having fun Развлекаюсь On the phone На телефоне Gaming Играю Studying Учусь Shopping Покупки Feeling sick Приболел Sleeping Сплю Surfing Отрываюсь Browsing В интернете Working Работаю Typing Печатаю Picnic Пикник On WC В туалете To be or not to be Быть или не быть PRO 7 Про7 Love Любовь Sex Секс Smoking Курю Cold Замерз Crying Плачу Fear Испуган Reading Читаю Sport Спорт In tansport В транспорте ? ? customStatusDialogClass Custom status х-статус Choose Выбрать Cancel Отмена Set birthday/happy flag Шарик радостный/День Рождения deleteContactDialogClass deleteContactDialog Удалить контакт Contact will be deleted. Are you sure? Контакт будет удален. Вы уверены? Delete contact history Удалить историю контакта Yes Да No Нет fileRequestWindow Save File Сохранить файл All files (*) Все файлы (*) fileRequestWindowClass File request Передача файла From: От: IP: File name: Имя файла: File size: Размер файла: Accept Принять Decline Отклонить fileTransferWindow File transfer: %1 Передача файла: %1 Waiting... Ожидание... Declined by remote user Отклонено удаленным пользователем Accepted Принято Sending... Отправка... Done Готово Getting... Прием... /s B б KB Кб MB Мб GB Гб fileTransferWindowClass File transfer Передача файла Current file: Текущий файл: Done: Готово: Speed: Скорость: File size: Размер файла: Files: Файлы: 1/1 Last time: Времени прошло: Remained time: Времени осталось: Sender's IP: IP отправителя: Status: Статус: Open Открыть Cancel Отмена icqAccount Online В сети Offline Отключен Free for chat Готов поболтать Away Отошел NA Недоступен Occupied Занят DND Не беспокоить Invisible Невидимый Lunch Ем Evil Злой Depression Депрессия At Home Дома At Work На работе Custom status Расширенный статус Privacy status Приватный статус Visible for all Видимый для всех Visible only for visible list Видимый только для списка видимости Invisible only for invisible list Невидимый только для списка невидимости Visible only for contact list Видимый только для списка контактов Invisible for all Невидимый для всех Additional Дополнительно is reading your away message читает ваше сообщение об отсутствии is reading your x-status message читает ваше х-статус сообщение icqSettingsClass icqSettings ICQ Main Основные Reconnect after disconnect Autoconnect on start Автоматически подключаться при запуске Save my status on exit Сохранять статус при выходе Don't send requests for avatarts Не посылать запросы на аватары Client ID: Идентификатор клиента: qutIM ICQ 6 ICQ 5.1 ICQ 5 ICQ Lite 4 ICQ 2003b Pro ICQ 2002/2003a Mac ICQ QIP 2005 QIP Infium - Protocol version: Версия протокола: Client capability list: Список возможностей клиента: Advanced Дополнительно Account button and tray icon Значок учетной записи в трее Show main status icon Показывать значок статуса Show custom status icon Показывать значок расширенного статуса Show last choosen Показывать последнее выбранное Codepage( note that online messages use utf-8 in most cases ): Кодировка: Apple Roman Big5 Big5-HKSCS EUC-JP EUC-KR GB18030-0 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 ISO 8859-16 Iscii-Bng Iscii-Dev Iscii-Gjr Iscii-Knd Iscii-Mlm Iscii-Ori Iscii-Pnj Iscii-Tlg Iscii-Tml JIS X 0201 JIS X 0208 KOI8-R KOI8-U MuleLao-1 ROMAN8 Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 WINSAMI2 Codepage: (note that online messages use utf-8 in most cases) Кодировка: (для сообщений в сети обычно используется UTF8) jVCard multipleSending Send multiple Групповая отправка multipleSendingClass multipleSending Групповая отправка 1 1 Send Отправить Stop Стоп networkSettingsClass networkSettings Сеть Connection Соединение Server Сервер Host: Хост: Port: Порт: login.icq.com login.icq.com Keep connection alive Поддерживать соединение Secure login Безопасный вход Proxy connection Соединение через прокси Listen port for file transfer: Порт для передачи файлов: Proxy Прокси Type: Тип: None Нет HTTP HTTP SOCKS 5 SOCKS5 Authentication Аутентификация User name: Имя пользователя: Password: Пароль: noteWidgetClass noteWidget OK Ок Cancel Отмена oscarProtocol The connection was refused by the peer (or timed out). Соединение отклонено (или превышено время ожидания). The remote host closed the connection. Удаленный хост закрыл соединение. The host address was not found. Удаленный адрес не найден. The socket operation failed because the application lacked the required privileges. Ошибка! Для работы с сокетом требуются повышенные привелегии. The local system ran out of resources (e.g., too many sockets). Не достаточно ресурсов системы (напр. открыто много сокетов). The socket operation timed out. Превышено время ожидания при работе с сокетом. An error occurred with the network (e.g., the network cable was accidentally plugged out). Ошибка работы с сетью (напр. отключен кабель). The requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). Требуемая операция с сокетом не поддерживается операционой системой (наgр. IPv6). The socket is using a proxy, and the proxy requires authentication. Используемый прокси требует аутентификации. An unidentified network error occurred. Ой! Неизвестная ошибка сети. passwordChangeDialog Password error Ошибка пароля Current password is invalid Текущий пароль недействителен Confirm password does not match Пароль и подтверждение не совпадают passwordChangeDialogClass Change password Изменить пароль Current password: Текущий пароль: New password: Новый пароль: Retype new password: Подтверждение нового пароля: Change Изменить passwordDialog Enter %1 password Введите %1 пароль passwordDialogClass Enter your password Введите ваш пароль Your password: Ваш пароль: Save password Сохранить пароль OK Ок privacyListWindow Privacy lists Списки приватности privacyListWindowClass privacyListWindow Списки приватности Visible list Список невидимости UIN UIN Nick name Ник I Инфо D Удалить Invisible list Список невидимости Ignore list Список игнорирования readAwayDialogClass readAwayDialog <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> Close Закрыть Return Вернуться requestAuthDialogClass Authorization request Запрос авторизации Send Отправить searchUser Add/find users Найти/добавить пользователей Searching Поиск Nothing found Ничего не найдено Done Готово Always Всегда Authorize Авторизовать Add to contact list Добавить в список контактов Contact details Детали контакта Send message Отправить сообщение Contact status check Проверить статус контакта searchUserClass searchUser Поиск пользователей Search by: Искать по: UIN UIN (номер ICQ) Email Электронная почта Other Другое Nick name: Ник: First name: Имя: Last name: Фамилия: Online only Только "В сети" More >> Больше >> Advanced Дополнительно Gender: Пол: Female Женский Male Мужской Age: Возраст: 13-17 18-22 23-29 30-39 40-49 50-59 60+ Country: Страна: Afghanistan Афганистан Albania Албания Algeria American Samoa Andorra Андорра Angola Ангола Anguilla Antigua Antigua & Barbuda Antilles Argentina Аргентина Armenia Армения Aruba AscensionIsland Australia Австралия Austria Австрия Azerbaijan Азербайджан Bahamas Багамы Bahrain Бахрейн Bangladesh Бангладеж Barbados Barbuda Belarus Белоруссия Belgium Бельгия Belize Benin Bermuda Bhutan Бутан Bolivia Боливия Botswana Brazil Бразилия Brunei Бруней Bulgaria Болгария Burkina Faso Burundi Cambodia Cameroon Камерун Canada Канада Canary Islands Cayman Islands Каймановы острова Chad Чад Chile, Rep. of Республика Чили China Китай Christmas Island Colombia Колумбия Comoros CookIslands Costa Rica Коста-Рика Croatia Cuba Куба Cyprus Czech Rep. Чешская Республика Denmark Дания Diego Garcia Djibouti Dominica Dominican Rep. Доминиканская Респ. Ecuador Эквадор Egypt Египет El Salvador Eritrea Estonia Эстония Ethiopia Эфиопия Faeroe Islands Falkland Islands Fiji Фиджи Finland Финляндия France Франция FrenchAntilles French Guiana French Polynesia Gabon Gambia Georgia Грузия Germany Германия Ghana Гана Gibraltar Гибралтар Greece Греция Greenland Гренландия Grenada Guadeloupe Guatemala Guinea Guinea-Bissau Guyana Haiti Honduras Hong Kong Гон-Конг Hungary Венгрия Iceland Исландия India Индия Indonesia Индонезия Iraq Ирак Ireland Ирландия Israel Израиль Italy Италия Jamaica Ямайка Japan Япония Jordan Иордания Kazakhstan Казахстан Kenya Кения Kiribati Korea, North Северная Корея Korea, South Южная Корея Kuwait Кувейт Kyrgyzstan Кыргызстан Laos Лаос Latvia Латвия Lebanon Lesotho Liberia Liechtenstein Lithuania Luxembourg Люксембург Macau Madagascar Мадагаскар Malawi Malaysia Малайзия Maldives Мальдивы Mali Malta Мальта Marshall Islands Martinique Mauritania Mauritius MayotteIsland Mexico Мексика Moldova, Rep. of Республика Молдова Monaco Монако Mongolia Монголия Montserrat Morocco Марокко Mozambique Myanmar Namibia Намибия Nauru Nepal Непал Netherlands Нидерланды Nevis NewCaledonia New Zealand Новая Зеландия Nicaragua Никарагуа Niger Нигерия Nigeria Niue Norfolk Island Остров Норфолк Norway Норвегия Oman Pakistan Пакистан Palau Panama Панама Papua New Guinea Папуа-Новая Гвинея Paraguay Парагвай Peru Перу Philippines Филиппины Poland Польша Portugal Португалия Puerto Rico Пуэрто-Рико Qatar Катар Reunion Island Romania Румыния Rota Island Russia Россия Rwanda Saint Lucia Saipan Island San Marino Saudi Arabia Scotland Шотландия Senegal Seychelles Sierra Leone Singapore Сингапур Slovakia Словакия Slovenia Словения Solomon Islands Somalia SouthAfrica ЮАР Spain Испания Sri Lanka Шри-Ланка St. Helena St. Kitts Sudan Судан Suriname Swaziland Sweden Швеция Switzerland Швейцария Syrian ArabRep. Taiwan Тайвань Tajikistan Таджикистан Tanzania Thailand Таиланд Tinian Island Togo Tokelau Tonga Tunisia Turkey Турция Turkmenistan Туркменистан Tuvalu Uganda Ukraine Украина United Kingdom Великобритания Uruguay Уругвай USA США Uzbekistan Узбекистан Vanuatu Vatican City Ватикан Venezuela Венесуэла Vietnam Вьетнам Wales Western Samoa Yemen Йемен Yugoslavia Югославия Yugoslavia - Montenegro Югославия - Черногория Yugoslavia - Serbia Югославия - Сербия Zambia Zimbabwe Зимбабве City: Город: Interests: Интересы: Art Искусство Cars Автомобили Celebrity Fans Collections Коллекционирование Computers Компьютеры Culture & Literature Культура и литература Fitness Фитнес Games Игры Hobbies Хобби ICQ - Providing Help Internet Интернет Lifestyle Стиль жизни Movies/TV Фильмы/ТВ Music Музыка Outdoor Activities Parenting Pets/Animals Religion Science/Technology Skills Sports Web Design Nature and Environment News & Media Government Business & Economy Mystics Travel Astronomy Space Clothing Parties Women Social science 60's 70's 80's 50's Finance and corporate Entertainment Consumer electronics Retail stores Health and beauty Media Household products Mail order catalog Business services Audio and visual Sporting and athletic Publishing Home automation Language: Язык: Arabic Bhojpuri Bulgarian Burmese Cantonese Catalan Chinese Croatian Czech Danish Dutch English Esperanto Estonian Farsi Finnish French Gaelic German Greek Hebrew Hindi Hungarian Icelandic Indonesian Italian Japanese Khmer Korean Lao Latvian Lithuanian Malay Norwegian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Somali Spanish Swahili Swedish Tagalog Tatar Thai Turkish Ukrainian Urdu Vietnamese Yiddish Yoruba Afrikaans Persian Albanian Armenian Kyrgyz Maltese Occupation: Род занятий: Academic Administrative Art/Entertainment College Student Community & Social Education Engineering Financial Services High School Student Home Дом Law Managerial Manufacturing Medical/Health Military Non-Goverment Organisation Professional Retail Retired Science & Research Technical University student Web building Other services Keywords: Ключевые слова: Marital status: Супружеский статус: Divorced Engaged Long term relationship Married Open relationship Separated Single Widowed Do not clear previous results Не очищать предудущие результаты Clear Очистить Search Поиск Return Вернуться Account Учетная запись Nick name Ник First name Имя Last name Фамилия Gender/Age Пол/Возраст Authorize Авторизация snacChannel Invalid nick or password Недействительный ник или пароль Service temporarily unavailable Сервис временно недоступен Incorrect nick or password Некорректный ник или пароль Mismatch nick or password Несовпадение ника или пароля Internal client error (bad input to authorizer) Внутренняя ошибка клиента Invalid account Недействительная учетная запись Deleted account Удаленная учетная запись Expired account Устаревшая учетная запись No access to database Нет доступа к базе данных No access to resolver Нет доступа к DNS Invalid database fields Недействительные поля базы данных Bad database status Плохой статус базы данных Bad resolver status Плохой статус DNS Internal error Внутренняя ошибка Service temporarily offline Сервис временно отключен Suspended account Замороженная учетная запись DB send error Ошибка посыла в базу данных DB link error Ошибка связи с базой данных Reservation map error The users num connected from this IP has reached the maximum Количество пользователей, подключенных с данного IP достигло максимума The users num connected from this IP has reached the maximum (reservation) Количество пользователей, подключенных с данного IP достигло максимума (reservation) Rate limit exceeded (reservation). Please try to reconnect in a few minutes User too heavily warned Reservation timeout You are using an older version of ICQ. Upgrade required Вы используете старую версию ICQ. Необходимо обновление You are using an older version of ICQ. Upgrade recommended Вы используете старую версию ICQ. Рекомендуется обновление Rate limit exceeded. Please try to reconnect in a few minutes Can't register on the ICQ network. Reconnect in a few minutes Не могу зарегистрироваться в сети ICQ. Попробуйте подключиться через несколько минут Invalid SecurID Недействительный SecurID Account suspended because of your age (age < 13) Учетная запись заморожена, из-за возраста (< 13 лет) Connection Error: %1 Ошибка соединения: %1 statusSettingsClass statusSettings Настройки статуса Allow other to view my status from the Web Позволять другим видеть мой статус через Web Add additional statuses to status menu Добавить расширенные статусы в статусное меню Ask for xStauses automatically Запрашивать х-статусы автоматически Notify about reading your status Уведомлять о чтении статуса Away Отошел Lunch Ем Evil Злой Depression Депрессия At home Дома At work На работе N/A Недоступен Occupied Занят DND Не беспокоить Don't show autoreply dialog Не показывать диалог автоовета userInformation %1 contact information %1 информация о контакте <img src='%1' height='%2' width='%3'> <img src='%1' height='%2' width='%3'> <b>Nick name:</b> %1 <br> <b>Ник:</b> %1 <br> <b>First name:</b> %1 <br> <b>Имя:</b> %1 <br> <b>Last name:</b> %1 <br> <b>Фамилия:</b> %1 <br> <b>Home:</b> %1 %2<br> <b>Дом:</b> %1 %2<br> <b>Gender:</b> %1 <br> <b>Пол:</b> %1 <br> <b>Age:</b> %1 <br> <b>Возраст:</b> %1 <br> <b>Birth date:</b> %1 <br> <b>Дата рождения:</b> %1 <br> <b>Spoken languages:</b> %1 %2 %3<br> <b>Знание языков:</b> %1 %2 %3<br> Open File Открыть файл Images (*.gif *.bmp *.jpg *.jpeg *.png) Изображения (*.gif *.bmp *.jpg *.jpeg *.png) Open error Ошибка при открытии Image size is too big Размер изображения слишком велик <b>Protocol version: </b>%1<br> <b>Версия протокола: </b>%1<br> <b>[Capabilities]</b><br> <b>[Возможности]</b><br> <b>[Short capabilities]</b><br> <b>[Короткие возможности]</b><br> <b>[Direct connection extra info]</b><br> <b>[Дополнительная информация о прямых соединениях]</b><br> userInformationClass userInformation Информация о пользователе Name Имя Nick name: Ник: Last login: Последний раз был онлайн: First name: Имя: Last name: Фамилия: Account info: Информация об учетной записи: UIN: Registration: Регистрация: Email: Электронная почта: Don't publish for all Не публиковать всем Home address: Домашний адрес: Country Страна City: Город: State: Область: Zip: Индекс: Phone: Телефон: Fax: Факс: Cellular: Мобильный: Street address: Улица: Originally from: Уроженец: Country: Страна: Work address Работа Street: Улица: Company Компания Company name: Название компании: Occupation: Род занятий: Div/dept: Подазделение/отдел: Position: Местоположение: Web site: Web-страница: Account info Информация об учетной записи Originally from Уроженец Home address Домашний адрес Personal Персональное Marital status: Супружеский статус: Gender: Пол: Female Женский Male Мужской Home page: Домашняя страница: Age: Возраст: Birth date Дата рождения Spoken language: Знание языков: Interests Интересы <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Authorization/webaware Авторизация/webaware My authorization is required Требуется моя авторизация All uses can add me without authorization Все пользователи могут добавлять меня без авторизации Allow others to view my status in search and from the web Позволять другим видеть мой статус при поиске и через Web Save Сохранить Close Закрыть Summary Краткая сводка General Главные Home Дом Work Работа About О пользователе Additinonal Дополнительно Request details Запросить детали qutim-0.2.0/languages/ru/sources/qutimcoder_ru.ts0000644000175000017500000003600111225627111023623 0ustar euroelessareuroelessar HelpUI Help Справка qrc:/htmls/help/help.html About О плагине <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Plugin, that lets you to organize encrypted chats with any </p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">contact from your contact list.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Encryption algorithms developer:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maksim 'Loz' Velesiuk</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Plugin developer:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(с) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Плагин для организации зашифрованных чатов.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Реализация алгоритмов шифрования:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Максим 'LoZ' Велесюк</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Разработка плагина:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ян 'NayZaK' Казлаускас</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(с) 2009</span></p></body></html> ОК QutimCoder Begin encrypted chat Начать зашифрованный чат Close encrypted chat Завершить зашифрованный чат Make this encrypted chat permanent Поддерживать шифрование Make this encrypted chat regular Не поддерживать шифрования Encryption Шифрование Qutim Coder Qutim Coder Plugin, that lets you to organize encrypted chat sessions with any contact from your contact list. Плагин для организации зашифрованных чатов. Enqrypted chat with Зашифрованный чат с has already begun уже начат have not been started yet не начат You already have permanent encrypted chat with Зашифрованный чат уже поддерживается с contact You don't have permanent encrypted chat with Зашифрованный чат не поддерживается с SettingsCoding OK! This factors combination is available Отлично! Введённая комбинация приемлема Error! This factors combination is not available Ошибка! Введённая кобинация неприемлема Coding Settings Параметры шифрования Level Уровень Base База Factors Факторы Check Проверить Please, read Help first. Пожалуйста, прочтите справку. Help Справка OK Начать Cancel Отмена qutim-0.2.0/languages/ru/sources/floaties.ts0000644000175000017500000000062411226251233022550 0ustar euroelessareuroelessar FloatiesPlugin Show floaties Плавающий контакт jVCard qutim-0.2.0/languages/ru/sources/sqlhistory.ts0000644000175000017500000001373211227461044023173 0ustar euroelessareuroelessar HistorySettingsClass HistorySettings Настройки истории Save message history Сохранять историю сообщений Show recent messages in messaging window Показывать последние сообщения в окне чата HistoryWindowClass HistoryWindow История Account: Учетная запись: From: От: Search Искать Return Назад 1 QObject History История SqlHistoryNamespace::HistoryWindow No History Нет истории SqlHistorySettingsClass HistorySettings Настройки истории <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">SQL History Settings</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Настройки SQL истории</span></p></body></html> Save message history Сохранять историю сообщений Show recent messages in messaging window Показывать последние сообщения в окне чата SQL engine: Механизм SQL: SQL connection settings Метод подключения к базе Host: Хост: Port: Порт: Login: Логин: Password: Пароль: Database name: Имя БД: SQL History plugin (c) 2009 by Alexander Kazarin Плагин SQL истории для qutIM © 2009 Александр Казарин qutim-0.2.0/languages/ru/sources/mrim.ts0000644000175000017500000014557211254033113021716 0ustar euroelessareuroelessar AddContactWidget Incorrect email Неверный email Email you entered is not valid or empty! Email который вы ввели неверный или пустой! AddContactWidgetClass Add contact to list Добавить в контакт-лист Add to group: Добавить в группу: Contact email: E-mail контакта: Contact nickname: Ник контакта: Add Добавить AddNumberWidget Phone numbers Номера телефонов Home: Дом: Work: Работа: Mobile: Мобильный: Save Сохранить ContactDetails M М F Ж No avatar Нет аватары ContactDetailsClass Sex Пол Name Имя Close Закрыть Contact details Детали контакта Personal data Персональная информация E-Mail E-Mail Nickname Ник Surname Фамилия Age Возраст Birthday День рождения Zodiac sign Знак зодиака Living place Место жительства <email> <email> <nickname> <nickname> Name: Имя: <name> <name> <surname> <surname> <sex> <sex> <age> <age> <birthday> <birthday> <zodiac> <zodiac> <living place> <living place> Avatar Аватар Update Обновить No avatar Нет аватары E-Mail: Nickname: Ник: Surname: Фамилия: Sex: Пол: Age: Возраст: Birthday: День рождения: Zodiac sign: Знак зодиака: Living place: Место жительства: Add contact Добавить... EditAccount Edit account Изменить аккаунт Account Учетная запись Connection Соединение Use profile settings Использовать общие настройки Edit %1 account settings Измненить настройки %1 профиля FileTransferRequestWidget File transfer request from %1 Передача файла от %1 Form Окно чата From: От: File(s): Файл(ы): File name Имя файла Size Размер Total size: Всего: Accept Принять Decline Отклонить Choose location to save file(s) Укажите куда сохранить файлы(ы) FileTransferWidget Waiting... Ожидание... Form Окно чата Filename: Файл: Done: Передано: Speed: Скорость: File size: Размер: Last time: Прошло времени: Remained time: Осталось: Status: Статус передачи: Open Открыть Cancel Отмена /sec Done! ВСЁ! Getting file... Получение файла... Close Закрыть Close window after tranfer is finished Закрыть по завершении передачи File transfer with: %1 Передать файл: %1 Sending file... Передача файла... GeneralSettings GeneralSettings Основные настройки General settings Основные настройки Restore status at application's start Восстанавливать статус при старте приложения Show phone contacts Показывать телефонные контакты Show status text in contact list Показывать текст статуса в списке контактов LoginFormClass LoginForm Авторизация Password: Пароль: E-mail: E-mail: MRIMClient Online В сети Away Отошёл Invisible Невидимый Offline Не в сети Add contact Добавить... Open mailbox Открыть ящик Search contacts Искать... Messages in mailbox: Писем в ящике: Unread messages: Не прочтено: Authorization request accepted by Запрос авторизации принят от Server closed the connection. Authentication failed! Сервер закрыл соединение. Ошибка аутентификации! Server closed the connection. Another client with same login connected! Сервер закрыл соединение. Другой клиент подключился с этим же логином! Server closed the connection for unknown reason... Сервер закрыл соединение без указания причин... Mailbox status changed! Количество писем в ящике изменилось! Request authorization Запросить авторизацию Add phone number Добавить номер телефона Pls authorize and add me to your contact list! Thanks! Email: Пожалуйста, авторизуйте и добавьте меня! Спасибо! Email: Internal server error! Внутренняя ошибка сервера! User already exists! Пользователь уже существует! Group limit reached! Достигнут предел в группе! Unknown error! Ошибка! Sorry, no contacts found :( Try to change search parameters Извините, но ничего не найдено :( Попытайтесь поискать с другими параметрами No MPOP session available for you, sorry... Нет доступных для вас MPOP сессий, извините... Contact list operation failed! Операция с контакт листом неудачна! No such user! Нет такого пользователя! Invalid info provided! Указана неверная информация! Authorize contact Авторизовать Unread emails: %1 Не прочтено: %1 Send SMS Отправить СМС Rename contact Переименовать контакт Delete contact Удалить контакт Move to group Переместить Add to list Добавить User %1 is requesting authorization: Пользователь %1 запросил авторизацию: MRIMCommonUtils B Б KB Кбайт MB МБайт GB ГБайт MRIMContact Possible client: Возможный клиент: Renaming %1 Переименование %1 You can't rename a contact while you're offline! Ва не можете переименовывать контакт, пока вы отключены! MRIMContactList Phone contacts Телефонные контакты MRIMLoginWidgetClass Password: Пароль: MRIMLoginWidget Окно входа в MRIM Email: Email: MRIMPluginSystem General settings Основные настройки Connection settings Настройки соединения MRIMProto Offline message Оффлайн сообщения File transfer request from %1 couldn't be processed! Перекдача файла от %1 не может быть выполнена! Pls authorize and add me to your contact list! Thanks! Пожалуйста, авторизуйте и добавьте меня! Спасибо! MRIMProtoImpl General settings Основные настройки Connection settings Настройки соединения MRIMSearchWidget Any Любой Male Мужской Female Женский January Январь February Февраль March Март April Апрель May Май June Июнь July Июль August Август September Сентябрь October Октябрь November Ноябрь December Декабрь The Ram Овен The Bull Телец The Twins Близнецы The Crab Рак The Lion Лев The Virgin Дева The Balance Весы The Scorpion Скорпион The Archer Стрелец The Capricorn Козерог The Water-bearer Водолей The Fish Рыбы MRIMSearchWidgetClass Nickname: Ник: Name: Имя: Sex: Пол: Country: Страна: Any Любой Month: Месяц: Zodiac: Зодиак: Age from: Возраст от: to до Search only online contacts Искать только в сети Show avatars Показывать аватары Note: search is available only for following domains: Внимание: поиск доступен только для следующих доменов: Start search! Начать поиск! Search contacts Поиск контакта Search form Поисковая форма Surname: Фамилия: Region: Область: Birthday: День рождения: Day: День: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 E-Mail E-Mail @mail.ru, @list.ru, @bk.ru, @inbox.ru @mail.ru, @list.ru, @bk.ru, @inbox.ru MoveToGroupWidget Move Переместить Move contact to group Переместить в группу Move! Переместить! Group: Группа: RenameWidget Rename Переименовать Rename contact Переименовать контакт New name: Новой имя: OK ОК SMSWidget Send SMS Отправить СМС Reciever: Кому: Send! Отправить! TextLabel SearchResultsWidget M М F Ж SearchResultsWidgetClass Search results Результаты поиска Name Имя Surname Фамилия Sex Пол Age Возраст Info Информация Add contact Добавить контакт Nick Ник E-Mail E-Mail SettingsWidget Default proxy Прокси по умолчанию SettingsWidgetClass SettingsWidget Настройки Connection params Параметры соединения MRIM server host: Хост MRIM сервера: MRIM server port: Порт MRIM сервера: Use proxy Использовать прокси Proxy type: Тип proxy: Proxy host: Хост прокси: Proxy port: Порт прокси: Proxy username: Логин прокси: Password: Пароль: StatusManager Offline Отключен Do Not Disturb Не беспокоить Free For Chat Готов поболтать Online В сети Away Отошёл Invisible Невидимый Sick Болею At home Дома Lunch Ем Where am I? Где я? WC Клозет Cooking Готовка Walking Прогулка I'm an alien! Я инопланетянко! I'm a shrimp! Я креведко! I'm lost :( Я потерялся :( Crazy %) Веселюсь %) Duck Утя Playing Играю Smoke Курю At work На работе On the meeting На совещании Beer Пивасик Coffee Кофе Shovel Лопата Sleeping Сплю On the phone На телефоне In the university В универе School Школа You have the wrong number! У вас не верный номер! LOL ЛОЛ Tongue Язык Smiley Лыбюсь Hippy Хиппи Depression Депрессия Crying Плачу Surprised Сюрприз Angry Злой Evil Злой Ass Задница Heart Сердечко Crescent Полумесяц Coool! Клево! Horns Рога Figa Фига F*ck you! ПНХ! Skull Череп Rocket Ракета Ktulhu Ктулху Goat Коза Must die!! Должен сдохнуть! Squirrel Белка Party! Вечеринка! Music Музыка ? ? XtrazPlugin Xtraz features for qutIM Xtraz для qutIM XtrazSettings Form Окно чата Plugin enabled Плагин включен Xtraz packages: Xtraz пакеты: Information: Информация: Enable Xtraz Включить Xtraz authwidgetClass Authorization request Запрос авторизации Authorize Авторизовать Reject Отклонить jVCard qutim-0.2.0/languages/ru/binaries/0000755000175000017500000000000011273101310020471 5ustar euroelessareuroelessarqutim-0.2.0/languages/ru/binaries/imagepub.qm0000644000175000017500000003236111225627111022637 0ustar euroelessareuroelessar3C @07>1@0BL URLCan't parse URLimagepubPluginB<5=5=>CanceledimagepubPlugin K15@8B5 @8AC=>: Choose imageimagepubPlugin K15@8B5 @8AC=>:Choose image fileimagepubPlugin$09; ?CABFile size is nullimagepubPlugin6 8AC=:8 (*.png *.jpg *.gif)Image Files (*.png *.jpg *.gif)imagepubPlugin2URL >B?@02;5==>9 :0@B8=:8Image URL sentimagepubPluginD 8AC=>: >B?@02;5=: %N (%S 109B) %UImage sent: %N (%S bytes) %UimagepubPlugin>>A;0BL :0@B8=:C G5@57 ImagePubSend image via ImagePub pluginimagepubPlugin&B?@02:0 @8AC=:0...Sending image URL...imagepubPluginP%N - <O D09;0; %U - AAK;:0; %S - @07<5@-%N - file name; %U - file URL; %S - file sizeimagepubSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">;038= qutIM - ImagePub </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Send images via public web services</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">;5:A0=4@ 070@8=</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> O

ImagePub qutIM plugin

v%VERSION%

Send images via public web services

Author:

Alexander Kazarin

boiler@co.ru

(c) 2009

imagepubSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

imagepubSettingsClass ?;038=5AboutimagepubSettingsClass2!;C610 E@0=5=8O @8AC=:>2:Image hosting service:imagepubSettingsClass8(01;>= A>>1I5=8O A> AAK;:>9:Send image template:imagepubSettingsClass0AB@>9:8SettingsimagepubSettingsClassjVCardAB0;>AL: %1Elapsed time: %1 uploadDialog$09;: %1File: %1 uploadDialog"@>3@5AA: %1 / %2Progress: %1 / %2 uploadDialog"!:>@>ABL: %1 :1/ASpeed: %1 kb/sec uploadDialog0:0G:0... Uploading... uploadDialog B<5=0CanceluploadDialogClassAB0;>AL: Elapsed time:uploadDialogClass $09;:File: uploadDialogClass@>3@5AA: Progress:uploadDialogClass!:>@>ABL:Speed:uploadDialogClass$K3@C7:0 70?CI5=0.Upload started.uploadDialogClassK3@C7:0... Uploading...uploadDialogClassqutim-0.2.0/languages/ru/binaries/connectioncheck.qm0000644000175000017500000002630711230564045024210 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Serif'; font-size:11pt;"> </span><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7.1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;">;038= ?@>25@:8 =0;8G8O A>548=5=8O A 8=B5@=5B><</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">3>@L 'Sqee' !K@><OB=8:>2</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" font-family:'Liberation Serif'; font-size:11pt; text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URL2Ping 4>1028;: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">235=89 'Dexif' !?8FK=</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">www.ExGraphics.info</p></body></html> S

Connection check qutIM plugin

v 0.0.7.1

Author:

Igor 'Sqee' Syromyatnikov

sqee@olimp.ua

URL2Ping added by:

Evgeniy 'Dexif' Spitsyn

www.ExGraphics.info

connectioncheckSettings ?;038=5AboutconnectioncheckSettings 5B>4: Check method:connectioncheckSettings<5@8>48G=>ABL ?@>25@:8 (A5:.):Check period (sec.):connectioncheckSettingsB:;NG5=DisabledconnectioncheckSettings:;NG5=EnabledconnectioncheckSettings:0?@8<5@: www.exgraphics.infoExample: www.exgraphics.infoconnectioncheckSettings8=3PingconnectioncheckSettings$!>AB>O=85 ?;038=0:Plugin status:connectioncheckSettings,"01;8F0 <0@H@CB>2 A5B8 Route tableconnectioncheckSettings0AB@>9:8SettingsconnectioncheckSettings'B> ?8=3>20BL: URL2Ping:connectioncheckSettingsjVCard ) , qutim-0.2.0/languages/ru/binaries/sqlhistory.qm0000644000175000017500000000645311227461044023275 0ustar euroelessareuroelessar 9  C } Z A.  Yi _1HistoryWindowClass#G5B=0O 70?8AL:Account:HistoryWindowClassB:From:HistoryWindowClassAB>@8O HistoryWindowHistoryWindowClass 0704ReturnHistoryWindowClass A:0BLSearchHistoryWindowClassAB>@8OHistoryQObject5B 8AB>@88 No History"SqlHistoryNamespace::HistoryWindow <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">0AB@>9:8 SQL 8AB>@88</span></p></body></html>

SQL History Settings

SqlHistorySettingsClass<O :Database name:SqlHistorySettingsClass"0AB@>9:8 8AB>@88HistorySettingsSqlHistorySettingsClass %>AB:Host:SqlHistorySettingsClass >38=:Login:SqlHistorySettingsClass0@>;L: Password:SqlHistorySettingsClass >@B:Port:SqlHistorySettingsClassj;038= SQL 8AB>@88 4;O qutIM 2009 ;5:A0=4@ 070@8=0SQL History plugin (c) 2009 by Alexander KazarinSqlHistorySettingsClass05B>4 ?>4:;NG5=8O : 1075SQL connection settingsSqlHistorySettingsClass5E0=87< SQL: SQL engine:SqlHistorySettingsClass6!>E@0=OBL 8AB>@8N A>>1I5=89Save message historySqlHistorySettingsClassT>:07K20BL ?>A;54=85 A>>1I5=8O 2 >:=5 G0B0(Show recent messages in messaging windowSqlHistorySettingsClass ) , qutim-0.2.0/languages/ru/binaries/yandexnarod.qm0000644000175000017500000001133711225627111023362 0ustar euroelessareuroelessarD H0 Rz > au x k$ Bs e b k" l| z s Td%a oeC~eijVCard2B>@870F8O AuthorizationrequestAuthDialogClass 0?G0:Captcha:requestAuthDialogClass >38=:Login:requestAuthDialogClass0@>;L: Password:requestAuthDialogClass about:blankrequestAuthDialogClass >B>2>Done uploadDialog"03@C7:0 =0 A525@ Uploading uploadDialog B<5=0CanceluploadDialogClassAB0;>AL: Elapsed time:uploadDialogClass $09;:File: uploadDialogClass@>3@5AA: Progress:uploadDialogClass!:>@>ABL:Speed:uploadDialogClass$K3@C7:0 70?CI5=0.Upload started.uploadDialogClassK3@C7:0... Uploading...uploadDialogClassK15@8B5 D09; Choose fileyandexnarodManage>#?@02;5=85 D09;0<8 Yandex.NarodYandex.Narod file manageryandexnarodManage59AB28O:Actions:yandexnarodManageClassCD5@ >1<5=0 ClipboardyandexnarodManageClass0:@KBLCloseyandexnarodManageClass#40;8BL D09; Delete FileyandexnarodManageClass!?8A>: D09;>2: Files list:yandexnarodManageClass:=> G0B0FormyandexnarodManageClass>;CG8BL A?8A>: Get FilelistyandexnarodManageClass >2K9New ItemyandexnarodManageClass03@C78BL D09; Upload FileyandexnarodManageClass line1 line2yandexnarodManageClass<2B>@870F8O ?@>A8B 22>40 0?G8Authorization captcha requestyandexnarodNetMan*  2B>@870F8OAuthorization failedyandexnarodNetMan&2B>@870F8O CA?5H=0Authorizing OKyandexnarodNetMan2B>@870F8O...Authorizing...yandexnarodNetManB<5=5=>CanceledyandexnarodNetMan$#40;5=85 D09;>2...Deleting files...yandexnarodNetMan203@C7:0 A?8A:0 D09;>2...Downloading filelist...yandexnarodNetMan*$09; =C;53>3> @07<5@0File size is nullyandexnarodNetMan$09;(K) C40;5=KFile(s) deletedyandexnarodNetManH!?8A>: D09;>2 ?>;CG5= (%1 D09;(>2) )Filelist downloaded (%1 files)yandexnarodNetMan,>;CG5=85 E@0=8;8I0...Getting storage...yandexnarodNetMan$0G0;> 703@C7:8...Starting upload...yandexnarodNetMan$03@C7:0 7025@H5=0Uploaded successfullyyandexnarodNetManH81:0 ?@>25@:8Verifying failedyandexnarodNetMan@>25@:0... Verifying...yandexnarodNetManK15@8B5 D09; Choose fileyandexnarodPlugin$09; >B?@02;5= File sentyandexnarodPlugin.#?@02;5=85 Yandex.NarodManage Yandex.Narod filesyandexnarodPlugin:B?@028BL D09; 2 /=45:A.0@>4Send file via Yandex.NarodyandexnarodPluginP%N - <O D09;0; %U - AAK;:0; %S - @07<5@-%N - file name; %U - file URL; %S - file sizeyandexnarodSettingsClass ?;038=5AboutyandexnarodSettingsClass >38=LoginyandexnarodSettingsClass 0@>;LPasswordyandexnarodSettingsClass(>A;0BL H01;>= D09;0Send file templateyandexnarodSettingsClass0AB@>9:8SettingsyandexnarodSettingsClass "5AB 02B>@870F88Test AuthorizationyandexnarodSettingsClass AB0BCAstatusyandexnarodSettingsClass ) , qutim-0.2.0/languages/ru/binaries/qutimcoder_ru.qm0000644000175000017500000003042111225627111023723 0ustar euroelessareuroelessarn'p2+i0 b<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">;038= 4;O >@30=870F88 70H8D@>20==KE G0B>2.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;"> 50;870F8O 0;3>@8B<>2 H8D@>20=8O:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">0:A8< 'LoZ' 5;5AN:</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;"> 07@01>B:0 ?;038=0:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">/= 'NayZaK' 07;0CA:0A</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(A) 2009</span></p></body></html> k

qutIM Coder

v0.1

Plugin, that lets you to organize encrypted chats with any

contact from your contact list.

Encryption algorithms developer:

Maksim 'Loz' Velesiuk

loz.accs@gmail.com

Plugin developer:

Ian 'NayZaK' Kazlauskas

nayzak@googlemail.com

(с) 2009

HelpUI ?;038=5AboutHelpUI!?@02:0HelpHelpUI  contact QutimCoder C65 =0G0B has already begun QutimCoder =5 =0G0B have not been started yet QutimCoder00G0BL 70H8D@>20==K9 G0BBegin encrypted chat QutimCoder6025@H8BL 70H8D@>20==K9 G0BClose encrypted chat QutimCoder(8D@>20=85 Encryption QutimCoder(0H8D@>20==K9 G0B A Enqrypted chat with  QutimCoder.>445@6820BL H8D@>20=85"Make this encrypted chat permanent QutimCoder45 ?>445@6820BL H8D@>20=8O Make this encrypted chat regular QutimCoderV;038= 4;O >@30=870F88 70H8D@>20==KE G0B>2.bPlugin, that lets you to organize encrypted chat sessions with any contact from your contact list. QutimCoderQutim Coder Qutim Coder QutimCoderN0H8D@>20==K9 G0B C65 ?>445@68205BAO A /You already have permanent encrypted chat with  QutimCoderL0H8D@>20==K9 G0B =5 ?>445@68205BAO A -You don't have permanent encrypted chat with  QutimCoder070BaseSettingsCoding B<5=0CancelSettingsCoding@>25@8BLCheckSettingsCoding(0@0<5B@K H8D@>20=8OCoding SettingsSettingsCodingNH81:0! 254Q==0O :>18=0F8O =5?@85<;5<00Error! This factors combination is not availableSettingsCoding$0:B>@KFactorsSettingsCoding!?@02:0HelpSettingsCoding#@>25=LLevelSettingsCoding 0G0BLOKSettingsCodingNB;8G=>! 254Q==0O :><18=0F8O ?@85<;5<0)OK! This factors combination is availableSettingsCoding:>60;C9AB0, ?@>GB8B5 A?@02:C.Please, read Help first.SettingsCoding ) , qutim-0.2.0/languages/ru/binaries/plugman.qm0000644000175000017500000003411311251652706022515 0ustar euroelessareuroelessar1 I\{9Y#?E +lj ,#sfsFD@&qj ;. O{x A  { g @*@# 2` 2`4C Mg3 ~K ?d5 b J  h ( M  d  RV} n  t . s4 5։ =zZ ,< \C5r\z̜= i5o...ChooseCategoryPage (:C@:8ArtChooseCategoryPage/4@>CoreChooseCategoryPage81;8>B5:0LibChooseCategoryPage$81;8>B5:0 (*.dll)Library (*.dll)ChooseCategoryPageD81;8>B5:0 (*.dylib *.bundle *.so)Library (*.dylib *.bundle *.so)ChooseCategoryPage"81;8>B5:0 (*.so)Library (*.so)ChooseCategoryPage"0B53>@8O ?0:5B0:Package category:ChooseCategoryPage ;038=PluginChooseCategoryPage K15@8B5 3@0D8:C Select artChooseCategoryPageK15@8B5 O4@> Select coreChooseCategoryPage&K15@8B5 181;8>B5:CSelect libraryChooseCategoryPage 0AB5@ WizardPageChooseCategoryPage...ChoosePathPage 0AB5@ WizardPageChoosePathPage*ConfigPackagePage (:C@:8ArtConfigPackagePage 2B>@:Author:ConfigPackagePage0B53>@8O: Category:ConfigPackagePage/4@>CoreConfigPackagePage81;8>B5:0LibConfigPackagePage8F5=78O:License:ConfigPackagePage0720=85:Name:ConfigPackagePage<O ?0:5B0: Package name:ConfigPackagePage;0BD>@<0: Platform:ConfigPackagePage ;038=PluginConfigPackagePage?8A0=85:Short description:ConfigPackagePage"8?:Type:ConfigPackagePage!B@0=8F0:Url:ConfigPackagePage5@A8O:Version:ConfigPackagePage 0AB5@ WizardPageConfigPackagePage.5 25@=0O 25@A8O ?0:5B0Invalid package versionQObject*5 C:070=> 8<O ?0:5B0Package name is emptyQObject(5 C:070= B8? ?0:5B0Package type is emptyQObjectN;0BD>@<0 ?0:5B0 =5 A>>B25BAB2C5B 20H59Wrong platformQObjectjVCard59AB28OActionsmanager@8<5=8BLApplymanager&>:0 =5 3>B>2> :'-(Not yet implementedmanager"5=5465@ ?;038=>2Plugmanmanager 09B8findmanager:03@C7:0:%1%, A:>@>ABL: %2 %3Downloading: %1%, speed: %2 %3plugDownloader/AMB/splugDownloader18B/A5: bytes/secplugDownloader:/AkB/splugDownloader#AB0=>2:0: Installing: plugInstaller ;>E>9 ?0:5B: %1Invalid package: %1 plugInstaller*"@51C5BAO ?5@570?CA:! Need restart! plugInstaller#40;5=85: Removing: plugInstallerD5 <>3C @0A?0:>20BL 0@E82: %1 2 %2#Unable to extract archive: %1 to %2 plugInstaller>52>7<>6=> CAB0=>28BL ?0:5B: %1Unable to install package: %1 plugInstaller25 <>3C >B:@KBL 0@E82: %1Unable to open archive: %1 plugInstaller5 <>3C CAB0=>28BL ?0:5B %1: B: CAB0=>2;5==0O 25@A8O 1>;55 =>20O7Unable to update package %1: installed version is later plugInstallerl@54C?@5645=85: ?>?KB:0 ?5@570?8A8 ACI5ABCNI8E D09;>2!,warning: trying to overwrite existing files! plugInstaller#AB0=>28BLInstallplugItemDelegate#40;8BLRemoveplugItemDelegate58725AB=>UnknownplugItemDelegate1=>28BLUpgradeplugItemDelegateCAB0=>2;5=> installedplugItemDelegate"4>ABC?=0 703@C7:0isDowngradableplugItemDelegate$4>ABC?=0 CAB0=>2:0 isInstallableplugItemDelegate&4>ABC?=> >1=>2;5=85 isUpgradableplugItemDelegate&#?@02;5=85 ?0:5B0<8Manage packagesplugMan59AB28OActions plugManager$B<5=8BL 87<5=5=8ORevert changes plugManager.1=>28BL A?8A>: ?0:5B>2Update packages list plugManager1=>28BL 2A5 Upgrade all plugManager 0:5BKPackagesplugPackageModelH81:0 2 075Broken package databaseplugXMLHandler^5 <>3C ?@>G5ABL 107C, ?@>25@LB5 ?@020 4>ABC?0.,Can't read database. Check your pesmissions.plugXMLHandler(5 <>3C >B:@KBL D09;Unable to open fileplugXMLHandler65 <>3C ?>;CG8BL A>45@68<>5Unable to set contentplugXMLHandler*5 <>3C 70?8A0BL D09;Unable to write fileplugXMLHandler(=5 <>3C >B:@KBL D09;unable to open fileplugXMLHandler6=5 <>3C ?>;CG8BL A>45@68<>5unable to set contentplugXMLHandler<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">!?8A>: 75@:0;</span></p></body></html>

Mirror list

plugmanSettings<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;"><b>PlugMan</b><br />@>AB>9 <5=5645@ @0AH8@5=89 8 4>?>;=5=89 qutIM</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">!84>@>2 ;5:A59</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">>=B0:B: </span><a href="mailto:sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"> 2008-2009</span></p></body></html>O

simple qutIM extentions manager.

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com


2008-2009

plugmanSettings ?;038=5AboutplugmanSettings>1028BLAddplugmanSettings?8A0=85 DescriptionplugmanSettingsFormplugmanSettings<ONameplugmanSettings0>:0 MB> 5I5 =5 @01>B05BNot yet implementedplugmanSettings0AB@>9:8SettingsplugmanSettings!B@0=8F0UrlplugmanSettings@C??K ?0:5B>2group packagesplugmanSettings ) , qutim-0.2.0/languages/ru/binaries/qt_ru.qm0000644000175000017500000012462111232306153022177 0ustar euroelessareuroelessarEG"wwh?)w?*/ewpBy\cփr$g$$B(w^KKu֊,;yWIxS*FYM>YMGh^Ci#q?dۊ,eN)I UIII/Id,Ix IQIn/Ynqinynm'mimmllIpoyoop?o7uDBuDJD,',P,j,x,|>V5a5$D 4MVfR fR:jc!5ZPqEiV1AVloy>^K%CzMiWkty^{y]5tF:tG%=jǥuYt*{y]AvLC-g:5shƨƨyҝz Uէ?xߺV^ob/_/c#6 uG>'Pѧ0 QId[^neiCiJ{bB$tVotaPdDt%tHLtT_ syB,Dq256DNCU]D}KK~t~|(^ZcK<1f+e W6/IE=%u T`i~^ik5kEfWfd~gAx1 iz*2i$Uiz6Fnt†5vC3Aʴ5QBʴ5#ԄD]d#F5F5ReI I9As qeFk Ac Ac;U =:E> i3" tH t; Z &5 " p */h 7ur == B`R T^i dx e  e:5 f1@ gn k,j rD" ! 9 I$ I) I- ; Ju %p' , ,6 ' ˔< P% PZ A% H 68e :+W f U f 7v s 9 s8 AAD 0 m,E 0N(? E9 L L%k L Mc\3 f) f)7 io> m` w H H6 'D .@v   PN |s J u J9 kzp : ̺< -D= U)K4 z+N  Bg  JX xHN .* 7FL >E >E >F >M >Np >N >U" >V ?t|} RVa S.x8 Y p+  O T > tf :bK +>, 0E5 ;ɾ{ PtR Pta iFCk i: ik m9 ? G X D t5R$ t5# SH  tz*%*/E&I_L[ a.0vɅy$g~L4~OǗ:UB$U[y[  88$U0i)q0r2wTqdDHJdLL$.yC{~apY5`Y1 8kyWP\t2(i<html>2C:>2>5 CAB@>9AB2> <b>%1</b> =5 @01>B05B.<br/>A?>;L7C5BAO <b>%2</b>.</html>^The audio playback device %1 does not work.
Falling back to %2. AudioOutput0:@KBL 2:;04:C Close Tab CloseButton.!?5F80;L=K5 2>7<>6=>AB8 AccessibilityPhonon:: !2O7L CommunicationPhonon::3@KGamesPhonon:: C7K:0MusicPhonon::#254><;5=8O NotificationsPhonon:: 845>VideoPhonon::A?>;L7C9B5 MB>B 153C=>: 4;O CAB0=>2:8 3@><:>AB8. 520O ?>78F8O 0%, ?@020O %1%WUse this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%Phonon::VolumeSlider@><:>ABL: %1% Volume: %1%Phonon::VolumeSlider#40;8BLDelete Q3DataTable FalseFalse Q3DataTableAB028BLInsert Q3DataTableTrueTrue Q3DataTable1=>28BLUpdate Q3DataTablez%1 $09; =5 =0945=. @>25@LB5 ?@028;L=>ABL ?CB8 8 8<5=8 D09;0.+%1 File not found. Check path and filename. Q3FileDialog&#40;8BL&Delete Q3FileDialog&5B&No Q3FileDialog&OK&OK Q3FileDialog&B:@KBL&Open Q3FileDialog&5@58<5=>20BL&Rename Q3FileDialog&!>E@0=8BL&Save Q3FileDialog"&5 C?>@O4>G820BL &Unsorted Q3FileDialog&0&Yes Q3FileDialogb<qt>K 459AB28B5;L=> E>B8B5 C40;8BL %1 "%2"?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialogA5 D09;K (*) All Files (*) Q3FileDialogA5 D09;K (*.*)All Files (*.*) Q3FileDialogB@81CBK Attributes Q3FileDialog 0704Back Q3FileDialog B<5=0Cancel Q3FileDialog>>?8@>20BL 8;8 ?5@5<5AB8BL D09;Copy or Move a File Q3FileDialog*!>740BL =>2K9 :0B0;>3Create New Folder Q3FileDialog0B0Date Q3FileDialog#40;8BL %1 Delete %1 Q3FileDialog5B0;L=K9 284 Detail View Q3FileDialog0B0;>3Dir Q3FileDialog0B0;>38 Directories Q3FileDialog0B0;>3: Directory: Q3FileDialog H81:0Error Q3FileDialog$09;File Q3FileDialog&<O D09;0: File &name: Q3FileDialog&"8? D09;0: File &type: Q3FileDialog09B8 :0B0;>3Find Directory Q3FileDialog5B 4>ABC?0 Inaccessible Q3FileDialog !?8A>: List View Q3FileDialog&!<>B@5BL 2: Look &in: Q3FileDialog<OName Q3FileDialog>2K9 :0B0;>3 New Folder Q3FileDialog >2K9 :0B0;>3 %1 New Folder %1 Q3FileDialog>2K9 :0B0;>3 1 New Folder 1 Q3FileDialog*25@E =0 >48= C@>25=LOne directory up Q3FileDialogB:@KBLOpen Q3FileDialogB:@KBLOpen  Q3FileDialog<@54?@>A<>B@ A>45@68<>3> D09;0Preview File Contents Q3FileDialog>@54?@>A<>B@ 8=D>@<0F88 > D09;5Preview File Info Q3FileDialog&1=>28BLR&eload Q3FileDialog">;L:> GB5=85 Read-only Q3FileDialog'B5=85-70?8AL Read-write Q3FileDialogB:@KB85: %1Read: %1 Q3FileDialog!>E@0=8BL :0:Save As Q3FileDialogK1@0BL :0B0;>3Select a Directory Q3FileDialog.>:070BL &A:@KBK5 D09;KShow &hidden files Q3FileDialog  07<5@Size Q3FileDialog#?>@O4>G8BLSort Q3FileDialog> &40B5 Sort by &Date Q3FileDialog> &8<5=8 Sort by &Name Q3FileDialog> &@07<5@C Sort by &Size Q3FileDialog!?5FD09;Special Q3FileDialog"!AK;:0 =0 :0B0;>3Symlink to Directory Q3FileDialog!AK;:0 =0 D09;Symlink to File Q3FileDialog$!AK;:0 =0 A?5FD09;Symlink to Special Q3FileDialog"8?Type Q3FileDialog">;L:> 70?8AL Write-only Q3FileDialog0?8AL: %1 Write: %1 Q3FileDialog:0B0;>3 the directory Q3FileDialogD09;the file Q3FileDialog AAK;:C the symlink Q3FileDialog:52>7<>6=> A>740BL :0B0;>3 %1Could not create directory %1 Q3LocalFs*52>7<>6=> >B:@KBL %1Could not open %1 Q3LocalFsB52>7<>6=> ?@>A<>B@5BL :0B0;>3 %1Could not read directory %1 Q3LocalFsL52>7<>6=> C40;8BL D09; 8;8 :0B0;>3 %1%Could not remove file or directory %1 Q3LocalFs@52>7<>6=> ?5@58<5=>20BL %1 2 %2Could not rename %1 to %2 Q3LocalFs,52>7<>6=> 70?8A0BL %1Could not write %1 Q3LocalFs0AB@>8BL... Customize... Q3MainWindowK@>2=OBLLine up Q3MainWindow>?5@0F8O ?@5@20=0 ?>;L7>20B5;5<Operation stopped by the userQ3NetworkProtocol B<5=0CancelQ3ProgressDialog@8<5=8BLApply Q3TabDialog B<5=0Cancel Q3TabDialog> C<>;G0=8NDefaults Q3TabDialog!?@02:0Help Q3TabDialogOKOK Q3TabDialog&>?8@>20BL&Copy Q3TextEdit&AB028BL&Paste Q3TextEdit&>2B>@8BL&Redo Q3TextEdit&B<5=8BL&Undo Q3TextEditG8AB8BLClear Q3TextEdit&K@570BLCu&t Q3TextEditK45;8BL 2A5 Select All Q3TextEdit0:@KBLClose Q3TitleBar: 0E25@=CBL >:=> =0 25AL M:@0=Makes the window full screen Q3TitleBar 0725@=CBLMaximize Q3TitleBar!25@=CBLMinimize Q3TitleBar">AAB0=>28BL 2=87 Restore down Q3TitleBar&>AAB0=>28BL =025@E Restore up Q3TitleBar!8AB5<0System Q3TitleBar>;LH5...More... Q3ToolBar(=58725AB=>) (unknown) Q3UrlOperator@>B>:>; `%1' =5 ?>445@68205B :>?8@>20=85 8;8 ?5@5<5I5=85 D09;>2 8 :0B0;>3>2IThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorl@>B>:>; `%1' =5 ?>445@68205B A>740=85 =>2KE :0B0;>3>2;The protocol `%1' does not support creating new directories Q3UrlOperatorZ@>B>:>; `%1' =5 ?>445@68205B 4>AB02:C D09;>20The protocol `%1' does not support getting files Q3UrlOperator`@>B>:>; `%1' =5 ?>445@68205B ?@>A<>B@ :0B0;>3>26The protocol `%1' does not support listing directories Q3UrlOperatorZ@>B>:>; `%1' =5 ?>445@68205B >B?@02:C D09;>20The protocol `%1' does not support putting files Q3UrlOperatorv@>B>:>; `%1' =5 ?>445@68205B C40;5=85 D09;>2 8;8 :0B0;>3>2@The protocol `%1' does not support removing files or directories Q3UrlOperator@>B>:>; `%1' =5 ?>445@68205B ?5@58<5=>20=85 D09;>2 8;8 :0B0;>3>2@The protocol `%1' does not support renaming files or directories Q3UrlOperator>@>B>:>; `%1' =5 ?>445@68205BAO"The protocol `%1' is not supported Q3UrlOperator&B<5=0&CancelQ3Wizard &$8=8H&FinishQ3Wizard&!?@02:0&HelpQ3Wizard&?5@54 >&Next >Q3Wizard< &0704< &BackQ3Wizard*B:070=> 2 A>548=5=88Connection refusedQAbstractSocket0@52KH5=> 2@5<O >6840=8OConnection timed outQAbstractSocket4@5A =5 =0945=Host not foundQAbstractSocket !5BL =5 4>ABC?=0Network unreachableQAbstractSocket&K1@0BL 2A5 &Select AllQAbstractSpinBox &25@E&Step upQAbstractSpinBox &=87 Step &downQAbstractSpinBox:B828@>20BLActivate QApplicationr@>3@0<<=K9 <>4C;L '%1' B@51C5B Qt %2, =0945=0 25@A8O %3.,Executable '%1' requires Qt %2, found Qt %3. QApplicationDH81:0 A>2<5AB8<>AB8 181;8>B5:8 QtIncompatible Qt Library Error QApplicationLTRQT_LAYOUT_DIRECTION QApplication&B<5=0&Cancel QAxSelectOKOK QAxSelect@>25@8BLCheck QCheckBox<&>1028BL : A>1AB25==K< F25B0<&Add to Custom Colors QColorDialog&A=>2=K5 F25B0 &Basic colors QColorDialog$&!>1AB25==K5 F25B0&Custom colors QColorDialog &5;:&Green: QColorDialog &@0A:&Red: QColorDialog &0A:&Sat: QColorDialog &/@::&Val: QColorDialog&;LD0-:0=0;:A&lpha channel: QColorDialog !&8=:Bl&ue: QColorDialog &">=:Hu&e: QColorDialogK1@0BL F25B Select Color QColorDialog0:@KBLClose QComboBox FalseFalse QComboBoxB:@KBLOpen QComboBoxTrueTrue QComboBox'B> MB>? What's This?QDialog&B<5=0&CancelQDialogButtonBox&0:@KBL&CloseQDialogButtonBox&5B&NoQDialogButtonBox&OK&OKQDialogButtonBox&!>E@0=8BL&SaveQDialogButtonBox&0&YesQDialogButtonBoxB<5=8BLAbortQDialogButtonBox@8<5=8BLApplyQDialogButtonBox B<5=0CancelQDialogButtonBox0:@KBLCloseQDialogButtonBox,0:@KBL 157 A>E@0=5=8OClose without SavingQDialogButtonBoxB:;>=8BLDiscardQDialogButtonBox5 A>E@0=OBL Don't SaveQDialogButtonBox!?@02:0HelpQDialogButtonBox3=>@8@>20BLIgnoreQDialogButtonBox&5B 4;O 2A5E N&o to AllQDialogButtonBoxOKOKQDialogButtonBoxB:@KBLOpenQDialogButtonBox!1@>A8BLResetQDialogButtonBox,>AAB0=>28BL C<>;G0=8ORestore DefaultsQDialogButtonBox>2B>@8BLRetryQDialogButtonBox!>E@0=8BLSaveQDialogButtonBox!>E@0=8BL 2A5Save AllQDialogButtonBox0 4;O &2A5E Yes to &AllQDialogButtonBox<OName QDirModel  07<5@Size QDirModel"8?Type QDirModel0:@KBLClose QDockWidget 5=LH5LessQDoubleSpinBox >;LH5MoreQDoubleSpinBox&OK&OK QErrorMessageL&>:07K20BL MB> A>>1I5=85 2 40;L=59H5<&Show this message again QErrorMessage*B;04>G=>5 A>>1I5=85:Debug Message: QErrorMessage&@8B8G5A:0O >H81:0: Fatal Error: QErrorMessage@54C?@5645=85:Warning: QErrorMessage&#40;8BL&Delete QFileDialog&B:@KBL&Open QFileDialog&5@58<5=>20BL&Rename QFileDialog&!>E@0=8BL&Save QFileDialogA5 D09;K (*) All Files (*) QFileDialogA5 D09;K (*.*)All Files (*.*) QFileDialog 0704Back QFileDialog*!>740BL =>2K9 :0B0;>3Create New Folder QFileDialog5B0;L=K9 284 Detail View QFileDialog0B0;>38 Directories QFileDialog0B0;>3: Directory: QFileDialog$09;File QFileDialog&<O D09;0: File &name: QFileDialog09B8 :0B0;>3Find Directory QFileDialog ?5@54Forward QFileDialog !?8A>: List View QFileDialog>2K9 :0B0;>3 New Folder QFileDialogB:@KBLOpen QFileDialog#40;8BLRemove QFileDialog!>E@0=8BL :0:Save As QFileDialog.>:070BL &A:@KBK5 D09;KShow &hidden files QFileDialog<ONameQFileSystemModel  07<5@SizeQFileSystemModel"8?TypeQFileSystemModel &(@8DB&Font QFontDialog& 07<5@&Size QFontDialog&>4G5@:820BL &Underline QFontDialog-DD5:BKEffects QFontDialog&!B8;L H@8DB0 Font st&yle QFontDialog @8<5@Sample QFontDialogK1@0BL H@8DB Select Font QFontDialog&5@5G5@:820BL Stri&keout QFontDialog2H81:0 A<5=K :0B0;>30: %1Changing directory failed: %1QFtp<!>548=5=85 A C7;>< CAB0=>2;5=>Connected to hostQFtpB#AB0=>2;5=> A>548=5=85 A C7;>< %1Connected to host %1QFtp:H81:0 A>548=5=8O A C7;><: %1Connecting to host failed: %1QFtp(!>548=5=85 @07>@20=>Connection closedQFtpJB:070=> 2 A>548=5=88 ?5@540G8 40==KE&Connection refused for data connectionQFtp@B:070=> 2 A>548=5=88 A C7;>< %1Connection refused to host %1QFtp>!>548=5=85 A C7;>< %1 @07>@20=>Connection to %1 closedQFtp8H81:0 A>740=8O :0B0;>30: %1Creating directory failed: %1QFtp2H81:0 703@C7:8 D09;0: %1Downloading file failed: %1QFtp"1=0@C65= C75; %1 Host %1 foundQFtp(#75; %1 =5 >1=0@C65=Host %1 not foundQFtp#75; >1=0@C65= Host foundQFtp:H81:0 ?@>A<>B@0 :0B0;>30: %1Listing directory failed: %1QFtp4H81:0 2E>40 2 A8AB5<C: %1Login failed: %1QFtp5B A>548=5=8O Not connectedQFtp8H81:0 C40;5=8O :0B0;>30: %1Removing directory failed: %1QFtp2H81:0 C40;5=8O D09;0: %1Removing file failed: %1QFtp$58725AB=0O >H81:0 Unknown errorQFtp2H81:0 >B?@02:8 D09;0: %1Uploading file failed: %1QFtp$58725AB=0O >H81:0 Unknown error QHostInfo4@5A =5 =0945=Host not foundQHostInfoAgent,58725AB=K9 B8? 04@5A0Unknown address typeQHostInfoAgent$58725AB=0O >H81:0 Unknown errorQHostInfoAgent<!>548=5=85 A C7;>< CAB0=>2;5=>Connected to hostQHttpB#AB0=>2;5=> A>548=5=85 A C7;>< %1Connected to host %1QHttp(!>548=5=85 @07>@20=>Connection closedQHttp*B:070=> 2 A>548=5=88Connection refusedQHttp>!>548=5=85 A C7;>< %1 @07>@20=>Connection to %1 closedQHttp&H81:0 HTTP-70?@>A0HTTP request failedQHttp"@51C5BAO SSL 4;O CAB0=>2;5=8O HTTPS A>548=5=8O, => ?>445@6:0 =5 A:><?8;8@>20=0:HTTPS connection requested but SSL support not compiled inQHttp"1=0@C65= C75; %1 Host %1 foundQHttp(#75; %1 =5 >1=0@C65=Host %1 not foundQHttp#75; >1=0@C65= Host foundQHttp.5:>@@5:B=K9 HTTP->B25BInvalid HTTP chunked bodyQHttpF>;CG5= =5:>@@5:B=K9 HTTP-703>;>2>:Invalid HTTP response headerQHttp@5 2K1@0= A5@25@ 4;O ?>4:;NG5=8ONo server set to connect toQHttp0?@>A >B<5=5=Request abortedQHttpL5>6840==K9 @07@K2 A>548=5=8O A5@25@><%Server closed connection unexpectedlyQHttp@58725AB=K9 <5B>4 0CB5=B8D8:0F88Unknown authentication methodQHttp$58725AB=0O >H81:0 Unknown errorQHttp*525@=0O 4;8=0 40==KEWrong content lengthQHttp$58725AB=0O >H81:0 Unknown error QIODevice$58725AB=0O >H81:0 Unknown errorQLibrary&>?8@>20BL&Copy QLineEdit&AB028BL&Paste QLineEdit&>2B>@8BL&Redo QLineEdit&B<5=8BL&Undo QLineEdit&K@570BLCu&t QLineEdit#40;8BLDelete QLineEditK45;8BL 2A5 Select All QLineEdit%1 - [%2] %1 - [%2] QMdiSubWindow&0:@KBL&Close QMdiSubWindow&5@5<5AB8BL&Move QMdiSubWindow&>AAB0=>28BL&Restore QMdiSubWindow& 07<5@&Size QMdiSubWindow0:@KBLClose QMdiSubWindow!?@02:0Help QMdiSubWindow &0725@=CBL Ma&ximize QMdiSubWindow 0725@=CBLMaximize QMdiSubWindow5=NMenu QMdiSubWindow&!25@=CBL Mi&nimize QMdiSubWindow!25@=CBLMinimize QMdiSubWindow>AAB0=>28BL Restore Down QMdiSubWindowA5340 &=025@EC Stay on &Top QMdiSubWindow0:@KBLCloseQMenuK?>;=8BLExecuteQMenuB:@KBLOpenQMenu!?@02:0Help QMessageBoxOKOK QMessageBox*B:070=> 2 A>548=5=88Connection refusedQNativeSocketEngine$58725AB=0O >H81:0 Unknown errorQNativeSocketEngineHomeHomeQObject<ONameQPPDOptionsModelFormQPageSetupWidgetKA>B0:Height:QPageSetupWidget ;L1>< LandscapeQPageSetupWidget>@B@5BPortraitQPageSetupWidget(8@8=0:Width:QPageSetupWidget$58725AB=0O >H81:0 Unknown error QPluginLoader$A0 (841 x 1189 <<)A0 (841 x 1189 mm) QPrintDialog"A1 (594 x 841 <<)A1 (594 x 841 mm) QPrintDialog"A2 (420 x 594 <<)A2 (420 x 594 mm) QPrintDialog"A3 (297 x 420 <<)A3 (297 x 420 mm) QPrintDialog"A5 (148 x 210 <<)A5 (148 x 210 mm) QPrintDialog"A6 (105 x 148 <<)A6 (105 x 148 mm) QPrintDialog A7 (74 x 105 <<)A7 (74 x 105 mm) QPrintDialogA8 (52 x 74 <<)A8 (52 x 74 mm) QPrintDialogA9 (37 x 52 <<)A9 (37 x 52 mm) QPrintDialog;80AK: %1 Aliases: %1 QPrintDialog&B0 (1000 x 1414 <<)B0 (1000 x 1414 mm) QPrintDialog$B1 (707 x 1000 <<)B1 (707 x 1000 mm) QPrintDialog B10 (31 x 44 <<)B10 (31 x 44 mm) QPrintDialog"B2 (500 x 707 <<)B2 (500 x 707 mm) QPrintDialog"B3 (353 x 500 <<)B3 (353 x 500 mm) QPrintDialog"B4 (250 x 353 <<)B4 (250 x 353 mm) QPrintDialog"B6 (125 x 176 <<)B6 (125 x 176 mm) QPrintDialog B7 (88 x 125 <<)B7 (88 x 125 mm) QPrintDialogB8 (62 x 88 <<)B8 (62 x 88 mm) QPrintDialogB9 (44 x 62 <<)B9 (44 x 62 mm) QPrintDialog$C5E (163 x 229 <<)C5E (163 x 229 mm) QPrintDialog$DLE (110 x 220 <<)DLE (110 x 220 mm) QPrintDialog(Folio (210 x 330 <<)Folio (210 x 330 mm) QPrintDialog*Ledger (432 x 279 <<)Ledger (432 x 279 mm) QPrintDialogOKOK QPrintDialog PrintPrint QPrintDialog5G0B0BL 2A5 Print all QPrintDialog"5G0B0BL 480?07>= Print range QPrintDialog,Tabloid (279 x 432 <<)Tabloid (279 x 432 mm) QPrintDialog6>=25@B US #10 (105x241 <<)%US Common #10 Envelope (105 x 241 mm) QPrintDialog;>:0;L=K9locally connected QPrintDialog=58725AB=>unknown QPrintDialog0:@KBLCloseQPrintPreviewDialog ;L1>< LandscapeQPrintPreviewDialog>@B@5BPortraitQPrintPreviewDialog PrintPrintQPrintPreviewDialogFormQPrintPropertiesWidgetFormQPrintSettingsOutput0@0<5B@KOptionsQPrintSettingsOutput5G0B0BL 2A5 Print allQPrintSettingsOutput"5G0B0BL 480?07>= Print rangeQPrintSettingsOutput...... QPrintWidgetForm QPrintWidget@8=B5@Printer QPrintWidget"8?:Type: QPrintWidget B<5=0CancelQProgressDialogB:@KBLOpen QPushButton@>25@8BLCheck QRadioButton*bad char class syntaxbad char class syntaxQRegExp(bad lookahead syntaxbad lookahead syntaxQRegExp*bad repetition syntaxbad repetition syntaxQRegExpL8A?>;L7>20;8AL >B:;NG5==K5 2>7<>6=>AB8disabled feature usedQRegExpD=5:>@@5:B=>5 2>AL<5@8G=>5 7=0G5=85invalid octal valueQRegExpB4>AB83=CB> 2=CB@5==55 >3@0=8G5=85met internal limitQRegExp:>BACBAB2C5B ;52K9 @0745;8B5;Lmissing left delimQRegExp$>H81:8 >BACBAB2CNBno error occurredQRegExp"=5>6840==K9 :>=5Funexpected endQRegExpK@>2=OBLLine up QScrollBar++ QShortcutAltAlt QShortcut 0704Back QShortcutBackspace Backspace QShortcutBacktabBacktab QShortcutBass Boost Bass Boost QShortcutBass Down Bass Down QShortcutBass UpBass Up QShortcutCapsLockCapsLock QShortcutCtrlCtrl QShortcutDelDel QShortcut#40;8BLDelete QShortcutDownDown QShortcutEndEnd QShortcut EnterEnter QShortcutEscEsc QShortcutF%1F%1 QShortcut71@0==>5 Favorites QShortcut ?5@54Forward QShortcut!?@02:0Help QShortcutHomeHome QShortcutInsIns QShortcutAB028BLInsert QShortcut0?CAB8BL (0) Launch (0) QShortcut0?CAB8BL (1) Launch (1) QShortcut0?CAB8BL (2) Launch (2) QShortcut0?CAB8BL (3) Launch (3) QShortcut0?CAB8BL (4) Launch (4) QShortcut0?CAB8BL (5) Launch (5) QShortcut0?CAB8BL (6) Launch (6) QShortcut0?CAB8BL (7) Launch (7) QShortcut0?CAB8BL (8) Launch (8) QShortcut0?CAB8BL (9) Launch (9) QShortcut0?CAB8BL (A) Launch (A) QShortcut0?CAB8BL (B) Launch (B) QShortcut0?CAB8BL (C) Launch (C) QShortcut0?CAB8BL (D) Launch (D) QShortcut0?CAB8BL (E) Launch (E) QShortcut0?CAB8BL (F) Launch (F) QShortcut >GB0 Launch Mail QShortcut@>83@K20B5;L Launch Media QShortcutLeftLeft QShortcut.>A?@>8725AB8 A;54CNI55 Media Next QShortcut>A?@>872545=85 Media Play QShortcut0>A?@>8725AB8 ?@54K4CI55Media Previous QShortcut 0?8AL Media Record QShortcut4AB0=>28BL 2>A?@>872545=85 Media Stop QShortcut5=NMenu QShortcutMetaMeta QShortcut5BNo QShortcutNumLockNumLock QShortcutB:@KBL URLOpen URL QShortcut PausePause QShortcut PgDownPgDown QShortcutPgUpPgUp QShortcut PrintPrint QShortcut1=>28BLRefresh QShortcut ReturnReturn QShortcut RightRight QShortcutScrollLock ScrollLock QShortcut >8A:Search QShortcut ShiftShift QShortcut SpaceSpace QShortcut56C@=K9 @568<Standby QShortcut!B>?Stop QShortcut SysReqSysReq QShortcutTabTab QShortcutTreble Down Treble Down QShortcutTreble Up Treble Up QShortcutUpUp QShortcut"8H5 Volume Down QShortcutK:;NG8BL 72C: Volume Mute QShortcut @><G5 Volume Up QShortcut0Yes QShortcut B<5=0CancelQSql&B<5=8BL 87<5=5=8O?Cancel your edits?QSql>4B25@48BLConfirmQSql#40;8BLDeleteQSql&#40;8BL MBC 70?8AL?Delete this record?QSqlAB028BLInsertQSql5BNoQSql(!>E@0=8BL 87<5=5=8O? Save edits?QSql1=>28BLUpdateQSql0YesQSql @>:@CB8BL 2;52> Scroll LeftQTabBar"@>:@CB8BL 2?@02> Scroll RightQTabBar&>?8@>20BL&Copy QTextControl&AB028BL&Paste QTextControl&>2B>@8BL&Redo QTextControl&B<5=8BL&Undo QTextControl2!:>?8@>20BL &04@5A AAK;:8Copy &Link Location QTextControl&K@570BLCu&t QTextControl#40;8BLDelete QTextControlK45;8BL 2A5 Select All QTextControlB:@KBLOpen QToolButton>2B>@8BLRedo QUndoGroupB<5=8BLUndo QUndoGroup <=5B> QUndoModel>2B>@8BLRedo QUndoStackB<5=8BLUndo QUndoStack:5 <>3C ?>:070BL AAK;:C (URL)Cannot show URL QWebFrame$$09; =5 ACI5AB2C5BFile does not exist QWebFrame"0?@>A 1;>:8@>20=Request blocked QWebFrame0?@>A >B<5=5=Request cancelled QWebFrameK15@8B5 D09; Choose FileQWebPage>?8@>20BLCopyQWebPage&>?8@>20BL :0@B8=:C Copy ImageQWebPage">?8@>20BL AAK;:C Copy LinkQWebPageK@570BLCutQWebPage 0704Go BackQWebPage ?5@54 Go ForwardQWebPage3=>@8@>20BLIgnoreQWebPage3=>@8@>20BL Ignore Grammar context menu itemIgnoreQWebPage(5B 2K1@0==KE D09;>2No file selectedQWebPageB:@KBL D@59< Open FrameQWebPage B:@KBL :0@B8=:C Open ImageQWebPageB:@KBL AAK;:C Open LinkQWebPage(B:@KBL 2 =>2>< >:=5Open in New WindowQWebPageAB028BLPasteQWebPage1=>28BLReloadQWebPage!1@>A8BLResetQWebPage$!>E@0=8BL :0@B8=:C Save ImageQWebPage&!>E@0=8BL AAK;:C... Save Link...QWebPage!B>?StopQWebPageB?@028BLSubmitQWebPageB?@028BLQSubmit (input element) alt text for elements with no alt, title, or valueSubmitQWebPage'B> MB>? What's This?QWhatsThisAction*QWidget &$8=8H&FinishQWizard&!?@02:0&HelpQWizard&?5@54&NextQWizard&?5@54 >&Next >QWizard< &0704< &BackQWizard B<5=0CancelQWizard@8<5=8BLCommitQWizard@>4>;68BLContinueQWizard025@H8BLDoneQWizard 0704Go BackQWizard!?@02:0HelpQWizard%1 - [%2] %1 - [%2] QWorkspace&0:@KBL&Close QWorkspace&5@5<5AB8BL&Move QWorkspace&>AAB0=>28BL&Restore QWorkspace& 07<5@&Size QWorkspace4>AAB0=>28BL 87 70&3>;>2:0&Unshade QWorkspace0:@KBLClose QWorkspace &0725@=CBL Ma&ximize QWorkspace&!25@=CBL Mi&nimize QWorkspace!25@=CBLMinimize QWorkspace>AAB0=>28BL Restore Down QWorkspace*!25@=CBL 2 70&3>;>2>:Sh&ade QWorkspaceA5340 &=025@EC Stay on &Top QWorkspace?@8 GB5=88 XML-B530 >6840;AO ?0@0<5B@ encoding 8;8 ?0@0<5B@ standaloneYencoding declaration or standalone declaration expected while reading the XML declarationQXmlferror in the text declaration of an external entity3error in the text declaration of an external entityQXml~2 ?@>F5AA5 3@0<<0B8G5A:>3> @071>@0 :><<5=B0@8O ?@>87>H;0 >H81:0$error occurred while parsing commentQXmlf2 ?@>F5AA5 3@0<<0B8G5A:>3> @071>@0 ?@>87>H;0 >H81:0$error occurred while parsing contentQXml2 ?@>F5AA5 3@0<<0B8G5A:>3> @071>@0 B8?0 4>:C<5=B0 ?@>87>H;0 >H81:05error occurred while parsing document type definitionQXmlx2 ?@>F5AA5 3@0<<0B8G5A:>3> @071>@0 M;5<5=B0 ?@>87>H;0 >H81:0$error occurred while parsing elementQXmlt2 ?@>F5AA5 3@0<<0B8G5A:>3> @071>@0 AAK;:8 ?@>87>H;0 >H81:0&error occurred while parsing referenceQXmlB>H81:0 8=8F88@>20=0 ?>;L7>20B5;5<error triggered by consumerQXmlvexternal parsed general entity reference not allowed in DTD;external parsed general entity reference not allowed in DTDQXmlexternal parsed general entity reference not allowed in attribute valueGexternal parsed general entity reference not allowed in attribute valueQXmlhinternal general entity reference not allowed in DTD4internal general entity reference not allowed in DTDQXml4=5:>@@5:B=>5 8<O 48@5:B82K'invalid name for processing instructionQXml>6840;AO A8<2>;letter is expectedQXmlP>?@545;5= 1>;55, G5< >48= B8? 4>:C<5=B>2&more than one document type definitionQXml$>H81:8 >BACBAB2CNBno error occurredQXml&@5:C@A82=K5 >1J5:BKrecursive entitiesQXml`?@8 GB5=88 XML-B530 >6840;AO ?0@0<5B@ standaloneAstandalone declaration expected while reading the XML declarationQXml>BACBAB2C5B B53 tag mismatchQXml$=5>6840==K9 A8<2>;unexpected characterQXml.=5>6840==K9 :>=5F D09;0unexpected end of fileQXmlTunparsed entity reference in wrong context*unparsed entity reference in wrong contextQXmlZ?@8 GB5=88 XML-B530 >6840;AO ?0@0<5B@ version2version expected while reading the XML declarationQXmlT=5:>@@5:B=>5 7=0G5=85 ?0@0<5B@0 standalone&wrong value for standalone declarationQXml03;CH8BLMuted VolumeSlider@><:>ABL: %1% Volume: %1% VolumeSlider ) , qutim-0.2.0/languages/ru/binaries/growlnotification.qm0000644000175000017500000000512211231555211024600 0ustar euroelessareuroelessar2>9 D09;Select sound fileGrowlNotificationLayer... GrowlSettings5=L @>645=8OBirthay GrowlSettings>=B0:B 2KH5;Contact offline GrowlSettings>=B0:B 2 A5B8Contact online GrowlSettings(:;NG8BL C254><;5=8OEnabled GrowlSettingsForm GrowlSettings$E>4OI55 A>>1I5=85Incoming message GrowlSettings4#254><;OBL > 4=OE @>645=8ONotify about birthdays GrowlSettings:#254><;OBL > 70?@>A0E AB0BCA0Notify about custom requests GrowlSettings4#254><;OBL > A<5=5 AB0BCA0Notify about status changes GrowlSettingsB#254><;OBL > =018@05<>< A>>1I5=88Notify when contact is typing GrowlSettingsJ#254><;OBL > 1;>:8@>20==KE A>>1I5=8OENotify when message is blocked GrowlSettings>#254><;OBL > ?@8=OB>< A>>1I5=88Notify when message is recieved GrowlSettings6#254><;OBL > 2KE>45 87 A5B8Notify when user came offline GrowlSettings2#254><;OBL > 2E>45 2 A5BLNotify when user came online GrowlSettings&AE>4OI55 A>>1I5=85Outgoing message GrowlSettings#254><;5=8OPop-ups GrowlSettings 2C:8Sounds GrowlSettings0?CA: qutIMStartup GrowlSettings !B0BCA 87<5=8;AO Status change GrowlSettings"!8AB5<=K5 A>1KB8O System Event GrowlSettings!1@>A8BLreset GrowlSettings%1QObject801;>:8@>20=> A>>1I5=85 : %1Blocked message : %1QObject5G0B05BTypingQObject.A53>4=O 5=L  >645=8O!!has birthday today!!QObject ) , qutim-0.2.0/languages/ru/binaries/ubuntunotify.qm0000644000175000017500000000131111225627111023610 0ustar euroelessareuroelessar:8@>20==>5 A>>1I5=85 >B %1Blocked message from %1UbuntuNotificationLayer!>>1I5=85 >B %1Message from %1UbuntuNotificationLayer6!8AB5<=>5 A>>1I5=85 >B %1: System message from %1: UbuntuNotificationLayer2?@074=C5B 45=L @>645=89!!has birthday today!!UbuntuNotificationLayerqutIM 70?CI5=qutIM is startedUbuntuNotificationLayer ) , qutim-0.2.0/languages/ru/binaries/floaties.qm0000644000175000017500000000022711227461044022653 0ustar euroelessareuroelessar=B0:B Show floatiesFloatiesPluginjVCardqutim-0.2.0/languages/ru/binaries/mrim.qm0000644000175000017500000005603411254033113022010 0ustar euroelessareuroelessarMM>B#@0_A0B0C0D1E1OF1G1H1I2P2lQ2R2S2T3,U3\V3W3X3Y4`4ya4;=)O|;$$$$$U%$GG?gHY)HY60HDQ<KS,Y@i}EE{6GGH?֍֍֍PH?9+8E+i8%+F<H5@)O@`fd :9M%rN'b(Q(93'B}cCHNDHx)J6J6KdqKdM NHOyIOcOiSIPS+SĘK=Tlq<TT7TKhYa>[Z,,NZFN^h+j: / OjZDZ.iZ ;\~n $Lh'I1w 5 QLkNJNdJ\:!J#n4 6}aB. >' >B| 0 _ HeA* X-.i Q Yh z9 "C -zCQ :B >& R zZJ Y*  _rGh gQ @.& *  *; Al ՚8 uJ W:o ^5/ h^- O s# AI . d& 1#zcF"t-Wt-t8.u+.6ӅhӅ9$:(A'k7Em3"|>V(iRVEmail :>B>@K9 2K 225;8 =525@=K9 8;8 ?CAB>9!(Email you entered is not valid or empty!AddContactWidget525@=K9 emailIncorrect emailAddContactWidget>1028BLAddAddContactWidgetClass.>1028BL 2 :>=B0:B-;8ABAdd contact to listAddContactWidgetClass$>1028BL 2 3@C??C: Add to group:AddContactWidgetClass E-mail :>=B0:B0:Contact email:AddContactWidgetClass8: :>=B0:B0:Contact nickname:AddContactWidgetClass><:Home:AddNumberWidget>18;L=K9:Mobile:AddNumberWidget ><5@0 B5;5D>=>2 Phone numbersAddNumberWidget!>E@0=8BLSaveAddNumberWidget 01>B0:Work:AddNumberWidgetFContactDetailsMContactDetails5B 020B0@K No avatarContactDetails <age>ContactDetailsClass<birthday> ContactDetailsClass<email>ContactDetailsClass<living place>ContactDetailsClass <name>ContactDetailsClass<nickname> ContactDetailsClass <sex>ContactDetailsClass<surname> ContactDetailsClass<zodiac>ContactDetailsClass>1028BL... Add contactContactDetailsClass>7@0AB:Age:ContactDetailsClass 20B0@AvatarContactDetailsClass5=L @>645=8O: Birthday:ContactDetailsClass0:@KBLCloseContactDetailsClass5B0;8 :>=B0:B0Contact detailsContactDetailsClassE-Mail:ContactDetailsClass"5AB> 68B5;LAB20: Living place:ContactDetailsClass<O:Name:ContactDetailsClass8:: Nickname:ContactDetailsClass5B 020B0@K No avatarContactDetailsClass.5@A>=0;L=0O 8=D>@<0F8O Personal dataContactDetailsClass>;:Sex:ContactDetailsClass$0<8;8O:Surname:ContactDetailsClass1=>28BLUpdateContactDetailsClass=0: 7>480:0: Zodiac sign:ContactDetailsClass#G5B=0O 70?8ALAccount EditAccount!>548=5=85 Connection EditAccount<7<=5=8BL =0AB@>9:8 %1 ?@>D8;OEdit %1 account settings EditAccount 7<5=8BL 0::0C=B Edit account EditAccount8A?>;L7>20BL >1I85 =0AB@>9:8Use profile settings EditAccount@8=OBLAcceptFileTransferRequestWidget@ #:068B5 :C40 A>E@0=8BL D09;K(K)Choose location to save file(s)FileTransferRequestWidgetB:;>=8BLDeclineFileTransferRequestWidget<O D09;0 File nameFileTransferRequestWidget(5@540G0 D09;0 >B %1File transfer request from %1FileTransferRequestWidget$09;(K):File(s):FileTransferRequestWidget:=> G0B0FormFileTransferRequestWidgetB:From:FileTransferRequestWidget  07<5@SizeFileTransferRequestWidget A53>: Total size:FileTransferRequestWidget/A/secFileTransferWidget B<5=0CancelFileTransferWidget0:@KBLCloseFileTransferWidget<0:@KBL ?> 7025@H5=88 ?5@540G8&Close window after tranfer is finishedFileTransferWidget!!Done!FileTransferWidget5@540=>:Done:FileTransferWidget 07<5@: File size:FileTransferWidget"5@540BL D09;: %1File transfer with: %1FileTransferWidget $09;: Filename:FileTransferWidget:=> G0B0FormFileTransferWidget$>;CG5=85 D09;0...Getting file...FileTransferWidget@>H;> 2@5<5=8: Last time:FileTransferWidgetB:@KBLOpenFileTransferWidgetAB0;>AL:Remained time:FileTransferWidget"5@540G0 D09;0...Sending file...FileTransferWidget!:>@>ABL:Speed:FileTransferWidget !B0BCA ?5@540G8:Status:FileTransferWidget6840=85... Waiting...FileTransferWidget$A=>2=K5 =0AB@>9:8GeneralSettingsGeneralSettingsX>AAB0=02;820BL AB0BCA ?@8 AB0@B5 ?@8;>65=8O%Restore status at application's startGeneralSettings<>:07K20BL B5;5D>==K5 :>=B0:BKShow phone contactsGeneralSettingsV>:07K20BL B5:AB AB0BCA0 2 A?8A:5 :>=B0:B>2 Show status text in contact listGeneralSettingsE-mail:E-mail:LoginFormClass2B>@870F8O LoginFormLoginFormClass0@>;L: Password:LoginFormClass>1028BL... Add contact MRIMClient.>1028BL =><5@ B5;5D>=0Add phone number MRIMClient>1028BL Add to list MRIMClient:0?@>A 02B>@870F88 ?@8=OB >B "Authorization request accepted by  MRIMClient2B>@87>20BLAuthorize contact MRIMClientF?5@0F8O A :>=B0:B ;8AB>< =5C40G=0!Contact list operation failed! MRIMClient#40;8BL :>=B0:BDelete contact MRIMClient4>AB83=CB ?@545; 2 3@C??5!Group limit reached! MRIMClient4=CB@5==OO >H81:0 A5@25@0!Internal server error! MRIMClient8#:070=0 =525@=0O 8=D>@<0F8O!Invalid info provided! MRIMClient8A5< 2 OI8:5:Messages in mailbox:  MRIMClient5@5<5AB8BL Move to group MRIMClient\5B 4>ABC?=KE 4;O 20A MPOP A5AA89, 8728=8B5...+No MPOP session available for you, sorry... MRIMClient05B B0:>3> ?>;L7>20B5;O! No such user! MRIMClientB:@KBL OI8: Open mailbox MRIMClientr>60;C9AB0, 02B>@87C9B5 8 4>102LB5 <5=O! !?0A81>! Email: >Pls authorize and add me to your contact list! Thanks! Email:  MRIMClient*5@58<5=>20BL :>=B0:BRename contact MRIMClient*0?@>A8BL 02B>@870F8NRequest authorization MRIMClientA:0BL...Search contacts MRIMClientB?@028BL !!Send SMS MRIMClient^!5@25@ 70:@K; A>548=5=85 157 C:070=8O ?@8G8=...2Server closed the connection for unknown reason... MRIMClient!5@25@ 70:@K; A>548=5=85. @C3>9 :;85=B ?>4:;NG8;AO A MB8< 65 ;>38=><!GServer closed the connection. Another client with same login connected! MRIMClient`!5@25@ 70:@K; A>548=5=85. H81:0 0CB5=B8D8:0F88!4Server closed the connection. Authentication failed! MRIMClient728=8B5, => =8G53> =5 =0945=> :( >?KB09B5AL ?>8A:0BL A 4@C38<8 ?0@0<5B@0<8GB5=>: %1Unread emails: %1 MRIMClient5 ?@>GB5=>:Unread messages:  MRIMClientL>;L7>20B5;L %1 70?@>A8; 02B>@870F8N: %User %1 is requesting authorization:  MRIMClient8>;L7>20B5;L C65 ACI5AB2C5B!User already exists! MRIMClient BMRIMCommonUtils 09B GBMRIMCommonUtils 109B KBMRIMCommonUtils 09B MBMRIMCommonUtils">7<>6=K9 :;85=B:Possible client: MRIMContact$5@58<5=>20=85 %1 Renaming %1 MRIMContactp0 =5 <>65B5 ?5@58<5=>2K20BL :>=B0:B, ?>:0 2K >B:;NG5=K!0You can't rename a contact while you're offline! MRIMContact&"5;5D>==K5 :>=B0:BKPhone contactsMRIMContactList Email:Email:MRIMLoginWidgetClass":=> 2E>40 2 MRIMMRIMLoginWidgetMRIMLoginWidgetClass0@>;L: Password:MRIMLoginWidgetClass(0AB@>9:8 A>548=5=8OConnection settingsMRIMPluginSystem$A=>2=K5 =0AB@>9:8General settingsMRIMPluginSystem\5@5:40G0 D09;0 >B %1 =5 <>65B 1KBL 2K?>;=5=0!4File transfer request from %1 couldn't be processed! MRIMProto"DD;09= A>>1I5=8OOffline message  MRIMProtob>60;C9AB0, 02B>@87C9B5 8 4>102LB5 <5=O! !?0A81>!6Pls authorize and add me to your contact list! Thanks! MRIMProto N1>9AnyMRIMSearchWidget ?@5;LAprilMRIMSearchWidget 23CABAugustMRIMSearchWidget5:01@LDecemberMRIMSearchWidget$52@0;LFebruaryMRIMSearchWidget5=A:89FemaleMRIMSearchWidget /=20@LJanuaryMRIMSearchWidgetN;LJulyMRIMSearchWidgetN=LJuneMRIMSearchWidgetC6A:>9MaleMRIMSearchWidget0@BMarchMRIMSearchWidget09MayMRIMSearchWidget >O1@LNovemberMRIMSearchWidget:BO1@LOctoberMRIMSearchWidget!5=BO1@L SeptemberMRIMSearchWidget!B@5;5F The ArcherMRIMSearchWidget5AK The BalanceMRIMSearchWidget "5;5FThe BullMRIMSearchWidget>75@>3 The CapricornMRIMSearchWidget 0:The CrabMRIMSearchWidget K1KThe FishMRIMSearchWidget52The LionMRIMSearchWidget25=The RamMRIMSearchWidget!:>@?8>= The ScorpionMRIMSearchWidget;87=5FK The TwinsMRIMSearchWidget520 The VirginMRIMSearchWidget>4>;59The Water-bearerMRIMSearchWidgetL @mail.ru, @list.ru, @bk.ru, @inbox.ru& @mail.ru, @list.ru, @bk.ru, @inbox.ruMRIMSearchWidgetClass11MRIMSearchWidgetClass1010MRIMSearchWidgetClass1111MRIMSearchWidgetClass1212MRIMSearchWidgetClass1313MRIMSearchWidgetClass1414MRIMSearchWidgetClass1515MRIMSearchWidgetClass1616MRIMSearchWidgetClass1717MRIMSearchWidgetClass1818MRIMSearchWidgetClass1919MRIMSearchWidgetClass22MRIMSearchWidgetClass2020MRIMSearchWidgetClass2121MRIMSearchWidgetClass2222MRIMSearchWidgetClass2323MRIMSearchWidgetClass2424MRIMSearchWidgetClass2525MRIMSearchWidgetClass2626MRIMSearchWidgetClass2727MRIMSearchWidgetClass2828MRIMSearchWidgetClass2929MRIMSearchWidgetClass33MRIMSearchWidgetClass3030MRIMSearchWidgetClass3131MRIMSearchWidgetClass44MRIMSearchWidgetClass55MRIMSearchWidgetClass66MRIMSearchWidgetClass77MRIMSearchWidgetClass88MRIMSearchWidgetClass99MRIMSearchWidgetClass>7@0AB >B: Age from:MRIMSearchWidgetClass N1>9AnyMRIMSearchWidgetClass5=L @>645=8O: Birthday:MRIMSearchWidgetClass!B@0=0:Country:MRIMSearchWidgetClass 5=L:Day:MRIMSearchWidgetClass E-MailE-MailMRIMSearchWidgetClass 5AOF:Month:MRIMSearchWidgetClass<O:Name:MRIMSearchWidgetClass8:: Nickname:MRIMSearchWidgetClassl=8<0=85: ?>8A: 4>ABC?5= B>;L:> 4;O A;54CNI8E 4><5=>2:5Note: search is available only for following domains:MRIMSearchWidgetClass1;0ABL:Region:MRIMSearchWidgetClass>8A: :>=B0:B0Search contactsMRIMSearchWidgetClass>8A:>20O D>@<0 Search formMRIMSearchWidgetClass(A:0BL B>;L:> 2 A5B8Search only online contactsMRIMSearchWidgetClass>;:Sex:MRIMSearchWidgetClass$>:07K20BL 020B0@K Show avatarsMRIMSearchWidgetClass0G0BL ?>8A:! Start search!MRIMSearchWidgetClass$0<8;8O:Surname:MRIMSearchWidgetClass>480::Zodiac:MRIMSearchWidgetClass4>toMRIMSearchWidgetClass@C??0:Group:MoveToGroupWidget5@5<5AB8BLMoveMoveToGroupWidget(5@5<5AB8BL 2 3@C??CMove contact to groupMoveToGroupWidget5@5<5AB8BL!Move!MoveToGroupWidget>2>9 8<O: New name: RenameWidgetOK RenameWidget5@58<5=>20BLRename RenameWidget*5@58<5=>20BL :>=B0:BRename contact RenameWidget ><C: Reciever: SMSWidgetB?@028BL !!Send SMS SMSWidgetB?@028BL!Send! SMSWidget TextLabel SMSWidgetFSearchResultsWidgetMSearchResultsWidget >1028BL :>=B0:B Add contactSearchResultsWidgetClass>7@0ABAgeSearchResultsWidgetClass E-MailE-MailSearchResultsWidgetClass=D>@<0F8OInfoSearchResultsWidgetClass<ONameSearchResultsWidgetClass8:NickSearchResultsWidgetClass" 57C;LB0BK ?>8A:0Search resultsSearchResultsWidgetClass>;SexSearchResultsWidgetClass$0<8;8OSurnameSearchResultsWidgetClass&@>:A8 ?> C<>;G0=8N Default proxySettingsWidget$%>AB MRIM A5@25@0:MRIM server host:SettingsWidgetClass$>@B MRIM A5@25@0:MRIM server port:SettingsWidgetClass0@>;L: Password:SettingsWidgetClass%>AB ?@>:A8: Proxy host:SettingsWidgetClass>@B ?@>:A8: Proxy port:SettingsWidgetClass"8? proxy: Proxy type:SettingsWidgetClass>38= ?@>:A8:Proxy username:SettingsWidgetClass0AB@>9:8SettingsWidgetSettingsWidgetClass&A?>;L7>20BL ?@>:A8 Use proxySettingsWidgetClass?? StatusManager;>9Angry StatusManager04=8F0Ass StatusManager><0At home StatusManager0 @01>B5At work StatusManager B>HQ;Away StatusManager820A8:Beer StatusManager>D5Coffee StatusManager>B>2:0Cooking StatusManager ;52>!Coool! StatusManager5A5;NAL %)Crazy %) StatusManager>;C<5AOFCrescent StatusManager ;0GCCrying StatusManager5?@5AA8O Depression StatusManager5 15A?>:>8BLDo Not Disturb StatusManager#BODuck StatusManager;>9Evil StatusManager%! F*ck you! StatusManager$830Figa StatusManager>B>2 ?>1>;B0BL Free For Chat StatusManager>70Goat StatusManager!5@45G:>Heart StatusManager %8??8Hippy StatusManager >30Horns StatusManager/ :@5254:>! I'm a shrimp! StatusManager / 8=>?;0=5BO=:>! I'm an alien! StatusManager/ ?>B5@O;AO :( I'm lost :( StatusManager C=825@5In the university StatusManager52848<K9 Invisible StatusManager BC;ECKtulhu StatusManagerLOL StatusManager<Lunch StatusManager C7K:0Music StatusManager >;65= A4>E=CBL! Must die!! StatusManagerB:;NG5=Offline StatusManager0 A>25I0=88On the meeting StatusManager0 B5;5D>=5 On the phone StatusManager  A5B8Online StatusManager5G5@8=:0!Party! StatusManager 3@0NPlaying StatusManager  0:5B0Rocket StatusManager (:>;0School StatusManager >?0B0Shovel StatusManager >;5NSick StatusManager '5@5?Skull StatusManager!?;NSleeping StatusManager K1NALSmiley StatusManagerC@NSmoke StatusManager 5;:0Squirrel StatusManager!N@?@87 Surprised StatusManager/7K:Tongue StatusManager ;>75BWC StatusManager@>3C;:0Walking StatusManager 45 O? Where am I? StatusManager,# 20A =5 25@=K9 =><5@!You have the wrong number! StatusManager:;NG8BL Xtraz Enable Xtraz XtrazSettings:=> G0B0Form XtrazSettings=D>@<0F8O: Information: XtrazSettingsXtraz ?0:5BK:Xtraz packages: XtrazSettings$0?@>A 02B>@870F88Authorization requestauthwidgetClass2B>@87>20BL AuthorizeauthwidgetClassB:;>=8BLRejectauthwidgetClassjVCard ) , qutim-0.2.0/languages/ru/binaries/icq.qm0000644000175000017500000017447611263623402021641 0ustar euroelessareuroelessarlsDoD P`o: p}* p}} 8>7 #d%n4`G=4Rf55`Y60i70y80 8GHNAHw9IAyJ J ֙J+J6J6KdSKtL7L| M5btM6bMMnD,M OMAM4OjzOjzqSPJP~P9QSSĘYSĘTT|TTUq7F VEVF>V?WVHV̌?WizqWizrWWWsYwkZg+ZvHZlZ~[I@\\t\\C_þe*hg84hnz"imxn(8"4Ȅ 1>VUWDјg~$:,ں9IQ&+Op4> b%%&&.N{Q?DwOυyUWT0N:+:70 9?77,g7jD0FE2bEH@MhIphIkjvt96h| F IvkG8A5Z8hR[< ~ ~s6o~6o~p7/ Nr Wu/iT91"g%h sj*~L:(.+b!+b,.߲1y4b8`$*8`<g=L|FGG4-0H@JT!TVze0EZhH1od>oF|tiv(D{c#2TW3j (b3tKW298?G?hshszV.aghg ~KFl#pGIƜ7+5A0Zq .jgפi~ T[s ^-Djfu gDg>q%q@um8~pvGOlNPl{ıIRBJF‰jêʄʸ4^?4.X4. khS;hjjql1 '| 1 =D~& Kjh Zz bv/ c  c eJ nA n9 ~H *AM wrP ~P < S jZ@ j   ׭j_< 8@ ^ ? %b Ie JVf NfF Rft Tf Vf wf {gZ {g, z} 'p( 1)1 CU| F G Ws c+ dh f g k# wǹ wǹ c* %2 % 85 /$)d /$l /K :Vr > >: >r J1 * 0 0Nt @ka 6 8 |ӄ 8J Ț Ho . Tx dv F 9 F M (} b1J \ L 3 ) ]R9 NRz YR Sn SnsU d$ d S" SD #/m #N 0EaQ 2.S B3j R?b Tdd dM ntYU sD vI# vI W&n W {"X H6 # 5 l m0 ma m m m n% nV n /. j Džn M^ M 4@ X} s 2z 2q Apc Asc Atc Aud AvdB E E( Tl 0M? P1. P u@W O %z '1 ( -a 52 >Pg N: R͊ R^ Vݭ fy j tM a x e H3B* 434 Su d hH ` d $ bsn S  -p Im@ Imu C: CD ( B uX  L w dqb &T6' 8 Z ] Z~ `>sK `>sW cB dt/ o;a o;a o;a qL qL& 8Qb T Tn Ĭz Ĭ٧ < ƍ 8 = A K<$QbbB.&!ru՟#$*#Vei''S+b!l+b!7drl7\G:zK~42sei JN#9NjZJ |~ʭ%)ʭ%^s G IC Gە-XfGgkGVk[m33m3t>(&&T%&TGj9QVNyi" 540:B8@>20=85 %1 Editing %1AccountEditDialog4>102;5=85 CG5B=KE 70?8A59AddAccountFormAddAccountFormClass0@>;L: Password:AddAccountFormClass !>E@0=8BL ?0@>;L Save passwordAddAccountFormClassUIN:AddAccountFormClass>=B0:BKContactSettingsContactSettingsClass>:07K20BL 7=0G>: "83=>@8@>20=8O", 5A;8 :>=B0:B 2 A?8A:5 83=>@8@>20=8O,Show "ignore" icon if contact in ignore listContactSettingsClass>:07K20BL 7=0G>: "=52848<>AB8", 5A;8 :>=B0:B 2 A?8A:5 =52848<>AB82Show "invisible" icon if contact in invisible listContactSettingsClass|>:07K20BL 7=0G>: "2848<>AB8", 5A;8 :>=B0:B 2 A?8A:5 2848<>AB8.Show "visible" icon if contact in visible listContactSettingsClassR>:07K20BL 7=0G>: @04>AB=K9/5=L  >645=8OShow birthday/happy iconContactSettingsClass8>:07K20BL E-AB0BCA :>=B0:B0Show contact xStatus iconContactSettingsClassZ>:07K20BL B5:AB E-AB0BCA0 2 A?8A:5 :>=B0:B>2+Show contact's xStatus text in contact listContactSettingsClass:>:07K20BL 7=0G>: 02B>@870F88Show not authorized iconContactSettingsClassB?@028BL D09; Send file FileTransfer.<b>B>H5; A:</b> %1<br>Away since: %1
QObjectD<b>=5H=89 IP:</b> %1.%2.%3.%4<br>#External ip: %1.%2.%3.%4
QObjectJ<b>=CB@5==89 IP:</b> %1.%2.%3.%4<br>#Internal ip: %1.%2.%3.%4
QObject6<b>54>ABC?5= A:</b> %1<br>N/A since: %1
QObjectP<b>@5<O 2 A5B8:</b> %1d %2h %3m %4s<br>'Online time: %1d %2h %3m %4s
QObjectD<b>>7<>6=K9 :;85=B:</b> %1</font>!Possible client: %1
QObject><b>>7<>6=K9 :;85=B:</b> %1<br>Possible client: %1
QObject><b>0B0 @538AB@0F88:</b> %1<br>Reg. date: %1
QObject*<b>=;09=:</b> %1<br>Signed on: %1
QObjectL<font size='2'><b>B>H5; A:</b> %1<br>(Away since: %1
QObjectp<font size='2'><b>=5H=89 IP:</b> %1.%2.%3.%4<br></font>9External ip: %1.%2.%3.%4
QObjectv<font size='2'><b>=CB@5==89 IP:</b> %1.%2.%3.%4<br></font>9Internal ip: %1.%2.%3.%4
QObjectr<font size='2'><b>>A;54=89 @07 1K; 2 A5B8:</b> %1</font>,Last Online: %1QObjectT<font size='2'><b>54>ABC?5= A:</b> %1<br>'N/A since: %1
QObjectn<font size='2'><b>@5<O 2 A5B8:</b> %1d %2h %3m %4s<br>6Online time: %1d %2h %3m %4s
QObjectA5 D09;K (*) All files (*)QObject>=B0:BKContactsQObjectICQ 3;02=K5 ICQ GeneralQObjectB:@KBL D09; Open FileQObject!B0BCAKStatusesQObject2B>@87>20BL AuthorizeacceptAuthDialogClassB:;>=8BLDeclineacceptAuthDialogClass2B>@870F8OacceptAuthDialogacceptAuthDialogClassJ">G=K5 =0AB@>9:8 AOL 4;O A?5F80;8AB>2AOL expert settings accountEdit@8<5=8BLApply accountEditCB5=B8D8:0F8OAuthentication accountEditJ2B><0B8G5A:8 ?>4:;NG0BLAO ?@8 AB0@B5Autoconnect on start accountEdit B<5=0Cancel accountEditClient build number: accountEditClient distribution number: accountEditClient id number: accountEdit Client id: accountEditClient lesser version: accountEditClient major version: accountEditClient minor version: accountEditForm accountEditHTTPHTTP accountEdit %>AB:Host: accountEdit0AB@>9:8 ICQ Icq settings accountEdit.>445@6820BL A>548=5=85Keep connection alive accountEdit2>@B 4;O ?5@540G8 D09;>2:Listen port for file transfer: accountEdit5BNone accountEdit:OK accountEdit0@>;L: Password: accountEdit >@B:Port: accountEdit @>:A8Proxy accountEdit.!>548=5=85 G5@57 ?@>:A8Proxy connection accountEdit SOCKS5SOCKS 5 accountEdit6!>E@0=OBL AB0BCA ?@8 2KE>45Save my status on exit accountEdit"!>E@0=8BL ?0@>;L:Save password: accountEdit57>?0A=K9 2E>4 Secure login accountEdit Seq first id: accountEdit !5@25@Server accountEdit"8?:Type: accountEdit"<O ?>;L7>20B5;O: User name: accountEditlogin.icq.com login.icq.com accountEdit>1028BL %1Add %1addBuddyDialog5@5<5AB8BLMoveaddBuddyDialog>1028BLAddaddBuddyDialogClass@C??0:Group:addBuddyDialogClass>:0;L=>5 8<O: Local name:addBuddyDialogClass >1028BL :>=B0:BaddBuddyDialogaddBuddyDialogClass<O:Name:addRenameDialogClass:OKaddRenameDialogClass5@=CBLAOReturnaddRenameDialogClass5@58<5=>20BLaddRenameDialogaddRenameDialogClass60<>@>65==0O CG5B=0O 70?8AL Suspended accountcloseConnection~>;8G5AB2> ?>;L7>20B5;59 A 40==>3> IP 04@5A0 4>AB83;> <0:A8<C<0K The users num connected from this IP has reached the maximum (reservation)closeConnection|#G5B=0O 70?8AL 70<>@>65=0 87-70 20H53> 2>7@0AB0 (2>7@0AB < 13)0Account suspended because of your age (age < 13)closeConnectionT@C3>9 :;85=B A MB8< =><5@>< 70HQ; 2 A5BL&Another client is loggin with this uincloseConnection2;>E>9 AB0BCA 107K 40==KEBad database statuscloseConnection";>E>9 AB0BCA DNSBad resolver statuscloseConnection52>7<>6=> 70@538AB@8@>20BLAO 2 ICQ. >60;C9AB0 ?>?@>1C9B5 70=>2> G5@57 =5A:>;L:> <8=CB=Can't register on the ICQ network. Reconnect in a few minutescloseConnection"H81:0 A>548=5=8OConnection ErrorcloseConnection6H81:0 A2O78 A 107>9 40==KE DB link errorcloseConnection4H81:0 70?@>A0 107K 40==KE DB send errorcloseConnection0#40;Q==0O CG5B=0O 70?8ALDeleted accountcloseConnection6@>A@>G5==0O CG5B=0O 70?8ALExpired accountcloseConnection65:>@@5:B=K9 =8: 8;8 ?0@>;LIncorrect nick or passwordcloseConnectionr=CB@5==OO >H81:0 :;85=B0 (=5?@028;L=K9 22>4 02B>@870F88)/Internal client error (bad input to authorizer)closeConnection"=CB@5==OO >H81:0Internal errorcloseConnection05459AB28B5;L=K9 SecurIDInvalid SecurIDcloseConnection>5459AB28B5;L=0O CG5B=0O 70?8ALInvalid accountcloseConnectionF5459AB28B5;L=K5 ?>;O 2 1075 40==KEInvalid database fieldscloseConnection>5459AB28B5;L=K9 =8: 8;8 ?0@>;LInvalid nick or passwordcloseConnection85A>2?045=85 =8:0 8;8 ?0@>;OMismatch nick or passwordcloseConnection25B 4>ABC?0 : 1075 40==KENo access to databasecloseConnection"5B 4>ABC?0 : DNSNo access to resolvercloseConnection8<8B G0AB>BK ?>4:;NG5=89 4>AB83=CB. >60;C9AB0, ?>?@>1C9B5 70=>2> G5@57 =5A:>;L:> <8=CBKRate limit exceeded (reservation). Please try to reconnect in a few minutescloseConnection8<8B G0AB>BK ?>4:;NG5=89 4>AB83=CB. >60;C9AB0, ?>?@>1C9B5 70=>2> G5@57 =5A:>;L:> <8=CB=Rate limit exceeded. Please try to reconnect in a few minutescloseConnection6@52KH5=> 2@5<O ?>4:;NG5=8OReservation timeoutcloseConnection0!5@28A 2@5<5==> >B:;NG5=Service temporarily offlinecloseConnection4!5@28A 2@5<5==> =54>ABC?5=Service temporarily unavailablecloseConnection~>;8G5AB2> ?>;L7>20B5;59 A 40==>3> IP 04@5A0 4>AB83;> <0:A8<C<0;L7C5B5 AB0@CN 25@A8N ICQ.  5:><5=4C5BAO >1=>2;5=85:You are using an older version of ICQ. Upgrade recommendedcloseConnectionnK 8A?>;L7C5B5 AB0@CN 25@A8N ICQ. 5>1E>48<> >1=>2;5=857You are using an older version of ICQ. Upgrade requiredcloseConnection4!>>1I5=85 >1 >BACBAB288 %1%1 away messagecontactListTreeL%1 G8B05B 20H5 A>>1I5=85 >1 >BACBAB288%1 is reading your away messagecontactListTreeB%1 G8B05B 20H5 E-AB0BCA A>>1I5=85#%1 is reading your x-status messagecontactListTree%1 E-AB0BCA%1 xStatus messagecontactListTree2@8=OBL 02B>@870F8N >B %1Accept authorization from %1contactListTree6>1028BL 2 A?8A>: :>=B0:B>2Add to contact listcontactListTree>>1028BL 2 A?8A>: 83=>@8@>20=8OAdd to ignore listcontactListTree:>1028BL 2 A?8A>: =52848<>AB8Add to invisible listcontactListTree6>1028BL 2 A?8A>: 2848<>AB8Add to visible listcontactListTree809B8/4>1028BL ?>;L7>20B5;59Add/find userscontactListTree@ 07@5H8BL :>=B0:BC 4>1028BL <5=OAllow contact to add mecontactListTree&2B>@870F8O ?@8=OB0Authorization acceptedcontactListTree*2B>@870F8O >B:;>=5=0Authorization declinedcontactListTree$0?@>A 02B>@870F88Authorization requestcontactListTree&7<5=8BL <>9 ?0@>;LChange my passwordcontactListTree5B0;8 :>=B0:B0Contact detailscontactListTreeN>=B0:B =5 ?>445@68205B ?5@540GC D09;>2&Contact does not support file transfercontactListTree2@>25@8BL AB0BCA :>=B0:B0Contact status checkcontactListTree.!:>?8@>20BL UIN 2 1CD5@Copy UIN to clipboardcontactListTree!>740BL 3@C??C Create groupcontactListTree#40;8BL %1 Delete %1contactListTree#40;8BL :>=B0:BDelete contactcontactListTree>#40;8BL 87 A?8A:0 83=>@8@>20=8ODelete from ignore listcontactListTree:#40;8BL 87 A?8A:0 =52848<>AB8Delete from invisible listcontactListTree6#40;8BL 87 A?8A:0 2848<>AB8Delete from visible listcontactListTree#40;8BL 3@C??C Delete groupcontactListTree(#40;8BL 3@C??C "%1"?Delete group "%1"?contactListTree* 540:B8@>20BL 70<5B:C Edit notecontactListTree"AB>@8O A>>1I5=8OMessage historycontactListTree"5@5<5AB8BL %1 2: Move %1 to:contactListTree(5@5<5AB8BL 2 3@C??C Move to groupcontactListTree>20O 3@C??0 New groupcontactListTree"0@>;L =5 87<5=5=Password is not changedcontactListTree,0@>;L CA?5H=> 87<5=5= Password is successfully changedcontactListTree$!?8A:8 ?@820B=>AB8 Privacy listscontactListTreeB@>G8B0BL A>>1I5=85 >1 >BACBAB288Read away messagecontactListTree @>G8B0BL AB0BCARead custom statuscontactListTreeH#40;8BL A51O 87 53> A?8A:0 :>=B0:B>2!Remove myself from contact's listcontactListTree*5@58<5=>20BL :>=B0:BRename contactcontactListTree(5@58<5=>20BL 3@C??C Rename groupcontactListTree&B?@028BL A>>1I5=85 Send messagecontactListTree$@C??>20O >B?@02:0 Send multiplecontactListTree<>A<>B@5BL/87<5=8BL <>8 40==K5View/change my detailscontactListTree0A 4>1028;8You were addedcontactListTree4><0at homecontactListTree=0 @01>B5at workcontactListTree5AB having lunchcontactListTree2 45?@5AA88 in depressioncontactListTree >B>H5;is awaycontactListTree=5 15A?>:>8BLis dndcontactListTree7;>9is evilcontactListTree3>B>2 ?>1>;B0BLis free for chatcontactListTree=52848<K9 is invisiblecontactListTree=54>ABC?5=is n/acontactListTree 70=OB is occupiedcontactListTree>B:;NG5= is offlinecontactListTree 2 A5B8 is onlinecontactListTree??customStatusDialog;>9AngrycustomStatusDialog 8=B5@=5B5BrowsingcustomStatusDialog5;0BusinesscustomStatusDialog>D5CoffeecustomStatusDialog 0<5@7ColdcustomStatusDialog ;0GCCryingcustomStatusDialogLN ?82> Drinking beercustomStatusDialog<EatingcustomStatusDialogA?C30=FearcustomStatusDialog@81>;5; Feeling sickcustomStatusDialog 3@0NGamingcustomStatusDialog 072;5:0NAL Having funcustomStatusDialog B@0=A?>@B5 In tansportcustomStatusDialog!;CH0N <C7K:CListening to musiccustomStatusDialog N1>2LLovecustomStatusDialogAB@5G0MeetingcustomStatusDialog BC0;5B5On WCcustomStatusDialog0 B5;5D>=5 On the phonecustomStatusDialog@>7PRO 7customStatusDialog5G5@8=:0PartycustomStatusDialog 8:=8:PicniccustomStatusDialog '8B0NReadingcustomStatusDialog!5:ASexcustomStatusDialog8=>ShootingcustomStatusDialog>:C?:8ShoppingcustomStatusDialog!?;NSleepingcustomStatusDialogC@NSmokingcustomStatusDialog !?>@BSportcustomStatusDialog #GCALStudyingcustomStatusDialogB@K20NALSurfingcustomStatusDialog$@8=8<0N 4CH/20==C Taking a bathcustomStatusDialog C<0NThinkingcustomStatusDialog #AB0;TiredcustomStatusDialog KBL 8;8 =5 1KBLTo be or not to becustomStatusDialog5G0B0NTypingcustomStatusDialog!<>B@N " Watching TVcustomStatusDialog 01>B0NWorkingcustomStatusDialog B<5=0CancelcustomStatusDialogClassK1@0BLChoosecustomStatusDialogClassE-AB0BCA Custom statuscustomStatusDialogClass:(0@8: @04>AB=K9/5=L  >645=8OSet birthday/happy flagcustomStatusDialogClassB>=B0:B 1C45B C40;5=. K C25@5=K?&Contact will be deleted. Are you sure?deleteContactDialogClass0#40;8BL 8AB>@8N :>=B0:B0Delete contact historydeleteContactDialogClass5BNodeleteContactDialogClass0YesdeleteContactDialogClass#40;8BL :>=B0:BdeleteContactDialogdeleteContactDialogClassA5 D09;K (*) All files (*)fileRequestWindow!>E@0=8BL D09; Save FilefileRequestWindow@8=OBLAcceptfileRequestWindowClassB:;>=8BLDeclinefileRequestWindowClass<O D09;0: File name:fileRequestWindowClass5@540G0 D09;0 File requestfileRequestWindowClass 07<5@ D09;0: File size:fileRequestWindowClassB:From:fileRequestWindowClassIP:fileRequestWindowClass1 BfileTransferWindow1 GBfileTransferWindow1 KBfileTransferWindow1 MBfileTransferWindow/A/sfileTransferWindow@8=OB>AcceptedfileTransferWindowBB:;>=5=> C40;5==K< ?>;L7>20B5;5<Declined by remote userfileTransferWindow >B>2>DonefileTransferWindow$5@540G0 D09;0: %1File transfer: %1fileTransferWindow@85<... Getting...fileTransferWindowB?@02:0... Sending...fileTransferWindow6840=85... Waiting...fileTransferWindow1/1fileTransferWindowClass B<5=0CancelfileTransferWindowClass"5:CI89 D09;: Current file:fileTransferWindowClass>B>2>:Done:fileTransferWindowClass 07<5@ D09;0: File size:fileTransferWindowClass5@540G0 D09;0 File transferfileTransferWindowClass $09;K:Files:fileTransferWindowClass@5<5=8 ?@>H;>: Last time:fileTransferWindowClassB:@KBLOpenfileTransferWindowClass"@5<5=8 >AB0;>AL:Remained time:fileTransferWindowClassIP >B?@028B5;O: Sender's IP:fileTransferWindowClass!:>@>ABL:Speed:fileTransferWindowClass!B0BCA:Status:fileTransferWindowClass>?>;=8B5;L=> Additional icqAccount><0At Home icqAccount0 @01>B5At Work icqAccount B>H5;Away icqAccount$ 0AH8@5==K9 AB0BCA Custom status icqAccount5 15A?>:>8BLDND icqAccount5?@5AA8O Depression icqAccount;>9Evil icqAccount>B>2 ?>1>;B0BL Free for chat icqAccount52848<K9 Invisible icqAccount$52848<K9 4;O 2A5EInvisible for all icqAccountN52848<K9 B>;L:> 4;O A?8A:0 =52848<>AB8!Invisible only for invisible list icqAccount<Lunch icqAccount54>ABC?5=NA icqAccount 0=OBOccupied icqAccountB:;NG5=Offline icqAccount  A5B8Online icqAccount @820B=K9 AB0BCAPrivacy status icqAccount 848<K9 4;O 2A5EVisible for all icqAccountF848<K9 B>;L:> 4;O A?8A:0 :>=B0:B>2Visible only for contact list icqAccountF848<K9 B>;L:> 4;O A?8A:0 2848<>AB8Visible only for visible list icqAccountFG8B05B 20H5 A>>1I5=85 >1 >BACBAB288is reading your away message icqAccount<G8B05B 20H5 E-AB0BCA A>>1I5=85 is reading your x-status message icqAccount-icqSettingsClass8=0G>: CG5B=>9 70?8A8 2 B@55Account button and tray iconicqSettingsClass>?>;=8B5;L=>AdvancedicqSettingsClass Apple RomanicqSettingsClassBig5icqSettingsClass Big5-HKSCSicqSettingsClass,45=B8D8:0B>@ :;85=B0: Client ID:icqSettingsClass8!?8A>: 2>7<>6=>AB59 :;85=B0:Client capability list:icqSettingsClasst>48@>2:0: (4;O A>>1I5=89 2 A5B8 >1KG=> 8A?>;L7C5BAO UTF8)=Codepage: (note that online messages use utf-8 in most cases)icqSettingsClass<5 ?>AK;0BL 70?@>AK =0 020B0@K Don't send requests for avatartsicqSettingsClassEUC-JPicqSettingsClassEUC-KRicqSettingsClass GB18030-0icqSettingsClassIBM 850icqSettingsClassIBM 866icqSettingsClassIBM 874icqSettingsClassICQ 2002/2003aicqSettingsClass ICQ 2003b ProicqSettingsClassICQ 5icqSettingsClassICQ 5.1icqSettingsClassICQ 6icqSettingsClass ICQ Lite 4icqSettingsClass ISO 2022-JPicqSettingsClass ISO 8859-1icqSettingsClass ISO 8859-10icqSettingsClass ISO 8859-13icqSettingsClass ISO 8859-14icqSettingsClass ISO 8859-15icqSettingsClass ISO 8859-16icqSettingsClass ISO 8859-2icqSettingsClass ISO 8859-3icqSettingsClass ISO 8859-4icqSettingsClass ISO 8859-5icqSettingsClass ISO 8859-6icqSettingsClass ISO 8859-7icqSettingsClass ISO 8859-8icqSettingsClass ISO 8859-9icqSettingsClass Iscii-BngicqSettingsClass Iscii-DevicqSettingsClass Iscii-GjricqSettingsClass Iscii-KndicqSettingsClass Iscii-MlmicqSettingsClass Iscii-OriicqSettingsClass Iscii-PnjicqSettingsClass Iscii-TlgicqSettingsClass Iscii-TmlicqSettingsClass JIS X 0201icqSettingsClass JIS X 0208icqSettingsClassKOI8-RicqSettingsClassKOI8-UicqSettingsClassMac ICQicqSettingsClassA=>2=K5MainicqSettingsClass MuleLao-1icqSettingsClass"5@A8O ?@>B>:>;0:Protocol version:icqSettingsClassQIP 2005icqSettingsClass QIP InfiumicqSettingsClassROMAN8icqSettingsClassL2B><0B8G5A:8 ?>4:;NG0BLAO ?@8 70?CA:5Reconnect after disconnecticqSettingsClass Shift-JISicqSettingsClassL>:07K20BL 7=0G>: @0AH8@5==>3> AB0BCA0Show custom status iconicqSettingsClass<>:07K20BL ?>A;54=55 2K1@0==>5Show last choosenicqSettingsClass2>:07K20BL 7=0G>: AB0BCA0Show main status iconicqSettingsClassTIS-620icqSettingsClassTSCIIicqSettingsClassUTF-16icqSettingsClassUTF-16BEicqSettingsClassUTF-16LEicqSettingsClassUTF-8icqSettingsClassWINSAMI2icqSettingsClass Windows-1250icqSettingsClass Windows-1251icqSettingsClass Windows-1252icqSettingsClass Windows-1253icqSettingsClass Windows-1254icqSettingsClass Windows-1255icqSettingsClass Windows-1256icqSettingsClass Windows-1257icqSettingsClass Windows-1258icqSettingsClassICQ icqSettingsicqSettingsClassqutIMicqSettingsClassjVCard$@C??>20O >B?@02:0 Send multiplemultipleSending11multipleSendingClassB?@028BLSendmultipleSendingClass!B>?StopmultipleSendingClass$@C??>20O >B?@02:0multipleSendingmultipleSendingClassCB5=B8D8:0F8OAuthenticationnetworkSettingsClass!>548=5=85 ConnectionnetworkSettingsClassHTTPHTTPnetworkSettingsClass %>AB:Host:networkSettingsClass.>445@6820BL A>548=5=85Keep connection alivenetworkSettingsClass2>@B 4;O ?5@540G8 D09;>2:Listen port for file transfer:networkSettingsClass5BNonenetworkSettingsClass0@>;L: Password:networkSettingsClass >@B:Port:networkSettingsClass @>:A8ProxynetworkSettingsClass.!>548=5=85 G5@57 ?@>:A8Proxy connectionnetworkSettingsClass SOCKS5SOCKS 5networkSettingsClass57>?0A=K9 2E>4 Secure loginnetworkSettingsClass !5@25@ServernetworkSettingsClass"8?:Type:networkSettingsClass"<O ?>;L7>20B5;O: User name:networkSettingsClasslogin.icq.com login.icq.comnetworkSettingsClass!5BLnetworkSettingsnetworkSettingsClass B<5=0CancelnoteWidgetClass:OKnoteWidgetClass noteWidgetnoteWidgetClass\H81:0 @01>BK A A5BLN (=0?@. >B:;NG5= :015;L).ZAn error occurred with the network (e.g., the network cable was accidentally plugged out). oscarProtocol89! 58725AB=0O >H81:0 A5B8.'An unidentified network error occurred. oscarProtocolh!>548=5=85 >B:;>=5=> (8;8 ?@52KH5=> 2@5<O >6840=8O).6The connection was refused by the peer (or timed out). oscarProtocol4#40;5==K9 04@5A =5 =0945=.The host address was not found. oscarProtocolz5 4>AB0B>G=> @5AC@A>2 A8AB5<K (=0?@. >B:@KB> <=>3> A>:5B>2).?The local system ran out of resources (e.g., too many sockets). oscarProtocolB#40;5==K9 E>AB 70:@K; A>548=5=85.&The remote host closed the connection. oscarProtocol"@51C5<0O >?5@0F8O A A>:5B>< =5 ?>445@68205BAO >?5@0F8>=>9 A8AB5<>9 (=0g@. IPv6).kThe requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). oscarProtocolVA?>;L7C5<K9 ?@>:A8 B@51C5B 0CB5=B8D8:0F88.CThe socket is using a proxy, and the proxy requires authentication. oscarProtocolzH81:0! ;O @01>BK A A>:5B>< B@51CNBAO ?>2KH5==K5 ?@825;5388.SThe socket operation failed because the application lacked the required privileges. oscarProtocol\@52KH5=> 2@5<O >6840=8O ?@8 @01>B5 A A>:5B><.The socket operation timed out. oscarProtocolF0@>;L 8 ?>4B25@645=85 =5 A>2?040NBConfirm password does not matchpasswordChangeDialog:"5:CI89 ?0@>;L =5459AB28B5;5=Current password is invalidpasswordChangeDialogH81:0 ?0@>;OPassword errorpasswordChangeDialog7<5=8BLChangepasswordChangeDialogClass7<5=8BL ?0@>;LChange passwordpasswordChangeDialogClass"5:CI89 ?0@>;L:Current password:passwordChangeDialogClass>2K9 ?0@>;L: New password:passwordChangeDialogClass8>4B25@645=85 =>2>3> ?0@>;O:Retype new password:passwordChangeDialogClass"2548B5 %1 ?0@>;LEnter %1 passwordpasswordDialog$2548B5 20H ?0@>;LEnter your passwordpasswordDialogClass:OKpasswordDialogClass !>E@0=8BL ?0@>;L Save passwordpasswordDialogClass0H ?0@>;L:Your password:passwordDialogClass$!?8A:8 ?@820B=>AB8 Privacy listsprivacyListWindow#40;8BLDprivacyListWindowClass=D>IprivacyListWindowClass(!?8A>: 83=>@8@>20=8O Ignore listprivacyListWindowClass$!?8A>: =52848<>AB8Invisible listprivacyListWindowClass8: Nick nameprivacyListWindowClassUINUINprivacyListWindowClass$!?8A>: =52848<>AB8 Visible listprivacyListWindowClass$!?8A:8 ?@820B=>AB8privacyListWindowprivacyListWindowClass

readAwayDialogClass0:@KBLClosereadAwayDialogClass5@=CBLAOReturnreadAwayDialogClassreadAwayDialogreadAwayDialogClass$0?@>A 02B>@870F88Authorization requestrequestAuthDialogClassB?@028BLSendrequestAuthDialogClass6>1028BL 2 A?8A>: :>=B0:B>2Add to contact list searchUser809B8/4>1028BL ?>;L7>20B5;59Add/find users searchUser A5340Always searchUser2B>@87>20BL Authorize searchUser5B0;8 :>=B0:B0Contact details searchUser2@>25@8BL AB0BCA :>=B0:B0Contact status check searchUser >B>2>Done searchUser"8G53> =5 =0945=> Nothing found searchUser >8A: Searching searchUser&B?@028BL A>>1I5=85 Send message searchUser13-17searchUserClass18-22searchUserClass23-29searchUserClass30-39searchUserClass40-49searchUserClass50-59searchUserClass60+searchUserClass#G5B=0O 70?8ALAccountsearchUserClass>?>;=8B5;L=>AdvancedsearchUserClassD30=8AB0= AfghanistansearchUserClass>7@0AB:Age:searchUserClass;10=8OAlbaniasearchUserClass=4>@@0AndorrasearchUserClass =3>;0AngolasearchUserClass@35=B8=0 ArgentinasearchUserClass@<5=8OArmeniasearchUserClassA:CAAB2>ArtsearchUserClass2AB@0;8O AustraliasearchUserClass2AB@8OAustriasearchUserClass2B>@870F8O AuthorizesearchUserClass75@109460= AzerbaijansearchUserClass 030<KBahamassearchUserClass0E@59=BahrainsearchUserClass0=3;0456 BangladeshsearchUserClass5;>@CAA8OBelarussearchUserClass5;L38OBelgiumsearchUserClass CB0=BhutansearchUserClass>;828OBoliviasearchUserClass@078;8OBrazilsearchUserClass @C=59BruneisearchUserClass>;30@8OBulgariasearchUserClass0<5@C=CameroonsearchUserClass 0=040CanadasearchUserClass2B><>18;8CarssearchUserClass"09<0=>2K >AB@>20Cayman IslandssearchUserClass'04ChadsearchUserClass 5A?C1;8:0 '8;8Chile, Rep. ofsearchUserClass 8B09ChinasearchUserClass >@>4:City:searchUserClassG8AB8BLClearsearchUserClass$>;;5:F8>=8@>20=85 CollectionssearchUserClass>;C<18OColombiasearchUserClass><?LNB5@K ComputerssearchUserClass>AB0- 8:0 Costa RicasearchUserClass!B@0=0:Country:searchUserClassC10CubasearchUserClass*C;LBC@0 8 ;8B5@0BC@0Culture & LiteraturesearchUserClass$'5HA:0O  5A?C1;8:0 Czech Rep.searchUserClass 0=8ODenmarksearchUserClass@5 >G8I0BL ?@54C4CI85 @57C;LB0BKDo not clear previous resultssearchUserClass&><8=8:0=A:0O  5A?.Dominican Rep.searchUserClass-:204>@EcuadorsearchUserClass 38?5BEgyptsearchUserClass"-;5:B@>==0O ?>GB0EmailsearchUserClass-AB>=8OEstoniasearchUserClass-D8>?8OEthiopiasearchUserClass5=A:89FemalesearchUserClass $8468FijisearchUserClass$8=;O=48OFinlandsearchUserClass<O First namesearchUserClass<O: First name:searchUserClass $8B=5AFitnesssearchUserClass$@0=F8OFrancesearchUserClass3@KGamessearchUserClass>;/>7@0AB Gender/AgesearchUserClass>;:Gender:searchUserClass @C78OGeorgiasearchUserClass5@<0=8OGermanysearchUserClass0=0GhanasearchUserClass81@0;B0@ GibraltarsearchUserClass @5F8OGreecesearchUserClass@5=;0=48O GreenlandsearchUserClass %>118HobbiessearchUserClass><HomesearchUserClass>=->=3 Hong KongsearchUserClass5=3@8OHungarysearchUserClassA;0=48OIcelandsearchUserClass =48OIndiasearchUserClass=4>=578O IndonesiasearchUserClass=B5@5AK: Interests:searchUserClass=B5@=5BInternetsearchUserClass@0:IraqsearchUserClass@;0=48OIrelandsearchUserClass7@08;LIsraelsearchUserClass B0;8OItalysearchUserClass /<09:0JamaicasearchUserClass /?>=8OJapansearchUserClass>@40=8OJordansearchUserClass070EAB0= KazakhstansearchUserClass 5=8OKenyasearchUserClass;NG52K5 A;>20: Keywords:searchUserClass!525@=0O >@5O Korea, NorthsearchUserClass.6=0O >@5O Korea, SouthsearchUserClass C259BKuwaitsearchUserClassK@3K7AB0= KyrgyzstansearchUserClass /7K:: Language:searchUserClass0>ALaossearchUserClass$0<8;8O Last namesearchUserClass$0<8;8O: Last name:searchUserClass 0B28OLatviasearchUserClass!B8;L 687=8 LifestylesearchUserClassN:A5<1C@3 LuxembourgsearchUserClass04030A:0@ MadagascarsearchUserClass0;0978OMalaysiasearchUserClass0;L482KMaldivessearchUserClassC6A:>9MalesearchUserClass 0;LB0MaltasearchUserClass&!C?@C65A:89 AB0BCA:Marital status:searchUserClass5:A8:0MexicosearchUserClass$ 5A?C1;8:0 >;4>20Moldova, Rep. ofsearchUserClass >=0:>MonacosearchUserClass>=3>;8OMongoliasearchUserClass>;LH5 >>More >>searchUserClass0@>::>MoroccosearchUserClass$8;L<K/" Movies/TVsearchUserClass C7K:0MusicsearchUserClass0<818ONamibiasearchUserClass 5?0;NepalsearchUserClass845@;0=4K NetherlandssearchUserClass>20O 5;0=48O New ZealandsearchUserClass8:0@03C0 NicaraguasearchUserClass8: Nick namesearchUserClass8:: Nick name:searchUserClass835@8ONigersearchUserClassAB@>2 >@D>;:Norfolk IslandsearchUserClass>@2538ONorwaysearchUserClass >4 70=OB89: Occupation:searchUserClass">;L:> " A5B8" Online onlysearchUserClass @C3>5OthersearchUserClass0:8AB0=PakistansearchUserClass 0=0<0PanamasearchUserClass$0?C0->20O 28=5OPapua New GuineasearchUserClass0@03209ParaguaysearchUserClass5@CPerusearchUserClass$8;8??8=K PhilippinessearchUserClass >;LH0PolandsearchUserClass>@BC30;8OPortugalsearchUserClassCM@B>- 8:> Puerto RicosearchUserClass 0B0@QatarsearchUserClass5@=CBLAOReturnsearchUserClass C<K=8ORomaniasearchUserClass  >AA8ORussiasearchUserClass(>B;0=48OScotlandsearchUserClass >8A:SearchsearchUserClassA:0BL ?>: Search by:searchUserClass!8=30?C@ SingaporesearchUserClass!;>20:8OSlovakiasearchUserClass!;>25=8OSloveniasearchUserClass.  SouthAfricasearchUserClassA?0=8OSpainsearchUserClass(@8-0=:0 Sri LankasearchUserClass !C40=SudansearchUserClass (25F8OSwedensearchUserClass(259F0@8O SwitzerlandsearchUserClass"0920=LTaiwansearchUserClass"0468:8AB0= TajikistansearchUserClass"08;0=4ThailandsearchUserClass "C@F8OTurkeysearchUserClass"C@:<5=8AB0= TurkmenistansearchUserClassUIN (=><5@ ICQ)UINsearchUserClass!(USAsearchUserClass#:@08=0UkrainesearchUserClass5;8:>1@8B0=8OUnited KingdomsearchUserClass#@C3209UruguaysearchUserClass#715:8AB0= UzbekistansearchUserClass0B8:0= Vatican CitysearchUserClass5=5ACM;0 VenezuelasearchUserClassL5B=0<VietnamsearchUserClass 5<5=YemensearchUserClass.3>A;028O YugoslaviasearchUserClass,.3>A;028O - '5@=>3>@8OYugoslavia - MontenegrosearchUserClass$.3>A;028O - !5@18OYugoslavia - SerbiasearchUserClass8<10125ZimbabwesearchUserClass&>8A: ?>;L7>20B5;59 searchUsersearchUserClass60<>@>65==0O CG5B=0O 70?8AL Suspended account snacChannel>;8G5AB2> ?>;L7>20B5;59, ?>4:;NG5==KE A 40==>3> IP 4>AB83;> <0:A8<C<0 (reservation)K The users num connected from this IP has reached the maximum (reservation) snacChannelh#G5B=0O 70?8AL 70<>@>65=0, 87-70 2>7@0AB0 (< 13 ;5B)0Account suspended because of your age (age < 13) snacChannel2;>E>9 AB0BCA 107K 40==KEBad database status snacChannel";>E>9 AB0BCA DNSBad resolver status snacChannel5 <>3C 70@538AB@8@>20BLAO 2 A5B8 ICQ. >?@>1C9B5 ?>4:;NG8BLAO G5@57 =5A:>;L:> <8=CB=Can't register on the ICQ network. Reconnect in a few minutes snacChannel*H81:0 A>548=5=8O: %1Connection Error: %1 snacChannel6H81:0 A2O78 A 107>9 40==KE DB link error snacChannel6H81:0 ?>AK;0 2 107C 40==KE DB send error snacChannel0#40;5==0O CG5B=0O 70?8ALDeleted account snacChannel2#AB0@52H0O CG5B=0O 70?8ALExpired account snacChannel65:>@@5:B=K9 =8: 8;8 ?0@>;LIncorrect nick or password snacChannel2=CB@5==OO >H81:0 :;85=B0/Internal client error (bad input to authorizer) snacChannel"=CB@5==OO >H81:0Internal error snacChannel05459AB28B5;L=K9 SecurIDInvalid SecurID snacChannel>5459AB28B5;L=0O CG5B=0O 70?8ALInvalid account snacChannelB5459AB28B5;L=K5 ?>;O 107K 40==KEInvalid database fields snacChannel>5459AB28B5;L=K9 =8: 8;8 ?0@>;LInvalid nick or password snacChannel85A>2?045=85 =8:0 8;8 ?0@>;OMismatch nick or password snacChannel25B 4>ABC?0 : 1075 40==KENo access to database snacChannel"5B 4>ABC?0 : DNSNo access to resolver snacChannelKRate limit exceeded (reservation). Please try to reconnect in a few minutes snacChannel=Rate limit exceeded. Please try to reconnect in a few minutes snacChannelReservation map error snacChannelReservation timeout snacChannel0!5@28A 2@5<5==> >B:;NG5=Service temporarily offline snacChannel4!5@28A 2@5<5==> =54>ABC?5=Service temporarily unavailable snacChannel>;8G5AB2> ?>;L7>20B5;59, ?>4:;NG5==KE A 40==>3> IP 4>AB83;> <0:A8<C<0;L7C5B5 AB0@CN 25@A8N ICQ.  5:><5=4C5BAO >1=>2;5=85:You are using an older version of ICQ. Upgrade recommended snacChannelnK 8A?>;L7C5B5 AB0@CN 25@A8N ICQ. 5>1E>48<> >1=>2;5=857You are using an older version of ICQ. Upgrade required snacChannelZ>1028BL @0AH8@5==K5 AB0BCAK 2 AB0BCA=>5 <5=N&Add additional statuses to status menustatusSettingsClassX>72>;OBL 4@C38< 2845BL <>9 AB0BCA G5@57 Web*Allow other to view my status from the WebstatusSettingsClassF0?@0H820BL E-AB0BCAK 02B><0B8G5A:8Ask for xStauses automaticallystatusSettingsClass><0At homestatusSettingsClass0 @01>B5At workstatusSettingsClass B>H5;AwaystatusSettingsClass5 15A?>:>8BLDNDstatusSettingsClass5?@5AA8O DepressionstatusSettingsClass<5 ?>:07K20BL 480;>3 02B>>25B0Don't show autoreply dialogstatusSettingsClass;>9EvilstatusSettingsClass<LunchstatusSettingsClass54>ABC?5=N/AstatusSettingsClass6#254><;OBL > GB5=88 AB0BCA0 Notify about reading your statusstatusSettingsClass 0=OBOccupiedstatusSettingsClass"0AB@>9:8 AB0BCA0statusSettingsstatusSettingsClass0%1 8=D>@<0F8O > :>=B0:B5%1 contact informationuserInformation.<b>>7@0AB:</b> %1 <br>Age: %1
userInformation:<b>0B0 @>645=8O:</b> %1 <br>Birth date: %1
userInformation&<b><O:</b> %1 <br>First name: %1
userInformation&<b>>;:</b> %1 <br>Gender: %1
userInformation*<b>><:</b> %1 %2<br>Home: %1 %2
userInformation.<b>$0<8;8O:</b> %1 <br>Last name: %1
userInformation&<b>8::</b> %1 <br>Nick name: %1
userInformation><b>5@A8O ?@>B>:>;0: </b>%1<br>Protocol version: %1
userInformationD<b>=0=85 O7K:>2:</b> %1 %2 %3<br>%Spoken languages: %1 %2 %3
userInformation0<b>[>7<>6=>AB8]</b><br>[Capabilities]
userInformationv<b>[>?>;=8B5;L=0O 8=D>@<0F8O > ?@O<KE A>548=5=8OE]</b><br>)[Direct connection extra info]
userInformationB<b>[>@>B:85 2>7<>6=>AB8]</b><br>[Short capabilities]
userInformationJ<img src='%1' height='%2' width='%3'>%userInformation@ 07<5@ 87>1@065=8O A;8H:>< 25;8:Image size is too biguserInformationX7>1@065=8O (*.gif *.bmp *.jpg *.jpeg *.png)'Images (*.gif *.bmp *.jpg *.jpeg *.png)userInformationB:@KBL D09; Open FileuserInformation&H81:0 ?@8 >B:@KB88 Open erroruserInformation

userInformationClass ?>;L7>20B5;5AboutuserInformationClass8=D>@<0F8O >1 CG5B=>9 70?8A8 Account infouserInformationClass>?>;=8B5;L=> AdditinonaluserInformationClass>7@0AB:Age:userInformationClassjA5 ?>;L7>20B5;8 <>3CB 4>102;OBL <5=O 157 02B>@870F88)All uses can add me without authorizationuserInformationClassr>72>;OBL 4@C38< 2845BL <>9 AB0BCA ?@8 ?>8A:5 8 G5@57 Web9Allow others to view my status in search and from the webuserInformationClass(2B>@870F8O/webawareAuthorization/webawareuserInformationClass0B0 @>645=8O Birth dateuserInformationClass>18;L=K9: Cellular:userInformationClass >@>4:City:userInformationClass0:@KBLCloseuserInformationClass><?0=8OCompanyuserInformationClass$0720=85 :><?0=88: Company name:userInformationClass!B@0=0:Country:userInformationClass&>40745;5=85/>B45;: Div/dept:userInformationClass&5 ?C1;8:>20BL 2A5<Don't publish for alluserInformationClass$-;5:B@>==0O ?>GB0:Email:userInformationClass $0:A:Fax:userInformationClass5=A:89FemaleuserInformationClass<O: First name:userInformationClass>;:Gender:userInformationClass;02=K5GeneraluserInformationClass><HomeuserInformationClass><0H=89 04@5A Home addressuserInformationClass$><0H=OO AB@0=8F0: Home page:userInformationClass=B5@5AK InterestsuserInformationClass2>A;54=89 @07 1K; >=;09=: Last login:userInformationClass$0<8;8O: Last name:userInformationClassC6A:>9MaleuserInformationClass&!C?@C65A:89 AB0BCA:Marital status:userInformationClass2"@51C5BAO <>O 02B>@870F8OMy authorization is requireduserInformationClass<ONameuserInformationClass8:: Nick name:userInformationClass >4 70=OB89: Occupation:userInformationClass#@>65=5FOriginally fromuserInformationClass5@A>=0;L=>5PersonaluserInformationClass"5;5D>=:Phone:userInformationClass5AB>?>;>65=85: Position:userInformationClass 538AB@0F8O: Registration:userInformationClass 0?@>A8BL 45B0;8Request detailsuserInformationClass!>E@0=8BLSaveuserInformationClass=0=85 O7K:>2:Spoken language:userInformationClass1;0ABL:State:userInformationClass #;8F0:Street address:userInformationClass #;8F0:Street:userInformationClass@0B:0O A2>4:0SummaryuserInformationClassUIN:userInformationClassWeb-AB@0=8F0: Web site:userInformationClass  01>B0WorkuserInformationClass  01>B0 Work addressuserInformationClass=45:A:Zip:userInformationClass2=D>@<0F8O > ?>;L7>20B5;5userInformationuserInformationClass ) , qutim-0.2.0/languages/ru/binaries/chess.qm0000644000175000017500000000414311225627111022150 0ustar euroelessareuroelessari$???525@=K9 E>4??? Error movingDrawer5BNoDrawer??? 70<>:??? To castleDrawer0YesDrawert???K =5 <>65B5 ?5@5<5AB8BL D83C@C, B: :>@>;L ?>4 C40@><???8You cannot move this figure because the king is in checkDrawer>=5F 83@K End the game GameBoardH81:0!Error! GameBoard0<5 >25@ Game over GameBoard"5B, =5 A>E@0=OBLNo, don't save GameBoard63@0 H0E<0BK (?;038= qutIM)QutIM chess plugin GameBoardV0:>=G8BL 83@C? 0< 1C45B 70AG8B0= ?@>83@KH*Want you to end the game? You will lose it GameBoard0, A>E@0=8BL Yes, save GameBoard80H ?@>B82=8: ?@5:@0B8; 83@C!Your opponent has closed the game GameBoardJ?@83;0A8; : 83@5 2 H0E<0BK. @8=OBL?# invites you to play chess. Accept? chessPlugin, ?>B><C GB>: ", with reason: " chessPlugin3@0 H0E<0BK Play chess chessPlugin63@0 H0E<0BK (?;038= qutIM)QutIM chess plugin chessPlugin6B:;>=8; ?@83;0H5=85 : 83@5&don't accept your invite to play chess chessPlugin3@>2>9 G0B Game chat gameboard %>4K ?@>B82=8:0:Opponent moves: gameboard63@0 H0E<0BK (?;038= qutIM)QutIM chess plugin gameboard0H8 E>4K: Your moves: gameboardjVCardqutim-0.2.0/languages/ru/binaries/nowplaying.qm0000644000175000017500000000306311225627111023232 0ustar euroelessareuroelessarT Y ĥ <ijVCardr%artist% - 0@B8AB%title% - =0720=85 ?5A=8%album% - 0;L1><J%artist% for the artist %title% for the name of song %album% for the albumnowplayingSettingsClass ?;038=5AboutnowplayingSettingsClass7<5=8BL =0: Change to:nowplayingSettingsClass" 01>B0BL A jabber Change tunenowplayingSettingsClassL>=25@B8@>20BL BM38 87 win-1251 2 utf8&Convert tags from windows-1251 to utf8nowplayingSettingsClass$ 01>B0BL ?>AB>O==>ForevernowplayingSettingsClass;02=>5GeneralnowplayingSettingsClassICQICQnowplayingSettingsClass JabberJabbernowplayingSettingsClass5 <5=OBL Not changenowplayingSettingsClass:;NG5=>OnnowplayingSettingsClass0AB@>9:8SettingsnowplayingSettingsClass$!>>1I5=85 AB0BCA0:Status message:nowplayingSettingsClass8 01>B0BL B>;L:> ?@8 AB0BCA5:With this status:nowplayingSettingsClass(03>;>2>: X-AB0BCA0:X-Status title:nowplayingSettingsClassqutim-0.2.0/languages/ru/binaries/core.qm0000644000175000017500000015614211271416230022001 0ustar euroelessareuroelessarH-YF&9 ) ߵ@.,NmNhLz*BzoY}>b;$ j IX #W]))f:v:E'mH`Oc\d ZJ Zn{.;\GB}dbA_bF-q;,-q< ~M4"o{6o~/8I*d}QQQS}\ c\?j~bdd3dh%.lsOC<eW?BAZkNT*O]Pf qJ2EI5,IH&ILVIi+IjIk    O ~ ųeb͢`%l:$/ 6GGGal.8'tK3D h5K6#ZC QDSWMe0E!e0Eo@jlDYt~ 3y#0Q.JtF 0**juL llTJI.pGVfӉ2qDN7 8e1=;B<46G QROTa b8fulglV<QܲR0Rk0RJ:'M4.l9hՁ.b "s ^/ Ia D &  0|B \P%= q/ v |EV V > Q͸ " : Ĵ , ?? jn =:  1P o#o u@ 1Vf 7ii N  zD Wg " - A e+ s> U+ Ω zz4: d; >1W >M@ >c #- -S$ bdu t 3 t F R 6 3 Y =]% d ~b$M s SY TJ+ . 6? ɔ_ mK1 %h{ >- 2 m N: ş ӕ *? t c) E EU ;*́ >1g ?@Ɯ [N@ g |,<' |,= Rm be _Zb Z   c-U s} W & _J L U@ ycXC un7 U;Z5 W( Z9 q:8 rN rN= b z7_ tm 7 <r <r #} N_WdUJ'i+EC4h'OXl&Fs8f:AcÊT-/4A!G Tu=%vCu/ue;m3}p.^BNC $ "iо5B0;8 :>=B0:B0Contact detailsAbstractContextLayer"AB>@8O A>>1I5=89Message historyAbstractContextLayer&B?@028BL A>>1I5=85 Send messageAbstractContextLayer8#?@02;5=85 CG5B=K<8 70?8AO<8AccountManagementAccountManagementClass>1028BLAddAccountManagementClass7<5=8BLEditAccountManagementClass#40;8BLRemoveAccountManagementClassB0AB5@ 4>102;5=8O CG5B=KE 70?8A59Add Account WizardAddAccountWizard\@8=8<0BL A>>1I5=8O B>;L:> >B A?8A:0 :>=B0:B>2&Accept messages only from contact listAntiSpamLayerSettingsClass B25B =0 2>?@>A:Answer to question:AntiSpamLayerSettingsClass =B8A?0< 2>?@>A:Anti-spam question:AntiSpamLayerSettingsClass&0AB@>9:8 0=B8A?0<0AntiSpamSettingsAntiSpamLayerSettingsClassr5 ?@8=8<0BL 70?@>AK 02B>@870F88 >B :>=B0:B>2 =5 2 A?8A:53Do not accept NIL messages concerning authorizationAntiSpamLayerSettingsClass5 ?@8=8<0BL A>>1I5=8O, A>45@60I85 AAK;:8 >B :>=B0:B>2 =5 2 A?8A:5$Do not accept NIL messages with URLsAntiSpamLayerSettingsClassn5 >B?@02;OBL 2>?@>A/>B25B, 5A;8 <>9 AB0BCA "=52848<K9"5Don't send question/reply if my status is "invisible"AntiSpamLayerSettingsClass0:;NG8BL 0=B8A?0< D8;LB@Enable anti-spam botAntiSpamLayerSettingsClassF!>>1I5=85 ?>A;5 ?@028;L=>3> >B25B0:Message after right answer:AntiSpamLayerSettingsClassN#254><;OBL > 701;>:8@>20==KE A>>1I5=8OENotify when blocking messageAntiSpamLayerSettingsClass......ChatForm$G8AB8BL >:=> G0B0Clear chat logChatForm AB>@8O :>=B0:B0Contact historyChatForm*=D>@<0F8O > :>=B0:B5Contact informationChatForm Ctrl+FCtrl+FChatForm Ctrl+HCtrl+HChatForm Ctrl+ICtrl+IChatForm Ctrl+MCtrl+MChatForm Ctrl+QCtrl+QChatForm Ctrl+TCtrl+TChatForm !<09;K Emoticon menuChatFormFormChatForm6&8B8@>20BL 2K45;5==K9 B5:ABQuote selected textChatFormB?@028BLSendChatFormB?@028BL D09; Send fileChatForm:B?@028BL 87>1@065=85 <7,6 1Send image < 7,6 KBChatForm&B?@028BL A>>1I5=85 Send messageChatForm:B?@02;OBL A>>1I5=8O ?> EnterSend message on enterChatForm<B?@02;OBL >?>25I5=85 > =01>@5Send typing notificationChatForm!<5=0 @0A:;04:8 Swap layoutChatForm:=> G0B0 Chat windowChatLayerClass( hour:min, full date )ChatSettingsWidget*(G0AK:<8=CBK:A5:C=4K)( hour:min:sec )ChatSettingsWidgetH(G0AK:<8=CBK:A5:C=4K 45=L/<5AOF/3>4)( hour:min:sec day/month/year )ChatSettingsWidget>:07K20BL 2A5 =5?@>G8B0==K5 A>>1I5=8O ?@8 I5;G:5 ?> 7=0G:C 2 B@556After clicking on tray icon show all unreaded messagesChatSettingsWidget'0BChatChatSettingsWidget>'0BK 8 :>=D5@5=F88 2 >4=>< >:=5#Chats and conferences in one windowChatSettingsWidget6=>?:8 70:@KB8O =0 2:;04:0EClose button on tabsChatSettingsWidgeth0:@K20BL 2:;04:C/>:=> G0B0 ?>A;5 >B?@02:8 A>>1I5=8O0Close tab/message window after sending a messageChatSettingsWidget4&25B=K5 =8:8 2 :>=D5@5=F88!Colorize nicknames in conferencesChatSettingsWidget05 <830BL 2 ?0=5;8 7040GDon't blink in task barChatSettingsWidgetF@C??8@>20BL A>>1I5=8O G5@57 (A5:):!Don't group messages after (sec):ChatSettingsWidget\5 ?>:07K20BL A>1KB8O, :>340 >:=> G0B0 >B:@KB>+Don't show events if message window is openChatSettingsWidgetFormChatSettingsWidget;02=K5GeneralChatSettingsWidgetfB:@K20BL 2:;04:C/>:=> G0B0 ?@8 ?>;CG5=88 A>>1I5=8O+Open tab/message window if received messageChatSettingsWidgetX0?><8=0BL >B:@KBK5 G0BK ?>A;5 70:@KB8O >:=03Remember openned privates after closing chat windowChatSettingsWidgetJ#40;OBL A>>1I5=8O 87 >:=0 G0B0 ?>A;5:%Remove messages from chat view after:ChatSettingsWidgetLB?@02;OBL A>>1I5=8O ?> 42>9=><C EnterSend message on double enterChatSettingsWidget:B?@02;OBL A>>1I5=8O ?> EnterSend message on enterChatSettingsWidget<B?@02;OBL >?>25I5=85 > =01>@5Send typing notificationsChatSettingsWidget >:07K20BL 8<5=0 Show namesChatSettingsWidget 568< 2:;04>: Tabbed modeChatSettingsWidget(5@5<5I05<K5 2:;04:8Tabs are movableChatSettingsWidget"5:AB>2K9 @568<Text browser modeChatSettingsWidget 0B0: Timestamp:ChatSettingsWidgetWebkit-@568< Webkit modeChatSettingsWidgetL<font color='green'>5G0B05B...</font>$Typing... ChatWindow@ 07<5@ 87>1@065=8O A;8H:>< 25;8:Image size is too big ChatWindowX7>1@065=8O (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.png *.bmp *.jpg *.jpeg) ChatWindowB:@KBL D09; Open File ChatWindow&H81:0 ?@8 >B:@KB88 Open error ChatWindowG8AB8BL G0B Clear chatConfFormCtrl+M, Ctrl+SCtrl+M, Ctrl+SConfForm Ctrl+QCtrl+QConfForm Ctrl+TCtrl+TConfFormFormConfForm2!<5=0 @0A:;04:8 A>>1I5=8OInvert/translit messageConfForm6&8B8@>20BL 2K45;5==K9 B5:ABQuote selected textConfFormB?@028BLSendConfForm&B?@02;OBL ?> Enter Send on enterConfForm>:070BL A<09;KShow emoticonsConfForm

ConsoleFormConsole5 2 A?8A:5 Not in listContactListProxyModelB:;NG5=OfflineContactListProxyModel  A5B8OnlineContactListProxyModel100%100%ContactListSettingsClass#G5B=0O 70?8AL:Account:ContactListSettingsClass:=> 157 @0<:8Borderless WindowContactListSettingsClass !?8:>: :>=B0:B>2ContactListSettingsContactListSettingsClass>?>;=8B5;L=> CustomizeContactListSettingsClass$0AB@>9:8 H@8DB>2:Customize font:ContactListSettingsClassH 8A>20BL D>= 0;LB5@=0B82=K<8 F25B0<81Draw the background with using alternating colorsContactListSettingsClass@C??0:Group:ContactListSettingsClass,!:@K20BL ?CABK5 3@C??KHide empty groupsContactListSettingsClassD!:@K20BL >B:;NG5==KE ?>;L7>20B5;59Hide offline usersContactListSettingsClassJ!:@K20BL @0745;5=85 " A5B8/B:;NG5="Hide online/offline separatorsContactListSettingsClass=5H=89 284 Look'n'FeelContactListSettingsClass;02=K5MainContactListSettingsClassB:;NG5=:Offline:ContactListSettingsClass A5B8:Online:ContactListSettingsClass@>7@0G=>ABL:Opacity:ContactListSettingsClass1KG=>5 >:=>Regular WindowContactListSettingsClass 0745;8B5;L: Separator:ContactListSettingsClass2>:07K20BL CG5B=K5 70?8A8 Show accountsContactListSettingsClass$>:07K20BL 020B0@K Show avatarsContactListSettingsClass4>:07K20BL 7=0G:8 :;85=B>2Show client iconsContactListSettingsClass">:07K20BL 3@C??K Show groupsContactListSettingsClass>!>@B8@>20BL :>=B0:BK ?> AB0BCACSort contacts by statusContactListSettingsClass 0<:0 87 B5<K Theme borderContactListSettingsClass">=:0O @0<:0 Tool windowContactListSettingsClass!B8;L >:=0: Window Style:ContactListSettingsClass &$09;&FileDefaultContactList ?@>3@0<<5AboutDefaultContactList#?@02;5=85ControlDefaultContactList!:@KBL 3@C??K Hide groupsDefaultContactList;02=>5 <5=N Main menuDefaultContactListK:;NG8BL 72C:MuteDefaultContactList6!:@KBL >B:;NG5==KE :>=B0:BK Show offlineDefaultContactList,>:070BL/A:@KBL 3@C??KShow/hide groupsDefaultContactListH>:070BL/A:@KBL >B:;NG5==KE :>=B0:BKShow/hide offlineDefaultContactList2C: 2:;/2K:; Sound on/offDefaultContactList qutIMqutIMDefaultContactList$>7<>6=K5 20@80=BKPossible variants GeneralWindow9FC:5=3HI7EJDK20?@>;46MOGA<8BL1N.&#()%*$+ -/'!",.,Bqwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? GeneralWindowCB5=B8D8:0F8OAuthenticationGlobalProxySettingsClass";>10;L=K9 ?@>:A8GlobalProxySettingsGlobalProxySettingsClassHTTPGlobalProxySettingsClass %>AB:Host:GlobalProxySettingsClass5BNoneGlobalProxySettingsClass0@>;L: Password:GlobalProxySettingsClass >@B:Port:GlobalProxySettingsClassSOCKS 5GlobalProxySettingsClass"8?:Type:GlobalProxySettingsClass"<O ?>;L7>20B5;O: User name:GlobalProxySettingsClass<> C<>;G0=8N> GuiSetttingsWindowClass6<> C<>;G0=8N> (=3;89A:89) ( English )GuiSetttingsWindowClass<7<5=5==0O> GuiSetttingsWindowClass <5B>GuiSetttingsWindowClass<!8AB5<=0O>GuiSetttingsWindowClass"!B8;L ?@8;>65=8O:Application style:GuiSetttingsWindowClass@8<5=8BLApplyGuiSetttingsWindowClass"5<0 @0<:8: Border theme:GuiSetttingsWindowClass B<5=0CancelGuiSetttingsWindowClass0"5<0 >:=0 G0B0 (Webkit):Chat log theme (webkit):GuiSetttingsWindowClass"80;>3 >:=0 G0B0:Chat window dialog:GuiSetttingsWindowClass,"5<0 A?8A:0 :>=B0:B>2:Contact list theme:GuiSetttingsWindowClass!<09;K: Emoticons:GuiSetttingsWindowClass /7K:: Language:GuiSetttingsWindowClass:OKGuiSetttingsWindowClass:"5<0 2A?;K20NI8E C254><;5=89:Popup windows theme:GuiSetttingsWindowClass2C:>20O B5<0: Sounds theme:GuiSetttingsWindowClass*"5<0 7=0G:>2 AB0BCA0:Status icon theme:GuiSetttingsWindowClass."5<0 A8AB5<=KE 7=0G:>2:System icon theme:GuiSetttingsWindowClassD>@<;5=85User interface settingsGuiSetttingsWindowClassAB>@8OHistorySettingsHistorySettingsClass6!>E@0=OBL 8AB>@8N A>>1I5=89Save message historyHistorySettingsClassT>:07K20BL ?>A;54=85 A>>1I5=8O 2 >:=5 G0B0(Show recent messages in messaging windowHistorySettingsClass1HistoryWindowClass#G5B=0O 70?8AL:Account:HistoryWindowClassA53>: %L1All: %L1HistoryWindowClassB:From:HistoryWindowClassAB>@8O HistoryWindowHistoryWindowClass@8H;>: %L1In: %L1HistoryWindowClass#H;>: %L1Out: %L1HistoryWindowClass5@=CBLReturnHistoryWindowClass >8A:SearchHistoryWindowClassA53>: %L1All: %L1#JsonHistoryNamespace::HistoryWindow@8H;>: %L1In: %L1#JsonHistoryNamespace::HistoryWindow5B 8AB>@88 No History#JsonHistoryNamespace::HistoryWindow#H;>: %L1Out: %L1#JsonHistoryNamespace::HistoryWindow>>60;C9AB0, 70?>;=8B5 2A5 ?>;O.Please fill all fields. LastLoginPageJ>60;C9AB0, =015@8B5 40==K5 4;O 2E>40&Please type chosen protocol login data LastLoginPage?8:A pxNotificationsLayerSettingsClassA5: sNotificationsLayerSettingsClass*>=B0:B <5=O5B AB0BCAContact change statusNotificationsLayerSettingsClass>=B0:B >DD;09=Contact sign offNotificationsLayerSettingsClass>=B0:B >=;09=Contact sign onNotificationsLayerSettingsClass4>=B0:B ?5G0B05B A>>1I5=85Contact typing messageNotificationsLayerSettingsClassKA>B0:Height:NotificationsLayerSettingsClass"86=89 ;52K9 C3>;Lower left cornerNotificationsLayerSettingsClass$86=89 ?@02K9 C3>;Lower right cornerNotificationsLayerSettingsClass$>;CG5=> A>>1I5=85Message receivedNotificationsLayerSettingsClass57 A:>;L65=8ONo slideNotificationsLayerSettingsClass#254><;5=8ONotificationsLayerSettingsNotificationsLayerSettingsClass ?>25I0BL :>340: Notify when:NotificationsLayerSettingsClass>78F8O: Position:NotificationsLayerSettingsClassB>:07K20BL ?>4A:07:8-C254><;5=8O:Show balloon messages:NotificationsLayerSettingsClass6>:07K20BL 2A?;K20NI85 >:=0Show popup windowsNotificationsLayerSettingsClass@5<O ?>:070: Show time:NotificationsLayerSettingsClass2>@87>=B0;L=>5 A:>;L65=85Slide horizontallyNotificationsLayerSettingsClass.5@B8:0;L=>5 A:>;L65=85Slide verticallyNotificationsLayerSettingsClass !B8;L:Style:NotificationsLayerSettingsClass$5@E=89 ;52K9 C3>;Upper left cornerNotificationsLayerSettingsClass&5@E=89 ?@02K9 C3>;Upper right cornerNotificationsLayerSettingsClass(8@8=0:Width:NotificationsLayerSettingsClass11PluginSettingsClass B<5=0CancelPluginSettingsClass$0AB@>9:0 ?;038=>2Configure plugins - qutIMPluginSettingsClass:OkPluginSettingsClass<b>%1</b> %1 PopupWindow<b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2b%1
%2 PopupWindow.A?;K20NI55 C254><;5=85 PopupWindowPopupWindowClass&#40;8BL ?@>D8;L %1?Delete %1 profile?ProfileLoginDialog#40;8BL ?@>D8;LDelete profileProfileLoginDialog&5?@028;L=K9 ?0@>;LIncorrect passwordProfileLoginDialog >9B8Log inProfileLoginDialog@>D8;LProfileProfileLoginDialog B<5=0CancelProfileLoginDialogClass25 ?>:07K20BL ?@8 70?CA:5Don't show on startupProfileLoginDialogClass<O:Name:ProfileLoginDialogClass0@>;L: Password:ProfileLoginDialogClassE>4 2 ?@>D8;LProfileLoginDialogProfileLoginDialogClass 0?><=8BL ?0@>;LRemember passwordProfileLoginDialogClass#40;8BL ?@>D8;LRemove profileProfileLoginDialogClass >9B8Sign inProfileLoginDialogClass:>60;C9AB0, 2K15@8B5 ?@>B>:>;Please choose IM protocol ProtocolPage0AB5@ ?><>65B 20< 4>1028BL CG5B=CN 70?8AL. K 2A5340 <>65B5 C40;8BL CG5B=CN 70?8AL 8A?>;L7CO 0AB@>9:8 -> #G5B=K5 70?8A8This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts ProtocolPage8# %1 A53>4=O 5=L  >645=8O!!%1 has birthday today!!QObject%1 ?5G0B05B %1 is typingQObject &KE>4&QuitQObject ( )  (BLOCKED) QObject19 :20@B0; 1st quarterQObject29 :20@B0; 2nd quarterQObject39 :20@B0; 3rd quarterQObject49 :20@B0; 4th quarterQObjectA5 D09;K (*) All files (*)QObject=B8A?0< Anti-spamQObject*2B>@870F8O >B:;>=5=0Authorization blockedQObjectB01;>:8@>20=> A>>1I5=85 >B %1: %2Blocked message from %1: %2QObject !?8A>: :>=B0:B>2 Contact ListQObjectAB>@8O :'(HistoryQObject&!>>1I5=85 >B %1: %2Message from %1: %2QObject5 2 A?8A:5 Not in listQObject#254><;5=8O NotificationsQObjectB:@KBL D09; Open FileQObject KE>4QuitQObject2C:SoundQObject(2C:>2K5 C254><;5=8OSound notificationsQObject.A53>4=O 5=L  >645=8O!!has birthday today!!QObject?5G0B05BtypingQObject......SoundEngineSettings><0=40:Command:SoundEngineSettingsP=5H=OO ?@>3@0<<0 2>A?@>872545=8O 72C:>2Custom sound playerSoundEngineSettings2C:>2>9 4286>: Engine typeSoundEngineSettingsA?>;=O5<K5 ExecutablesSoundEngineSettingshA?>;=O5<K5 (*.exe *.com *.cmd *.bat)A5 D09;K (*.*)5Executables (*.exe *.com *.cmd *.bat) All files (*.*)SoundEngineSettingsFormSoundEngineSettings5B 72C:0No soundSoundEngineSettings QSoundQSoundSoundEngineSettings.K15@8B5 ?CBL : :><0=45Select command pathSoundEngineSettingsA5 72C:>2K5 D09;K 1C4CB A:>?8@>20=K 2 ?0?:C "%1/". !CI5AB2CNI85 D09;K 1C4CB 70<5=5=K 157 :0:8E-;81> ?@54C?@5645=89. @84>;68BL?All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue?SoundLayerSettings:H81:0 ?@8 GB5=88 D09;0 "%1".)An error occured while reading file "%1".SoundLayerSettings*>=B0:B A<5=8; AB0BCAContact changed statusSoundLayerSettings>=B0:B  A5B8Contact is onlineSoundLayerSettings$>=B0:B >B:;NG8;AOContact went offlineSoundLayerSettings<# :>=B0:B0 A:>@> 5=L  >645=8OContact's birthday is commingSoundLayerSettingsJ5 <>3C A:>?8@>20BL D09; "%1" 2 "%2".!Could not copy file "%1" to "%2".SoundLayerSettingsJ5 <>3C >B:@KBL D09; "%1" 4;O GB5=8O.%Could not open file "%1" for reading.SoundLayerSettingsJ5 <>3C >B:@KBL D09; "%1" 4;O 70?8A8.%Could not open file "%1" for writing.SoundLayerSettings H81:0ErrorSoundLayerSettings:-:A?>@B8@>20BL 72C:>2>9 AB8;LExport sound styleSoundLayerSettings"-:A?>@B8@>20BL... Export...SoundLayerSettings@$09; "%1" 8<55B =525@=K9 D>@<0B.File "%1" has wrong format.SoundLayerSettings8<?>@B8@>20BL 72C:>2>9 AB8;LImport sound styleSoundLayerSettings$E>4OI55 A>>1I5=85Incoming messageSoundLayerSettings*B:@KBL 72C:>2>9 D09;Open sound fileSoundLayerSettings&AE>4OI55 A>>1I5=85Outgoing messageSoundLayerSettingsh2C:>2K5 A>1KB8O CA?5H=> M:A?>@B8@>20=K 2 D09; "%1".0Sound events successfully exported to file "%1".SoundLayerSettings<2C:8 (*.wav);;A5 D09;K (*.*)$Sound files (*.wav);;All files (*.*)SoundLayerSettings 0?CA:StartupSoundLayerSettings"!8AB5<=>5 A>1KB85 System eventSoundLayerSettings"XML-D09;K (*.xml)XML files (*.xml)SoundLayerSettings@8<5=8BLApplySoundSettingsClass!>1KB8OEventsSoundSettingsClass-:A?>@B B5<K... Export...SoundSettingsClass<?>@B B5<K... Import...SoundSettingsClassB:@KBLOpenSoundSettingsClass@>83@0BLPlaySoundSettingsClass2C:>2>9 D09;: Sound file:SoundSettingsClassK 8A?>;L7C5B5 72C:>2CN B5<C >60;C9AB0, C15@8B5 B5<C, 4;O CAB0=>2:8 72C:>2 2@CG=CN.FYou're using a sound theme. Please, disable it to set sounds manually.SoundSettingsClass2C: soundSettingsSoundSettingsClassPreset caption StatusDialog:2548B5 A2>5 AB0BCA-A>>1I5=85Write your status message StatusDialog <5B>StatusDialogVisualClass B<5=0CancelStatusDialogVisualClass25 ?>:07K20BL MB>B 480;>3Do not show this dialogStatusDialogVisualClass:OKStatusDialogVisualClassPreset:StatusDialogVisualClass!>E@0=8BLSaveStatusDialogVisualClass !B0BCA StatusDialogStatusDialogVisualClass B<5=0CancelStatusPresetCaptionClass:OKStatusPresetCaptionClass2#:068B5 =0720=85 H01;>=0:Please enter preset caption:StatusPresetCaptionClass(2C:>2K5 C254><;5=8OStatusPresetCaptionStatusPresetCaptionClass><0At homeTreeContactListModel0 @01>B5At workTreeContactListModel B>H5;AwayTreeContactListModel5?@5AA8O DepressionTreeContactListModel5 15A?>:>8BLDo not disturbTreeContactListModel;>9EvilTreeContactListModel,!2>1>45= 4;O @073>2>@0 Free for chatTreeContactListModel< Having lunchTreeContactListModel52848<K9 InvisibleTreeContactListModel54>ABC?5= Not availableTreeContactListModel 0=OBOccupiedTreeContactListModelB:;NG5=OfflineTreeContactListModel  A5B8OnlineTreeContactListModel5 02B>@87>20=Without authorizationTreeContactListModell<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">;5:A55=:> !B0=8A;02 aka MrFree</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> ?>445@6:0 B5:CI53> A>AB>O=8O ?5@52>40</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:f1.mrfree@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">f1.mrfree@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">NightWolf_NG</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> 0G0;L=K9 ?5@52>4 O4@0 8 >A=>2=KE ?@>B>:>;>2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Mr.Peabody</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> ><>IL 2 ?5@52>45 </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mrpeabody@mail.ru"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mrpeabody@mail.ru</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">skpy</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> ?><>IL 2 ?5@52>45</span></p> </body></html>(Enter there your names, dear translaters aboutInfo%GNU General Public License, version 2 aboutInfo$>445@68B5 ?@>5:B: Support project with a donation: aboutInfo Yandex.Money aboutInfo <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> CAB0< '0:8=</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">;02=K9 @07@01>BG8: 8 >A=>20B5;L @>5:B0</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> CA;0= 83<0BC;;8=</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">;02=K9 @07@01>BG8:</span></p></body></html>

Rustam Chakin

qutim.develop@gmail.com

Main developer and Project founder

Ruslan Nigmatullin

euroelessar@gmail.com

Main developer and Project leader

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>.</body></html>

aboutInfoClass <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, :@>A?;0BD>@<5==K9 8=B5@=5B ?59465@</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 2008-2009,  CAB0< '0:8=,  CA;0= 83<0BC;;8=</span></p></body></html>

qutIM, multiplatform instant messenger

euroelessar@gmail.com

© 2008-2009, Rustam Chakin, Ruslan Nigmatullin

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">8F5=78>==>5 A>3;0H5=85</a></p></body></html>

License agreements

aboutInfoClass ?@>3@0<<5AboutaboutInfoClass qutIM About qutIMaboutInfoClass 2B>@KAuthorsaboutInfoClass0:@KBLCloseaboutInfoClass6>1;03>40@8BL @07@01>BG8:>2DonatesaboutInfoClass5@=CBLAOReturnaboutInfoClass;03>40@=>AB8 Thanks ToaboutInfoClass5@52>4G8:8 TranslatorsaboutInfoClassjVCard4#40;8BL CG5B=CN 70?8AL %1?Delete %1 account? loginDialog,#40;8BL CG5B=CN 70?8ALDelete account loginDialog......loginDialogClass<<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">0:A8<0;L0O 4;8=0 ?0@>;O ICQ >3@0=8G5=0 8 A8<2>;0<8.</span></p></body></html>$

Maximum length of ICQ password is limited to 8 characters.

loginDialogClass#G5B=0O 70?8ALAccountloginDialogClass#G5B=0O 70?8AL:Account:loginDialogClass42B><0B8G5A:8 ?>4:;NG0BLAO AutoconnectloginDialogClass0@>;L: Password:loginDialogClass#40;8BL ?@>D8;LRemove profileloginDialogClass(!>E@0=8BL <>9 ?0@>;LSave my passwordloginDialogClass57>?0A=K9 2E>4 Secure loginloginDialogClass,>:07K20BL ?@8 70?CA:5Show on startuploginDialogClass >9B8Sign inloginDialogClass<8= minmainSettingsClassA5: smainSettingsClassF>1028BL CG5B=K5 70?8A8 2 <5=N B@5O Add accounts to system tray menumainSettingsClassA5340 =025@EC Always on topmainSettingsClassR2B><0B8G5A:89 AB0BCA ">BACBAB2CN" G5@57:Auto-away after:mainSettingsClass.2B><0B8G5A:8 A:@K20BL: Auto-hide:mainSettingsClassL5 ?>:07K20BL 480;>3 2E>40 ?@8 70?CA:5"Don't show login dialog on startupmainSettingsClass(!:@K20BL ?@8 70?CA:5Hide on startupmainSettingsClassP!>E@0=OBL @07<5@ 8 ?>78F8N 3;02=>3> >:=0"Save main window size and positionmainSettingsClass,>:07K20BL AB0BCA 4;O:Show status from:mainSettingsClassR 07@5H8BL 70?CA: B>;L:> >4=>9 :>?88 qutIM!Start only one qutIM at same timemainSettingsClass;02=K5 mainSettingsmainSettingsClass &KE>4&QuitqutIM&0AB@>9:8... &Settings...qutIM&D>@<;5=85...&User interface settings...qutIMPK 459AB28B5;L=> E>B8B5 A<5=8BL ?@>D8;L?%Do you really want to switch profile?qutIM*0AB@>9:8 ?;038=>2...Plug-in settings...qutIM!<5=8BL ?@>D8;LSwitch profilequtIM qutIMqutIM qutIMClass#G5B=K5 70?8A8Accounts qutimSettings;02=K5General qutimSettings";>10;L=K9 ?@>:A8 Global proxy qutimSettings.!>E@0=8BL %1 =0AB@>9:8?Save %1 settings? qutimSettings&!>E@0=8BL =0AB@>9:8 Save settings qutimSettings11qutimSettingsClass@8<5=8BLApplyqutimSettingsClass B<5=0CancelqutimSettingsClass:OKqutimSettingsClass0AB@>9:8SettingsqutimSettingsClass ) , qutim-0.2.0/languages/ru/binaries/urlpreview.qm0000644000175000017500000002747211225627111023261 0ustar euroelessareuroelessarA<>B@ :0@B8=>: 2 G0B5 87 AAK;>:Make URL previews in messagesurlpreviewPlugin109BbytesurlpreviewPlugin8%MAXH% - @07<5@ ?> 25@B8:0;8 %MAXH% macrourlpreviewSettingsClass<%MAXW% - @07<5@ ?> 3>@87>=B0;8 %MAXW% macrourlpreviewSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview ?;038= 4;O qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">25@A8O 87 SVN</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">;038= ?>:07K205B :0@B8=:8 2 G0B5 87 >B?@02;5==KE/?@8=OBKE AAK;>:</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">;5:A0=4@ 070@8=</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html>

URLPreview qutIM plugin

svn version

Make previews for URLs in messages

Author:

Alexander Kazarin

<boiler@co.ru>

(c) 2008-2009

urlpreviewSettingsClass ?;038=5AbouturlpreviewSettingsClassZ5 ?>:07K20BL 8=D>@<0F8N 4;O text/html AAK;>:*Don't show info for text/html content typeurlpreviewSettingsClass>:;NG8BL 4;O 2E>4OI8E A>>1I5=89Enable on incoming messagesurlpreviewSettingsClass@:;NG8BL 4;O 8AE>4OI8E A>>1I5=89Enable on outgoing messagesurlpreviewSettingsClassA=>2=K5GeneralurlpreviewSettingsClassJ(01;>= ?@54?@>A<>B@0 (2 >4=C AB@>:C):Image preview template:urlpreviewSettingsClass0@B8=:8ImagesurlpreviewSettingsClass$(01;>= 8=D>@<0F88:Info template:urlpreviewSettingsClassx0:@>AK: %TYPE% - B8? A>45@68<>3> %SIZE% - ;8=0 A>45@68<>3>5Macros: %TYPE% - Content-Type %SIZE% - Content-LengthurlpreviewSettingsClassr0:@>AK: %URL% - AAK;:0 =0 :0@B8=:C %UID% - C=8:0;L=K9 id5Macros: %URL% - Image URL %UID% - Generated unique IDurlpreviewSettingsClassF@545;L=K9 @07<5@ D09;0 (2 109B0E)Max file size limit (in bytes)urlpreviewSettingsClass0AB@>9:8SettingsurlpreviewSettingsClass ) , qutim-0.2.0/languages/ru/binaries/nowlistening.qm0000644000175000017500000006126411242431714023573 0ustar euroelessareuroelessar]GW2bh^v_5`% {`>YXm^] XǒeYH@_i4YAD[Cln.c]V J._ YXD E ƾ^ ysX Wh F=Z Pj B 5\< T^) Z s^ RW ZeZaέ$[iaPjVCard %artist - %title%artist - %title settingsUi<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">2B>@:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">2B>@ <>4C;O : Winamp:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;"> 2009</span></p></body></html>J

Now Listening qutIM Plugin

v 0.6

Author:

Ian 'NayZaK' Kazlauskas

nayzak90@googlemail.com

Winamp module author:

Rusanov Peter

tazkrut@mail.ru

(c) 2009

 settingsUi&<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">;O ICQ X-AB0BCA>2 459AB2CNB A;54CNI85 A>:@0I5=8O:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - 8A?>;=8B5;L</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - =0720=85</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - 0;L1><</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - =><5@ 4>@>6:8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - 4;8=0 70?8A8 2 <8=CB0E</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - ?>;=K9 ?CBL : D09;C</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">;O Jabber Tune AB0BCA>2 459AB2CNB A;54CNI85 A>:@0I5=8O:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - 8A?>;=8B5;L</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - =0720=85</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - 0;L1><</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - =>@<5@ 4>@>6:8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - 4;8=0 70?8A8 2 A5:C=40E</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - ?>;=K9 ?CBL : D09;C</span></p></body></html> g

For ICQ X-status message adopted next terms:

%artist - artist

%title - title

%album - album

%tracknumber - track number

%time - track length in minutes

%uri - full path to file

For Jabber Tune message adopted next terms:

artist - artist

title - title

album - album

tracknumber - track number

length - track length in seconds

uri - full path to file

 settingsUiAIMP settingsUi ?;038=5About settingsUi:B825= Activated settingsUiX:B828@>20BLAO ?@8 %-AB0BCA5 "!;CH0N <C7K:C"/Activates when X-status is "Listening to music" settingsUi Amarok 1.4 settingsUiAmarok 2 settingsUi Audacious settingsUiF7<5=OBL B5:CI55 %-AB0BCA A>>1I5=85 Changes current X-status message settingsUiH5@8>@48G=>ABL ?@>25@:8 (2 A5:C=40E)Check period (in seconds) settingsUi*"5:CI89 @568< ?;038=0Current plugin mode settingsUi50:B828@>20= Deactivated settingsUi&;O ICQ 0::0C=B>2For ICQ accounts settingsUi&;O 0::0C=B0 JabberFor Jabber accounts settingsUi:=> G0B0Form settingsUi<O :><?LNB5@0Hostname settingsUi=D>@<0F8OInfo settingsUiL=D>@<0F8O, :>B>@0O 1C45B ?@54AB02;5=0Info to be presented settingsUi>!;CH0N A59G0A: %artist - %titleListening now: %artist - %title settingsUiMPD settingsUi  568<Mode settingsUi$C7K:0;L=K9 ?;595@ Music Player settingsUi 0@>;LPassword settingsUi>@BPort settingsUiQMMP settingsUi RadioButton settingsUi Rhythmbox settingsUi$;O 2A5E 0::0C=B>2Set mode for all accounts settingsUi0AB@>9:8Settings settingsUiSong Bird (Linux) settingsUiVLC settingsUiWinamp settingsUi0A:0 %-AB0BCA0X-status message mask settingsUiJ# 20A =5B =8 ICQ =8 Jabber 0::0C=B0.#You have no ICQ or Jabber accounts. settingsUi artist title settingsUibackground-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png);Qbackground-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); settingsUi ) , qutim-0.2.0/languages/ru/binaries/formules.qm0000644000175000017500000000112711247342743022707 0ustar euroelessareuroelessar:070 8AE>4=>3> B5:AB0 2K@065=8O 8A?>;L7>20BL:*Do next to show source text of evaluation:formulesSettingsClass0AHB01:Scale:formulesSettingsClass0AB@>9:8SettingsformulesSettingsClass([tex]+ [/tex]ex]EVALUATION THERE[/tex]formulesSettingsClass ) , qutim-0.2.0/languages/ru/binaries/histman.qm0000644000175000017500000001201611267600246022512 0ustar euroelessareuroelessarf)> *@ .O Nc o^ `*WܝZHzTt.^ d 1aO ?x IJ ҩ >  Zu |E% ; p t ^ 8BZ.i 0AB5@ WizardPageChooseClientPage.!1@>A8BL 8AB>@8N 2 D09; Dump historyChooseOrDumpPage*<?>@B8@>20BL 8AB>@8N#Import history from one more clientChooseOrDumpPage 0AB5@ WizardPageChooseOrDumpPage......ClientConfigPage>48@>2:0: Encoding:ClientConfigPageCBL : ?@>D8;N:Path to profile:ClientConfigPage`K15@8B5 0::0C=B 4;O :064>3> ?@>B>:>;0 2 A?8A:5..Select accounts for each protocol in the list.ClientConfigPageBK15@8B5 20H Jabber/XMPP 0::0C=B.Select your Jabber account.ClientConfigPage 0AB5@ WizardPageClientConfigPage8=0@=K9BinaryDumpHistoryPage K15@8B5 D>@<0B:Choose format:DumpHistoryPage&!>E@0=5=85 8AB>@88:Dumping history state:DumpHistoryPageJSONDumpHistoryPage(1L548=5=85 8AB>@88:Merging history state:DumpHistoryPage 0AB5@ WizardPageDumpHistoryPage|K15@8B5 :;85=B, 8AB>@8N :>B>@>3> =C6=> 8<?>@B8@>20BL 2 qutIM.8Choose client which history you want to import to qutIM. HistoryManager::ChooseClientPage ;85=BClient HistoryManager::ChooseClientPage>6=> 2K1@0BL 4@C3>9 :;85=B 4;O 8<?>@B8@>20=8O 8;8 A>E@0=5=8O 8AB>@88 =0 48A:.WIt is possible to choose another client for import history or dump history to the disk. HistoryManager::ChooseOrDumpPage'B> 40;LH5?What to do next? HistoryManager::ChooseOrDumpPage0AB@>9:8 Configuration HistoryManager::ClientConfigPage@#:068B5 ?CBL : ?0?:5 ?@>D8;O %1."Enter path of your %1 profile dir. HistoryManager::ClientConfigPage@#:068B5 ?CBL : D09;C ?@>D8;O %1.#Enter path of your %1 profile file. HistoryManager::ClientConfigPageA;8 :>48@>2:0 8AB>@88 >B;8G05BAO >B ;A8AB5<=>9, 2K15@8B5 B@51C5<CN.bIf your history encoding differs from the system one, choose the appropriate encoding for history. HistoryManager::ClientConfigPage#:068B5 ?CBL Select path HistoryManager::ClientConfigPage!8AB5<0System HistoryManager::ClientConfigPage!>6@0=5=85DumpingHistoryManager::DumpHistoryPage<AB>@8O CA?5H=> 8<?>@B8@>20=0.&History has been succesfully imported.HistoryManager::DumpHistoryPagev>A;54=89 H03. 06<8B5 "!>E@0=8BL" 4;O >1L548=5=8O 8AB>@89.1Last step. Click 'Dump' to start dumping process.HistoryManager::DumpHistoryPage`1L548=5=85 8AB>@88, MB> 709<5B =5:>B>@>5 2@5<O.5Manager merges history, it make take several minutes.HistoryManager::DumpHistoryPage&!>E@0=8BL&Dump$HistoryManager::HistoryManagerWindow 5=5465@ 8AB>@88History manager$HistoryManager::HistoryManagerWindow\%n A>>1I5=85 1K;> ?>;=>ABLN 70@C65=> 2 ?0<OBL.\%n A>>1I5=8O 1K;> ?>;=>ABLN 70@C65=> 2 ?0<OBL.\%n A>>1I5=89 1K;> ?>;=>ABLN 70@C65=> 2 ?0<OBL.5%n message(s) have been succesfully loaded to memory.!HistoryManager::ImportHistoryPage0-B> ?>B@51C5B %n <8=CBC.0-B> ?>B@51C5B %n <8=CBK..-B> ?>B@51C5B %n <8=CB.It has taken %n ms.!HistoryManager::ImportHistoryPage03@C7:0Loading!HistoryManager::ImportHistoryPage5=5465@ 703@C605B 2AN 8AB>@8N 2 ?0<OBL, MB> <>65B 70=OBL =5A:>;L:> <8=CB.AManager loads all history to memory, it may take several minutes.!HistoryManager::ImportHistoryPage<?>@B 8AB>@88Import historyHistoryManagerPlugin 0AB5 WizardPageImportHistoryPage ) , qutim-0.2.0/languages/ru/binaries/protocolicon.qm0000644000175000017500000000076611225627111023564 0ustar euroelessareuroelessar PluginSettings07<5=8BL 8:>=:C 0::0C=B0Change account iconPluginSettings07<5=8BL 8:>=:C :>=B0:B0Change contact iconPluginSettingsDK15@8B5 B5<C ?@>B>:>;L=KE 8:>=>:: Select protocol icon theme pack:PluginSettingsjVCardqutim-0.2.0/languages/ru/binaries/massmessaging.qm0000644000175000017500000001637111245361741023720 0ustar euroelessareuroelessar'w'mnʗC*0T9 yR  4 5 = RV6 T Cvi15Dialog<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TextLabel</span></p></body></html>

TextLabel

Dialog B<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">@8<5G0=8O:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">K <>65B5 8A?>;L7>20BL H01;>=K::</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - <O ?>;CG0;5;O </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - <O >B?@028B5;O (87 ?@>D8;O)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - "5:CI55 2@5<O</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html>!

Notes:

You can use the templates:

  • {reciever} - Name of the recipient
  • {sender} - Name of the sender (profile name)
  • {time} - Current time

Dialog59AB28OActionsDialog>=B5@20; >B?@02:8 (2 A5:C=40E):Interval (in seconds):Dialog ItemsDialog!>>1I5=85MessageDialog!?0<8;:0Multiply SendingDialog!?0<8BLSendDialogAB0=>28BLStopDialog#G5B=K5 70?8A8AccountsManager.H81:0: A>>1I5=85 ?CAB>Error: message is emptyManagerLH81:0: =58725AB=0O CG5B=0O 70?8AL: %1Error: unknown account : %1Manager58725AB=>UnknownManager!?0<8;:0Multiply Sending Messaging59AB28OActionsMessagingDialog 03@C78BL A?8A>:Load buddy listMessagingDialog.03@C78BL >A>1K9 A?8A>:Load custom buddy listMessagingDialogB!?0<8;:0: 2A5 A>>1I5=8O @07>A;0=K#Multiply sending: all jobs finishedMessagingDialog !>E@0=8BL A?8A>:Save buddy listMessagingDialog,B?@02:0 >>1I5=8O : %1Sending message to %1MessagingDialogfB?@02:0 A>>1I5=8O %1 (%2/%3), 2@5<5=8 >AB0;>AL: %4/Sending message to %1 (%2/%3), time remains: %4MessagingDialog:B?@02:0 A>>1I5=8O: %1: %v/%mSending message to %1: %v/%mMessagingDialog ) , qutim-0.2.0/languages/ru/binaries/jsonhistory.qm0000644000175000017500000000154211225627111023436 0ustar euroelessareuroelessar9:8 8AB>@88HistorySettingsHistorySettingsClass:!>E@0=OBL A>>1I5=8O 2 8AB>@88Save message historyHistorySettingsClassJ>:07K20BL ?>A;54=85 A>>1I5=8O 2 G0B5(Show recent messages in messaging windowHistorySettingsClass#G5B=0O 70?8AL:Account:HistoryWindowClassB:From:HistoryWindowClass 0704ReturnHistoryWindowClass A:0BLSearchHistoryWindowClass 5B 8AB>@88 :`-( No History#JsonHistoryNamespace::HistoryWindowAB>@8OHistoryQObject ) , qutim-0.2.0/languages/ru/binaries/libnotify.qm0000644000175000017500000000065011260607211023037 0ustar euroelessareuroelessar:8@>20==>5 A>>1I5=85 >B %1Blocked message from %1LibnotifyLayer&!8AB5<=>5 A>>1I5=85System message LibnotifyLayer2?@074=C5B 45=L @>645=89!!has birthday today!LibnotifyLayer ) , qutim-0.2.0/languages/ru/binaries/irc.qm0000644000175000017500000002744511225627111021632 0ustar euroelessareuroelessaradNdddd9doddd#li-TI \a b'p*P8%G"%e0EjZt{nr0arhF0Mm!H4^ RZ YUZ o2qi nZ # &O PT*;  N~ h>h   T( I I JV N R4 Ti V w {= { ee< u0 7  >  (  ) ū)G 7 8 p    P    Õ M  Ms Ap As At Au) Av` K ʌs T T { Y! 4W. o;8 o;k o; z Ĭ <  u 7drRAROj B*BӘGUd)vi*i6667AddAccountFormClass4>102;5=85 CG5B=KE 70?8A59AddAccountFormAddAccountFormClass8::Nick:AddAccountFormClass0@>;L: Password:AddAccountFormClass >@B:Port:AddAccountFormClass0AB>OI55 8<O: Real Name:AddAccountFormClass !>E@0=8BL ?0@>;L Save passwordAddAccountFormClass!5@25@:Server:AddAccountFormClassirc.freenode.netAddAccountFormClass&>=A>;L IRC A5@25@0IRC Server ConsoleIrcConsoleClass B>H5;Away ircAccount010=8BLBan ircAccount010=5=Banned ircAccountCTCP ircAccount7<5=8BL B5<C Change topic ircAccount(4<8=8AB@0B>@ :0=0;0Channel administrator ircAccount >45@0B>@ :0=0;0Channel half-operator ircAccount?5@0B>@ :0=0;0Channel operator ircAccount%>7O8= :0=0;0 Channel owner ircAccount!?8A>: :0=0;>2 Channels List ircAccount>=A>;LConsole ircAccount0BL ?>;C?0 Give HalfOp ircAccount0BL ?0Give Op ircAccount0BL 3>;>A Give Voice ircAccount?5@0B>@ IRC IRC operator ircAccount=D>@<0F8O Information ircAccount*>4:;NG8BLAO : :0=0;C Join Channel ircAccountK:8=CBLKick ircAccount8: / 0= Kick / Ban ircAccount@8G8=0 :8:0 Kick reason ircAccountK:8=CBL 7... Kick with... ircAccount  568<Mode ircAccount  568<KModes ircAccountB:;NG5=Offline ircAccount  A5B8Online ircAccount8G=K9 G0B Private chat ircAccount7OBL ?>;C>?0 Take HalfOp ircAccount7OBL ?0Take Op ircAccount27OBL >;>A Take Voice ircAccount 0710=8BLUnBan ircAccount >;>AVoice ircAccount>?>;=8B5;L=>AdvancedircAccountSettingsClass>7@0AB:Age:ircAccountSettingsClass&;LB5@=0B82=K9 =8::Alternate Nick:ircAccountSettingsClass Apple RomanircAccountSettingsClass@8<5=8BLApplyircAccountSettingsClassB2B><0B8G5A:8 2E>48BL ?@8 70?CA:5Autologin on startircAccountSettingsClass`2B><0B8G5A:8 ?>AK;0BL :><0=4C ?>A;5 A>548=5=8O: Autosend commands after connect:ircAccountSettingsClassURL 020B0@0: Avatar URL:ircAccountSettingsClassBig5ircAccountSettingsClass Big5-HKSCSircAccountSettingsClass B<5=0CancelircAccountSettingsClass>48@>2:0: Codepage:ircAccountSettingsClassEUC-JPircAccountSettingsClassEUC-KRircAccountSettingsClass5=A:89FemaleircAccountSettingsClass GB18030-0ircAccountSettingsClass>;:Gender:ircAccountSettingsClass;02=K5GeneralircAccountSettingsClassIBM 850ircAccountSettingsClassIBM 866ircAccountSettingsClassIBM 874ircAccountSettingsClassIRCIRC Account SettingsircAccountSettingsClass ISO 2022-JPircAccountSettingsClass ISO 8859-1ircAccountSettingsClass ISO 8859-10ircAccountSettingsClass ISO 8859-13ircAccountSettingsClass ISO 8859-14ircAccountSettingsClass ISO 8859-15ircAccountSettingsClass ISO 8859-16ircAccountSettingsClass ISO 8859-2ircAccountSettingsClass ISO 8859-3ircAccountSettingsClass ISO 8859-4ircAccountSettingsClass ISO 8859-5ircAccountSettingsClass ISO 8859-6ircAccountSettingsClass ISO 8859-7ircAccountSettingsClass ISO 8859-8ircAccountSettingsClass ISO 8859-9ircAccountSettingsClass45=B8D8:0F8OIdentifyircAccountSettingsClass Iscii-BngircAccountSettingsClass Iscii-DevircAccountSettingsClass Iscii-GjrircAccountSettingsClass Iscii-KndircAccountSettingsClass Iscii-MlmircAccountSettingsClass Iscii-OriircAccountSettingsClass Iscii-PnjircAccountSettingsClass Iscii-TlgircAccountSettingsClass Iscii-TmlircAccountSettingsClass JIS X 0201ircAccountSettingsClass JIS X 0208ircAccountSettingsClassKOI8-RircAccountSettingsClassKOI8-UircAccountSettingsClass /7K:8: Languages:ircAccountSettingsClass5AB>?>;>65=85LocationircAccountSettingsClassC6A:>9MaleircAccountSettingsClass MuleLao-1ircAccountSettingsClass8::Nick:ircAccountSettingsClass:OKircAccountSettingsClass@C3>5:Other:ircAccountSettingsClass >@B:Port:ircAccountSettingsClass*!>>1I5=85 ?@8 2KE>45: Quit message:ircAccountSettingsClassROMAN8ircAccountSettingsClass0AB>OI55 8<O: Real Name:ircAccountSettingsClass!5@25@:Server:ircAccountSettingsClass Shift-JISircAccountSettingsClassTIS-620ircAccountSettingsClassTSCIIircAccountSettingsClassUTF-16ircAccountSettingsClassUTF-16BEircAccountSettingsClassUTF-16LEircAccountSettingsClassUTF-8ircAccountSettingsClass5 C:070=> UnspecifiedircAccountSettingsClassWINSAMI2ircAccountSettingsClass Windows-1250ircAccountSettingsClass Windows-1251ircAccountSettingsClass Windows-1252ircAccountSettingsClass Windows-1253ircAccountSettingsClass Windows-1254ircAccountSettingsClass Windows-1255ircAccountSettingsClass Windows-1256ircAccountSettingsClass Windows-1257ircAccountSettingsClass Windows-1258ircAccountSettingsClass(%1CAB0=>28; @568< %2%1 has set mode %2 ircProtocol*%1 >B25B8; >B: %2: %3%1 reply from %2: %3 ircProtocol"%1 70?@0H8205B %2%1 requests %2 ircProtocolH%170?@0H8205B =58725AB=CN :><0=4C %2%1 requests unknown command %2 ircProtocol >4:;NG5=85 : %1Connecting to %1 ircProtocol,@>1C5< 4@C3>9 =8:: %1Trying alternate nick: %1 ircProtocol>?>;=8B5;L=>AdvancedircSettingsClass;02=K5MainircSettingsClassIRC ircSettingsircSettingsClassjVCard 0=0;:Channel:joinChannelClass*>4:;NG8BLAO : :0=0;C Join ChanneljoinChannelClass8!?8A>: :0=0;>2 703@C65= (%1)Channels list loaded. (%1) listChannel<>;CG5=85 A?8A:0 :0=0;>2... %1Fetching channels list... %1 listChannel@>;CG5=85 A?8A:0 :0=0;>2... (%1)Fetching channels list... (%1) listChannelJB?@02:0 70?@>A0 =0 A?8A>: :0=0;>2... Sending channels list request... listChannel<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html>

listChannelClass 0=0;ChannellistChannelClass!?8A>: :0=0;>2 Channels ListlistChannelClass*$8;LB@>20BL A CG5B><: Filter by:listChannelClass 0?@>A8BL A?8A>: Request listlistChannelClass"5<0TopiclistChannelClass>;L7>20B5;8UserslistChannelClass textDialogtextDialogClass ) , qutim-0.2.0/languages/ru/binaries/jabber.qm0000644000175000017500000015436311260607211022300 0ustar euroelessareuroelessarTzTo)TF$VEVEWizp W-gWpY'bdYbOZ PZA[1^%cn9cn:i\ZpDinvy.~?^"5KK1">`]gVx36*GŖI@$ $cCBWu:a]CqJ0. )<6 ?^ :Ayg7~|(OUM&X^H%Z@]7:m4usC yeWjl-T,0zD Or)lS#aAPuHA6F%MU_Nv0 fN`d6]^ëJ4Si?NOW4v6o~js67+G+TIl2XrYV^jonrH%;|;Tn}9gd5ynÌD:zAx8v۝D&#"nIJ {L'4P6{fFlrqJrytz)}37xi7(s~1r%TCwIINIBuICIEI^JI_"IkQItIITIHTąf^f_`)!PW{G#7:% l֓,̸,,N4 <PtbVIl:l:y& &EN'V.ah()O!Sm*L56L9*7jS<7UHC8C HUe0EcnLDzUx^Dr@i GKy0%3Rz,G0 Pz3Tn0c|S4פ M B#C -D7;DFjNnFd*G(tM sS AZ~whDm,*OdxLa{N+*TdsY>1.=Lf9LG4,ŽjNLb>L:Zs ֳNU@G6jY.Y.t!G9 G9%=nnct,wt{}##$(-6<8A@_\>arpr{@~~U$t~g7=t"1([>`"t1lit$G>KaXh-6;t#P28(E82A$6#b8eqR8CnFUoB_kW?]n`|0\%I,D?s.'_ " / N { wwu d k - 4$] > >Г0S C F 7?2 L < eͲ` f '5 f gDE gK gU lJq o x 1= '5 u5 % 5A / :l > >FP >o  *PG  00 St% tl[ 2 S$ 2 2 ! T_ 3 F i 1 0'5C )O )h ] N Y n| 4/ ]o _Es  ]> i ]>E! #}C #[ ( -zp 0Ea NI8 Sy dN* ee ntb nt ## 0 =^ '6 ̩6a { R9k 8O %)^ ? %%& a ` BK B" B oB 'x { E, E© !  , (- /4. > RV2 ]$ fX gAe} tg ) ? Sd Stc S S" zq )#.w H@$ x, s: (w -a3 "E " O, qK ށ B $W ! '6 2 2  &T ; M S* dt 7@ Ph un0 ~i <jP(9?3yw+nF+n=x=P ^d"7yi 3)i3Zulj1l7BA\dZ)e64R@h@i=NG@ P0!7@Le&M&Rk>*zRk>OXPjmZw4Qf'gi>kfkmm"^8qt"t93LCucv vO8?KÒ't/ki2B>@87>20BL AuthorizeAcceptAuthDialogB:;>=8BLDenyAcceptAuthDialogFormAcceptAuthDialog3=>@8@>20BLIgnoreAcceptAuthDialog<=5B 3@C??K>  AddContact>1028BLAdd AddContact*>1028BL ?>;L7>20B5;OAdd User AddContact B<5=0Cancel AddContact@C??0:Group: AddContact Jabber ID: AddContact<O:Name: AddContact8B?@028BL 70?@>A 02B>@870F88Send authorization request AddContact2=D>@<0F8O > ?>;L7>20B5;5User information AddContactFormContactsT>:07K20BL E-AB0BCA QIP 2 A?8A:5 :>=B0:B>2 Show QIP xStatus in contact listContactsV>:07K20BL B5:AB AB0BCA0 2 A?8A:5 :>=B0:B>2(Show contact status text in contact listContacts>:07K20BL 7=0G>: 4>?>;=8B5;L=>9 45OB5;L=>AB8 2 A?8A:5 :>=B0:B>2+Show extended activity icon in contact listContactsr>:07K20BL 7=0G>: 3;02=>9 45OB5;L=>AB8 2 A?8A:5 :>=B0:B>2'Show main activity icon in contact listContactsR>:07K20BL >A=>2=>9 @5AC@A 2 C254><;5=8OE#Show main resource in notificationsContacts^>:07K20BL 7=0G>: =0AB@>5=8O 2 A?8A:5 :>=B0:B>2Show mood icon in contact listContactsV>:07K20BL 7=0G>: =5>1E>48<>AB8 02B>@870F88Show not authorized iconContactsV>:07K20BL 7=0G>: <C7K:8 2 A?8A:5 :>=B0:B>2Show tune icon in contact listContacts B<5=0CancelDialog 80;>3DialogDialog:OkDialogB>H5;:Away:JabberSettings5 15A?>:>8BL:DND:JabberSettings( 5AC@A ?>-C<>;G0=8N:Default resource:JabberSettings<5 ?>AK;0BL 70?@>AK =0 020B0@KDon't send request for avatarsJabberSettingsFormJabberSettings >B>2 ?>1>;B0BL:Free for chat:JabberSettings2>@B 4;O ?5@540G8 D09;>2:Listen port for filetransfer:JabberSettings54>ABC?5=:NA:JabberSettings A5B8:Online:JabberSettings8@8>@8B5B 7028A8B >B AB0BCA0Priority depends on statusJabberSettings>>4:;NG0BLAO ?>A;5 >1@K20 A2O78Reconnect after disconnectJabberSettings*2B><0B8G5A:8 2E>48BL Auto joinJoinChat0:;04:8 BookmarksJoinChat>=D5@5=F8O ConferenceJoinChatH:mm:ssJoinChatAB>@8OHistoryJoinChat >9B8JoinJoinChat*>9B8 2 3@C??>2>9 G0BJoin groupchatJoinChat<ONameJoinChat8:NickJoinChat 0@>;LPasswordJoinChat$>;CG8BL ?>A;54=85 Request last JoinChatL>;CG8BL ?>A;54=85 A>>1I5=8O =0G8=0O ARequest messages sinceJoinChatL>;CG8BL ?>A;54=85 A>>1I5=8O =0G8=0O A#Request messages since the datetimeJoinChat!>E@0=8BLSaveJoinChat >8A:SearchJoinChat0AB@>9:8SettingsJoinChatA>>1I5=8O (-89)messagesJoinChat%1 LoginForm%1 LoginForm 538AB@0F8O Registration LoginForm.K 4>;6=K 225AB8 ?0@>;LYou must enter a password LoginForm>K 4>;6=K 225AB8 ?@028;L=K9 JIDYou must enter a valid jid LoginFormJID:LoginFormClass LoginFormLoginFormClass0@>;L: Password:LoginFormClass 0@538AB@8@>20BLRegister this accountLoginFormClass"-;5:B@>==0O ?>GB0E-mailPersonalFormPersonal;02=K5GeneralPersonal><HomePersonal"5;5D>=PhonePersonal  01>B0WorkPersonal%1QObject%1 4=59%1 daysQObject%1 G0A>2%1 hoursQObject%1 <8=CB %1 minutesQObject%1 A5:C=40 %1 secondQObject%1 A5:C=4 %1 secondsQObject %1 ;5B%1 yearsQObject 1 45=L1 dayQObject 1 G0A1 hourQObject1 <8=CB01 minuteQObject 1 3>41 yearQObject%1QObjectf<font size='2'><b>2B>@870F8O:</b> <i>></i></font>7Authorization: FromQObjecth<font size='2'><b>2B>@870F8O:</b> <i>5B</i></font>7Authorization: NoneQObjectf<font size='2'><b>2B>@870F8O:</b> <i>></i></font>5Authorization: ToQObjectb<font size='2'><b>>7<>6=K9 :;85=B:</b> %1</font>0Possible client: %1QObjectN<font size='2'><b>!B0BCA:</b> %1</font>,Status text: %1QObject<font size='2'><b>>;L7>20B5;L CH5; 2:</b> <i>%1</i> (?>B><C GB>: <i>%2</i>)</font>VUser went offline at: %1 (with message: %2)QObjectv<font size='2'><b>>;L7>20B5;L CH5; 2:</b> <i>%1</i></font><User went offline at: %1QObject#%1: %2QObject%1QObjectP<font size='2'><i>!;CH05B:</i> %1</font>*Listening: %1QObject5OB5;L=>ABLActivityQObjectA?C30==K9AfraidQObjectA5 D09;K (*) All files (*)QObject#482;5==K9AmazedQObject;N1;5==K9AmorousQObject;>9AngryQObject 074>A04>20==K9AnnoyedQObject"@52>6=K9AnxiousQObject>71C645==K9ArousedQObject@8ABK65==K9AshamedQObject!:CG0NI89BoredQObject@>A0NI89 2K7>2BraveQObject!?>:>9=K9CalmQObjectAB>@>6=K9CautiousQObject0<5@7H89ColdQObject#25@5==K9 ConfidentQObject!<CI5==K9ConfusedQObject04C<G82K9 ContemplativeQObject>2>;L=K9 ContentedQObject 074@065==K9CrankyQObject!C<0AH54H89CrazyQObject"2>@G5A:89CreativeQObjectN1>?KB=K9CuriousQObject@CAB=K9DejectedQObject5?@5AA82=K9 DepressedQObject 07>G0@>20==K9 DisappointedQObjectB2@0I5=85 DisgustedQObjectA?C30==K9DismayedQObject 0AAB@>5==K9 DistractedQObject5;0 Doing choresQObjectLNDrinkingQObject<EatingQObject!:>=DC65==K9 EmbarrassedQObject0284CNI89EnviousQObject72>;=>20==K9ExcitedQObject0=8<0NAL ExercisingQObject>:5B;82K9 FlirtatiousQObject 07>G0@>20==K9 FrustratedQObject;03>40@=K9GratefulQObject3>@G5==K9GrievingQObject,@82>6C A51O 2 ?>@O4>:GroomingQObject5A45@60==K9GrumpyQObject8=>20BK9GuiltyQObject!G0AB;82K9HappyQObject20=8<0NAL 2 40==K9 <><5=BHaving appointmentQObject?B8<8AB8G=K9HopefulQObject 0@:>HotQObject#=865==K9HumbledQObjectA:>@1;5==K9 HumiliatedQObject>;>4=K9HungryQObject"A?KBK20NI89 1>;LHurtQObject0@>872>4OI89 2?5G0B;5=85 ImpressedQObject>OI89AOIn aweQObjectN1OI89In loveQObject57459AB2C5BInactiveQObject>7<CI5==K9 IndignantQObject=B5@5ACNI89AO InterestedQObjectB@0282H89AO IntoxicatedQObject5?>1548<K9 InvincibleQObject 52=82K9JealousQObject*>9B8 2 3@C??>2>9 G0BJoin groupchat onQObject48=>:89LonelyQObject>B5@O2H89AOLostQObject!G0AB;82K9LuckyQObject540;5:89MeanQObject0AB@>5=85MoodQObject& 4C@=>< =0AB@>5=88MoodyQObject5@2=K9NervousQObject57@07;8G=K9NeutralQObject0@CH82H89OffendedQObjectB:@KBL D09; Open FileQObject=52OI89AOOutragedQObject3@82K9PlayfulQObject >@4K9ProudQObject 0AA;01;5==K9RelaxedQObjectB4KE0NRelaxingQObject1;53G5==K9RelievedQObject!>60;5NI89 RemorsefulQObject5C3><>==K9RestlessQObject@CAB=K9SadQObject!0@:0AB8G=K9 SarcasticQObject>2>;L=K9 SatisfiedQObject!5@L57=K9SeriousQObject  H>:5ShockedQObject!B5A=ONI89AOShyQObject@81>;52H89SickQObject !>==K9SleepyQObject 5?>A@54AB25==K9 SpontaneousQObject0?@O65==K9StressedQObject!8;L=K9StrongQObject#482;5==K9 SurprisedQObject >2>@NTalkingQObject;03>40@=K9ThankfulQObject%>BOI89 ?8BLThirstyQObject#AB02H89TiredQObjectCB5H5AB2CN TravelingQObject0AB@>9:0TuneQObject 5>?@545;82H89AO UndefinedQObject58725AB=K9UnknownQObject !;01K9WeakQObject 01>B0NWorkingQObject72>;=>20==K9WorriedQObject 2 A?0 at the spaQObjectG8IC 7C1Kbrushing teethQObject$?>:C?0N ?@>4B>20@Kbuying groceriesQObjectC18@0NALcleaningQObject?@>3@0<<8@CNcodingQObject,54C =0 @01>BC/A @01>BK commutingQObject3>B>2;NcookingQObject=0 25;>A8?545cyclingQObject B0=FCNdancingQObject2KE>4=>9day offQObjectCE06820Ndoing maintenanceQObject45;0N 1;N40doing the dishesQObject AB8@0Ndoing the laundryQObject70 @C;5<drivingQObject @K10GCfishingQObject 83@0NgamingQObject,70=8<0NAL A>4>2>4AB2>< gardeningQObjectAB@83CALgetting a haircutQObject 3C;ON going outQObjectC?>@AB2CN hanging outQObject?82> having a beerQObject?5@5:CAK20Nhaving a snackQObject702B@0:0Nhaving breakfastQObject:>D5 having coffeeQObject >1540N having dinnerQObject C68=0N having lunchQObjectG09 having teaQObject?@OGCALhidingQObject BC@87<hikingQObject2 <0H8=5in a carQObject=0 2AB@5G5 in a meetingQObject 2 @50;L=>9 687=8 in real lifeQObject153 B@CAF>9joggingQObject2 02B>1CA5on a busQObject2 A0<>;5B5 on a planeQObject2 ?>5745 on a trainQObject2 4>@>35 on a tripQObject?> B5;5D>=C on the phoneQObject2 >B?CA:5 on vacationQObject?> 2845>A2O78on video phoneQObject=0 25G5@8=:5partyingQObject"70=8<0NAL A?>@B><playing sportsQObject <>;NALprayingQObject G8B0NreadingQObject@0AA:07K20N rehearsingQObject 1530NrunningQObject2 :><0=48@>2:5running an errandQObject"?;0=8@CN 2KE>4=K5scheduled holidayQObject 1@5NALshavingQObject"E>6C 70 ?>:C?:0<8shoppingQObject=0 ;K60EskiingQObjectA?;NsleepingQObject:C@NsmokingQObject>1I0NAL socializingQObject CGCABstudyingQObject703>@0N sunbathingQObject ?;020NswimmingQObject?@8=8<0N 20==C taking a bathQObject?@8=8<0N 4CHtaking a showerQObject 4C<0NthinkingQObject84C ?5H:><walkingQObject 2K3C;820N A>10:Cwalking the dogQObjectA<>B@N " watching TVQObjectA<>B@N D8;L<watching a movieQObjectB@5=8@CNAL working outQObject?8HCwritingQObject@8<5=8BLApply RoomConfig B<5=0Cancel RoomConfigForm RoomConfig:Ok RoomConfig4<8=8AB@0B>@KAdministratorsRoomParticipant@8<5=8BLApplyRoomParticipant010=5=BannedRoomParticipant B<5=0CancelRoomParticipantFormRoomParticipantJIDJIDRoomParticipant 535AB@8@>20=K9MembersRoomParticipant:OkRoomParticipant;045;LFKOwnersRoomParticipant@8G8=0ReasonRoomParticipant*2B><0B8G5A:8 2E>48BL Auto join SaveWidget0720=85:Bookmark name: SaveWidget B<5=0Cancel SaveWidget>=D5@5=F8O: Conferene: SaveWidget8::Nick: SaveWidget0@>;L: Password: SaveWidget!>E@0=8BLSave SaveWidget(!>E@0=8BL 2 70:;04:8Save to bookmarks SaveWidgetG8AB8BLClearSearch0:@KBLCloseSearch>;CG8BLFetchSearch >8A:FormSearch >8A:SearchSearch!5@25@:Server:Search>2548B5 A5@25@ 8 =0G=8B5 ?>8A:.$Type server and fetch search fields.Search">8A: :>=D5@5=F88Search conferenceSearchConference>8A: A;C61Search service SearchService">8A: B@0=A?>@B>2Search transportSearchTransport0>1028BL 2 A?8A>: ?@>:A8Add to proxy listServiceBrowser">1028BL 2 @>AB5@ Add to rosterServiceBrowser0:@KBLCloseServiceBrowser"K?>;=8BL :><0=4CExecute commandServiceBrowserJIDJIDServiceBrowser&>9B8 2 :>=D5@5=F8NJoin conferenceServiceBrowser<ONameServiceBrowser$0@538AB@8@>20BLAORegisterServiceBrowser >8A:SearchServiceBrowser!5@25@:Server:ServiceBrowser>:070BL vCard Show VCardServiceBrowser$1>7@520B5;L A;C61jServiceBrowserServiceBrowser& VCardAvatarv%1&nbsp;(<font color='#808080'>=525@=K9 D>@<0B 40BK</font>)8%1 (wrong date format) VCardBirthday5=L  >645=8O: Birthday: VCardBirthday >@>4:City: VCardRecord><?0=8O:Company: VCardRecord!B@0=0:Country: VCardRecord5?0@B0<5=B: Department: VCardRecord>GB>2K9 OI8::PO Box: VCardRecord=45:A: Post code: VCardRecord 538>=:Region: VCardRecord" >4 45OB5;L=>AB8:Role: VCardRecord !09B:Site: VCardRecord #;8F0:Street: VCardRecord0720=85:Title: VCardRecord<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

 XmlConsole <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html>

 XmlConsoleG8AB8BLClear XmlConsole0:@KBLClose XmlConsoleForm XmlConsoleXML 22>4... XML Input... XmlConsole&0:@KBL&Close XmlPrompt&B?@028BL&Send XmlPromptXML 22>4 XML Input XmlPrompt B<5=0CancelactivityDialogClass K1>@ChooseactivityDialogClass*K15@8B5 45OB5;L=>ABLChoose your activityactivityDialogClass B<5=0CancelcustomStatusDialogClassK1@0BLChoosecustomStatusDialogClass0K15@8B5 20H5 =0AB@>5=85Choose your moodcustomStatusDialogClass,>1028BL =>2K9 :>=B0:BAdd new contactjAccount2>1028BL =>2K9 :>=B0:B =0Add new contact onjAccount>?>;=8B5;L=> AdditionaljAccount B>H5;AwayjAccount>=D5@5=F88 ConferencesjAccount5 15A?>:>8BLDNDjAccount$09B8 ?>;L7>20B5;O Find usersjAccount>B>2 ?>1>;B0BL Free for chatjAccount$52848<K9 4;O 2A5EInvisible for alljAccountN52848<K9 B>;L:> 4;O A?8A:0 =52848<>AB8!Invisible only for invisible listjAccount*>9B8 2 3@C??>2>9 G0BJoin groupchatjAccount54>ABC?5=NAjAccountB:;NG5=OfflinejAccount  A5B8OnlinejAccount&B:@KBL XML :>=A>;LOpen XML consolejAccount @820B=K9 AB0BCAPrivacy statusjAccount$1>7@520B5;L A;C61Service browserjAccount !;C61KServicesjAccount.#AB0=>28BL 45OB5;L=>ABL Set activityjAccount*#AB0=>28BL =0AB@>5=85Set moodjAccount6>A<>B@5BL/87<5=8BL 2878B:CView/change personal vCardjAccount 848<K9 4;O 2A5EVisible for alljAccountF848<K9 B>;L:> 4;O A?8A:0 2848<>AB8Visible only for visible listjAccountLK 4>;6=K C:070BL ?0@>;L 2 =0AB@>9:0E.&You must enter a password in settings.jAccountK 4>;6=K 8A?>;L7>20BL 459AB28B5;L=K9 jid. >60;C9AB0, ?5@5A>7409B5 CG5B=CN 70?8AL jabber.?You must use a valid jid. Please, recreate your jabber account.jAccount" 540:B8@>20=85 %1 Editing %1jAccountSettings@54C?@5645=85WarningjAccountSettings.K 4>;6=K 225AB8 ?0@>;LYou must enter a passwordjAccountSettings#G5B=0O 70?8ALAccountjAccountSettingsClass A5340AlwaysjAccountSettingsClass@8<5=8BLApplyjAccountSettingsClassCB5=B8D8:0F8OAuthenticationjAccountSettingsClassL2B><0B8G5A:8 ?>4:;NG0BLAO ?@8 70?CA:5Autoconnect at startjAccountSettingsClass B<5=0CanceljAccountSettingsClass>!68<0BL B@0DD8: (5A;8 2>7<>6=>)Compress traffic (if possible)jAccountSettingsClass!>548=5=85 ConnectionjAccountSettingsClass> C<>;G0=8NDefaultjAccountSettingsClass,0I8I5==>5 A>548=5=85:Encrypt connection:jAccountSettingsClassHTTPjAccountSettingsClass %>AB:Host:jAccountSettingsClassJID:jAccountSettingsClassH!>E@0=OBL AB0BCA A ?@54K4CI59 A5AA88Keep previous session statusjAccountSettingsClass2%@0=8BL 70:;04:8 ;>:0;L=>Local bookmark storagejAccountSettingsClass<#AB0=>28BL 2@CG=CN E>AB 8 ?>@B!Manually set server host and portjAccountSettingsClass8:>340NeverjAccountSettingsClass5BNonejAccountSettingsClass:OKjAccountSettingsClass0@>;L: Password:jAccountSettingsClass >@B:Port:jAccountSettingsClass@8>@8B5B: Priority:jAccountSettingsClass @>:A8ProxyjAccountSettingsClass"8? ?@>:A8: Proxy type:jAccountSettingsClass 5AC@A: Resource:jAccountSettingsClassSOCKS 5jAccountSettingsClassT#AB0=>28BL ?@8>@8B5B, 7028AOI89 >B AB0BCA0$Set priority depending of the statusjAccountSettingsClass|A?>;L7C9B5 MBC >?F8N 4;O A5@25@>2, =5 ?>44C@6820NI8E 70:;04:84Use this option for servers doesn't support bookmarkjAccountSettingsClass"<O ?>;L7>20B5;O: User name:jAccountSettingsClass>340 4>ABC?=>When availablejAccountSettingsClass>0AB@>9:0 CG5B=>9 70?8A8 JabberjAccountSettingsjAccountSettingsClass<=5B 3@C??K>  jAddContact !;C61KServices jAddContact B<5=0CanceljAdhoc025@H8BLCompletejAdhoc0:>=G8BLFinishjAdhoc!;54CNI89NextjAdhoc:OkjAdhoc@54K4CI89PreviousjAdhoc%1 1K; 7010=5=%1 has been banned jConference%1 1K; :8:=CB%1 has been kicked jConference$%1 ?>:8=C; :><=0BC%1 has left the room jConference*%1 CAB0=>28; B5<C: %2%1 has set the subject to: %2 jConference2%1 B5?5@L 8725AB5= :0: %2%1 is now known as %2 jConference.%2 (%1) 2>H5; 2 :><=0BC%2 (%1) has joined the room jConference$%2 2>H5; 2 :><=0BC%2 has joined the room jConference2%2 2>H5; 2 :><=0BC :0: %1%2 has joined the room as %1 jConference%2 B5?5@L %1 %2 now is %1 jConference<%3 (%2) 2>H5; 2 :><=0BC :0: %1!%3 (%2) has joined the room as %1 jConference"%3 (%2) B5?5@L %1%3 (%2) now is %1 jConference<%3 2>H5; 2 :><=0BC :0: %1 8 %2#%3 has joined the room as %1 and %2 jConference"%3 B5?5@L %1 8 %2%3 now is %1 and %2 jConferenceF%4 (%3) 2>H5; 2 :><=0BC :0: %1 8 %2(%4 (%3) has joined the room as %1 and %2 jConference,%4 (%3) B5?5@L %1 8 %2%4 (%3) now is %1 and %2 jConference\<font size='2'><b>@8A>548=5=8O:</b> %1</font>,Affiliation: %1 jConferenceH<font size='2'><b>JID:</b> %1</font>$JID: %1 jConferenceJ<font size='2'><b> >;L:</b> %1</font>%Role: %1 jConference6>1028BL 2 A?8A>: :>=B0:B>2Add to contact list jConference0=Ban jConference0=-A>>1I5=85 Ban message jConference>=D;8:B: 5;05<K9 =8: 8A?>;L7C5BAO 2 :><=0B5 8;8 70@538AB@8@>20= 4@C38< ?>;L7>20B5;5<.HConflict: Desired room nickname is in use or registered by another user. jConference<!:>?8@>20BL JID 2 1CD5@ >1<5=0Copy JID to clipboard jConferenceh0?@5I5=>: B:070=> 2 4>ABC?5, ?>;L7>20B5;L 7010=5=.)Forbidden: Access denied, user is banned. jConference4@83;0A8BL 2 3@C??>2>9 G0BInvite to groupchat jConferenceNC=:B =5 =0945=: ><=0B0 =5 ACI5AB2C5B.(Item not found: The room does not exist. jConference*>9B8 2 3@C??>2>9 G0BJoin groupchat on jConference8:Kick jConference8:-A>>1I5=85 Kick message jConference>45@0B>@ Moderator jConferenceT54>?CAB8<>: 8:8 2 :><=0B5 701;>:8@>20=K.+Not acceptable: Room nicks are locked down. jConferenceR5 @07@5H5=>: !>740=85 :><=0B >3@0=8G5=>.)Not allowed: Room creation is restricted. jConferenceB5 02B>@87>20=: B@51C5BAO ?0@>;L."Not authorized: Password required. jConference#G0AB=8: Participant jConference"@51C5BAO @538AB@0F8O: >;L7>20B5;L =5 2 A?8A:5 @538AB@8@>20==KE.6Registration required: User is not on the member list. jConference&>9B8 2 :>=D5@5=F8NRejoin to conference jConference(>=D83C@0F8O :><=0BKRoom configuration jConference0>=D83C@0F8O :><=0BK: %1Room configuration: %1 jConference"#G0AB=8:8 :><=0BKRoom participants jConference*#G0AB=8:8 :><=0BK: %1Room participants: %1 jConference(!>E@0=8BL 2 70:;04:8Save to bookmarks jConference!5@28A =54>ABC?5=: >AB83=CB> <0:A8<0;L=>5 :>;8G5AB2> ?>;L7>20B5;59.>Service unavailable: Maximum number of users has been reached. jConference"5<0: %2The subject is: %2 jConference@58725AB=0 >H81:0: 5B >?8A0=8O.Unknown error: No description. jConference>;L7>20B5;L %1 ?@83;0H05B 20A 2 :>=D5@5=F8N %2 A ?@8G8=>9 "%3" @8=OBL ?@83;0H5=85?GUser %1 invite you to conference %2 with reason "%3" Accept invitation? jConference >ABLVisitor jConference K 1K;8 7010=5=KYou have been banned jConference&K 1K;8 7010=5=K 87You have been banned from jConferenceK 1K;8 :8:=CBKYou have been kicked jConference$K 1K;8 :8:=CBK 87You have been kicked from jConference04<8=8AB@0B>@ administrator jConference7010=5=K9banned jConference 3>ABLguest jConference @538AB@8@>20==K9member jConference<>45@0B>@ moderator jConference2;045;5Fowner jConferenceCG0AB=8: participant jConference?>A5B8B5;Lvisitor jConferenceA ?@8G8=>9: with reason: jConference157 ?@8G8=Kwithout reason jConference@8=OBLAcceptjFileTransferRequestB:;>=8BLDeclinejFileTransferRequest<O D09;0: File name:jFileTransferRequest 07<5@ D09;0: File size:jFileTransferRequestFormjFileTransferRequestB:From:jFileTransferRequest!>E@0=8BL D09; Save FilejFileTransferRequest B<5=0CanceljFileTransferWidget0:@KBLClosejFileTransferWidget>B>2>...Done...jFileTransferWidget>B>2>:Done:jFileTransferWidget 07<5@ D09;0: File size:jFileTransferWidget$5@540G0 D09;0: %1File transfer: %1jFileTransferWidget<O D09;0: Filename:jFileTransferWidgetFormjFileTransferWidget@85<... Getting...jFileTransferWidget@5<5=8 ?@>H;>: Last time:jFileTransferWidgetB:@KBLOpenjFileTransferWidget"@5<5=8 >AB0;>AL:Remained time:jFileTransferWidgetB?@02:0... Sending...jFileTransferWidget!:>@>ABL:Speed:jFileTransferWidget!B0BCA:Status:jFileTransferWidget6840=85... Waiting...jFileTransferWidget">20O :>=D5@5=F8ONew conference jJoinChat=>2K9 G0Bnew chat jJoinChat>=B0:BKContactsjLayerJabber 3;02=K5Jabber GeneraljLayer%2 <%1>%2 <%1> jProtocol2H81:0. >B>: 1K; 70:@KB.3A stream error occured. The stream has been closed. jProtocol(H81:0 22>40-2K2>40.An I/O error occured. jProtocol(H81:0 @071>@:8 XML.An XML parse error occurred. jProtocol>38=/0@>;L =5 25@=K 8;8 0::0C=B =5 =0945=. Use ClientBase::authError() to find the reason.yAuthentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. jProtocol$0?@>A 02B>@870F88Authorization request jProtocol:2B>@870F8O :>=B0:B0 >B>720=0$Contacts's authorization was removed jProtocolb5 C40;>AL 0CB5=B8D8F8@>20BLAO =0 ?@>:A8 A5@25@5.(HTTP/SOCKS5 proxy authentication failed. jProtocol6JID: %1<br/>57459AB285: %2JID: %1
Idle: %2 jProtocollJID: %1<br/> DC=:F8O =5 ?>445@68205BAO GC68< A5@25@><.PJID: %1
The feature requested is not implemented by the recipient or server. jProtocolH5 C40;>AL >?@545;8BL 04@5A A5@25@0.'Resolving the server's hostname failed. jProtocol(B?@028B5;L: %2 <%1>Sender: %2 <%1> jProtocolB?@028B5;8: Senders:  jProtocol !;C61KServices jProtocol"5<0: %1 Subject: %1 jProtocolt@>:A8 B@51C5B =5 ?>445@6205<>3> <5E0=87<0 0CB5=B8D8:0F88.=The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. jProtocolT@>:A8 HTTP/SOCKS5 B@51C5B 0CB5=B8D8:0F88..The HTTP/SOCKS5 proxy requires authentication. jProtocold!>548=5=85 >B:;>=5=> A5@25@>< (=0 C@>2=5 A>:5B>2).?The connection was refused by the server (on the socket level). jProtocolR5@A8O 2E>4OI53> ?>B>:0 =5 ?>445@68205BAO.The incoming stream's version is not supported jProtocolv!5@B8D8:0B A5@25@0 =5 25@=K9 8;8 TLS A>548=5=85 ?@5@20;>AL.bThe server's certificate could not be verified or the TLS handshake did not complete successfully. jProtocol,>B>: 70:@KB A5@25@><.+The stream has been closed (by the server). jProtocol25B 0:B82=>3> A>548=5=8O.There is no active connection. jProtocolURL: %1URL: %1 jProtocol#! -B> =58725AB=0O >H81:0. "> GB> 2K 5Q C2845;8 ?@>AB> =5 2>7<>6=> - => C2K MB> B0: 0_O3Unknown error. It is amazing that you see it... O_o jProtocol65?@>G8B0==K5 A>>1I5=8O: %1Unreaded messages: %1 jProtocol 0A 02B>@87>20;8You were authorized jProtocol20H0 02B>@870F8O >B>720=0Your authorization was removed jProtocolen jProtocol2878B:0 CA?5H=> A>E@0=5=0vCard is succesfully saved jProtocolF<h3>=D>@<0F8O > 45OB5;L=>AB8:</h3>

Activity info:

 jPubsubInfoB<h3>=D>@<0F8O > =0AB@>5=88:</h3>

Mood info:

 jPubsubInfo8<h3>=D>@<0F8O > ?5A=5:</h3>

Tune info:

 jPubsubInfo@B8AB: %1 Artist: %1 jPubsubInfo;02=K5: %1 General: %1 jPubsubInfo;8=0: %1 Length: %1 jPubsubInfo<O: %1Name: %1 jPubsubInfo 59B8=3: %1 Rating: %1 jPubsubInfoAB>G=8:: %1 Source: %1 jPubsubInfo$=48284C0;L=K5: %1 Specific: %1 jPubsubInfo"5:AB: %1Text: %1 jPubsubInfo0720=85: %1 Title: %1 jPubsubInfo>@>6:0: %1 Track: %1 jPubsubInfo4Uri: <a href="%1">link</a>Uri: link jPubsubInfo0:@KBLClosejPubsubInfoClass"=D>@<0F8O PubSub Pubsub infojPubsubInfoClass6>1028BL 2 A?8A>: :>=B0:B>2Add to contact listjRoster>>1028BL 2 A?8A>: 83=>@8@>20=8OAdd to ignore listjRoster:>1028BL 2 A?8A>: =52848<>AB8Add to invisible listjRoster6>1028BL 2 A?8A>: 2848<>AB8Add to visible listjRoster*0?@>A8BL 02B>@870F8NAsk authorization fromjRoster00?@>A8BL 02B>@870F8N %1Ask authorization from %1jRoster2B>@870F8O AuthorizationjRoster*2B>@87>20BL :>=B0:B?Authorize contact?jRoster B<5=0CanceljRosterB>=B0:B 1C45B C40;5=. K C25@5=K?&Contact will be deleted. Are you sure?jRoster<!:>?8@>20BL JID 2 1CD5@ >1<5=0Copy JID to clipboardjRoster#40;8BL :>=B0:BDelete contactjRoster>#40;8BL 87 A?8A:0 83=>@8@>20=8ODelete from ignore listjRoster:#40;8BL 87 A?8A:0 =52848<>AB8Delete from invisible listjRoster6#40;8BL 87 A?8A:0 2848<>AB8Delete from visible listjRoster(#40;8BL A :>=B0:B0<8Delete with contactsjRoster*#40;8BL 157 :>=B0:B>2Delete without contactsjRoster"K?>;=8BL :><0=4CExecute commandjRoster$K?>;=8BL :><0=4C:Execute command:jRoster*0?@>A8BL 157459AB285Get idlejRoster00?@>A8BL 157459AB285 A:Get idle from:jRoster@C??0:Group:jRoster0@830A8BL 2 :>=D5@5=F8N:Invite to conference:jRoster >9B8Log InjRoster K9B8Log OutjRoster5@5<5AB8BL %1Move %1jRoster(5@5<5AB8BL 2 3@C??C Move to groupjRoster<O:Name:jRoster$=D>@<0F8O PubSub: PubSub info:jRoster@8G8=0:Reason:jRoster$0@538AB@8@>20BLAORegisterjRoster&#40;8BL 02B>@870F8NRemove authorization fromjRoster,#40;8BL 02B>@870F8N %1Remove authorization from %1jRosterB#40;8BL B@0=A?>@B 8 53> :>=B0:BK?"Remove transport and his contacts?jRoster*5@58<5=>20BL :>=B0:BRename contactjRoster2B>@87>20BLSend authorization tojRosterB?@028BL D09; Send filejRosterB?@028BL D09;: Send file to:jRoster(B?@028BL A>>1I5=85:Send message to:jRoster !;C61KServicesjRoster"@0=A?>@BK TransportsjRoster(B<5=8BL @538AB@0F8N UnregisterjRoster H81:0ErrorjSearchJIDJIDjSearchJabber ID Jabber IDjSearch8:NicknamejSearch >8A:SearchjSearch:<br/><b>A>15==>AB8:</b><br/>
Features:
jServiceBrowser0<br/><b>8G=>5:</b><br/>
Identities:
jServiceBrowser:0B53>@8O: category: jServiceBrowserB8?:type: jServiceBrowser%1@%2 jSlotSignal$52848<K9 4;O 2A5EInvisible for all jSlotSignalN52848<K9 B>;L:> 4;O A?8A:0 =52848<>AB8!Invisible only for invisible list jSlotSignal 848<K9 4;O 2A5EVisible for all jSlotSignalF848<K9 B>;L:> 4;O A?8A:0 2848<>AB8Visible only for visible list jSlotSignal 4@5AAddress jTransport >@>4City jTransport0B0Date jTransport-;5:B@>?>GB0E-Mail jTransport<OFirst jTransport$0<8;8OLast jTransport @>G85Misc jTransport<OName jTransport8:Nick jTransport 0@>;LPassword jTransport"5;5D>=Phone jTransport$0@538AB@8@>20BLAORegister jTransport1;0ABLState jTransport "5:ABText jTransportURLURL jTransport =45:AZip jTransportjVCard,>1028BL ?>GB>2K9 OI8: Add PO boxjVCard,>1028BL 5=L  >645=8O Add birthdayjVCard>1028BL 3>@>4Add cityjVCard>1028BL AB@0=C Add countryjVCard">1028BL >?8A0=85Add descriptionjVCard4>1028BL 4><0H=NN AB@0=8FC Add homepagejVCard>1028BL 8<OAdd namejVCard>1028BL =8:Add nickjVCard:>1028BL =0720=85 >@30=870F88Add organization namejVCard,>1028BL ?>4@0745;5=85Add organization unitjVCard>1028BL 8=45:A Add postcodejVCard>1028BL @538>= Add regionjVCard$>1028BL 4>;6=>ABLAdd rolejVCard>1028BL C;8FC Add streetjVCard">1028BL =0720=85 Add titlejVCard0:@KBLClosejVCard@ 07<5@ 87>1@065=8O A;8H:>< 25;8:Image size is too bigjVCardX7>1@065=8O (*.gif *.bmp *.jpg *.jpeg *.png)'Images (*.gif *.bmp *.jpg *.jpeg *.png)jVCardB:@KBL D09; Open FilejVCard&H81:0 ?@8 >B:@KB88 Open errorjVCard 0?@>A8BL 45B0;8Request detailsjVCard!>E@0=8BLSavejVCard1=>28BL D>B> Update photojVCard2=D>@<0F8O > ?>;L7>20B5;5userInformationjVCard B<5=0CanceltopicConfigDialogClass7<5=8BLChangetopicConfigDialogClass7<5=8BL B5<C Change topictopicConfigDialogClass ) , qutim-0.2.0/languages/ru/binaries/kde-integration.qm0000644000175000017500000001274411261467354024150 0ustar euroelessareuroelessar3@0D8O Spell checkerKdeSpellerLayer2B>>?@545;5=85Autodetect of languageKdeSpellerSettings0AB@>9:8FormKdeSpellerSettings!;>20@L:Select dictionary:KdeSpellerSettings8# %1 A53>4=O 45=L @>645=8O!!%1 has birthday today!!QObject%1 ?5G0B05B %1 is typingQObjectJ01;>:8@>20=>5 A>>1I5=85 >B <br /> %1Blocked message from %1QObject !>>1I5=85 4;O %1Custom message for %1QObject !>>1I5=85 >B %1:Message from %1:QObject#254><;5=8O NotificationsQObject4!8AB5<=> A>>1I5=85 >B: %1:System message from %1:QObject <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">@>AB>9 ?;038= 4;O qutIM (kde-integration)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">2B>@: </span>!84>@>2 ;5:A59</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">>GB0: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html>

Simple qutIM plugin

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com

plugmanSettings ?;038=5AboutplugmanSettings0AB@>9:8FormplugmanSettings&#AB0=>28BL 87 D09;0Install from fileplugmanSettings$#AB0=>28BL 87 A5B8Install from internetplugmanSettings,#AB0=>2;5==K5 ?;038=K:Installed plugins:plugmanSettings0AB@>9:8SettingsplugmanSettings ) , qutim-0.2.0/languages/ru/binaries/fmtune.qm0000644000175000017500000003160211267600246022347 0ustar euroelessareuroelessar h> h  h Z' - .2 M G \Bo \B 5  + 2 0 s/ Ž Ž s n i i8:G iAM` <.// i1. <=>2.> EditStations>1028B AB0=F8N Add station EditStations>1028BL ?>B>: Add stream EditStations#40;8BL AB0=F8NDelete station EditStations #40;8BL AB0=F8N?Delete station? EditStations#40;8BL ?>B>: Delete stream EditStations#40;8BL ?>B>:?Delete stream? EditStations=87Down EditStations 7<5=8BL AB0=F88 Edit stations EditStations-:A?>@BExport EditStations-:A?>@B... Export... EditStationsFMtune XML (*.ftx) EditStations $>@<0BFormat EditStations$>@<0B:Format: EditStations 0=@:Genre: EditStations0@B8=:0:Image: EditStations <?>@BImport EditStations /7K:: Language: EditStations<O:Name: EditStations!>E@0=8BLSave EditStationsURL =0 ?>B>:: Stream URL: EditStationsURL EditStationsURL: EditStations 25@EUp EditStations"5<1@>1;>: Equalizer Equalizer.KAB@> 4>1028BL AB0=F8NFast add stationFastAddStation<O:Name:FastAddStation !AK;:0 =0 ?>B>:: Stream URL:FastAddStation ?>B>:streamFastAddStationKAB@> =09B8: Fast find: ImportExport025@H8BLFinish ImportExport8B@59B:Bitrate:Info1;>6:0:Cover:Info=D>@<0F8O InformationInfo  048>:Radio:Info 5A=O:Song:Info >B>::Stream:Info @5<O:Time:InfoB5 25@=0O 25@A8O Bass 181;8>B5:8.(An incorrect version of BASS was loaded. QMessageBoxf5 <>3C 8=8F80;878@>20BL CAB@>9AB2> 2>A?@>872545=8OCan't initialize device QMessageBox 0C70Pause Recording 0?8ALRecord Recording0?8AK20N Recording RecordingAB0=>28BLStop Recording%1% fmtunePlugin(><8@>20BL 8<O ?5A=8Copy song name fmtunePlugin!?8A>: AB0=F89 Edit stations fmtunePlugin-:20;0975@ Equalizer fmtunePlugin.KAB@> 4>1028BL AB0=F8NFast add station fmtunePlugin=D> Information fmtunePlugin703;CH8BL 72C:Mute fmtunePluginK:;NG8BL Radio off fmtunePlugin:;NG8BLRadio on fmtunePlugin 0?8AL Recording fmtunePlugin@><:>ABLVolume fmtunePlugin<!8AB5<0> fmtuneSettings<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">;038= FMtune</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;"> 2009</span></p></body></html>

FMtune plugin

v%1

Author:

Lms

lms.cze7@gmail.com

(c) 2009

fmtuneSettingsClass ?@>3@0<<5AboutfmtuneSettingsClassH:;NG8BL 3;>10;L=K5 A>G5B0=8O :;028H"Activate global keyboard shortcutsfmtuneSettingsClass#AB@>9AB20DevicesfmtuneSettingsClass;02=K5GeneralfmtuneSettingsClass6#AB@>9AB2> 2>A?@>872545=8O:Output device:fmtuneSettingsClass;038=KPluginsfmtuneSettingsClass0AB@>9:8SettingsfmtuneSettingsClass>@OG85 :;028H8 ShortcutsfmtuneSettingsClass6:;NG5=85/2K:;NG5=85 @048>:Turn on/off radio:fmtuneSettingsClass*#<5=LH5=85 3@><:>AB8: Volume down:fmtuneSettingsClass*K:;NG5=85 3@><:>AB8: Volume mute:fmtuneSettingsClass*#25;8G5=85 3@><:>AB8: Volume up:fmtuneSettingsClass ) , qutim-0.2.0/languages/ru/binaries/weather.qm0000644000175000017500000002143111227611644022507 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">>3>4=K9 ?;038= 4;O qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">8:8B0 5;>2</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;"> 2008-2009</span></p></body></html>

Weather qutIM plugin

v0.1.2 (Info)

Author:

Nikita Belov

null@deltaz.ru

(c) 2008-2009

weatherSettingsClass ?@>3@0<<5AboutweatherSettingsClass>1028BLAddweatherSettingsClass >@>40CitiesweatherSettingsClass#40;8BL 3>@>4 Delete cityweatherSettingsClass.#:068B5 =0720=85 3>@>40Enter city nameweatherSettingsClass$5@8>4 >1=>2;5=8O:Refresh period:weatherSettingsClass A:0BLSearchweatherSettingsClass0AB@>9:8SettingsweatherSettingsClass6>:07K20BL ?>3>4C 2 AB0BCA5Show weather in the status rowweatherSettingsClass ) , qutim-0.2.0/languages/ru/binaries/webhistory.qm0000644000175000017500000002407311225627111023246 0ustar euroelessareuroelessar$o s$XAn'^]C#vN&vi'p<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Web History ?;038= 4;O qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">%@0=5=85 8AB>@88 =0 Web A5@25@5</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">;5:A0=4@ 070@8=</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html>

Web History plugin for qutIM

svn version

Store history on web-server

Author:

Alexander Kazarin

boiler@co.ru

(c) 2009

historySettingsClass ?;038=5AbouthistorySettingsClassX:;NG8BL C254><;5=85 ?@8 ?>;CG5=88 A>>1I5=89%Enable notification when get messageshistorySettingsClass >38=:Login:historySettingsClass0@>;L: Password:historySettingsClass0AB@>9:8SettingshistorySettingsClassh%@0=8BL ;>:0;L=> 2 JSON D09;0E (?;038= JSON History)1Store locally in JSON files (JSON History plugin)historySettingsClassd%@0=8BL ;>:0;L=> 2 SQLite 1075 (?;038= SQLHistory)5Store locally in SQLite database (SQL History plugin)historySettingsClassL>;CG8BL A>>1I5=85 87 WebHistory:<br/>$Store messages from WebHistory:
webhistoryPlugin2 JSON: %1<br/>in JSON: %1
webhistoryPlugin"2 SQLite: %1<br/>in SQLite: %1
webhistoryPlugin ) , qutim-0.2.0/languages/ru/binaries/vkontakte.qm0000644000175000017500000000550711267600246023064 0ustar euroelessareuroelessar >u ) j iFCT   <i #A s EdditAccount@8<5=8BLApply EdditAccount42B><0B8G5A:8 ?>4:;NG0BLAOAutoconnect on start EdditAccount B<5=0Cancel EdditAccount0@>25@OBL 4@C759 :064K5: Check for friends updates every: EdditAccount6@>25@OBL A>>1I5=8O :064K5:Check for new messages every: EdditAccount@02:0 %1 Editing %1 EdditAccount:#254><;OBL > A<5=5 D>B> 4@C30*Enable friends photo updates notifications EdditAccount0AB@>9:8Form EdditAccount;02=K5General EdditAccountJ:;NG0BL AAK;:C =0 D>B> 2 C254><;5=85/Insert fullsize URL on new photos notifications EdditAccountN:;NG0BL AAK;:C =0 ?@52LN 2 C254><;5=85.Insert preview URL on new photos notifications EdditAccount2>445@6820BL ?>4:;NG5=85:Keep-alive every: EdditAccount:OK EdditAccount0@>;L: Password: EdditAccount>1=>2;OBL A?8A>: 4@C759 :064K5:Refresh friend list every: EdditAccount1=>2;5=8OUpdates EdditAccount.>4:;NG0BLAO ?@8 AB0@B5Autoconnect on start LoginFormE-mail: LoginForm0AB@>9:8Form LoginForm0@>;L: Password: LoginFormV<font size='2'><b>!B0BCA:</b>&nbsp;%1</font3Status message: %1@8BK Favorites VcontactList @C7LOFriends VcontactList:B:@KBL AB@0=8FC ?>;L7>20B5;OOpen user page VcontactList,%1 4>1028; =>2CN D>B:C%1 added new photo VprotocolWrap*%11K; >B<5G5= =0 D>B>%1 was tagged on photo VprotocolWrap.525@=K9 =8: 8;8 ?0@>;LMismatch nick or password VprotocolWrap*Vkontakte.ru >1=>2;5=Vkontakte.ru updates VprotocolWrapB:;NG5=Offline VstatusObject  A5B8Online VstatusObject ) , qutim-0.2.0/languages/ru/binaries/msn.qm0000644000175000017500000000416411251316222021640 0ustar euroelessareuroelessarQ > ) u <iP@8<5=8BLApply EdditAccount.>4:;NG0BLAO ?@8 AB0@B5Autoconnect on start EdditAccount B>H5;Away EdditAccount 0=OBBusy EdditAccount B<5=0Cancel EdditAccount>5 ?>:07K20BL 70?@>A 02B>>B25B0Don't show autoreply dialog EdditAccount7<5=8BL %1 Editing %1 EdditAccountForm EdditAccount 1I55General EdditAccount57459AB285Idle EdditAccount:OK EdditAccount0 B5;5D>=5 On the phone EdditAccount  A5B8Online EdditAccount 1540N Out to lunch EdditAccount0@>;L: Password: EdditAccount!B0BCAKStatuses EdditAccount5@=CALWill be right back EdditAccount.>4:;NG0BLAO ?@8 AB0@B5Autoconnect on start LoginFormE-mail:E-mail: LoginFormForm LoginForm0@>;L: Password: LoginForm B>H5;AwayMSNConnStatusBox 0=OBBusyMSNConnStatusBox57459AB285IdleMSNConnStatusBox52848<K9 InvisibleMSNConnStatusBoxB:;NG5=OfflineMSNConnStatusBox0 B5;5D>=5 On the phoneMSNConnStatusBox  A5B8OnlineMSNConnStatusBox 1540N Out to lunchMSNConnStatusBox5@=CALWill be right backMSNConnStatusBox57 3@C?? Without groupMSNContactList ) , qutim-0.2.0/languages/ru/binaries/twitter.qm0000644000175000017500000000255611225627111022553 0ustar euroelessareuroelessar :{ i(2B>2E>4 ?@8 70?CA:5Autoconnect on start LoginFormtwitterForm LoginForm0@>;L: Password: LoginForm >38= 8;8 >GB0:Username or email: LoginForm2H81:0 ?@>B>:>;0 Twitter:Twitter protocol error: twApiWrap?8A0=85: Description: twContactList '8A;> D02>@8B>2:Favourites count: twContactList>:;>==8:8 Followers twContactList.>;8G5AB2> ?>:;>==8:>2:Followers count: twContactList @C7LOFriends twContactList'8A;> 4@C759:Friends count: twContactList0>A;54=89 B5:AB AB0BCA0:Last status text: twContactListB:C40: Location: twContactList<O:Name: twContactList(>;8G5AB2> AB0BCA>2:Statuses count: twContactListB:;NG5=OfflinetwStatusObject  A5B8OnlinetwStatusObject ) , qutim-0.2.0/languages/de_DE/0000755000175000017500000000000011273101310017207 5ustar euroelessareuroelessarqutim-0.2.0/languages/de_DE/Pinfo.xml0000644000175000017500000000045111232135354021016 0ustar euroelessareuroelessar languages de_DE --VERSION-- German language for qutIM 0.2 Beta --URL-- Marvin42 Creative Commons BY-SA 3.0 qutim-0.2.0/languages/de_DE/sources/0000755000175000017500000000000011273101310020672 5ustar euroelessareuroelessarqutim-0.2.0/languages/de_DE/sources/qutim_core.ts0000644000175000017500000032056611273014333023435 0ustar euroelessareuroelessar AbstractContextLayer Send message Nachricht senden Message history Nachrichtenverlauf Contact details Benutzerinformationen AccountManagementClass AccountManagement Add Hinzufügen Edit Bearbeiten Remove Löschen AddAccountWizard Add Account Wizard Hinzufügen eines neuen Kontos AntiSpamLayerSettingsClass AntiSpamSettings Accept messages only from contact list Nur Nachrichten von Mitgliedern der Kontaktliste annehmen Notify when blocking message Benachrichtigen, wenn eine Nachricht blockiert wurde Do not accept NIL messages concerning authorization Keine Erlaubnisanfragen von Benutzern ausserhalb der Kontaktliste akzeptieren Do not accept NIL messages with URLs Keine Nachrichten mit URLs von Benutzern ausserhalb der Kontaktliste akzeptieren Enable anti-spam bot Anti-Spam Bot aktivieren Anti-spam question: Anti-Spam Frage: Answer to question: Richtige Antwort zur Frage: Message after right answer: Nachricht nach richtiger Antwort: Don't send question/reply if my status is "invisible" Keine Frage/Antwort senden wenn ich "Unsichtbar" bin ChatForm Form Contact history Nachrichtenverlauf des Benutzers (Strg+H) Ctrl+H Emoticon menu Smileys (Strg+M) Ctrl+M Send image < 7,6 KB Bild < 7,6 kB senden Ctrl+I Send file Datei senden (Strg+F) Ctrl+F Swap layout Layout umschalten Ctrl+T Contact information Benutzerinformationen Send message on enter Nachrichten mit "Enter" senden Send typing notification Anderen Benutzern anzeigen, dass ich gerade eine Nachricht tippe Quote selected text Ausgewählten Text zitieren (Strg+Q) Ctrl+Q Clear chat log Nachrichtenfenster leeren ... Send message Nachricht senden Send &Senden ChatLayerClass Chat window Nachrichtenfenster ChatSettingsWidget Form Tabbed mode Tabs im Nachrichtenfenster verwenden Chats and conferences in one window Normale Chats und Konferenzen in einem gemeinsamen Fenster anzeigen Close button on tabs Schließen-Knopf auf jedem Tab anzeigen Tabs are movable Sortieren/verschieben von Tabs zulassen Remember openned privates after closing chat window Die zuletzt offenen Tabs beim Schließen des Nachrichtenfensters merken Close tab/message window after sending a message Tab/Nachrichtenfenster nach dem Senden einer Nachricht schließen Open tab/message window if received message Tab/Nachrichtenfenster bei eingehenden Nachrichten öffen Webkit mode Webkit-Modus für den Nachrichtenverlauf Don't show events if message window is open Popupbenachrichtigungen zeigen, wenn das Nachrichtenfenster geöffnet ist Send message on enter Nachrichten mit "Enter" senden Send message on double enter Nachrichten mit doppelten "Enter" senden Send typing notifications Anderen Benutzern anzeigen, dass ich gerade eine Nachricht tippe General Allgemein Don't blink in task bar Systemtray-Symbol soll nicht blinken After clicking on tray icon show all unreaded messages Beim Klicken auf das Systemtray-Symbol alle ungelesenen Nachrichten anzeigen Chat Chat Remove messages from chat view after: Max. Anzahl der Nachrichten im Nachrichtenfenster: Don't group messages after (sec): Nachrichten nicht mehr gruppieren nach (Sekunden): Text browser mode Textbrowser-Modus Show names Namen anzeigen Timestamp: Zeitformat: ( hour:min:sec day/month/year ) (16:33:44 01/05/2009) ( hour:min:sec ) (16:33:44) ( hour:min, full date ) (16:33, 05/Mai/2009) Colorize nicknames in conferences Spitznamen in Konferenzen unterschiedlich einfärben ChatWindow <font color='green'>Typing...</font> <font color='green'>Tippt gerade...</font> Open File Datei öffnen Images (*.gif *.png *.bmp *.jpg *.jpeg) Bilder (*.gif *.png *.bmp *.jpg *.jpeg) Open error Fehler beim öffnen Image size is too big Bilddatei ist zu groß ConfForm Form Show emoticons Smileys Ctrl+M, Ctrl+S Invert/translit message Translit (Strg+T) Ctrl+T Send on enter Nachrichten mit "Enter" senden Quote selected text Ausgewählten Text zitieren (Strg+Q) Ctrl+Q Clear chat Nachrichtenfenster leeren Send &Senden Console Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> ContactListProxyModel Online Online Offline Offline Not in list Nicht in der Liste ContactListSettingsClass ContactListSettings Main Allgemein Show accounts Konten anzeigen Hide empty groups Leere Gruppen verstecken Hide offline users Offline-Benutzer verstecken Hide online/offline separators Trenner "Online" und "Offline" verstecken Sort contacts by status Benutzer nach Status sortieren Draw the background with using alternating colors Die Benutzer in wechselnden Farben hinterlegen Show client icons Symbole der Clients anzeigen Show avatars Avatarbilder anzeigen Look'n'Feel Look'n'Feel Opacity: Undurchsichtigkeit: 100% Window Style: Fensterrahmen: Regular Window Normales Fenster Theme border Rahmen des Themas Borderless Window Rahmenloses Fenster Tool window Tool-Fenster Show groups Gruppen anzeigen Customize Anpassen Customize font: Schriftarten: Account: Konto: Group: Gruppe: Online: Online: Offline: Offline: Separator: Trennzeilen: DefaultContactList qutIM Main menu Hauptmenü Show/hide offline Offline-Benutzer anzeigen Show/hide groups Gruppen verstecken Sound on/off Ton an &File &Datei Control Einstellungen Show offline Offline-Benutzer anzeigen Hide groups Gruppen verstecken Mute Stumm About Über GeneralWindow qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? Possible variants Mögliche Varianten GlobalProxySettingsClass GlobalProxySettings Type: Typ: Host: Host-Adresse: Port: Port: None Keiner HTTP SOCKS 5 Authentication Benötigt Authentifizierung User name: Benutzername: Password: Passwort: GuiSetttingsWindowClass User interface settings Benutzeroberfläche Emoticons: Smileys: <None> <Keine(s)> Contact list theme: Kontaktliste: <Default> <Standard> Chat window dialog: Nachrichtenfenster: Chat log theme (webkit): Nachrichtenverlauf (Webkit): Popup windows theme: Benachrichtigungen (Popupfenster): Status icon theme: Symbolsatz für Status: System icon theme: Symbolsatz für gesamtes Programm: Language: Sprache: <Default> ( English ) <Standard> ( Englisch ) Application style: Programmstil: Border theme: Fensterrahmen: <System> <System> Sounds theme: Klangbenachrichtigungen: <Manually> <Manuell> OK Ok Apply Anwenden Cancel Abbrechen HistorySettingsClass HistorySettings Save message history Nachrichtenverlauf speichern Show recent messages in messaging window Beim Öffnen des Nachrichtenfensters die letzten Nachrichten anzeigen: HistoryWindowClass HistoryWindow Account: Konto: From: Von: In: %L1 Eingegangene: %L1 Out: %L1 Gesendete: %L1 All: %L1 Alle: %L1 Search Suchen Return 1 JsonHistoryNamespace::HistoryWindow No History Kein Verlauf In: %L1 Eingegangene: %L1 Out: %L1 Gesendete: %L1 All: %L1 Alle: %L1 LastLoginPage Please type chosen protocol login data Bitte die Zugangsdaten für das gewählte Protokoll eingeben Please fill all fields. Bitte alle Felder ausfüllen. NotificationsLayerSettingsClass NotificationsLayerSettings Show popup windows Popupfenster anzeigen Width: Breite: Height: Höhe: Show time: Dauer: px s Position: Position: Style: Effekt: Upper left corner Ecke links oben Upper right corner Ecke rechts oben Lower left corner Ecke links unten Lower right corner Ecke rechts unten No slide Kein Einschiebe-Effekt Slide vertically Vertikal einschieben Slide horizontally Horizontal einschieben Show balloon messages: Ballon-Benachrichtigunen im Systemtray zeigen: Notify when: Benachrichtigen wenn: Contact sign on Benutzer online gehen Contact sign off Benutzer offline gehen Contact typing message Benutzer eine Nachricht tippen Contact change status Benutzer ihren Status ändern Message received Nachrichten eingehen PluginSettingsClass Configure plugins - qutIM qutIM - Plugins einrichten 1 Ok Ok Cancel Abbrechen PopupWindow <b>%1</b> <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 PopupWindowClass PopupWindow ProfileLoginDialog Log in Einloggen Profile Profil Incorrect password Falsches Passwort Delete profile Profil löschen Delete %1 profile? Profil %1 wirklich löschen? ProfileLoginDialogClass ProfileLoginDialog Name: Name: Remove profile Profil löschen Password: Passwort: Remember password Passwort speichern Don't show on startup Dieses Fenter nicht anzeigen Sign in Einloggen Cancel Abbrechen ProtocolPage Please choose IM protocol Bitte das IM Protokoll auswählen This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts Dieser Assistent hilft ihnen dabei, ein Konto des gewählten Protokolls hinzuzufügen. Konten können jederzeit unter "Einstellungen -> Konten" hinzugefügt oder gelöscht werden QObject Open File Datei öffnen All files (*) Alle Dateien (*) Anti-spam Anti-Spam Authorization blocked Erlaubnisanfrage blockiert Not in list Nicht in der Liste Notifications Benachrichtigungen Sound notifications Klangbenachrichtigungen Message from %1: %2 Nachricht von %1: %2 %1 is typing %1 tippt gerade typing schreibt gerade eine Nachricht Blocked message from %1: %2 Nachricht von %1 blockiert: %2 (BLOCKED) (Blockiert) %1 has birthday today!! %1 hat heute Geburtstag!! has birthday today!! hat heute Geburtstag!! Sound Audio &Quit &Schließen Quit Schließen Contact List Kontaktliste History Verlauf 1st quarter 2nd quarter 3rd quarter 4th quarter SoundEngineSettings Select command path Befehlspfad auswählen Executables (*.exe *.com *.cmd *.bat) All files (*.*) Programme (*.exe *.com *.cmd *.bat) Alle Dateien (*.*) Executables Programme Form Custom sound player Benutzerdefinierter Player Command: Befehl: ... Engine type Engine-Typ No sound Keine Klänge QSound SoundLayerSettings Startup Programmstart System event Systemereignis Outgoing message Gesendete Nachricht Incoming message Eingehende Nachricht Contact is online Benutzer geht online Contact changed status Benutzer ändert Status Contact went offline Benutzer geht offline Contact's birthday is comming Geburtstagserinnerung Sound files (*.wav);;All files (*.*) Don't remove ';' chars! Klangdateien (*.wav);;Alle Dateien (*.*) Open sound file Klangdatei öffnen Export sound style Klangschema exportieren XML files (*.xml) XML Dateien (*.xml) Export... Exportieren... All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue? Alle Klangdateien werden ins Verzeichnis "%1/" kopiert. Existierende Dateien werden ohne Nachfrage überschrieben. Fortfahren? Error Fehler Could not open file "%1" for writing. Schreibzugriff auf Datei "%1" verweigert. Could not copy file "%1" to "%2". Konnte Datei "%1" nicht nach "%2" kopieren. Sound events successfully exported to file "%1". Das Klangschema wurde erfolgreich in die Datei "%1" exportiert. Import sound style Klangschema importieren Could not open file "%1" for reading. Lesezugriff auf Datei "%1" verweigert. An error occured while reading file "%1". Fehler beim Lesen der Datei "%1". File "%1" has wrong format. Die Datei "%1" hat ein falsches Format. SoundSettingsClass soundSettings Events Ereignisse Sound file: Klangdatei: Play Abspielen Open Öffnen Apply Anwenden Export... Exportieren... Import... Importieren... You're using a sound theme. Please, disable it to set sounds manually. Im Moment ist ein Klangschema aktiv. Damit die Klänge hier manuell eingerichtet werden können, bitte unter Benutzeroberfläche "Manuell" als Klangschema auswählen. StatusDialog Write your status message Statusnachricht eingeben Preset caption Name der Vorlage StatusDialogVisualClass StatusDialog Preset: Vorlage: <None> <Keine> Do not show this dialog Diesen Dialog nicht mehr anzeigen Save Speichern OK Ok Cancel Abbrechen StatusPresetCaptionClass StatusPresetCaption Please enter preset caption: Bitte einen Namen für die Vorlage eingeben: OK Ok Cancel Abbrechen TreeContactListModel Online Online Free for chat Chatfreudig Away Abwesend Not available Nicht verfügbar Occupied Beschäftigt Do not disturb Nicht stören Invisible Unsichtbar Offline Offline At home Zu Hause At work In der Arbeit Having lunch Beim Essen Evil Böse Depression Depressiv Without authorization Ohne Autorisierung aboutInfo Support project with a donation: Das Projekt mit einer Spende unterstützen: Yandex.Money Enter there your names, dear translaters <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Martin Häckel</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:martinhaeckel@gmx.de"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">martinhaeckel@gmx.de</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Deutsche Übersetzung</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> GNU General Public License, version 2 GNU General Public License, Version 2 aboutInfoClass About qutIM Über qutIM About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">License agreements</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">Lizenzvereinbarungen</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project leader</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Hauptentwickler und Projektgründer</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Hauptentwickler und Projektleiter</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schröter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox library</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Translators Übersetzer Donates Spenden Authors Autoren Thanks To Vielen Dank an Close Schließen Return loginDialog Delete account Konto löschen Delete %1 account? Konto %1 wirklich löschen? loginDialogClass Account Konto Account: Konto: Remove profile Profil löschen ... Password: Passwort: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximum length of ICQ password is limited to 8 characters.</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Das ICQ-Passwort darf max. 8 Zeichen lang sein.</span></p></body></html> Save my password Passwort speichern Autoconnect Automatisch verbinden Secure login Sicherer Login Show on startup Dieses Fenster beim Starten anzeigen Sign in Einloggen mainSettingsClass mainSettings Save main window size and position Größe und Position der Kontaktliste speichern Hide on startup Beim Starten verstecken Don't show login dialog on startup Loginfenster beim Starten nicht anzeigen Start only one qutIM at same time Nur eine qutIM-Instanz gleichzeitig ausführen Add accounts to system tray menu Die Konten im Systemtray-Menü auflisten (Rechtsklick auf Symbol) Always on top Immer im Vordergrund Auto-hide: Automatisch verstecken nach: s Auto-away after: Automatisch "Abwesend" nach: min Show status from: Zeige im Systemtray den Status von: qutIM &Quit &Schließen &Settings... &Einstellungen... &User interface settings... Benutzer&oberfläche... Plug-in settings... Plugins... Switch profile Profil wechseln Do you really want to switch profile? Das Profil wirklich wechseln? qutIMClass qutIM qutimSettings Accounts Konten General Allgemein Global proxy Globaler Proxy-Server Save settings Einstellungen speichern Save %1 settings? Einstellungen für %1 speichern? qutimSettingsClass Settings Einstellungen 1 OK Ok Apply Anwenden Cancel Abbrechen qutim-0.2.0/languages/de_DE/sources/webhistory.ts0000644000175000017500000001437311257677212023476 0ustar euroelessareuroelessar historySettingsClass Settings Einstellungen URL: URL: Login: Benutzername: Password: Passwort: Enable notification when get messages Bei Meldungen benachrichtigen Store locally in SQLite database (SQL History plugin) Lokal in SQLite Datenbank speichern (SQL History Plugin) Store locally in JSON files (JSON History plugin) Lokal in JSON-Dateien speichern (JSON History Plugin) About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Web History plugin for qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Store history on web-server</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> webhistoryPlugin Store messages from WebHistory:<br/> Nachrichten von WebHistory speichern:<br/> in JSON: %1<br/> in JSON: %1<br/> in SQLite: %1<br/> in SQLite: %1<br/> qutim-0.2.0/languages/de_DE/sources/formules.ts0000644000175000017500000000215311257677212023124 0ustar euroelessareuroelessar formulesSettingsClass Settings Einstellungen Scale: Skalieren: Do next to show source text of evaluation: Beim klicken auf die Formel den Quelltext mit folg. Tags anzeigen: [tex]EVALUATION THERE[/tex] [tex]TeX-Quelltext[/tex] $$EVALUATION THERE$$ $$TeX-Quelltext$$ qutim-0.2.0/languages/de_DE/sources/imagepub.ts0000644000175000017500000002374111270557060023060 0ustar euroelessareuroelessar imagepubPlugin Send image via ImagePub plugin Bild mit ImagePub-Plugin senden Choose image file Bilddatei auswählen Choose image Bild auswählen Image Files (*.png *.jpg *.gif) Bilder (*.png *.jpg *.gif) Canceled Abgebrochen File size is null Dateigröße ist Null Sending image URL... Sende Bild-URL... Image sent: %N (%S bytes) %U Bild gesendet: %N (%S Bytes) %U Image URL sent Bild-URL wurde gesendet Can't parse URL Konnte URL nicht auflösen imagepubSettingsClass Settings Einstellungen Image hosting service: Bilder Hosting-Service: Send image template: Bild senden Maske: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> %N - file name; %U - file URL; %S - file size %N - Dateiname; %U - URL; %S - Dateigröße About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">ImagePub qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Send images via public web services</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> uploadDialog Uploading... Senden... Progress: %1 / %2 Fortschritt: %1 / %2 Elapsed time: %1 Verstrichene Zeit: %1 Speed: %1 kb/sec Geschwindigkeit: %1 kBytes/s File: %1 Datei: %1 uploadDialogClass Uploading... Senden... Upload started. Upload gestartet. File: Datei: Progress: Fortschritt: Elapsed time: Verstrichene Zeit: Speed: Geschwindigkeit: Cancel Abbrechen qutim-0.2.0/languages/de_DE/sources/urlpreview.ts0000644000175000017500000001674111233402241023462 0ustar euroelessareuroelessar urlpreviewPlugin URL Preview bytes Make URL previews in messages Zeigt eine Vorschau von URLs in Nachrichten urlpreviewSettingsClass Settings Einstellungen General Allgemein Enable on incoming messages Aktiv bei eingehenden Nachrichten Enable on outgoing messages Aktiv bei gesendeten Nachrichten Don't show info for text/html content type Keine Info bei text/html content-Typen zeigen Info template: Info Maske: Macros: %TYPE% - Content-Type %SIZE% - Content-Length Images Bilder Max file size limit (in bytes) Max. Dateigröße (in Bytes) %MAXW% macro %MAXH% macro Image preview template: Bildvorschau Maske: Macros: %URL% - Image URL %UID% - Generated unique ID About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Make previews for URLs in messages</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/de_DE/sources/qutimcoder.ts0000644000175000017500000003454011257677212023451 0ustar euroelessareuroelessar HelpUI Help Hilfe ОК Ok qrc:/htmls/help/help.html About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Plugin, that lets you to organize encrypted chats with any </p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">contact from your contact list.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Encryption algorithms developer:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maksim 'Loz' Velesiuk</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Plugin developer:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(с) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Plugin, das verschlüsselte Unterhaltungen</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">mit beliebigen Kontakten ermöglicht.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Entwickler Verschlüsselungsalgorithmus:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maksim 'Loz' Velesiuk</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Entwickler Plugin:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(с) 2009</span></p></body></html> QutimCoder Begin encrypted chat Verschlüsselte Unterhaltung beginnen Close encrypted chat Verschlüsselte Unterhaltung beenden Make this encrypted chat permanent Diese Unterhaltung immer verschlüsslen Make this encrypted chat regular Wieder temporär verschlüsseln Encryption Verschlüsseln Qutim Coder Plugin, that lets you to organize encrypted chat sessions with any contact from your contact list. Plugin, das verschlüsselte Unterhaltungen mit allen Benutzern ermöglicht. Enqrypted chat with Verschlüsselte Unterhaltung mit has already begun hat schon begonnen have not been started yet haben noch nicht begonnen You already have permanent encrypted chat with Diese Unterhaltung ist bereits permanent verschlüsselt mit contact .Benutzer You don't have permanent encrypted chat with Es gibt keine permanente Unterhaltung mit SettingsCoding OK! This factors combination is available OK! Diese Faktorenkombination ist möglich Error! This factors combination is not available Fehler! Diese Faktorenkombination ist nicht verfügbar Coding Settings Einstellungen Level Stufe Base Basis Factors Faktoren Check Prüfen Please, read Help first. Bitte zuerst die Hilfe lesen. Help Hilfe OK Ok Cancel Abbrechen qutim-0.2.0/languages/de_DE/sources/histman.ts0000644000175000017500000002220711266546167022741 0ustar euroelessareuroelessar ChooseClientPage WizardPage ChooseOrDumpPage WizardPage Import history from one more client Verlauf eines weiteren Clients importieren Dump history Verlauf speichern ClientConfigPage Select your Jabber account. Deinen Jabber-Account auswählen. Select accounts for each protocol in the list. Die Accounts für die aufgeführten Protokolle auswählen. WizardPage Path to profile: Pfad zum Profil: ... Encoding: Kodierung: DumpHistoryPage WizardPage Choose format: Format auswählen: JSON Binary Binär Merging history state: Verlauf zusammenführen: Dumping history state: Verlauf speichern: HistoryManager::ChooseClientPage Client Client Choose client which history you want to import to qutIM. Von welchem Client soll der Verlauf importiert werden? HistoryManager::ChooseOrDumpPage What to do next? Dump history or choose next client Wie soll's weitergehen? It is possible to choose another client for import history or dump history to the disk. Einen weiteren Client importieren, oder den Verlauf auf der Festplatte speichern. HistoryManager::ClientConfigPage System System Configuration Konfiguration Enter path of your %1 profile file. Den Pfad zur %1 Profildatei angeben. Enter path of your %1 profile dir. Den Pfad zum %1 Profilverzeichnis angeben. If your history encoding differs from the system one, choose the appropriate encoding for history. Die richtige Kodierung auswählen, falls die Kodierung des Verlaufs eine andere als die des Systems ist. Select path Pfad auswählen HistoryManager::DumpHistoryPage Dumping Speichern Last step. Click 'Dump' to start dumping process. Letzter Schritt. Auf "Speichern" klicken um den Verlauf zu speichern. Manager merges history, it make take several minutes. Verlauf wird zusammengeführt, dies kann einige Minuten dauern. History has been succesfully imported. Verlauf wurde erfolgreich importiert. HistoryManager::HistoryManagerWindow History manager &Dump &Speichern HistoryManager::ImportHistoryPage Loading Laden Manager loads all history to memory, it may take several minutes. Der Verlauf wird in den Speicher geladen, dies kann einige Minuten dauern. %n message(s) have been succesfully loaded to memory. %n Nachricht wurde erfolgreich in den Speicher geladen. %n Nachricht(en) wurden erfolgreich in den Speicher geladen. It has taken %n ms. Es hat %n ms gedauert. Es hat %n ms gedauert. HistoryManagerPlugin Import history Verlauf importieren ImportHistoryPage WizardPage qutim-0.2.0/languages/de_DE/sources/twitter.ts0000644000175000017500000000641511233402241022755 0ustar euroelessareuroelessar LoginForm Form Username or email: Benutzername oder E-Mail: Password: Passwort: Autoconnect on start Beim Starten automatisch verbinden twApiWrap Twitter protocol error: Twitter Protokoll-Fehler: twContactList Friends Freunde Followers Followers Name: Name: Location: Wohnort: Description: Beschreibung: Followers count: Followers: Friends count: Freunde: Favourites count: Favoriten: Statuses count: Statuszähler: Last status text: Letzter Statustext: twStatusObject Online Online Offline Offline qutim-0.2.0/languages/de_DE/sources/jabber.ts0000644000175000017500000040664011273014333022511 0ustar euroelessareuroelessar AcceptAuthDialog Form Authorize Erlauben Deny Ablehnen Ignore Ignorieren AddContact Add User Benutzer hinzufügen Jabber ID: Jabber ID: User information Benutzerinformationen Name: Name: <no group> <keine Gruppe> Send authorization request Erlaubnisanfrage senden Group: Gruppe: Add Hinzufügen Cancel Abbrechen Contacts Form Show contact status text in contact list Statusnachrichten anzeigen Show mood icon in contact list Stimmungs-Symbole anzeigen Show main activity icon in contact list Tätigkeits-Symbole anzeigen Show extended activity icon in contact list Genauere Tätigkeits-Symbole anzeigen Show tune icon in contact list Musik-Symbole anzeigen Show not authorized icon "Nicht autorisiert" - Symbole anzeigen Show QIP xStatus in contact list QIP x-Status anzeigen Show main resource in notifications Hauptressource in den Benachrichtigungen anzeigen Dialog Dialog Ok Ok Cancel Abbrechen JabberSettings Form Default resource: Standard-Ressource: Reconnect after disconnect Nach Verbindungsabbruch wieder verbinden Don't send request for avatars Keine Anfragen für Avatare senden Listen port for filetransfer: Port für eingehende Dateien: Priority depends on status Priorität ist vom Status abhängig Online: Online: Free for chat: Chatfreudig: Away: Abwesend: NA: Nicht verfügbar: DND: Nicht stören: JoinChat Join groupchat Konferenz beitreten Bookmarks Lesezeichen Settings Einstellungen Name Name Conference Konferenz Nick Spitzname Password Passwort Auto join Automatisch eintreten Save Speichern Search Suchen Join Eintreten History Verlauf Request last Die letzten messages Nachrichten anfordern Request messages since the datetime Anfordern aller Nachrichten seit der Uhrzeit H:mm:ss Request messages since Anfordern aller Nachrichten seit LoginForm Registration Registrierung You must enter a valid jid Bitte eine gültige Jabber-ID eingeben You must enter a password Bitte ein Passwort eingeben <font color='green'>%1</font> <font color='red'>%1</font> LoginFormClass LoginForm Password: Passwort: Register this account Dieses Konto erstellen (auf dem Server) JID: JID: Personal Form General Allgemein E-mail E-Mail Phone Telefon Home Privat Work Arbeit QObject Open File Datei öffnen All files (*) Alle Dateien (*) <font color='#808080'>%1</font> %1 Join groupchat on Konferenz beitreten auf <font size='2'><b>Status text:</b> %1</font> <font size='2'><b>Statusnachricht:</b> %1</font> <font size='2'><b>Possible client:</b> %1</font> <font size='2'><b>Möglicher Client:</b> %1</font> <font size='2'><b>User went offline at:</b> <i>%1</i></font> <font size='2'><b>Offline seit:</b> <i>%1</i></font> <font size='2'><b>User went offline at:</b> <i>%1</i> (with message: <i>%2</i>)</font> <font size='2'><b>Offline seit:</b> <i>%1</i> (Nachricht: <i>%2</i>)</font> <font size='2'><b>Authorization:</b> <i>None</i></font> <font size='2'><b>Autorisierung:</b> <i>Keiner</i></font> <font size='2'><b>Authorization:</b> <i>To</i></font> <font size='2'><b>Autorisierung:</b> <i>To</i> (Sie sind autorisiert, der Kontakt nicht)</font> <font size='2'><b>Authorization:</b> <i>From</i></font> <font size='2'><b>Autorisierung:</b> <i>From</i> (Der Kontakt ist autorisiert, Sie nicht)</font> <font size='2'><i>%1</i></font> <font size='2'><i>%1:</i> %2</font> <font size='2'><i>Listening:</i> %1</font> <font size='2'><i>Hört gerade:</i> %1</font> Afraid Ängstlich Amazed Verblüfft Amorous Amourös Angry Böse Annoyed Verärgert Anxious Bange Aroused Erregt Ashamed Beschämt Bored Gelangweilt Brave Tapfer Calm Ruhig Cautious Vorsichtig Cold Unterkühlt Confident Zuversichtlich Confused Verwirrt Contemplative Nachdenklich Contented Zufrieden Cranky Griesgrämig Crazy Verrückt Creative Schöpferisch Curious Neugierig Dejected Niedergeschlagen Depressed Deprimiert Disappointed Enttäuscht Disgusted Angewidert Dismayed Bestürzt Distracted Abgelenkt Embarrassed Verlegen Envious Neidisch Excited Aufgeregt Flirtatious Verführerisch Frustrated Frustriert Grateful Dankerfüllt Grieving Betrübt Grumpy Mürrisch Guilty Schuldbewusst Happy Fröhlich Hopeful Hoffnungsvoll Hot Brenzlig Humbled Gedemütigt Humiliated Erniedrigt Hungry Hungrig Hurt Verletzt Impressed Beeindruckt In awe Ehrfurchtsvoll In love Verliebt Indignant Empört Interested Interessiert Intoxicated Berauscht Invincible Unbesiegbar Jealous Eifersüchtig Lonely Einsam Lost Verloren Lucky Glücklich Mean Gemein Moody Launisch Nervous Nervös Neutral Gleichgültig Offended Beleidigt Outraged Entrüstet Playful Verspielt Proud Stolz Relaxed Entspannt Relieved Erleichtert Remorseful Reumütig Restless Unruhig Sad Traurig Sarcastic Sarkastisch Satisfied Zufrieden Serious Ernsthaft Shocked Schockiert Shy Schüchtern Sick Krank Sleepy Schläfrig Spontaneous Spontan Stressed Gestresst Strong Entschlossen Surprised Überrascht Thankful Dankbar Thirsty Durstig Tired Übernächtigt Undefined In undefinierter Stimmung befindlich Weak Kraftlos Worried Besorgt Unknown Unbekannt Doing chores Hausarbeiten buying groceries Lebensmittel kaufen cleaning Putzen cooking Kochen doing maintenance Reparaturen doing the dishes Abspülen doing the laundry Wäsche waschen gardening Gartenarbeiten running an errand Besorgungen machen walking the dog Gassi gehen Drinking Trinken having a beer Bier having coffee Kaffee having tea Tee Eating Essen having a snack kleine Zwischenmahlzeit having breakfast Frühstück having dinner Abendessen having lunch Mittagessen Exercising Trainieren cycling Radfahren dancing Tanzen hiking Wandern jogging Joggen playing sports Sport machen running Laufen skiing Skifahren swimming Schwimmen working out Krafttraining Grooming Körperpflege at the spa Im Welless-Center brushing teeth Zähneputzen getting a haircut Beim Friseur shaving Rasieren taking a bath Baden taking a shower Duschen Having appointment Verabredung Inactive Unproduktiv day off Freier Tag hanging out Herumgammeln hiding Untergetaucht on vacation Im Urlaub praying Beten scheduled holiday Jahresurlaub sleeping Schlafen thinking Nachdenken Relaxing Entspannen fishing Angeln gaming Spielen going out Ausgehen partying Party!! reading Lesen rehearsing Proben shopping Einkaufsbummel smoking Rauchen socializing Soziale Kontakte pflegen sunbathing Sonnenbad watching TV Fernsehen watching a movie Einen Film ansehen Talking Reden in real life Im Real Life on the phone Telefonieren on video phone Videotelefon /-chat Traveling Unterwegs commuting Pendeln driving Fahren in a car Mit dem Auto on a bus Im Bus on a plane Im Flugzeug on a train Im Zug on a trip Auf einem Ausflug walking Zu Fuß Working Arbeiten coding Programmieren in a meeting Meeting studying Lernen writing Schreiben %1 seconds %1 Sekunden %1 second %1 Sekunde %1 minutes %1 Minuten 1 minute 1 Minute %1 hours %1 Stunden 1 hour 1 Stunde %1 days %1 Tage 1 day 1 Tag %1 years %1 Jahre 1 year 1 Jahr Mood Stimmung Activity Tätigkeit Tune Musik RoomConfig Form Apply Anwenden Ok Ok Cancel Abbrechen RoomParticipant Form Owners Besitzer JID JID Administrators Administratoren Members Mitglieder Banned Ausgesperrt Reason Grund Apply Anwenden Ok Ok Cancel Abbrechen SaveWidget Save to bookmarks Als Lesezeichen speichern Bookmark name: Name: Conferene: Konferenz: Nick: Spitzname: Password: Passwort: Auto join Automatisch eintreten Save Speichern Cancel Abbrechen Search Form Server: Server: Fetch Abrufen Type server and fetch search fields. Server angeben und die verfügbaren Suchfelder abrufen. Clear Felder leeren Search Suchen Close Schließen SearchConference Search conference Konferenz suchen SearchService Search service Service suchen SearchTransport Search transport Transport suchen ServiceBrowser jServiceBrowser Server: Server: Close Schließen Name Name JID JID Join conference Konferenz beitreten Register Registrieren Search Suchen Execute command Befehl ausführen Show VCard VCard anzeigen Add to roster Zur Kontaktliste hinzufügen Add to proxy list Zur Proxyliste hinzufügen VCardAvatar <img src='%1' width='%2' height='%3'/> VCardBirthday Birthday: Geburtstag: %1&nbsp;(<font color='#808080'>wrong date format</font>) %1&nbsp;(<font color='#808080'>Falsches Datumsformat</font>) VCardRecord Site: Homepage: Company: Firma: Department: Abteilung: Title: Namenspräfix: Role: Rang: Country: Land: Region: Region: City: Ort: Post code: Postleitzahl: Street: Straße/Hausnummer: PO Box: Postfach: XmlConsole <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> Clear Leeren XML Input... XML Input... Close Schließen XmlPrompt XML Input XML Input &Send &Senden &Close S&chließen activityDialogClass Choose your activity Tätigkeit auswählen Choose Auswählen Cancel Abbrechen customStatusDialogClass Choose Auswählen Cancel Abbrechen Choose your mood Stimmung auswählen jAccount Join groupchat Konferenz beitreten Additional Sonstiges Open XML console XML-Konsole öffnen Add new contact Benutzer hinzufügen Find users Benutzer suchen Service browser Service Browser View/change personal vCard Meine vCard anzeigen/ändern Privacy status Privatstatus Set mood Stimmung Set activity Tätigkeit Online Online Offline Offline Free for chat Chatfreudig Away Abwesend NA Nicht verfügbar DND Nicht stören You must use a valid jid. Please, recreate your jabber account. Sie müssen eine gültige JID verwenden. Bitte erstellen Sie ihr Jabber-Konto neu. You must enter a password in settings. Bitte ein Passwort in "Einstellungen" eintragen. Services Services Conferences Konferenzen Add new contact on Benutzer hinzufügen zu Invisible for all Unsichtbar für alle Visible for all Sichtbar für alle Visible only for visible list Sichtbar nur für "Sichtbar-Liste" Invisible only for invisible list Unsichtbar nur für "Unsichtbar-Liste" jAccountSettings Editing %1 Bearbeiten von %1 Warning Warnung You must enter a password Bitte ein Passwort eingeben jAccountSettingsClass jAccountSettings OK Ok Apply Anwenden Cancel Abbrechen Account Konto JID: JID: Password: Passwort: Resource: Ressource: Priority: Priorität: Set priority depending of the status Priorität vom Status abhängig machen Autoconnect at start Beim Starten automatisch verbinden Keep previous session status Den letzten Status wiederherstellen Use this option for servers doesn't support bookmark Diese Option für Server verwenden, die keine Lesezeichen unterstützen Local bookmark storage Lesezeichen lokal speichern Connection Verbindung Encrypt connection: Verbindung verschlüsseln: Never Nie When available Wenn verfügbar Always Immer Compress traffic (if possible) Traffic komprimieren (wenn möglich) Host: Host-Adresse: Port: Port: Proxy Proxy-Server Proxy type: Typ: None Keiner HTTP SOCKS 5 Default Standard Authentication Benötigt Authentifizierung User name: Benutzername: Manually set server host and port Server Host-Adresse und Port manuell einstellen jAddContact <no group> <keine Gruppe> Services Services jAdhoc Finish Cancel Abbrechen Previous Zurück Next Weiter Complete Ok Ok jConference Kick Rausschmeißen Ban Aussperren Visitor Besucher Participant Teilnehmer Moderator Moderator Invite to groupchat Zu Konferenz einladen User %1 invite you to conference %2 with reason "%3" Accept invitation? Der Benutzer %1lädt dich zur Konferenz %2 mit Begründung "%3" ein Einladung annehmen? %1 has set the subject to: %2 %1 hat das Thema in %2 geändert The subject is: %2 Das Thema ist: %2 Not authorized: Password required. Nicht autorisiert: Passwort notwendig. Forbidden: Access denied, user is banned. Verboten: Zugriff verweigert, Benutzer ausgesperrt. Item not found: The room does not exist. Objekt nicht gefunden: Der Raum existiert nicht. Not allowed: Room creation is restricted. Nicht erlaubt: Das erstellen von Räumen ist verboten. Not acceptable: Room nicks are locked down. Nicht akzeptabel: Spitznamen in Räumen sind gesperrt. Registration required: User is not on the member list. Registrierung notwendig: Benutzer ist nicht auf der Mitgliederliste. Conflict: Desired room nickname is in use or registered by another user. Konflikt: Der gewünschte Spitzname ist schon vergeben. Service unavailable: Maximum number of users has been reached. Service nicht verfügbar: Max. Anzahl der Benutzer ist erreicht. Unknown error: No description. Unbekannter Fehler: Keine Beschreibung. Join groupchat on Konferenz beitreten auf %1 is now known as %2 %1 ist jetzt %2 You have been kicked from Du wurdest rausgeschmissen von with reason: mit dem Grund: without reason ohne Grund You have been kicked Du wurdest rausgeschmissen You have been banned from Du wurdest ausgesperrt von You have been banned Du wurdest ausgesperrt %1 has been kicked %1 wurde rausgeschmissen %1 has been banned %1 wurde ausgesperrt %1 has left the room %1 hat den Raum verlassen %3 has joined the room as %1 and %2 %3 hat den Raum als %1 und %2 betreten %2 has joined the room as %1 %2 hat den Raum als %1 betreten %2 has joined the room %2 hat den Raum betreten %4 (%3) has joined the room as %1 and %2 %4 (%3) hat den Raum als %1 und %2 betreten %3 (%2) has joined the room as %1 %3 (%2) hat den Raum als %1 betreten %2 (%1) has joined the room %2 (%1) hat den Raum betreten %3 now is %1 and %2 %3 ist jetzt %1 und %2 %2 now is %1 %2 ist jetzt %1 %4 (%3) now is %1 and %2 %4 (%3) ist jetzt %1 und %2 %3 (%2) now is %1 %3 (%2) ist jetzt %1 moderator Moderator participant Teilnehmer visitor Besucher banned Ausgesperrt member Mitglied owner Besitzer administrator Administrator guest Gast <font size='2'><b>Affiliation:</b> %1</font> <font size='2'><b>Mitgliedschaft:</b> %1</font> <font size='2'><b>Role:</b> %1</font> <font size='2'><b>Rang:</b> %1</font> <font size='2'><b>JID:</b> %1</font> <font size='2'><b>JID:</b> %1</font> Copy JID to clipboard JID in Zwischenablage kopieren Add to contact list Zur Kontaktliste hinzufügen Kick message Rausschmeiß-Nachricht Ban message Aussperren-Nachricht Rejoin to conference Join conference Konferenz wieder beitreten Save to bookmarks Als Lesezeichen speichern Room configuration Raum einrichten Room participants Raum Teilnehmer Room configuration: %1 Raum einrichten: %1 Room participants: %1 Raum Teilnehmer: %1 jFileTransferRequest Save File Datei speichern Form From: Von: File name: Dateiname: File size: Dateigröße: Accept Annehmen Decline Ablehnen jFileTransferWidget File transfer: %1 Dateiübertragung: %1 Waiting... Warten... Sending... Senden... Getting... Empfangen... Done... Fertig! Close Schließen Form Filename: Dateiname: Done: Übertragen: Speed: Geschwindigkeit: File size: Dateigröße: Last time: Verstrichene Zeit: Remained time: Verbleibende Zeit: Status: Fortschritt: Open Öffnen Cancel Abbrechen jJoinChat new chat Neuer Chat New conference Neue Konferenz jLayer Jabber General Allgemein Contacts Kontakte jProtocol en xml:lang A stream error occured. The stream has been closed. Es ist ein Streaming-Fehler aufgetreten. Der Stream wurde geschlossen. The incoming stream's version is not supported Die Version des eingehenden Streams wird nicht unterstützt. The stream has been closed (by the server). Der Stream wurde (vom Server) geschlossen. The HTTP/SOCKS5 proxy requires authentication. Der HTTP-/SOCKS5-Proxy benötigt eine Authentifizierung. HTTP/SOCKS5 proxy authentication failed. HTTP-/SOCKS5-Proxy Authentifizierung ist fehlgeschlagen. The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. Der HTTP-/SOCKS5-Proxy benötigt eine nicht unterstützte Art der Authentifizierung. An I/O error occured. Ein I/O Fehler ist aufgetreten. An XML parse error occurred. Ein XML-Phrasen Fehler ist aufgetreten. The connection was refused by the server (on the socket level). Die Verbindung wurde vom Server zurückgewiesen (auf dem Socket-Level). Resolving the server's hostname failed. Auflösen des Server-Hostnamen fehlgeschlagen. Out of memory. Uhoh. Kein freier Speicher mehr. o_0. The auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. Die vom Server angebotenen Authentifizierungsarten werden nicht unterstützt, oder der Server hat überhaupt keine Authentifizierungsarten angeboten. The server's certificate could not be verified or the TLS handshake did not complete successfully. Das Zertifikat des Servers konnte nicht überprüft werden, oder der TLS-Handshake wurde nicht erfolgreich abgeschlossen. The server didn't offer TLS while it was set to be required or TLS was not compiled in. Der Server hat kein TLS angeboten während es aktiviert war oder TLS wurde nicht integriert. Negotiating/initializing compression failed. Verhandlung/Initialisierung Kompression fehlgeschlagen. Authentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. Authentifizierung fehlgeschlagen. Falscher Benutzername / falsches Passwort oder das Konto existiert nicht. ClientBase::authError() verwenden um den Grund zu finden. The user (or higher-level protocol) requested a disconnect. Der Benutzer (oder ein höherwertiges Protokoll) hat die Verbindung getrennt. There is no active connection. Keine aktive Verbindung gefunden. Unknown error. It is amazing that you see it... O_o Unbekannter Fehler. Es ist erstaunlich, dass Sie ihn überhaupt sehen... O_o Services Services Authorization request Erlaubnisanfrage You were authorized Du wurdest autorisiert Contacts's authorization was removed Die Erlaubnis wurde dem Benutzer entzogen Your authorization was removed Deine Erlaubnis wurde dir entzogen Sender: %2 <%1> Absender: %2 <%1> Senders: Absender: %2 <%1> Subject: %1 Betreff: %1 URL: %1 URL: %1 Unreaded messages: %1 Ungelesene Nachrichten: %1 vCard is succesfully saved Die vCard wurde erfolgreich gespeichert JID: %1<br/>Idle: %2 JID: %1<br/>Untätig: %2 JID: %1<br/>The feature requested is not implemented by the recipient or server. JID: %1<br/>Das angeforderte Feature wird vom Server oder Empfänger nicht unterstützt. JID: %1<br/>The requesting entity does not possess the required permissions to perform the action. JID: %1<br/>Der Anforderer hat nicht die erforderlichen Rechte, um die Aktion durchzuführen. JID: %1<br/>It is unknown StanzaError! Please notify developers.<br/>Error: %2 JID: %1<br/>Unbekannter StanzaError! Bitte die Entwickler benachrichtigen.<br/>Fehler: %2 jPubsubInfo <h3>Mood info:</h3> <h3>Stimmung:</h3> Name: %1 Name: %1 Text: %1 Nachricht: %1 <h3>Activity info:</h3> <h3>Tätigkeit:</h3> General: %1 Allgemein: %1 Specific: %1 Genauer: %1 <h3>Tune info:</h3> <h3>Musik:</h3> Artist: %1 Künstler: %1 Title: %1 Titel: %1 Source: %1 Ursprung: %1 Track: %1 Titelnummer: %1 Uri: <a href="%1">link</a> URL: <a href="%1">link</a> Length: %1 Dauer: %1 Rating: %1 Bewertung: %1 jPubsubInfoClass Pubsub info PubSub Informationen Close Schließen jRoster Add to contact list Zur Kontaktliste hinzufügen Rename contact Benutzer umbenennen Delete contact Benutzer löschen Move to group In andere Gruppe verschieben Authorization Autorisierung Send authorization to Erlaubnis erteilen Ask authorization from Erlaubnisanfrage senden Remove authorization from Erlaubnis entziehen Transports Transports Register Registrieren Unregister Deregistrieren Log In Einloggen Log Out Ausloggen Copy JID to clipboard JID in Zwischenablage kopieren Send message to: Nachricht senden an: Send file to: Datei senden an: Get idle from: Status abfragen von: Execute command: Befehl ausführen: Invite to conference: Zu Konferenz einladen: Send file Datei senden Get idle Status abfragen Execute command Befehl ausführen PubSub info: PubSub Informationen: Delete from visible list Aus "Sichtbar-Liste" entfernen Add to visible list Zur "Sichtbar-Liste" hinzufügen Delete from invisible list Aus "Unsichtbar-Liste" entfernen Add to invisible list Zur "Unsichtbar-Liste" hinzufügen Delete from ignore list Aus "Ignorieren-Liste" entfernen Add to ignore list Zur "Ignorieren-Liste" hinzufügen Name: Name: Services Services Remove transport and his contacts? Transport mit seinen Kontakten löschen? Delete with contacts Mit Delete without contacts Ohne Cancel Abbrechen Contact will be deleted. Are you sure? Der Benutzer wird aus der Kontaktliste gelöscht. Sicher? Move %1 %1 verschieben Group: Gruppe: Authorize contact? Benutzer autorisieren? Ask authorization from %1 Erlaubnisanfrage an %1 senden Reason: Grund: Remove authorization from %1 %1 die Erlaubnis entziehen jSearch Search Suchen Jabber ID Jabber ID JID JID Nickname Spitzname Error Fehler jServiceBrowser <br/><b>Identities:</b><br/> <br/><b>Identitäten:</b><br/> category: Kategorie: type: Typ: <br/><b>Features:</b><br/> <br/><b>Fähigkeiten:</b><br/> jServiceDiscovery The sender has sent XML that is malformed or that cannot be processed. Das empfangene XML ist fehlerhaft, oder konnte nicht verarbeitet werden. Access cannot be granted because an existing resource or session exists with the same name or address. Der Zugriff konnte nicht gewährt werden, weil eine bestehende Ressource oder Sitzung den selben Namen oder die selbe Adresse hat. The feature requested is not implemented by the recipient or server and therefore cannot be processed. Das angeforderte Feature wird vom Server oder Empfänger nicht unterstützt, und konnte nicht verarbeitet werden. The requesting entity does not possess the required permissions to perform the action. Der Anforderer hat nicht die erforderlichen Rechte, um die Aktion durchzuführen. The recipient or server can no longer be contacted at this address. Der Empfänger oder der Server kann nicht mehr über diese Adresse kontaktiert werden. The server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error. Der Server konnte die Stanza aufgrund einer Fehlkonfiguration oder eines unbekannten internen Server-Fehlers nicht verarbeiten. The addressed JID or item requested cannot be found. Die angeforderte JID oder das angeforderte Objekt konnten nicht gefunden werden. The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme. Der Absender hat eine XMPP-Adresse (oder Teile davon) übermittelt oder zur Verfügung gestellt, die nicht zu der im Adressierungsschema vereinbarten Syntax passt. The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server. Der Empfänger oder Server versteht die Anfrage, aber weist die Verarbeitung zurück weil sie nicht die vom Server oder Empfänger gestellten Kriterien erfüllt. The recipient or server does not allow any entity to perform the action. Der Empfänger oder Server erlaubt niemandem diese Aktion durchzuführen. The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials. Der Absender muss einen korrekten Berechtigungsnachweis erbringen, bevor ihm erlaubt wird die Aktion durchzuführen. The item requested has not changed since it was last requested. Das angeforderte Objekt hat sich seit der letzten Anforderung nicht verändert. The requesting entity is not authorized to access the requested service because payment is required. Der Anforderer ist nicht befugt auf den angeforderten Service zuzugreifen, weil eine Bezahlung erforderlich ist. The intended recipient is temporarily unavailable. Der beabsichtigte Empfänger ist zur Zeit nicht erreichbar. The recipient or server is redirecting requests for this information to another entity, usually temporarily. Der Empfänger oder Server leitet Anfragen zu dieser Information zu einer anderen Instanz weiter, normalerweise temporär. The requesting entity is not authorized to access the requested service because registration is required. Der Anforderer hat keinen Zugriff auf den angeforderten Service, weil eine Registrierung notwendig ist. A remote server or service specified as part or all of the JID of the intended recipient does not exist. Ein Remote-Server oder Service der als teilweise oder ganze JID spezifiziert ist, existiert für den gewünschten Empfänger nicht. A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time. Ein Remote-Server oder Service der als teilweise oder ganze JID spezifiziert ist, konnte nicht in einer angemessenen Zeit kontaktiert werden. The server or recipient lacks the system resources necessary to service the request. Dem Server oder Empfänger fehlen die Systemressourcen, die für die Verarbeitung der Anfrage notwendig sind. The server or recipient does not currently provide the requested service. Der Server oder Empfänger stellt den angeforderten Service zur Zeit nicht zur Verfügung. The requesting entity is not authorized to access the requested service because a subscription is required. Der Anforderer hat keinen Zugriff auf den angeforderten Service, weil ein Abonnement notwendig ist. The unknown error condition. Der unbekannte Fehler ist aufgetreten. The recipient or server understood the request but was not expecting it at this time. Der Empfänger oder Server hat die Anforderung verstanden, aber sie nicht zu diesem Zeitpunkt erwartet. The stanza 'from' address specified by a connected client is not valid for the stream. jSlotSignal %1@%2 %1@%2 Invisible for all Unsichtbar für alle Visible for all Sichtbar für alle Visible only for visible list Sichtbar nur für "Sichtbar-Liste" Invisible only for invisible list Unsichtbar nur für "Unsichtbar-Liste" jTransport Register Registrieren Name Name Nick Spitzname First Vorname Last Nachname E-Mail E-Mail Address Adresse City Wohnort State Land Zip Postleitzahl Phone Telefon URL Homepage Date Datum Misc Verschiedenes Text Text Password Passwort jVCard Update photo Foto aktualisieren Add name Name hinzufügen Add nick Spitzname hinzufügen Add birthday Geburtstag hinzufügen Add homepage Homepage hinzufügen Add country Land hinzufügen Add region Region hinzufügen Add city Wohnort hinzufügen Add postcode Postleitzahl hinzufügen Add street Straße hinzufügen Add PO box Posfach hinzufügen Add description Beschreibung hinzufügen Add organization name Firmenname hinzufügen Add organization unit Abteilung hinzufügen Add title Namenspräfix hinzufügen Add role Rang hinzufügen Open File Datei öffnen Images (*.gif *.bmp *.jpg *.jpeg *.png) Bilder (*.gif *.bmp *.jpg *.jpeg *.png) Open error Fehler beim Öffnen Image size is too big Bilddatei ist zu groß userInformation Request details Neu laden Close Schließen Save Speichern topicConfigDialogClass Change topic Thema ändern Change Ändern Cancel Abbrechen qutim-0.2.0/languages/de_DE/sources/ubuntunotify.ts0000644000175000017500000000163011257677212024042 0ustar euroelessareuroelessar LibnotifyLayer System message Systemnachricht %1 Blocked message from %1 Nachricht blockiert von %1 has birthday today! hat heute Geburtstag!! qutim-0.2.0/languages/de_DE/sources/vkontakte.ts0000644000175000017500000001473211270557060023275 0ustar euroelessareuroelessar EdditAccount Editing %1 Bearbeiten von %1 Form General Allgemein Password: Passwort: Autoconnect on start Beim Starten automatisch verbinden Keep-alive every: Verbindung aufrecht erhalten alle: s s Refresh friend list every: Freundesliste aktualisieren alle: Check for new messages every: Auf neue Nachrichten überprüfen alle: Updates Updates Check for friends updates every: Updates von Freunden überprüfen alle: Enable friends photo updates notifications Aktiviere Foto-Update Benachrichtigungen von Freunden Insert preview URL on new photos notifications Vorschau-URL bei neuen Foto-Benachrichtigungen anzeigen Insert fullsize URL on new photos notifications Volle URL bei neuen Foto-Benachrichtigungen anzeigen OK Ok Apply Anwenden Cancel Abbrechen LoginForm Form E-mail: E-Mail: Password: Passwort: Autoconnect on start Beim Starten automatisch verbinden VcontactList Friends Freunde Favorites Favoriten <font size='2'><b>Status message:</b>&nbsp;%1</font <font size='2'><b>Statusnachricht:</b>&nbsp;%1</font Open user page Seite des Benutzers öffnen VprotocolWrap Mismatch nick or password Falscher Spitzname oder Passwort Vkontakte.ru updates Vkontakte.ru Updates %1 was tagged on photo %1 wurde auf einem Foto markiert %1 added new photo %1 hat ein neues Foto hinzugefügt VstatusObject Online Online Offline Offline qutim-0.2.0/languages/de_DE/sources/irc.ts0000644000175000017500000006503111257677212022051 0ustar euroelessareuroelessar AddAccountFormClass AddAccountForm Server: Server: irc.freenode.net Port: Port: 6667 Nick: Spitzname: Real Name: Wirklicher Name: Password: Passwort: Save password Passwort speichern IrcConsoleClass IRC Server Console IRC Server Konsole ircAccount Channel owner Raumbesitzer Channel administrator Raumadministrator Channel operator Raumoperator Channel half-operator Raum-Halboperator Voice Sprecherlaubnis Banned Ausgesperrt Online Online Offline Offline Away Abwesend Console Konsole Channels List Raumliste Join Channel Raum betreten Change topic Thema ändern IRC operator IRC Operator Mode Modus Private chat Privatchat Notify avatar Give Op Op geben Take Op Op entziehen Give HalfOp Halb-Op geben Take HalfOp Halb-Op entziehen Give Voice Sprecherlaubnis erteilen Take Voice Sprecherkaubnis entziehen Kick Rausschmeißen Kick with... Rausschmeißen mit... Ban Ausperren UnBan Sperrung aufheben Information Informationen CTCP Modes Modi Kick / Ban Rausschmeißen / Ausperren Kick reason Grund für Rausschmiss ircAccountSettingsClass IRC Account Settings IRC Konto bearbeiten General Allgemein Nick: Spitzname: Alternate Nick: Alternativer Spitzname: Real Name: Wirklicher Name: Autologin on start Beim Starten automatisch verbinden Server: Server: Port: Port: Codepage: Codepage: Apple Roman Big5 Big5-HKSCS EUC-JP EUC-KR GB18030-0 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 ISO 8859-16 Iscii-Bng Iscii-Dev Iscii-Gjr Iscii-Knd Iscii-Mlm Iscii-Ori Iscii-Pnj Iscii-Tlg Iscii-Tml JIS X 0201 JIS X 0208 KOI8-R KOI8-U MuleLao-1 ROMAN8 Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 WINSAMI2 Identify Identität Age: Alter: Gender: Geschlecht: Unspecified Unbekannt Male Männlich Female Weiblich Location Wohnort: Languages: Sprachkentnisse: Avatar URL: Other: Sonstiges: Advanced Erweitert Part message: Beim Verlassen des Raumes Nachricht senden: Quit message: Beim Verlassen des Servers Nachricht senden: Autosend commands after connect: Nach dem Verbinden automatisch Befehle senden: OK Ok Cancel Abbrechen Apply Anwenden ircProtocol Connecting to %1 Verbinden mit %1 Trying alternate nick: %1 Versuche alternativen Spitznamen: %1 %1 requests %2 %1 frägt nach %2 %1 requests unknown command %2 %1 frägt nach unbekannten Befehl %2 %1 reply from %2: %3 %1 Antwort von %2: %3 %1 has set mode %2 %1 setzt Modus %2 ircSettingsClass ircSettings Main Allgemein Advanced Erweitert joinChannelClass Join Channel Raum betreten Channel: Raum: listChannel Sending channels list request... Raumliste anfordern... Fetching channels list... %1 Empfange Raumliste... %1 Channels list loaded. (%1) Raumliste geladen. (%1) Fetching channels list... (%1) Empfange Raumliste... (%1) listChannelClass Channels List Raumliste Filter by: Filtern: Request list Liste anfordern <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> Users Benutzer Channel Raum Topic Thema textDialogClass textDialog qutim-0.2.0/languages/de_DE/sources/nowlistening.ts0000644000175000017500000005242211257677212024014 0ustar euroelessareuroelessar settingsUi Form Mode Modus Set mode for all accounts Für alle Accounts den gleichen Modus verwenden You have no ICQ or Jabber accounts. Keine ICQ oder Jabber Accounts vorhanden. Current plugin mode Plugin-Modus Deactivated Deaktiviert For Jabber accounts Für Jabber-Accounts Activated Aktiviert Info to be presented Informationen, die angezeigt werden sollen artist title For ICQ accounts Für ICQ-Accounts RadioButton Changes current X-status message Ändert die x-Statusnachricht X-status message mask Maske x-Statusnachricht Listening now: %artist - %title Hört gerade: %artist - %title Activates when X-status is "Listening to music" Wird aktiviert, wenn x-Status "Musik hören" aktiv ist %artist - %title Settings Einstellungen Music Player Musikplayer Amarok 1.4 AIMP Amarok 2 Audacious MPD QMMP Rhythmbox Song Bird (Linux) VLC <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For ICQ X-status message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - track length in minutes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - full path to file</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For Jabber Tune message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - track length in seconds</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - full path to file</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Platzhalter bei ICQ x-Statusnachrichten:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - Künstler</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - Titel</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - Album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - Titelnummer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - Titellänge in Minuten</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - Voller Pfad zur Datei</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Platzhalter für Jabber-Laune:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - Künstler</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - Titel</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - Album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - Titelnummer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - Titellänge in Minuten</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - Voller Pfad zur Datei</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Winamp module author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html> Winamp Check period (in seconds) Aktualisierungsintervall (in Sekunden) 10 Hostname 127.0.0.1 Port 6600 Password Passwort Info Info background-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); About Über qutim-0.2.0/languages/de_DE/sources/gpgcrypt.ts0000644000175000017500000000463511257677212023136 0ustar euroelessareuroelessar GPGCrypt Set GPG Key GPG Schlüssel einstellen GPGSettings Form Settings Einstellungen Your Key: Eigener Schlüssel: Passphrase OpenPGP Passphrase OpenPGP Passphrase Your passphrase is needed to use OpenPGP security. Please enter your passphrase below: Deine Passphrase wird benötigt, um OpenPGP Sicherheit verwenden zu können. Bitte deine Passphrase hier eingeben: &Cancel &Abbrechen &OK &Ok PassphraseDlg %1: OpenPGP Passphrase %1: OpenPGP Passphrase setKey Select Contact Key Schlüssel des Kontaktes auswählen Select Key: Schlüssel auswählen: qutim-0.2.0/languages/de_DE/sources/jsonhistory.ts0000644000175000017500000000435611245037111023653 0ustar euroelessareuroelessar HistorySettingsClass HistorySettings Save message history Nachrichtenverlauf speichern Show recent messages in messaging window Beim Öffnen des Nachrichtenfensters die letzten Nachrichten anzeigen HistoryWindowClass HistoryWindow Account: Account: From: Von: Search Suchen Return 1 JsonHistoryNamespace::HistoryWindow No History Kein Nachrichtenverlauf QObject History Nachrichtenverlauf qutim-0.2.0/languages/de_DE/sources/youtubedownload.ts0000644000175000017500000001551211257677212024517 0ustar euroelessareuroelessar urlpreviewPlugin Download Download Add download links for YouTube urls Download-Links zu YouTube-URLs anzeigen urlpreviewSettingsClass Settings Einstellungen General Allgemein Enable on incoming messages Aktiv bei eingehenden Nachrichten Enable on outgoing messages Aktiv bei gesendeten Nachrichten Info template: Maske: Macros: %URL% - Clip address Platzhalter: %URL% - URL des Videos About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">YouTube download link qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Adds link for downloading clips</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:saboteur@saboteur.mp"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Evgeny Soynov</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Template:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler@co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Alexander Kazarin</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/de_DE/sources/weather.ts0000644000175000017500000001264111245037111022713 0ustar euroelessareuroelessar weatherSettingsClass Settings Einstellungen Cities Orte Add Hinzufügen Delete city Ort löschen Search Suchen Enter city name Name des Ortes eingeben Refresh period: Aktualisierungsintervall: Show weather in the status row Wetter als Statusnachricht des Ortes anzeigen About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Weather qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/de_DE/sources/plugman.ts0000644000175000017500000005241711257677212022743 0ustar euroelessareuroelessar ChooseCategoryPage Select art Design/Optik auswählen Select core Library (*.dll) Bibliothek (*.dll) Library (*.dylib *.bundle *.so) Bibliothek (*.dylib *.bundle *.so) Library (*.so) Bibliothek (*.so) Select library Bibliothek auswählen WizardPage Package category: Kategorie: Art Design/Optik Core Lib Bibliothek Plugin Plugin ... ChoosePathPage WizardPage ... ConfigPackagePage WizardPage Name: Name: * * Version: Version: Category: Kategorie: Art Design/Optik Core Lib Bibliothek Plugin Plugin Type: Typ: Short description: Kurzbeschreibung: Url: URL: Author: Autor: License: Lizenz: Platform: Plattform: Package name: Paketname: QObject Package name is empty "Paketname" ist nicht definiert Package type is empty "Pakettyp" ist nicht definiert Invalid package version Ungültige Paketversion Wrong platform Falsche Plattform manager Plugman Pakete verwalten Not yet implemented Apply Anwenden Actions Aktionen find plugDownloader bytes/sec bytes/s kB/s kB/s MB/s MB/s Downloading: %1%, speed: %2 %3 Failed to download: %1 Downloaden: %1%, Geschwindigkeit: %2 %3 Downloading: %1%, speed: %2 %3 Failed to download: %1 Downloaden: %1%, Geschwindigkeit: %2 %3 plugInstaller Unable to open archive: %1 Archiv kann nicht geöffnet werden: %1 warning: trying to overwrite existing files! Warnung: Versuche bereits existierende Dateien zu überschreiben! Need restart! Neustart erforderlich! Unable to extract archive: %1 to %2 Kann Archiv nicht entpacken: %1 nach %2 Installing: Installiere: Unable to update package %1: installed version is later Aktualisieren des Pakets %1 nicht möglich: Die installierte Version ist neuer Unable to install package: %1 Kann das Paket nicht installieren: %1 Invalid package: %1 Ungültiges Paket: %1 Removing: Entferne: plugItemDelegate isUpgradable Upgrade möglich isInstallable Installierbar isDowngradable Downgrade möglich installed Installiert Unknown Unbekannt Install Installieren Remove Entfernen Upgrade Upgraden plugMan Manage packages Pakete verwalten plugManager Actions Aktionen Update packages list Paketliste aktualisieren Upgrade all Alles Upgraden Revert changes Änderungen rückgängig machen plugPackageModel Packages Pakete plugXMLHandler Unable to open file Konnte Datei nicht öffnen Unable to set content Unable to write file Konnte Datei nicht schreiben Can't read database. Check your pesmissions. Konnte Datenbank nicht lesen. Zugriffsrechte überprüfen! Broken package database Ungültige Paketdatenbank unable to open file kann Datei nicht öffnen unable to set content plugmanSettings Form Settings Einstellungen Not yet implemented group packages Pakete gruppieren <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mirror list</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mirrors</span></p></body></html> Add Hinzufügen About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> Name Name Description Beschreibung Url URL qutim-0.2.0/languages/de_DE/sources/qt_de.ts0000644000175000017500000106355411244206374022372 0ustar euroelessareuroelessar AudioOutput <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> <html>Das Audiogerät <b>%1</b> funktioniert nicht.<br/>Es wird stattdessen <b>%2</b> verwendet.</html> <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> <html>Das Audiogerät <b>%1</b> wurde aktiviert,<br/>da es gerade verfügbar und höher priorisiert ist.</html> Revert back to device '%1' Zurückschalten zum Gerät '%1' CloseButton Close Tab Schließen Phonon:: Notifications Benachrichtungen Music Musik Video Video Communication Kommunikation Games Spiele Accessibility Eingabehilfen Phonon::Gstreamer::Backend Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled. Warnung: Das Paket gstreamer0.10-plugins-good ist nicht installiert. Einige Video-Funktionen stehen nicht zur Verfügung. Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled Warnung: Die grundlegenden GStreamer-plugins sind nicht installiert. Die Audio- und Video-Unterstützung wurde abgeschaltet Phonon::Gstreamer::MediaObject Cannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed. Das Abspielen konnte nicht gestartet werden. Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist. A required codec is missing. You need to install the following codec(s) to play this content: %0 Es sind nicht alle erforderlichen Codecs installiert. Um diesen Inhalt abzuspielen, muss der folgende Codec installiert werden: %0 Could not open media source. Die Medienquelle konnte nicht geöffnet werden. Invalid source type. Ungültiger Typ der Medienquelle. Could not locate media source. Die Medienquelle konnte nicht gefunden werden. Could not open audio device. The device is already in use. Das Audiogerät konnte nicht geöffnet werden, da es bereits in Benutzung ist. Could not decode media source. Die Medienquelle konnte nicht gefunden werden. Phonon::VolumeSlider Volume: %1% Lautstärke: %1% Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% Die Regler wird zur Einstellung der Lautstärke benutzt. Die Position links entspricht 0%; die Position rechts entspricht %1% Q3Accel %1, %2 not defined %1, %2 sind nicht definiert Ambiguous %1 not handled Mehrdeutige %1 können nicht verarbeitet werden Q3DataTable True Wahr False Falsch Insert Einfügen Update Aktualisieren Delete Löschen Q3FileDialog Copy or Move a File Datei kopieren oder verschieben Read: %1 Lesen: %1 Write: %1 Schreiben: %1 Cancel Abbrechen All Files (*) Alle Dateien (*) Name Name Size Größe Type Typ Date Datum Attributes Attribute &OK &OK Look &in: Su&chen in: File &name: Datei&name: File &type: Datei&typ: Back Zurück One directory up Ein Verzeichnis zurück Create New Folder Neuen Ordner erstellen List View Liste Detail View Ausführlich Preview File Info Voransicht der Datei-Information Preview File Contents Voransicht des Datei-Inhalts Read-write Lesen/Schreiben Read-only Nur Lesen Write-only Nur Schreiben Inaccessible Gesperrt Symlink to File Verknüpfung mit Datei Symlink to Directory Verknüpfung mit Verzeichnis Symlink to Special Verknüpfung mit Spezialdatei File Datei Dir Verzeichnis Special Spezialattribut Open Öffnen Save As Speichern unter &Open &Öffnen &Save S&peichern &Rename &Umbenennen &Delete &Löschen R&eload Erne&ut laden Sort by &Name Nach &Name sortieren Sort by &Size Nach &Größe sortieren Sort by &Date Nach &Datum sortieren &Unsorted &Unsortiert Sort Sortieren Show &hidden files &Versteckte Dateien anzeigen the file die Datei the directory das Verzeichnis the symlink die Verknüpfung Delete %1 %1 löschen <qt>Are you sure you wish to delete %1 "%2"?</qt> <qt>Sind Sie sicher, dass Sie %1 "%2" löschen möchten?</qt> &Yes &Ja &No &Nein New Folder 1 Neues Verzeichnis 1 New Folder Neues Verzeichnis New Folder %1 Neues Verzeichnis %1 Find Directory Verzeichnis suchen Directories Verzeichnisse Directory: Verzeichnis: Error Fehler %1 File not found. Check path and filename. %1 Datei konnte nicht gefunden werden. Überprüfen Sie Pfad und Dateinamen. All Files (*.*) Alle Dateien (*.*) Open Öffnen Select a Directory Wählen Sie ein Verzeichnis Q3LocalFs Could not read directory %1 Konnte Verzeichnis nicht lesen %1 Could not create directory %1 Konnte Verzeichnis nicht erstellen %1 Could not remove file or directory %1 Konnte Datei oder Verzeichnis nicht löschen %1 Could not rename %1 to %2 Konnte nicht umbenannt werden: %1 nach %2 Could not open %1 Konnte nicht geöffnet werden: %1 Could not write %1 Konnte nicht geschrieben werden: %1 Q3MainWindow Line up Ausrichten Customize... Anpassen... Q3NetworkProtocol Operation stopped by the user Operation von Benutzer angehalten Q3ProgressDialog Cancel Abbrechen Q3TabDialog OK OK Apply Anwenden Help Hilfe Defaults Defaults Cancel Abbrechen Q3TextEdit &Undo &Rückgängig &Redo Wieder&herstellen Cu&t &Ausschneiden &Copy &Kopieren &Paste Einf&ügen Clear Löschen Select All Alles auswählen Q3TitleBar System System Restore up Wiederherstellen Minimize Minimieren Restore down Wiederherstellen Maximize Maximieren Close Schließen Contains commands to manipulate the window Enthält Befehle zum Ändern der Fenstergröße Puts a minimized back to normal Stellt ein minimiertes Fenster wieder her Moves the window out of the way Minimiert das Fenster Puts a maximized window back to normal Stellt ein maximiertes Fenster wieder her Makes the window full screen Vollbildmodus Closes the window Schließt das Fenster Displays the name of the window and contains controls to manipulate it Zeigt den Namen des Fensters und enthält Befehle zum Ändern Q3ToolBar More... Mehr... Q3UrlOperator The protocol `%1' is not supported Das Protokoll `%1' wird nicht unterstützt The protocol `%1' does not support listing directories Das Protokoll `%1' unterstützt nicht das Auflisten von Verzeichnissen The protocol `%1' does not support creating new directories Das Protokoll `%1' unterstützt nicht das Anlegen neuer Verzeichnisse The protocol `%1' does not support removing files or directories Das Protokoll `%1' unterstützt nicht das Löschen von Dateien oder Verzeichnissen The protocol `%1' does not support renaming files or directories Das Protokoll `%1' unterstützt nicht das Umbenennen von Dateien oder Verzeichnissen The protocol `%1' does not support getting files Das Protokoll `%1' unterstützt nicht das Laden von Files The protocol `%1' does not support putting files Das Protokoll `%1' unterstützt nicht das Speichern von Files The protocol `%1' does not support copying or moving files or directories Das Protokoll `%1' unterstützt nicht das Kopieren oder Verschieben von Dateien oder Verzeichnissen (unknown) (unbekannt) Q3Wizard &Cancel &Abbrechen < &Back < &Zurück &Next > &Weiter > &Finish Ab&schließen &Help &Hilfe QAbstractSocket Host not found Rechner konnte nicht gefunden werden Connection refused Verbindung verweigert Connection timed out Das Zeitlimit für die Verbindung wurde überschritten Operation on socket is not supported Diese Socketoperation wird nicht unterstützt Socket operation timed out Das Zeitlimit für die Operation wurde überschritten Socket is not connected Nicht verbunden Network unreachable Das Netzwerk ist nicht erreichbar QAbstractSpinBox &Step up &Inkrementieren Step &down &Dekrementieren &Select All &Alles auswählen QApplication QT_LAYOUT_DIRECTION Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. LTR Executable '%1' requires Qt %2, found Qt %3. Die Anwendung '%1' benötigt Qt %2; es wurde aber Qt %3 gefunden. Incompatible Qt Library Error Qt Bibliothek ist inkompatibel Activate Aktivieren Activates the program's main window Aktiviert das Programmhauptfenster QAxSelect Select ActiveX Control ActiveX-Element auswählen OK OK &Cancel &Abbrechen COM &Object: COM-&Objekt: QCheckBox Uncheck Löschen Check Ankreuzen Toggle Umschalten QColorDialog Hu&e: Farb&ton: &Sat: &Sättigung: &Val: &Helligkeit: &Red: &Rot: &Green: &Grün: Bl&ue: Bla&u: A&lpha channel: A&lphakanal: Select Color Farbauswahl &Basic colors Grundfar&ben &Custom colors &Benutzerdefinierte Farben &Add to Custom Colors Zu benutzerdefinierten Farben &hinzufügen QComboBox Open Öffnen False Falsch True Wahr Close Schließen QCoreApplication %1: key is empty QSystemSemaphore %1: Ungültige Schlüsselangabe (leer) %1: unable to make key QSystemSemaphore %1: Es kann kein Schlüssel erzeugt werden %1: ftok failed QSystemSemaphore %1: ftok-Aufruf schlug fehl QDB2Driver Unable to connect Es kann keine Verbindung aufgebaut werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Unable to rollback transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) Unable to set autocommit 'autocommit' konnte nicht aktiviert werden QDB2Result Unable to execute statement Der Befehl konnte nicht ausgeführt werden Unable to prepare statement Der Befehl konnte nicht initialisiert werden Unable to bind variable Die Variable konnte nicht gebunden werden Unable to fetch record %1 Der Datensatz %1 konnte nicht abgeholt werden Unable to fetch next Der nächste Datensatz konnte nicht abgeholt werden Unable to fetch first Der erste Datensatz konnte nicht abgeholt werden QDateTimeEdit AM AM am am PM PM pm pm QDial QDial QDial SpeedoMeter Tachometer SliderHandle Schieberegler QDialog What's This? Direkthilfe Done Fertig QDialogButtonBox OK OK Save Speichern &Save S&peichern Open Öffnen Cancel Abbrechen &Cancel &Abbrechen Close Schließen &Close Schl&ießen Apply Anwenden Reset Zurücksetzen Help Hilfe Don't Save Nicht speichern Discard Verwerfen &Yes &Ja Yes to &All Ja, &alle &No &Nein N&o to All N&ein, keine Save All Alles speichern Abort Abbrechen Retry Wiederholen Ignore Ignorieren Restore Defaults Voreinstellungen Close without Saving Schließen ohne Speichern &OK &OK QDirModel Name Name Size Größe Kind Match OS X Finder Art Type All other platforms Typ Date Modified Änderungsdatum QDockWidget Close Schließen Dock Andocken Float Herauslösen QDoubleSpinBox More Mehr Less Weniger QErrorMessage &Show this message again Diese Meldung noch einmal an&zeigen &OK &OK Debug Message: Debug-Ausgabe: Warning: Warnung: Fatal Error: Fehler: QFile Destination file exists Die Zieldatei existiert bereits Cannot open %1 for input %1 konnte nicht zum Lesen geöffnet werden Cannot open for output Das Öffnen zum Schreiben schlug fehl Failure to write block Der Datenblock konnte nicht geschrieben werden Cannot create %1 for output %1 kann nicht erstellt werden QFileDialog All Files (*) Alle Dateien (*) Back Zurück List View Liste Detail View Details File Datei Open Öffnen Save As Speichern unter &Open &Öffnen &Save S&peichern Recent Places Zuletzt besucht &Rename &Umbenennen &Delete &Löschen Show &hidden files &Versteckte Dateien anzeigen New Folder Neues Verzeichnis Find Directory Verzeichnis suchen Directories Verzeichnisse All Files (*.*) Alle Dateien (*.*) Directory: Verzeichnis: %1 already exists. Do you want to replace it? Die Datei %1 existiert bereits. Soll sie überschrieben werden? %1 File not found. Please verify the correct file name was given. %1 Die Datei konnte nicht gefunden werden. Stellen Sie sicher, dass der Dateiname richtig ist. My Computer Mein Computer Parent Directory Übergeordnetes Verzeichnis Files of type: Dateien des Typs: %1 Directory not found. Please verify the correct directory name was given. %1 Das Verzeichnis konnte nicht gefunden werden. Stellen Sie sicher, dass der Verzeichnisname richtig ist. '%1' is write protected. Do you want to delete it anyway? '%1' ist schreibgeschützt. Möchten sie die Datei trotzdem löschen? Are sure you want to delete '%1'? Sind Sie sicher, dass Sie %1 löschen möchten? Could not delete directory. Konnte Verzeichnis nicht löschen. Drive Laufwerk Unknown Unbekannt Show Anzeigen Forward Vorwärts &New Folder &Neues Verzeichnis &Choose &Auswählen Remove Löschen File &name: Datei&name: Look in: Suche in: Create New Folder Neuen Ordner erstellen QFileSystemModel %1 TB %1 TB %1 GB %1 GB %1 MB %1 MB %1 KB %1 KB %1 bytes %1 byte Invalid filename Ungültiger Dateiname <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. <b>Der Name "%1" kann nicht verwendet werden.</b><p>Versuchen Sie, die Sonderzeichen zu entfernen oder einen kürzeren Namen zu verwenden. Name Name Size Größe Kind Match OS X Finder Art Type All other platforms Typ Date Modified Änderungsdatum My Computer Mein Computer Computer Computer QFontDatabase Normal Normal Bold Fett Demi Bold Halbfett Black Schwarz Demi Semi Light Leicht Italic Kursiv Oblique Schräggestellt Any Alle Latin Lateinisch Greek Griechisch Cyrillic Kyrillisch Armenian Armenisch Hebrew Hebräisch Arabic Arabisch Syriac Syrisch Thaana Thaana Devanagari Devanagari Bengali Bengalisch Gurmukhi Gurmukhi Gujarati Gujarati Oriya Oriya Tamil Tamilisch Telugu Telugu Kannada Kannada Malayalam Malayalam Sinhala Sinhala Thai Thailändisch Lao Laotisch Tibetan Tibetisch Myanmar Myanmar Georgian Georgisch Khmer Khmer Simplified Chinese Vereinfachtes Chinesisch Traditional Chinese Traditionelles Chinesisch Japanese Japanisch Korean Koreanisch Vietnamese Vietnamesisch Symbol Symbol Ogham Ogham Runic Runen QFontDialog &Font &Schriftart Font st&yle Schrifts&til &Size &Größe Effects Effekte Stri&keout Durch&gestrichen &Underline &Unterstrichen Sample Beispiel Select Font Schriftart auswählen Wr&iting System &Schriftsystem QFtp Host %1 found Rechner %1 gefunden Host found Rechner gefunden Connected to host %1 Verbunden mit Rechner %1 Connected to host Verbindung mit Rechner besteht Connection to %1 closed Verbindung mit %1 beendet Connection closed Verbindung beendet Host %1 not found Rechner %1 konnte nicht gefunden werden Connection refused to host %1 Verbindung mit %1 verweigert Connection timed out to host %1 Das Zeitlimit für die Verbindung zu '%1' wurde überschritten Unknown error Unbekannter Fehler Connecting to host failed: %1 Verbindung mit Rechner schlug fehl: %1 Login failed: %1 Anmeldung schlug fehl: %1 Listing directory failed: %1 Der Inhalt des Verzeichnisses kann nicht angezeigt werden: %1 Changing directory failed: %1 Ändern des Verzeichnises schlug fehl: %1 Downloading file failed: %1 Herunterladen der Datei schlug fehl: %1 Uploading file failed: %1 Hochladen der Datei schlug fehl: %1 Removing file failed: %1 Löschen der Datei schlug fehl: %1 Creating directory failed: %1 Erstellen des Verzeichnises schlug fehl: %1 Removing directory failed: %1 Löschen des Verzeichnises schlug fehl: %1 Not connected Keine Verbindung Connection refused for data connection Verbindung für die Daten Verbindung verweigert QHostInfo Unknown error Unbekannter Fehler QHostInfoAgent Host not found Rechner konnte nicht gefunden werden Unknown address type Unbekannter Adresstyp Unknown error Unbekannter Fehler QHttp Connection refused Verbindung verweigert Host %1 not found Rechner %1 konnte nicht gefunden werden Wrong content length Ungültige Längenangabe HTTP request failed HTTP-Anfrage fehlgeschlagen Host %1 found Rechner %1 gefunden Host found Rechner gefunden Connected to host %1 Verbunden mit Rechner %1 Connected to host Verbindung mit Rechner besteht Connection to %1 closed Verbindung mit %1 beendet Connection closed Verbindung beendet Unknown error Unbekannter Fehler Request aborted Anfrage wurde abgebrochen No server set to connect to Für die Verbindung wurde kein Server-Rechner angegeben Server closed connection unexpectedly Der Server hat die Verbindung unerwartet geschlossen Invalid HTTP response header Der Kopfteil der HTTP-Antwort ist ungültig Invalid HTTP chunked body Der Inhalt (chunked body) der HTTP-Antwort ist ungültig Error writing response to device Beim Schreiben der Antwort auf das Ausgabegerät ist ein Fehler aufgetreten Proxy authentication required Proxy-Authentifizierung erforderlich Authentication required Authentifizierung erforderlich Proxy requires authentication Der Proxy-Server verlangt eine Authentifizierung Host requires authentication Der Hostrechner verlangt eine Authentifizierung Data corrupted Die Daten sind verfälscht SSL handshake failed Es trat ein Fehler im Ablauf des SSL-Protokolls auf. Unknown protocol specified Es wurde ein unbekanntes Protokoll angegeben Connection refused (or timed out) Verbindung verweigert oder Zeitlimit überschritten HTTPS connection requested but SSL support not compiled in Die angeforderte HTTPS-Verbindung kann nicht aufgebaut werden, da keine SSL-Unterstützung vorhanden ist QHttpSocketEngine Did not receive HTTP response from proxy Keine HTTP-Antwort vom Proxy-Server Error parsing authentication request from proxy Fehler beim Auswerten der Authentifizierungsanforderung des Proxy-Servers Authentication required Authentifizierung erforderlich Proxy denied connection Der Proxy-Server hat den Aufbau einer Verbindung verweigert Error communicating with HTTP proxy Fehler bei der Kommunikation mit dem Proxy-Server Proxy server not found Es konnte kein Proxy-Server gefunden werden Proxy connection refused Der Proxy-Server hat den Aufbau einer Verbindung verweigert Proxy server connection timed out Bei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit überschritten Proxy connection closed prematurely Der Proxy-Server hat die Verbindung vorzeitig beendet QIBaseDriver Error opening database Die Datenbankverbindung konnte nicht geöffnet werden Could not start transaction Es konnte keine Transaktion gestartet werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Unable to rollback transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) QIBaseResult Unable to create BLOB Es konnte kein BLOB erzeugt werden Unable to write BLOB Der BLOB konnte nicht geschrieben werden Unable to open BLOB Der BLOB konnte nicht geöffnet werden Unable to read BLOB Der BLOB konnte nicht gelesen werden Could not find array Das Feld konnte nicht gefunden werden Could not get array data Die Daten des Feldes konnten nicht gelesen werden Could not get query info Die erforderlichen Informationen zur Abfrage sind nicht verfügbar Could not start transaction Es konnte keine Transaktion gestartet werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Could not allocate statement Die Allokation des Befehls schlug fehl Could not prepare statement Der Befehl konnte nicht initalisiert werden Could not describe input statement Es konnte keine Beschreibung des Eingabebefehls erhalten werden Could not describe statement Es konnte keine Beschreibung des Befehls erhalten werden Unable to close statement Der Befehl konnte nicht geschlossen werden Unable to execute query Der Befehl konnte nicht ausgeführt werden Could not fetch next item Das nächste Element konnte nicht abgeholt werden Could not get statement info Es ist keine Information zum Befehl verfügbar QIODevice Permission denied Zugriff verweigert Too many open files Zu viele Dateien geöffnet No such file or directory Die Datei oder das Verzeichnis konnte nicht gefunden werden No space left on device Kein freier Speicherplatz auf dem Gerät vorhanden Unknown error Unbekannter Fehler QInputContext XIM XIM XIM input method XIM-Eingabemethode Windows input method Windows-Eingabemethode Mac OS X input method Mac OS X-Eingabemethode QInputDialog Enter a value: Geben Sie einen Wert ein: QLibrary Could not mmap '%1': %2 Operation mmap fehlgeschlagen für '%1': %2 Plugin verification data mismatch in '%1' Die Prüfdaten des Plugins '%1' stimmen nicht überein Could not unmap '%1': %2 Operation unmap fehlgeschlagen für '%1': %2 The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5] The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. Erforderlicher build-spezifischer Schlüssel "%2", erhalten "%3" Unknown error Unbekannter Fehler The shared library was not found. Die dynamische Bibliothek konnte nicht gefunden werden. The file '%1' is not a valid Qt plugin. Die Datei '%1' ist kein gültiges Qt-Plugin. The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (Im Debug- und Release-Modus erstellte Bibliotheken können nicht zusammen verwendet werden.) Cannot load library %1: %2 Die Library %1 kann nicht geladen werden: %2 Cannot unload library %1: %2 Die Library %1 kann nicht entladen werden: %2 Cannot resolve symbol "%1" in %2: %3 Das Symbol "%1" kann in %2 nicht aufgelöst werden: %3 QLineEdit Select All Alles auswählen &Undo &Rückgängig &Redo Wieder&herstellen Cu&t &Ausschneiden &Copy &Kopieren &Paste Einf&ügen Delete Löschen QLocalServer %1: Name error %1: Fehlerhafter Name %1: Permission denied %1: Zugriff verweigert %1: Address in use %1: Die Adresse wird bereits verwendet %1: Unknown error %2 %1: Unbekannter Fehler %2 QLocalSocket %1: Connection refused %1: Der Aufbau einer Verbindung wurde verweigert %1: Remote closed %1: Die Verbindung wurde von der Gegenseite geschlossen %1: Invalid name %1: Ungültiger Name %1: Socket access error %1: Fehler beim Zugriff auf den Socket %1: Socket resource error %1: Socketfehler (Ressourcenproblem) %1: Socket operation timed out %1: Zeitüberschreitung bei Socketoperation %1: Datagram too large %1: Das Datagramm ist zu groß %1: Connection error %1: Verbindungsfehler %1: The socket operation is not supported %1: Diese Socketoperation wird nicht unterstützt %1: Unknown error %1: Unbekannter Fehler %1: Unknown error %2 %1: Unbekannter Fehler %2 QMYSQLDriver Unable to open database ' Die Datenbankverbindung konnte nicht geöffnet werden ' Unable to connect Es kann keine Verbindung aufgebaut werden Unable to begin transaction Es konnte keine Transaktion gestartet werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Unable to rollback transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) QMYSQLResult Unable to fetch data Es konnten keine Daten abgeholt werden Unable to execute query Die Abfrage konnte nicht ausgeführt werden Unable to store result Das Ergebnis konnte nicht gespeichert werden Unable to prepare statement Der Befehl konnte nicht initialisiert werden Unable to reset statement Der Befehl konnte nicht zurückgesetzt werden Unable to bind value Der Wert konnte nicht gebunden werden Unable to execute statement Der Befehl konnte nicht ausgeführt werden Unable to bind outvalues Die Ausgabewerte konnten nicht gebunden werden Unable to store statement results Die Ergebnisse des Befehls konnten nicht gespeichert werden Unable to execute next query Die folgende Abfrage kann nicht ausgeführt werden Unable to store next result Das folgende Ergebnis kann nicht gespeichert werden QMdiArea (Untitled) (Unbenannt) QMdiSubWindow %1 - [%2] %1 - [%2] Close Schließen Minimize Minimieren Restore Down Wiederherstellen &Restore Wieder&herstellen &Move Ver&schieben &Size Größe ä&ndern Mi&nimize M&inimieren Ma&ximize Ma&ximieren Stay on &Top Im &Vordergrund bleiben &Close Schl&ießen Maximize Maximieren Unshade Herabrollen Shade Aufrollen Restore Wiederherstellen Help Hilfe Menu Menü - [%1] - [%1] QMenu Close Schließen Open Öffnen Execute Ausführen QMessageBox OK OK About Qt Über Qt Help Hilfe <p>This program uses Qt version %1.</p> <p>Dieses Programm verwendet Qt-Version %1.</p> Show Details... Details einblenden... Hide Details... Details ausblenden... <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://qtsoftware.com/qt/">qtsoftware.com/qt/</a> for more information.</p> <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qtsoftware.com/company/model/">qtsoftware.com/company/model/</a> for an overview of Qt licensing.</p> QMultiInputContext Select IM Eingabemethode auswählen QMultiInputContextPlugin Multiple input method switcher Umschalter für Eingabemethoden Multiple input method switcher that uses the context menu of the text widgets Mehrfachumschalter für Eingabemethoden, der das Kontextmenü des Text-Widgets verwendet QNativeSocketEngine The remote host closed the connection Der entfernte Rechner hat die Verbindung geschlossen Network operation timed out Das Zeitlimit für die Operation wurde überschritten Out of resources Keine Resourcen verfügbar Unsupported socket operation Nichtunterstütztes Socket-Kommando Protocol type not supported Das Protokoll wird nicht unterstützt Invalid socket descriptor Ungültiger Socket-Deskriptor Network unreachable Das Netzwerk ist nicht erreichbar Permission denied Zugriff verweigert Connection timed out Das Zeitlimit für die Verbindung wurde überschritten Connection refused Verbindung verweigert The bound address is already in use Die angegebene Adresse ist bereits in Gebrauch The address is not available Die Adresse ist nicht verfügbar The address is protected Die Adresse ist geschützt Unable to send a message Die Nachricht konnte nicht gesendet werden Unable to receive a message Die Nachricht konnte nicht empfangen werden Unable to write Der Schreibvorgang konnte nicht ausgeführt werden Network error Netzwerkfehler Another socket is already listening on the same port Auf diesem Port hört bereits ein anderer Socket Unable to initialize non-blocking socket Der nichtblockierende Socket konnte nicht initialisiert werden Unable to initialize broadcast socket Der Broadcast-Socket konnte nicht initialisiert werden Attempt to use IPv6 socket on a platform with no IPv6 support Es wurde versucht, einen IPv6-Socket auf einem System ohne IPv6-Unterstützung zu verwenden Host unreachable Der Zielrechner kann nicht erreicht werden Datagram was too large to send Das Datagram konnte nicht gesendet werden, weil es zu groß ist Operation on non-socket Operation kann nur auf einen Socket angewandt werden Unknown error Unbekannter Fehler The proxy type is invalid for this operation Die Operation kann mit dem Proxy-Typ nicht durchgeführt werden QNetworkAccessCacheBackend Error opening %1 %1 konnte nicht geöffnet werden QNetworkAccessFileBackend Request for opening non-local file %1 Anforderung zum Öffnen einer Datei über Netzwerk %1 Error opening %1: %2 %1 konnte nicht geöffnet werden: %2 Write error writing to %1: %2 Fehler beim Schreiben zur Datei %1: %2 Cannot open %1: Path is a directory %1 kann nicht geöffnet werden: Der Pfad spezifiziert ein Verzeichnis Read error reading from %1: %2 Beim Lesen von der Datei %1 trat ein Fehler auf: %2 QNetworkAccessFtpBackend No suitable proxy found Es konnte kein geeigneter Proxy-Server gefunden werden Cannot open %1: is a directory %1 kann nicht geöffnet werden: Es handelt sich um ein Verzeichnis Logging in to %1 failed: authentication required Die Anmeldung bei %1 schlug fehl: Es ist eine Authentifizierung erforderlich Error while downloading %1: %2 Beim Herunterladen von %1 trat ein Fehler auf: %2 Error while uploading %1: %2 Beim Hochladen von %1 trat ein Fehler auf: %2 QNetworkAccessHttpBackend No suitable proxy found Es konnte kein geeigneter Proxy-Server gefunden werden QNetworkReply Error downloading %1 - server replied: %2 Beim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2 Protocol "%1" is unknown Das Protokoll "%1" ist unbekannt QNetworkReplyImpl Operation canceled Operation abgebrochen QOCIDriver Unable to logon Logon-Vorgang fehlgeschlagen Unable to initialize QOCIDriver Initialisierung fehlgeschlagen Unable to begin transaction Es konnte keine Transaktion gestartet werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Unable to rollback transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) QOCIResult Unable to bind column for batch execute Die Spalte konnte nicht für den Stapelverarbeitungs-Befehl gebunden werden Unable to execute batch statement Der Stapelverarbeitungs-Befehl konnte nicht ausgeführt werden Unable to goto next Kann nicht zum nächsten Element gehen Unable to alloc statement Die Allokation des Befehls schlug fehl Unable to prepare statement Der Befehl konnte nicht initialisiert werden Unable to bind value Der Wert konnte nicht gebunden werden Unable to execute select statement Die 'select'-Abfrage konnte nicht ausgeführt werden Unable to execute statement Der Befehl konnte nicht ausgeführt werden QODBCDriver Unable to connect Es kann keine Verbindung aufgebaut werden Unable to connect - Driver doesn't support all needed functionality Es kann keine Verbindung aufgebaut werden weil der Treiber die benötigte Funktionalität nicht vollständig unterstützt Unable to disable autocommit 'autocommit' konnte nicht deaktiviert werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Unable to rollback transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) Unable to enable autocommit 'autocommit' konnte nicht aktiviert werden QODBCResult QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult::reset: 'SQL_CURSOR_STATIC' konnte nicht als Attribut des Befehls gesetzt werden. Bitte prüfen Sie die Konfiguration Ihres ODBC-Treibers Unable to execute statement Der Befehl konnte nicht ausgeführt werden Unable to fetch next Der nächste Datensatz konnte nicht abgeholt werden Unable to prepare statement Der Befehl konnte nicht initialisiert werden Unable to bind variable Die Variable konnte nicht gebunden werden Unable to fetch last Der letzte Datensatz konnte nicht abgeholt werden Unable to fetch Es konnten keine Daten abgeholt werden Unable to fetch first Der erste Datensatz konnte nicht abgeholt werden Unable to fetch previous Der vorangegangene Datensatz kann nicht abgeholt werden QObject Home Pos1 Operation not supported on %1 Diese Operation wird von %1 nicht unterstützt Invalid URI: %1 Ungültiger URI: %1 Write error writing to %1: %2 Fehler beim Schreiben zur Datei %1: %2 Read error reading from %1: %2 Beim Lesen von der Datei %1 trat ein Fehler auf: %2 Socket error on %1: %2 Socketfehler bei %1: %2 Remote host closed the connection prematurely on %1 Der entfernte Rechner hat die Verbindung zu %1 vorzeitig beendet Protocol error: packet of size 0 received Protokollfehler: Ein leeres Datenpaket wurde empfangen No host name given Es wurde kein Hostname angegeben QPPDOptionsModel Name Name Value Wert QPSQLDriver Unable to connect Es kann keine Verbindung aufgebaut werden Could not begin transaction Es konnte keine Transaktion gestartet werden Could not commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Could not rollback transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) Unable to subscribe Die Registrierung schlug fehl Unable to unsubscribe Die Registrierung konnte nicht aufgehoben werden QPSQLResult Unable to create query Es konnte keine Abfrage erzeugt werden Unable to prepare statement Der Befehl konnte nicht initialisiert werden QPageSetupWidget Centimeters (cm) Zentimeter (cm) Millimeters (mm) Millimeter (mm) Inches (in) Zoll (in) Points (pt) Punkte (pt) Form Formular Paper Papier Page size: Seitengröße: Width: Breite: Height: Höhe: Paper source: Papierquelle: Orientation Ausrichtung Portrait Hochformat Landscape Querformat Reverse landscape Umgekehrtes Querformat Reverse portrait Umgekehrtes Hochformat Margins Ränder top margin Oberer Rand left margin Linker Rand right margin Rechter Rand bottom margin Unterer Rand QPluginLoader Unknown error Unbekannter Fehler The plugin was not loaded. Das Plugin wurde nicht geladen. QPrintDialog locally connected direkt verbunden Aliases: %1 Alias: %1 unknown unbekannt OK OK Print all Alles drucken Print range Bereich drucken A0 (841 x 1189 mm) A0 (841 x 1189 mm) A1 (594 x 841 mm) A1 (594 x 841 mm) A2 (420 x 594 mm) A2 (420 x 594 mm) A3 (297 x 420 mm) A3 (297 x 420 mm) A5 (148 x 210 mm) A5 (148 x 210 mm) A6 (105 x 148 mm) A6 (105 x 148 mm) A7 (74 x 105 mm) A7 (74 x 105 mm) A8 (52 x 74 mm) A8 (52 x 74 mm) A9 (37 x 52 mm) A9 (37 x 52 mm) B0 (1000 x 1414 mm) B0 (1000 x 1414 mm) B1 (707 x 1000 mm) B1 (707 x 1000 mm) B2 (500 x 707 mm) B2 (500 x 707 mm) B3 (353 x 500 mm) B3 (353 x 500 mm) B4 (250 x 353 mm) B4 (250 x 353 mm) B6 (125 x 176 mm) B6 (125 x 176 mm) B7 (88 x 125 mm) B7 (88 x 125 mm) B8 (62 x 88 mm) B8 (62 x 88 mm) B9 (44 x 62 mm) B9 (44 x 62 mm) B10 (31 x 44 mm) B10 (31 x 44 mm) C5E (163 x 229 mm) C5E (163 x 229 mm) DLE (110 x 220 mm) DLE (110 x 220 mm) Folio (210 x 330 mm) Folio (210 x 330 mm) Ledger (432 x 279 mm) Ledger (432 x 279 mm) Tabloid (279 x 432 mm) Tabloid (279 x 432 mm) US Common #10 Envelope (105 x 241 mm) US Common #10 Envelope (105 x 241 mm) A4 (210 x 297 mm, 8.26 x 11.7 inches) A4 (210 x 297 mm) B5 (176 x 250 mm, 6.93 x 9.84 inches) B5 (176 x 250 mm) Executive (7.5 x 10 inches, 191 x 254 mm) Executive (7,5 x 10 Zoll, 191 x 254 mm) Legal (8.5 x 14 inches, 216 x 356 mm) Legal (8,5 x 14 Zoll, 216 x 356 mm) Letter (8.5 x 11 inches, 216 x 279 mm) Letter (8,5 x 11 Zoll, 216 x 279 mm) Print selection Auswahl drucken Print Drucken Print To File ... In Datei drucken File %1 is not writable. Please choose a different file name. Die Datei %1 ist schreibgeschützt. Bitte wählen Sie einen anderen Dateinamen. %1 already exists. Do you want to overwrite it? Die Datei %1 existiert bereits. Soll sie überschrieben werden? File exists Die Datei existiert bereits <qt>Do you want to overwrite it?</qt> <qt>Soll sie überschrieben werden?</qt> %1 is a directory. Please choose a different file name. %1 ist ein Verzeichnis. Bitte wählen Sie einen anderen Dateinamen. The 'From' value cannot be greater than the 'To' value. Die Angabe für die erste Seite darf nicht größer sein als die für die letzte Seite. A0 A0 A1 A1 A2 A2 A3 A3 A4 A4 A5 A5 A6 A6 A7 A7 A8 A8 A9 A9 B0 B0 B1 B1 B2 B2 B3 B3 B4 B4 B5 B5 B6 B6 B7 B7 B8 B8 B9 B9 B10 B10 C5E C5E DLE DLE Executive Executive Folio Folio Ledger Ledger Legal Legal Letter Letter Tabloid Tabloid US Common #10 Envelope US Common #10 Envelope Custom Benutzerdefiniert &Options >> &Einstellungen >> &Options << &Einstellungen << Print to File (PDF) Druck in PDF-Datei Print to File (Postscript) Druck in Postscript-Datei Local file Lokale Datei Write %1 file Schreiben der Datei %1 &Print &Drucken QPrintPreviewDialog %1% %1% Print Preview Druckvorschau Next page Nächste Seite Previous page Vorige Seite First page Erste Seite Last page Letzte Seite Fit width Breite anpassen Fit page Seite anpassen Zoom in Vergrößern Zoom out Verkleinern Portrait Hochformat Landscape Querformat Show single page Einzelne Seite anzeigen Show facing pages Gegenüberliegende Seiten anzeigen Show overview of all pages Übersicht aller Seiten Print Drucken Page setup Seite einrichten Close Schließen Export to PDF PDF exportieren Export to PostScript PostScript exportieren Page Setup Seite einrichten QPrintPropertiesWidget Form Formular Page Seite Advanced Erweitert QPrintSettingsOutput Form Formular Copies Anzahl Exemplare Print range Bereich drucken Print all Alles drucken Pages from Seiten von to bis Selection Auswahl Output Settings Ausgabeeinstellungen Copies: Anzahl Exemplare: Collate Sortieren Reverse Umgekehrt Options Optionen Color Mode Farbmodus Color Farbe Grayscale Graustufen Duplex Printing Duplexdruck None Kein Long side Lange Seite Short side Kurze Seite QPrintWidget Form Formular Printer Drucker &Name: &Name: P&roperties &Eigenschaften Location: Standort: Preview Vorschau Type: Typ: Output &file: Ausgabe&datei: ... ... QProcess Could not open input redirection for reading Die Eingabeumleitung konnte nicht zum Lesen geöffnet werden Could not open output redirection for writing Die Ausgabeumleitung konnte nicht zum Lesen geöffnet werden Resource error (fork failure): %1 Ressourcenproblem ("fork failure"): %1 Process operation timed out Zeitüberschreitung Error reading from process Das Lesen vom Prozess schlug fehl Error writing to process Das Schreiben zum Prozess schlug fehl Process crashed Der Prozess ist abgestürzt Process failed to start Das Starten des Prozesses schlug fehl QProgressDialog Cancel Abbrechen QPushButton Open Öffnen QRadioButton Check Ankreuzen QRegExp no error occurred kein Fehler disabled feature used deaktivierte Eigenschaft wurde benutzt bad char class syntax falsche Syntax für Zeichenklasse bad lookahead syntax falsche Syntax für Lookahead bad repetition syntax falsche Syntax für Wiederholungen invalid octal value ungültiger Oktal-Wert missing left delim fehlende linke Begrenzung unexpected end unerwartetes Ende met internal limit internes Limit erreicht QSQLite2Driver Error to open database Die Datenbankverbindung konnte nicht geöffnet werden Unable to begin transaction Es konnte keine Transaktion gestartet werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Unable to rollback Transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) QSQLite2Result Unable to fetch results Das Ergebnis konnte nicht abgeholt werden Unable to execute statement Der Befehl konnte nicht ausgeführt werden QSQLiteDriver Error opening database Die Datenbankverbindung konnte nicht geöffnet werden Error closing database Die Datenbankverbindung konnte nicht geschlossen werden Unable to begin transaction Es konnte keine Transaktion gestartet werden Unable to commit transaction Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen) Unable to rollback transaction Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen) QSQLiteResult Unable to fetch row Der Datensatz konnte nicht abgeholt werden Unable to execute statement Der Befehl konnte nicht ausgeführt werden Unable to reset statement Der Befehl konnte nicht zurückgesetzt werden Unable to bind parameters Die Parameter konnte nicht gebunden werden Parameter count mismatch Die Anzahl der Parameter ist falsch No query Kein Abfrage QScrollBar Scroll here Hierher scrollen Left edge Linker Rand Top Anfang Right edge Rechter Rand Bottom Ende Page left Eine Seite nach links Page up Eine Seite nach oben Page right Eine Seite nach rechts Page down Eine Seite nach unten Scroll left Nach links scrollen Scroll up Nach oben scrollen Scroll right Nach rechts scrollen Scroll down Nach unten scrollen Line up Ausrichten Position Position Line down Eine Zeile nach unten QSharedMemory %1: create size is less then 0 %1: Die Größenangabe für die Erzeugung ist kleiner als Null %1: unable to lock %1: Sperrung fehlgeschlagen %1: unable to unlock %1: Die Sperrung konnte nicht aufgehoben werden %1: permission denied %1: Zugriff verweigert %1: already exists %1: existiert bereits %1: doesn't exists %1: existiert nicht %1: out of resources %1: Keine Ressourcen mehr verfügbar %1: unknown error %2 %1: Unbekannter Fehler %2 %1: key is empty %1: Ungültige Schlüsselangabe (leer) %1: unix key file doesn't exists %1: Die Unix-Schlüsseldatei existiert nicht %1: ftok failed %1: ftok-Aufruf schlug fehl %1: unable to make key %1: Es kann kein Schlüssel erzeugt werden %1: system-imposed size restrictions %1: Ein systembedingtes Limit der Größe wurde erreicht %1: not attached %1: nicht verbunden %1: invalid size %1: Ungültige Größe %1: key error %1: Fehlerhafter Schlüssel %1: size query failed %1: Die Abfrage der Größe schlug fehl %1: unable to set key on lock %1: Es kann kein Schlüssel für die Sperrung gesetzt werden QShortcut Space Leertaste Esc Esc Tab Tab Backtab Rück-Tab Backspace Rücktaste Return Return Enter Enter Ins Einfg Del Entf Pause Pause Print Druck SysReq SysReq Home Pos1 End Ende Left Links Up Hoch Right Rechts Down Runter PgUp Bild aufwärts PgDown Bild abwärts CapsLock Feststelltaste NumLock Zahlen-Feststelltaste ScrollLock Rollen-Feststelltaste Menu Menü Help Hilfe Back Zurück Forward Vorwärts Stop Abbrechen Refresh Aktualisieren Volume Down Lautstärke - Volume Mute Ton aus Volume Up Lautstärke + Bass Boost Bass-Boost Bass Up Bass + Bass Down Bass - Treble Up Höhen + Treble Down Höhen - Media Play Wiedergabe Media Stop Stopp Media Previous Vorheriger Media Next Nächster Media Record Aufzeichnen Favorites Favoriten Search Suchen Standby Standby Open URL Öffne URL Launch Mail Start Mail Launch Media Start Media Player Launch (0) Start (0) Launch (1) Start (1) Launch (2) Start (2) Launch (3) Start (3) Launch (4) Start (4) Launch (5) Start (5) Launch (6) Start (6) Launch (7) Start (7) Launch (8) Start (8) Launch (9) Start (9) Launch (A) Start (A) Launch (B) Start (B) Launch (C) Start (C) Launch (D) Start (D) Launch (E) Start (E) Launch (F) Start (F) Print Screen Bildschirm drucken Page Up Bild aufwärts Page Down Bild abwärts Caps Lock Feststelltaste Num Lock Zahlen-Feststelltaste Number Lock Zahlen-Feststelltaste Scroll Lock Rollen-Feststelltaste Insert Einfügen Delete Löschen Escape Escape System Request System Request Select Auswählen Yes Ja No Nein Context1 Kontext1 Context2 Kontext2 Context3 Kontext3 Context4 Kontext4 Call Anruf Hangup Auflegen Flip Umdrehen Ctrl Strg Shift Umschalt Alt Alt Meta Meta + + F%1 F%1 Home Page Startseite QSlider Page left Eine Seite nach links Page up Eine Seite nach oben Position Position Page right Eine Seite nach rechts Page down Eine Seite nach unten QSocks5SocketEngine Connection to proxy refused Der Proxy-Server hat den Aufbau einer Verbindung verweigert Connection to proxy closed prematurely Der Proxy-Server hat die Verbindung vorzeitig beendet Proxy host not found Der Proxy-Server konnte nicht gefunden werden Connection to proxy timed out Bei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit überschritten Proxy authentication failed Die Authentifizierung beim Proxy-Server schlug fehl Proxy authentication failed: %1 Die Authentifizierung beim Proxy-Server schlug fehl: %1 SOCKS version 5 protocol error Protokoll-Fehler (SOCKS version 5) General SOCKSv5 server failure Allgemeiner Fehler bei der Kommunikation mit dem SOCKSv5-Server Connection not allowed by SOCKSv5 server Der SOCKSv5-Server hat die Verbindung verweigert TTL expired TTL verstrichen SOCKSv5 command not supported Dieses SOCKSv5-Kommando wird nicht unterstützt Address type not supported Dieser Adresstyp wird nicht unterstützt Unknown SOCKSv5 proxy error code 0x%1 Unbekannten Fehlercode vom SOCKSv5-Proxy-Server erhalten: 0x%1 Network operation timed out Das Zeitlimit für die Operation wurde überschritten QSpinBox More Mehr Less Weniger QSql Delete Löschen Delete this record? Diesen Datensatz löschen? Yes Ja No Nein Insert Einfügen Update Aktualisieren Save edits? Änderungen speichern? Cancel Abbrechen Confirm Bestätigen Cancel your edits? Änderungen verwerfen? QSslSocket Unable to write data: %1 Die Daten konnten nicht geschrieben werden: %1 Error while reading: %1 Beim Lesen trat ein Fehler auf: %1 Error during SSL handshake: %1 Es trat ein Fehler im Ablauf des SSL-Protokolls auf: %1 Error creating SSL context (%1) Es konnte keine SSL-Kontextstruktur erzeugt werden (%1) Invalid or empty cipher list (%1) Ungültige oder leere Schlüsselliste (%1) Error creating SSL session, %1 Es konnte keine SSL-Sitzung erzeugt werden, %1 Error creating SSL session: %1 Es konnte keine SSL-Sitzung erzeugt werden: %1 Cannot provide a certificate with no key, %1 Ohne Schlüssel kann kein Zertifikat zur Verfügung gestellt werden, %1 Error loading local certificate, %1 Das lokale Zertifikat konnte nicht geladen werden, %1 Error loading private key, %1 Der private Schlüssel konnte nicht geladen werden, %1 Private key does not certificate public key, %1 Die Zertifizierung des öffentlichen Schlüssels durch den privaten Schlüssel schlug fehl, %1 QSystemSemaphore %1: does not exist %1: Nicht existent %1: out of resources %1: Keine Ressourcen mehr verfügbar %1: permission denied %1: Zugriff verweigert %1: already exists %1: existiert bereits %1: unknown error %2 %1: Unbekannter Fehler %2 QTDSDriver Unable to open connection Die Datenbankverbindung konnte nicht geöffnet werden Unable to use database Die Datenbank kann nicht verwendet werden QTabBar Scroll Left Nach links scrollen Scroll Right Nach rechts scrollen QTcpServer Operation on socket is not supported Diese Socketoperation wird nicht unterstützt QTextControl &Undo &Rückgängig &Redo Wieder&herstellen Cu&t &Ausschneiden &Copy &Kopieren Copy &Link Location &Link-Adresse kopieren &Paste Einf&ügen Delete Löschen Select All Alles auswählen QToolButton Press Drücken Open Öffnen QUdpSocket This platform does not support IPv6 Diese Plattform unterstützt kein IPv6 QUndoGroup Undo Rückgängig Redo Wiederherstellen QUndoModel <empty> <leer> QUndoStack Undo Rückgängig Redo Wiederherstellen QUnicodeControlCharacterMenu LRM Left-to-right mark LRM Left-to-right mark RLM Right-to-left mark RLM Right-to-left mark ZWJ Zero width joiner ZWJ Zero width joiner ZWNJ Zero width non-joiner ZWNJ Zero width non-joiner ZWSP Zero width space ZWSP Zero width space LRE Start of left-to-right embedding LRE Start of left-to-right embedding RLE Start of right-to-left embedding RLE Start of right-to-left embedding LRO Start of left-to-right override LRO Start of left-to-right override RLO Start of right-to-left override RLO Start of right-to-left override PDF Pop directional formatting PDF Pop directional formatting Insert Unicode control character Unicode-Kontrollzeichen einfügen QWebFrame Request cancelled Anfrage wurde abgebrochen Request blocked Anfrage wurde abgewiesen Cannot show URL Der URL kann nicht angezeigt werden Frame load interruped by policy change Das Laden des Rahmens wurde durch eine Änderung der Richtlinien unterbrochen Cannot show mimetype Dieser Mime-Typ kann nicht angezeigt werden File does not exist Die Datei existiert nicht QWebPage Submit default label for Submit buttons in forms on web pages Senden Submit Submit (input element) alt text for <input> elements with no alt, title, or value Senden Reset default label for Reset buttons in forms on web pages Rücksetzen Choose File title for file button used in HTML forms Durchsuchen No file selected text to display in file button used in HTML forms when no file is selected Es ist keine Datei ausgewählt Open in New Window Open in New Window context menu item In neuem Fenster öffnen Save Link... Download Linked File context menu item Ziel speichern unter... Copy Link Copy Link context menu item Link-Adresse kopieren Open Image Open Image in New Window context menu item Grafik in neuem Fenster öffnen Save Image Download Image context menu item Grafik speichern unter Copy Image Copy Link context menu item Grafik kopieren Open Frame Open Frame in New Window context menu item Frame öffnen Copy Copy context menu item Kopieren Go Back Back context menu item Zurück Go Forward Forward context menu item Vor Stop Stop context menu item Abbrechen Reload Reload context menu item Neu laden Cut Cut context menu item Ausschneiden Paste Paste context menu item Einfügen No Guesses Found No Guesses Found context menu item Keine Vorschläge gefunden Ignore Ignore Spelling context menu item Ignorieren Add To Dictionary Learn Spelling context menu item In Wörterbuch aufnehmen Search The Web Search The Web context menu item Im Web suchen Look Up In Dictionary Look Up in Dictionary context menu item Im Wörterbuch nachschauen Open Link Open Link context menu item Adresse öffnen Ignore Ignore Grammar context menu item Ignorieren Spelling Spelling and Grammar context sub-menu item Rechtschreibung Show Spelling and Grammar menu item title Rechtschreibung und Grammatik anzeigen Hide Spelling and Grammar menu item title Rechtschreibung und Grammatik nicht anzeigen Check Spelling Check spelling context menu item Rechtschreibung prüfen Check Spelling While Typing Check spelling while typing context menu item Rechtschreibung während des Schreibens überprüfen Check Grammar With Spelling Check grammar with spelling context menu item Grammatik mit Rechtschreibung zusammen überprüfen Fonts Font context sub-menu item Fonts Bold Bold context menu item Fett Italic Italic context menu item Kursiv Underline Underline context menu item Unterstrichen Outline Outline context menu item Umriss Direction Writing direction context sub-menu item Schreibrichtung Text Direction Text direction context sub-menu item Schreibrichtung Default Default writing direction context menu item Vorgabe LTR Left to Right context menu item Von links nach rechts RTL Right to Left context menu item Von rechts nach links Inspect Inspect Element context menu item Prüfen No recent searches Label for only item in menu that appears when clicking on the search field image, when no searches have been performed Es existieren noch keine Suchanfragen Recent searches label for first item in the menu that appears when clicking on the search field image, used as embedded menu title Bisherige Suchanfragen Clear recent searches menu item in Recent Searches menu that empties menu's contents Gespeicherte Suchanfragen löschen Unknown Unknown filesize FTP directory listing item Unbekannt Web Inspector - %2 Web Inspector - %2 %1 (%2x%3 pixels) Title string for images %1 (%2x%3 Pixel) Bad HTTP request Ungültige HTTP-Anforderung This is a searchable index. Enter search keywords: text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' Dieser Index verfügt über eine Suchfunktion. Geben Sie einen Suchbegriff ein: Scroll here Hierher scrollen Left edge Linker Rand Top Anfang Right edge Rechter Rand Bottom Ende Page left Eine Seite nach links Page up Eine Seite nach oben Page right Eine Seite nach rechts Page down Eine Seite nach unten Scroll left Nach links scrollen Scroll up Nach oben scrollen Scroll right Nach rechts scrollen Scroll down Nach unten scrollen %n file(s) number of chosen file Eine Datei %n Dateien JavaScript Alert - %1 JavaScript Confirm - %1 JavaScript Prompt - %1 Move the cursor to the next character Positionsmarke auf folgendes Zeichen setzen Move the cursor to the previous character Positionsmarke auf vorangehendes Zeichen setzen Move the cursor to the next word Positionsmarke auf folgendes Wort setzen Move the cursor to the previous word Positionsmarke auf vorangehendes Wort setzen Move the cursor to the next line Positionsmarke auf folgende Zeile setzen Move the cursor to the previous line Positionsmarke auf vorangehende Zeile setzen Move the cursor to the start of the line Positionsmarke auf Zeilenanfang setzen Move the cursor to the end of the line Positionsmarke auf Zeilenende setzen Move the cursor to the start of the block Positionsmarke auf Anfang des Blocks setzen Move the cursor to the end of the block Positionsmarke auf Ende des Blocks setzen Move the cursor to the start of the document Positionsmarke auf Anfang des Dokumentes setzen Move the cursor to the end of the document Positionsmarke auf Ende des Dokumentes setzen Select to the next character Bis zum folgenden Zeichen markieren Select to the previous character Bis zum vorangehenden Zeichen markieren Select to the next word Bis zum folgenden Wort markieren Select to the previous word Bis zum vorangehenden Wort markieren Select to the next line Bis zur folgenden Zeile markieren Select to the previous line Bis zur vorangehenden Zeile markieren Select to the start of the line Bis zum Zeilenanfang markieren Select to the end of the line Bis zum Zeilenende markieren Select to the start of the block Bis zum Anfang des Blocks markieren Select to the end of the block Bis zum Ende des Blocks markieren Select to the start of the document Bis zum Anfang des Dokuments markieren Select to the end of the document Bis zum Ende des Dokuments markieren Delete to the start of the word Bis zum Anfang des Wortes löschen Delete to the end of the word Bis zum Ende des Wortes löschen QWhatsThisAction What's This? Direkthilfe QWidget * * QWizard Cancel Abbrechen Help Hilfe < &Back < &Zurück &Finish Ab&schließen &Help &Hilfe Go Back Zurück Continue Weiter Commit Anwenden Done Fertig &Next &Weiter &Next > &Weiter > QWorkspace &Restore Wieder&herstellen &Move Ver&schieben &Size &Größe ändern Mi&nimize M&inimieren Ma&ximize Ma&ximieren &Close Schl&ießen Stay on &Top Im &Vordergrund bleiben Minimize Minimieren Restore Down Wiederherstellen Close Schließen Sh&ade &Aufrollen %1 - [%2] %1 - [%2] &Unshade &Herabrollen QXml no error occurred kein Fehler error triggered by consumer Konsument löste Fehler aus unexpected end of file unerwartetes Ende der Datei more than one document type definition mehrere Dokumenttypdefinitionen error occurred while parsing element Fehler beim Parsen eines Elements tag mismatch Element-Tags sind nicht richtig geschachtelt error occurred while parsing content Fehler beim Parsen des Inhalts eines Elements unexpected character unerwartetes Zeichen invalid name for processing instruction kein gültiger Name für eine Processing-Instruktion version expected while reading the XML declaration fehlende Version beim Parsen der XML-Deklaration wrong value for standalone declaration falscher Wert für die Standalone-Deklaration error occurred while parsing document type definition Fehler beim Parsen der Dokumenttypdefinition letter is expected ein Buchstabe ist an dieser Stelle erforderlich error occurred while parsing comment Fehler beim Parsen eines Kommentars error occurred while parsing reference Fehler beim Parsen einer Referenz internal general entity reference not allowed in DTD in einer DTD ist keine interne allgemeine Entity-Referenz erlaubt external parsed general entity reference not allowed in attribute value in einem Attribut-Wert sind keine externen Entity-Referenzen erlaubt external parsed general entity reference not allowed in DTD in der DTD sind keine externen Entity-Referenzen erlaubt unparsed entity reference in wrong context nicht-analysierte Entity-Referenz im falschen Kontext verwendet recursive entities rekursive Entity error in the text declaration of an external entity Fehler in der Text-Deklaration einer externen Entity encoding declaration or standalone declaration expected while reading the XML declaration fehlende Encoding-Deklaration oder Standalone-Deklaration beim Parsen der XML-Deklaration standalone declaration expected while reading the XML declaration fehlende Standalone-Deklaration beim Parsen der XML Deklaration QXmlStream Extra content at end of document. Überzähliger Inhalt nach Ende des Dokumentes. Invalid entity value. Ungültiger Entity-Wert. Invalid XML character. Ungültiges XML-Zeichen. Sequence ']]>' not allowed in content. Im Inhalt ist die Zeichenfolge ']]>' nicht erlaubt. Namespace prefix '%1' not declared Der Namensraum-Präfix '%1' wurde nicht deklariert Attribute redefined. Redefinition eines Attributes. Unexpected character '%1' in public id literal. '%1' ist kein gültiges Zeichen in einer public-id-Angabe. Invalid XML version string. Ungültige XML-Versionsangabe. Unsupported XML version. Diese XML-Version wird nicht unterstützt. %1 is an invalid encoding name. %1 ist kein gültiger Name für das Encoding. Encoding %1 is unsupported Das Encoding %1 wird nicht unterstützt Standalone accepts only yes or no. Der Wert für das 'Standalone'-Attribut kann nur 'yes' oder 'no' sein. Invalid attribute in XML declaration. Die XML-Deklaration enthält ein ungültiges Attribut. Premature end of document. Vorzeitiges Ende des Dokuments. Invalid document. Ungültiges Dokument. Expected Es wurde , but got ' erwartet, stattdessen erhalten ' Unexpected ' Ungültig an dieser Stelle ' Expected character data. Es wurden Zeichendaten erwartet. Recursive entity detected. Es wurde eine rekursive Entity festgestellt. Start tag expected. Öffnendes Element erwartet. XML declaration not at start of document. Die XML-Deklaration befindet sich nicht am Anfang des Dokuments. NDATA in parameter entity declaration. Eine Parameter-Entity-Deklaration darf kein NDATA enthalten. %1 is an invalid processing instruction name. %1 ist kein gültiger Name für eine Prozessing-Instruktion. Invalid processing instruction name. Der Name der Prozessing-Instruktion ist ungültig. Illegal namespace declaration. Ungültige Namensraum-Deklaration. Invalid XML name. Ungültiger XML-Name. Opening and ending tag mismatch. Die Anzahl der öffnenden Elemente stimmt nicht mit der Anzahl der schließenden Elemente überein. Reference to unparsed entity '%1'. Es wurde die ungeparste Entity '%1' referenziert. Entity '%1' not declared. Die Entity '%1' ist nicht deklariert. Reference to external entity '%1' in attribute value. Im Attributwert wurde die externe Entity '%1' referenziert. Invalid character reference. Ungültige Zeichenreferenz. Encountered incorrectly encoded content. Es wurde Inhalt mit einer ungültigen Kodierung gefunden. The standalone pseudo attribute must appear after the encoding. Das Standalone-Pseudoattribut muss dem Encoding unmittelbar folgen. %1 is an invalid PUBLIC identifier. %1 ist keine gültige Angabe für eine PUBLIC-Id. QtXmlPatterns At least one component must be present. Es muss mindestens eine Komponente vorhanden sein. No operand in an integer division, %1, can be %2. Bei der Ganzzahldivision %1 darf kein Operand %2 sein. %1 is not a valid value of type %2. %1 ist kein gültiger Wert des Typs %2. When casting to %1 from %2, the source value cannot be %3. Bei einer "cast"-Operation von %1 zu %2 darf der Wert nicht %3 sein. Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. Der effektive Boolesche Wert einer Sequenz aus zwei oder mehreren atomaren Werten kann nicht berechnet werden. Operator %1 is not available between atomic values of type %2 and %3. Der Operator %1 kann auf atomare Werte der Typen %2 und %3 nicht angewandt werden. It is not possible to cast from %1 to %2. Es kann keine "cast"-Operation von %1 zu %2 durchgeführt werden. Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. Es können keine "cast"-Operationen zu dem Typ %1 durchgeführt werden, da es ein abstrakter Typ ist und nicht instanziiert werden kann. It's not possible to cast the value %1 of type %2 to %3 Es kann keine "cast"-Operation vom Wert %1 des Typs %2 zu %3 durchgeführt werden Failure when casting from %1 to %2: %3 Die "cast"-Operation von %1 zu %2 schlug fehl: %3 No comparisons can be done involving the type %1. Mit dem Typ %1 können keine Vergleichsoperationen durchgeführt werden. The data of a processing instruction cannot contain the string %1 Die Daten einer Processing-Anweisung dürfen nicht die Zeichenkette %1 enthalten %1 is an invalid %2 %1 ist kein gültiges %2 %1 is not a valid XML 1.0 character. %1 ist kein gültiges XML 1.0 Zeichen. The first argument to %1 cannot be of type %2. Das erste Argument von %1 kann nicht vom Typ %2 sein. %1 was called. %1 wurde gerufen. In the replacement string, %1 must be followed by at least one digit when not escaped. In der Ersetzung muss auf %1 eine Ziffer folgen, wenn es nicht durch ein Escape-Zeichen geschützt ist. In the replacement string, %1 can only be used to escape itself or %2, not %3 In der Ersetzung kann %1 nur verwendet werden, um sich selbst oder %2 schützen, nicht jedoch für %3 %1 matches newline characters Der Ausdruck '%1' schließt Zeilenvorschübe ein Matches are case insensitive Groß/Kleinschreibung wird nicht beachtet %1 is an invalid regular expression pattern: %2 %1 ist kein gültiger regulärer Ausdruck: %2 It will not be possible to retrieve %1. %1 kann nicht bestimmt werden. The default collection is undefined Für eine Kollektion ist keine Vorgabe definiert %1 cannot be retrieved %1 kann nicht bestimmt werden The item %1 did not match the required type %2. Das Element %1 entspricht nicht dem erforderlichen Typ %2. %1 is an unknown schema type. %1 ist ein unbekannter Schema-Typ. Only one %1 declaration can occur in the query prolog. Der Anfrage-Prolog darf nur eine %1-Deklaration enthalten. The initialization of variable %1 depends on itself Die Initialisierung der Variable %1 hängt von ihrem eigenem Wert ab The variable %1 is unused Die Variable %1 wird nicht verwendet Version %1 is not supported. The supported XQuery version is 1.0. Die Version %1 wird nicht unterstützt. Die unterstützte Version von XQuery ist 1.0. No function with signature %1 is available Es existiert keine Funktion mit der Signatur %1 It is not possible to redeclare prefix %1. Der Präfix %1 kann nicht redeklariert werden. Prefix %1 is already declared in the prolog. Der Präfix %1 wurde bereits im Prolog deklariert. The name of an option must have a prefix. There is no default namespace for options. Der Name einer Option muss einen Präfix haben. Es gibt keine Namensraum-Vorgabe für Optionen. The Schema Import feature is not supported, and therefore %1 declarations cannot occur. Die Deklaration %1 ist unzulässig, da Schema-Import nicht unterstützt wird. The target namespace of a %1 cannot be empty. Der Ziel-Namensraum von %1 darf nicht leer sein. The module import feature is not supported Modul-Import wird nicht unterstützt No value is available for the external variable by name %1. Für die externe Variable des Namens %1 ist kein Wert verfügbar. The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 Der Namensraum einer nutzerdefinierten Funktion aus einem Bibliotheksmodul muss dem Namensraum des Moduls entsprechen (%1 anstatt %2) A function already exists with the signature %1. Es existiert bereits eine Funktion mit der Signatur %1. No external functions are supported. All supported functions can be used directly, without first declaring them as external Externe Funktionen werden nicht unterstützt. Alle unterstützten Funktionen können direkt verwendet werden, ohne sie als extern zu deklarieren An argument by name %1 has already been declared. Every argument name must be unique. Es existiert bereits ein Argument mit dem Namen %1. Die Namen der Argumente müssen eindeutig sein. The %1-axis is unsupported in XQuery Die %1-Achse wird in XQuery nicht unterstützt No variable by name %1 exists Es existiert keine Variable mit dem Namen %1 No function by name %1 is available. Es existiert keine Funktion mit dem Namen %1. The namespace URI cannot be the empty string when binding to a prefix, %1. Der Namensraum-URI darf nicht leer sein, wenn er an den Präfix %1 gebunden ist. %1 is an invalid namespace URI. %1 ist kein gültiger Namensraum-URI. It is not possible to bind to the prefix %1 Der Präfix %1 kann nicht gebunden werden Two namespace declaration attributes have the same name: %1. Es wurden zwei Namenraum-Deklarationsattribute gleichen Namens (%1) gefunden. The namespace URI must be a constant and cannot use enclosed expressions. Ein Namensraum-URI muss eine Konstante sein und darf keine eingebetteten Ausdrücke verwenden. An attribute by name %1 has already appeared on this element. Das Element hat bereits ein Attribut mit dem Namen %1. %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. %1 befindet sich nicht unter den Attributdeklarationen im Bereich. Schema-Import wird nicht unterstützt. empty leer zero or one kein oder ein exactly one genau ein one or more ein oder mehrere zero or more kein oder mehrere The focus is undefined. Es ist kein Fokus definiert. An attribute by name %1 has already been created. Es wurde bereits ein Attribut mit dem Namen %1 erzeugt. Network timeout. Das Zeitlimit der Netzwerkoperation wurde überschritten. Element %1 can't be serialized because it appears outside the document element. Das Element %1 kann nicht serialisiert werden, da es außerhalb des Dokumentenelements erscheint. Year %1 is invalid because it begins with %2. %1 ist keine gültige Jahresangabe, da es mit %2 beginnt. Day %1 is outside the range %2..%3. Die Tagesangabe %1 ist außerhalb des Bereiches %2..%3. Month %1 is outside the range %2..%3. Die Monatsangabe %1 ist außerhalb des Bereiches %2..%3. Overflow: Can't represent date %1. Das Datum %1 kann nicht dargestellt werden (Überlauf). Day %1 is invalid for month %2. Die Tagesangabe %1 ist für den Monat %2 ungültig. Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; Die Zeitangabe 24:%1:%2.%3 ist ungültig. Bei der Stundenangabe 24 müssen Minuten, Sekunden und Millisekunden 0 sein. Time %1:%2:%3.%4 is invalid. Die Zeitangabe %1:%2:%3.%4 ist ungültig. Overflow: Date can't be represented. Das Datum kann nicht dargestellt werden (Überlauf). At least one time component must appear after the %1-delimiter. Bei Vorhandensein eines %1-Begrenzers muss mindestens eine Komponente vorhanden sein. Dividing a value of type %1 by %2 (not-a-number) is not allowed. Die Division eines Werts des Typs %1 durch %2 (kein numerischer Wert) ist nicht zulässig. Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. Die Division eines Werts des Typs %1 durch %2 oder %3 (positiv oder negativ Null) ist nicht zulässig. Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. Die Multiplikation eines Werts des Typs %1 mit %2 oder %3 (positiv oder negativ unendlich) ist nicht zulässig. A value of type %1 cannot have an Effective Boolean Value. Ein Wert des Typs %1 kann keinen effektiven Booleschen Wert haben. Value %1 of type %2 exceeds maximum (%3). Der Wert %1 des Typs %2 überschreitet das Maximum (%3). Value %1 of type %2 is below minimum (%3). Der Wert %1 des Typs %2 unterschreitet das Minimum (%3). A value of type %1 must contain an even number of digits. The value %2 does not. Die Stellenzahl eines Wertes des Typs %1 muss geradzahlig sein. Das ist bei %2 nicht der Fall. %1 is not valid as a value of type %2. %1 ist kein gültiger Wert des Typs %2. Operator %1 cannot be used on type %2. Der Operator %1 kann nicht auf den Typ %2 angewandt werden. Operator %1 cannot be used on atomic values of type %2 and %3. Der Operator %1 kann nicht auf atomare Werte der Typen %2 und %3 angewandt werden. The namespace URI in the name for a computed attribute cannot be %1. Der Namensraum-URI im Namen eines berechneten Attributes darf nicht %1 sein The name for a computed attribute cannot have the namespace URI %1 with the local name %2. Der Name eines berechneten Attributes darf keinen Namensraum-URI %1 mit dem lokalen Namen %2 haben. Type error in cast, expected %1, received %2. Typfehler bei "cast"-Operation; es wurde %1 erwartet, aber %2 empfangen. When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. Bei einer "cast"-Operation zum Typ %1 oder abgeleitetenTypen muss der Quellwert ein Zeichenketten-Literal oder ein Wert gleichen Typs sein. Der Typ %2 ist ungültig. A comment cannot contain %1 Ein Kommentar darf nicht'%1 enthalten A comment cannot end with a %1. Ein Kommentar darf nicht auf %1 enden. An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. Ein Attributknoten darf nicht als Kind eines Dokumentknotens erscheinen. Es erschien ein Attributknoten mit dem Namen %1. A library module cannot be evaluated directly. It must be imported from a main module. Ein Bibliotheksmodul kann nicht direkt ausgewertet werden, er muss von einem Hauptmodul importiert werden. No template by name %1 exists. Es existiert keine Vorlage mit dem Namen %1. A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. Werte des Typs %1 dürfen keine Prädikate sein. Für Prädikate sind nur numerische oder effektiv Boolesche Typen zulässig. A positional predicate must evaluate to a single numeric value. Ein positionales Prädikat muss sich als einfacher, numerischer Wert auswerten lassen. %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. %1 ist kein gültiger Zielname einer Processing-Anweisung, es muss ein %2 Wert wie zum Beispiel %3 sein. The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. Der letzte Schritt eines Pfades kann entweder nur Knoten oder nur atomare Werte enthalten. Sie dürfen nicht zusammen auftreten. No namespace binding exists for the prefix %1 Es existiert keine Namensraum-Bindung für den Präfix %1 No namespace binding exists for the prefix %1 in %2 Es existiert keine Namensraum-Bindung für den Präfix %1 in %2 The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. Das erste Argument von %1 darf nicht vom Typ %2 sein; es muss numerisch, xs:yearMonthDuration oder xs:dayTimeDuration sein. The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. Das erste Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein. The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. Das zweite Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein. If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. Wenn beide Werte mit Zeitzonen angegeben werden, müssen diese übereinstimmen. %1 und %2 sind daher unzulässig. %1 must be followed by %2 or %3, not at the end of the replacement string. Auf %1 muss %2 oder %3 folgen; es kann nicht am Ende der Ersetzung erscheinen. %1 and %2 match the start and end of a line. Die Ausdrücke %1 und %2 passen jeweils auf den Anfang oder das Ende einer beliebigen Zeile. Whitespace characters are removed, except when they appear in character classes Leerzeichen werden entfernt, sofern sie nicht in Zeichenklassen erscheinen %1 is an invalid flag for regular expressions. Valid flags are: %1 ist kein gültiger Modifizierer für reguläre Ausdrücke. Gültige Modifizierer sind: If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. Es kann kein Präfix angegeben werden, wenn das erste Argument leer oder eine leere Zeichenkette (kein Namensraum) ist. Es wurde der Präfix %1 angegeben. The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). Die Normalisierungsform %1 wird nicht unterstützt. Die unterstützten Normalisierungsformen sind %2, %3, %4 and %5, und "kein" (eine leere Zeichenkette steht für "keine Normalisierung"). A zone offset must be in the range %1..%2 inclusive. %3 is out of range. Eine Zeitzonen-Differenz muss im Bereich %1..%2 (einschließlich) liegen. %3 liegt außerhalb des Bereiches. Required cardinality is %1; got cardinality %2. Die erforderliche Kardinalität ist %1 (gegenwärtig %2). The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. Die Kodierung %1 ist ungültig; sie darf nur aus lateinischen Buchstaben bestehen und muss dem regulären Ausdruck %2 entsprechen. The keyword %1 cannot occur with any other mode name. Das Schlüsselwort %1 kann nicht mit einem anderen Modusnamen zusammen verwendet werden. The value of attribute %1 must of type %2, which %3 isn't. Der Wert des Attributs mit %1 muss vom Typ %2 sein. %3 ist kein gültiger Wert. A variable by name %1 has already been declared. Es wurde bereits eine Variable mit dem Namen %1 deklariert. A stylesheet function must have a prefixed name. Der Name einer Stylesheet-Funktion muss einen Präfix haben. The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. Der Namensraum %1 ist reserviert und kann daher von nutzerdefinierten Funktionen nicht verwendet werden (für diesen Zweck gibt es den vordefinierten Präfix %2). When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein String-Literal sein. In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein String-Literal sein. In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Literal oder eine Variablenreferenz sein. In an XSL-T pattern, function %1 cannot have a third argument. Bei einem XSL-T-Suchmuster darf die Funktion %1 kein drittes Argument haben. In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. Bei einem XSL-T-Suchmuster dürfen nur die Funktionen %1 und %2, nicht jedoch %3 zur Suche verwendet werden. In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. Bei einem XSL-T-Suchmuster dürfen nur die Achsen %2 oder %3 verwendet werden, nicht jedoch %1. %1 is an invalid template mode name. %1 ist kein gültiger Name für einen Vorlagenmodus. The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. Der Name der gebundenen Variablen eines for-Ausdrucks muss sich von dem der Positionsvariable unterscheiden. Die zwei Variablen mit dem Namen %1 stehen im Konflikt. The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. %1-Ausdrücke können nicht verwendet werden, da Schemavalidierung nicht unterstützt wird. None of the pragma expressions are supported. Therefore, a fallback expression must be present Es muss ein fallback-Ausdruck vorhanden sein, da keine pragma-Ausdrücke unterstützt werden Each name of a template parameter must be unique; %1 is duplicated. Die Namen von Vorlagenparameter müssen eindeutig sein, %1 existiert bereits. %1 is not a valid numeric literal. %1 ist kein gültiger numerischer Literal. The prefix %1 can not be bound. By default, it is already bound to the namespace %2. Der Präfix %1 kann nicht gebunden werden. Er ist bereits durch Vorgabe an den Namensraum %2 gebunden. Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). Der Namensraum %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert. Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). Der Präfix %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert. A direct element constructor is not well-formed. %1 is ended with %2. Es wurde ein fehlerhafter direkter Element-Konstruktor gefunden. %1 endet mit %2. The name %1 does not refer to any schema type. Der Name %1 hat keinen Bezug zu einem Schematyp. %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. %1 ist ein komplexer Typ. Eine "cast"-Operation zu komplexen Typen ist nicht möglich. Es können allerdings "cast"-Operationen zu atomare Typen wie %2 durchgeführt werden. %1 is not an atomic type. Casting is only possible to atomic types. %1 ist kein atomarer Typ. Es können nur "cast"-Operation zu atomaren Typen durchgeführt werden. %1 is not a valid name for a processing-instruction. %1 ist kein gültiger Name für eine Prozessing-Instruktion. The name of an extension expression must be in a namespace. Der Name eines Erweiterungsausdrucks muss sich in einem Namensraum befinden. Required type is %1, but %2 was found. Der erforderliche Typ ist %1, es wurde aber %2 angegeben. Promoting %1 to %2 may cause loss of precision. Die Wandlung von %1 zu %2 kann zu einem Verlust an Genauigkeit führen. It's not possible to add attributes after any other kind of node. Attribute dürfen nicht auf andere Knoten folgen. Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. Es wird nur Unicode Codepoint Collation unterstützt (%1). %2 wird nicht unterstützt. An %1-attribute with value %2 has already been declared. Das Element hat bereits ein Attribut mit dem Namen %1 mit dem Wert %2. An %1-attribute must have a valid %2 as value, which %3 isn't. Ein Attribut mit dem Namen %1 muss einen gültigen %2-Wert haben. %3 ist kein gültiger Wert. The first operand in an integer division, %1, cannot be infinity (%2). Der erste Operand der Ganzzahldivision %1 darf nicht unendlich (%2) sein . The second operand in a division, %1, cannot be zero (%2). Der zweite Operand der Division %1 darf nicht 0 (%2) sein. Integer division (%1) by zero (%2) is undefined. Die Ganzzahldivision (%1) durch Null (%2) ist nicht definiert. Division (%1) by zero (%2) is undefined. Die Division (%1) durch Null (%2) ist nicht definiert. Modulus division (%1) by zero (%2) is undefined. Die Modulo-Division (%1) durch Null (%2) ist nicht definiert. No casting is possible with %1 as the target type. Es können keine "cast"-Operationen zu dem Typ %1 durchgeführt werden. The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. %2 ist kein gültiger Zielname einer Processing-Anweisung, da dieser nicht %1 sein darf (ungeachtet der Groß/Kleinschreibung). %1 takes at most %n argument(s). %2 is therefore invalid. %1 hat nur %n Argument; die Angabe %2 ist daher ungültig. %1 hat nur %n Argumente; die Angabe %2 ist daher ungültig. %1 requires at least %n argument(s). %2 is therefore invalid. %1 erfordert mindestens ein Argument; die Angabe %3 ist daher ungültig. %1 erfordert mindestens %n Argumente; die Angabe %3 ist daher ungültig. The root node of the second argument to function %1 must be a document node. %2 is not a document node. Der übergeordnete Knoten des zweiten Arguments der Funktion %1 muss ein Dokumentknoten sein, was bei %2 nicht der Fall ist. The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) Der Namensraum einer nutzerdefinierten Funktion darf nicht leer sein (für diesen Zweck gibt es den vordefinierten Präfix %1) A default namespace declaration must occur before function, variable, and option declarations. Die Deklaration des Default-Namensraums muss vor Funktions- Variablen- oder Optionsdeklaration erfolgen. A construct was encountered which only is allowed in XQuery. Dieses Konstrukt ist zur in XQuery zulässig. A template by name %1 has already been declared. Es existiert bereits eine Vorlage des Namens %1. Namespace declarations must occur before function, variable, and option declarations. Namensraums-Deklarationen müssen vor Funktions- Variablen- oder Optionsdeklarationen stehen. Module imports must occur before function, variable, and option declarations. Modul-Importe müssen vor Funktions- Variablen- oder Optionsdeklarationen stehen. %1 is not a whole number of minutes. %1 ist keine ganzzahlige Minutenangabe. Attribute %1 can't be serialized because it appears at the top level. Das Attributelement %1 kann nicht serialisiert werden, da es auf der höchsten Ebene erscheint. %1 is an unsupported encoding. Das Encoding %1 wird nicht unterstützt. %1 contains octets which are disallowed in the requested encoding %2. %1 enthält Oktette, die im Encoding %2 nicht zulässig sind. The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. Der Code-Punkt %1 aus %2 mit Encoding %3 ist kein gültiges XML-Zeichen. Ambiguous rule match. Mehrdeutige Regel. In a namespace constructor, the value for a namespace value cannot be an empty string. Im Konstruktor eines Namensraums darf der Wert des Namensraumes keine leere Zeichenkette sein. The prefix must be a valid %1, which %2 is not. Der Präfix muss ein gültiger %1 sein. Das ist bei %2 nicht der Fall. The prefix %1 cannot be bound. Der Präfix %1 kann nicht gebunden werden Only the prefix %1 can be bound to %2 and vice versa. An %2 kann nur der Präfix %1 gebunden werden (und umgekehrt). Circularity detected Es wurde eine zirkuläre Abhängigkeit festgestellt. The parameter %1 is required, but no corresponding %2 is supplied. Es wurde kein entsprechendes %2 für den erforderlichen Parameter %1 angegeben. The parameter %1 is passed, but no corresponding %2 exists. Es existiert kein entsprechendes %2 für den übergebenen Parameter %1. The URI cannot have a fragment Der URI darf kein Fragment enthalten. Element %1 is not allowed at this location. Das Element %1 darf nicht an dieser Stelle stehen. Text nodes are not allowed at this location. An dieser Stelle dürfen keine Textknoten stehen. Parse error: %1 Parse-Fehler: %1 The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. Der Wert eines XSL-T Versionsattributes muss vom Typ %1 sein, was bei %2 nicht der Fall ist. Running an XSL-T 1.0 stylesheet with a 2.0 processor. Es wird ein XSL-T 1.0-Stylesheet mit einem Prozessor der Version 2.0 verarbeitet. Unknown XSL-T attribute %1. Unbekanntes XSL-T Attribut: %1. Attribute %1 and %2 are mutually exclusive. Die Attribute %1 und %2 schließen sich gegenseitig aus. In a simplified stylesheet module, attribute %1 must be present. In einem vereinfachten Stylesheet-Modul muss das Attribut %1 vorhanden sein. If element %1 has no attribute %2, it cannot have attribute %3 or %4. Das Element %1 darf keines der Attribute %3 order %4 haben, solange es nicht das Attribut %2 hat. Element %1 must have at least one of the attributes %2 or %3. Das Element %1 muss mindestens eines der Attribute %2 oder %3 haben. At least one mode must be specified in the %1-attribute on element %2. Im %1-Attribut des Elements %2 muss mindestens ein Modus angegeben werden. Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. Das Element %2 kann nur die Standardattribute haben, nicht jedoch %1. Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. Das Element %2 kann nur %3 oder die Standardattribute haben, nicht jedoch %1. Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. Das Element %2 kann nur %3, %4 oder die Standardattribute haben, nicht jedoch %1. Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. Das Element %2 kann nur %3 oder die Standardattribute haben, nicht jedoch %1. XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. Die XSL-T-Attribute eines XSL-T-Elements müssen im Null-Namensraum sein, nicht im XSL-T-Namensraum, wie %1. The attribute %1 must appear on element %2. Das Element %2 muss das Attribut %1 haben. The element with local name %1 does not exist in XSL-T. In XSL-T existiert kein Element mit dem lokalen Namen %1. Element %1 must come last. Das Element %1 muss zuletzt stehen. At least one %1-element must occur before %2. Vor %2 muss mindestens ein %1-Element stehen. Only one %1-element can appear. Es darf nur ein einziges %1-Element stehen. At least one %1-element must occur inside %2. In %2 muss mindenstens ein %1-Element stehen. When attribute %1 is present on %2, a sequence constructor cannot be used. Es kann kein Sequenzkonstruktor verwendet werden, wenn %2 ein Attribut %1 hat. Element %1 must have either a %2-attribute or a sequence constructor. Das Element %1 muss entweder ein %2-Attribut haben oder es muss ein Sequenzkonstruktor verwendet werden. When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. Der Defaultwert eines erforderlichen Parameters kann weder durch ein %1-Attribut noch durch einen Sequenzkonstruktor angegeben werden. Element %1 cannot have children. Das Element %1 kann keine Kindelemente haben. Element %1 cannot have a sequence constructor. Das Element %1 kann keinen Sequenzkonstruktor haben. The attribute %1 cannot appear on %2, when it is a child of %3. %2 darf nicht das Attribut %1 haben, wenn es ein Kindelement von %3 ist. A parameter in a function cannot be declared to be a tunnel. Der Parameter einer Funktion kann nicht als Tunnel deklariert werden. This processor is not Schema-aware and therefore %1 cannot be used. %1 kann nicht verwendet werden, da dieser Prozessor keine Schemas unterstützt. Top level stylesheet elements must be in a non-null namespace, which %1 isn't. Die zuoberst stehenden Elemente eines Stylesheets dürfen sich nicht im Null-Namensraum befinden, was bei %1 der Fall ist. The value for attribute %1 on element %2 must either be %3 or %4, not %5. Der Wert des Attributs %1 des Elements %2 kann nur %3 oder %4 sein, nicht jedoch %5. Attribute %1 cannot have the value %2. Das Attribut %1 darf nicht den Wert %2 haben. The attribute %1 can only appear on the first %2 element. Nur das erste %2-Element darf das Attribut %1 haben. At least one %1 element must appear as child of %2. %2 muss mindestens ein %1-Kindelement haben. VolumeSlider Muted Stummschaltung Volume: %1% Lautstärke: %1% qutim-0.2.0/languages/de_DE/sources/growlnotification.ts0000644000175000017500000001557111257677212025041 0ustar euroelessareuroelessar GrowlNotificationLayer QutIM message QutIM-Nachricht Growl Select sound file Klangdatei auswählen All files (*.*) Alle Dateien (*.*) GrowlSettings Form Pop-ups Benachrichtigungen Enabled Benachrichtigungen anzeigen, wenn: Notify about status changes Benutzer ihren Status ändern Notify when user came offline Benutzer offline gehen Notify when user came online Benutzer online gehen Notify when contact is typing Benutzer eine Nachricht tippen Notify when message is recieved Nachrichten eingehen Notify about birthdays Benutzer Geburtstag haben Notify when message is blocked Nachrichten blockiert werden Notify about custom requests Sounds Klangbenachrichtigungen ... System Event Systemereignis Incoming message Eingehende Nachricht Contact online Benutzer online Contact offline Benutzer offline Status change Statusänderung Birthay Geburtstag reset Standard Startup Programmstart Outgoing message Gesendete Nachricht QObject %1 Typing Tippt gerade Blocked message : %1 Nachricht blockiert: %1 has birthday today!! hat heute Geburtstag!! qutim-0.2.0/languages/de_DE/sources/massmessaging.ts0000644000175000017500000002054511257677212024136 0ustar euroelessareuroelessar Dialog Multiply Sending Mehrfaches Senden Items Kontaktliste Message Nachricht 15 Interval (in seconds): Intervall (sek): <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Notes:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">You can use the templates:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Name of the recipient </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Name of the sender (profile name)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Current time</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Anmerkungen:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Folgende Platzhalter können verwendet werden:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Name des Empfängers </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Name des Absenders (Profilname)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Aktuelle Zeit</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TextLabel</span></p></body></html> Actions Aktionen Stop Anhalten Send &Senden Manager Accounts Konten Unknown Unbekannt Error: message is empty Fehler: Leere Nachricht Error: unknown account : %1 Fehler: Unbekanntes Konto: %1 Messaging Multiply Sending Mehrfaches Senden MessagingDialog Actions Aktionen Load buddy list Benutzerliste öffnen Save buddy list Benutzerliste speichern Multiply sending: all jobs finished Mehrfaches Senden: Fertig Load custom buddy list Benutzerliste öffnen Sending message to %1: %v/%m Sende Nachricht an %1: %v/%m Sending message to %1 Sende Nachricht an %1 Sending message to %1 (%2/%3), time remains: %4 Sende Nachricht an %1 (%2/%3), verbleibende Zeit: %4 qutim-0.2.0/languages/de_DE/sources/protocolicon.ts0000644000175000017500000000167511257677212024012 0ustar euroelessareuroelessar PluginSettings Select protocol icon theme pack: Symbolsatz: <Default> <Standard> Change account icon Symbole neben den Kontonamen anzeigen Change contact icon Symbole neben jedem Benutzer anzeigen qutim-0.2.0/languages/de_DE/sources/msn.ts0000644000175000017500000001324211246332017022053 0ustar euroelessareuroelessar EdditAccount Editing %1 Bearbeiten von %1 Form General Allgemein Password: Passwort: Autoconnect on start Beim Starten automatisch verbinden Statuses Statusoptionen Online Online Busy Beschäftigt Idle Untätig Will be right back Bin gleich wieder da Away Abwesend On the phone Telefonieren Out to lunch Beim Essen Don't show autoreply dialog Dialog "Statusnachricht eingeben" nicht anzeigen OK Ok Apply Anwenden Cancel Abbrechen LoginForm Form E-mail: E-Mail: Password: Passwort: Autoconnect on start Beim Starten automatisch verbinden MSNConnStatusBox Online Online Busy Beschäftigt Idle Untätig Will be right back Bin gleich wieder da Away Abwesend On the phone Telefonieren Out to lunch Beim Essen Invisible Unsichtbar Offline Offline MSNContactList Without group Ohne Gruppe qutim-0.2.0/languages/de_DE/sources/chess.ts0000644000175000017500000001726111246332017022370 0ustar euroelessareuroelessar Drawer Error moving Fehler beim Zug You cannot move this figure because the king is in check Diese Figur kann nicht bewegt werden, weil der König im Schach steht To castle Rochieren Do you want to castle? Willst Du rochieren? Yes Ja No Nein FigureDialog What figure should I set? Welche Figur soll gesetzt werden? GameBoard QutIM chess plugin QutIM Schach-Plugin White game with Weißes Spiel mit Black game with Schwarzes Spiel mit Your turn. Dein Zug. White game from Weißes Spiel von Black game from Schwarzes Spiel von Opponent turn. Gegnerischer Zug. Your opponent has closed the game Dein Gegner hat das Spiel geschlossen End the game Ende des Spiels Want you to end the game? You will lose it Willst du das Spiel beenden? Du bist dann der Verlierer B K C Q Error! Fehler! Save image Bild speichern Do you want to save the image? Soll das Bild gespeichert werden? Yes, save Ja, speichern No, don't save Nein, nicht speichern Game over Spielende You scored the game Du hast gewonnen :) You have a mate. You lost the game. Schach Matt. Du hast verloren. You have a stalemate Patt chessPlugin Play chess Schach spielen QutIM chess plugin QutIM Schach-Plugin invites you to play chess. Accept? lädt dich zum schachspielen ein. Annehmen? , with reason: " , mit Nachricht: " don't accept your invite to play chess hat deine Einladung zum schachspielen nicht angenommen gameboard QutIM chess plugin QutIM Schach-Plugin Your moves: Deine Züge: Opponent moves: Gegnerische Züge: Game chat Chat qutim-0.2.0/languages/de_DE/sources/fmtune.ts0000644000175000017500000004052611273014333022557 0ustar euroelessareuroelessar EditStations Format Format URL URL <new> <neu> Delete station? Sender löschen? Delete stream? Stream löschen? Import... Importieren... All files (*.*) Alle Dateien (*.*) Export... Exportieren... FMtune XML (*.ftx) Edit stations Sender bearbeiten Name: Name: Genre: Kategorie: Language: Sprache: URL: URL: Format: Format: Stream URL: Stream URL: Image: Bild: Save Speichern Delete stream Stream löschen Add stream Stream hinzufügen Down Nach unten Up Nach oben Add station Sender hinzufügen Delete station Sender löschen Import Importieren Export Exportieren Equalizer Equalizer Equalizer FastAddStation stream Fast add station Sender schnell hinzufügen Name: Name: Stream URL: Stream URL: ImportExport Fast find: Schnell finden: Finish Fertig Info Information Informationen Stream: Stream: Radio: Radio: Song: Titel: Time: Länge: Bitrate: Bitrate: Cover: Cover: QMessageBox An incorrect version of BASS was loaded. Es wurde eine falsche Version von BASS geladen. Can't initialize device Kann Gerät nicht initialisieren Recording Recording Aufnehmen Stop Stop Pause Pause Record Aufnehmen fmtunePlugin Radio on Radio an Radio off Radio aus Copy song name Titelname kopieren Information Informationen Equalizer Equalizer Recording Aufnehmen Volume Lautstärke %1% Mute Stumm Edit stations Sender bearbeiten Fast add station Sender schnell hinzufügen fmtuneSettings <default> <Standard> fmtuneSettingsClass Settings Einstellungen General Allgemein Shortcuts Tastenkombinationen Turn on/off radio: Radio an-/abschalten: Volume up: Lauter: Volume down: Leiser: Volume mute: Stumm: Activate global keyboard shortcuts Globale Tastenkombinationen aktivieren Devices Geräte Output device: Ausgabegerät: Plugins Plugins About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> qutim-0.2.0/languages/de_DE/sources/kde_integration.ts0000644000175000017500000001417311264360754024441 0ustar euroelessareuroelessar KDENotificationLayer Open chat Chat öffen Close Schließen KdeSpellerLayer Spell checker Rechtschreibprüfung KdeSpellerSettings Form Select dictionary: Wörterbuch auswählen: Autodetect of language Sprache automatisch erkennen QObject Notifications Benachrichtigungen System message from %1: System message from %1: <br /> Systemnachricht von %1: Message from %1: Message from %1:<br />%2 Nachricht von %1: %1 is typing %1</b><br /> is typing %1 schreibt gerade eine Nachricht Blocked message from %1 Blocked message from<br /> %1: %2 Nachricht wurde blockiert von %1 %1 has birthday today!! %1 hat heute Geburtstag!! Custom message for %1 plugmanSettings Form Settings Einstellungen Installed plugins: Installierte Plugins: Install from internet Aus Internet installieren Install from file Von Datei installieren About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Simple qutIM plugin</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Author: </span>Sidorov Aleksey</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html> qutim-0.2.0/languages/de_DE/sources/yandexnarod.ts0000644000175000017500000003703511233402241023571 0ustar euroelessareuroelessar requestAuthDialogClass Authorization Einloggen Login: Login: Password: Passwort: Remember Passwort speichern Captcha: about:blank uploadDialog Uploading Senden Done Fertig uploadDialogClass Uploading... Senden... Upload started. Upload gestartet. File: Datei: Progress: Fortschritt: Elapsed time: Verstrichene Zeit: Speed: Geschwindigkeit: Cancel Abbrechen yandexnarodManage Yandex.Narod file manager Yandex.Narod Dateimanager Choose file Datei auswählen yandexnarodManageClass Form Get Filelist Dateiliste abrufen Upload File Datei hochladen Actions: Aktionen: Clipboard Zwischenablage Delete File Datei löschen line1 line2 Close Schließen Files list: Dateiliste: New Item yandexnarodNetMan Authorizing... Einloggen... Canceled Abgebrochen Authorizing OK Einloggen OK Downloading filelist... Dateiliste abrufen... Deleting files... Dateien löschen... Getting storage... Hole Speicher... File size is null Dateigröße ist Null Starting upload... Starte Upload... Can't read file Kann Datei nicht lesen Can't get storage Kann Speicher nicht ermitteln Verifying... Überprüfen... Authorization captcha request Einloggen Captcha-Anfrage Authorization failed Einloggen fehlgeschlagen Filelist downloaded (%1 files) Dateiliste abgerufen (%1 Dateien) File(s) deleted Datei(en) gelöscht Uploaded successfully Upload erfolgreich Verifying failed Überprüfung fehlgeschlagen yandexnarodPlugin Send file via Yandex.Narod Sende Datei mit Yandex.Narod Manage Yandex.Narod files Yandex.Narod Dateien verwalten Choose file for Wähle Datei für File sent Datei gesendet yandexnarodSettingsClass Settings Einstellungen Password Passwort Login Login Test Authorization Zugang testen status <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p></body></html> Send file template Datei senden Maske %N - file name; %U - file URL; %S - file size %N - Dateiname; %U - URL; %S - Dateigröße About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">File exchange via </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"> service</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/de_DE/sources/connectioncheck.ts0000644000175000017500000001201111245037111024400 0ustar euroelessareuroelessar connectioncheckSettings Settings Einstellungen Plugin status: Status: Enabled Aktiviert Disabled Deaktiviert Check method: Prüfmethode: Route table Routing Tabelle Ping Ping Check period (sec.): Prüfintervall (sek): About Über <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> qutim-0.2.0/languages/de_DE/sources/icq.ts0000644000175000017500000061067111264360754022054 0ustar euroelessareuroelessar AccountEditDialog Editing %1 Bearbeiten von %1 AddAccountFormClass AddAccountForm UIN: UIN: Password: Passwort: Save password Passwort speichern ContactSettingsClass ContactSettings Show contact xStatus icon x-Status Symbole anzeigen Show birthday/happy icon Geburtstagsballons anzeigen Show not authorized icon "Nicht autorisiert" - Symbole anzeigen Show "visible" icon if contact in visible list "Sichtbar" - Symbol anzeigen, wenn der Benutzer in der "Sichtbar-Liste" ist Show "invisible" icon if contact in invisible list "Unsichtbar" - Symbol anzeigen, wenn der Benutzer in der "Unsichtbar-Liste" ist Show "ignore" icon if contact in ignore list "Ignorieren" - Symbol anzeigen, wenn der Benutzer in der "Ignorieren-Liste" ist Show contact's xStatus text in contact list x-Statusnachricht anzeigen FileTransfer Send file Datei senden QObject Open File Datei öffnen All files (*) Alle Dateien (*) ICQ General Allgemein Statuses Statusoptionen Contacts Kontakte <font size='2'><b>External ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Externe IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Internal ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Interne IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Online time:</b> %1d %2h %3m %4s<br> <font size='2'><b>Online seit:</b> %1d %2h %3m %4s<br> <b>Signed on:</b> %1<br> <b>Eingeloggt seit:</b> %1<br> <font size='2'><b>Away since:</b> %1<br> <font size='2'><b>Abwesend seit:</b> %1<br> <font size='2'><b>N/A since:</b> %1<br> <font size='2'><b>Nicht verfügbar seit:</b> %1<br> <b>Reg. date:</b> %1<br> <b>Registriert seit:</b> %1<br> <b>Possible client:</b> %1</font> <b>Möglicher Client:</b> %1</font> <font size='2'><b>Last Online:</b> %1</font> <font size='2'><b>Zuletzt online:</b> %1</font> <b>External ip:</b> %1.%2.%3.%4<br> <b>Externe IP:</b> %1.%2.%3.%4<br> <b>Internal ip:</b> %1.%2.%3.%4<br> <b>Interne IP:</b> %1.%2.%3.%4<br> <b>Online time:</b> %1d %2h %3m %4s<br> <b>Online seit:</b> %1d %2h %3m %4s<br> <b>Away since:</b> %1<br> <b>Abwesend seit:</b> %1<br> <b>N/A since:</b> %1<br> <b>Nicht verfügbar seit:</b> %1<br> <b>Possible client:</b> %1<br> <b>Möglicher Client:</b> %1<br> acceptAuthDialogClass acceptAuthDialog Authorize Erlauben Decline Ablehnen accountEdit Form OK Ok Apply Anwenden Cancel Abbrechen Icq settings ICQ Einstellungen Password: Passwort: AOL expert settings Experten-Einstellungen Client id: Client major version: Client minor version: Client lesser version: Client build number: Client id number: Client distribution number: Seq first id: Server Server Host: Host-Adresse: Port: login.icq.com Save password: Passwort speichern: Autoconnect on start Beim Starten automatisch verbinden Save my status on exit Den letzten Status beim Starten wiederherstellen Keep connection alive Verbindung aufrecht erhalten Secure login Sicherer Login Proxy connection Verbindung über Proxy-Server Listen port for file transfer: Port für eingehende Dateien: Proxy Proxy-Server Type: Typ: None Keiner HTTP SOCKS 5 Authentication Benötigt Authentifizierung User name: Benutzername: addBuddyDialog Move Verschieben Add %1 Hinzufügen von %1 addBuddyDialogClass addBuddyDialog Local name: Angezeigter Name: Group: Gruppe: Add Hinzufügen addRenameDialogClass addRenameDialog Name: Name: OK Ok Return closeConnection Invalid nick or password Ungültige UIN oder Passwort Service temporarily unavailable Service temporär nicht verfügbar Incorrect nick or password Falsche UIN oder Passwort Mismatch nick or password Unpassende UIN oder Passwort Internal client error (bad input to authorizer) Interner Client-Fehler (bad input to authorizer) Invalid account Ungültiges Konto Deleted account Gelöschtes Konto Expired account Abgelaufenes Konto No access to database Kein Zugriff zur Datenbank No access to resolver Kein Zugriff zum Resolver Invalid database fields Ungültige Datenbankfelder Bad database status Schlechter Datenbank-Status Bad resolver status Schlechter Resolver-Status Internal error Interner Fehler Service temporarily offline Service temporär offline Suspended account Konto gesperrt DB send error Datenbank-Sendefehler DB link error Datenbank-Linkfehler Reservation map error Map-Reservierungsfehler Reservation link error Link-Reservierungsfehler The users num connected from this IP has reached the maximum Verbindungen von dieser IP-Adresse haben das Maximum erreicht The users num connected from this IP has reached the maximum (reservation) Reservierungen von dieser IP-Adresse haben das Maximum erreicht Rate limit exceeded (reservation). Please try to reconnect in a few minutes Sie haben zu oft versucht sich anzumelden/zu reservieren! Versuchen Sie es in einigen Minuten wieder User too heavily warned Dieses Konto hat zu viele Warnungen erhalten. Bitte später erneut versuchen Reservation timeout Resevierungs-Timeout You are using an older version of ICQ. Upgrade required Sie benutzen eine alte Client-Version. Upgrade erforderlich You are using an older version of ICQ. Upgrade recommended Sie benutzen eine alte Client-Version. Upgrade empfehlenswert Rate limit exceeded. Please try to reconnect in a few minutes Sie haben zu oft versucht sich anzumelden! Versuchen Sie es in einigen Minuten wieder Can't register on the ICQ network. Reconnect in a few minutes Keine Anmeldung bei ICQ möglich. In ein paar Minuten wieder versuchen Invalid SecurID Ungültige SecurID Account suspended because of your age (age < 13) Konto gesperrt wegen deinem Alter (< 13) Connection Error Login-Vorgang fehlgeschlagen! Bitte stellen Sie eine Verbindung mit dem Internet her Another client is loggin with this uin Ihre UIN wird auf einem anderen Computer verwendet contactListTree is online ist online is away ist abwesend is dnd nicht stören is n/a ist nicht verfügbar is occupied ist beschäftigt is free for chat ist chatfreudig is invisible ist unsichtbar is offline ist offline at home zu Hause at work in der Arbeit having lunch beim Essen is evil ist böse in depression ist depressiv %1 is reading your away message %1 liest deine Statusnachricht %1 is reading your x-status message %1 liest deine x-Statusnachricht Password is successfully changed Das Passwort wurde erfolgreich geändert Password is not changed Das Passwort wurde nicht geändert Add/find users Benutzer hinzufügen/suchen Send multiple Mehrfach senden Privacy lists Privatlisten View/change my details Mein ICQ-Profil anzeigen/ändern Change my password Mein Passwort ändern You were added hat dich zur Kontaktliste hinzugefügt New group Neue Gruppe Rename group Gruppe umbenennen Delete group Gruppe löschen Send message Nachricht senden Contact details Benutzerinformationen Copy UIN to clipboard UIN in Zwischenablage kopieren Contact status check Status des Benutzers überprüfen Message history Nachrichtenverlauf Read away message Statusnachricht lesen Rename contact Benutzer umbenennen Delete contact Benutzer löschen Move to group In andere Gruppe verschieben Add to visible list Zur "Sichtbar-Liste" hinzufügen Add to invisible list Zur "Unsichtbar-Liste" hinzufügen Add to ignore list Zur "Ignorieren-Liste" hinzufügen Delete from visible list Aus "Sichtbar-Liste" entfernen Delete from invisible list Aus "Unsichtbar-Liste" entfernen Delete from ignore list Aus "Ignorieren-Liste" entfernen Authorization request Erlaubnisanfrage senden Add to contact list Zur Kontaktliste hinzufügen Allow contact to add me Dem Benutzer erlauben mich hinzuzufügen Remove myself from contact's list Mich aus der Kontaktliste des Benutzers entfernen Read custom status x-Statusnachricht lesen Edit note Notiz ändern Create group Gruppe erstellen Delete group "%1"? Gruppe "%1" wirklich löschen? %1 away message %1's Statusnachricht Delete %1 %1 löschen Move %1 to: %1 verschieben nach: Accept authorization from %1 Erlaubnisanfrage von %1 akzeptieren Authorization accepted Erlaubnisanfrage akzeptiert Authorization declined Erlaubnisanfrage abgelehnt %1 xStatus message %1's x-Statusnachricht Contact does not support file transfer Der Benutzer unterstützt keine Dateiübertragungen customStatusDialog Angry Böse Taking a bath Im Bad Tired Müde Party Party Drinking beer Bier trinken Thinking Nachdenken Eating Essen Watching TV Fernsehen Meeting Treffen Coffee Kaffee Listening to music Musik hören Business Business Shooting Filmen Having fun Spaß haben On the phone Telefonieren Gaming Spielen Studying Lernen Shopping Einkaufen Feeling sick Krank Sleeping Schlafen Surfing Surfen Browsing Browsen Working Arbeiten Typing Schreiben Picnic Picknick On WC Auf der Toilette To be or not to be Sein oder nicht sein PRO 7 PRO 7 Love Verliebt Sex Sex Smoking Rauchen Cold Frieren Crying Heulen Fear Panik Reading Lesen Sport Sport In tansport Unterwegs ? ? customStatusDialogClass Custom status Persönlicher Status Choose Auswählen Cancel Abbrechen Set birthday/happy flag Mein Geburtstags-Symbol anzeigen deleteContactDialogClass deleteContactDialog Contact will be deleted. Are you sure? Der Benutzer wird aus der Kontaktliste gelöscht. Sicher? Delete contact history Nachrichtenverlauf löschen Yes Ja No Nein fileRequestWindow Save File Datei speichern All files (*) Alle Dateien (*) fileRequestWindowClass File request Eingehende Datei From: Von: IP: IP-Adresse: File name: Dateiname: File size: Dateigröße: Accept Annehmen Decline Ablehnen fileTransferWindow File transfer: %1 Dateiübertragung: %1 Waiting... Warten... Declined by remote user Dateiübertragung wurde vom Remotebenutzer abgelehnt Accepted Akzeptiert Sending... Senden... Done Fertig Getting... Empfangen... /s B KB MB GB fileTransferWindowClass File transfer Dateiübertragung Current file: Aktuelle Datei: Done: Übertragen: Speed: Geschwindigkeit: File size: Dateigröße: Files: Datei(en): 1/1 Last time: Verstrichene Zeit: Remained time: Verbleibende Zeit: Sender's IP: IP-Adresse des Absenders: Status: Fortschritt: Open Öffnen Cancel Abbrechen icqAccount Online Online Offline Offline Free for chat Chatfreudig Away Abwesend NA Nicht verfügbar Occupied Beschäftigt DND Nicht stören Invisible Unsichtbar Lunch Beim Essen Evil Böse Depression Depressiv At Home Zu Hause At Work In der Arbeit Custom status Persönlicher Status Privacy status Privatstatus Visible for all Sichtbar für alle Visible only for visible list Sichtbar nur für "Sichtbar-Liste" Invisible only for invisible list Unsichtbar nur für "Unsichtbar-Liste" Visible only for contact list Sichtbar nur für die Kontaktliste Invisible for all Unsichtbar für alle Additional Sonstiges is reading your away message liest deine Statusnachricht is reading your x-status message liest deine x-Statusnachricht icqSettingsClass icqSettings Main Allgemein Don't send requests for avatarts Keine Anfragen für Avatare senden Reconnect after disconnect Nach Verbindungsabbruch wieder verbinden Client ID: Client ID: qutIM ICQ 6 ICQ 5.1 ICQ 5 ICQ Lite 4 ICQ 2003b Pro ICQ 2002/2003a Mac ICQ QIP 2005 QIP Infium - Protocol version: Protokoll-Version: Client capability list: Client Fähigkeiten: Advanced Erweitert Account button and tray icon Konto-Schaltfläche und Systemtray-Symbol Show main status icon Hauptstatus anzeigen Show custom status icon Persönlichen Status anzeigen Show last choosen Den zuletzt gewählen anzeigen Codepage: (note that online messages use utf-8 in most cases) Codepage: (Hinweis: Für Deutschland am besten ISO 8859-15 oder Windows-1250 einstellen. UTF-8 macht manchmal Probleme) Apple Roman Big5 Big5-HKSCS EUC-JP EUC-KR GB18030-0 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 ISO 8859-16 Iscii-Bng Iscii-Dev Iscii-Gjr Iscii-Knd Iscii-Mlm Iscii-Ori Iscii-Pnj Iscii-Tlg Iscii-Tml JIS X 0201 JIS X 0208 KOI8-R KOI8-U MuleLao-1 ROMAN8 Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 WINSAMI2 multipleSending Send multiple Mehrfach senden multipleSendingClass multipleSending 1 Send &Senden Stop Anhalten networkSettingsClass networkSettings Connection Verbindung Server Server Host: Host-Adresse: Port: login.icq.com Keep connection alive Verbindung aufrecht erhalten Secure login Sicherer Login Proxy connection Verbindung über Proxy-Server Listen port for file transfer: Port für eingehende Dateien: Proxy Proxy-Server Type: Typ: None Keiner HTTP SOCKS 5 Authentication Benötigt Authentifizierung User name: Benutzername: Password: Passwort: noteWidgetClass noteWidget OK Ok Cancel Abbrechen oscarProtocol The connection was refused by the peer (or timed out). Die Verbindung wurde vom Peer zurückgewiesen (oder Zeitüberschreitung). The remote host closed the connection. Der Remote-Host hat die Verbindung getrennt. The host address was not found. Die Host-Adresse konnte nicht gefunden werden. The socket operation failed because the application lacked the required privileges. Der Socket-Vorgang ist fehlgeschlagen, weil die Anwendung nicht die erforderlichen Rechte hatte. The local system ran out of resources (e.g., too many sockets). Das lokale System hat keine freien Ressourcen mehr (z.B. zu viele Sockets). The socket operation timed out. Zeitüberschreitung beim Socket-Vorgang. An error occurred with the network (e.g., the network cable was accidentally plugged out). Ein Netzwerkfehler ist aufgetreten (z.B. das Netzwerkkabel wurde plötzlich ausgesteckt). The requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). Der geforderte Socket-Vorgang wird vom lokalen Betriebssystem nicht unterstützt (z.B. fehlende IPv6-Unterstützung). The socket is using a proxy, and the proxy requires authentication. Der Socket benutzt einen Proxy der eine Authentifizierung benötigt. An unidentified network error occurred. Ein unbekannter Netzwerkfehler ist aufgetreten. passwordChangeDialog Password error Passwortfehler Current password is invalid Das Passwort ist ungültig Confirm password does not match Das Bestätigungspasswort stimmt nicht überein passwordChangeDialogClass Change password Passwort ändern Current password: Altes Passwort: New password: Neues Passwort: Retype new password: Neues Passwort bestätigen: Change Ändern passwordDialog Enter %1 password Passwort für %1 eingeben passwordDialogClass Enter your password Passwort eingeben Your password: Dein Passwort: Save password Passwort speichern OK Ok privacyListWindow Privacy lists Privatlisten privacyListWindowClass privacyListWindow Visible list Sichtbar-Liste UIN UIN Nick name Spitzname I D Invisible list Unsichtbar-Liste Ignore list Ignorieren-Liste readAwayDialogClass readAwayDialog <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> Close Schließen Return requestAuthDialogClass Authorization request Erlaubnisanfrage Send Senden searchUser Add/find users Benutzer hinzufügen/suchen Searching Suchen... Nothing found Nichts gefunden Done Fertig Always Immer Authorize Autorisieren Add to contact list Zur Kontaktliste hinzufügen Contact details Benutzerinformationen Send message Nachricht senden Contact status check Status des Benutzers überprüfen searchUserClass searchUser Search by: Suchen nach: UIN UIN Email E-Mail Other Sonstiges Nick name: Spitzname: First name: Vorname: Last name: Nachname: Online only Gerade online More >> Mehr >> Advanced Mehr Gender: Geschlecht: Female Weiblich Male Männlich Age: Alter: 13-17 18-22 23-29 30-39 40-49 50-59 60+ Country: Land: Afghanistan Afghanistan Albania Albanien Algeria Algerien American Samoa Amerikanisch Samoa Andorra Andorra Angola Angola Anguilla Anguilla Antigua Antigua Antigua & Barbuda Antigua & Barbuda Antilles Antillen Argentina Argentinien Armenia Armenien Aruba Aruba AscensionIsland Ascension-Insel Australia Australien Austria Österreich Azerbaijan Aserbaidschan Bahamas Bahamas Bahrain Bahrain Bangladesh Bangladesch Barbados Barbados Barbuda Barbuda Belarus Belarus Belgium Belgien Belize Belize Benin Benin Bermuda Bermuda Bhutan Bhutan Bolivia Bolivien Botswana Botswana Brazil Brasilien Brunei Brunei Bulgaria Bulgarien Burkina Faso Burkina Faso Burundi Burundi Cambodia Kambodscha Cameroon Kamerun Canada Kanada Canary Islands Kanarische Inseln Cayman Islands Kaiman Inseln Chad Tschad Chile, Rep. of Chile, Republik China China Christmas Island Weihnachtsinsel Colombia Kolumbien Comoros Komoren CookIslands Cook Inseln Costa Rica Costa Rica Croatia Kroatien Cuba Kuba Cyprus Zypern Czech Rep. Tschechien Denmark Dänemark Diego Garcia Diego Garcia Djibouti Dschibuti Dominica Dominica Dominican Rep. Dominikanische Republik Ecuador Equador Egypt Ägypten El Salvador El Salvador Eritrea Eritrea Estonia Estland Ethiopia Äthiopien Faeroe Islands Färöer Inseln Falkland Islands Falklandinseln Fiji Fidschi Finland Finnland France Frankreich FrenchAntilles Französische Antillen French Guiana Französisch Guiana French Polynesia Französisch Polynesien Gabon Gabun Gambia Gambia Georgia Georgien Germany Deutschland Ghana Ghana Gibraltar Gibraltar Greece Griechenland Greenland Grönland Grenada Grenada Guadeloupe Guadeloupe Guatemala Guatemala Guinea Guinea Guinea-Bissau Guinea-Bissau Guyana Guyana Haiti Haiti Honduras Honduras Hong Kong Hong Kong Hungary Ungarn Iceland Island India Indien Indonesia Indonesien Iraq Irak Ireland Irland Israel Israel Italy Italien Jamaica Jamaika Japan Japan Jordan Jordanien Kazakhstan Kasachstan Kenya Kenia Kiribati Kirbati Korea, North Korea (Nord) Korea, South Korea (Süd) Kuwait Kuwait Kyrgyzstan Kirgisien Laos Laos Latvia Lettland Lebanon Libanon Lesotho Lesotho Liberia Liberia Liechtenstein Liechtenstein Lithuania Litauen Luxembourg Luxemburg Macau Macao Madagascar Madagaskar Malawi Malawi Malaysia Malaysia Maldives Malediven Mali Mali Malta Malta Marshall Islands Marshall Inseln Martinique Martinique Mauritania Mauretanien Mauritius Mauritius MayotteIsland Mayotte Mexico Mexiko Moldova, Rep. of Moldawien, Rep. Monaco Monaco Mongolia Mongolei Montserrat Montserrat Morocco Marokko Mozambique Mosambik Myanmar Myanmar Namibia Namibia Nauru Nauru Nepal Nepal Netherlands Niederlande Nevis Nevis NewCaledonia Neukaledonien New Zealand Neuseeland Nicaragua Nicaragua Niger Niger Nigeria Nigeria Niue Niue Norfolk Island Norfolkinsel Norway Norwegen Oman Oman Pakistan Pakistan Palau Palau Panama Panama Papua New Guinea Papua-Neuguinea Paraguay Paraguay Peru Peru Philippines Philippinen Poland Polen Portugal Portugal Puerto Rico Puerto Rico Qatar Katar Reunion Island Reunion Island Romania Rumänien Rota Island Rota Insel Russia Russland Rwanda Ruanda Saint Lucia St. Lucia Saipan Island Saipan Insel San Marino San Marino Saudi Arabia Saudi Arabien Scotland Schottland Senegal Senegal Seychelles Seychellen Sierra Leone Sierra Leone Singapore Singapur Slovakia Slowakei Slovenia Slovenien Solomon Islands Salomonen Somalia Somalia SouthAfrica Südafrika Spain Spanien Sri Lanka Sri Lanka St. Helena St. Helena St. Kitts St. Kitts Sudan Sudan Suriname Suriname Swaziland Swasiland Sweden Schweden Switzerland Schweiz Syrian ArabRep. Syrien Taiwan Taiwan Tajikistan Tadschikistan Tanzania Tansania Thailand Thailand Tinian Island Tinian Insel Togo Togo Tokelau Tokelau Tonga Tonga Tunisia Tunesien Turkey Türkei Turkmenistan Turkmenistan Tuvalu Tuvalu Uganda Uganda Ukraine Ukraine United Kingdom Großbritannien Uruguay Uruguay USA USA Uzbekistan Usbekistan Vanuatu Vanuatu Vatican City Vatikanstaat Venezuela Venezuela Vietnam Vietnam Wales Wales Western Samoa Westsamoa Yemen Jemen Yugoslavia Jugoslawien Yugoslavia - Montenegro Jugoslawien-Montenegro Yugoslavia - Serbia Jugoslawien-Serbien Zambia Sambia Zimbabwe Simbabwe City: Ort: Interests: Interessen: Art Kunst Cars Autos Celebrity Fans Fan einer Berühmtheit Collections Sammeln Computers Computer Culture & Literature Kultur & Literatur Fitness Fitness Games Spiele Hobbies Hobbys ICQ - Providing Help ICQ - Hilfe Internet Internet Lifestyle Lifestyle Movies/TV Filme / Fernsehen Music Musik Outdoor Activities Outdoor Aktivitäten Parenting Kindererziehung Pets/Animals Tierwelt Religion Religion Science/Technology Wissenschaft / Technik Skills Skills Sports Sport Web Design Webdesign Nature and Environment Natur und Umwelt News & Media Nachrichten & Medien Government Regierung Business & Economy Wirtschaft Mystics Mystik/Esoterik Travel Reisen Astronomy Astronomie Space Weltall Clothing Kleidung Parties Partys Women Frauen Social science Sozialwissenschaften 60's 60er 70's 70er 80's 80er 50's 50er Finance and corporate Finanzen und Unternehmen Entertainment Unterhaltung Consumer electronics Unterhalungselektronik Retail stores Einzelhandel Health and beauty Gesundheit und Schönheit Media Medien Household products Haushaltsprodukte Mail order catalog Versandhauskatalog Business services Geschäftliche Leistungen Audio and visual Audio und Video Sporting and athletic Sport und Leichtathletik Publishing Verlagswesen Home automation Haustechnik /-automatisierung Language: Sprache: Arabic Arabisch Bhojpuri Bhojpuri Bulgarian Bulgarisch Burmese Birmanisch Cantonese Kantonesisch Catalan Katalanisch Chinese Chinesisch Croatian Kroatisch Czech Tschechisch Danish Dänisch Dutch Niederländisch English Englisch Esperanto Esperanto Estonian Estnisch Farsi Farsi Finnish Finnisch French Französisch Gaelic Gälisch German Deutsch Greek Griechisch Hebrew Hebräisch Hindi Hindi Hungarian Ungarisch Icelandic Isländisch Indonesian Indonesisch Italian Italienisch Japanese Japanisch Khmer Kambodschanisch Korean Koreanisch Lao Laotisch Latvian Lettisch Lithuanian Litauisch Malay Malaiisch Norwegian Norwegisch Polish Polnisch Portuguese Portugiesisch Romanian Rumänisch Russian Russisch Serbian Serbisch Slovak Slovakisch Slovenian Slovenisch Somali Somali Spanish Spanisch Swahili Swahili Swedish Schwedisch Tagalog Tagalog Tatar Tatarisch Thai Thailändisch Turkish Türkisch Ukrainian Ukrainisch Urdu Urdu Vietnamese Vietnamisisch Yiddish Jiddisch Yoruba Yoruba Afrikaans Afrikaans Persian Persisch Albanian Albanisch Armenian Armenisch Kyrgyz Kirgiesisch Maltese Maltesisch Occupation: Beschäftigung: Academic Akademiker Administrative Verwaltung Art/Entertainment Kunst/Unterhaltung College Student Schüler Community & Social Gemeinwesen & Sozialbereich Education Lehrer Engineering Ingenieur/Techniker Financial Services Finanzdienstleistungen High School Student Abiturient Home Hausfrau/-mann Law Jurist Managerial Führungsposition Manufacturing Materialverarbeitender Beruf Medical/Health Medizien-/Gesundheitsbereich Military Militär Non-Goverment Organisation Nichtstaatliche Organisation Professional Facharbeiter Retail Einzelhandel Retired Ruhestand Science & Research Wissenschaft & Forschung Technical Technik University student Student Web building Webdesign Other services Andere Dienste Keywords: Schlüsselwörter: Marital status: Familienstand: Divorced Geschieden Engaged Verlobt Long term relationship Langfristige Beziehung Married Verheiratet Open relationship Offene Beziehung Separated Getrennt Single Single Widowed Verwitwed Do not clear previous results In bisherigen Ergebnissen suchen Clear Felder leeren Search Suchen Return Account Konto Nick name Spitzname First name Vorname Last name Nachname Gender/Age Geschlecht/Alter Authorize Autorisieren snacChannel Invalid nick or password Ungültiger Name oder Passwort Service temporarily unavailable Service temporär nicht verfügbar Incorrect nick or password Falscher Name oder Passwort Mismatch nick or password Unpassender Name oder Passwort Internal client error (bad input to authorizer) Interner Client Fehler (bad input to authorizer) Invalid account Ungültiges Konto Deleted account Gelöschtes Konto Expired account Abgelaufenes Konto No access to database Kein Zugriff zur Datenbank No access to resolver Kein Zugriff zum Resolver Invalid database fields Ungültige Datenbankfelder Bad database status Datenbank in schlechtem Zustand Bad resolver status Resolver in schlechtem Zustand Internal error Interner Fehler Service temporarily offline Service temporär offline Suspended account Konto gesperrt DB send error Datenbank-Sendefehler DB link error Datenbank-Linkfehler Reservation map error Map-Reservierungsfehler The users num connected from this IP has reached the maximum Verbindungen von dieser IP-Adresse haben das Maximum erreicht The users num connected from this IP has reached the maximum (reservation) Reservierungen von dieser IP-Adresse haben das Maximum erreicht Rate limit exceeded (reservation). Please try to reconnect in a few minutes Sie haben sich zu oft hintereinander angemeldet/reserviert. Versuchen Sie es in einigen Minuten wieder User too heavily warned Dieses Konto hat zu viele Warnungen erhalten. Bitte später erneut versuchen Reservation timeout Resevierungs-Timeout You are using an older version of ICQ. Upgrade required Sie benutzen eine alte Client-Version. Upgrade erforderlich You are using an older version of ICQ. Upgrade recommended Sie benutzen eine alte Client-Version. Upgrade empfohlen Rate limit exceeded. Please try to reconnect in a few minutes Sie haben zu oft versucht sich anzumelden! Versuchen Sie es in einigen Minuten wieder Can't register on the ICQ network. Reconnect in a few minutes Keine Anmeldung bei ICQ möglich. In ein paar Minuten wieder versuchen Invalid SecurID Ungültige SecurID Account suspended because of your age (age < 13) Konto gesperrt wegen deinem Alter (< 13) Connection Error: %1 Verbindungsfehler: %1 statusSettingsClass statusSettings Allow other to view my status from the Web Mein Status ist im Internet für andere sichtbar Add additional statuses to status menu Zusätzliche Status im Statusmenü anzeigen Ask for xStauses automatically Automatisch nach x-Status fragen Notify about reading your status Benachrichtigen, wenn meine Statusnachricht gelesen wird Away Abwesend Lunch Beim Essen Evil Böse Depression Depressiv At home Zu Hause At work In der Arbeit N/A Nicht verfügbar Occupied Beschäftigt DND Nicht stören Don't show autoreply dialog Dialog "Statusnachricht eingeben" nicht anzeigen userInformation %1 contact information %1 Benutzerinformationen <img src='%1' height='%2' width='%3'> <b>Nick name:</b> %1 <br> <b>Spitzname:</b> %1 <br> <b>First name:</b> %1 <br> <b>Vorname:</b> %1 <br> <b>Last name:</b> %1 <br> <b>Nachname:</b> %1 <br> <b>Home:</b> %1 %2<br> <b>Wohnort:</b> %1 %2<br> <b>Gender:</b> %1 <br> <b>Geschlecht:</b> %1 <br> <b>Age:</b> %1 <br> <b>Alter:</b> %1 <br> <b>Birth date:</b> %1 <br> <b>Geburtstag:</b> %1 <br> <b>Spoken languages:</b> %1 %2 %3<br> <b>Sprachkenntnisse:</b> %1 %2 %3<br> Open File Datei öffnen Images (*.gif *.bmp *.jpg *.jpeg *.png) Bilder (*.gif *.bmp *.jpg *.jpeg *.png) Open error Fehler beim Öffnen Image size is too big Bilddatei ist zu groß <b>Protocol version: </b>%1<br> <b>Protokoll-Version: </b>%1<br> <b>[Capabilities]</b><br> <b>[Short capabilities]</b><br> <b>[Direct connection extra info]</b><br> userInformationClass userInformation Name Name Nick name: Spitzname: Last login: Letzter Login: First name: Vorname: Last name: Nachname: UIN: UIN: Registration: Registriert seit: Email: E-Mail: Don't publish for all Nicht für jeden sichtbar City: Ort: State: Bundesland: Zip: Postleitzahl: Phone: Telefon: Fax: Fax: Cellular: Mobiltelefon: Street address: Straße/Hausnummer: Country: Land: Work address Adresse: Street: Straße/Hausnummer: Company Firma: Company name: Firmenname: Occupation: Beschäftigung: Div/dept: Abteilung: Position: Position: Web site: Webseite: Account info Konto-Informationen Originally from Ursprünglich aus Home address Adresse Personal Persönliches Marital status: Familienstand: Gender: Geschlecht: Female Weiblich Male Männlich Home page: Homepage: Age: Alter: Birth date Geburtstag Spoken language: Sprachkenntnisse: Interests Interessen <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> Authorization/webaware Autorisierung/Sicherheit My authorization is required Meine Erlaubnis ist erforderlich All uses can add me without authorization Jeder kann mich ohne Erlaubnis hinzufügen Allow others to view my status in search and from the web Mein Status ist im Internet und bei der Suche für andere sichtbar Save Speichern Close Schließen Summary Zusammenfassung General Allgemein Home Privat Work Arbeit About Über mich Additinonal Sonstiges Request details Neu laden qutim-0.2.0/languages/de_DE/sources/floaties.ts0000644000175000017500000000062211231562135023062 0ustar euroelessareuroelessar FloatiesPlugin Show floaties Als Floatie zeigen qutim-0.2.0/languages/de_DE/sources/sqlhistory.ts0000644000175000017500000001220211257677212023505 0ustar euroelessareuroelessar HistoryWindowClass HistoryWindow Account: Konto: From: Von: Search Suchen Return 1 QObject History Verlauf SqlHistoryNamespace::HistoryWindow No History Kein Verlauf SqlHistorySettingsClass HistorySettings <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">SQL History Settings</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">SQL History Einstellungen</span></p></body></html> Save message history Nachrichtenverlauf speichern Show recent messages in messaging window Beim Öffnen des Nachrichtenfensters die letzten Nachrichten anzeigen: SQL engine: SQL Engine: SQL connection settings SQL Verbindungseinstellungen Host: Host-Adresse: Port: Port: Login: Benutzername: Password: Passwort: Database name: Datenbankname: SQL History plugin (c) 2009 by Alexander Kazarin qutim-0.2.0/languages/de_DE/sources/mrim.ts0000644000175000017500000015547211266546167022255 0ustar euroelessareuroelessar AddContactWidget Incorrect email Falsche E-Mail Adresse Email you entered is not valid or empty! Die eingegebene E-Mail Adresse ist ungültig oder leer! AddContactWidgetClass Add contact to list Benutzer zur Kontaktliste hinzufügen Add to group: Zur Gruppe hinzufügen: Contact email: E-Mail: Contact nickname: Spitzname: Add Hinzufügen AddNumberWidget Phone numbers Telefonnummern Home: Zu Hause: Work: Arbeit: Mobile: Mobil: Save Speichern ContactDetails M M F W No avatar Kein Avatar ContactDetailsClass Contact details Benutzerinformationen Personal data Persönliches <email> <nickname> E-Mail: E-Mail: Nickname: Spitzname: Surname: Nachname: Sex: Geschlecht: Age: Alter: Birthday: Geburtstag: Zodiac sign: Sternzeichen: Living place: Wohnort: Name: Vorname: <name> <surname> <sex> <age> <birthday> <zodiac> <living place> Avatar Avatar No avatar Kein Avatar Add contact Benutzer hinzufügen Update Update Close Schließen EditAccount Edit %1 account settings Bearbeiten von %1 Edit account Konto bearbeiten Account Konto Connection Verbindung Use profile settings Verwende Profileinstellungen FileTransferRequestWidget File transfer request from %1 Eingehende Datei von %1 Choose location to save file(s) Speicherort für die Datei(en) auswählen Form From: Von: File(s): Datei(en): File name Dateiname Size Größe Total size: Gesamtgröße: Accept Annehmen Decline Ablehnen FileTransferWidget File transfer with: %1 Dateiübertragung mit: %1 Waiting... Warten... /sec /s Done! Fertig! Getting file... Empfangen... Close Schließen Sending file... Senden... Form Filename: Dateiname: Done: Übertragen: Speed: Geschwindigkeit: File size: Dateigröße: Last time: Verstrichene Zeit: Remained time: Verbleibende Zeit: Status: Fortschritt: Close window after tranfer is finished Fenster nach der Übertragung schließen Open Öffnen Cancel Abbrechen GeneralSettings GeneralSettings Restore status at application's start Den letzten Status wiederherstellen Show phone contacts Zeige Telefonkontakte Show status text in contact list Statusnachrichten in der Kontaktliste anzeigen LoginFormClass LoginForm E-mail: E-Mail: Password: Passwort: MRIMClient Add contact Benutzer hinzufügen Open mailbox Mailbox öffnen Search contacts Benutzer suchen No MPOP session available for you, sorry... Leider ist keine MPOP-Sitzung verfügbar... Messages in mailbox: Nachrichten in der Mailbox: Unread messages: Ungelesene Nachrichten: User %1 is requesting authorization: Erlaubnisanfrage von Benutzer %1: Authorization request accepted by Erlaubnisanfrage akzeptiert von Server closed the connection. Authentication failed! Der Server hat die Verbindung getrennt. Anmeldung fehlgeschlagen! Server closed the connection. Another client with same login connected! Der Server hat die Verbindung getrennt. Ein anderer Client ist mit diesem Login eingeloggt! Server closed the connection for unknown reason... Der Server hat die Verbindung aus unbekanntem Grund getrennt... Unread emails: %1 Ungelesene E-Mails: %1 Send SMS SMS senden Authorize contact Benutzer autorisieren Request authorization Erlaubnisanfrage senden Rename contact Benutzer umbenennen Delete contact Benutzer löschen Move to group In andere Gruppe verschieben Add phone number Telefonnummer hinzufügen Add to list Zur Kontaktliste hinzufügen Pls authorize and add me to your contact list! Thanks! Email: Bitte autorisieren und mich zu deiner Kontaktliste hinzufügen! Danke! E-Mail: Contact list operation failed! Kontaktlisten-Operation fehlgeschlagen! No such user! Kein Benutzer gefunden! Internal server error! Interner Serverfehler! Invalid info provided! User already exists! Benutzer existiert bereits! Group limit reached! Gruppenlimit erreicht! Unknown error! Unbekannter Fehler! Sorry, no contacts found :( Try to change search parameters Leider wurden keine Benutzer gefunden :( evtl. Suchparameter ändern MRIMCommonUtils B KB MB GB MRIMContact Possible client: Möglicher Client: Renaming %1 %1 umbenennen You can't rename a contact while you're offline! Ein Benutzer kann nicht umbenannt werden, wenn du offline bist! MRIMContactList Phone contacts Telefonkontakte MRIMLoginWidgetClass MRIMLoginWidget Email: E-Mail: Password: Passwort: MRIMPluginSystem General settings Allgemein Connection settings Verbindung MRIMProto Offline message Offline-Nachricht Pls authorize and add me to your contact list! Thanks! Bitte autorisieren Sie mich und fügen mich zu Ihrer Kontaktliste hinzu! Danke! File transfer request from %1 couldn't be processed! Dateiübertragungsanfrage von %1 konnte nicht verarbeitet werden! MRIMSearchWidget Any Alle The Ram Widder The Bull Stier The Twins Zwillinge The Crab Krebs The Lion Löwe The Virgin Jungfrau The Balance Waage The Scorpion Skorpion The Archer Schütze The Capricorn Steinbock The Water-bearer Wassermann The Fish Fische Male Männlich Female Weiblich January Januar February Februar March März April April May Mai June Juni July Juli August August September September October Oktober November November December Dezember MRIMSearchWidgetClass Search contacts Benutzer suchen Search form Suchangaben Nickname: Spitzname: Name: Vorname: Surname: Nachname: Sex: Geschlecht: Country: Land: Region: Region: Birthday: Geburtstag: Day: Tag: Any Alle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Month: Monat: Zodiac: Sternzeichen: Age from: Alter von: to bis Search only online contacts Nur Benutzer suchen die gerade online sind Show avatars Avatarbilder anzeigen E-Mail E-Mail Note: search is available only for following domains: Anmerkung: Die Suche ist nur für folgende Domains verfügbar: @mail.ru, @list.ru, @bk.ru, @inbox.ru Start search! Suche starten! MoveToGroupWidget Move Verschieben Move contact to group Benutzer in Gruppe verschieben Move! Verschieben! Group: Gruppe: RenameWidget Rename Umbenennen Rename contact Benutzer umbenennen New name: Neuer Name: OK Ok SMSWidget Send SMS SMS senden Reciever: Empfänger: TextLabel Send! Senden! SearchResultsWidget M M F W SearchResultsWidgetClass Search results Suchergebnisse Nick Spitzname E-Mail E-Mail Name Vorname Surname Nachname Sex Geschlecht Age Alter Info Info Add contact Benutzer hinzufügen SettingsWidget Default proxy Standard Proxy-Server SettingsWidgetClass SettingsWidget MRIM server host: MRIM Host-Adresse: MRIM server port: MRIM Port: Use proxy Proxy-Server verwenden Proxy type: Typ: Proxy host: Host-Adresse: Proxy port: Port: Proxy username: Benutzername: Password: Passwort: StatusManager Offline Offline Do Not Disturb Nicht stören Free For Chat Chatfreudig Online Online Away Abwesend Invisible Unsichtbar Sick Krank At home Zu Hause Lunch Beim Essen Where am I? Wo bin ich? WC WC Cooking Kochen Walking Spazierengehen I'm an alien! Ich bin ein Alien! I'm a shrimp! Ich bin eine Krabbe! I'm lost :( Ich bin tot :( Crazy %) Verrückt %) Duck Ente Playing Spielen Smoke Rauchen At work In der Arbeit On the meeting Meeting Beer Bier Coffee Kaffee Shovel Schaufeln Sleeping Schlafen On the phone Telefonieren In the university In der Uni School Schule You have the wrong number! Du hast die falsche Nummer! LOL LOL Tongue Zunge raus Smiley Smiley Hippy Hippy Depression Depressiv Crying Heulen Surprised Überrascht Angry Sauer Evil Böse Ass Arsch Heart Herz Crescent Mondsichel Coool! Coool! Horns Figa F*ck you! Leck mich! Skull Schädel Rocket Rakete Ktulhu Goat Must die!! Ich muss sterben!! Squirrel Eichhörnchen Party! Party! Music Musik ? ? XtrazSettings Form Enable Xtraz Xtraz aktivieren Xtraz packages: Xtraz Pakete: Information: Information: authwidgetClass Authorization request Erlaubnisanfrage Authorize Erlauben Reject Ablehnen qutim-0.2.0/languages/de_DE/binaries/0000755000175000017500000000000011273101310021003 5ustar euroelessareuroelessarqutim-0.2.0/languages/de_DE/binaries/imagepub.qm0000644000175000017500000001433511233402241023144 0ustar euroelessareuroelessarBild gesendet: %N (%S Bytes) %UImage sent: %N (%S bytes) %UimagepubPlugin>Bild mit ImagePub-Plugin sendenSend image via ImagePub pluginimagepubPlugin"Sende Bild-URL...Sending image URL...imagepubPluginR%N - Dateiname; %U - URL; %S - Dateigre-%N - file name; %U - file URL; %S - file sizeimagepubSettingsClass O

ImagePub qutIM plugin

v%VERSION%

Send images via public web services

Author:

Alexander Kazarin

boiler@co.ru

(c) 2009

imagepubSettingsClass

imagepubSettingsClassberAboutimagepubSettingsClass.Bilder Hosting-Service:Image hosting service:imagepubSettingsClass$Bild senden Maske:Send image template:imagepubSettingsClassEinstellungenSettingsimagepubSettingsClass*Verstrichene Zeit: %1Elapsed time: %1 uploadDialogDatei: %1File: %1 uploadDialog(Fortschritt: %1 / %2Progress: %1 / %2 uploadDialog8Geschwindigkeit: %1 kBytes/sSpeed: %1 kb/sec uploadDialogSenden... Uploading... uploadDialogAbbrechenCanceluploadDialogClass$Verstrichene Zeit: Elapsed time:uploadDialogClass Datei:File: uploadDialogClassFortschritt: Progress:uploadDialogClass Geschwindigkeit:Speed:uploadDialogClass"Upload gestartet.Upload started.uploadDialogClassSenden... Uploading...uploadDialogClassqutim-0.2.0/languages/de_DE/binaries/connectioncheck.qm0000644000175000017500000000626611245037111024517 0ustar euroelessareuroelessar

Connection check qutIM plugin

v 0.0.7

Author:

Igor 'Sqee' Syromyatnikov

sqee@olimp.ua

connectioncheckSettingsberAboutconnectioncheckSettingsPrfmethode: Check method:connectioncheckSettings(Prfintervall (sek):Check period (sec.):connectioncheckSettingsDeaktiviertDisabledconnectioncheckSettingsAktiviertEnabledconnectioncheckSettingsPingPingconnectioncheckSettingsStatus:Plugin status:connectioncheckSettingsRouting Tabelle Route tableconnectioncheckSettingsEinstellungenSettingsconnectioncheckSettingsqutim-0.2.0/languages/de_DE/binaries/sqlhistory.qm0000644000175000017500000000634211257677212023615 0ustar euroelessareuroelessar %  ~ C  Z .  1bi !1HistoryWindowClass Konto:Account:HistoryWindowClassVon:From:HistoryWindowClass HistoryWindowHistoryWindowClassReturnHistoryWindowClass SuchenSearchHistoryWindowClassVerlaufHistoryQObjectKein Verlauf No History"SqlHistoryNamespace::HistoryWindow<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">SQL History Einstellungen</span></p></body></html>

SQL History Settings

SqlHistorySettingsClassDatenbankname:Database name:SqlHistorySettingsClassHistorySettingsSqlHistorySettingsClassHost-Adresse:Host:SqlHistorySettingsClassBenutzername:Login:SqlHistorySettingsClassPasswort: Password:SqlHistorySettingsClass Port:Port:SqlHistorySettingsClass0SQL History plugin (c) 2009 by Alexander KazarinSqlHistorySettingsClass8SQL VerbindungseinstellungenSQL connection settingsSqlHistorySettingsClassSQL Engine: SQL engine:SqlHistorySettingsClass8Nachrichtenverlauf speichernSave message historySqlHistorySettingsClassBeim ffnen des Nachrichtenfensters die letzten Nachrichten anzeigen:(Show recent messages in messaging windowSqlHistorySettingsClassqutim-0.2.0/languages/de_DE/binaries/yandexnarod.qm0000644000175000017500000002124711233402241023667 0ustar euroelessareuroelessar H0 o Rz2 > a N k$ Bs\ b@ <=B kJ l E  s TdSa o *C~i Einloggen AuthorizationrequestAuthDialogClassCaptcha:requestAuthDialogClass Login:Login:requestAuthDialogClassPasswort: Password:requestAuthDialogClass$Passwort speichernRememberrequestAuthDialogClass about:blankrequestAuthDialogClass FertigDone uploadDialog Senden Uploading uploadDialogAbbrechenCanceluploadDialogClass$Verstrichene Zeit: Elapsed time:uploadDialogClassDatei: File: uploadDialogClassFortschritt: Progress:uploadDialogClass Geschwindigkeit:Speed:uploadDialogClass"Upload gestartet.Upload started.uploadDialogClassSenden... Uploading...uploadDialogClassDatei auswhlen Choose fileyandexnarodManage2Yandex.Narod DateimanagerYandex.Narod file manageryandexnarodManageAktionen:Actions:yandexnarodManageClassZwischenablage ClipboardyandexnarodManageClassSchlieenCloseyandexnarodManageClassDatei lschen Delete FileyandexnarodManageClassDateiliste: Files list:yandexnarodManageClassFormyandexnarodManageClass$Dateiliste abrufen Get FilelistyandexnarodManageClassNew ItemyandexnarodManageClassDatei hochladen Upload FileyandexnarodManageClass line1 line2yandexnarodManageClass2Einloggen Captcha-AnfrageAuthorization captcha requestyandexnarodNetMan0Einloggen fehlgeschlagenAuthorization failedyandexnarodNetManEinloggen OKAuthorizing OKyandexnarodNetManEinloggen...Authorizing...yandexnarodNetMan:Kann Speicher nicht ermittelnCan't get storageyandexnarodNetMan,Kann Datei nicht lesenCan't read fileyandexnarodNetManAbgebrochenCanceledyandexnarodNetMan$Dateien lschen...Deleting files...yandexnarodNetMan*Dateiliste abrufen...Downloading filelist...yandexnarodNetMan&Dateigre ist NullFile size is nullyandexnarodNetMan$Datei(en) gelschtFile(s) deletedyandexnarodNetManBDateiliste abgerufen (%1 Dateien)Filelist downloaded (%1 files)yandexnarodNetMan Hole Speicher...Getting storage...yandexnarodNetMan Starte Upload...Starting upload...yandexnarodNetMan$Upload erfolgreichUploaded successfullyyandexnarodNetMan4berprfung fehlgeschlagenVerifying failedyandexnarodNetManberprfen... Verifying...yandexnarodNetMan Whle Datei fr Choose file for yandexnarodPluginDatei gesendet File sentyandexnarodPlugin<Yandex.Narod Dateien verwaltenManage Yandex.Narod filesyandexnarodPlugin8Sende Datei mit Yandex.NarodSend file via Yandex.NarodyandexnarodPluginR%N - Dateiname; %U - URL; %S - Dateigre-%N - file name; %U - file URL; %S - file sizeyandexnarodSettingsClass n

Yandex.Narod qutIM plugin

svn version

File exchange via Yandex.Narod service

Author:

Alexander Kazarin

boiler@co.ru

(c) 2008-2009

yandexnarodSettingsClass

yandexnarodSettingsClassberAboutyandexnarodSettingsClass LoginLoginyandexnarodSettingsClassPasswortPasswordyandexnarodSettingsClass$Datei senden MaskeSend file templateyandexnarodSettingsClassEinstellungenSettingsyandexnarodSettingsClassZugang testenTest AuthorizationyandexnarodSettingsClassstatusyandexnarodSettingsClassqutim-0.2.0/languages/de_DE/binaries/plugman.qm0000644000175000017500000002436311257677212023042 0ustar euroelessareuroelessar1 I\{9Y#"E /lj S,#s\sMF7@&2j /;. {x 9mA # n  V@* #o 2` 2`%, Mg$ ~X ?d5 b J  (   d RVt n  D . s%c 5։ =zZ,$ \C%r\R̜2 i&*...ChooseCategoryPageDesign/OptikArtChooseCategoryPageCoreChooseCategoryPageBibliothekLibChooseCategoryPage$Bibliothek (*.dll)Library (*.dll)ChooseCategoryPageDBibliothek (*.dylib *.bundle *.so)Library (*.dylib *.bundle *.so)ChooseCategoryPage"Bibliothek (*.so)Library (*.so)ChooseCategoryPageKategorie:Package category:ChooseCategoryPage PluginPluginChooseCategoryPage,Design/Optik auswhlen Select artChooseCategoryPage Select coreChooseCategoryPage(Bibliothek auswhlenSelect libraryChooseCategoryPage WizardPageChooseCategoryPage...ChoosePathPage WizardPageChoosePathPage**ConfigPackagePageDesign/OptikArtConfigPackagePage Autor:Author:ConfigPackagePageKategorie: Category:ConfigPackagePageCoreConfigPackagePageBibliothekLibConfigPackagePageLizenz:License:ConfigPackagePage Name:Name:ConfigPackagePagePaketname: Package name:ConfigPackagePagePlattform: Platform:ConfigPackagePage PluginPluginConfigPackagePage"Kurzbeschreibung:Short description:ConfigPackagePageTyp:Type:ConfigPackagePageURL:Url:ConfigPackagePageVersion:Version:ConfigPackagePage WizardPageConfigPackagePage,Ungltige PaketversionInvalid package versionQObject>"Paketname" ist nicht definiertPackage name is emptyQObject<"Pakettyp" ist nicht definiertPackage type is emptyQObject"Falsche PlattformWrong platformQObjectAktionenActionsmanagerAnwendenApplymanagerNot yet implementedmanager Pakete verwaltenPlugmanmanagerfindmanagerNDownloaden: %1%, Geschwindigkeit: %2 %3Downloading: %1%, speed: %2 %3plugDownloaderMB/sMB/splugDownloaderbytes/s bytes/secplugDownloaderkB/skB/splugDownloaderInstalliere: Installing: plugInstaller(Ungltiges Paket: %1Invalid package: %1 plugInstaller,Neustart erforderlich! Need restart! plugInstallerEntferne: Removing: plugInstallerNKann Archiv nicht entpacken: %1 nach %2#Unable to extract archive: %1 to %2 plugInstallerJKann das Paket nicht installieren: %1Unable to install package: %1 plugInstallerJArchiv kann nicht geffnet werden: %1Unable to open archive: %1 plugInstallerAktualisieren des Pakets %1 nicht mglich: Die installierte Version ist neuer7Unable to update package %1: installed version is later plugInstallerWarnung: Versuche bereits existierende Dateien zu berschreiben!,warning: trying to overwrite existing files! plugInstallerInstallierenInstallplugItemDelegateEntfernenRemoveplugItemDelegateUnbekanntUnknownplugItemDelegateUpgradenUpgradeplugItemDelegateInstalliert installedplugItemDelegate"Downgrade mglichisDowngradableplugItemDelegateInstallierbar isInstallableplugItemDelegateUpgrade mglich isUpgradableplugItemDelegate Pakete verwaltenManage packagesplugManAktionenActions plugManager8nderungen rckgngig machenRevert changes plugManager0Paketliste aktualisierenUpdate packages list plugManagerAlles Upgraden Upgrade all plugManager PaketePackagesplugPackageModel0Ungltige PaketdatenbankBroken package databaseplugXMLHandlerpKonnte Datenbank nicht lesen. Zugriffsrechte berprfen!,Can't read database. Check your pesmissions.plugXMLHandler2Konnte Datei nicht ffnenUnable to open fileplugXMLHandlerUnable to set contentplugXMLHandler8Konnte Datei nicht schreibenUnable to write fileplugXMLHandler.kann Datei nicht ffnenunable to open fileplugXMLHandlerunable to set contentplugXMLHandler<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mirrors</span></p></body></html>

Mirror list

plugmanSettingsO

simple qutIM extentions manager.

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com


2008-2009

plugmanSettingsberAboutplugmanSettingsHinzufgenAddplugmanSettingsBeschreibung DescriptionplugmanSettingsFormplugmanSettingsNameNameplugmanSettingsNot yet implementedplugmanSettingsEinstellungenSettingsplugmanSettingsURLUrlplugmanSettings"Pakete gruppierengroup packagesplugmanSettingsqutim-0.2.0/languages/de_DE/binaries/growlnotification.qm0000644000175000017500000000526111257677212025134 0ustar euroelessareuroelessar

Simple qutIM plugin

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com

plugmanSettingsberAboutplugmanSettingsFormplugmanSettings,Von Datei installierenInstall from fileplugmanSettings2Aus Internet installierenInstall from internetplugmanSettings*Installierte Plugins:Installed plugins:plugmanSettingsEinstellungenSettingsplugmanSettingsqutim-0.2.0/languages/de_DE/binaries/ubuntunotify.qm0000644000175000017500000000061311257677212024142 0ustar euroelessareuroelessar93'B}CHNDHx*^J6YJ6KdqKdM NI,OyI[OcOiSIS,OSĘKTlq=T{T7TKYa>Z,,NgZFO ^h+|jr:B / DOjZDiZ.Z ;~n%L'I12w 5 BQkNNdJ;!J]#n4 f6}aBB 9{ W~ "G " "?e $7z $7z7 4d 9̡P C f F_ hC %R# : > >'E >B 0 HeA X-. R| Y: z9 "Cj -zC :C >& R zZ Y+ } _rG gQ @. * *;V A ՚8 uJ W: ^50> h^. P$ s$ AJ /5 d' x 1P#zF#/t-t.Xt8.u+.ӅVӅ9$?:(A(k7m3"|>V(iRlDie eingegebene E-Mail Adresse ist ungltig oder leer!(Email you entered is not valid or empty!AddContactWidget,Falsche E-Mail AdresseIncorrect emailAddContactWidgetHinzufgenAddAddContactWidgetClassHBenutzer zur Kontaktliste hinzufgenAdd contact to listAddContactWidgetClass,Zur Gruppe hinzufgen: Add to group:AddContactWidgetClassE-Mail:Contact email:AddContactWidgetClassSpitzname:Contact nickname:AddContactWidgetClassZu Hause:Home:AddNumberWidget Mobil:Mobile:AddNumberWidgetTelefonnummern Phone numbersAddNumberWidgetSpeichernSaveAddNumberWidgetArbeit:Work:AddNumberWidgetWFContactDetailsMMContactDetailsKein Avatar No avatarContactDetailsContactDetailsClass ContactDetailsClassContactDetailsClassContactDetailsClassContactDetailsClass ContactDetailsClassContactDetailsClass ContactDetailsClassContactDetailsClass&Benutzer hinzufgen Add contactContactDetailsClass Alter:Age:ContactDetailsClass AvatarAvatarContactDetailsClassGeburtstag: Birthday:ContactDetailsClassSchlieenCloseContactDetailsClass*BenutzerinformationenContact detailsContactDetailsClassE-Mail:E-Mail:ContactDetailsClassWohnort: Living place:ContactDetailsClassVorname:Name:ContactDetailsClassSpitzname: Nickname:ContactDetailsClassKein Avatar No avatarContactDetailsClassPersnliches Personal dataContactDetailsClassGeschlecht:Sex:ContactDetailsClassNachname:Surname:ContactDetailsClass UpdateUpdateContactDetailsClassSternzeichen: Zodiac sign:ContactDetailsClass KontoAccount EditAccountVerbindung Connection EditAccount"Bearbeiten von %1Edit %1 account settings EditAccount Konto bearbeiten Edit account EditAccount8Verwende ProfileinstellungenUse profile settings EditAccountAnnehmenAcceptFileTransferRequestWidgetNSpeicherort fr die Datei(en) auswhlenChoose location to save file(s)FileTransferRequestWidgetAblehnenDeclineFileTransferRequestWidgetDateiname File nameFileTransferRequestWidget.Eingehende Datei von %1File transfer request from %1FileTransferRequestWidgetDatei(en):File(s):FileTransferRequestWidgetFormFileTransferRequestWidgetVon:From:FileTransferRequestWidget GreSizeFileTransferRequestWidgetGesamtgre: Total size:FileTransferRequestWidget/s/secFileTransferWidgetAbbrechenCancelFileTransferWidgetSchlieenCloseFileTransferWidgetLFenster nach der bertragung schlieen&Close window after tranfer is finishedFileTransferWidgetFertig!Done!FileTransferWidgetbertragen:Done:FileTransferWidgetDateigre: File size:FileTransferWidget0Dateibertragung mit: %1File transfer with: %1FileTransferWidgetDateiname: Filename:FileTransferWidgetFormFileTransferWidgetEmpfangen...Getting file...FileTransferWidget$Verstrichene Zeit: Last time:FileTransferWidget ffnenOpenFileTransferWidget$Verbleibende Zeit:Remained time:FileTransferWidgetSenden...Sending file...FileTransferWidget Geschwindigkeit:Speed:FileTransferWidgetFortschritt:Status:FileTransferWidgetWarten... Waiting...FileTransferWidgetGeneralSettingsGeneralSettingsFDen letzten Status wiederherstellen%Restore status at application's startGeneralSettings*Zeige TelefonkontakteShow phone contactsGeneralSettings\Statusnachrichten in der Kontaktliste anzeigen Show status text in contact listGeneralSettingsE-Mail:E-mail:LoginFormClass LoginFormLoginFormClassPasswort: Password:LoginFormClass&Benutzer hinzufgen Add contact MRIMClient0Telefonnummer hinzufgenAdd phone number MRIMClient6Zur Kontaktliste hinzufgen Add to list MRIMClient@Erlaubnisanfrage akzeptiert von "Authorization request accepted by  MRIMClient*Benutzer autorisierenAuthorize contact MRIMClientNKontaktlisten-Operation fehlgeschlagen!Contact list operation failed! MRIMClient Benutzer lschenDelete contact MRIMClient,Gruppenlimit erreicht!Group limit reached! MRIMClient,Interner Serverfehler!Internal server error! MRIMClientInvalid info provided! MRIMClient8Nachrichten in der Mailbox: Messages in mailbox:  MRIMClient8In andere Gruppe verschieben Move to group MRIMClientTLeider ist keine MPOP-Sitzung verfgbar...+No MPOP session available for you, sorry... MRIMClient.Kein Benutzer gefunden! No such user! MRIMClientMailbox ffnen Open mailbox MRIMClientBitte autorisieren und mich zu deiner Kontaktliste hinzufgen! Danke! E-Mail: >Pls authorize and add me to your contact list! Thanks! Email:  MRIMClient&Benutzer umbenennenRename contact MRIMClient.Erlaubnisanfrage sendenRequest authorization MRIMClientBenutzer suchenSearch contacts MRIMClientSMS sendenSend SMS MRIMClient~Der Server hat die Verbindung aus unbekanntem Grund getrennt...2Server closed the connection for unknown reason... MRIMClientDer Server hat die Verbindung getrennt. Ein anderer Client ist mit diesem Login eingeloggt!GServer closed the connection. Another client with same login connected! MRIMClientDer Server hat die Verbindung getrennt. Anmeldung fehlgeschlagen!4Server closed the connection. Authentication failed! MRIMClientLeider wurden keine Benutzer gefunden :( evtl. Suchparameter ndernm$ #d%n00̺4`G4R5N5`Y60i70y8808GHNDHw9HHIAJ qJ BJ+J6WJ6xK KdWNKʘKtL7%L3LaMy^ZM5fM6fMMnGM RMAsM6NRNgOqOjz|Ojzu6PJP~#P9QQRQSyƴSǹSSSĘ]SĘT+TAT|tTTTUq7IVHkVVI8VAVմV̌BlWiz}WizvWWWwYwpZgZgZvK ZpZZ~[L8[dX\\x\\F]s^c_þe*g::hni@pX/w7xs(Ӯ"0 ȄE&/.rZV>Z{U9Gјg֍W~$ȡ ~X ~x x$ع6o~6o~tW7|v0r{gW2Wr:j (b57xVn29:??qN%+3al{hshs8)/zYiakhk ~Fp? 6C]5EpGLƜ)zƜP+5C0^c .nפm~ K8 T_] ^*9-D>1K >6Oλ@sDHKi"Z`QxduZeZfU@fuggAhIVq%qYumw~=v^pא/OpjPpıRBJmz\I‰hê KCʸq4^A4.[4. oSuhS=j ju~l3 1 \1# ~ 'X 1 94gɖ @ 7d^ ۠_ ~T7 <Z S j^& j Ľ, ȏ.) ȣc < ʟ.ݨ 'd C C ׭jc ۊZ 8C ^ ) 3d L %n Ij JVjL Njz Rj Tj Vk wk2 {k {k` z 't , 1)1h 7YG) CY F J Ws ce c dh di#I f g9 hPM k# wǹK wǹw } c& %4q % 4 85 /$) /$? /N :Z0 > >B >v K J10 *!+ 0 0Q @o 0 8! |9 8 LJ Țm K{ . T}l yT dy ۰ F 3 F P (% b1Y f 7œ ) ]U NU YVA 0% Sn Snwd d$O d/ S" Ss #0 # 0EaUU 2. d B3ھ CU+ R?% TdT a d nt]% s vI" vI [  p ͸ M˦ W% W {"7  K@ # #  q qL q} q q r rA rr r // j Džn Ma M, 2 4B \Q s! 2v 2u Apg Asg Ath AuhF Avhv f E E E T 0P P2 P uB RI %z '1 (cZ ({ -a /6 53 >Pgt M}Z N$ N0 R͊j Rb V* cP fu j tQ0 2 U C l Cg ޔ a e H3E 44 V d hK d T L $W bsr SЧ l - Imp Imy C< C ( P  u\  L { dqfC _Ѭ &T8 8s Z c Z~ `>sN `>s[_ cB dt1< ls o;e o;e o;f qL҂ qL 8Qf T T) Q& ( < Ĭ~ Ĭ$ <j ƍ 82 ? A, mk K<$~bfv/`!ru@#$#Vem_'S^+b!+bz7drp7`9G:K~44ei MP#jPZG9No^M |=ʭ%*@ʭ%^s GKEUGە.PR`Xas۴ax |fJgkJNk_m356m3tAX(#&c7&T%&TGnuQ>0VNi#C"Bearbeiten von %1 Editing %1AccountEditDialogAddAccountFormAddAccountFormClassPasswort: Password:AddAccountFormClass$Passwort speichern Save passwordAddAccountFormClassUIN:UIN:AddAccountFormClassContactSettingsContactSettingsClass"Ignorieren" - Symbol anzeigen, wenn der Benutzer in der "Ignorieren-Liste" ist,Show "ignore" icon if contact in ignore listContactSettingsClass"Unsichtbar" - Symbol anzeigen, wenn der Benutzer in der "Unsichtbar-Liste" ist2Show "invisible" icon if contact in invisible listContactSettingsClass"Sichtbar" - Symbol anzeigen, wenn der Benutzer in der "Sichtbar-Liste" ist.Show "visible" icon if contact in visible listContactSettingsClass6Geburtstagsballons anzeigenShow birthday/happy iconContactSettingsClass2x-Status Symbole anzeigenShow contact xStatus iconContactSettingsClass4x-Statusnachricht anzeigen+Show contact's xStatus text in contact listContactSettingsClassL"Nicht autorisiert" - Symbole anzeigenShow not authorized iconContactSettingsClassDatei senden Send file FileTransfer8<b>Abwesend seit:</b> %1<br>Away since: %1
QObjectD<b>Externe IP:</b> %1.%2.%3.%4<br>#External ip: %1.%2.%3.%4
QObjectD<b>Interne IP:</b> %1.%2.%3.%4<br>#Internal ip: %1.%2.%3.%4
QObjectF<b>Nicht verfgbar seit:</b> %1<br>N/A since: %1
QObjectN<b>Online seit:</b> %1d %2h %3m %4s<br>'Online time: %1d %2h %3m %4s
QObjectD<b>Mglicher Client:</b> %1</font>!Possible client: %1
QObject><b>Mglicher Client:</b> %1<br>Possible client: %1
QObject><b>Registriert seit:</b> %1<br>Reg. date: %1
QObject<<b>Eingeloggt seit:</b> %1<br>Signed on: %1
QObjectV<font size='2'><b>Abwesend seit:</b> %1<br>(Away since: %1
QObjectp<font size='2'><b>Externe IP:</b> %1.%2.%3.%4<br></font>9External ip: %1.%2.%3.%4
QObjectp<font size='2'><b>Interne IP:</b> %1.%2.%3.%4<br></font>9Internal ip: %1.%2.%3.%4
QObject^<font size='2'><b>Zuletzt online:</b> %1</font>,Last Online: %1QObjectd<font size='2'><b>Nicht verfgbar seit:</b> %1<br>'N/A since: %1
QObjectl<font size='2'><b>Online seit:</b> %1d %2h %3m %4s<br>6Online time: %1d %2h %3m %4s
QObject Alle Dateien (*) All files (*)QObjectKontakteContactsQObjectAllgemein ICQ GeneralQObjectDatei ffnen Open FileQObjectStatusoptionenStatusesQObjectErlauben AuthorizeacceptAuthDialogClassAblehnenDeclineacceptAuthDialogClassacceptAuthDialogacceptAuthDialogClass,Experten-EinstellungenAOL expert settings accountEditAnwendenApply accountEdit4Bentigt AuthentifizierungAuthentication accountEditDBeim Starten automatisch verbindenAutoconnect on start accountEditAbbrechenCancel accountEditClient build number: accountEditClient distribution number: accountEditClient id number: accountEdit Client id: accountEditClient lesser version: accountEditClient major version: accountEditClient minor version: accountEditForm accountEditHTTP accountEditHost-Adresse:Host: accountEdit"ICQ Einstellungen Icq settings accountEdit8Verbindung aufrecht erhaltenKeep connection alive accountEdit8Port fr eingehende Dateien:Listen port for file transfer: accountEdit KeinerNone accountEditOkOK accountEditPasswort: Password: accountEditPort: accountEditProxy-ServerProxy accountEdit8Verbindung ber Proxy-ServerProxy connection accountEditSOCKS 5 accountEdit`Den letzten Status beim Starten wiederherstellenSave my status on exit accountEdit&Passwort speichern:Save password: accountEditSicherer Login Secure login accountEdit Seq first id: accountEdit ServerServer accountEditTyp:Type: accountEditBenutzername: User name: accountEdit login.icq.com accountEdit"Hinzufgen von %1Add %1addBuddyDialogVerschiebenMoveaddBuddyDialogHinzufgenAddaddBuddyDialogClassGruppe:Group:addBuddyDialogClass"Angezeigter Name: Local name:addBuddyDialogClassaddBuddyDialogaddBuddyDialogClass Name:Name:addRenameDialogClassOkOKaddRenameDialogClassReturnaddRenameDialogClassaddRenameDialogaddRenameDialogClassKonto gesperrt Suspended accountcloseConnection~Reservierungen von dieser IP-Adresse haben das Maximum erreichtK The users num connected from this IP has reached the maximum (reservation)closeConnectionPKonto gesperrt wegen deinem Alter (< 13)0Account suspended because of your age (age < 13)closeConnectiondIhre UIN wird auf einem anderen Computer verwendet&Another client is loggin with this uincloseConnection6Schlechter Datenbank-StatusBad database statuscloseConnection4Schlechter Resolver-StatusBad resolver statuscloseConnectionKeine Anmeldung bei ICQ mglich. In ein paar Minuten wieder versuchen=Can't register on the ICQ network. Reconnect in a few minutescloseConnectionLogin-Vorgang fehlgeschlagen! Bitte stellen Sie eine Verbindung mit dem Internet herConnection ErrorcloseConnection(Datenbank-Linkfehler DB link errorcloseConnection*Datenbank-Sendefehler DB send errorcloseConnection Gelschtes KontoDeleted accountcloseConnection$Abgelaufenes KontoExpired accountcloseConnection2Falsche UIN oder PasswortIncorrect nick or passwordcloseConnection`Interner Client-Fehler (bad input to authorizer)/Internal client error (bad input to authorizer)closeConnectionInterner FehlerInternal errorcloseConnection"Ungltige SecurIDInvalid SecurIDcloseConnection Ungltiges KontoInvalid accountcloseConnection2Ungltige DatenbankfelderInvalid database fieldscloseConnection6Ungltige UIN oder PasswortInvalid nick or passwordcloseConnection8Unpassende UIN oder PasswortMismatch nick or passwordcloseConnection4Kein Zugriff zur DatenbankNo access to databasecloseConnection2Kein Zugriff zum ResolverNo access to resolvercloseConnectionSie haben zu oft versucht sich anzumelden/zu reservieren! Versuchen Sie es in einigen Minuten wiederKRate limit exceeded (reservation). Please try to reconnect in a few minutescloseConnectionSie haben zu oft versucht sich anzumelden! Versuchen Sie es in einigen Minuten wieder=Rate limit exceeded. Please try to reconnect in a few minutescloseConnection0Link-ReservierungsfehlerReservation link errorcloseConnection.Map-ReservierungsfehlerReservation map errorcloseConnection(Resevierungs-TimeoutReservation timeoutcloseConnection0Service temporr offlineService temporarily offlinecloseConnection@Service temporr nicht verfgbarService temporarily unavailablecloseConnectionzVerbindungen von dieser IP-Adresse haben das Maximum erreichtZur "Sichtbar-Liste" hinzufgenAdd to visible listcontactListTree4Benutzer hinzufgen/suchenAdd/find userscontactListTreeNDem Benutzer erlauben mich hinzuzufgenAllow contact to add mecontactListTree6Erlaubnisanfrage akzeptiertAuthorization acceptedcontactListTree4Erlaubnisanfrage abgelehntAuthorization declinedcontactListTree.Erlaubnisanfrage sendenAuthorization requestcontactListTree(Mein Passwort ndernChange my passwordcontactListTree*BenutzerinformationenContact detailscontactListTreebDer Benutzer untersttzt keine Dateibertragungen&Contact does not support file transfercontactListTree>Status des Benutzers berprfenContact status checkcontactListTree<UIN in Zwischenablage kopierenCopy UIN to clipboardcontactListTree Gruppe erstellen Create groupcontactListTree%1 lschen Delete %1contactListTree Benutzer lschenDelete contactcontactListTree@Aus "Ignorieren-Liste" entfernenDelete from ignore listcontactListTree@Aus "Unsichtbar-Liste" entfernenDelete from invisible listcontactListTree<Aus "Sichtbar-Liste" entfernenDelete from visible listcontactListTreeGruppe lschen Delete groupcontactListTree:Gruppe "%1" wirklich lschen?Delete group "%1"?contactListTreeNotiz ndern Edit notecontactListTree$NachrichtenverlaufMessage historycontactListTree(%1 verschieben nach: Move %1 to:contactListTree8In andere Gruppe verschieben Move to groupcontactListTreeNeue Gruppe New groupcontactListTreeBDas Passwort wurde nicht gendertPassword is not changedcontactListTreeNDas Passwort wurde erfolgreich gendert Password is successfully changedcontactListTreePrivatlisten Privacy listscontactListTree*Statusnachricht lesenRead away messagecontactListTree.x-Statusnachricht lesenRead custom statuscontactListTreebMich aus der Kontaktliste des Benutzers entfernen!Remove myself from contact's listcontactListTree&Benutzer umbenennenRename contactcontactListTree"Gruppe umbenennen Rename groupcontactListTree Nachricht senden Send messagecontactListTreeMehrfach senden Send multiplecontactListTree>Mein ICQ-Profil anzeigen/ndernView/change my detailscontactListTreeJhat dich zur Kontaktliste hinzugefgtYou were addedcontactListTreezu Hauseat homecontactListTreein der Arbeitat workcontactListTreebeim Essen having lunchcontactListTreeist depressiv in depressioncontactListTreeist abwesendis awaycontactListTreenicht strenis dndcontactListTreeist bseis evilcontactListTreeist chatfreudigis free for chatcontactListTreeist unsichtbar is invisiblecontactListTree&ist nicht verfgbaris n/acontactListTreeist beschftigt is occupiedcontactListTreeist offline is offlinecontactListTreeist online is onlinecontactListTree??customStatusDialogBseAngrycustomStatusDialogBrowsenBrowsingcustomStatusDialogBusinessBusinesscustomStatusDialog KaffeeCoffeecustomStatusDialogFrierenColdcustomStatusDialog HeulenCryingcustomStatusDialogBier trinken Drinking beercustomStatusDialog EssenEatingcustomStatusDialog PanikFearcustomStatusDialog Krank Feeling sickcustomStatusDialogSpielenGamingcustomStatusDialogSpa haben Having funcustomStatusDialogUnterwegs In tansportcustomStatusDialogMusik hrenListening to musiccustomStatusDialogVerliebtLovecustomStatusDialogTreffenMeetingcustomStatusDialog Auf der ToiletteOn WCcustomStatusDialogTelefonieren On the phonecustomStatusDialog PRO 7PRO 7customStatusDialog PartyPartycustomStatusDialogPicknickPicniccustomStatusDialog LesenReadingcustomStatusDialogSexSexcustomStatusDialog FilmenShootingcustomStatusDialogEinkaufenShoppingcustomStatusDialogSchlafenSleepingcustomStatusDialogRauchenSmokingcustomStatusDialog SportSportcustomStatusDialog LernenStudyingcustomStatusDialog SurfenSurfingcustomStatusDialog Im Bad Taking a bathcustomStatusDialogNachdenkenThinkingcustomStatusDialogMdeTiredcustomStatusDialog(Sein oder nicht seinTo be or not to becustomStatusDialogSchreibenTypingcustomStatusDialogFernsehen Watching TVcustomStatusDialogArbeitenWorkingcustomStatusDialogAbbrechenCancelcustomStatusDialogClassAuswhlenChoosecustomStatusDialogClass&Persnlicher Status Custom statuscustomStatusDialogClass@Mein Geburtstags-Symbol anzeigenSet birthday/happy flagcustomStatusDialogClasspDer Benutzer wird aus der Kontaktliste gelscht. Sicher?&Contact will be deleted. Are you sure?deleteContactDialogClass4Nachrichtenverlauf lschenDelete contact historydeleteContactDialogClassNeinNodeleteContactDialogClassJaYesdeleteContactDialogClassdeleteContactDialogdeleteContactDialogClass Alle Dateien (*) All files (*)fileRequestWindowDatei speichern Save FilefileRequestWindowAnnehmenAcceptfileRequestWindowClassAblehnenDeclinefileRequestWindowClassDateiname: File name:fileRequestWindowClass Eingehende Datei File requestfileRequestWindowClassDateigre: File size:fileRequestWindowClassVon:From:fileRequestWindowClassIP-Adresse:IP:fileRequestWindowClass BfileTransferWindow GBfileTransferWindow KBfileTransferWindow MBfileTransferWindow/sfileTransferWindowAkzeptiertAcceptedfileTransferWindowfDateibertragung wurde vom Remotebenutzer abgelehntDeclined by remote userfileTransferWindow FertigDonefileTransferWindow(Dateibertragung: %1File transfer: %1fileTransferWindowEmpfangen... Getting...fileTransferWindowSenden... Sending...fileTransferWindowWarten... Waiting...fileTransferWindow1/1fileTransferWindowClassAbbrechenCancelfileTransferWindowClassAktuelle Datei: Current file:fileTransferWindowClassbertragen:Done:fileTransferWindowClassDateigre: File size:fileTransferWindowClass Dateibertragung File transferfileTransferWindowClassDatei(en):Files:fileTransferWindowClass$Verstrichene Zeit: Last time:fileTransferWindowClass ffnenOpenfileTransferWindowClass$Verbleibende Zeit:Remained time:fileTransferWindowClass2IP-Adresse des Absenders: Sender's IP:fileTransferWindowClass Geschwindigkeit:Speed:fileTransferWindowClassFortschritt:Status:fileTransferWindowClassSonstiges Additional icqAccountZu HauseAt Home icqAccountIn der ArbeitAt Work icqAccountAbwesendAway icqAccount&Persnlicher Status Custom status icqAccountNicht strenDND icqAccountDepressiv Depression icqAccountBseEvil icqAccountChatfreudig Free for chat icqAccountUnsichtbar Invisible icqAccount&Unsichtbar fr alleInvisible for all icqAccountJUnsichtbar nur fr "Unsichtbar-Liste"!Invisible only for invisible list icqAccountBeim EssenLunch icqAccountNicht verfgbarNA icqAccountBeschftigtOccupied icqAccountOfflineOffline icqAccount OnlineOnline icqAccountPrivatstatusPrivacy status icqAccount"Sichtbar fr alleVisible for all icqAccountBSichtbar nur fr die KontaktlisteVisible only for contact list icqAccountBSichtbar nur fr "Sichtbar-Liste"Visible only for visible list icqAccount6liest deine Statusnachrichtis reading your away message icqAccount:liest deine x-Statusnachricht is reading your x-status message icqAccount-icqSettingsClassPKonto-Schaltflche und Systemtray-SymbolAccount button and tray iconicqSettingsClassErweitertAdvancedicqSettingsClass Apple RomanicqSettingsClassBig5icqSettingsClass Big5-HKSCSicqSettingsClassClient ID: Client ID:icqSettingsClass&Client Fhigkeiten:Client capability list:icqSettingsClassCodepage: (Hinweis: Fr Deutschland am besten ISO 8859-15 oder Windows-1250 einstellen. UTF-8 macht manchmal Probleme)=Codepage: (note that online messages use utf-8 in most cases)icqSettingsClassBKeine Anfragen fr Avatare senden Don't send requests for avatartsicqSettingsClassEUC-JPicqSettingsClassEUC-KRicqSettingsClass GB18030-0icqSettingsClassIBM 850icqSettingsClassIBM 866icqSettingsClassIBM 874icqSettingsClassICQ 2002/2003aicqSettingsClass ICQ 2003b ProicqSettingsClassICQ 5icqSettingsClassICQ 5.1icqSettingsClassICQ 6icqSettingsClass ICQ Lite 4icqSettingsClass ISO 2022-JPicqSettingsClass ISO 8859-1icqSettingsClass ISO 8859-10icqSettingsClass ISO 8859-13icqSettingsClass ISO 8859-14icqSettingsClass ISO 8859-15icqSettingsClass ISO 8859-16icqSettingsClass ISO 8859-2icqSettingsClass ISO 8859-3icqSettingsClass ISO 8859-4icqSettingsClass ISO 8859-5icqSettingsClass ISO 8859-6icqSettingsClass ISO 8859-7icqSettingsClass ISO 8859-8icqSettingsClass ISO 8859-9icqSettingsClass Iscii-BngicqSettingsClass Iscii-DevicqSettingsClass Iscii-GjricqSettingsClass Iscii-KndicqSettingsClass Iscii-MlmicqSettingsClass Iscii-OriicqSettingsClass Iscii-PnjicqSettingsClass Iscii-TlgicqSettingsClass Iscii-TmlicqSettingsClass JIS X 0201icqSettingsClass JIS X 0208icqSettingsClassKOI8-RicqSettingsClassKOI8-UicqSettingsClassMac ICQicqSettingsClassAllgemeinMainicqSettingsClass MuleLao-1icqSettingsClass$Protokoll-Version:Protocol version:icqSettingsClassQIP 2005icqSettingsClass QIP InfiumicqSettingsClassROMAN8icqSettingsClassPNach Verbindungsabbruch wieder verbindenReconnect after disconnecticqSettingsClass Shift-JISicqSettingsClass8Persnlichen Status anzeigenShow custom status iconicqSettingsClass:Den zuletzt gewhlen anzeigenShow last choosenicqSettingsClass(Hauptstatus anzeigenShow main status iconicqSettingsClassTIS-620icqSettingsClassTSCIIicqSettingsClassUTF-16icqSettingsClassUTF-16BEicqSettingsClassUTF-16LEicqSettingsClassUTF-8icqSettingsClassWINSAMI2icqSettingsClass Windows-1250icqSettingsClass Windows-1251icqSettingsClass Windows-1252icqSettingsClass Windows-1253icqSettingsClass Windows-1254icqSettingsClass Windows-1255icqSettingsClass Windows-1256icqSettingsClass Windows-1257icqSettingsClass Windows-1258icqSettingsClass icqSettingsicqSettingsClassqutIMicqSettingsClassMehrfach senden Send multiplemultipleSending1multipleSendingClass&SendenSendmultipleSendingClassAnhaltenStopmultipleSendingClassmultipleSendingmultipleSendingClass4Bentigt AuthentifizierungAuthenticationnetworkSettingsClassVerbindung ConnectionnetworkSettingsClassHTTPnetworkSettingsClassHost-Adresse:Host:networkSettingsClass8Verbindung aufrecht erhaltenKeep connection alivenetworkSettingsClass8Port fr eingehende Dateien:Listen port for file transfer:networkSettingsClass KeinerNonenetworkSettingsClassPasswort: Password:networkSettingsClassPort:networkSettingsClassProxy-ServerProxynetworkSettingsClass8Verbindung ber Proxy-ServerProxy connectionnetworkSettingsClassSOCKS 5networkSettingsClassSicherer Login Secure loginnetworkSettingsClass ServerServernetworkSettingsClassTyp:Type:networkSettingsClassBenutzername: User name:networkSettingsClass login.icq.comnetworkSettingsClassnetworkSettingsnetworkSettingsClassAbbrechenCancelnoteWidgetClassOkOKnoteWidgetClass noteWidgetnoteWidgetClassEin Netzwerkfehler ist aufgetreten (z.B. das Netzwerkkabel wurde pltzlich ausgesteckt).ZAn error occurred with the network (e.g., the network cable was accidentally plugged out). oscarProtocol^Ein unbekannter Netzwerkfehler ist aufgetreten.'An unidentified network error occurred. oscarProtocolDie Verbindung wurde vom Peer zurckgewiesen (oder Zeitberschreitung).6The connection was refused by the peer (or timed out). oscarProtocol\Die Host-Adresse konnte nicht gefunden werden.The host address was not found. oscarProtocolDas lokale System hat keine freien Ressourcen mehr (z.B. zu viele Sockets).?The local system ran out of resources (e.g., too many sockets). oscarProtocolXDer Remote-Host hat die Verbindung getrennt.&The remote host closed the connection. oscarProtocolDer geforderte Socket-Vorgang wird vom lokalen Betriebssystem nicht untersttzt (z.B. fehlende IPv6-Untersttzung).kThe requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). oscarProtocolDer Socket benutzt einen Proxy der eine Authentifizierung bentigt.CThe socket is using a proxy, and the proxy requires authentication. oscarProtocolDer Socket-Vorgang ist fehlgeschlagen, weil die Anwendung nicht die erforderlichen Rechte hatte.SThe socket operation failed because the application lacked the required privileges. oscarProtocolNZeitberschreitung beim Socket-Vorgang.The socket operation timed out. oscarProtocolZDas Besttigungspasswort stimmt nicht bereinConfirm password does not matchpasswordChangeDialog2Das Passwort ist ungltigCurrent password is invalidpasswordChangeDialogPasswortfehlerPassword errorpasswordChangeDialog ndernChangepasswordChangeDialogClassPasswort ndernChange passwordpasswordChangeDialogClassAltes Passwort:Current password:passwordChangeDialogClassNeues Passwort: New password:passwordChangeDialogClass4Neues Passwort besttigen:Retype new password:passwordChangeDialogClass0Passwort fr %1 eingebenEnter %1 passwordpasswordDialog"Passwort eingebenEnter your passwordpasswordDialogClassOkOKpasswordDialogClass$Passwort speichern Save passwordpasswordDialogClassDein Passwort:Your password:passwordDialogClassPrivatlisten Privacy listsprivacyListWindowDprivacyListWindowClassIprivacyListWindowClass Ignorieren-Liste Ignore listprivacyListWindowClass Unsichtbar-ListeInvisible listprivacyListWindowClassSpitzname Nick nameprivacyListWindowClassUINUINprivacyListWindowClassSichtbar-Liste Visible listprivacyListWindowClassprivacyListWindowprivacyListWindowClass

readAwayDialogClassSchlieenClosereadAwayDialogClassReturnreadAwayDialogClassreadAwayDialogreadAwayDialogClass ErlaubnisanfrageAuthorization requestrequestAuthDialogClass SendenSendrequestAuthDialogClass6Zur Kontaktliste hinzufgenAdd to contact list searchUser4Benutzer hinzufgen/suchenAdd/find users searchUser ImmerAlways searchUserAutorisieren Authorize searchUser*BenutzerinformationenContact details searchUser>Status des Benutzers berprfenContact status check searchUser FertigDone searchUserNichts gefunden Nothing found searchUserSuchen... Searching searchUser Nachricht senden Send message searchUser13-17searchUserClass18-22searchUserClass23-29searchUserClass30-39searchUserClass40-49searchUserClass50er50'ssearchUserClass50-59searchUserClass60er60'ssearchUserClass60+searchUserClass70er70'ssearchUserClass80er80'ssearchUserClassAkademikerAcademicsearchUserClass KontoAccountsearchUserClassVerwaltungAdministrativesearchUserClassMehrAdvancedsearchUserClassAfghanistan AfghanistansearchUserClassAfrikaans AfrikaanssearchUserClass Alter:Age:searchUserClassAlbanienAlbaniasearchUserClassAlbanischAlbaniansearchUserClassAlgerienAlgeriasearchUserClass$Amerikanisch SamoaAmerican SamoasearchUserClassAndorraAndorrasearchUserClass AngolaAngolasearchUserClassAnguillaAnguillasearchUserClassAntiguaAntiguasearchUserClass"Antigua & BarbudaAntigua & BarbudasearchUserClassAntillenAntillessearchUserClassArabischArabicsearchUserClassArgentinien ArgentinasearchUserClassArmenienArmeniasearchUserClassArmenischArmeniansearchUserClass KunstArtsearchUserClass$Kunst/UnterhaltungArt/EntertainmentsearchUserClass ArubaArubasearchUserClassAscension-InselAscensionIslandsearchUserClassAstronomie AstronomysearchUserClassAudio und VideoAudio and visualsearchUserClassAustralien AustraliasearchUserClasssterreichAustriasearchUserClassAutorisieren AuthorizesearchUserClassAserbaidschan AzerbaijansearchUserClassBahamasBahamassearchUserClassBahrainBahrainsearchUserClassBangladesch BangladeshsearchUserClassBarbadosBarbadossearchUserClassBarbudaBarbudasearchUserClassBelarusBelarussearchUserClassBelgienBelgiumsearchUserClass BelizeBelizesearchUserClass BeninBeninsearchUserClassBermudaBermudasearchUserClassBhojpuriBhojpurisearchUserClass BhutanBhutansearchUserClassBolivienBoliviasearchUserClassBotswanaBotswanasearchUserClassBrasilienBrazilsearchUserClass BruneiBruneisearchUserClassBulgarienBulgariasearchUserClassBulgarisch BulgariansearchUserClassBurkina Faso Burkina FasosearchUserClassBirmanischBurmesesearchUserClassBurundiBurundisearchUserClassWirtschaftBusiness & EconomysearchUserClass0Geschftliche LeistungenBusiness servicessearchUserClassKambodschaCambodiasearchUserClassKamerunCameroonsearchUserClass KanadaCanadasearchUserClass"Kanarische InselnCanary IslandssearchUserClassKantonesisch CantonesesearchUserClass AutosCarssearchUserClassKatalanischCatalansearchUserClassKaiman InselnCayman IslandssearchUserClass*Fan einer BerhmtheitCelebrity FanssearchUserClass TschadChadsearchUserClassChile, RepublikChile, Rep. ofsearchUserClass ChinaChinasearchUserClassChinesischChinesesearchUserClassWeihnachtsinselChristmas IslandsearchUserClassOrt:City:searchUserClassFelder leerenClearsearchUserClassKleidungClothingsearchUserClassSammeln CollectionssearchUserClassSchlerCollege StudentsearchUserClassKolumbienColombiasearchUserClass6Gemeinwesen & SozialbereichCommunity & SocialsearchUserClassKomorenComorossearchUserClassComputer ComputerssearchUserClass,UnterhalungselektronikConsumer electronicssearchUserClassCook Inseln CookIslandssearchUserClassCosta Rica Costa RicasearchUserClass Land:Country:searchUserClassKroatienCroatiasearchUserClassKroatischCroatiansearchUserClassKubaCubasearchUserClass$Kultur & LiteraturCulture & LiteraturesearchUserClass ZypernCyprussearchUserClassTschechischCzechsearchUserClassTschechien Czech Rep.searchUserClassDnischDanishsearchUserClassDnemarkDenmarksearchUserClassDiego Garcia Diego GarciasearchUserClassGeschiedenDivorcedsearchUserClassDschibutiDjiboutisearchUserClass@In bisherigen Ergebnissen suchenDo not clear previous resultssearchUserClassDominicaDominicasearchUserClass.Dominikanische RepublikDominican Rep.searchUserClassNiederlndischDutchsearchUserClassEquadorEcuadorsearchUserClass Lehrer EducationsearchUserClassgyptenEgyptsearchUserClassEl Salvador El SalvadorsearchUserClass E-MailEmailsearchUserClassVerlobtEngagedsearchUserClass&Ingenieur/Techniker EngineeringsearchUserClassEnglischEnglishsearchUserClassUnterhaltung EntertainmentsearchUserClassEritreaEritreasearchUserClassEsperanto EsperantosearchUserClassEstlandEstoniasearchUserClassEstnischEstoniansearchUserClassthiopienEthiopiasearchUserClassFrer InselnFaeroe IslandssearchUserClassFalklandinselnFalkland IslandssearchUserClass FarsiFarsisearchUserClassWeiblichFemalesearchUserClassFidschiFijisearchUserClass0Finanzen und UnternehmenFinance and corporatesearchUserClass,FinanzdienstleistungenFinancial ServicessearchUserClassFinnlandFinlandsearchUserClassFinnischFinnishsearchUserClassVorname First namesearchUserClassVorname: First name:searchUserClassFitnessFitnesssearchUserClassFrankreichFrancesearchUserClassFranzsischFrenchsearchUserClass$Franzsisch Guiana French GuianasearchUserClass,Franzsisch PolynesienFrench PolynesiasearchUserClass*Franzsische AntillenFrenchAntillessearchUserClass GabunGabonsearchUserClassGlischGaelicsearchUserClass GambiaGambiasearchUserClass SpieleGamessearchUserClass Geschlecht/Alter Gender/AgesearchUserClassGeschlecht:Gender:searchUserClassGeorgienGeorgiasearchUserClassDeutschGermansearchUserClassDeutschlandGermanysearchUserClass GhanaGhanasearchUserClassGibraltar GibraltarsearchUserClassRegierung GovernmentsearchUserClassGriechenlandGreecesearchUserClassGriechischGreeksearchUserClassGrnland GreenlandsearchUserClassGrenadaGrenadasearchUserClassGuadeloupe GuadeloupesearchUserClassGuatemala GuatemalasearchUserClass GuineaGuineasearchUserClassGuinea-Bissau Guinea-BissausearchUserClass GuyanaGuyanasearchUserClass HaitiHaitisearchUserClass0Gesundheit und SchnheitHealth and beautysearchUserClassHebrischHebrewsearchUserClassAbiturientHigh School StudentsearchUserClass HindiHindisearchUserClass HobbysHobbiessearchUserClassHausfrau/-mannHomesearchUserClass:Haustechnik /-automatisierungHome automationsearchUserClassHondurasHondurassearchUserClassHong Kong Hong KongsearchUserClass"HaushaltsprodukteHousehold productssearchUserClassUngarisch HungariansearchUserClass UngarnHungarysearchUserClassICQ - HilfeICQ - Providing HelpsearchUserClass IslandIcelandsearchUserClassIslndisch IcelandicsearchUserClass IndienIndiasearchUserClassIndonesien IndonesiasearchUserClassIndonesisch IndonesiansearchUserClassInteressen: Interests:searchUserClassInternetInternetsearchUserClassIrakIraqsearchUserClass IrlandIrelandsearchUserClass IsraelIsraelsearchUserClassItalienischItaliansearchUserClassItalienItalysearchUserClassJamaikaJamaicasearchUserClass JapanJapansearchUserClassJapanischJapanesesearchUserClassJordanienJordansearchUserClassKasachstan KazakhstansearchUserClass KeniaKenyasearchUserClass Schlsselwrter: Keywords:searchUserClassKambodschanischKhmersearchUserClassKirbatiKiribatisearchUserClassKorea (Nord) Korea, NorthsearchUserClassKorea (Sd) Korea, SouthsearchUserClassKoreanischKoreansearchUserClass KuwaitKuwaitsearchUserClassKirgiesischKyrgyzsearchUserClassKirgisien KyrgyzstansearchUserClassSprache: Language:searchUserClassLaotischLaosearchUserClassLaosLaossearchUserClassNachname Last namesearchUserClassNachname: Last name:searchUserClassLettlandLatviasearchUserClassLettischLatviansearchUserClass JuristLawsearchUserClassLibanonLebanonsearchUserClassLesothoLesothosearchUserClassLiberiaLiberiasearchUserClassLiechtenstein LiechtensteinsearchUserClassLifestyle LifestylesearchUserClassLitauen LithuaniasearchUserClassLitauisch LithuaniansearchUserClass,Langfristige BeziehungLong term relationshipsearchUserClassLuxemburg LuxembourgsearchUserClass MacaoMacausearchUserClassMadagaskar MadagascarsearchUserClass$VersandhauskatalogMail order catalogsearchUserClass MalawiMalawisearchUserClassMalaiischMalaysearchUserClassMalaysiaMalaysiasearchUserClassMaledivenMaldivessearchUserClassMnnlichMalesearchUserClassMaliMalisearchUserClass MaltaMaltasearchUserClassMaltesischMaltesesearchUserClass Fhrungsposition ManagerialsearchUserClass8Materialverarbeitender Beruf ManufacturingsearchUserClassFamilienstand:Marital status:searchUserClassVerheiratetMarriedsearchUserClassMarshall InselnMarshall IslandssearchUserClassMartinique MartiniquesearchUserClassMauretanien MauritaniasearchUserClassMauritius MauritiussearchUserClassMayotte MayotteIslandsearchUserClass MedienMediasearchUserClass8Medizien-/GesundheitsbereichMedical/HealthsearchUserClass MexikoMexicosearchUserClassMilitrMilitarysearchUserClassMoldawien, Rep.Moldova, Rep. ofsearchUserClass MonacoMonacosearchUserClassMongoleiMongoliasearchUserClassMontserrat MontserratsearchUserClassMehr >>More >>searchUserClassMarokkoMoroccosearchUserClass"Filme / Fernsehen Movies/TVsearchUserClassMosambik MozambiquesearchUserClass MusikMusicsearchUserClassMyanmarMyanmarsearchUserClassMystik/EsoterikMysticssearchUserClassNamibiaNamibiasearchUserClass Natur und UmweltNature and EnvironmentsearchUserClass NauruNaurusearchUserClass NepalNepalsearchUserClassNiederlande NetherlandssearchUserClass NevisNevissearchUserClassNeuseeland New ZealandsearchUserClassNeukaledonien NewCaledoniasearchUserClass(Nachrichten & Medien News & MediasearchUserClassNicaragua NicaraguasearchUserClassSpitzname Nick namesearchUserClassSpitzname: Nick name:searchUserClass NigerNigersearchUserClassNigeriaNigeriasearchUserClassNiueNiuesearchUserClass8Nichtstaatliche OrganisationNon-Goverment OrganisationsearchUserClassNorfolkinselNorfolk IslandsearchUserClassNorwegenNorwaysearchUserClassNorwegisch NorwegiansearchUserClassBeschftigung: Occupation:searchUserClassOmanOmansearchUserClassGerade online Online onlysearchUserClass Offene BeziehungOpen relationshipsearchUserClassSonstigesOthersearchUserClassAndere DiensteOther servicessearchUserClass&Outdoor AktivittenOutdoor ActivitiessearchUserClassPakistanPakistansearchUserClass PalauPalausearchUserClass PanamaPanamasearchUserClassPapua-NeuguineaPapua New GuineasearchUserClassParaguayParaguaysearchUserClassKindererziehung ParentingsearchUserClass PartysPartiessearchUserClassPersischPersiansearchUserClassPeruPerusearchUserClassTierwelt Pets/AnimalssearchUserClassPhilippinen PhilippinessearchUserClass PolenPolandsearchUserClassPolnischPolishsearchUserClassPortugalPortugalsearchUserClassPortugiesisch PortuguesesearchUserClassFacharbeiter ProfessionalsearchUserClassVerlagswesen PublishingsearchUserClassPuerto Rico Puerto RicosearchUserClass KatarQatarsearchUserClassReligionReligionsearchUserClassEinzelhandelRetailsearchUserClassEinzelhandel Retail storessearchUserClassRuhestandRetiredsearchUserClassReturnsearchUserClassReunion IslandReunion IslandsearchUserClassRumnienRomaniasearchUserClassRumnischRomaniansearchUserClassRota Insel Rota IslandsearchUserClassRusslandRussiasearchUserClassRussischRussiansearchUserClass RuandaRwandasearchUserClassSt. Lucia Saint LuciasearchUserClassSaipan Insel Saipan IslandsearchUserClassSan Marino San MarinosearchUserClassSaudi Arabien Saudi ArabiasearchUserClass0Wissenschaft & ForschungScience & ResearchsearchUserClass,Wissenschaft / TechnikScience/TechnologysearchUserClassSchottlandScotlandsearchUserClass SuchenSearchsearchUserClassSuchen nach: Search by:searchUserClassSenegalSenegalsearchUserClassGetrennt SeparatedsearchUserClassSerbischSerbiansearchUserClassSeychellen SeychellessearchUserClassSierra Leone Sierra LeonesearchUserClassSingapur SingaporesearchUserClass SingleSinglesearchUserClass SkillsSkillssearchUserClassSlovakischSlovaksearchUserClassSlowakeiSlovakiasearchUserClassSlovenienSloveniasearchUserClassSlovenisch SloveniansearchUserClass(SozialwissenschaftenSocial sciencesearchUserClassSalomonenSolomon IslandssearchUserClass SomaliSomalisearchUserClassSomaliaSomaliasearchUserClassSdafrika SouthAfricasearchUserClassWeltallSpacesearchUserClassSpanienSpainsearchUserClassSpanischSpanishsearchUserClass0Sport und LeichtathletikSporting and athleticsearchUserClass SportSportssearchUserClassSri Lanka Sri LankasearchUserClassSt. Helena St. HelenasearchUserClassSt. Kitts St. KittssearchUserClass SudanSudansearchUserClassSurinameSurinamesearchUserClassSwahiliSwahilisearchUserClassSwasiland SwazilandsearchUserClassSchwedenSwedensearchUserClassSchwedischSwedishsearchUserClassSchweiz SwitzerlandsearchUserClass SyrienSyrian ArabRep.searchUserClassTagalogTagalogsearchUserClass TaiwanTaiwansearchUserClassTadschikistan TajikistansearchUserClassTansaniaTanzaniasearchUserClassTatarischTatarsearchUserClassTechnik TechnicalsearchUserClassThailndischThaisearchUserClassThailandThailandsearchUserClassTinian Insel Tinian IslandsearchUserClassTogoTogosearchUserClassTokelauTokelausearchUserClass TongaTongasearchUserClass ReisenTravelsearchUserClassTunesienTunisiasearchUserClass TrkeiTurkeysearchUserClassTrkischTurkishsearchUserClassTurkmenistan TurkmenistansearchUserClass TuvaluTuvalusearchUserClassUINUINsearchUserClassUSAUSAsearchUserClass UgandaUgandasearchUserClassUkraineUkrainesearchUserClassUkrainisch UkrainiansearchUserClassGrobritannienUnited KingdomsearchUserClassStudentUniversity studentsearchUserClassUrduUrdusearchUserClassUruguayUruguaysearchUserClassUsbekistan UzbekistansearchUserClassVanuatuVanuatusearchUserClassVatikanstaat Vatican CitysearchUserClassVenezuela VenezuelasearchUserClassVietnamVietnamsearchUserClassVietnamisisch VietnamesesearchUserClass WalesWalessearchUserClassWebdesign Web DesignsearchUserClassWebdesign Web buildingsearchUserClassWestsamoa Western SamoasearchUserClassVerwitwedWidowedsearchUserClass FrauenWomensearchUserClass JemenYemensearchUserClassJiddischYiddishsearchUserClass YorubaYorubasearchUserClassJugoslawien YugoslaviasearchUserClass,Jugoslawien-MontenegroYugoslavia - MontenegrosearchUserClass&Jugoslawien-SerbienYugoslavia - SerbiasearchUserClass SambiaZambiasearchUserClassSimbabweZimbabwesearchUserClass searchUsersearchUserClassKonto gesperrt Suspended account snacChannel~Reservierungen von dieser IP-Adresse haben das Maximum erreichtK The users num connected from this IP has reached the maximum (reservation) snacChannelPKonto gesperrt wegen deinem Alter (< 13)0Account suspended because of your age (age < 13) snacChannel>Datenbank in schlechtem ZustandBad database status snacChannel<Resolver in schlechtem ZustandBad resolver status snacChannelKeine Anmeldung bei ICQ mglich. In ein paar Minuten wieder versuchen=Can't register on the ICQ network. Reconnect in a few minutes snacChannel*Verbindungsfehler: %1Connection Error: %1 snacChannel(Datenbank-Linkfehler DB link error snacChannel*Datenbank-Sendefehler DB send error snacChannel Gelschtes KontoDeleted account snacChannel$Abgelaufenes KontoExpired account snacChannel6Falscher Name oder PasswortIncorrect nick or password snacChannel`Interner Client Fehler (bad input to authorizer)/Internal client error (bad input to authorizer) snacChannelInterner FehlerInternal error snacChannel"Ungltige SecurIDInvalid SecurID snacChannel Ungltiges KontoInvalid account snacChannel2Ungltige DatenbankfelderInvalid database fields snacChannel:Ungltiger Name oder PasswortInvalid nick or password snacChannel<Unpassender Name oder PasswortMismatch nick or password snacChannel4Kein Zugriff zur DatenbankNo access to database snacChannel2Kein Zugriff zum ResolverNo access to resolver snacChannelSie haben sich zu oft hintereinander angemeldet/reserviert. Versuchen Sie es in einigen Minuten wiederKRate limit exceeded (reservation). Please try to reconnect in a few minutes snacChannelSie haben zu oft versucht sich anzumelden! Versuchen Sie es in einigen Minuten wieder=Rate limit exceeded. Please try to reconnect in a few minutes snacChannel.Map-ReservierungsfehlerReservation map error snacChannel(Resevierungs-TimeoutReservation timeout snacChannel0Service temporr offlineService temporarily offline snacChannel@Service temporr nicht verfgbarService temporarily unavailable snacChannelzVerbindungen von dieser IP-Adresse haben das Maximum erreichtAlter:</b> %1 <br>Age: %1
userInformation4<b>Geburtstag:</b> %1 <br>Birth date: %1
userInformation.<b>Vorname:</b> %1 <br>First name: %1
userInformation4<b>Geschlecht:</b> %1 <br>Gender: %1
userInformation2<b>Wohnort:</b> %1 %2<br>Home: %1 %2
userInformation0<b>Nachname:</b> %1 <br>Last name: %1
userInformation2<b>Spitzname:</b> %1 <br>Nick name: %1
userInformation@<b>Protokoll-Version: </b>%1<br>Protocol version: %1
userInformationJ<b>Sprachkenntnisse:</b> %1 %2 %3<br>%Spoken languages: %1 %2 %3
userInformation[Capabilities]
userInformation)[Direct connection extra info]
userInformation[Short capabilities]
userInformation%userInformation*Bilddatei ist zu groImage size is too biguserInformationNBilder (*.gif *.bmp *.jpg *.jpeg *.png)'Images (*.gif *.bmp *.jpg *.jpeg *.png)userInformationDatei ffnen Open FileuserInformation$Fehler beim ffnen Open erroruserInformation

userInformationClassber michAboutuserInformationClass&Konto-Informationen Account infouserInformationClassSonstiges AdditinonaluserInformationClass Alter:Age:userInformationClassRJeder kann mich ohne Erlaubnis hinzufgen)All uses can add me without authorizationuserInformationClassMein Status ist im Internet und bei der Suche fr andere sichtbar9Allow others to view my status in search and from the webuserInformationClass0Autorisierung/SicherheitAuthorization/webawareuserInformationClassGeburtstag Birth dateuserInformationClassMobiltelefon: Cellular:userInformationClassOrt:City:userInformationClassSchlieenCloseuserInformationClass Firma:CompanyuserInformationClassFirmenname: Company name:userInformationClass Land:Country:userInformationClassAbteilung: Div/dept:userInformationClass0Nicht fr jeden sichtbarDon't publish for alluserInformationClassE-Mail:Email:userInformationClassFax:Fax:userInformationClassWeiblichFemaleuserInformationClassVorname: First name:userInformationClassGeschlecht:Gender:userInformationClassAllgemeinGeneraluserInformationClass PrivatHomeuserInformationClassAdresse Home addressuserInformationClassHomepage: Home page:userInformationClassInteressen InterestsuserInformationClassLetzter Login: Last login:userInformationClassNachname: Last name:userInformationClassMnnlichMaleuserInformationClassFamilienstand:Marital status:userInformationClass@Meine Erlaubnis ist erforderlichMy authorization is requireduserInformationClassNameNameuserInformationClassSpitzname: Nick name:userInformationClassBeschftigung: Occupation:userInformationClass Ursprnglich ausOriginally fromuserInformationClassPersnlichesPersonaluserInformationClassTelefon:Phone:userInformationClassPosition: Position:userInformationClass"Registriert seit: Registration:userInformationClassNeu ladenRequest detailsuserInformationClassSpeichernSaveuserInformationClass"Sprachkenntnisse:Spoken language:userInformationClassBundesland:State:userInformationClass$Strae/Hausnummer:Street address:userInformationClass$Strae/Hausnummer:Street:userInformationClassZusammenfassungSummaryuserInformationClassUIN:UIN:userInformationClassWebseite: Web site:userInformationClass ArbeitWorkuserInformationClassAdresse: Work addressuserInformationClassPostleitzahl:Zip:userInformationClassuserInformationuserInformationClassqutim-0.2.0/languages/de_DE/binaries/chess.qm0000644000175000017500000000702011246332017022460 0ustar euroelessareuroelessarb?z v w!BN8ZY0I } -^i^ ^ "ɖA=S5?f* xk>Nr ,O g˕M  l# T e V'!E)i (Willst Du rochieren?Do you want to castle?DrawerFehler beim Zug Error movingDrawerNeinNoDrawerRochieren To castleDrawerJaYesDrawerDiese Figur kann nicht bewegt werden, weil der Knig im Schach steht8You cannot move this figure because the king is in checkDrawerBWelche Figur soll gesetzt werden?What figure should I set? FigureDialogB GameBoard&Schwarzes Spiel vonBlack game from GameBoard&Schwarzes Spiel mitBlack game with GameBoardC GameBoardBSoll das Bild gespeichert werden?Do you want to save the image? GameBoardEnde des Spiels End the game GameBoardFehler!Error! GameBoardSpielende Game over GameBoardK GameBoard*Nein, nicht speichernNo, don't save GameBoard"Gegnerischer Zug.Opponent turn. GameBoardQ GameBoard&QutIM Schach-PluginQutIM chess plugin GameBoardBild speichern Save image GameBoardnWillst du das Spiel beenden? Du bist dann der Verlierer*Want you to end the game? You will lose it GameBoard Weies Spiel vonWhite game from GameBoard Weies Spiel mitWhite game with GameBoardJa, speichern Yes, save GameBoard>Schach Matt. Du hast verloren.#You have a mate. You lost the game. GameBoardPattYou have a stalemate GameBoard&Du hast gewonnen :)You scored the game GameBoardJDein Gegner hat das Spiel geschlossen!Your opponent has closed the game GameBoardDein Zug. Your turn. GameBoardV ldt dich zum schachspielen ein. Annehmen?# invites you to play chess. Accept? chessPlugin$, mit Nachricht: ", with reason: " chessPluginSchach spielen Play chess chessPlugin&QutIM Schach-PluginQutIM chess plugin chessPluginlhat deine Einladung zum schachspielen nicht angenommen&don't accept your invite to play chess chessPluginChat Game chat gameboard"Gegnerische Zge:Opponent moves: gameboard&QutIM Schach-PluginQutIM chess plugin gameboardDeine Zge: Your moves: gameboardqutim-0.2.0/languages/de_DE/binaries/qutim_core.qm0000644000175000017500000013440011273014333023523 0ustar euroelessareuroelessarKu-YH9+ iߵ@.|8NmNjJz*EczoZ>d+='T l IY &YW^%)ha:v:E'mJOe\dZJ Zp.d;^.GDdbD*_bIX-q=T-q> ~4"q6o~18I,}QSQT}]3c]?j`d5xdk(7.lsP<eY4?DAZ,NTO^f qJ4'I6IJIMIkCIlIn & I l   ųf͢am!l:'/ 8GIb0'tM3D 5Mk6#)C S:SWO#e0E$ke0EqjlDZt~ gy#2;.L F>>29bI@N50BNb nw<0$,0qXߺJ!c9  5s;i#U6h?^CXS)VѥVѥ X'm=z)zó;Պ74Hf2`WE.ms,"j1hZ%F H2L8i=ai=g iANgYjx1kJ:r>0-U*l>uMflTJKpGWfӉ4qF7c8e3=B<4G RO&a cvfunRgnJ:*S4.o9Ձ.X % _a ID Gx & X 0| \P% q v |G |b @ Q $ = 7 ?? jq = !N 1R o#r3 uC_ 1W 7k P { zF X " -p A e.g s>n U ` zz6 e >35 >N > % -T< be t c t C F S 8n 5 [+ =]% d ~b$Oa s Ts TJ- . 8 ɔ mL %j @g 4x o O  ӕ *B t c,z Eu EV ;*j >1g ?@ [NB g |,>M |,@ Ro^ { bK _[ Z N % c/ sV  )e _LP N( V^ ycY{ upw U;Z7 W+I Z; q:: rN rNG c z9+ tp. 9 < <% & N`dUJ'+EF4h*GO\Xl(s8:CÊUK/6"/G U?%vC[/uem3}p._BP]C{ $Y %}i*BenutzerinformationenContact detailsAbstractContextLayer$NachrichtenverlaufMessage historyAbstractContextLayer Nachricht senden Send messageAbstractContextLayerAccountManagementAccountManagementClassHinzufgenAddAccountManagementClassBearbeitenEditAccountManagementClassLschenRemoveAccountManagementClass:Hinzufgen eines neuen KontosAdd Account WizardAddAccountWizardrNur Nachrichten von Mitgliedern der Kontaktliste annehmen&Accept messages only from contact listAntiSpamLayerSettingsClass6Richtige Antwort zur Frage:Answer to question:AntiSpamLayerSettingsClass Anti-Spam Frage:Anti-spam question:AntiSpamLayerSettingsClassAntiSpamSettingsAntiSpamLayerSettingsClassKeine Erlaubnisanfragen von Benutzern ausserhalb der Kontaktliste akzeptieren3Do not accept NIL messages concerning authorizationAntiSpamLayerSettingsClassKeine Nachrichten mit URLs von Benutzern ausserhalb der Kontaktliste akzeptieren$Do not accept NIL messages with URLsAntiSpamLayerSettingsClasshKeine Frage/Antwort senden wenn ich "Unsichtbar" bin5Don't send question/reply if my status is "invisible"AntiSpamLayerSettingsClass0Anti-Spam Bot aktivierenEnable anti-spam botAntiSpamLayerSettingsClassBNachricht nach richtiger Antwort:Message after right answer:AntiSpamLayerSettingsClasshBenachrichtigen, wenn eine Nachricht blockiert wurdeNotify when blocking messageAntiSpamLayerSettingsClass...ChatForm2Nachrichtenfenster leerenClear chat logChatFormRNachrichtenverlauf des Benutzers (Strg+H)Contact historyChatForm*BenutzerinformationenContact informationChatFormCtrl+FChatFormCtrl+HChatFormCtrl+IChatFormCtrl+MChatFormCtrl+QChatFormCtrl+TChatForm Smileys (Strg+M) Emoticon menuChatFormFormChatFormFAusgewhlten Text zitieren (Strg+Q)Quote selected textChatForm&SendenSendChatForm*Datei senden (Strg+F) Send fileChatForm(Bild < 7,6 kB sendenSend image < 7,6 KBChatForm Nachricht senden Send messageChatForm<Nachrichten mit "Enter" sendenSend message on enterChatFormAnderen Benutzern anzeigen, dass ich gerade eine Nachricht tippeSend typing notificationChatForm"Layout umschalten Swap layoutChatForm$Nachrichtenfenster Chat windowChatLayerClass((16:33, 05/Mai/2009)( hour:min, full date )ChatSettingsWidget(16:33:44)( hour:min:sec )ChatSettingsWidget*(16:33:44 01/05/2009)( hour:min:sec day/month/year )ChatSettingsWidgetBeim Klicken auf das Systemtray-Symbol alle ungelesenen Nachrichten anzeigen6After clicking on tray icon show all unreaded messagesChatSettingsWidgetChatChatChatSettingsWidgetNormale Chats und Konferenzen in einem gemeinsamen Fenster anzeigen#Chats and conferences in one windowChatSettingsWidgetLSchlieen-Knopf auf jedem Tab anzeigenClose button on tabsChatSettingsWidgetTab/Nachrichtenfenster nach dem Senden einer Nachricht schlieen0Close tab/message window after sending a messageChatSettingsWidgetfSpitznamen in Konferenzen unterschiedlich einfrben!Colorize nicknames in conferencesChatSettingsWidgetHSystemtray-Symbol soll nicht blinkenDon't blink in task barChatSettingsWidgetdNachrichten nicht mehr gruppieren nach (Sekunden):!Don't group messages after (sec):ChatSettingsWidgetPopupbenachrichtigungen zeigen, wenn das Nachrichtenfenster geffnet ist+Don't show events if message window is openChatSettingsWidgetFormChatSettingsWidgetAllgemeinGeneralChatSettingsWidgetpTab/Nachrichtenfenster bei eingehenden Nachrichten ffen+Open tab/message window if received messageChatSettingsWidgetDie zuletzt offenen Tabs beim Schlieen des Nachrichtenfensters merken3Remember openned privates after closing chat windowChatSettingsWidgetdMax. Anzahl der Nachrichten im Nachrichtenfenster:%Remove messages from chat view after:ChatSettingsWidgetPNachrichten mit doppelten "Enter" sendenSend message on double enterChatSettingsWidget<Nachrichten mit "Enter" sendenSend message on enterChatSettingsWidgetAnderen Benutzern anzeigen, dass ich gerade eine Nachricht tippeSend typing notificationsChatSettingsWidgetNamen anzeigen Show namesChatSettingsWidgetHTabs im Nachrichtenfenster verwenden Tabbed modeChatSettingsWidgetNSortieren/verschieben von Tabs zulassenTabs are movableChatSettingsWidget"Textbrowser-ModusText browser modeChatSettingsWidgetZeitformat: Timestamp:ChatSettingsWidgetNWebkit-Modus fr den Nachrichtenverlauf Webkit modeChatSettingsWidgetT<font color='green'>Tippt gerade...</font>$Typing... ChatWindow*Bilddatei ist zu groImage size is too big ChatWindowNBilder (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.png *.bmp *.jpg *.jpeg) ChatWindowDatei ffnen Open File ChatWindow$Fehler beim ffnen Open error ChatWindow2Nachrichtenfenster leeren Clear chatConfFormCtrl+M, Ctrl+SConfFormCtrl+QConfFormCtrl+TConfFormFormConfForm"Translit (Strg+T)Invert/translit messageConfFormFAusgewhlten Text zitieren (Strg+Q)Quote selected textConfForm&SendenSendConfForm<Nachrichten mit "Enter" senden Send on enterConfFormSmileysShow emoticonsConfForm

ConsoleFormConsole$Nicht in der Liste Not in listContactListProxyModelOfflineOfflineContactListProxyModel OnlineOnlineContactListProxyModel100%ContactListSettingsClass Konto:Account:ContactListSettingsClass&Rahmenloses FensterBorderless WindowContactListSettingsClassContactListSettingsContactListSettingsClassAnpassen CustomizeContactListSettingsClassSchriftarten:Customize font:ContactListSettingsClass\Die Benutzer in wechselnden Farben hinterlegen1Draw the background with using alternating colorsContactListSettingsClassGruppe:Group:ContactListSettingsClass0Leere Gruppen versteckenHide empty groupsContactListSettingsClass6Offline-Benutzer versteckenHide offline usersContactListSettingsClassRTrenner "Online" und "Offline" versteckenHide online/offline separatorsContactListSettingsClassLook'n'Feel Look'n'FeelContactListSettingsClassAllgemeinMainContactListSettingsClassOffline:Offline:ContactListSettingsClassOnline:Online:ContactListSettingsClass&Undurchsichtigkeit:Opacity:ContactListSettingsClass Normales FensterRegular WindowContactListSettingsClassTrennzeilen: Separator:ContactListSettingsClassKonten anzeigen Show accountsContactListSettingsClass*Avatarbilder anzeigen Show avatarsContactListSettingsClass8Symbole der Clients anzeigenShow client iconsContactListSettingsClass Gruppen anzeigen Show groupsContactListSettingsClass<Benutzer nach Status sortierenSort contacts by statusContactListSettingsClass"Rahmen des Themas Theme borderContactListSettingsClassTool-Fenster Tool windowContactListSettingsClassFensterrahmen: Window Style:ContactListSettingsClass &Datei&FileDefaultContactListberAboutDefaultContactListEinstellungenControlDefaultContactList$Gruppen verstecken Hide groupsDefaultContactListHauptmen Main menuDefaultContactList StummMuteDefaultContactList2Offline-Benutzer anzeigen Show offlineDefaultContactList$Gruppen versteckenShow/hide groupsDefaultContactList2Offline-Benutzer anzeigenShow/hide offlineDefaultContactList Ton an Sound on/offDefaultContactListqutIMDefaultContactList$Mgliche VariantenPossible variants GeneralWindowBqwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? GeneralWindow4Bentigt AuthentifizierungAuthenticationGlobalProxySettingsClassGlobalProxySettingsGlobalProxySettingsClassHTTPGlobalProxySettingsClassHost-Adresse:Host:GlobalProxySettingsClass KeinerNoneGlobalProxySettingsClassPasswort: Password:GlobalProxySettingsClass Port:Port:GlobalProxySettingsClassSOCKS 5GlobalProxySettingsClassTyp:Type:GlobalProxySettingsClassBenutzername: User name:GlobalProxySettingsClass<Standard> GuiSetttingsWindowClass.<Standard> ( Englisch ) ( English )GuiSetttingsWindowClass<Manuell> GuiSetttingsWindowClass<Keine(s)>GuiSetttingsWindowClass<System>GuiSetttingsWindowClassProgrammstil:Application style:GuiSetttingsWindowClassAnwendenApplyGuiSetttingsWindowClassFensterrahmen: Border theme:GuiSetttingsWindowClassAbbrechenCancelGuiSetttingsWindowClass8Nachrichtenverlauf (Webkit):Chat log theme (webkit):GuiSetttingsWindowClass&Nachrichtenfenster:Chat window dialog:GuiSetttingsWindowClassKontaktliste:Contact list theme:GuiSetttingsWindowClassSmileys: Emoticons:GuiSetttingsWindowClassSprache: Language:GuiSetttingsWindowClassOkOKGuiSetttingsWindowClassDBenachrichtigungen (Popupfenster):Popup windows theme:GuiSetttingsWindowClass0Klangbenachrichtigungen: Sounds theme:GuiSetttingsWindowClass,Symbolsatz fr Status:Status icon theme:GuiSetttingsWindowClassBSymbolsatz fr gesamtes Programm:System icon theme:GuiSetttingsWindowClass$BenutzeroberflcheUser interface settingsGuiSetttingsWindowClassHistorySettingsHistorySettingsClass8Nachrichtenverlauf speichernSave message historyHistorySettingsClassBeim ffnen des Nachrichtenfensters die letzten Nachrichten anzeigen:(Show recent messages in messaging windowHistorySettingsClass1HistoryWindowClass Konto:Account:HistoryWindowClassAlle: %L1All: %L1HistoryWindowClassVon:From:HistoryWindowClass HistoryWindowHistoryWindowClass"Eingegangene: %L1In: %L1HistoryWindowClassGesendete: %L1Out: %L1HistoryWindowClassReturnHistoryWindowClass SuchenSearchHistoryWindowClassAlle: %L1All: %L1#JsonHistoryNamespace::HistoryWindow"Eingegangene: %L1In: %L1#JsonHistoryNamespace::HistoryWindowKein Verlauf No History#JsonHistoryNamespace::HistoryWindowGesendete: %L1Out: %L1#JsonHistoryNamespace::HistoryWindow8Bitte alle Felder ausfllen.Please fill all fields. LastLoginPagetBitte die Zugangsdaten fr das gewhlte Protokoll eingeben&Please type chosen protocol login data LastLoginPage pxNotificationsLayerSettingsClass sNotificationsLayerSettingsClass8Benutzer ihren Status ndernContact change statusNotificationsLayerSettingsClass,Benutzer offline gehenContact sign offNotificationsLayerSettingsClass*Benutzer online gehenContact sign onNotificationsLayerSettingsClass<Benutzer eine Nachricht tippenContact typing messageNotificationsLayerSettingsClass Hhe:Height:NotificationsLayerSettingsClass Ecke links untenLower left cornerNotificationsLayerSettingsClass"Ecke rechts untenLower right cornerNotificationsLayerSettingsClass(Nachrichten eingehenMessage receivedNotificationsLayerSettingsClass,Kein Einschiebe-EffektNo slideNotificationsLayerSettingsClassNotificationsLayerSettingsNotificationsLayerSettingsClass*Benachrichtigen wenn: Notify when:NotificationsLayerSettingsClassPosition: Position:NotificationsLayerSettingsClass\Ballon-Benachrichtigunen im Systemtray zeigen:Show balloon messages:NotificationsLayerSettingsClass*Popupfenster anzeigenShow popup windowsNotificationsLayerSettingsClass Dauer: Show time:NotificationsLayerSettingsClass,Horizontal einschiebenSlide horizontallyNotificationsLayerSettingsClass(Vertikal einschiebenSlide verticallyNotificationsLayerSettingsClassEffekt:Style:NotificationsLayerSettingsClassEcke links obenUpper left cornerNotificationsLayerSettingsClass Ecke rechts obenUpper right cornerNotificationsLayerSettingsClassBreite:Width:NotificationsLayerSettingsClass1PluginSettingsClassAbbrechenCancelPluginSettingsClass4qutIM - Plugins einrichtenConfigure plugins - qutIMPluginSettingsClassOkOkPluginSettingsClass %1 PopupWindowb%1
%2 PopupWindow PopupWindowPopupWindowClass6Profil %1 wirklich lschen?Delete %1 profile?ProfileLoginDialogProfil lschenDelete profileProfileLoginDialog"Falsches PasswortIncorrect passwordProfileLoginDialogEinloggenLog inProfileLoginDialog ProfilProfileProfileLoginDialogAbbrechenCancelProfileLoginDialogClass8Dieses Fenter nicht anzeigenDon't show on startupProfileLoginDialogClass Name:Name:ProfileLoginDialogClassPasswort: Password:ProfileLoginDialogClassProfileLoginDialogProfileLoginDialogClass$Passwort speichernRemember passwordProfileLoginDialogClassProfil lschenRemove profileProfileLoginDialogClassEinloggenSign inProfileLoginDialogClass@Bitte das IM Protokoll auswhlenPlease choose IM protocol ProtocolPageZDieser Assistent hilft ihnen dabei, ein Konto des gewhlten Protokolls hinzuzufgen. Konten knnen jederzeit unter "Einstellungen -> Konten" hinzugefgt oder gelscht werdenThis wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts ProtocolPage2%1 hat heute Geburtstag!!%1 has birthday today!!QObject%1 tippt gerade %1 is typingQObject&Schlieen&QuitQObject(Blockiert)  (BLOCKED) QObject Alle Dateien (*) All files (*)QObjectAnti-Spam Anti-spamQObject4Erlaubnisanfrage blockiertAuthorization blockedQObject<Nachricht von %1 blockiert: %2Blocked message from %1: %2QObjectKontaktliste Contact ListQObjectVerlaufHistoryQObject(Nachricht von %1: %2Message from %1: %2QObject$Nicht in der Liste Not in listQObject$Benachrichtigungen NotificationsQObjectDatei ffnen Open FileQObjectSchlieenQuitQObject AudioSoundQObject.KlangbenachrichtigungenSound notificationsQObject,hat heute Geburtstag!!has birthday today!!QObject<schreibt gerade eine NachrichttypingQObject...SoundEngineSettingsBefehl:Command:SoundEngineSettings4Benutzerdefinierter PlayerCustom sound playerSoundEngineSettingsEngine-Typ Engine typeSoundEngineSettingsProgramme ExecutablesSoundEngineSettingslProgramme (*.exe *.com *.cmd *.bat) Alle Dateien (*.*)5Executables (*.exe *.com *.cmd *.bat) All files (*.*)SoundEngineSettingsFormSoundEngineSettingsKeine KlngeNo soundSoundEngineSettingsQSoundSoundEngineSettings*Befehlspfad auswhlenSelect command pathSoundEngineSettingsAlle Klangdateien werden ins Verzeichnis "%1/" kopiert. Existierende Dateien werden ohne Nachfrage berschrieben. Fortfahren?All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue?SoundLayerSettingsBFehler beim Lesen der Datei "%1".)An error occured while reading file "%1".SoundLayerSettings,Benutzer ndert StatusContact changed statusSoundLayerSettings(Benutzer geht onlineContact is onlineSoundLayerSettings*Benutzer geht offlineContact went offlineSoundLayerSettings*GeburtstagserinnerungContact's birthday is commingSoundLayerSettingsVKonnte Datei "%1" nicht nach "%2" kopieren.!Could not copy file "%1" to "%2".SoundLayerSettingsLLesezugriff auf Datei "%1" verweigert.%Could not open file "%1" for reading.SoundLayerSettingsRSchreibzugriff auf Datei "%1" verweigert.%Could not open file "%1" for writing.SoundLayerSettings FehlerErrorSoundLayerSettings.Klangschema exportierenExport sound styleSoundLayerSettingsExportieren... Export...SoundLayerSettingsNDie Datei "%1" hat ein falsches Format.File "%1" has wrong format.SoundLayerSettings.Klangschema importierenImport sound styleSoundLayerSettings(Eingehende NachrichtIncoming messageSoundLayerSettings"Klangdatei ffnenOpen sound fileSoundLayerSettings&Gesendete NachrichtOutgoing messageSoundLayerSettings~Das Klangschema wurde erfolgreich in die Datei "%1" exportiert.0Sound events successfully exported to file "%1".SoundLayerSettingsPKlangdateien (*.wav);;Alle Dateien (*.*)$Sound files (*.wav);;All files (*.*)SoundLayerSettingsProgrammstartStartupSoundLayerSettingsSystemereignis System eventSoundLayerSettings&XML Dateien (*.xml)XML files (*.xml)SoundLayerSettingsAnwendenApplySoundSettingsClassEreignisseEventsSoundSettingsClassExportieren... Export...SoundSettingsClassImportieren... Import...SoundSettingsClass ffnenOpenSoundSettingsClassAbspielenPlaySoundSettingsClassKlangdatei: Sound file:SoundSettingsClassHIm Moment ist ein Klangschema aktiv. Damit die Klnge hier manuell eingerichtet werden knnen, bitte unter Benutzeroberflche "Manuell" als Klangschema auswhlen.FYou're using a sound theme. Please, disable it to set sounds manually.SoundSettingsClass soundSettingsSoundSettingsClass Name der VorlagePreset caption StatusDialog0Statusnachricht eingebenWrite your status message StatusDialog<Keine>StatusDialogVisualClassAbbrechenCancelStatusDialogVisualClassBDiesen Dialog nicht mehr anzeigenDo not show this dialogStatusDialogVisualClassOkOKStatusDialogVisualClassVorlage:Preset:StatusDialogVisualClassSpeichernSaveStatusDialogVisualClass StatusDialogStatusDialogVisualClassAbbrechenCancelStatusPresetCaptionClassOkOKStatusPresetCaptionClassVBitte einen Namen fr die Vorlage eingeben:Please enter preset caption:StatusPresetCaptionClassStatusPresetCaptionStatusPresetCaptionClassZu HauseAt homeTreeContactListModelIn der ArbeitAt workTreeContactListModelAbwesendAwayTreeContactListModelDepressiv DepressionTreeContactListModelNicht strenDo not disturbTreeContactListModelBseEvilTreeContactListModelChatfreudig Free for chatTreeContactListModelBeim Essen Having lunchTreeContactListModelUnsichtbar InvisibleTreeContactListModelNicht verfgbar Not availableTreeContactListModelBeschftigtOccupiedTreeContactListModelOfflineOfflineTreeContactListModel OnlineOnlineTreeContactListModel$Ohne AutorisierungWithout authorizationTreeContactListModel<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Martin Hckel</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:martinhaeckel@gmx.de"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">martinhaeckel@gmx.de</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Deutsche bersetzung</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html>(Enter there your names, dear translaters aboutInfoJGNU General Public License, Version 2%GNU General Public License, version 2 aboutInfoTDas Projekt mit einer Spende untersttzen: Support project with a donation: aboutInfo Yandex.Money aboutInfo <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Hauptentwickler und Projektgrnder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Hauptentwickler und Projektleiter</span></p></body></html>

Rustam Chakin

qutim.develop@gmail.com

Main developer and Project founder

Ruslan Nigmatullin

euroelessar@gmail.com

Main developer and Project leader

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">Lizenzvereinbarungen</a></p></body></html>

License agreements

aboutInfoClassberAboutaboutInfoClassber qutIM About qutIMaboutInfoClassAutorenAuthorsaboutInfoClassSchlieenCloseaboutInfoClassSpendenDonatesaboutInfoClassReturnaboutInfoClassVielen Dank an Thanks ToaboutInfoClassbersetzer TranslatorsaboutInfoClass4Konto %1 wirklich lschen?Delete %1 account? loginDialogKonto lschenDelete account loginDialog...loginDialogClass2<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Das ICQ-Passwort darf max. 8 Zeichen lang sein.</span></p></body></html>$

Maximum length of ICQ password is limited to 8 characters.

loginDialogClass KontoAccountloginDialogClass Konto:Account:loginDialogClass*Automatisch verbinden AutoconnectloginDialogClassPasswort: Password:loginDialogClassProfil lschenRemove profileloginDialogClass$Passwort speichernSave my passwordloginDialogClassSicherer Login Secure loginloginDialogClassHDieses Fenster beim Starten anzeigenShow on startuploginDialogClassEinloggenSign inloginDialogClass minmainSettingsClass smainSettingsClassDie Konten im Systemtray-Men auflisten (Rechtsklick auf Symbol) Add accounts to system tray menumainSettingsClass(Immer im Vordergrund Always on topmainSettingsClass8Automatisch "Abwesend" nach:Auto-away after:mainSettingsClass8Automatisch verstecken nach: Auto-hide:mainSettingsClassPLoginfenster beim Starten nicht anzeigen"Don't show login dialog on startupmainSettingsClass.Beim Starten versteckenHide on startupmainSettingsClassZGre und Position der Kontaktliste speichern"Save main window size and positionmainSettingsClassFZeige im Systemtray den Status von:Show status from:mainSettingsClassZNur eine qutIM-Instanz gleichzeitig ausfhren!Start only one qutIM at same timemainSettingsClass mainSettingsmainSettingsClass&Schlieen&QuitqutIM"&Einstellungen... &Settings...qutIM,Benutzer&oberflche...&User interface settings...qutIM:Das Profil wirklich wechseln?%Do you really want to switch profile?qutIMPlugins...Plug-in settings...qutIMProfil wechselnSwitch profilequtIMqutIM qutIMClass KontenAccounts qutimSettingsAllgemeinGeneral qutimSettings*Globaler Proxy-Server Global proxy qutimSettings>Einstellungen fr %1 speichern?Save %1 settings? qutimSettings.Einstellungen speichern Save settings qutimSettings1qutimSettingsClassAnwendenApplyqutimSettingsClassAbbrechenCancelqutimSettingsClassOkOKqutimSettingsClassEinstellungenSettingsqutimSettingsClassqutim-0.2.0/languages/de_DE/binaries/urlpreview.qm0000644000175000017500000001173111233402241023554 0ustar euroelessareuroelessar

URLPreview qutIM plugin

svn version

Make previews for URLs in messages

Author:

Alexander Kazarin

<boiler@co.ru>

(c) 2008-2009

urlpreviewSettingsClassberAbouturlpreviewSettingsClassZKeine Info bei text/html content-Typen zeigen*Don't show info for text/html content typeurlpreviewSettingsClassBAktiv bei eingehenden NachrichtenEnable on incoming messagesurlpreviewSettingsClass@Aktiv bei gesendeten NachrichtenEnable on outgoing messagesurlpreviewSettingsClassAllgemeinGeneralurlpreviewSettingsClass&Bildvorschau Maske:Image preview template:urlpreviewSettingsClass BilderImagesurlpreviewSettingsClassInfo Maske:Info template:urlpreviewSettingsClass5Macros: %TYPE% - Content-Type %SIZE% - Content-LengthurlpreviewSettingsClass5Macros: %URL% - Image URL %UID% - Generated unique IDurlpreviewSettingsClass4Max. Dateigre (in Bytes)Max file size limit (in bytes)urlpreviewSettingsClassEinstellungenSettingsurlpreviewSettingsClassqutim-0.2.0/languages/de_DE/binaries/nowlistening.qm0000644000175000017500000004147611257677212024123 0ustar euroelessareuroelessarv>`>=G8cbh>v@DA:% {AeY9^> 9ǒe:H@@i4:pD) J.@ Y9 E ƾ? 'AP ys9 8 F=;> P B 5=! T> ; s? R8 Ze;~έ$

Now Listening qutIM Plugin

v 0.6

Author:

Ian 'NayZaK' Kazlauskas

nayzak90@googlemail.com

Winamp module author:

Rusanov Peter

tazkrut@mail.ru

(c) 2009

 settingsUi<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Platzhalter bei ICQ x-Statusnachrichten:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - Knstler</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - Titel</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - Album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - Titelnummer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - Titellnge in Minuten</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - Voller Pfad zur Datei</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Platzhalter fr Jabber-Laune:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - Knstler</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - Titel</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - Album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - Titelnummer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - Titellnge in Minuten</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - Voller Pfad zur Datei</span></p></body></html> g

For ICQ X-status message adopted next terms:

%artist - artist

%title - title

%album - album

%tracknumber - track number

%time - track length in minutes

%uri - full path to file

For Jabber Tune message adopted next terms:

artist - artist

title - title

album - album

tracknumber - track number

length - track length in seconds

uri - full path to file

 settingsUiAIMP settingsUiberAbout settingsUiAktiviert Activated settingsUijWird aktiviert, wenn x-Status "Musik hren" aktiv ist/Activates when X-status is "Listening to music" settingsUi Amarok 1.4 settingsUiAmarok 2 settingsUi Audacious settingsUi8ndert die x-Statusnachricht Changes current X-status message settingsUiLAktualisierungsintervall (in Sekunden)Check period (in seconds) settingsUiPlugin-ModusCurrent plugin mode settingsUiDeaktiviert Deactivated settingsUi Fr ICQ-AccountsFor ICQ accounts settingsUi&Fr Jabber-AccountsFor Jabber accounts settingsUiForm settingsUiHostname settingsUiInfoInfo settingsUiTInformationen, die angezeigt werden sollenInfo to be presented settingsUi:Hrt gerade: %artist - %titleListening now: %artist - %title settingsUiMPD settingsUi ModusMode settingsUiMusikplayer Music Player settingsUiPasswortPassword settingsUiPort settingsUiQMMP settingsUi RadioButton settingsUi Rhythmbox settingsUi\Fr alle Accounts den gleichen Modus verwendenSet mode for all accounts settingsUiEinstellungenSettings settingsUiSong Bird (Linux) settingsUiVLC settingsUiWinamp settingsUi.Maske x-StatusnachrichtX-status message mask settingsUiRKeine ICQ oder Jabber Accounts vorhanden.#You have no ICQ or Jabber accounts. settingsUi artist title settingsUiQbackground-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); settingsUiqutim-0.2.0/languages/de_DE/binaries/formules.qm0000644000175000017500000000120611257677212023222 0ustar euroelessareuroelessarb)> p*@U.O2 N ^  WܝZH|Tt.^E Id =aOnM IJ ҩ > Zu |E= / p t ^ 8B@.i WizardPageChooseClientPage"Verlauf speichern Dump historyChooseOrDumpPageTVerlauf eines weiteren Clients importieren#Import history from one more clientChooseOrDumpPage WizardPageChooseOrDumpPage...ClientConfigPageKodierung: Encoding:ClientConfigPage Pfad zum Profil:Path to profile:ClientConfigPagenDie Accounts fr die aufgefhrten Protokolle auswhlen..Select accounts for each protocol in the list.ClientConfigPage@Deinen Jabber-Account auswhlen.Select your Jabber account.ClientConfigPage WizardPageClientConfigPage BinrBinaryDumpHistoryPage"Format auswhlen:Choose format:DumpHistoryPage$Verlauf speichern:Dumping history state:DumpHistoryPageJSONDumpHistoryPage.Verlauf zusammenfhren:Merging history state:DumpHistoryPage WizardPageDumpHistoryPagelVon welchem Client soll der Verlauf importiert werden?8Choose client which history you want to import to qutIM. HistoryManager::ChooseClientPage ClientClient HistoryManager::ChooseClientPageEinen weiteren Client importieren, oder den Verlauf auf der Festplatte speichern.WIt is possible to choose another client for import history or dump history to the disk. HistoryManager::ChooseOrDumpPage.Wie soll's weitergehen?What to do next? HistoryManager::ChooseOrDumpPageKonfiguration Configuration HistoryManager::ClientConfigPageTDen Pfad zum %1 Profilverzeichnis angeben."Enter path of your %1 profile dir. HistoryManager::ClientConfigPageHDen Pfad zur %1 Profildatei angeben.#Enter path of your %1 profile file. HistoryManager::ClientConfigPageDie richtige Kodierung auswhlen, falls die Kodierung des Verlaufs eine andere als die des Systems ist.bIf your history encoding differs from the system one, choose the appropriate encoding for history. HistoryManager::ClientConfigPagePfad auswhlen Select path HistoryManager::ClientConfigPage SystemSystem HistoryManager::ClientConfigPageSpeichernDumpingHistoryManager::DumpHistoryPageJVerlauf wurde erfolgreich importiert.&History has been succesfully imported.HistoryManager::DumpHistoryPageLetzter Schritt. Auf "Speichern" klicken um den Verlauf zu speichern.1Last step. Click 'Dump' to start dumping process.HistoryManager::DumpHistoryPage|Verlauf wird zusammengefhrt, dies kann einige Minuten dauern.5Manager merges history, it make take several minutes.HistoryManager::DumpHistoryPage&Speichern&Dump$HistoryManager::HistoryManagerWindowHistory manager$HistoryManager::HistoryManagerWindown%n Nachricht wurde erfolgreich in den Speicher geladen.x%n Nachricht(en) wurden erfolgreich in den Speicher geladen.5%n message(s) have been succesfully loaded to memory.!HistoryManager::ImportHistoryPage,Es hat %n ms gedauert.,Es hat %n ms gedauert.It has taken %n ms.!HistoryManager::ImportHistoryPage LadenLoading!HistoryManager::ImportHistoryPageDer Verlauf wird in den Speicher geladen, dies kann einige Minuten dauern.AManager loads all history to memory, it may take several minutes.!HistoryManager::ImportHistoryPage&Verlauf importierenImport historyHistoryManagerPlugin WizardPageImportHistoryPagequtim-0.2.0/languages/de_DE/binaries/protocolicon.qm0000644000175000017500000000073211257677212024103 0ustar euroelessareuroelessar PluginSettingsJSymbole neben den Kontonamen anzeigenChange account iconPluginSettingsJSymbole neben jedem Benutzer anzeigenChange contact iconPluginSettingsSymbolsatz: Select protocol icon theme pack:PluginSettingsqutim-0.2.0/languages/de_DE/binaries/youtubedownload.qm0000644000175000017500000001161411257677212024616 0ustar euroelessareuroelessar

YouTube download link qutIM plugin

svn version

Adds link for downloading clips

Author:

Evgeny Soynov

Template:

Alexander Kazarin

(c) 2008-2009

urlpreviewSettingsClassberAbouturlpreviewSettingsClassBAktiv bei eingehenden NachrichtenEnable on incoming messagesurlpreviewSettingsClass@Aktiv bei gesendeten NachrichtenEnable on outgoing messagesurlpreviewSettingsClassAllgemeinGeneralurlpreviewSettingsClass Maske:Info template:urlpreviewSettingsClassFPlatzhalter: %URL% - URL des VideosMacros: %URL% - Clip addressurlpreviewSettingsClassEinstellungenSettingsurlpreviewSettingsClassqutim-0.2.0/languages/de_DE/binaries/massmessaging.qm0000644000175000017500000001445611257677212024242 0ustar euroelessareuroelessar''n&ʗ^0T y f 4" 5 = RVh T( CviU15Dialog

TextLabel

Dialog l<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Anmerkungen:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Folgende Platzhalter knnen verwendet werden:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Name des Empfngers </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Name des Absenders (Profilname)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Aktuelle Zeit</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html>!

Notes:

You can use the templates:

  • {reciever} - Name of the recipient
  • {sender} - Name of the sender (profile name)
  • {time} - Current time

DialogAktionenActionsDialog Intervall (sek):Interval (in seconds):DialogKontaktlisteItemsDialogNachrichtMessageDialog"Mehrfaches SendenMultiply SendingDialog&SendenSendDialogAnhaltenStopDialog KontenAccountsManager.Fehler: Leere NachrichtError: message is emptyManager:Fehler: Unbekanntes Konto: %1Error: unknown account : %1ManagerUnbekanntUnknownManager"Mehrfaches SendenMultiply Sending MessagingAktionenActionsMessagingDialog(Benutzerliste ffnenLoad buddy listMessagingDialog(Benutzerliste ffnenLoad custom buddy listMessagingDialog2Mehrfaches Senden: Fertig#Multiply sending: all jobs finishedMessagingDialog.Benutzerliste speichernSave buddy listMessagingDialog*Sende Nachricht an %1Sending message to %1MessagingDialoghSende Nachricht an %1 (%2/%3), verbleibende Zeit: %4/Sending message to %1 (%2/%3), time remains: %4MessagingDialog8Sende Nachricht an %1: %v/%mSending message to %1: %v/%mMessagingDialogqutim-0.2.0/languages/de_DE/binaries/jsonhistory.qm0000644000175000017500000000175311245037111023751 0ustar euroelessareuroelessar^   T& I"H IQ JV N R T% VZ w { {  ee u0  >  &7  &{ ū) 7*   ? w    W  ÕR M M! ApH As At Au Av$ Ks ʌs! T T! Y# 4W$ o; o; o;@ z > ĬL <  K u 7drRRWOj!* ӘyGd&i'6667AddAccountFormClassAddAccountFormAddAccountFormClassSpitzname:Nick:AddAccountFormClassPasswort: Password:AddAccountFormClass Port:Port:AddAccountFormClass Wirklicher Name: Real Name:AddAccountFormClass$Passwort speichern Save passwordAddAccountFormClassServer:Server:AddAccountFormClassirc.freenode.netAddAccountFormClass$IRC Server KonsoleIRC Server ConsoleIrcConsoleClassAbwesendAway ircAccountAusperrenBan ircAccountAusgesperrtBanned ircAccountCTCP ircAccountThema ndern Change topic ircAccount"RaumadministratorChannel administrator ircAccount"Raum-HalboperatorChannel half-operator ircAccountRaumoperatorChannel operator ircAccountRaumbesitzer Channel owner ircAccountRaumliste Channels List ircAccountKonsoleConsole ircAccountHalb-Op geben Give HalfOp ircAccountOp gebenGive Op ircAccount0Sprecherlaubnis erteilen Give Voice ircAccountIRC Operator IRC operator ircAccountInformationen Information ircAccountRaum betreten Join Channel ircAccountRausschmeienKick ircAccount2Rausschmeien / Ausperren Kick / Ban ircAccount*Grund fr Rausschmiss Kick reason ircAccount(Rausschmeien mit... Kick with... ircAccount ModusMode ircAccountModiModes ircAccount Notify avatar ircAccountOfflineOffline ircAccount OnlineOnline ircAccountPrivatchat Private chat ircAccount"Halb-Op entziehen Take HalfOp ircAccountOp entziehenTake Op ircAccount2Sprecherkaubnis entziehen Take Voice ircAccount"Sperrung aufhebenUnBan ircAccountSprecherlaubnisVoice ircAccountErweitertAdvancedircAccountSettingsClass Alter:Age:ircAccountSettingsClass.Alternativer Spitzname:Alternate Nick:ircAccountSettingsClass Apple RomanircAccountSettingsClassAnwendenApplyircAccountSettingsClassDBeim Starten automatisch verbindenAutologin on startircAccountSettingsClass\Nach dem Verbinden automatisch Befehle senden: Autosend commands after connect:ircAccountSettingsClass Avatar URL:ircAccountSettingsClassBig5ircAccountSettingsClass Big5-HKSCSircAccountSettingsClassAbbrechenCancelircAccountSettingsClassCodepage: Codepage:ircAccountSettingsClassEUC-JPircAccountSettingsClassEUC-KRircAccountSettingsClassWeiblichFemaleircAccountSettingsClass GB18030-0ircAccountSettingsClassGeschlecht:Gender:ircAccountSettingsClassAllgemeinGeneralircAccountSettingsClassIBM 850ircAccountSettingsClassIBM 866ircAccountSettingsClassIBM 874ircAccountSettingsClass(IRC Konto bearbeitenIRC Account SettingsircAccountSettingsClass ISO 2022-JPircAccountSettingsClass ISO 8859-1ircAccountSettingsClass ISO 8859-10ircAccountSettingsClass ISO 8859-13ircAccountSettingsClass ISO 8859-14ircAccountSettingsClass ISO 8859-15ircAccountSettingsClass ISO 8859-16ircAccountSettingsClass ISO 8859-2ircAccountSettingsClass ISO 8859-3ircAccountSettingsClass ISO 8859-4ircAccountSettingsClass ISO 8859-5ircAccountSettingsClass ISO 8859-6ircAccountSettingsClass ISO 8859-7ircAccountSettingsClass ISO 8859-8ircAccountSettingsClass ISO 8859-9ircAccountSettingsClassIdentittIdentifyircAccountSettingsClass Iscii-BngircAccountSettingsClass Iscii-DevircAccountSettingsClass Iscii-GjrircAccountSettingsClass Iscii-KndircAccountSettingsClass Iscii-MlmircAccountSettingsClass Iscii-OriircAccountSettingsClass Iscii-PnjircAccountSettingsClass Iscii-TlgircAccountSettingsClass Iscii-TmlircAccountSettingsClass JIS X 0201ircAccountSettingsClass JIS X 0208ircAccountSettingsClassKOI8-RircAccountSettingsClassKOI8-UircAccountSettingsClass Sprachkentnisse: Languages:ircAccountSettingsClassWohnort:LocationircAccountSettingsClassMnnlichMaleircAccountSettingsClass MuleLao-1ircAccountSettingsClassSpitzname:Nick:ircAccountSettingsClassOkOKircAccountSettingsClassSonstiges:Other:ircAccountSettingsClassVBeim Verlassen des Raumes Nachricht senden: Part message:ircAccountSettingsClass Port:Port:ircAccountSettingsClassXBeim Verlassen des Servers Nachricht senden: Quit message:ircAccountSettingsClassROMAN8ircAccountSettingsClass Wirklicher Name: Real Name:ircAccountSettingsClassServer:Server:ircAccountSettingsClass Shift-JISircAccountSettingsClassTIS-620ircAccountSettingsClassTSCIIircAccountSettingsClassUTF-16ircAccountSettingsClassUTF-16BEircAccountSettingsClassUTF-16LEircAccountSettingsClassUTF-8ircAccountSettingsClassUnbekannt UnspecifiedircAccountSettingsClassWINSAMI2ircAccountSettingsClass Windows-1250ircAccountSettingsClass Windows-1251ircAccountSettingsClass Windows-1252ircAccountSettingsClass Windows-1253ircAccountSettingsClass Windows-1254ircAccountSettingsClass Windows-1255ircAccountSettingsClass Windows-1256ircAccountSettingsClass Windows-1257ircAccountSettingsClass Windows-1258ircAccountSettingsClass"%1 setzt Modus %2%1 has set mode %2 ircProtocol*%1 Antwort von %2: %3%1 reply from %2: %3 ircProtocol %1 frgt nach %2%1 requests %2 ircProtocolF%1 frgt nach unbekannten Befehl %2%1 requests unknown command %2 ircProtocol Verbinden mit %1Connecting to %1 ircProtocolHVersuche alternativen Spitznamen: %1Trying alternate nick: %1 ircProtocolErweitertAdvancedircSettingsClassAllgemeinMainircSettingsClass ircSettingsircSettingsClass Raum:Channel:joinChannelClassRaum betreten Join ChanneljoinChannelClass.Raumliste geladen. (%1)Channels list loaded. (%1) listChannel0Empfange Raumliste... %1Fetching channels list... %1 listChannel4Empfange Raumliste... (%1)Fetching channels list... (%1) listChannel,Raumliste anfordern... Sending channels list request... listChannel

listChannelClassRaumChannellistChannelClassRaumliste Channels ListlistChannelClassFiltern: Filter by:listChannelClassListe anfordern Request listlistChannelClass ThemaTopiclistChannelClassBenutzerUserslistChannelClass textDialogtextDialogClassqutim-0.2.0/languages/de_DE/binaries/jabber.qm0000644000175000017500000017521611273014333022613 0ustar euroelessareuroelessar֍w֍<֍ ֍֍Bn֍C֍G֍UF֍֍&ِdzze.56' yp(6*;~+@FT+<H5 H5KH5RLlzO GO}VEgDfFVx/]݆E1{2e6(Z;a'$7M(R +v'+DU0ђJ 1)tX3j*7AHNYHw9BHw9CHw9aHI7IhFI}J N3J+FJ+TJ6G'J6JpJ6UJ6yJ63J6J!eKdLb|LʘGYL)M ۰M Ny&mNvNOJ19OjzdOa9S)*Te+lTNTTgTEVEcVEWizgW,WhsY'b\YbOZ OZZ[1)^%cn9cn:|i\Zh,invBy.v?^T5sK1>"n>XUiVx3A6)ŖIP$ $[CB~ Wu: ]CioJ.% ); ? :Aq 7=~t O'UM X^HY2>Z@}]7:Mm4lsC s|ejdH-xw]T0rTD Or )lS#eAPuIA5F%ߚMoU_|trz&v< }N4fNXj{6U^J3i>N%kYW4mO(Mj6o~b6U7G+TIlXXrYV=^onrH%:|:u9^d5<yÌDzAon۝D&#"IGJO L'4?P6rflrrqJjytwz(}w7a7s~jTC?II@IB7ICIEpIVNIW0IbIlGI9IITafVfWt)!-WsG#79 c֓+̸,+4 @{fRIl:l:|y%&1N'V.h(ZOSed).u*L5 6L9*7jS<\7UHC8CHU\*^ǂe0E[nLDyuq.zUp^Dr@#-GK;y/3zG0& Ph3Tff0[|S3פ M0#C -DM7;DFjN`FdM S ;Z~#hDnm,*O>xLY{NI*Thd;Y=1-L]LG4 ŽjNLZ*L;Zk yֳNz?@G6b|Y.Y.kG9/ G9k%=Ynntwt3{}##$5(,<8@_\>iarzp{~=~8s$t~_R7<t"K(>z"twlaMt~G>bKah/-;tD#P28(E8S2A6#8ei>8CnF(Uo_kW>n` |0n~\%WD?s.L'<*dA}R$ zܲ#67<Je!27JOJŽ-Su1blu.P̧% # )aU 6q 8aBO <#. B5k; I~ P{q P^a _L_ f<% l ySt0` = $ M  ZK đ4$ P7=* Ơ _@ . G L' 7= " . N s` wn [ kI - 4$] >G >Г/ C* F 7> L <V eͲZ f '4r f޷ gDE gK( gU lJh oU x 0 '4 Ԏ/ u5 %m 5A= v / : > >F >g A *P ~ 0 St% td 1 S$ 2z 2 ! TW 2 F  ʼ 0 0'4 ) )`N ]R N Y] nt 4. * ]oo _E9  ]>  ]>D .u #u% # (C -zh 0Ea NI8 Sqf dN e]x ntZ~ ntْ #- / < '6 ̩5 { | R9c1 7 %)V ?R %%}R Y `[ BK B B oB: 'p: {a E,= E "  D  (-E /4-} > RV20 ]$: f gA]C t )6 S\ Sl S+ S z )#- H? x,z s\ (oZ -Y/ "E " O, qK( ށ 4 $m ! '63  2@ ! &T ;$ M S* dt, 7@ >Ι P` ue ~ V <P^9?yn+nF+n=x)=*P Vd"6i 2i2ulbm907AAn\F)t6 b4x @@`bG@\ h0!7~fL]MhRk>*$Rk>yXPjZw4f&gi>"k^3knm"^Bqxit"i.t8LCu/v m8?/7Ò'N|5w/iErlauben AuthorizeAcceptAuthDialogAblehnenDenyAcceptAuthDialogFormAcceptAuthDialogIgnorierenIgnoreAcceptAuthDialog<keine Gruppe>  AddContactHinzufgenAdd AddContact&Benutzer hinzufgenAdd User AddContactAbbrechenCancel AddContactGruppe:Group: AddContactJabber ID: Jabber ID: AddContact Name:Name: AddContact.Erlaubnisanfrage sendenSend authorization request AddContact*BenutzerinformationenUser information AddContactFormContacts*QIP x-Status anzeigen Show QIP xStatus in contact listContacts4Statusnachrichten anzeigen(Show contact status text in contact listContactsHGenauere Ttigkeits-Symbole anzeigen+Show extended activity icon in contact listContacts6Ttigkeits-Symbole anzeigen'Show main activity icon in contact listContactsbHauptressource in den Benachrichtigungen anzeigen#Show main resource in notificationsContacts4Stimmungs-Symbole anzeigenShow mood icon in contact listContactsL"Nicht autorisiert" - Symbole anzeigenShow not authorized iconContacts,Musik-Symbole anzeigenShow tune icon in contact listContactsAbbrechenCancelDialogDialogDialogOkOkDialogAbwesend:Away:JabberSettingsNicht stren:DND:JabberSettings&Standard-Ressource:Default resource:JabberSettingsBKeine Anfragen fr Avatare sendenDon't send request for avatarsJabberSettingsFormJabberSettingsChatfreudig:Free for chat:JabberSettings8Port fr eingehende Dateien:Listen port for filetransfer:JabberSettings Nicht verfgbar:NA:JabberSettingsOnline:Online:JabberSettingsBPrioritt ist vom Status abhngigPriority depends on statusJabberSettingsPNach Verbindungsabbruch wieder verbindenReconnect after disconnectJabberSettings*Automatisch eintreten Auto joinJoinChatLesezeichen BookmarksJoinChatKonferenz ConferenceJoinChatH:mm:ssJoinChatVerlaufHistoryJoinChatEintretenJoinJoinChat&Konferenz beitretenJoin groupchatJoinChatNameNameJoinChatSpitznameNickJoinChatPasswortPasswordJoinChatDie letzten Request last JoinChat@Anfordern aller Nachrichten seitRequest messages sinceJoinChatXAnfordern aller Nachrichten seit der Uhrzeit#Request messages since the datetimeJoinChatSpeichernSaveJoinChat SuchenSearchJoinChatEinstellungenSettingsJoinChat*Nachrichten anfordernmessagesJoinChat%1 LoginForm%1 LoginFormRegistrierung Registration LoginForm6Bitte ein Passwort eingebenYou must enter a password LoginFormJBitte eine gltige Jabber-ID eingebenYou must enter a valid jid LoginFormJID:JID:LoginFormClass LoginFormLoginFormClassPasswort: Password:LoginFormClassNDieses Konto erstellen (auf dem Server)Register this accountLoginFormClass E-MailE-mailPersonalFormPersonalAllgemeinGeneralPersonal PrivatHomePersonalTelefonPhonePersonal ArbeitWorkPersonal%1QObject%1 Tage%1 daysQObject%1 Stunden%1 hoursQObject%1 Minuten %1 minutesQObject%1 Sekunde %1 secondQObject%1 Sekunden %1 secondsQObject%1 Jahre%1 yearsQObject 1 Tag1 dayQObject1 Stunde1 hourQObject1 Minute1 minuteQObject 1 Jahr1 yearQObject%1QObject<font size='2'><b>Autorisierung:</b> <i>From</i> (Der Kontakt ist autorisiert, Sie nicht)</font>7Authorization: FromQObjectr<font size='2'><b>Autorisierung:</b> <i>Keiner</i></font>7Authorization: NoneQObject<font size='2'><b>Autorisierung:</b> <i>To</i> (Sie sind autorisiert, der Kontakt nicht)</font>5Authorization: ToQObjectb<font size='2'><b>Mglicher Client:</b> %1</font>0Possible client: %1QObject`<font size='2'><b>Statusnachricht:</b> %1</font>,Status text: %1QObject<font size='2'><b>Offline seit:</b> <i>%1</i> (Nachricht: <i>%2</i>)</font>VUser went offline at: %1 (with message: %2)QObjecth<font size='2'><b>Offline seit:</b> <i>%1</i></font><User went offline at: %1QObject#%1: %2QObject%1QObjectX<font size='2'><i>Hrt gerade:</i> %1</font>*Listening: %1QObjectTtigkeitActivityQObjectngstlichAfraidQObject Alle Dateien (*) All files (*)QObjectVerblfftAmazedQObjectAmoursAmorousQObjectBseAngryQObjectVerrgertAnnoyedQObject BangeAnxiousQObject ErregtArousedQObjectBeschmtAshamedQObjectGelangweiltBoredQObject TapferBraveQObject RuhigCalmQObjectVorsichtigCautiousQObjectUnterkhltColdQObjectZuversichtlich ConfidentQObjectVerwirrtConfusedQObjectNachdenklich ContemplativeQObjectZufrieden ContentedQObjectGriesgrmigCrankyQObjectVerrcktCrazyQObjectSchpferischCreativeQObjectNeugierigCuriousQObject NiedergeschlagenDejectedQObjectDeprimiert DepressedQObjectEnttuscht DisappointedQObjectAngewidert DisgustedQObjectBestrztDismayedQObjectAbgelenkt DistractedQObjectHausarbeiten Doing choresQObjectTrinkenDrinkingQObject EssenEatingQObjectVerlegen EmbarrassedQObjectNeidischEnviousQObjectAufgeregtExcitedQObjectTrainieren ExercisingQObjectVerfhrerisch FlirtatiousQObjectFrustriert FrustratedQObjectDankerflltGratefulQObjectBetrbtGrievingQObjectKrperpflegeGroomingQObjectMrrischGrumpyQObjectSchuldbewusstGuiltyQObjectFrhlichHappyQObjectVerabredungHaving appointmentQObjectHoffnungsvollHopefulQObjectBrenzligHotQObjectGedemtigtHumbledQObjectErniedrigt HumiliatedQObjectHungrigHungryQObjectVerletztHurtQObjectBeeindruckt ImpressedQObjectEhrfurchtsvollIn aweQObjectVerliebtIn loveQObjectUnproduktivInactiveQObject Emprt IndignantQObjectInteressiert InterestedQObjectBerauscht IntoxicatedQObjectUnbesiegbar InvincibleQObjectEiferschtigJealousQObject.Konferenz beitreten aufJoin groupchat onQObject EinsamLonelyQObjectVerlorenLostQObjectGlcklichLuckyQObject GemeinMeanQObjectStimmungMoodQObjectLaunischMoodyQObject NervsNervousQObjectGleichgltigNeutralQObjectBeleidigtOffendedQObjectDatei ffnen Open FileQObjectEntrstetOutragedQObjectVerspieltPlayfulQObject StolzProudQObjectEntspanntRelaxedQObjectEntspannenRelaxingQObjectErleichtertRelievedQObjectReumtig RemorsefulQObjectUnruhigRestlessQObjectTraurigSadQObjectSarkastisch SarcasticQObjectZufrieden SatisfiedQObjectErnsthaftSeriousQObjectSchockiertShockedQObjectSchchternShyQObject KrankSickQObjectSchlfrigSleepyQObjectSpontan SpontaneousQObjectGestresstStressedQObjectEntschlossenStrongQObjectberrascht SurprisedQObject RedenTalkingQObjectDankbarThankfulQObjectDurstigThirstyQObjectbernchtigtTiredQObjectUnterwegs TravelingQObject MusikTuneQObjectHIn undefinierter Stimmung befindlich UndefinedQObjectUnbekanntUnknownQObjectKraftlosWeakQObjectArbeitenWorkingQObjectBesorgtWorriedQObject"Im Welless-Center at the spaQObjectZhneputzenbrushing teethQObject&Lebensmittel kaufenbuying groceriesQObject PutzencleaningQObjectProgrammierencodingQObjectPendeln commutingQObject KochencookingQObjectRadfahrencyclingQObject TanzendancingQObjectFreier Tagday offQObjectReparaturendoing maintenanceQObjectAbsplendoing the dishesQObjectWsche waschendoing the laundryQObject FahrendrivingQObject AngelnfishingQObjectSpielengamingQObjectGartenarbeiten gardeningQObjectBeim Friseurgetting a haircutQObjectAusgehen going outQObjectHerumgammeln hanging outQObjectBier having a beerQObject.kleine Zwischenmahlzeithaving a snackQObjectFrhstckhaving breakfastQObject Kaffee having coffeeQObjectAbendessen having dinnerQObjectMittagessen having lunchQObjectTee having teaQObjectUntergetauchthidingQObjectWandernhikingQObjectMit dem Autoin a carQObjectMeeting in a meetingQObjectIm Real Life in real lifeQObject JoggenjoggingQObject Im Buson a busQObjectIm Flugzeug on a planeQObject Im Zug on a trainQObject"Auf einem Ausflug on a tripQObjectTelefonieren on the phoneQObjectIm Urlaub on vacationQObject&Videotelefon /-chaton video phoneQObjectParty!!partyingQObjectSport machenplaying sportsQObject BetenprayingQObject LesenreadingQObject Proben rehearsingQObject LaufenrunningQObject$Besorgungen machenrunning an errandQObjectJahresurlaubscheduled holidayQObjectRasierenshavingQObjectEinkaufsbummelshoppingQObjectSkifahrenskiingQObjectSchlafensleepingQObjectRauchensmokingQObject0Soziale Kontakte pflegen socializingQObject LernenstudyingQObjectSonnenbad sunbathingQObjectSchwimmenswimmingQObject Baden taking a bathQObjectDuschentaking a showerQObjectNachdenkenthinkingQObject Zu FuwalkingQObjectGassi gehenwalking the dogQObjectFernsehen watching TVQObject$Einen Film ansehenwatching a movieQObjectKrafttraining working outQObjectSchreibenwritingQObjectAnwendenApply RoomConfigAbbrechenCancel RoomConfigForm RoomConfigOkOk RoomConfigAdministratorenAdministratorsRoomParticipantAnwendenApplyRoomParticipantAusgesperrtBannedRoomParticipantAbbrechenCancelRoomParticipantFormRoomParticipantJIDJIDRoomParticipantMitgliederMembersRoomParticipantOkOkRoomParticipantBesitzerOwnersRoomParticipant GrundReasonRoomParticipant*Automatisch eintreten Auto join SaveWidget Name:Bookmark name: SaveWidgetAbbrechenCancel SaveWidgetKonferenz: Conferene: SaveWidgetSpitzname:Nick: SaveWidgetPasswort: Password: SaveWidgetSpeichernSave SaveWidget2Als Lesezeichen speichernSave to bookmarks SaveWidgetFelder leerenClearSearchSchlieenCloseSearchAbrufenFetchSearchFormSearch SuchenSearchSearchServer:Server:SearchlServer angeben und die verfgbaren Suchfelder abrufen.$Type server and fetch search fields.Search Konferenz suchenSearch conferenceSearchConferenceService suchenSearch service SearchService Transport suchenSearch transportSearchTransport2Zur Proxyliste hinzufgenAdd to proxy listServiceBrowser6Zur Kontaktliste hinzufgen Add to rosterServiceBrowserSchlieenCloseServiceBrowser Befehl ausfhrenExecute commandServiceBrowserJIDJIDServiceBrowser&Konferenz beitretenJoin conferenceServiceBrowserNameNameServiceBrowserRegistrierenRegisterServiceBrowser SuchenSearchServiceBrowserServer:Server:ServiceBrowserVCard anzeigen Show VCardServiceBrowserjServiceBrowserServiceBrowser& VCardAvatarx%1&nbsp;(<font color='#808080'>Falsches Datumsformat</font>)8%1 (wrong date format) VCardBirthdayGeburtstag: Birthday: VCardBirthdayOrt:City: VCardRecord Firma:Company: VCardRecord Land:Country: VCardRecordAbteilung: Department: VCardRecordPostfach:PO Box: VCardRecordPostleitzahl: Post code: VCardRecordRegion:Region: VCardRecord Rang:Role: VCardRecordHomepage:Site: VCardRecord$Strae/Hausnummer:Street: VCardRecordNamensprfix:Title: VCardRecord

 XmlConsole

 XmlConsole LeerenClear XmlConsoleSchlieenClose XmlConsoleForm XmlConsoleXML Input... XML Input... XmlConsoleS&chlieen&Close XmlPrompt&Senden&Send XmlPromptXML Input XML Input XmlPromptAbbrechenCancelactivityDialogClassAuswhlenChooseactivityDialogClass&Ttigkeit auswhlenChoose your activityactivityDialogClassAbbrechenCancelcustomStatusDialogClassAuswhlenChoosecustomStatusDialogClass$Stimmung auswhlenChoose your moodcustomStatusDialogClass&Benutzer hinzufgenAdd new contactjAccount,Benutzer hinzufgen zuAdd new contact onjAccountSonstiges AdditionaljAccountAbwesendAwayjAccountKonferenzen ConferencesjAccountNicht strenDNDjAccountBenutzer suchen Find usersjAccountChatfreudig Free for chatjAccount&Unsichtbar fr alleInvisible for alljAccountJUnsichtbar nur fr "Unsichtbar-Liste"!Invisible only for invisible listjAccount&Konferenz beitretenJoin groupchatjAccountNicht verfgbarNAjAccountOfflineOfflinejAccount OnlineOnlinejAccount$XML-Konsole ffnenOpen XML consolejAccountPrivatstatusPrivacy statusjAccountService BrowserService browserjAccountServicesServicesjAccountTtigkeit Set activityjAccountStimmungSet moodjAccount6Meine vCard anzeigen/ndernView/change personal vCardjAccount"Sichtbar fr alleVisible for alljAccountBSichtbar nur fr "Sichtbar-Liste"Visible only for visible listjAccount`Bitte ein Passwort in "Einstellungen" eintragen.&You must enter a password in settings.jAccountSie mssen eine gltige JID verwenden. Bitte erstellen Sie ihr Jabber-Konto neu.?You must use a valid jid. Please, recreate your jabber account.jAccount"Bearbeiten von %1 Editing %1jAccountSettingsWarnungWarningjAccountSettings6Bitte ein Passwort eingebenYou must enter a passwordjAccountSettings KontoAccountjAccountSettingsClass ImmerAlwaysjAccountSettingsClassAnwendenApplyjAccountSettingsClass4Bentigt AuthentifizierungAuthenticationjAccountSettingsClassDBeim Starten automatisch verbindenAutoconnect at startjAccountSettingsClassAbbrechenCanceljAccountSettingsClassFTraffic komprimieren (wenn mglich)Compress traffic (if possible)jAccountSettingsClassVerbindung ConnectionjAccountSettingsClassStandardDefaultjAccountSettingsClass2Verbindung verschlsseln:Encrypt connection:jAccountSettingsClassHTTPjAccountSettingsClassHost-Adresse:Host:jAccountSettingsClassJID:JID:jAccountSettingsClassFDen letzten Status wiederherstellenKeep previous session statusjAccountSettingsClass6Lesezeichen lokal speichernLocal bookmark storagejAccountSettingsClass^Server Host-Adresse und Port manuell einstellen!Manually set server host and portjAccountSettingsClassNieNeverjAccountSettingsClass KeinerNonejAccountSettingsClassOkOKjAccountSettingsClassPasswort: Password:jAccountSettingsClass Port:Port:jAccountSettingsClassPrioritt: Priority:jAccountSettingsClassProxy-ServerProxyjAccountSettingsClassTyp: Proxy type:jAccountSettingsClassRessource: Resource:jAccountSettingsClassSOCKS 5jAccountSettingsClassHPrioritt vom Status abhngig machen$Set priority depending of the statusjAccountSettingsClassDiese Option fr Server verwenden, die keine Lesezeichen untersttzen4Use this option for servers doesn't support bookmarkjAccountSettingsClassBenutzername: User name:jAccountSettingsClassWenn verfgbarWhen availablejAccountSettingsClassjAccountSettingsjAccountSettingsClass<keine Gruppe>  jAddContactServicesServices jAddContactAbbrechenCanceljAdhoc WeiterNextjAdhocOkOkjAdhoc ZurckPreviousjAdhoc(%1 wurde ausgesperrt%1 has been banned jConference0%1 wurde rausgeschmissen%1 has been kicked jConference2%1 hat den Raum verlassen%1 has left the room jConference>%1 hat das Thema in %2 gendert%1 has set the subject to: %2 jConference%1 ist jetzt %2%1 is now known as %2 jConference:%2 (%1) hat den Raum betreten%2 (%1) has joined the room jConference0%2 hat den Raum betreten%2 has joined the room jConference>%2 hat den Raum als %1 betreten%2 has joined the room as %1 jConference%2 ist jetzt %1 %2 now is %1 jConferenceH%3 (%2) hat den Raum als %1 betreten!%3 (%2) has joined the room as %1 jConference(%3 (%2) ist jetzt %1%3 (%2) now is %1 jConferenceL%3 hat den Raum als %1 und %2 betreten#%3 has joined the room as %1 and %2 jConference,%3 ist jetzt %1 und %2%3 now is %1 and %2 jConferenceV%4 (%3) hat den Raum als %1 und %2 betreten(%4 (%3) has joined the room as %1 and %2 jConference6%4 (%3) ist jetzt %1 und %2%4 (%3) now is %1 and %2 jConference^<font size='2'><b>Mitgliedschaft:</b> %1</font>,Affiliation: %1 jConferenceH<font size='2'><b>JID:</b> %1</font>$JID: %1 jConferenceJ<font size='2'><b>Rang:</b> %1</font>%Role: %1 jConference6Zur Kontaktliste hinzufgenAdd to contact list jConferenceAussperrenBan jConference(Aussperren-Nachricht Ban message jConferencelKonflikt: Der gewnschte Spitzname ist schon vergeben.HConflict: Desired room nickname is in use or registered by another user. jConference<JID in Zwischenablage kopierenCopy JID to clipboard jConferencefVerboten: Zugriff verweigert, Benutzer ausgesperrt.)Forbidden: Access denied, user is banned. jConference*Zu Konferenz einladenInvite to groupchat jConference`Objekt nicht gefunden: Der Raum existiert nicht.(Item not found: The room does not exist. jConference.Konferenz beitreten aufJoin groupchat on jConferenceRausschmeienKick jConference*Rausschmei-Nachricht Kick message jConferenceModerator Moderator jConferencejNicht akzeptabel: Spitznamen in Rumen sind gesperrt.+Not acceptable: Room nicks are locked down. jConferencejNicht erlaubt: Das erstellen von Rumen ist verboten.)Not allowed: Room creation is restricted. jConferenceLNicht autorisiert: Passwort notwendig."Not authorized: Password required. jConferenceTeilnehmer Participant jConferenceRegistrierung notwendig: Benutzer ist nicht auf der Mitgliederliste.6Registration required: User is not on the member list. jConference4Konferenz wieder beitretenRejoin to conference jConferenceRaum einrichtenRoom configuration jConference&Raum einrichten: %1Room configuration: %1 jConferenceRaum TeilnehmerRoom participants jConference&Raum Teilnehmer: %1Room participants: %1 jConference2Als Lesezeichen speichernSave to bookmarks jConference~Service nicht verfgbar: Max. Anzahl der Benutzer ist erreicht.>Service unavailable: Maximum number of users has been reached. jConference"Das Thema ist: %2The subject is: %2 jConferenceNUnbekannter Fehler: Keine Beschreibung.Unknown error: No description. jConferenceDer Benutzer %1ldt dich zur Konferenz %2 mit Begrndung "%3" ein Einladung annehmen?GUser %1 invite you to conference %2 with reason "%3" Accept invitation? jConferenceBesucherVisitor jConference,Du wurdest ausgesperrtYou have been banned jConference4Du wurdest ausgesperrt vonYou have been banned from jConference4Du wurdest rausgeschmissenYou have been kicked jConference<Du wurdest rausgeschmissen vonYou have been kicked from jConferenceAdministrator administrator jConferenceAusgesperrtbanned jConferenceGastguest jConferenceMitgliedmember jConferenceModerator moderator jConferenceBesitzerowner jConferenceTeilnehmer participant jConferenceBesuchervisitor jConferencemit dem Grund: with reason: jConferenceohne Grundwithout reason jConferenceAnnehmenAcceptjFileTransferRequestAblehnenDeclinejFileTransferRequestDateiname: File name:jFileTransferRequestDateigre: File size:jFileTransferRequestFormjFileTransferRequestVon:From:jFileTransferRequestDatei speichern Save FilejFileTransferRequestAbbrechenCanceljFileTransferWidgetSchlieenClosejFileTransferWidgetFertig!Done...jFileTransferWidgetbertragen:Done:jFileTransferWidgetDateigre: File size:jFileTransferWidget(Dateibertragung: %1File transfer: %1jFileTransferWidgetDateiname: Filename:jFileTransferWidgetFormjFileTransferWidgetEmpfangen... Getting...jFileTransferWidget$Verstrichene Zeit: Last time:jFileTransferWidget ffnenOpenjFileTransferWidget$Verbleibende Zeit:Remained time:jFileTransferWidgetSenden... Sending...jFileTransferWidget Geschwindigkeit:Speed:jFileTransferWidgetFortschritt:Status:jFileTransferWidgetWarten... Waiting...jFileTransferWidgetNeue KonferenzNew conference jJoinChatNeuer Chatnew chat jJoinChatKontakteContactsjLayerAllgemeinJabber GeneraljLayer%2 <%1> jProtocolEs ist ein Streaming-Fehler aufgetreten. Der Stream wurde geschlossen.3A stream error occured. The stream has been closed. jProtocol>Ein I/O Fehler ist aufgetreten.An I/O error occured. jProtocolNEin XML-Phrasen Fehler ist aufgetreten.An XML parse error occurred. jProtocolJAuthentifizierung fehlgeschlagen. Falscher Benutzername / falsches Passwort oder das Konto existiert nicht. ClientBase::authError() verwenden um den Grund zu finden.yAuthentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. jProtocol ErlaubnisanfrageAuthorization request jProtocolRDie Erlaubnis wurde dem Benutzer entzogen$Contacts's authorization was removed jProtocolpHTTP-/SOCKS5-Proxy Authentifizierung ist fehlgeschlagen.(HTTP/SOCKS5 proxy authentication failed. jProtocol.JID: %1<br/>Unttig: %2JID: %1
Idle: %2 jProtocolJID: %1<br/>Unbekannter StanzaError! Bitte die Entwickler benachrichtigen.<br/>Fehler: %2NJID: %1
It is unknown StanzaError! Please notify developers.
Error: %2 jProtocolJID: %1<br/>Das angeforderte Feature wird vom Server oder Empfnger nicht untersttzt.PJID: %1
The feature requested is not implemented by the recipient or server. jProtocolJID: %1<br/>Der Anforderer hat nicht die erforderlichen Rechte, um die Aktion durchzufhren.bJID: %1
The requesting entity does not possess the required permissions to perform the action. jProtocolnVerhandlung/Initialisierung Kompression fehlgeschlagen.,Negotiating/initializing compression failed. jProtocol>Kein freier Speicher mehr. o_0.Out of memory. Uhoh. jProtocolZAuflsen des Server-Hostnamen fehlgeschlagen.'Resolving the server's hostname failed. jProtocol"Absender: %2 <%1>Sender: %2 <%1> jProtocolAbsender:  Senders:  jProtocolServicesServices jProtocolBetreff: %1 Subject: %1 jProtocolDer HTTP-/SOCKS5-Proxy bentigt eine nicht untersttzte Art der Authentifizierung.=The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. jProtocolnDer HTTP-/SOCKS5-Proxy bentigt eine Authentifizierung..The HTTP/SOCKS5 proxy requires authentication. jProtocol&Die vom Server angebotenen Authentifizierungsarten werden nicht untersttzt, oder der Server hat berhaupt keine Authentifizierungsarten angeboten.hThe auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. jProtocolDie Verbindung wurde vom Server zurckgewiesen (auf dem Socket-Level).?The connection was refused by the server (on the socket level). jProtocolvDie Version des eingehenden Streams wird nicht untersttzt..The incoming stream's version is not supported jProtocolDer Server hat kein TLS angeboten whrend es aktiviert war oder TLS wurde nicht integriert.WThe server didn't offer TLS while it was set to be required or TLS was not compiled in. jProtocolDas Zertifikat des Servers konnte nicht berprft werden, oder der TLS-Handshake wurde nicht erfolgreich abgeschlossen.bThe server's certificate could not be verified or the TLS handshake did not complete successfully. jProtocolTDer Stream wurde (vom Server) geschlossen.+The stream has been closed (by the server). jProtocolDer Benutzer (oder ein hherwertiges Protokoll) hat die Verbindung getrennt.;The user (or higher-level protocol) requested a disconnect. jProtocolBKeine aktive Verbindung gefunden.There is no active connection. jProtocolURL: %1URL: %1 jProtocolUnbekannter Fehler. Es ist erstaunlich, dass Sie ihn berhaupt sehen... O_o3Unknown error. It is amazing that you see it... O_o jProtocol4Ungelesene Nachrichten: %1Unreaded messages: %1 jProtocol,Du wurdest autorisiertYou were authorized jProtocolDDeine Erlaubnis wurde dir entzogenYour authorization was removed jProtocolNDie vCard wurde erfolgreich gespeichertvCard is succesfully saved jProtocol&<h3>Ttigkeit:</h3>

Activity info:

 jPubsubInfo$<h3>Stimmung:</h3>

Mood info:

 jPubsubInfo<h3>Musik:</h3>

Tune info:

 jPubsubInfoKnstler: %1 Artist: %1 jPubsubInfoAllgemein: %1 General: %1 jPubsubInfoDauer: %1 Length: %1 jPubsubInfoName: %1Name: %1 jPubsubInfoBewertung: %1 Rating: %1 jPubsubInfoUrsprung: %1 Source: %1 jPubsubInfoGenauer: %1 Specific: %1 jPubsubInfoNachricht: %1Text: %1 jPubsubInfoTitel: %1 Title: %1 jPubsubInfoTitelnummer: %1 Track: %1 jPubsubInfo4URL: <a href="%1">link</a>Uri: link jPubsubInfoSchlieenClosejPubsubInfoClass(PubSub Informationen Pubsub infojPubsubInfoClass6Zur Kontaktliste hinzufgenAdd to contact listjRosterBZur "Ignorieren-Liste" hinzufgenAdd to ignore listjRosterBZur "Unsichtbar-Liste" hinzufgenAdd to invisible listjRoster>Zur "Sichtbar-Liste" hinzufgenAdd to visible listjRoster.Erlaubnisanfrage sendenAsk authorization fromjRoster:Erlaubnisanfrage an %1 sendenAsk authorization from %1jRosterAutorisierung AuthorizationjRoster,Benutzer autorisieren?Authorize contact?jRosterAbbrechenCanceljRosterpDer Benutzer wird aus der Kontaktliste gelscht. Sicher?&Contact will be deleted. Are you sure?jRoster<JID in Zwischenablage kopierenCopy JID to clipboardjRoster Benutzer lschenDelete contactjRoster@Aus "Ignorieren-Liste" entfernenDelete from ignore listjRoster@Aus "Unsichtbar-Liste" entfernenDelete from invisible listjRoster<Aus "Sichtbar-Liste" entfernenDelete from visible listjRosterMitDelete with contactsjRosterOhneDelete without contactsjRoster Befehl ausfhrenExecute commandjRoster"Befehl ausfhren:Execute command:jRosterStatus abfragenGet idlejRoster(Status abfragen von:Get idle from:jRosterGruppe:Group:jRoster,Zu Konferenz einladen:Invite to conference:jRosterEinloggenLog InjRosterAusloggenLog OutjRoster%1 verschiebenMove %1jRoster8In andere Gruppe verschieben Move to groupjRoster Name:Name:jRoster*PubSub Informationen: PubSub info:jRoster Grund:Reason:jRosterRegistrierenRegisterjRoster&Erlaubnis entziehenRemove authorization fromjRoster4%1 die Erlaubnis entziehenRemove authorization from %1jRosterNTransport mit seinen Kontakten lschen?"Remove transport and his contacts?jRoster&Benutzer umbenennenRename contactjRoster$Erlaubnis erteilenSend authorization tojRosterDatei senden Send filejRoster Datei senden an: Send file to:jRoster(Nachricht senden an:Send message to:jRosterServicesServicesjRosterTransports TransportsjRosterDeregistrieren UnregisterjRoster FehlerErrorjSearchJIDJIDjSearchJabber ID Jabber IDjSearchSpitznameNicknamejSearch SuchenSearchjSearch:<br/><b>Fhigkeiten:</b><br/>
Features:
jServiceBrowser:<br/><b>Identitten:</b><br/>
Identities:
jServiceBrowserKategorie:  category: jServiceBrowser Typ: type: jServiceBrowserEin Remote-Server oder Service der als teilweise oder ganze JID spezifiziert ist, konnte nicht in einer angemessenen Zeit kontaktiert werden.A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time.jServiceDiscoveryEin Remote-Server oder Service der als teilweise oder ganze JID spezifiziert ist, existiert fr den gewnschten Empfnger nicht.hA remote server or service specified as part or all of the JID of the intended recipient does not exist.jServiceDiscoveryDer Zugriff konnte nicht gewhrt werden, weil eine bestehende Ressource oder Sitzung den selben Namen oder die selbe Adresse hat.fAccess cannot be granted because an existing resource or session exists with the same name or address.jServiceDiscoveryDie angeforderte JID oder das angeforderte Objekt konnten nicht gefunden werden.4The addressed JID or item requested cannot be found.jServiceDiscoveryDas angeforderte Feature wird vom Server oder Empfnger nicht untersttzt, und konnte nicht verarbeitet werden.fThe feature requested is not implemented by the recipient or server and therefore cannot be processed.jServiceDiscoverytDer beabsichtigte Empfnger ist zur Zeit nicht erreichbar.2The intended recipient is temporarily unavailable.jServiceDiscoveryDas angeforderte Objekt hat sich seit der letzten Anforderung nicht verndert.?The item requested has not changed since it was last requested.jServiceDiscoveryDer Empfnger oder der Server kann nicht mehr ber diese Adresse kontaktiert werden.CThe recipient or server can no longer be contacted at this address.jServiceDiscoveryDer Empfnger oder Server erlaubt niemandem diese Aktion durchzufhren.HThe recipient or server does not allow any entity to perform the action.jServiceDiscoveryDer Empfnger oder Server leitet Anfragen zu dieser Information zu einer anderen Instanz weiter, normalerweise temporr.lThe recipient or server is redirecting requests for this information to another entity, usually temporarily.jServiceDiscovery:Der Empfnger oder Server versteht die Anfrage, aber weist die Verarbeitung zurck weil sie nicht die vom Server oder Empfnger gestellten Kriterien erfllt.The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server.jServiceDiscoveryDer Empfnger oder Server hat die Anforderung verstanden, aber sie nicht zu diesem Zeitpunkt erwartet.UThe recipient or server understood the request but was not expecting it at this time.jServiceDiscoveryDer Anforderer hat nicht die erforderlichen Rechte, um die Aktion durchzufhren.VThe requesting entity does not possess the required permissions to perform the action.jServiceDiscoveryDer Anforderer hat keinen Zugriff auf den angeforderten Service, weil ein Abonnement notwendig ist.kThe requesting entity is not authorized to access the requested service because a subscription is required.jServiceDiscoveryDer Anforderer ist nicht befugt auf den angeforderten Service zuzugreifen, weil eine Bezahlung erforderlich ist.dThe requesting entity is not authorized to access the requested service because payment is required.jServiceDiscoveryDer Anforderer hat keinen Zugriff auf den angeforderten Service, weil eine Registrierung notwendig ist.iThe requesting entity is not authorized to access the requested service because registration is required.jServiceDiscoveryDas empfangene XML ist fehlerhaft, oder konnte nicht verarbeitet werden.FThe sender has sent XML that is malformed or that cannot be processed.jServiceDiscoveryDer Absender muss einen korrekten Berechtigungsnachweis erbringen, bevor ihm erlaubt wird die Aktion durchzufhren.}The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials.jServiceDiscoveryBDer Absender hat eine XMPP-Adresse (oder Teile davon) bermittelt oder zur Verfgung gestellt, die nicht zu der im Adressierungsschema vereinbarten Syntax passt.The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme.jServiceDiscoveryDer Server konnte die Stanza aufgrund einer Fehlkonfiguration oder eines unbekannten internen Server-Fehlers nicht verarbeiten.vThe server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error.jServiceDiscoveryDer Server oder Empfnger stellt den angeforderten Service zur Zeit nicht zur Verfgung.IThe server or recipient does not currently provide the requested service.jServiceDiscoveryDem Server oder Empfnger fehlen die Systemressourcen, die fr die Verarbeitung der Anfrage notwendig sind.TThe server or recipient lacks the system resources necessary to service the request.jServiceDiscoveryLDer unbekannte Fehler ist aufgetreten.The unknown error condition.jServiceDiscovery %1@%2%1@%2 jSlotSignal&Unsichtbar fr alleInvisible for all jSlotSignalJUnsichtbar nur fr "Unsichtbar-Liste"!Invisible only for invisible list jSlotSignal"Sichtbar fr alleVisible for all jSlotSignalBSichtbar nur fr "Sichtbar-Liste"Visible only for visible list jSlotSignalAdresseAddress jTransportWohnortCity jTransport DatumDate jTransport E-MailE-Mail jTransportVornameFirst jTransportNachnameLast jTransportVerschiedenesMisc jTransportNameName jTransportSpitznameNick jTransportPasswortPassword jTransportTelefonPhone jTransportRegistrierenRegister jTransportLandState jTransportTextText jTransportHomepageURL jTransportPostleitzahlZip jTransport$Posfach hinzufgen Add PO boxjVCard*Geburtstag hinzufgen Add birthdayjVCard$Wohnort hinzufgenAdd cityjVCardLand hinzufgen Add countryjVCard.Beschreibung hinzufgenAdd descriptionjVCard&Homepage hinzufgen Add homepagejVCardName hinzufgenAdd namejVCard(Spitzname hinzufgenAdd nickjVCard*Firmenname hinzufgenAdd organization namejVCard(Abteilung hinzufgenAdd organization unitjVCard.Postleitzahl hinzufgen Add postcodejVCard"Region hinzufgen Add regionjVCardRang hinzufgenAdd rolejVCard"Strae hinzufgen Add streetjVCard.Namensprfix hinzufgen Add titlejVCardSchlieenClosejVCard*Bilddatei ist zu groImage size is too bigjVCardNBilder (*.gif *.bmp *.jpg *.jpeg *.png)'Images (*.gif *.bmp *.jpg *.jpeg *.png)jVCardDatei ffnen Open FilejVCard$Fehler beim ffnen Open errorjVCardNeu ladenRequest detailsjVCardSpeichernSavejVCard$Foto aktualisieren Update photojVCarduserInformationjVCardAbbrechenCanceltopicConfigDialogClass ndernChangetopicConfigDialogClassThema ndern Change topictopicConfigDialogClassqutim-0.2.0/languages/de_DE/binaries/qutimcoder.qm0000644000175000017500000003171611257677212023553 0ustar euroelessareuroelessarn).2-i2<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Plugin, das verschlsselte Unterhaltungen</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">mit beliebigen Kontakten ermglicht.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Entwickler Verschlsselungsalgorithmus:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maksim 'Loz' Velesiuk</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Entwickler Plugin:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(A) 2009</span></p></body></html> j

qutIM Coder

v0.1

Plugin, that lets you to organize encrypted chats with any

contact from your contact list.

Encryption algorithms developer:

Maksim 'Loz' Velesiuk

loz.accs@gmail.com

Plugin developer:

Ian 'NayZaK' Kazlauskas

nayzak@googlemail.com

(?) 2009

HelpUIberAboutHelpUI HilfeHelpHelpUIqrc:/htmls/help/help.htmlHelpUIOk??HelpUI.Benutzer contact QutimCoder& hat schon begonnen has already begun QutimCoder4 haben noch nicht begonnen have not been started yet QutimCoderHVerschlsselte Unterhaltung beginnenBegin encrypted chat QutimCoderFVerschlsselte Unterhaltung beendenClose encrypted chat QutimCoderVerschlsseln Encryption QutimCoder@Verschlsselte Unterhaltung mit Enqrypted chat with  QutimCoderLDiese Unterhaltung immer verschlsslen"Make this encrypted chat permanent QutimCoder:Wieder temporr verschlsseln Make this encrypted chat regular QutimCoderPlugin, das verschlsselte Unterhaltungen mit allen Benutzern ermglicht.bPlugin, that lets you to organize encrypted chat sessions with any contact from your contact list. QutimCoder Qutim Coder QutimCodervDiese Unterhaltung ist bereits permanent verschlsselt mit /You already have permanent encrypted chat with  QutimCoderTEs gibt keine permanente Unterhaltung mit -You don't have permanent encrypted chat with  QutimCoder BasisBaseSettingsCodingAbbrechenCancelSettingsCoding PrfenCheckSettingsCodingEinstellungenCoding SettingsSettingsCodingjFehler! Diese Faktorenkombination ist nicht verfgbar0Error! This factors combination is not availableSettingsCodingFaktorenFactorsSettingsCoding HilfeHelpSettingsCoding StufeLevelSettingsCodingOkOKSettingsCodingROK! Diese Faktorenkombination ist mglich)OK! This factors combination is availableSettingsCoding:Bitte zuerst die Hilfe lesen.Please, read Help first.SettingsCodingqutim-0.2.0/languages/de_DE/binaries/fmtune.qm0000644000175000017500000001205111273014333022647 0ustar euroelessareuroelessarj h> h h Z  .0 M  F) \BU \B  2  s Ž Ž 9 i8: iAM <C/ i <neu> EditStations"Sender hinzufgen Add station EditStations"Stream hinzufgen Add stream EditStations$Alle Dateien (*.*)All files (*.*) EditStationsSender lschenDelete station EditStationsSender lschen?Delete station? EditStationsStream lschen Delete stream EditStationsStream lschen?Delete stream? EditStationsNach untenDown EditStations"Sender bearbeiten Edit stations EditStationsExportierenExport EditStationsExportieren... Export... EditStationsFMtune XML (*.ftx) EditStations FormatFormat EditStationsFormat:Format: EditStationsKategorie:Genre: EditStations Bild:Image: EditStationsImportierenImport EditStationsImportieren... Import... EditStationsSprache: Language: EditStations Name:Name: EditStationsSpeichernSave EditStationsStream URL: Stream URL: EditStationsURLURL EditStationsURL:URL: EditStationsNach obenUp EditStationsEqualizer Equalizer Equalizer2Sender schnell hinzufgenFast add stationFastAddStation Name:Name:FastAddStationStream URL: Stream URL:FastAddStationstreamFastAddStationSchnell finden: Fast find: ImportExport FertigFinish ImportExportBitrate:Bitrate:Info Cover:Cover:InfoInformationen InformationInfo Radio:Radio:Info Titel:Song:InfoStream:Stream:Info Lnge:Time:Info^Es wurde eine falsche Version von BASS geladen.(An incorrect version of BASS was loaded. QMessageBox>Kann Gert nicht initialisierenCan't initialize device QMessageBox PausePause RecordingAufnehmenRecord RecordingAufnehmen Recording RecordingStopStop Recording%1% fmtunePlugin$Titelname kopierenCopy song name fmtunePlugin"Sender bearbeiten Edit stations fmtunePluginEqualizer Equalizer fmtunePlugin2Sender schnell hinzufgenFast add station fmtunePluginInformationen Information fmtunePlugin StummMute fmtunePluginRadio aus Radio off fmtunePluginRadio anRadio on fmtunePluginAufnehmen Recording fmtunePluginLautstrkeVolume fmtunePlugin<Standard> fmtuneSettingsberAboutfmtuneSettingsClassLGlobale Tastenkombinationen aktivieren"Activate global keyboard shortcutsfmtuneSettingsClass GerteDevicesfmtuneSettingsClassAllgemeinGeneralfmtuneSettingsClassAusgabegert:Output device:fmtuneSettingsClassPluginsPluginsfmtuneSettingsClassEinstellungenSettingsfmtuneSettingsClass&Tastenkombinationen ShortcutsfmtuneSettingsClass*Radio an-/abschalten:Turn on/off radio:fmtuneSettingsClassLeiser: Volume down:fmtuneSettingsClass Stumm: Volume mute:fmtuneSettingsClassLauter: Volume up:fmtuneSettingsClassqutim-0.2.0/languages/de_DE/binaries/gpgcrypt.qm0000644000175000017500000000226111257677212023227 0ustar euroelessareuroelessarz I  E| s|i80GPG Schlssel einstellen Set GPG KeyGPGCryptForm GPGSettingsEinstellungenSettings GPGSettings$Eigener Schlssel: Your Key: GPGSettings&Abbrechen&Cancel Passphrase&Ok&OK Passphrase$OpenPGP PassphraseOpenPGP Passphrase PassphraseDeine Passphrase wird bentigt, um OpenPGP Sicherheit verwenden zu knnen. Bitte deine Passphrase hier eingeben:VYour passphrase is needed to use OpenPGP security. Please enter your passphrase below: Passphrase,%1: OpenPGP Passphrase%1: OpenPGP Passphrase PassphraseDlgBSchlssel des Kontaktes auswhlenSelect Contact KeysetKey(Schlssel auswhlen: Select Key:setKeyqutim-0.2.0/languages/de_DE/binaries/weather.qm0000644000175000017500000000702611245037111023014 0ustar euroelessareuroelessar

Weather qutIM plugin

v0.1.2 (Info)

Author:

Nikita Belov

null@deltaz.ru

(c) 2008-2009

weatherSettingsClassberAboutweatherSettingsClassHinzufgenAddweatherSettingsClassOrteCitiesweatherSettingsClassOrt lschen Delete cityweatherSettingsClass.Name des Ortes eingebenEnter city nameweatherSettingsClass2Aktualisierungsintervall:Refresh period:weatherSettingsClass SuchenSearchweatherSettingsClassEinstellungenSettingsweatherSettingsClassZWetter als Statusnachricht des Ortes anzeigenShow weather in the status rowweatherSettingsClassqutim-0.2.0/languages/de_DE/binaries/webhistory.qm0000644000175000017500000001041111257677212023563 0ustar euroelessareuroelessar s )XAn-]C vN;i

Web History plugin for qutIM

svn version

Store history on web-server

Author:

Alexander Kazarin

boiler@co.ru

(c) 2009

historySettingsClassberAbouthistorySettingsClass:Bei Meldungen benachrichtigen%Enable notification when get messageshistorySettingsClassBenutzername:Login:historySettingsClassPasswort: Password:historySettingsClassEinstellungenSettingshistorySettingsClassjLokal in JSON-Dateien speichern (JSON History Plugin)1Store locally in JSON files (JSON History plugin)historySettingsClasspLokal in SQLite Datenbank speichern (SQL History Plugin)5Store locally in SQLite database (SQL History plugin)historySettingsClassURL:URL:historySettingsClassTNachrichten von WebHistory speichern:<br/>$Store messages from WebHistory:
webhistoryPlugin in JSON: %1<br/>in JSON: %1
webhistoryPlugin$in SQLite: %1<br/>in SQLite: %1
webhistoryPluginqutim-0.2.0/languages/de_DE/binaries/vkontakte.qm0000644000175000017500000000614211270557060023371 0ustar euroelessareuroelessar >M ) jL iFCB ~  <Gi Is s EdditAccountAnwendenApply EdditAccountDBeim Starten automatisch verbindenAutoconnect on start EdditAccountAbbrechenCancel EdditAccountJUpdates von Freunden berprfen alle: Check for friends updates every: EdditAccountJAuf neue Nachrichten berprfen alle:Check for new messages every: EdditAccount"Bearbeiten von %1 Editing %1 EdditAccountjAktiviere Foto-Update Benachrichtigungen von Freunden*Enable friends photo updates notifications EdditAccountForm EdditAccountAllgemeinGeneral EdditAccounthVolle URL bei neuen Foto-Benachrichtigungen anzeigen/Insert fullsize URL on new photos notifications EdditAccountnVorschau-URL bei neuen Foto-Benachrichtigungen anzeigen.Insert preview URL on new photos notifications EdditAccountDVerbindung aufrecht erhalten alle:Keep-alive every: EdditAccountOkOK EdditAccountPasswort: Password: EdditAccountBFreundesliste aktualisieren alle:Refresh friend list every: EdditAccountUpdatesUpdates EdditAccountDBeim Starten automatisch verbindenAutoconnect on start LoginFormE-Mail:E-mail: LoginFormForm LoginFormPasswort: Password: LoginFormh<font size='2'><b>Statusnachricht:</b>&nbsp;%1</font3Status message: %1Ie0E?e0E0SXCdPum6um c > >Z ) uB <fi(AnwendenApply EdditAccountDBeim Starten automatisch verbindenAutoconnect on start EdditAccountAbwesendAway EdditAccountBeschftigtBusy EdditAccountAbbrechenCancel EdditAccount`Dialog "Statusnachricht eingeben" nicht anzeigenDon't show autoreply dialog EdditAccount"Bearbeiten von %1 Editing %1 EdditAccountForm EdditAccountAllgemeinGeneral EdditAccountUnttigIdle EdditAccountOkOK EdditAccountTelefonieren On the phone EdditAccount OnlineOnline EdditAccountBeim Essen Out to lunch EdditAccountPasswort: Password: EdditAccountStatusoptionenStatuses EdditAccount(Bin gleich wieder daWill be right back EdditAccountDBeim Starten automatisch verbindenAutoconnect on start LoginFormE-Mail:E-mail: LoginFormForm LoginFormPasswort: Password: LoginFormAbwesendAwayMSNConnStatusBoxBeschftigtBusyMSNConnStatusBoxUnttigIdleMSNConnStatusBoxUnsichtbar InvisibleMSNConnStatusBoxOfflineOfflineMSNConnStatusBoxTelefonieren On the phoneMSNConnStatusBox OnlineOnlineMSNConnStatusBoxBeim Essen Out to lunchMSNConnStatusBox(Bin gleich wieder daWill be right backMSNConnStatusBoxOhne Gruppe Without groupMSNContactListqutim-0.2.0/languages/de_DE/binaries/twitter.qm0000644000175000017500000000251111233402241023046 0ustar euroelessareuroelessar :{ iDBeim Starten automatisch verbindenAutoconnect on start LoginFormForm LoginFormPasswort: Password: LoginForm2Benutzername oder E-Mail:Username or email: LoginForm2Twitter Protokoll-Fehler:Twitter protocol error: twApiWrapBeschreibung: Description: twContactListFavoriten:Favourites count: twContactListFollowers Followers twContactListFollowers:Followers count: twContactListFreundeFriends twContactListFreunde:Friends count: twContactList&Letzter Statustext:Last status text: twContactListWohnort: Location: twContactList Name:Name: twContactListStatuszhler:Statuses count: twContactListOfflineOfflinetwStatusObject OnlineOnlinetwStatusObjectqutim-0.2.0/languages/de_DE/binaries/qt_de.qm0000644000175000017500000054251211244206374022465 0ustar euroelessareuroelessar*y-*Tv*09*0+FÏ+F+L+ff+f^+zC|+*+++zC++P+_G+v?+++į*+į+į+C7P:9z;@6FC:&F0iFn4Fn4yGPHw9)IHw9PHI'mIAwI8J++/J6+J6EJ6Q?J6VJ6ďJ6ǏJ6&J6Jcb-eKQKcbLZXL#LEQLbM5VMbIMeuMNoO|DPFE.PFEPFEQpRqJR|iRqS8^ iTTʴT%U?^ՙU|N4U}rV1 V10VlhVdVpVbVrWoWT QWT*WTc<X~vXSXyX˙TXd&YsYƻYe`Yg5ZgeZkZt=[;^7l\4 \]4l\]4m\\atxgc'[lG|^cmqvOv3f~4L 5L.6CmIA&j[S#I`yɵnGLɵnEɵnɵnvɵnɵnɵn=ɵnB: BӢ* '%cicMEa7q  >,H@<px5#Q%UT(Ŏi*4L-ct}#25viorpNnw^xD|{y cMGpq"W22]{'.WIRAi9P3} dyt=QBP@y#*Fur . ~V Yd *"l )=-/=Nf1$T5~ze< u?2?NMNkyUiW~8X9=]$*`J1`jtJlglyzl}vtyFBvtyN1q"gs1cQ4)6O6S6^D2R*xseR T=l1~.ʲdUJ8EJEJ.{=8AA} j[yLuqn!eJJj?Em[MMExEw(KwH?^' I"  7|/oKm! N!e%&)gb*/eg5/;3ByEcIFN]OZf\cn`!bcփ_f]g&4jChmnDqx$q1tum5u(Z\{>i`}kars8L~ǫE k{ny Z$< $na5+(gʁr1^KKW֊D nv,k T;y O|-Ax3 n 7^DP=f)&H./!?~IxSBMR>RYMy8YM^h^1i7sscSsתwGyxl/^OS2ۊDnatخN@8]G]/TIUI) I)~IQI8Is3II\RY\i\y][j[[\Z[0I^\]t]]^"]:uD}uDDo-,,c,W,s,]Q0X 'r|ɘeX5$zfRfReG>y7y_bWNYf oc4Z!SqPq*VRVfR^TZtx p J -y%C1A&~p&)2f)*4Q+,%?"|?>uJKN~MURV|r,]]dIwgkby^-{y5tDFfcΞr`G%w.nصdǥLd+e*67%t{y/ F;tvxAtr9\sf/st0Ͼ%A{C-;5a?pC^ƨƨu˾D:ҝzwizէ?tZ>tzZeߺ 0@Xf0q.ma^! B$~beL~bkoM,!)ў+uR+3@A,8/!/1114~6 d? 2A-DŖGxLGbjLAUnOrj=PѧQ{QSn TZ"U~U֣UTZVZW ZW?ZWu[]k*e]O^n[_p, e1i~RikkQoNy;{/}ubX}wIr}wi.}w$}'vrLM"~(B.t`Fv3jt ,t)s.I.iy3YP9-iU%aDDvYt9ttL,--nq_ a+FIC+{ʢKʢNƴdMddrdds059э4N+gNStU]dGBhwT 2# ?p 1'V_J+,D/w2W42567D:P?; BCU]DhINJ0 KKU|VNV7S\(ar@btw |(^A|G|)!}wZ}$I}$h}$ϗ3Z3VN/IDL>$%Nn{K<Rf+·K·|ý-:y׳0 / UEvH?YWvu%5kKT%\ e~Bi~} ii9%Gwhb#%A'g-.\.5kE:=T6=~c??{CtInPV%XU dZ@F`M`NVbDf_bG f4fdgA%hIp5i$ x1 Vz*2UM|QRdJXEUU(.5<zXQc.FQrNX;mx^1e_n($ c†5uimUCTʴ5ʴ5Nʶ$1V^ Ԅ9۔#+ D'NGdF5.DF59Yp+>kIIdVAs Lp }$ qej ڤy ڥ/ dq E E  Ac ) Acgl l^ 35 U b1 bbT b`Ku b` gU i36 la0 uT] xq |o@ | J2 t| tf .& ; 2n ) F> Z : Ѱ p  BW ҉! >EH  ( 1 / n NPL  Y+RW K,s  팤 l~ %'  ^ / = qs  } oY~  ) */U .>s 50$ 7uE ;B =wd B$r Bn J" J"H K2J Rۮâ Ty  T^U Uj4 ]O ` `As b bs c(-# cE' ds eC ed e{S f1{ f*.1 g5U(; gn k," rD"( t, t ` n tT ˔vp P8 P | 68: >>I :CH f E f `] 4 .u " sG sb AAm 9 Q 9 +w m,# #-tګ 0N> 5^ AvF CUu E9 I L< L9H L Mc\T R. S V: W ]$I f) f)` f=&X io>` m`0 wA xR yrN >&   R H H_ =D n8 $a .@g ' i{ \ +  % J Jc  t. kB Ӈ, M,f ) N> ̺v &- -Dw .D ۷) c> r? kK" k| U)C d </" OQ }~ 0`   z+b  }  IoS %uW NM a  xH  { .B 7F > > > > >4 > > >  ?t|# DT IA P@ RVg RV RV% S.sd SG S0q Y YP [ c`< hۮn j7o]M pB vS  .> B : TH/ T[ T Tl  9 KE # o W )dd T^  ;>[ .H .* . .9 . .C  q ow a y. LM e. hNL >% ҂Z K % u{ 1 |N F ' Xtd nv 9i t;O az!  :b UqW  O.Q ʜA  - #$ #=5 %nN (I$i (N߯ +>D& +kjU 0E 64P0 ;ɾ" Fg K9T Ptť Pt T> W  dB> feG fe gX iFCY2 id iY jӮ# kGney m9 n ub uy{ v KE v& m v{ wHy wh> w1 w}H w}h w} |[  z Q % J ^̔ } R4 P> - xN M Ur ɰe$ F` v X &Y D fq +Qc t5 t5J  4M >gk m  )_ 0IR:w7 @a=TJH4&H'd4S^ Ǘ=:B8׋rݖ[y^^  bEGlD6̙"#D$U"%4U'%4j-v0i)_0`A1c92wT_M<w<(..D1H"FJd%KpK#AL$.W6Yaˋc5Ic5g3(mh}Xp\yC2{~a^6$Y51& &{C`nY[o>!͠b>bN\0 EP"~L:r;rkyLnc\*B.Pt2?=;Bd&Ui<html>Das Audiogert <b>%1</b> wurde aktiviert,<br/>da es gerade verfgbar und hher priorisiert ist.</html>xSwitching to the audio playback device %1
which just became available and has higher preference. AudioOutput<html>Das Audiogert <b>%1</b> funktioniert nicht.<br/>Es wird stattdessen <b>%2</b> verwendet.</html>^The audio playback device %1 does not work.
Falling back to %2. AudioOutput:Zurckschalten zum Gert '%1'Revert back to device '%1' AudioOutputSchlieen Close Tab CloseButtonEingabehilfen AccessibilityPhonon::Kommunikation CommunicationPhonon:: SpieleGamesPhonon:: MusikMusicPhonon:: Benachrichtungen NotificationsPhonon:: VideoVideoPhonon::Warnung: Die grundlegenden GStreamer-plugins sind nicht installiert. Die Audio- und Video-Untersttzung wurde abgeschaltet~Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabledPhonon::Gstreamer::BackendWarnung: Das Paket gstreamer0.10-plugins-good ist nicht installiert. Einige Video-Funktionen stehen nicht zur Verfgung.Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.Phonon::Gstreamer::BackendEs sind nicht alle erforderlichen Codecs installiert. Um diesen Inhalt abzuspielen, muss der folgende Codec installiert werden: %0`A required codec is missing. You need to install the following codec(s) to play this content: %0Phonon::Gstreamer::MediaObjectTDas Abspielen konnte nicht gestartet werden. Bitte prfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.wCannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed.Phonon::Gstreamer::MediaObject\Die Medienquelle konnte nicht gefunden werden.Could not decode media source.Phonon::Gstreamer::MediaObject\Die Medienquelle konnte nicht gefunden werden.Could not locate media source.Phonon::Gstreamer::MediaObjectDas Audiogert konnte nicht geffnet werden, da es bereits in Benutzung ist.:Could not open audio device. The device is already in use.Phonon::Gstreamer::MediaObject\Die Medienquelle konnte nicht geffnet werden.Could not open media source.Phonon::Gstreamer::MediaObject@Ungltiger Typ der Medienquelle.Invalid source type.Phonon::Gstreamer::MediaObjectDie Regler wird zur Einstellung der Lautstrke benutzt. Die Position links entspricht 0%; die Position rechts entspricht %1%WUse this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%Phonon::VolumeSliderLautstrke: %1% Volume: %1%Phonon::VolumeSlider6%1, %2 sind nicht definiert%1, %2 not definedQ3Accel\Mehrdeutige %1 knnen nicht verarbeitet werdenAmbiguous %1 not handledQ3AccelLschenDelete Q3DataTable FalschFalse Q3DataTableEinfgenInsert Q3DataTableWahrTrue Q3DataTableAktualisierenUpdate Q3DataTable%1 Datei konnte nicht gefunden werden. berprfen Sie Pfad und Dateinamen.+%1 File not found. Check path and filename. Q3FileDialog&Lschen&Delete Q3FileDialog &Nein&No Q3FileDialog&OK&OK Q3FileDialog&ffnen&Open Q3FileDialog&Umbenennen&Rename Q3FileDialogS&peichern&Save Q3FileDialog&Unsortiert &Unsorted Q3FileDialog&Ja&Yes Q3FileDialogv<qt>Sind Sie sicher, dass Sie %1 "%2" lschen mchten?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialog Alle Dateien (*) All Files (*) Q3FileDialog$Alle Dateien (*.*)All Files (*.*) Q3FileDialogAttribute Attributes Q3FileDialog ZurckBack Q3FileDialogAbbrechenCancel Q3FileDialog>Datei kopieren oder verschiebenCopy or Move a File Q3FileDialog,Neuen Ordner erstellenCreate New Folder Q3FileDialog DatumDate Q3FileDialog%1 lschen Delete %1 Q3FileDialogAusfhrlich Detail View Q3FileDialogVerzeichnisDir Q3FileDialogVerzeichnisse Directories Q3FileDialogVerzeichnis: Directory: Q3FileDialog FehlerError Q3FileDialog DateiFile Q3FileDialogDatei&name: File &name: Q3FileDialogDatei&typ: File &type: Q3FileDialog$Verzeichnis suchenFind Directory Q3FileDialogGesperrt Inaccessible Q3FileDialog Liste List View Q3FileDialogSu&chen in: Look &in: Q3FileDialogNameName Q3FileDialog"Neues Verzeichnis New Folder Q3FileDialog(Neues Verzeichnis %1 New Folder %1 Q3FileDialog&Neues Verzeichnis 1 New Folder 1 Q3FileDialog,Ein Verzeichnis zurckOne directory up Q3FileDialog ffnenOpen Q3FileDialog ffnenOpen  Q3FileDialog8Voransicht des Datei-InhaltsPreview File Contents Q3FileDialog@Voransicht der Datei-InformationPreview File Info Q3FileDialogErne&ut ladenR&eload Q3FileDialogNur Lesen Read-only Q3FileDialogLesen/Schreiben Read-write Q3FileDialogLesen: %1Read: %1 Q3FileDialogSpeichern unterSave As Q3FileDialog4Whlen Sie ein VerzeichnisSelect a Directory Q3FileDialog8&Versteckte Dateien anzeigenShow &hidden files Q3FileDialog GreSize Q3FileDialogSortierenSort Q3FileDialog*Nach &Datum sortieren Sort by &Date Q3FileDialog(Nach &Name sortieren Sort by &Name Q3FileDialog*Nach &Gre sortieren Sort by &Size Q3FileDialogSpezialattributSpecial Q3FileDialog6Verknpfung mit VerzeichnisSymlink to Directory Q3FileDialog*Verknpfung mit DateiSymlink to File Q3FileDialog8Verknpfung mit SpezialdateiSymlink to Special Q3FileDialogTypType Q3FileDialogNur Schreiben Write-only Q3FileDialogSchreiben: %1 Write: %1 Q3FileDialogdas Verzeichnis the directory Q3FileDialogdie Dateithe file Q3FileDialogdie Verknpfung the symlink Q3FileDialogJKonnte Verzeichnis nicht erstellen %1Could not create directory %1 Q3LocalFs@Konnte nicht geffnet werden: %1Could not open %1 Q3LocalFsBKonnte Verzeichnis nicht lesen %1Could not read directory %1 Q3LocalFs\Konnte Datei oder Verzeichnis nicht lschen %1%Could not remove file or directory %1 Q3LocalFsRKonnte nicht umbenannt werden: %1 nach %2Could not rename %1 to %2 Q3LocalFsFKonnte nicht geschrieben werden: %1Could not write %1 Q3LocalFsAnpassen... Customize... Q3MainWindowAusrichtenLine up Q3MainWindowBOperation von Benutzer angehaltenOperation stopped by the userQ3NetworkProtocolAbbrechenCancelQ3ProgressDialogAnwendenApply Q3TabDialogAbbrechenCancel Q3TabDialogDefaultsDefaults Q3TabDialog HilfeHelp Q3TabDialogOKOK Q3TabDialog&Kopieren&Copy Q3TextEditEinf&gen&Paste Q3TextEdit"Wieder&herstellen&Redo Q3TextEdit&Rckgngig&Undo Q3TextEditLschenClear Q3TextEdit&AusschneidenCu&t Q3TextEditAlles auswhlen Select All Q3TextEditSchlieenClose Q3TitleBar(Schliet das FensterCloses the window Q3TitleBarXEnthlt Befehle zum ndern der Fenstergre *Contains commands to manipulate the window Q3TitleBarvZeigt den Namen des Fensters und enthlt Befehle zum ndernFDisplays the name of the window and contains controls to manipulate it Q3TitleBarVollbildmodusMakes the window full screen Q3TitleBarMaximierenMaximize Q3TitleBarMinimierenMinimize Q3TitleBar*Minimiert das FensterMoves the window out of the way Q3TitleBarRStellt ein maximiertes Fenster wieder her&Puts a maximized window back to normal Q3TitleBarRStellt ein minimiertes Fenster wieder herPuts a minimized back to normal Q3TitleBar Wiederherstellen Restore down Q3TitleBar Wiederherstellen Restore up Q3TitleBar SystemSystem Q3TitleBarMehr...More... Q3ToolBar(unbekannt) (unknown) Q3UrlOperator Das Protokoll `%1' untersttzt nicht das Kopieren oder Verschieben von Dateien oder VerzeichnissenIThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Anlegen neuer Verzeichnisse;The protocol `%1' does not support creating new directories Q3UrlOperatorpDas Protokoll `%1' untersttzt nicht das Laden von Files0The protocol `%1' does not support getting files Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Auflisten von Verzeichnissen6The protocol `%1' does not support listing directories Q3UrlOperatorxDas Protokoll `%1' untersttzt nicht das Speichern von Files0The protocol `%1' does not support putting files Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Lschen von Dateien oder Verzeichnissen@The protocol `%1' does not support removing files or directories Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Umbenennen von Dateien oder Verzeichnissen@The protocol `%1' does not support renaming files or directories Q3UrlOperatorRDas Protokoll `%1' wird nicht untersttzt"The protocol `%1' is not supported Q3UrlOperator&Abbrechen&CancelQ3WizardAb&schlieen&FinishQ3Wizard &Hilfe&HelpQ3Wizard&Weiter >&Next >Q3Wizard< &Zurck< &BackQ3Wizard*Verbindung verweigertConnection refusedQAbstractSockethDas Zeitlimit fr die Verbindung wurde berschrittenConnection timed outQAbstractSocketHRechner konnte nicht gefunden werdenHost not foundQAbstractSocketBDas Netzwerk ist nicht erreichbarNetwork unreachableQAbstractSocketXDiese Socketoperation wird nicht untersttzt$Operation on socket is not supportedQAbstractSocketNicht verbundenSocket is not connectedQAbstractSocketfDas Zeitlimit fr die Operation wurde berschrittenSocket operation timed outQAbstractSocket &Alles auswhlen &Select AllQAbstractSpinBox&Inkrementieren&Step upQAbstractSpinBox&Dekrementieren Step &downQAbstractSpinBoxAktivierenActivate QApplicationDAktiviert das Programmhauptfenster#Activates the program's main window QApplicationDie Anwendung '%1' bentigt Qt %2; es wurde aber Qt %3 gefunden.,Executable '%1' requires Qt %2, found Qt %3. QApplication<Qt Bibliothek ist inkompatibelIncompatible Qt Library Error QApplicationLTRQT_LAYOUT_DIRECTION QApplication&Abbrechen&Cancel QAxSelectCOM-&Objekt: COM &Object: QAxSelectOKOK QAxSelect2ActiveX-Element auswhlenSelect ActiveX Control QAxSelectAnkreuzenCheck QCheckBoxUmschaltenToggle QCheckBoxLschenUncheck QCheckBoxRZu benutzerdefinierten Farben &hinzufgen&Add to Custom Colors QColorDialogGrundfar&ben &Basic colors QColorDialog4&Benutzerdefinierte Farben&Custom colors QColorDialog &Grn:&Green: QColorDialog &Rot:&Red: QColorDialog&Sttigung:&Sat: QColorDialog&Helligkeit:&Val: QColorDialogA&lphakanal:A&lpha channel: QColorDialog Bla&u:Bl&ue: QColorDialogFarb&ton:Hu&e: QColorDialogFarbauswahl Select Color QColorDialogSchlieenClose QComboBox FalschFalse QComboBox ffnenOpen QComboBoxWahrTrue QComboBox6%1: ftok-Aufruf schlug fehl%1: ftok failedQCoreApplicationH%1: Ungltige Schlsselangabe (leer)%1: key is emptyQCoreApplicationR%1: Es kann kein Schlssel erzeugt werden%1: unable to make keyQCoreApplicationDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QDB2DriverREs kann keine Verbindung aufgebaut werdenUnable to connect QDB2DriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QDB2DriverT'autocommit' konnte nicht aktiviert werdenUnable to set autocommit QDB2DriverRDie Variable konnte nicht gebunden werdenUnable to bind variable QDB2ResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QDB2Result`Der erste Datensatz konnte nicht abgeholt werdenUnable to fetch first QDB2ResultdDer nchste Datensatz konnte nicht abgeholt werdenUnable to fetch next QDB2ResultZDer Datensatz %1 konnte nicht abgeholt werdenUnable to fetch record %1 QDB2ResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QDB2ResultAMAM QDateTimeEditPMPM QDateTimeEditamam QDateTimeEditpmpm QDateTimeEdit QDialQDialQDialSchieberegler SliderHandleQDialTachometer SpeedoMeterQDial FertigDoneQDialogDirekthilfe What's This?QDialog&Abbrechen&CancelQDialogButtonBoxSchl&ieen&CloseQDialogButtonBox &Nein&NoQDialogButtonBox&OK&OKQDialogButtonBoxS&peichern&SaveQDialogButtonBox&Ja&YesQDialogButtonBoxAbbrechenAbortQDialogButtonBoxAnwendenApplyQDialogButtonBoxAbbrechenCancelQDialogButtonBoxSchlieenCloseQDialogButtonBox0Schlieen ohne SpeichernClose without SavingQDialogButtonBoxVerwerfenDiscardQDialogButtonBoxNicht speichern Don't SaveQDialogButtonBox HilfeHelpQDialogButtonBoxIgnorierenIgnoreQDialogButtonBoxN&ein, keine N&o to AllQDialogButtonBoxOKOKQDialogButtonBox ffnenOpenQDialogButtonBoxZurcksetzenResetQDialogButtonBox VoreinstellungenRestore DefaultsQDialogButtonBoxWiederholenRetryQDialogButtonBoxSpeichernSaveQDialogButtonBoxAlles speichernSave AllQDialogButtonBoxJa, &alle Yes to &AllQDialogButtonBoxnderungsdatum Date Modified QDirModelArtKind QDirModelNameName QDirModel GreSize QDirModelTypType QDirModelSchlieenClose QDockWidgetAndockenDock QDockWidgetHerauslsenFloat QDockWidgetWenigerLessQDoubleSpinBoxMehrMoreQDoubleSpinBox&OK&OK QErrorMessageFDiese Meldung noch einmal an&zeigen&Show this message again QErrorMessageDebug-Ausgabe:Debug Message: QErrorMessageFehler: Fatal Error: QErrorMessageWarnung:Warning: QErrorMessage:%1 kann nicht erstellt werdenCannot create %1 for outputQFileR%1 konnte nicht zum Lesen geffnet werdenCannot open %1 for inputQFileHDas ffnen zum Schreiben schlug fehlCannot open for outputQFile>Die Zieldatei existiert bereitsDestination file existsQFile\Der Datenblock konnte nicht geschrieben werdenFailure to write blockQFile%1 Das Verzeichnis konnte nicht gefunden werden. Stellen Sie sicher, dass der Verzeichnisname richtig ist.K%1 Directory not found. Please verify the correct directory name was given. QFileDialog%1 Die Datei konnte nicht gefunden werden. Stellen Sie sicher, dass der Dateiname richtig ist.A%1 File not found. Please verify the correct file name was given. QFileDialog|Die Datei %1 existiert bereits. Soll sie berschrieben werden?-%1 already exists. Do you want to replace it? QFileDialog&Auswhlen&Choose QFileDialog&Lschen&Delete QFileDialog$&Neues Verzeichnis &New Folder QFileDialog&ffnen&Open QFileDialog&Umbenennen&Rename QFileDialogS&peichern&Save QFileDialog'%1' ist schreibgeschtzt. Mchten sie die Datei trotzdem lschen?9'%1' is write protected. Do you want to delete it anyway? QFileDialog Alle Dateien (*) All Files (*) QFileDialog$Alle Dateien (*.*)All Files (*.*) QFileDialogZSind Sie sicher, dass Sie %1 lschen mchten?!Are sure you want to delete '%1'? QFileDialog ZurckBack QFileDialogBKonnte Verzeichnis nicht lschen.Could not delete directory. QFileDialog,Neuen Ordner erstellenCreate New Folder QFileDialogDetails Detail View QFileDialogVerzeichnisse Directories QFileDialogVerzeichnis: Directory: QFileDialogLaufwerkDrive QFileDialog DateiFile QFileDialogDatei&name: File &name: QFileDialog"Dateien des Typs:Files of type: QFileDialog$Verzeichnis suchenFind Directory QFileDialogVorwrtsForward QFileDialog Liste List View QFileDialogSuche in:Look in: QFileDialogMein Computer My Computer QFileDialog"Neues Verzeichnis New Folder QFileDialog ffnenOpen QFileDialog4bergeordnetes VerzeichnisParent Directory QFileDialogZuletzt besucht Recent Places QFileDialogLschenRemove QFileDialogSpeichern unterSave As QFileDialogAnzeigen Show  QFileDialog8&Versteckte Dateien anzeigenShow &hidden files QFileDialogUnbekanntUnknown QFileDialog %1 GB%1 GBQFileSystemModel %1 KB%1 KBQFileSystemModel %1 MB%1 MBQFileSystemModel %1 TB%1 TBQFileSystemModel%1 byte%1 bytesQFileSystemModel<b>Der Name "%1" kann nicht verwendet werden.</b><p>Versuchen Sie, die Sonderzeichen zu entfernen oder einen krzeren Namen zu verwenden.oThe name "%1" can not be used.

Try using another name, with fewer characters or no punctuations marks.QFileSystemModelComputerComputerQFileSystemModelnderungsdatum Date ModifiedQFileSystemModel(Ungltiger DateinameInvalid filenameQFileSystemModelArtKindQFileSystemModelMein Computer My ComputerQFileSystemModelNameNameQFileSystemModel GreSizeQFileSystemModelTypTypeQFileSystemModelAlleAny QFontDatabaseArabischArabic QFontDatabaseArmenischArmenian QFontDatabaseBengalischBengali QFontDatabaseSchwarzBlack QFontDatabaseFettBold QFontDatabaseKyrillischCyrillic QFontDatabaseSemiDemi QFontDatabaseHalbfett Demi Bold QFontDatabaseDevanagari Devanagari QFontDatabaseGeorgischGeorgian QFontDatabaseGriechischGreek QFontDatabaseGujaratiGujarati QFontDatabaseGurmukhiGurmukhi QFontDatabaseHebrischHebrew QFontDatabase KursivItalic QFontDatabaseJapanischJapanese QFontDatabaseKannadaKannada QFontDatabase KhmerKhmer QFontDatabaseKoreanischKorean QFontDatabaseLaotischLao QFontDatabaseLateinischLatin QFontDatabase LeichtLight QFontDatabaseMalayalam Malayalam QFontDatabaseMyanmarMyanmar QFontDatabase NormalNormal QFontDatabaseSchrggestelltOblique QFontDatabase OghamOgham QFontDatabase OriyaOriya QFontDatabase RunenRunic QFontDatabase0Vereinfachtes ChinesischSimplified Chinese QFontDatabaseSinhalaSinhala QFontDatabase SymbolSymbol QFontDatabaseSyrischSyriac QFontDatabaseTamilischTamil QFontDatabase TeluguTelugu QFontDatabase ThaanaThaana QFontDatabaseThailndischThai QFontDatabaseTibetischTibetan QFontDatabase2Traditionelles ChinesischTraditional Chinese QFontDatabaseVietnamesisch Vietnamese QFontDatabase&Schriftart&Font QFontDialog &Gre&Size QFontDialog&Unterstrichen &Underline QFontDialogEffekteEffects QFontDialogSchrifts&til Font st&yle QFontDialogBeispielSample QFontDialog(Schriftart auswhlen Select Font QFontDialog Durch&gestrichen Stri&keout QFontDialog&SchriftsystemWr&iting System QFontDialogPndern des Verzeichnises schlug fehl: %1Changing directory failed: %1QFtp<Verbindung mit Rechner bestehtConnected to hostQFtp0Verbunden mit Rechner %1Connected to host %1QFtpLVerbindung mit Rechner schlug fehl: %1Connecting to host failed: %1QFtp$Verbindung beendetConnection closedQFtp\Verbindung fr die Daten Verbindung verweigert&Connection refused for data connectionQFtp8Verbindung mit %1 verweigertConnection refused to host %1QFtpxDas Zeitlimit fr die Verbindung zu '%1' wurde berschrittenConnection timed out to host %1QFtp2Verbindung mit %1 beendetConnection to %1 closedQFtpVErstellen des Verzeichnises schlug fehl: %1Creating directory failed: %1QFtpNHerunterladen der Datei schlug fehl: %1Downloading file failed: %1QFtp&Rechner %1 gefunden Host %1 foundQFtpNRechner %1 konnte nicht gefunden werdenHost %1 not foundQFtp Rechner gefunden Host foundQFtpzDer Inhalt des Verzeichnisses kann nicht angezeigt werden: %1Listing directory failed: %1QFtp2Anmeldung schlug fehl: %1Login failed: %1QFtp Keine Verbindung Not connectedQFtpRLschen des Verzeichnises schlug fehl: %1Removing directory failed: %1QFtpBLschen der Datei schlug fehl: %1Removing file failed: %1QFtp$Unbekannter Fehler Unknown errorQFtpFHochladen der Datei schlug fehl: %1Uploading file failed: %1QFtp$Unbekannter Fehler Unknown error QHostInfoHRechner konnte nicht gefunden werdenHost not foundQHostInfoAgent*Unbekannter AdresstypUnknown address typeQHostInfoAgent$Unbekannter Fehler Unknown errorQHostInfoAgent<Authentifizierung erforderlichAuthentication requiredQHttp<Verbindung mit Rechner bestehtConnected to hostQHttp0Verbunden mit Rechner %1Connected to host %1QHttp$Verbindung beendetConnection closedQHttp*Verbindung verweigertConnection refusedQHttpdVerbindung verweigert oder Zeitlimit berschritten!Connection refused (or timed out)QHttp2Verbindung mit %1 beendetConnection to %1 closedQHttp2Die Daten sind verflschtData corruptedQHttpBeim Schreiben der Antwort auf das Ausgabegert ist ein Fehler aufgetreten Error writing response to deviceQHttp6HTTP-Anfrage fehlgeschlagenHTTP request failedQHttpDie angeforderte HTTPS-Verbindung kann nicht aufgebaut werden, da keine SSL-Untersttzung vorhanden ist:HTTPS connection requested but SSL support not compiled inQHttp&Rechner %1 gefunden Host %1 foundQHttpNRechner %1 konnte nicht gefunden werdenHost %1 not foundQHttp Rechner gefunden Host foundQHttp^Der Hostrechner verlangt eine AuthentifizierungHost requires authenticationQHttpnDer Inhalt (chunked body) der HTTP-Antwort ist ungltigInvalid HTTP chunked bodyQHttpTDer Kopfteil der HTTP-Antwort ist ungltigInvalid HTTP response headerQHttplFr die Verbindung wurde kein Server-Rechner angegebenNo server set to connect toQHttpHProxy-Authentifizierung erforderlichProxy authentication requiredQHttp`Der Proxy-Server verlangt eine AuthentifizierungProxy requires authenticationQHttp2Anfrage wurde abgebrochenRequest abortedQHttphEs trat ein Fehler im Ablauf des SSL-Protokolls auf.SSL handshake failedQHttphDer Server hat die Verbindung unerwartet geschlossen%Server closed connection unexpectedlyQHttp$Unbekannter Fehler Unknown errorQHttpXEs wurde ein unbekanntes Protokoll angegebenUnknown protocol specifiedQHttp,Ungltige LngenangabeWrong content lengthQHttp<Authentifizierung erforderlichAuthentication requiredQHttpSocketEngineFKeine HTTP-Antwort vom Proxy-Server(Did not receive HTTP response from proxyQHttpSocketEnginebFehler bei der Kommunikation mit dem Proxy-Server#Error communicating with HTTP proxyQHttpSocketEngineFehler beim Auswerten der Authentifizierungsanforderung des Proxy-Servers/Error parsing authentication request from proxyQHttpSocketEnginejDer Proxy-Server hat die Verbindung vorzeitig beendet#Proxy connection closed prematurelyQHttpSocketEnginevDer Proxy-Server hat den Aufbau einer Verbindung verweigertProxy connection refusedQHttpSocketEnginevDer Proxy-Server hat den Aufbau einer Verbindung verweigertProxy denied connectionQHttpSocketEngineBei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit berschritten!Proxy server connection timed outQHttpSocketEngineVEs konnte kein Proxy-Server gefunden werdenProxy server not foundQHttpSocketEngineXEs konnte keine Transaktion gestartet werdenCould not start transaction QIBaseDriverhDie Datenbankverbindung konnte nicht geffnet werdenError opening database QIBaseDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QIBaseDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QIBaseDriverLDie Allokation des Befehls schlug fehlCould not allocate statement QIBaseResult~Es konnte keine Beschreibung des Eingabebefehls erhalten werden"Could not describe input statement QIBaseResultpEs konnte keine Beschreibung des Befehls erhalten werdenCould not describe statement QIBaseResult`Das nchste Element konnte nicht abgeholt werdenCould not fetch next item QIBaseResultJDas Feld konnte nicht gefunden werdenCould not find array QIBaseResultbDie Daten des Feldes konnten nicht gelesen werdenCould not get array data QIBaseResultDie erforderlichen Informationen zur Abfrage sind nicht verfgbarCould not get query info QIBaseResultZEs ist keine Information zum Befehl verfgbarCould not get statement info QIBaseResultVDer Befehl konnte nicht initalisiert werdenCould not prepare statement QIBaseResultXEs konnte keine Transaktion gestartet werdenCould not start transaction QIBaseResultTDer Befehl konnte nicht geschlossen werdenUnable to close statement QIBaseResultDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QIBaseResultDEs konnte kein BLOB erzeugt werdenUnable to create BLOB QIBaseResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute query QIBaseResultJDer BLOB konnte nicht geffnet werdenUnable to open BLOB QIBaseResultHDer BLOB konnte nicht gelesen werdenUnable to read BLOB QIBaseResultPDer BLOB konnte nicht geschrieben werdenUnable to write BLOB QIBaseResultbKein freier Speicherplatz auf dem Gert vorhandenNo space left on device QIODevicevDie Datei oder das Verzeichnis konnte nicht gefunden werdenNo such file or directory QIODevice$Zugriff verweigertPermission denied QIODevice2Zu viele Dateien geffnetToo many open files QIODevice$Unbekannter Fehler Unknown error QIODevice.Mac OS X-EingabemethodeMac OS X input method QInputContext,Windows-EingabemethodeWindows input method QInputContextXIMXIM QInputContext$XIM-EingabemethodeXIM input method QInputContext2Geben Sie einen Wert ein:Enter a value: QInputDialogXDie Library %1 kann nicht geladen werden: %2Cannot load library %1: %2QLibraryjDas Symbol "%1" kann in %2 nicht aufgelst werden: %3$Cannot resolve symbol "%1" in %2: %3QLibraryZDie Library %1 kann nicht entladen werden: %2Cannot unload library %1: %2QLibraryTOperation mmap fehlgeschlagen fr '%1': %2Could not mmap '%1': %2QLibraryVOperation unmap fehlgeschlagen fr '%1': %2Could not unmap '%1': %2QLibraryhDie Prfdaten des Plugins '%1' stimmen nicht berein)Plugin verification data mismatch in '%1'QLibraryVDie Datei '%1' ist kein gltiges Qt-Plugin.'The file '%1' is not a valid Qt plugin.QLibraryDas Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]=The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]QLibrary.Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (Im Debug- und Release-Modus erstellte Bibliotheken knnen nicht zusammen verwendet werden.)WThe plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)QLibraryDas Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. Erforderlicher build-spezifischer Schlssel "%2", erhalten "%3"OThe plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"QLibrarynDie dynamische Bibliothek konnte nicht gefunden werden.!The shared library was not found.QLibrary$Unbekannter Fehler Unknown errorQLibrary&Kopieren&Copy QLineEditEinf&gen&Paste QLineEdit"Wieder&herstellen&Redo QLineEdit&Rckgngig&Undo QLineEdit&AusschneidenCu&t QLineEditLschenDelete QLineEditAlles auswhlen Select All QLineEditL%1: Die Adresse wird bereits verwendet%1: Address in use QLocalServer*%1: Fehlerhafter Name%1: Name error QLocalServer,%1: Zugriff verweigert%1: Permission denied QLocalServer2%1: Unbekannter Fehler %2%1: Unknown error %2 QLocalServer*%1: Verbindungsfehler%1: Connection error QLocalSocket`%1: Der Aufbau einer Verbindung wurde verweigert%1: Connection refused QLocalSocket:%1: Das Datagramm ist zu gro%1: Datagram too large QLocalSocket&%1: Ungltiger Name%1: Invalid name QLocalSocketn%1: Die Verbindung wurde von der Gegenseite geschlossen%1: Remote closed QLocalSocketL%1: Fehler beim Zugriff auf den Socket%1: Socket access error QLocalSocketT%1: Zeitberschreitung bei Socketoperation%1: Socket operation timed out QLocalSocketH%1: Socketfehler (Ressourcenproblem)%1: Socket resource error QLocalSocket`%1: Diese Socketoperation wird nicht untersttzt)%1: The socket operation is not supported QLocalSocket,%1: Unbekannter Fehler%1: Unknown error QLocalSocket2%1: Unbekannter Fehler %2%1: Unknown error %2 QLocalSocketXEs konnte keine Transaktion gestartet werdenUnable to begin transaction QMYSQLDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QMYSQLDriverREs kann keine Verbindung aufgebaut werdenUnable to connect QMYSQLDriverlDie Datenbankverbindung konnte nicht geffnet werden 'Unable to open database ' QMYSQLDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QMYSQLDriver\Die Ausgabewerte konnten nicht gebunden werdenUnable to bind outvalues QMYSQLResultJDer Wert konnte nicht gebunden werdenUnable to bind value QMYSQLResultbDie folgende Abfrage kann nicht ausgefhrt werdenUnable to execute next query QMYSQLResultTDie Abfrage konnte nicht ausgefhrt werdenUnable to execute query QMYSQLResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QMYSQLResultLEs konnten keine Daten abgeholt werdenUnable to fetch data QMYSQLResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QMYSQLResultXDer Befehl konnte nicht zurckgesetzt werdenUnable to reset statement QMYSQLResultfDas folgende Ergebnis kann nicht gespeichert werdenUnable to store next result QMYSQLResultXDas Ergebnis konnte nicht gespeichert werdenUnable to store result QMYSQLResultvDie Ergebnisse des Befehls konnten nicht gespeichert werden!Unable to store statement results QMYSQLResult(Unbenannt) (Untitled)QMdiArea%1 - [%2] %1 - [%2] QMdiSubWindowSchl&ieen&Close QMdiSubWindowVer&schieben&Move QMdiSubWindow"Wieder&herstellen&Restore QMdiSubWindowGre &ndern&Size QMdiSubWindow - [%1]- [%1] QMdiSubWindowSchlieenClose QMdiSubWindow HilfeHelp QMdiSubWindowMa&ximieren Ma&ximize QMdiSubWindowMaximierenMaximize QMdiSubWindowMenMenu QMdiSubWindowM&inimieren Mi&nimize QMdiSubWindowMinimierenMinimize QMdiSubWindow WiederherstellenRestore QMdiSubWindow Wiederherstellen Restore Down QMdiSubWindowAufrollenShade QMdiSubWindow.Im &Vordergrund bleiben Stay on &Top QMdiSubWindowHerabrollenUnshade QMdiSubWindowSchlieenCloseQMenuAusfhrenExecuteQMenu ffnenOpenQMenu

About Qt

%1

Qt is a C++ toolkit for cross-platform application development.

Qt provides single-source portability across MS Windows, Mac OS X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.

Qt is a Nokia product. See www.trolltech.com/qt/ for more information.

 QMessageBox|

This program uses Qt Open Source Edition version %1.

Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.

Please see www.trolltech.com/company/model/ for an overview of Qt licensing.

 QMessageBox^<p>Dieses Programm verwendet Qt-Version %1.</p>'

This program uses Qt version %1.

 QMessageBoxber QtAbout Qt QMessageBox HilfeHelp QMessageBox*Details ausblenden...Hide Details... QMessageBoxOKOK QMessageBox*Details einblenden...Show Details... QMessageBox0Eingabemethode auswhlen Select IMQMultiInputContext<Umschalter fr EingabemethodenMultiple input method switcherQMultiInputContextPluginMehrfachumschalter fr Eingabemethoden, der das Kontextmen des Text-Widgets verwendetMMultiple input method switcher that uses the context menu of the text widgetsQMultiInputContextPlugin^Auf diesem Port hrt bereits ein anderer Socket4Another socket is already listening on the same portQNativeSocketEngineEs wurde versucht, einen IPv6-Socket auf einem System ohne IPv6-Untersttzung zu verwenden=Attempt to use IPv6 socket on a platform with no IPv6 supportQNativeSocketEngine*Verbindung verweigertConnection refusedQNativeSocketEnginehDas Zeitlimit fr die Verbindung wurde berschrittenConnection timed outQNativeSocketEngine|Das Datagram konnte nicht gesendet werden, weil es zu gro istDatagram was too large to sendQNativeSocketEngineTDer Zielrechner kann nicht erreicht werdenHost unreachableQNativeSocketEngine8Ungltiger Socket-DeskriptorInvalid socket descriptorQNativeSocketEngineNetzwerkfehler Network errorQNativeSocketEnginefDas Zeitlimit fr die Operation wurde berschrittenNetwork operation timed outQNativeSocketEngineBDas Netzwerk ist nicht erreichbarNetwork unreachableQNativeSocketEnginehOperation kann nur auf einen Socket angewandt werdenOperation on non-socketQNativeSocketEngine2Keine Resourcen verfgbarOut of resourcesQNativeSocketEngine$Zugriff verweigertPermission deniedQNativeSocketEngineHDas Protokoll wird nicht untersttztProtocol type not supportedQNativeSocketEngine>Die Adresse ist nicht verfgbarThe address is not availableQNativeSocketEngine2Die Adresse ist geschtztThe address is protectedQNativeSocketEngine\Die angegebene Adresse ist bereits in Gebrauch#The bound address is already in useQNativeSocketEngine|Die Operation kann mit dem Proxy-Typ nicht durchgefhrt werden,The proxy type is invalid for this operationQNativeSocketEnginehDer entfernte Rechner hat die Verbindung geschlossen%The remote host closed the connectionQNativeSocketEnginelDer Broadcast-Socket konnte nicht initialisiert werden%Unable to initialize broadcast socketQNativeSocketEngine|Der nichtblockierende Socket konnte nicht initialisiert werden(Unable to initialize non-blocking socketQNativeSocketEngineVDie Nachricht konnte nicht empfangen werdenUnable to receive a messageQNativeSocketEngineTDie Nachricht konnte nicht gesendet werdenUnable to send a messageQNativeSocketEnginebDer Schreibvorgang konnte nicht ausgefhrt werdenUnable to writeQNativeSocketEngine$Unbekannter Fehler Unknown errorQNativeSocketEngineDNichtuntersttztes Socket-KommandoUnsupported socket operationQNativeSocketEngine>%1 konnte nicht geffnet werdenError opening %1QNetworkAccessCacheBackend%1 kann nicht geffnet werden: Der Pfad spezifiziert ein Verzeichnis#Cannot open %1: Path is a directoryQNetworkAccessFileBackendF%1 konnte nicht geffnet werden: %2Error opening %1: %2QNetworkAccessFileBackendfBeim Lesen von der Datei %1 trat ein Fehler auf: %2Read error reading from %1: %2QNetworkAccessFileBackendfAnforderung zum ffnen einer Datei ber Netzwerk %1%Request for opening non-local file %1QNetworkAccessFileBackendLFehler beim Schreiben zur Datei %1: %2Write error writing to %1: %2QNetworkAccessFileBackend%1 kann nicht geffnet werden: Es handelt sich um ein VerzeichnisCannot open %1: is a directoryQNetworkAccessFtpBackendbBeim Herunterladen von %1 trat ein Fehler auf: %2Error while downloading %1: %2QNetworkAccessFtpBackendZBeim Hochladen von %1 trat ein Fehler auf: %2Error while uploading %1: %2QNetworkAccessFtpBackendDie Anmeldung bei %1 schlug fehl: Es ist eine Authentifizierung erforderlich0Logging in to %1 failed: authentication requiredQNetworkAccessFtpBackendlEs konnte kein geeigneter Proxy-Server gefunden werdenNo suitable proxy foundQNetworkAccessFtpBackendlEs konnte kein geeigneter Proxy-Server gefunden werdenNo suitable proxy foundQNetworkAccessHttpBackendBeim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2)Error downloading %1 - server replied: %2 QNetworkReply@Das Protokoll "%1" ist unbekanntProtocol "%1" is unknown QNetworkReply*Operation abgebrochenOperation canceledQNetworkReplyImplXEs konnte keine Transaktion gestartet werdenUnable to begin transaction QOCIDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QOCIDriver<Initialisierung fehlgeschlagenUnable to initialize QOCIDriver8Logon-Vorgang fehlgeschlagenUnable to logon QOCIDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QOCIDriverLDie Allokation des Befehls schlug fehlUnable to alloc statement QOCIResultDie Spalte konnte nicht fr den Stapelverarbeitungs-Befehl gebunden werden'Unable to bind column for batch execute QOCIResultJDer Wert konnte nicht gebunden werdenUnable to bind value QOCIResultzDer Stapelverarbeitungs-Befehl konnte nicht ausgefhrt werden!Unable to execute batch statement QOCIResultfDie 'select'-Abfrage konnte nicht ausgefhrt werden"Unable to execute select statement QOCIResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QOCIResultJKann nicht zum nchsten Element gehenUnable to goto next QOCIResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QOCIResultDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QODBCDriverREs kann keine Verbindung aufgebaut werdenUnable to connect QODBCDriverEs kann keine Verbindung aufgebaut werden weil der Treiber die bentigte Funktionalitt nicht vollstndig untersttztCUnable to connect - Driver doesn't support all needed functionality QODBCDriverX'autocommit' konnte nicht deaktiviert werdenUnable to disable autocommit QODBCDriverT'autocommit' konnte nicht aktiviert werdenUnable to enable autocommit QODBCDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QODBCDriver(QODBCResult::reset: 'SQL_CURSOR_STATIC' konnte nicht als Attribut des Befehls gesetzt werden. Bitte prfen Sie die Konfiguration Ihres ODBC-TreibersyQODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResultRDie Variable konnte nicht gebunden werdenUnable to bind variable QODBCResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QODBCResultLEs konnten keine Daten abgeholt werdenUnable to fetch QODBCResult`Der erste Datensatz konnte nicht abgeholt werdenUnable to fetch first QODBCResultbDer letzte Datensatz konnte nicht abgeholt werdenUnable to fetch last QODBCResultdDer nchste Datensatz konnte nicht abgeholt werdenUnable to fetch next QODBCResultnDer vorangegangene Datensatz kann nicht abgeholt werdenUnable to fetch previous QODBCResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QODBCResultPos1HomeQObject$Ungltiger URI: %1Invalid URI: %1QObject@Es wurde kein Hostname angegebenNo host name givenQObjectZDiese Operation wird von %1 nicht untersttztOperation not supported on %1QObjectlProtokollfehler: Ein leeres Datenpaket wurde empfangen)Protocol error: packet of size 0 receivedQObjectfBeim Lesen von der Datei %1 trat ein Fehler auf: %2Read error reading from %1: %2QObjectDer entfernte Rechner hat die Verbindung zu %1 vorzeitig beendet3Remote host closed the connection prematurely on %1QObject.Socketfehler bei %1: %2Socket error on %1: %2QObjectLFehler beim Schreiben zur Datei %1: %2Write error writing to %1: %2QObjectNameNameQPPDOptionsModelWertValueQPPDOptionsModelXEs konnte keine Transaktion gestartet werdenCould not begin transaction QPSQLDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Could not commit transaction QPSQLDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Could not rollback transaction QPSQLDriverREs kann keine Verbindung aufgebaut werdenUnable to connect QPSQLDriver:Die Registrierung schlug fehlUnable to subscribe QPSQLDriver`Die Registrierung konnte nicht aufgehoben werdenUnable to unsubscribe QPSQLDriverLEs konnte keine Abfrage erzeugt werdenUnable to create query QPSQLResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QPSQLResultZentimeter (cm)Centimeters (cm)QPageSetupWidgetFormularFormQPageSetupWidget Hhe:Height:QPageSetupWidgetZoll (in) Inches (in)QPageSetupWidgetQuerformat LandscapeQPageSetupWidget RnderMarginsQPageSetupWidgetMillimeter (mm)Millimeters (mm)QPageSetupWidgetAusrichtung OrientationQPageSetupWidgetSeitengre: Page size:QPageSetupWidget PapierPaperQPageSetupWidgetPapierquelle: Paper source:QPageSetupWidgetPunkte (pt) Points (pt)QPageSetupWidgetHochformatPortraitQPageSetupWidget,Umgekehrtes QuerformatReverse landscapeQPageSetupWidget,Umgekehrtes HochformatReverse portraitQPageSetupWidgetBreite:Width:QPageSetupWidgetUnterer Rand bottom marginQPageSetupWidgetLinker Rand left marginQPageSetupWidgetRechter Rand right marginQPageSetupWidgetOberer Rand top marginQPageSetupWidget>Das Plugin wurde nicht geladen.The plugin was not loaded. QPluginLoader$Unbekannter Fehler Unknown error QPluginLoader|Die Datei %1 existiert bereits. Soll sie berschrieben werden?/%1 already exists. Do you want to overwrite it? QPrintDialog%1 ist ein Verzeichnis. Bitte whlen Sie einen anderen Dateinamen.7%1 is a directory. Please choose a different file name. QPrintDialog$&Einstellungen <<  &Options << QPrintDialog"&Einstellungen >> &Options >> QPrintDialog&Drucken&Print QPrintDialogN<qt>Soll sie berschrieben werden?</qt>%Do you want to overwrite it? QPrintDialogA0A0 QPrintDialog$A0 (841 x 1189 mm)A0 (841 x 1189 mm) QPrintDialogA1A1 QPrintDialog"A1 (594 x 841 mm)A1 (594 x 841 mm) QPrintDialogA2A2 QPrintDialog"A2 (420 x 594 mm)A2 (420 x 594 mm) QPrintDialogA3A3 QPrintDialog"A3 (297 x 420 mm)A3 (297 x 420 mm) QPrintDialogA4A4 QPrintDialog"A4 (210 x 297 mm)%A4 (210 x 297 mm, 8.26 x 11.7 inches) QPrintDialogA5A5 QPrintDialog"A5 (148 x 210 mm)A5 (148 x 210 mm) QPrintDialogA6A6 QPrintDialog"A6 (105 x 148 mm)A6 (105 x 148 mm) QPrintDialogA7A7 QPrintDialog A7 (74 x 105 mm)A7 (74 x 105 mm) QPrintDialogA8A8 QPrintDialogA8 (52 x 74 mm)A8 (52 x 74 mm) QPrintDialogA9A9 QPrintDialogA9 (37 x 52 mm)A9 (37 x 52 mm) QPrintDialogAlias: %1 Aliases: %1 QPrintDialogB0B0 QPrintDialog&B0 (1000 x 1414 mm)B0 (1000 x 1414 mm) QPrintDialogB1B1 QPrintDialog$B1 (707 x 1000 mm)B1 (707 x 1000 mm) QPrintDialogB10B10 QPrintDialog B10 (31 x 44 mm)B10 (31 x 44 mm) QPrintDialogB2B2 QPrintDialog"B2 (500 x 707 mm)B2 (500 x 707 mm) QPrintDialogB3B3 QPrintDialog"B3 (353 x 500 mm)B3 (353 x 500 mm) QPrintDialogB4B4 QPrintDialog"B4 (250 x 353 mm)B4 (250 x 353 mm) QPrintDialogB5B5 QPrintDialog"B5 (176 x 250 mm)%B5 (176 x 250 mm, 6.93 x 9.84 inches) QPrintDialogB6B6 QPrintDialog"B6 (125 x 176 mm)B6 (125 x 176 mm) QPrintDialogB7B7 QPrintDialog B7 (88 x 125 mm)B7 (88 x 125 mm) QPrintDialogB8B8 QPrintDialogB8 (62 x 88 mm)B8 (62 x 88 mm) QPrintDialogB9B9 QPrintDialogB9 (44 x 62 mm)B9 (44 x 62 mm) QPrintDialogC5EC5E QPrintDialog$C5E (163 x 229 mm)C5E (163 x 229 mm) QPrintDialog"BenutzerdefiniertCustom QPrintDialogDLEDLE QPrintDialog$DLE (110 x 220 mm)DLE (110 x 220 mm) QPrintDialogExecutive Executive QPrintDialogNExecutive (7,5 x 10 Zoll, 191 x 254 mm))Executive (7.5 x 10 inches, 191 x 254 mm) QPrintDialogDie Datei %1 ist schreibgeschtzt. Bitte whlen Sie einen anderen Dateinamen.=File %1 is not writable. Please choose a different file name. QPrintDialog6Die Datei existiert bereits File exists QPrintDialog FolioFolio QPrintDialog(Folio (210 x 330 mm)Folio (210 x 330 mm) QPrintDialog LedgerLedger QPrintDialog*Ledger (432 x 279 mm)Ledger (432 x 279 mm) QPrintDialog LegalLegal QPrintDialogFLegal (8,5 x 14 Zoll, 216 x 356 mm)%Legal (8.5 x 14 inches, 216 x 356 mm) QPrintDialog LetterLetter QPrintDialogHLetter (8,5 x 11 Zoll, 216 x 279 mm)&Letter (8.5 x 11 inches, 216 x 279 mm) QPrintDialogLokale Datei Local file QPrintDialogOKOK QPrintDialogDruckenPrint QPrintDialog In Datei druckenPrint To File ... QPrintDialogAlles drucken Print all QPrintDialogBereich drucken Print range QPrintDialogAuswahl druckenPrint selection QPrintDialog$Druck in PDF-DateiPrint to File (PDF) QPrintDialog2Druck in Postscript-DateiPrint to File (Postscript) QPrintDialogTabloidTabloid QPrintDialog,Tabloid (279 x 432 mm)Tabloid (279 x 432 mm) QPrintDialogDie Angabe fr die erste Seite darf nicht grer sein als die fr die letzte Seite.7The 'From' value cannot be greater than the 'To' value. QPrintDialog,US Common #10 EnvelopeUS Common #10 Envelope QPrintDialogJUS Common #10 Envelope (105 x 241 mm)%US Common #10 Envelope (105 x 241 mm) QPrintDialog,Schreiben der Datei %1 Write %1 file QPrintDialog direkt verbundenlocally connected QPrintDialogunbekanntunknown QPrintDialog%1%%1%QPrintPreviewDialogSchlieenCloseQPrintPreviewDialogPDF exportieren Export to PDFQPrintPreviewDialog,PostScript exportierenExport to PostScriptQPrintPreviewDialogErste Seite First pageQPrintPreviewDialogSeite anpassenFit pageQPrintPreviewDialogBreite anpassen Fit widthQPrintPreviewDialogQuerformat LandscapeQPrintPreviewDialogLetzte Seite Last pageQPrintPreviewDialogNchste Seite Next pageQPrintPreviewDialog Seite einrichten Page SetupQPrintPreviewDialog Seite einrichten Page setupQPrintPreviewDialogHochformatPortraitQPrintPreviewDialogVorige Seite Previous pageQPrintPreviewDialogDruckenPrintQPrintPreviewDialogDruckvorschau Print PreviewQPrintPreviewDialogBGegenberliegende Seiten anzeigenShow facing pagesQPrintPreviewDialog,bersicht aller SeitenShow overview of all pagesQPrintPreviewDialog.Einzelne Seite anzeigenShow single pageQPrintPreviewDialogVergrernZoom inQPrintPreviewDialogVerkleinernZoom outQPrintPreviewDialogErweitertAdvancedQPrintPropertiesWidgetFormularFormQPrintPropertiesWidget SeitePageQPrintPropertiesWidgetSortierenCollateQPrintSettingsOutput FarbeColorQPrintSettingsOutputFarbmodus Color ModeQPrintSettingsOutput Anzahl ExemplareCopiesQPrintSettingsOutput"Anzahl Exemplare:Copies:QPrintSettingsOutputDuplexdruckDuplex PrintingQPrintSettingsOutputFormularFormQPrintSettingsOutputGraustufen GrayscaleQPrintSettingsOutputLange Seite Long sideQPrintSettingsOutputKeinNoneQPrintSettingsOutputOptionenOptionsQPrintSettingsOutput(AusgabeeinstellungenOutput SettingsQPrintSettingsOutputSeiten von Pages fromQPrintSettingsOutputAlles drucken Print allQPrintSettingsOutputBereich drucken Print rangeQPrintSettingsOutputUmgekehrtReverseQPrintSettingsOutputAuswahl SelectionQPrintSettingsOutputKurze Seite Short sideQPrintSettingsOutputbistoQPrintSettingsOutput &Name:&Name: QPrintWidget...... QPrintWidgetFormularForm QPrintWidgetStandort: Location: QPrintWidgetAusgabe&datei: Output &file: QPrintWidget&Eigenschaften P&roperties QPrintWidgetVorschauPreview QPrintWidgetDruckerPrinter QPrintWidgetTyp:Type: QPrintWidgetvDie Eingabeumleitung konnte nicht zum Lesen geffnet werden,Could not open input redirection for readingQProcessvDie Ausgabeumleitung konnte nicht zum Lesen geffnet werden-Could not open output redirection for writingQProcessBDas Lesen vom Prozess schlug fehlError reading from processQProcessJDas Schreiben zum Prozess schlug fehlError writing to processQProcess4Der Prozess ist abgestrztProcess crashedQProcessJDas Starten des Prozesses schlug fehlProcess failed to startQProcess$ZeitberschreitungProcess operation timed outQProcessLRessourcenproblem ("fork failure"): %1!Resource error (fork failure): %1QProcessAbbrechenCancelQProgressDialog ffnenOpen QPushButtonAnkreuzenCheck QRadioButton@falsche Syntax fr Zeichenklassebad char class syntaxQRegExp8falsche Syntax fr Lookaheadbad lookahead syntaxQRegExpBfalsche Syntax fr Wiederholungenbad repetition syntaxQRegExpLdeaktivierte Eigenschaft wurde benutztdisabled feature usedQRegExp*ungltiger Oktal-Wertinvalid octal valueQRegExp.internes Limit erreichtmet internal limitQRegExp2fehlende linke Begrenzungmissing left delimQRegExpkein Fehlerno error occurredQRegExp"unerwartetes Endeunexpected endQRegExphDie Datenbankverbindung konnte nicht geffnet werdenError to open databaseQSQLite2DriverXEs konnte keine Transaktion gestartet werdenUnable to begin transactionQSQLite2DriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transactionQSQLite2DriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback TransactionQSQLite2DriverRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statementQSQLite2ResultRDas Ergebnis konnte nicht abgeholt werdenUnable to fetch resultsQSQLite2ResultnDie Datenbankverbindung konnte nicht geschlossen werdenError closing database QSQLiteDriverhDie Datenbankverbindung konnte nicht geffnet werdenError opening database QSQLiteDriverXEs konnte keine Transaktion gestartet werdenUnable to begin transaction QSQLiteDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QSQLiteDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QSQLiteDriverKein AbfrageNo query QSQLiteResultFDie Anzahl der Parameter ist falschParameter count mismatch QSQLiteResultTDie Parameter konnte nicht gebunden werdenUnable to bind parameters QSQLiteResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QSQLiteResultTDer Datensatz konnte nicht abgeholt werdenUnable to fetch row QSQLiteResultXDer Befehl konnte nicht zurckgesetzt werdenUnable to reset statement QSQLiteResultEndeBottom QScrollBarLinker Rand Left edge QScrollBar*Eine Zeile nach unten Line down QScrollBarAusrichtenLine up QScrollBar*Eine Seite nach unten Page down QScrollBar*Eine Seite nach links Page left QScrollBar,Eine Seite nach rechts Page right QScrollBar(Eine Seite nach obenPage up QScrollBarPositionPosition QScrollBarRechter Rand Right edge QScrollBar&Nach unten scrollen Scroll down QScrollBar Hierher scrollen Scroll here QScrollBar&Nach links scrollen Scroll left QScrollBar(Nach rechts scrollen Scroll right QScrollBar$Nach oben scrollen Scroll up QScrollBar AnfangTop QScrollBar*%1: existiert bereits%1: already exists QSharedMemoryv%1: Die Grenangabe fr die Erzeugung ist kleiner als Null%1: create size is less then 0 QSharedMemory&%1: existiert nicht%1: doesn't exists QSharedMemory6%1: ftok-Aufruf schlug fehl%1: ftok failed QSharedMemory&%1: Ungltige Gre%1: invalid size QSharedMemory4%1: Fehlerhafter Schlssel %1: key error QSharedMemoryH%1: Ungltige Schlsselangabe (leer)%1: key is empty QSharedMemory&%1: nicht verbunden%1: not attached QSharedMemoryF%1: Keine Ressourcen mehr verfgbar%1: out of resources QSharedMemory,%1: Zugriff verweigert%1: permission denied QSharedMemoryJ%1: Die Abfrage der Gre schlug fehl%1: size query failed QSharedMemoryl%1: Ein systembedingtes Limit der Gre wurde erreicht$%1: system-imposed size restrictions QSharedMemory6%1: Sperrung fehlgeschlagen%1: unable to lock QSharedMemoryR%1: Es kann kein Schlssel erzeugt werden%1: unable to make key QSharedMemoryt%1: Es kann kein Schlssel fr die Sperrung gesetzt werden%1: unable to set key on lock QSharedMemory^%1: Die Sperrung konnte nicht aufgehoben werden%1: unable to unlock QSharedMemoryV%1: Die Unix-Schlsseldatei existiert nicht %1: unix key file doesn't exists QSharedMemory2%1: Unbekannter Fehler %2%1: unknown error %2 QSharedMemory++ QShortcutAltAlt QShortcut ZurckBack QShortcutRcktaste Backspace QShortcutRck-TabBacktab QShortcutBass-Boost Bass Boost QShortcut Bass - Bass Down QShortcut Bass +Bass Up QShortcut AnrufCall QShortcutFeststelltaste Caps Lock QShortcutFeststelltasteCapsLock QShortcutKontext1Context1 QShortcutKontext2Context2 QShortcutKontext3Context3 QShortcutKontext4Context4 QShortcutStrgCtrl QShortcutEntfDel QShortcutLschenDelete QShortcut RunterDown QShortcutEndeEnd QShortcut EnterEnter QShortcutEscEsc QShortcut EscapeEscape QShortcutF%1F%1 QShortcutFavoriten Favorites QShortcutUmdrehenFlip QShortcutVorwrtsForward QShortcutAuflegenHangup QShortcut HilfeHelp QShortcutPos1Home QShortcutStartseite Home Page QShortcut EinfgIns QShortcutEinfgenInsert QShortcutStart (0) Launch (0) QShortcutStart (1) Launch (1) QShortcutStart (2) Launch (2) QShortcutStart (3) Launch (3) QShortcutStart (4) Launch (4) QShortcutStart (5) Launch (5) QShortcutStart (6) Launch (6) QShortcutStart (7) Launch (7) QShortcutStart (8) Launch (8) QShortcutStart (9) Launch (9) QShortcutStart (A) Launch (A) QShortcutStart (B) Launch (B) QShortcutStart (C) Launch (C) QShortcutStart (D) Launch (D) QShortcutStart (E) Launch (E) QShortcutStart (F) Launch (F) QShortcutStart Mail Launch Mail QShortcut$Start Media Player Launch Media QShortcut LinksLeft QShortcutNchster Media Next QShortcutWiedergabe Media Play QShortcutVorherigerMedia Previous QShortcutAufzeichnen Media Record QShortcut Stopp Media Stop QShortcutMenMenu QShortcutMetaMeta QShortcutNeinNo QShortcut*Zahlen-FeststelltasteNum Lock QShortcut*Zahlen-FeststelltasteNumLock QShortcut*Zahlen-Feststelltaste Number Lock QShortcutffne URLOpen URL QShortcutBild abwrts Page Down QShortcutBild aufwrtsPage Up QShortcut PausePause QShortcutBild abwrtsPgDown QShortcutBild aufwrtsPgUp QShortcut DruckPrint QShortcut$Bildschirm drucken Print Screen QShortcutAktualisierenRefresh QShortcut ReturnReturn QShortcut RechtsRight QShortcut*Rollen-Feststelltaste Scroll Lock QShortcut*Rollen-Feststelltaste ScrollLock QShortcut SuchenSearch QShortcutAuswhlenSelect QShortcutUmschaltShift QShortcutLeertasteSpace QShortcutStandbyStandby QShortcutAbbrechenStop QShortcut SysReqSysReq QShortcutSystem RequestSystem Request QShortcutTabTab QShortcutHhen - Treble Down QShortcutHhen + Treble Up QShortcutHochUp QShortcutLautstrke - Volume Down QShortcutTon aus Volume Mute QShortcutLautstrke + Volume Up QShortcutJaYes QShortcut*Eine Seite nach unten Page downQSlider*Eine Seite nach links Page leftQSlider,Eine Seite nach rechts Page rightQSlider(Eine Seite nach obenPage upQSliderPositionPositionQSliderNDieser Adresstyp wird nicht untersttztAddress type not supportedQSocks5SocketEngine`Der SOCKSv5-Server hat die Verbindung verweigert(Connection not allowed by SOCKSv5 serverQSocks5SocketEnginejDer Proxy-Server hat die Verbindung vorzeitig beendet&Connection to proxy closed prematurelyQSocks5SocketEnginevDer Proxy-Server hat den Aufbau einer Verbindung verweigertConnection to proxy refusedQSocks5SocketEngineBei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit berschrittenConnection to proxy timed outQSocks5SocketEngine~Allgemeiner Fehler bei der Kommunikation mit dem SOCKSv5-ServerGeneral SOCKSv5 server failureQSocks5SocketEnginefDas Zeitlimit fr die Operation wurde berschrittenNetwork operation timed outQSocks5SocketEnginefDie Authentifizierung beim Proxy-Server schlug fehlProxy authentication failedQSocks5SocketEnginenDie Authentifizierung beim Proxy-Server schlug fehl: %1Proxy authentication failed: %1QSocks5SocketEngineZDer Proxy-Server konnte nicht gefunden werdenProxy host not foundQSocks5SocketEngineDProtokoll-Fehler (SOCKS version 5)SOCKS version 5 protocol errorQSocks5SocketEngine\Dieses SOCKSv5-Kommando wird nicht untersttztSOCKSv5 command not supportedQSocks5SocketEngineTTL verstrichen TTL expiredQSocks5SocketEngine|Unbekannten Fehlercode vom SOCKSv5-Proxy-Server erhalten: 0x%1%Unknown SOCKSv5 proxy error code 0x%1QSocks5SocketEngineWenigerLessQSpinBoxMehrMoreQSpinBoxAbbrechenCancelQSql*nderungen verwerfen?Cancel your edits?QSqlBesttigenConfirmQSqlLschenDeleteQSql2Diesen Datensatz lschen?Delete this record?QSqlEinfgenInsertQSqlNeinNoQSql*nderungen speichern? Save edits?QSqlAktualisierenUpdateQSqlJaYesQSqlOhne Schlssel kann kein Zertifikat zur Verfgung gestellt werden, %1,Cannot provide a certificate with no key, %1 QSslSocketnEs konnte keine SSL-Kontextstruktur erzeugt werden (%1)Error creating SSL context (%1) QSslSocket\Es konnte keine SSL-Sitzung erzeugt werden, %1Error creating SSL session, %1 QSslSocket\Es konnte keine SSL-Sitzung erzeugt werden: %1Error creating SSL session: %1 QSslSocketnEs trat ein Fehler im Ablauf des SSL-Protokolls auf: %1Error during SSL handshake: %1 QSslSocketjDas lokale Zertifikat konnte nicht geladen werden, %1#Error loading local certificate, %1 QSslSocketjDer private Schlssel konnte nicht geladen werden, %1Error loading private key, %1 QSslSocketDBeim Lesen trat ein Fehler auf: %1Error while reading: %1 QSslSocketPUngltige oder leere Schlsselliste (%1)!Invalid or empty cipher list (%1) QSslSocketDie Zertifizierung des ffentlichen Schlssels durch den privaten Schlssel schlug fehl, %1/Private key does not certificate public key, %1 QSslSocket\Die Daten konnten nicht geschrieben werden: %1Unable to write data: %1 QSslSocket*%1: existiert bereits%1: already existsQSystemSemaphore$%1: Nicht existent%1: does not existQSystemSemaphoreF%1: Keine Ressourcen mehr verfgbar%1: out of resourcesQSystemSemaphore,%1: Zugriff verweigert%1: permission deniedQSystemSemaphore2%1: Unbekannter Fehler %2%1: unknown error %2QSystemSemaphorehDie Datenbankverbindung konnte nicht geffnet werdenUnable to open connection QTDSDriverRDie Datenbank kann nicht verwendet werdenUnable to use database QTDSDriver&Nach links scrollen Scroll LeftQTabBar(Nach rechts scrollen Scroll RightQTabBarXDiese Socketoperation wird nicht untersttzt$Operation on socket is not supported QTcpServer&Kopieren&Copy QTextControlEinf&gen&Paste QTextControl"Wieder&herstellen&Redo QTextControl&Rckgngig&Undo QTextControl,&Link-Adresse kopierenCopy &Link Location QTextControl&AusschneidenCu&t QTextControlLschenDelete QTextControlAlles auswhlen Select All QTextControl ffnenOpen QToolButtonDrckenPress QToolButtonJDiese Plattform untersttzt kein IPv6#This platform does not support IPv6 QUdpSocket WiederherstellenRedo QUndoGroupRckgngigUndo QUndoGroup <leer> QUndoModel WiederherstellenRedo QUndoStackRckgngigUndo QUndoStack@Unicode-Kontrollzeichen einfgen Insert Unicode control characterQUnicodeControlCharacterMenuHLRE Start of left-to-right embedding$LRE Start of left-to-right embeddingQUnicodeControlCharacterMenu,LRM Left-to-right markLRM Left-to-right markQUnicodeControlCharacterMenuFLRO Start of left-to-right override#LRO Start of left-to-right overrideQUnicodeControlCharacterMenu<PDF Pop directional formattingPDF Pop directional formattingQUnicodeControlCharacterMenuHRLE Start of right-to-left embedding$RLE Start of right-to-left embeddingQUnicodeControlCharacterMenu,RLM Right-to-left markRLM Right-to-left markQUnicodeControlCharacterMenuFRLO Start of right-to-left override#RLO Start of right-to-left overrideQUnicodeControlCharacterMenu*ZWJ Zero width joinerZWJ Zero width joinerQUnicodeControlCharacterMenu4ZWNJ Zero width non-joinerZWNJ Zero width non-joinerQUnicodeControlCharacterMenu*ZWSP Zero width spaceZWSP Zero width spaceQUnicodeControlCharacterMenuFDer URL kann nicht angezeigt werdenCannot show URL QWebFrameVDieser Mime-Typ kann nicht angezeigt werdenCannot show mimetype QWebFrame2Die Datei existiert nichtFile does not exist QWebFrameDas Laden des Rahmens wurde durch eine nderung der Richtlinien unterbrochen&Frame load interruped by policy change QWebFrame0Anfrage wurde abgewiesenRequest blocked QWebFrame2Anfrage wurde abgebrochenRequest cancelled QWebFrame %1 (%2x%3 Pixel)%1 (%2x%3 pixels)QWebPageEine Datei%n Dateien %n file(s)QWebPage.In Wrterbuch aufnehmenAdd To DictionaryQWebPage4Ungltige HTTP-AnforderungBad HTTP requestQWebPageFettBoldQWebPageEndeBottomQWebPagebGrammatik mit Rechtschreibung zusammen berprfenCheck Grammar With SpellingQWebPage,Rechtschreibung prfenCheck SpellingQWebPagebRechtschreibung whrend des Schreibens berprfenCheck Spelling While TypingQWebPageDurchsuchen Choose FileQWebPageBGespeicherte Suchanfragen lschenClear recent searchesQWebPageKopierenCopyQWebPageGrafik kopieren Copy ImageQWebPage*Link-Adresse kopieren Copy LinkQWebPageAusschneidenCutQWebPageVorgabeDefaultQWebPage>Bis zum Ende des Wortes lschenDelete to the end of the wordQWebPageBBis zum Anfang des Wortes lschenDelete to the start of the wordQWebPageSchreibrichtung DirectionQWebPage FontsFontsQWebPage ZurckGo BackQWebPageVor Go ForwardQWebPageXRechtschreibung und Grammatik nicht anzeigenHide Spelling and GrammarQWebPageIgnorierenIgnoreQWebPageIgnorieren Ignore Grammar context menu itemIgnoreQWebPage PrfenInspectQWebPage KursivItalicQWebPage*Von links nach rechtsLTRQWebPageLinker Rand Left edgeQWebPage2Im Wrterbuch nachschauenLook Up In DictionaryQWebPageRPositionsmarke auf Ende des Blocks setzen'Move the cursor to the end of the blockQWebPageZPositionsmarke auf Ende des Dokumentes setzen*Move the cursor to the end of the documentQWebPageHPositionsmarke auf Zeilenende setzen&Move the cursor to the end of the lineQWebPageVPositionsmarke auf folgendes Zeichen setzen%Move the cursor to the next characterQWebPagePPositionsmarke auf folgende Zeile setzen Move the cursor to the next lineQWebPagePPositionsmarke auf folgendes Wort setzen Move the cursor to the next wordQWebPage^Positionsmarke auf vorangehendes Zeichen setzen)Move the cursor to the previous characterQWebPageXPositionsmarke auf vorangehende Zeile setzen$Move the cursor to the previous lineQWebPageXPositionsmarke auf vorangehendes Wort setzen$Move the cursor to the previous wordQWebPageVPositionsmarke auf Anfang des Blocks setzen)Move the cursor to the start of the blockQWebPage^Positionsmarke auf Anfang des Dokumentes setzen,Move the cursor to the start of the documentQWebPageLPositionsmarke auf Zeilenanfang setzen(Move the cursor to the start of the lineQWebPage2Keine Vorschlge gefundenNo Guesses FoundQWebPage:Es ist keine Datei ausgewhltNo file selectedQWebPageJEs existieren noch keine SuchanfragenNo recent searchesQWebPageFrame ffnen Open FrameQWebPage<Grafik in neuem Fenster ffnen Open ImageQWebPageAdresse ffnen Open LinkQWebPage.In neuem Fenster ffnenOpen in New WindowQWebPage UmrissOutlineQWebPage*Eine Seite nach unten Page downQWebPage*Eine Seite nach links Page leftQWebPage,Eine Seite nach rechts Page rightQWebPage(Eine Seite nach obenPage upQWebPageEinfgenPasteQWebPage*Von rechts nach linksRTLQWebPage,Bisherige SuchanfragenRecent searchesQWebPageNeu ladenReloadQWebPageRcksetzenResetQWebPageRechter Rand Right edgeQWebPage,Grafik speichern unter Save ImageQWebPage.Ziel speichern unter... Save Link...QWebPage&Nach unten scrollen Scroll downQWebPage Hierher scrollen Scroll hereQWebPage&Nach links scrollen Scroll leftQWebPage(Nach rechts scrollen Scroll rightQWebPage$Nach oben scrollen Scroll upQWebPageIm Web suchenSearch The WebQWebPageBBis zum Ende des Blocks markierenSelect to the end of the blockQWebPageHBis zum Ende des Dokuments markieren!Select to the end of the documentQWebPage8Bis zum Zeilenende markierenSelect to the end of the lineQWebPageFBis zum folgenden Zeichen markierenSelect to the next characterQWebPageBBis zur folgenden Zeile markierenSelect to the next lineQWebPage@Bis zum folgenden Wort markierenSelect to the next wordQWebPageNBis zum vorangehenden Zeichen markieren Select to the previous characterQWebPageJBis zur vorangehenden Zeile markierenSelect to the previous lineQWebPageHBis zum vorangehenden Wort markierenSelect to the previous wordQWebPageFBis zum Anfang des Blocks markieren Select to the start of the blockQWebPageLBis zum Anfang des Dokuments markieren#Select to the start of the documentQWebPage<Bis zum Zeilenanfang markierenSelect to the start of the lineQWebPageLRechtschreibung und Grammatik anzeigenShow Spelling and GrammarQWebPageRechtschreibungSpellingQWebPageAbbrechenStopQWebPage SendenSubmitQWebPage SendenQSubmit (input element) alt text for elements with no alt, title, or valueSubmitQWebPageSchreibrichtungText DirectionQWebPageDieser Index verfgt ber eine Suchfunktion. Geben Sie einen Suchbegriff ein:3This is a searchable index. Enter search keywords: QWebPage AnfangTopQWebPageUnterstrichen UnderlineQWebPageUnbekanntUnknownQWebPage$Web Inspector - %2Web Inspector - %2QWebPageDirekthilfe What's This?QWhatsThisAction**QWidgetAb&schlieen&FinishQWizard &Hilfe&HelpQWizard&Weiter&NextQWizard&Weiter >&Next >QWizard< &Zurck< &BackQWizardAbbrechenCancelQWizardAnwendenCommitQWizard WeiterContinueQWizard FertigDoneQWizard ZurckGo BackQWizard HilfeHelpQWizard%1 - [%2] %1 - [%2] QWorkspaceSchl&ieen&Close QWorkspaceVer&schieben&Move QWorkspace"Wieder&herstellen&Restore QWorkspace&Gre ndern&Size QWorkspace&Herabrollen&Unshade QWorkspaceSchlieenClose QWorkspaceMa&ximieren Ma&ximize QWorkspaceM&inimieren Mi&nimize QWorkspaceMinimierenMinimize QWorkspace Wiederherstellen Restore Down QWorkspace&AufrollenSh&ade QWorkspace.Im &Vordergrund bleiben Stay on &Top QWorkspacefehlende Encoding-Deklaration oder Standalone-Deklaration beim Parsen der XML-DeklarationYencoding declaration or standalone declaration expected while reading the XML declarationQXmlhFehler in der Text-Deklaration einer externen Entity3error in the text declaration of an external entityQXmlFFehler beim Parsen eines Kommentars$error occurred while parsing commentQXmlZFehler beim Parsen des Inhalts eines Elements$error occurred while parsing contentQXmlXFehler beim Parsen der Dokumenttypdefinition5error occurred while parsing document type definitionQXmlBFehler beim Parsen eines Elements$error occurred while parsing elementQXmlBFehler beim Parsen einer Referenz&error occurred while parsing referenceQXml4Konsument lste Fehler auserror triggered by consumerQXmlrin der DTD sind keine externen Entity-Referenzen erlaubt ;external parsed general entity reference not allowed in DTDQXmlin einem Attribut-Wert sind keine externen Entity-Referenzen erlaubtGexternal parsed general entity reference not allowed in attribute valueQXmlin einer DTD ist keine interne allgemeine Entity-Referenz erlaubt4internal general entity reference not allowed in DTDQXmldkein gltiger Name fr eine Processing-Instruktion'invalid name for processing instructionQXml^ein Buchstabe ist an dieser Stelle erforderlichletter is expectedQXml>mehrere Dokumenttypdefinitionen&more than one document type definitionQXmlkein Fehlerno error occurredQXml rekursive Entityrecursive entitiesQXml~fehlende Standalone-Deklaration beim Parsen der XML DeklarationAstandalone declaration expected while reading the XML declarationQXmlXElement-Tags sind nicht richtig geschachtelt tag mismatchQXml(unerwartetes Zeichenunexpected characterQXml6unerwartetes Ende der Dateiunexpected end of fileQXml~nicht-analysierte Entity-Referenz im falschen Kontext verwendet*unparsed entity reference in wrong contextQXml`fehlende Version beim Parsen der XML-Deklaration2version expected while reading the XML declarationQXmlXfalscher Wert fr die Standalone-Deklaration&wrong value for standalone declarationQXml^%1 ist keine gltige Angabe fr eine PUBLIC-Id.#%1 is an invalid PUBLIC identifier. QXmlStreamV%1 ist kein gltiger Name fr das Encoding.%1 is an invalid encoding name. QXmlStreamt%1 ist kein gltiger Name fr eine Prozessing-Instruktion.-%1 is an invalid processing instruction name. QXmlStream@erwartet, stattdessen erhalten ' , but got ' QXmlStream<Redefinition eines Attributes.Attribute redefined. QXmlStreamLDas Encoding %1 wird nicht untersttztEncoding %1 is unsupported QXmlStreampEs wurde Inhalt mit einer ungltigen Kodierung gefunden.(Encountered incorrectly encoded content. QXmlStreamJDie Entity '%1' ist nicht deklariert.Entity '%1' not declared. QXmlStreamEs wurde  Expected  QXmlStream@Es wurden Zeichendaten erwartet.Expected character data. QXmlStreamZberzhliger Inhalt nach Ende des Dokumentes.!Extra content at end of document. QXmlStreamBUngltige Namensraum-Deklaration.Illegal namespace declaration. QXmlStream.Ungltiges XML-Zeichen.Invalid XML character. QXmlStream(Ungltiger XML-Name.Invalid XML name. QXmlStream:Ungltige XML-Versionsangabe.Invalid XML version string. QXmlStreamhDie XML-Deklaration enthlt ein ungltiges Attribut.%Invalid attribute in XML declaration. QXmlStream4Ungltige Zeichenreferenz.Invalid character reference. QXmlStream(Ungltiges Dokument.Invalid document. QXmlStream.Ungltiger Entity-Wert.Invalid entity value. QXmlStreambDer Name der Prozessing-Instruktion ist ungltig.$Invalid processing instruction name. QXmlStreamxEine Parameter-Entity-Deklaration darf kein NDATA enthalten.&NDATA in parameter entity declaration. QXmlStreambDer Namensraum-Prfix '%1' wurde nicht deklariert"Namespace prefix '%1' not declared QXmlStreamDie Anzahl der ffnenden Elemente stimmt nicht mit der Anzahl der schlieenden Elemente berein. Opening and ending tag mismatch. QXmlStream>Vorzeitiges Ende des Dokuments.Premature end of document. QXmlStreamXEs wurde eine rekursive Entity festgestellt.Recursive entity detected. QXmlStreamvIm Attributwert wurde die externe Entity '%1' referenziert.5Reference to external entity '%1' in attribute value. QXmlStreambEs wurde die ungeparste Entity '%1' referenziert."Reference to unparsed entity '%1'. QXmlStreamfIm Inhalt ist die Zeichenfolge ']]>' nicht erlaubt.&Sequence ']]>' not allowed in content. QXmlStreamDer Wert fr das 'Standalone'-Attribut kann nur 'yes' oder 'no' sein."Standalone accepts only yes or no. QXmlStream6ffnendes Element erwartet.Start tag expected. QXmlStreamDas Standalone-Pseudoattribut muss dem Encoding unmittelbar folgen.?The standalone pseudo attribute must appear after the encoding. QXmlStream8Ungltig an dieser Stelle '  Unexpected ' QXmlStreamr'%1' ist kein gltiges Zeichen in einer public-id-Angabe./Unexpected character '%1' in public id literal. QXmlStreamRDiese XML-Version wird nicht untersttzt.Unsupported XML version. QXmlStreamDie XML-Deklaration befindet sich nicht am Anfang des Dokuments.)XML declaration not at start of document. QXmlStreamDie Ausdrcke %1 und %2 passen jeweils auf den Anfang oder das Ende einer beliebigen Zeile.,%1 and %2 match the start and end of a line. QtXmlPatterns:%1 kann nicht bestimmt werden%1 cannot be retrieved QtXmlPatternsv%1 enthlt Oktette, die im Encoding %2 nicht zulssig sind.E%1 contains octets which are disallowed in the requested encoding %2. QtXmlPatternsT%1 ist ein komplexer Typ. Eine "cast"-Operation zu komplexen Typen ist nicht mglich. Es knnen allerdings "cast"-Operationen zu atomare Typen wie %2 durchgefhrt werden.s%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. QtXmlPatterns.%1 ist kein gltiges %2%1 is an invalid %2 QtXmlPatterns%1 ist kein gltiger Modifizierer fr regulre Ausdrcke. Gltige Modifizierer sind:?%1 is an invalid flag for regular expressions. Valid flags are: QtXmlPatternsH%1 ist kein gltiger Namensraum-URI.%1 is an invalid namespace URI. QtXmlPatternsV%1 ist kein gltiger regulrer Ausdruck: %2/%1 is an invalid regular expression pattern: %2 QtXmlPatternsd%1 ist kein gltiger Name fr einen Vorlagenmodus.$%1 is an invalid template mode name. QtXmlPatternsD%1 ist ein unbekannter Schema-Typ.%1 is an unknown schema type. QtXmlPatternsNDas Encoding %1 wird nicht untersttzt.%1 is an unsupported encoding. QtXmlPatternsJ%1 ist kein gltiges XML 1.0 Zeichen.$%1 is not a valid XML 1.0 character. QtXmlPatternst%1 ist kein gltiger Name fr eine Prozessing-Instruktion.4%1 is not a valid name for a processing-instruction. QtXmlPatternsR%1 ist kein gltiger numerischer Literal."%1 is not a valid numeric literal. QtXmlPatterns%1 ist kein gltiger Zielname einer Processing-Anweisung, es muss ein %2 Wert wie zum Beispiel %3 sein.Z%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. QtXmlPatternsL%1 ist kein gltiger Wert des Typs %2.#%1 is not a valid value of type %2. QtXmlPatternsN%1 ist keine ganzzahlige Minutenangabe.$%1 is not a whole number of minutes. QtXmlPatterns%1 ist kein atomarer Typ. Es knnen nur "cast"-Operation zu atomaren Typen durchgefhrt werden.C%1 is not an atomic type. Casting is only possible to atomic types. QtXmlPatterns%1 befindet sich nicht unter den Attributdeklarationen im Bereich. Schema-Import wird nicht untersttzt.g%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. QtXmlPatternsL%1 ist kein gltiger Wert des Typs %2.&%1 is not valid as a value of type %2. QtXmlPatterns\Der Ausdruck '%1' schliet Zeilenvorschbe ein%1 matches newline characters QtXmlPatternsAuf %1 muss %2 oder %3 folgen; es kann nicht am Ende der Ersetzung erscheinen.J%1 must be followed by %2 or %3, not at the end of the replacement string. QtXmlPatterns%1 erfordert mindestens ein Argument; die Angabe %3 ist daher ungltig.%1 erfordert mindestens %n Argumente; die Angabe %3 ist daher ungltig.=%1 requires at least %n argument(s). %2 is therefore invalid. QtXmlPatternsr%1 hat nur %n Argument; die Angabe %2 ist daher ungltig.t%1 hat nur %n Argumente; die Angabe %2 ist daher ungltig.9%1 takes at most %n argument(s). %2 is therefore invalid. QtXmlPatterns"%1 wurde gerufen.%1 was called. QtXmlPatternsJEin Kommentar darf nicht'%1 enthaltenA comment cannot contain %1 QtXmlPatternsLEin Kommentar darf nicht auf %1 enden.A comment cannot end with a %1. QtXmlPatternsXDieses Konstrukt ist zur in XQuery zulssig.An %1-attribute must have a valid %2 as value, which %3 isn't. QtXmlPatternsDas Element hat bereits ein Attribut mit dem Namen %1 mit dem Wert %2.8An %1-attribute with value %2 has already been declared. QtXmlPatternsEs existiert bereits ein Argument mit dem Namen %1. Die Namen der Argumente mssen eindeutig sein.UAn argument by name %1 has already been declared. Every argument name must be unique. QtXmlPatternslDas Element hat bereits ein Attribut mit dem Namen %1.=An attribute by name %1 has already appeared on this element. QtXmlPatternsnEs wurde bereits ein Attribut mit dem Namen %1 erzeugt.1An attribute by name %1 has already been created. QtXmlPatternsEin Attributknoten darf nicht als Kind eines Dokumentknotens erscheinen. Es erschien ein Attributknoten mit dem Namen %1.dAn attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. QtXmlPatternsX%2 muss mindestens ein %1-Kindelement haben.3At least one %1 element must appear as child of %2. QtXmlPatternsZVor %2 muss mindestens ein %1-Element stehen.-At least one %1-element must occur before %2. QtXmlPatternsZIn %2 muss mindenstens ein %1-Element stehen.-At least one %1-element must occur inside %2. QtXmlPatternsdEs muss mindestens eine Komponente vorhanden sein.'At least one component must be present. QtXmlPatternsIm %1-Attribut des Elements %2 muss mindestens ein Modus angegeben werden.FAt least one mode must be specified in the %1-attribute on element %2. QtXmlPatternsBei Vorhandensein eines %1-Begrenzers muss mindestens eine Komponente vorhanden sein.?At least one time component must appear after the %1-delimiter. QtXmlPatternsnDie Attribute %1 und %2 schlieen sich gegenseitig aus.+Attribute %1 and %2 are mutually exclusive. QtXmlPatternsDas Attributelement %1 kann nicht serialisiert werden, da es auf der hchsten Ebene erscheint.EAttribute %1 can't be serialized because it appears at the top level. QtXmlPatternsDas Element %2 kann nur %3, %4 oder die Standardattribute haben, nicht jedoch %1.]Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. QtXmlPatternsDas Element %2 kann nur %3 oder die Standardattribute haben, nicht jedoch %1.YAttribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. QtXmlPatternsDas Element %2 kann nur %3 oder die Standardattribute haben, nicht jedoch %1.^Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. QtXmlPatternsDas Element %2 kann nur die Standardattribute haben, nicht jedoch %1.VAttribute %1 cannot appear on the element %2. Only the standard attributes can appear. QtXmlPatternsZDas Attribut %1 darf nicht den Wert %2 haben.&Attribute %1 cannot have the value %2. QtXmlPatterns Es knnen keine "cast"-Operationen zu dem Typ %1 durchgefhrt werden, da es ein abstrakter Typ ist und nicht instanziiert werden kann.fCasting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. QtXmlPatternsdEs wurde eine zirkulre Abhngigkeit festgestellt.Circularity detected QtXmlPatternsbDie Tagesangabe %1 ist fr den Monat %2 ungltig.Day %1 is invalid for month %2. QtXmlPatternslDie Tagesangabe %1 ist auerhalb des Bereiches %2..%3.#Day %1 is outside the range %2..%3. QtXmlPatternsDie Division eines Werts des Typs %1 durch %2 (kein numerischer Wert) ist nicht zulssig.@Dividing a value of type %1 by %2 (not-a-number) is not allowed. QtXmlPatternsDie Division eines Werts des Typs %1 durch %2 oder %3 (positiv oder negativ Null) ist nicht zulssig.LDividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. QtXmlPatternspDie Division (%1) durch Null (%2) ist nicht definiert.(Division (%1) by zero (%2) is undefined. QtXmlPatternsDie Namen von Vorlagenparameter mssen eindeutig sein, %1 existiert bereits.CEach name of a template parameter must be unique; %1 is duplicated. QtXmlPatternsDer effektive Boolesche Wert einer Sequenz aus zwei oder mehreren atomaren Werten kann nicht berechnet werden.aEffective Boolean Value cannot be calculated for a sequence containing two or more atomic values. QtXmlPatternsDas Element %1 kann nicht serialisiert werden, da es auerhalb des Dokumentenelements erscheint.OElement %1 can't be serialized because it appears outside the document element. QtXmlPatternshDas Element %1 kann keinen Sequenzkonstruktor haben..Element %1 cannot have a sequence constructor. QtXmlPatternsZDas Element %1 kann keine Kindelemente haben. Element %1 cannot have children. QtXmlPatternsdDas Element %1 darf nicht an dieser Stelle stehen.+Element %1 is not allowed at this location. QtXmlPatternsFDas Element %1 muss zuletzt stehen.Element %1 must come last. QtXmlPatternsDas Element %1 muss mindestens eines der Attribute %2 oder %3 haben.=Element %1 must have at least one of the attributes %2 or %3. QtXmlPatternsDas Element %1 muss entweder ein %2-Attribut haben oder es muss ein Sequenzkonstruktor verwendet werden.EElement %1 must have either a %2-attribute or a sequence constructor. QtXmlPatternsbDie "cast"-Operation von %1 zu %2 schlug fehl: %3&Failure when casting from %1 to %2: %3 QtXmlPatternsWenn beide Werte mit Zeitzonen angegeben werden, mssen diese bereinstimmen. %1 und %2 sind daher unzulssig.bIf both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. QtXmlPatternsDas Element %1 darf keines der Attribute %3 order %4 haben, solange es nicht das Attribut %2 hat.EIf element %1 has no attribute %2, it cannot have attribute %3 or %4. QtXmlPatterns0Es kann kein Prfix angegeben werden, wenn das erste Argument leer oder eine leere Zeichenkette (kein Namensraum) ist. Es wurde der Prfix %1 angegeben.If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. QtXmlPatternsIm Konstruktor eines Namensraums darf der Wert des Namensraumes keine leere Zeichenkette sein.VIn a namespace constructor, the value for a namespace value cannot be an empty string. QtXmlPatternsIn einem vereinfachten Stylesheet-Modul muss das Attribut %1 vorhanden sein.@In a simplified stylesheet module, attribute %1 must be present. QtXmlPatternsBei einem XSL-T-Suchmuster drfen nur die Achsen %2 oder %3 verwendet werden, nicht jedoch %1.DIn an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. QtXmlPatternsBei einem XSL-T-Suchmuster darf die Funktion %1 kein drittes Argument haben.>In an XSL-T pattern, function %1 cannot have a third argument. QtXmlPatternsBei einem XSL-T-Suchmuster drfen nur die Funktionen %1 und %2, nicht jedoch %3 zur Suche verwendet werden.OIn an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. QtXmlPatternsBei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Literal oder eine Variablenreferenz sein.yIn an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. QtXmlPatternsBei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein String-Literal sein.hIn an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. QtXmlPatternsIn der Ersetzung kann %1 nur verwendet werden, um sich selbst oder %2 schtzen, nicht jedoch fr %3MIn the replacement string, %1 can only be used to escape itself or %2, not %3 QtXmlPatternsIn der Ersetzung muss auf %1 eine Ziffer folgen, wenn es nicht durch ein Escape-Zeichen geschtzt ist.VIn the replacement string, %1 must be followed by at least one digit when not escaped. QtXmlPatternsDie Ganzzahldivision (%1) durch Null (%2) ist nicht definiert.0Integer division (%1) by zero (%2) is undefined. QtXmlPatternsPDer Prfix %1 kann nicht gebunden werden+It is not possible to bind to the prefix %1 QtXmlPatternsEs kann keine "cast"-Operation von %1 zu %2 durchgefhrt werden.)It is not possible to cast from %1 to %2. QtXmlPatternsZDer Prfix %1 kann nicht redeklariert werden.*It is not possible to redeclare prefix %1. QtXmlPatterns<%1 kann nicht bestimmt werden.'It will not be possible to retrieve %1. QtXmlPatterns`Attribute drfen nicht auf andere Knoten folgen.AIt's not possible to add attributes after any other kind of node. QtXmlPatternsEs kann keine "cast"-Operation vom Wert %1 des Typs %2 zu %3 durchgefhrt werden7It's not possible to cast the value %1 of type %2 to %3 QtXmlPatternsPGro/Kleinschreibung wird nicht beachtetMatches are case insensitive QtXmlPatternsModul-Importe mssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.MModule imports must occur before function, variable, and option declarations. QtXmlPatterns~Die Modulo-Division (%1) durch Null (%2) ist nicht definiert.0Modulus division (%1) by zero (%2) is undefined. QtXmlPatternsnDie Monatsangabe %1 ist auerhalb des Bereiches %2..%3.%Month %1 is outside the range %2..%3. QtXmlPatternsDie Multiplikation eines Werts des Typs %1 mit %2 oder %3 (positiv oder negativ unendlich) ist nicht zulssig.YMultiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. QtXmlPatternsDer Namensraum %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.ONamespace %1 can only be bound to %2 (and it is, in either case, pre-declared). QtXmlPatternsNamensraums-Deklarationen mssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.UNamespace declarations must occur before function, variable, and option declarations. QtXmlPatternspDas Zeitlimit der Netzwerkoperation wurde berschritten.Network timeout. QtXmlPatternsEs knnen keine "cast"-Operationen zu dem Typ %1 durchgefhrt werden.2No casting is possible with %1 as the target type. QtXmlPatternsMit dem Typ %1 knnen keine Vergleichsoperationen durchgefhrt werden.1No comparisons can be done involving the type %1. QtXmlPatternsExterne Funktionen werden nicht untersttzt. Alle untersttzten Funktionen knnen direkt verwendet werden, ohne sie als extern zu deklarieren{No external functions are supported. All supported functions can be used directly, without first declaring them as external QtXmlPatternsZEs existiert keine Funktion mit dem Namen %1.$No function by name %1 is available. QtXmlPatterns^Es existiert keine Funktion mit der Signatur %1*No function with signature %1 is available QtXmlPatternsnEs existiert keine Namensraum-Bindung fr den Prfix %1-No namespace binding exists for the prefix %1 QtXmlPatternszEs existiert keine Namensraum-Bindung fr den Prfix %1 in %23No namespace binding exists for the prefix %1 in %2 QtXmlPatternslBei der Ganzzahldivision %1 darf kein Operand %2 sein.1No operand in an integer division, %1, can be %2. QtXmlPatternsXEs existiert keine Vorlage mit dem Namen %1.No template by name %1 exists. QtXmlPatterns~Fr die externe Variable des Namens %1 ist kein Wert verfgbar.;No value is available for the external variable by name %1. QtXmlPatternsXEs existiert keine Variable mit dem Namen %1No variable by name %1 exists QtXmlPatternsEs muss ein fallback-Ausdruck vorhanden sein, da keine pragma-Ausdrcke untersttzt werden^None of the pragma expressions are supported. Therefore, a fallback expression must be present QtXmlPatternstDer Anfrage-Prolog darf nur eine %1-Deklaration enthalten.6Only one %1 declaration can occur in the query prolog. QtXmlPatternsVEs darf nur ein einziges %1-Element stehen.Only one %1-element can appear. QtXmlPatternsEs wird nur Unicode Codepoint Collation untersttzt (%1). %2 wird nicht untersttzt.IOnly the Unicode Codepoint Collation is supported(%1). %2 is unsupported. QtXmlPatternszAn %2 kann nur der Prfix %1 gebunden werden (und umgekehrt).5Only the prefix %1 can be bound to %2 and vice versa. QtXmlPatternsDer Operator %1 kann nicht auf atomare Werte der Typen %2 und %3 angewandt werden.>Operator %1 cannot be used on atomic values of type %2 and %3. QtXmlPatternsvDer Operator %1 kann nicht auf den Typ %2 angewandt werden.&Operator %1 cannot be used on type %2. QtXmlPatternsDer Operator %1 kann auf atomare Werte der Typen %2 und %3 nicht angewandt werden.EOperator %1 is not available between atomic values of type %2 and %3. QtXmlPatternslDas Datum %1 kann nicht dargestellt werden (berlauf)."Overflow: Can't represent date %1. QtXmlPatternsfDas Datum kann nicht dargestellt werden (berlauf).$Overflow: Date can't be represented. QtXmlPatterns Parse-Fehler: %1Parse error: %1 QtXmlPatternsDer Prfix %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.LPrefix %1 can only be bound to %2 (and it is, in either case, pre-declared). QtXmlPatternsbDer Prfix %1 wurde bereits im Prolog deklariert.,Prefix %1 is already declared in the prolog. QtXmlPatternsDie Wandlung von %1 zu %2 kann zu einem Verlust an Genauigkeit fhren./Promoting %1 to %2 may cause loss of precision. QtXmlPatternsnDie erforderliche Kardinalitt ist %1 (gegenwrtig %2)./Required cardinality is %1; got cardinality %2. QtXmlPatternsrDer erforderliche Typ ist %1, es wurde aber %2 angegeben.&Required type is %1, but %2 was found. QtXmlPatternsEs wird ein XSL-T 1.0-Stylesheet mit einem Prozessor der Version 2.0 verarbeitet.5Running an XSL-T 1.0 stylesheet with a 2.0 processor. QtXmlPatterns`An dieser Stelle drfen keine Textknoten stehen.,Text nodes are not allowed at this location. QtXmlPatternsZDie %1-Achse wird in XQuery nicht untersttzt$The %1-axis is unsupported in XQuery QtXmlPatternsDie Deklaration %1 ist unzulssig, da Schema-Import nicht untersttzt wird.WThe Schema Import feature is not supported, and therefore %1 declarations cannot occur. QtXmlPatterns%1-Ausdrcke knnen nicht verwendet werden, da Schemavalidierung nicht untersttzt wird. VThe Schema Validation Feature is not supported. Hence, %1-expressions may not be used. QtXmlPatternsJDer URI darf kein Fragment enthalten.The URI cannot have a fragment QtXmlPatternshNur das erste %2-Element darf das Attribut %1 haben.9The attribute %1 can only appear on the first %2 element. QtXmlPatterns%2 darf nicht das Attribut %1 haben, wenn es ein Kindelement von %3 ist.?The attribute %1 cannot appear on %2, when it is a child of %3. QtXmlPatternsTDas Element %2 muss das Attribut %1 haben.+The attribute %1 must appear on element %2. QtXmlPatternsDer Code-Punkt %1 aus %2 mit Encoding %3 ist kein gltiges XML-Zeichen.QThe codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. QtXmlPatternsDie Daten einer Processing-Anweisung drfen nicht die Zeichenkette %1 enthaltenAThe data of a processing instruction cannot contain the string %1 QtXmlPatterns^Fr eine Kollektion ist keine Vorgabe definiert#The default collection is undefined QtXmlPatternsrIn XSL-T existiert kein Element mit dem lokalen Namen %1.7The element with local name %1 does not exist in XSL-T. QtXmlPatternsDie Kodierung %1 ist ungltig; sie darf nur aus lateinischen Buchstaben bestehen und muss dem regulren Ausdruck %2 entsprechen.The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. QtXmlPatternsjDas erste Argument von %1 kann nicht vom Typ %2 sein..The first argument to %1 cannot be of type %2. QtXmlPatternsDas erste Argument von %1 darf nicht vom Typ %2 sein; es muss numerisch, xs:yearMonthDuration oder xs:dayTimeDuration sein.uThe first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. QtXmlPatternsDas erste Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein.PThe first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. QtXmlPatternsDer erste Operand der Ganzzahldivision %1 darf nicht unendlich (%2) sein .FThe first operand in an integer division, %1, cannot be infinity (%2). QtXmlPatterns8Es ist kein Fokus definiert.The focus is undefined. QtXmlPatternsDie Initialisierung der Variable %1 hngt von ihrem eigenem Wert ab3The initialization of variable %1 depends on itself QtXmlPatternstDas Element %1 entspricht nicht dem erforderlichen Typ %2./The item %1 did not match the required type %2. QtXmlPatternsDas Schlsselwort %1 kann nicht mit einem anderen Modusnamen zusammen verwendet werden.5The keyword %1 cannot occur with any other mode name. QtXmlPatternsDer letzte Schritt eines Pfades kann entweder nur Knoten oder nur atomare Werte enthalten. Sie drfen nicht zusammen auftreten.kThe last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. QtXmlPatternsFModul-Import wird nicht untersttzt*The module import feature is not supported QtXmlPatterns`Der Name %1 hat keinen Bezug zu einem Schematyp..The name %1 does not refer to any schema type. QtXmlPatternsDer Name eines berechneten Attributes darf keinen Namensraum-URI %1 mit dem lokalen Namen %2 haben.ZThe name for a computed attribute cannot have the namespace URI %1 with the local name %2. QtXmlPatternsHDer Name der gebundenen Variablen eines for-Ausdrucks muss sich von dem der Positionsvariable unterscheiden. Die zwei Variablen mit dem Namen %1 stehen im Konflikt.The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. QtXmlPatternsDer Name eines Erweiterungsausdrucks muss sich in einem Namensraum befinden.;The name of an extension expression must be in a namespace. QtXmlPatternsDer Name einer Option muss einen Prfix haben. Es gibt keine Namensraum-Vorgabe fr Optionen.TThe name of an option must have a prefix. There is no default namespace for options. QtXmlPatterns@Der Namensraum %1 ist reserviert und kann daher von nutzerdefinierten Funktionen nicht verwendet werden (fr diesen Zweck gibt es den vordefinierten Prfix %2).The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. QtXmlPatternsDer Namensraum-URI darf nicht leer sein, wenn er an den Prfix %1 gebunden ist.JThe namespace URI cannot be the empty string when binding to a prefix, %1. QtXmlPatternsDer Namensraum-URI im Namen eines berechneten Attributes darf nicht %1 seinDThe namespace URI in the name for a computed attribute cannot be %1. QtXmlPatternsEin Namensraum-URI muss eine Konstante sein und darf keine eingebetteten Ausdrcke verwenden.IThe namespace URI must be a constant and cannot use enclosed expressions. QtXmlPatternsDer Namensraum einer nutzerdefinierten Funktion darf nicht leer sein (fr diesen Zweck gibt es den vordefinierten Prfix %1)yThe namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) QtXmlPatterns Der Namensraum einer nutzerdefinierten Funktion aus einem Bibliotheksmodul muss dem Namensraum des Moduls entsprechen (%1 anstatt %2) The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 QtXmlPatternsrDie Normalisierungsform %1 wird nicht untersttzt. Die untersttzten Normalisierungsformen sind %2, %3, %4 and %5, und "kein" (eine leere Zeichenkette steht fr "keine Normalisierung").The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). QtXmlPatternsEs existiert kein entsprechendes %2 fr den bergebenen Parameter %1.;The parameter %1 is passed, but no corresponding %2 exists. QtXmlPatternsEs wurde kein entsprechendes %2 fr den erforderlichen Parameter %1 angegeben.BThe parameter %1 is required, but no corresponding %2 is supplied. QtXmlPatternsDer Prfix %1 kann nicht gebunden werden. Er ist bereits durch Vorgabe an den Namensraum %2 gebunden.TThe prefix %1 can not be bound. By default, it is already bound to the namespace %2. QtXmlPatternsPDer Prfix %1 kann nicht gebunden werdenThe prefix %1 cannot be bound. QtXmlPatternsDer Prfix muss ein gltiger %1 sein. Das ist bei %2 nicht der Fall./The prefix must be a valid %1, which %2 is not. QtXmlPatternsDer bergeordnete Knoten des zweiten Arguments der Funktion %1 muss ein Dokumentknoten sein, was bei %2 nicht der Fall ist.gThe root node of the second argument to function %1 must be a document node. %2 is not a document node. QtXmlPatternsDas zweite Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein.QThe second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. QtXmlPatternstDer zweite Operand der Division %1 darf nicht 0 (%2) sein.:The second operand in a division, %1, cannot be zero (%2). QtXmlPatterns%2 ist kein gltiger Zielname einer Processing-Anweisung, da dieser nicht %1 sein darf (ungeachtet der Gro/Kleinschreibung).~The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. QtXmlPatterns`Der Ziel-Namensraum von %1 darf nicht leer sein.-The target namespace of a %1 cannot be empty. QtXmlPatternsDer Wert des Attributs %1 des Elements %2 kann nur %3 oder %4 sein, nicht jedoch %5.IThe value for attribute %1 on element %2 must either be %3 or %4, not %5. QtXmlPatternsDer Wert des Attributs mit %1 muss vom Typ %2 sein. %3 ist kein gltiger Wert.:The value of attribute %1 must of type %2, which %3 isn't. QtXmlPatternsDer Wert eines XSL-T Versionsattributes muss vom Typ %1 sein, was bei %2 nicht der Fall ist.TThe value of the XSL-T version attribute must be a value of type %1, which %2 isn't. QtXmlPatternsHDie Variable %1 wird nicht verwendetThe variable %1 is unused QtXmlPatterns%1 kann nicht verwendet werden, da dieser Prozessor keine Schemas untersttzt.CThis processor is not Schema-aware and therefore %1 cannot be used. QtXmlPatternsPDie Zeitangabe %1:%2:%3.%4 ist ungltig.Time %1:%2:%3.%4 is invalid. QtXmlPatternsDie Zeitangabe 24:%1:%2.%3 ist ungltig. Bei der Stundenangabe 24 mssen Minuten, Sekunden und Millisekunden 0 sein._Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0;  QtXmlPatternsDie zuoberst stehenden Elemente eines Stylesheets drfen sich nicht im Null-Namensraum befinden, was bei %1 der Fall ist.NTop level stylesheet elements must be in a non-null namespace, which %1 isn't. QtXmlPatternsEs wurden zwei Namenraum-Deklarationsattribute gleichen Namens (%1) gefunden.Unbekanntes XSL-T Attribut: %1.Unknown XSL-T attribute %1. QtXmlPatternsnDer Wert %1 des Typs %2 berschreitet das Maximum (%3).)Value %1 of type %2 exceeds maximum (%3). QtXmlPatternspDer Wert %1 des Typs %2 unterschreitet das Minimum (%3).*Value %1 of type %2 is below minimum (%3). QtXmlPatternsDie Version %1 wird nicht untersttzt. Die untersttzte Version von XQuery ist 1.0.AVersion %1 is not supported. The supported XQuery version is 1.0. QtXmlPatternsDer Defaultwert eines erforderlichen Parameters kann weder durch ein %1-Attribut noch durch einen Sequenzkonstruktor angegeben werden. rWhen a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. QtXmlPatternsEs kann kein Sequenzkonstruktor verwendet werden, wenn %2 ein Attribut %1 hat.JWhen attribute %1 is present on %2, a sequence constructor cannot be used. QtXmlPatternsBei einer "cast"-Operation von %1 zu %2 darf der Wert nicht %3 sein.:When casting to %1 from %2, the source value cannot be %3. QtXmlPatternsHBei einer "cast"-Operation zum Typ %1 oder abgeleitetenTypen muss der Quellwert ein Zeichenketten-Literal oder ein Wert gleichen Typs sein. Der Typ %2 ist ungltig.When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. QtXmlPatterns(Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein String-Literal sein.vWhen function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. QtXmlPatternsLeerzeichen werden entfernt, sofern sie nicht in Zeichenklassen erscheinenOWhitespace characters are removed, except when they appear in character classes QtXmlPatternsDie XSL-T-Attribute eines XSL-T-Elements mssen im Null-Namensraum sein, nicht im XSL-T-Namensraum, wie %1.iXSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. QtXmlPatternsp%1 ist keine gltige Jahresangabe, da es mit %2 beginnt.-Year %1 is invalid because it begins with %2. QtXmlPatternsleerempty QtXmlPatternsgenau ein exactly one QtXmlPatterns ein oder mehrere one or more QtXmlPatterns"kein oder mehrere zero or more QtXmlPatternskein oder ein zero or one QtXmlPatternsStummschaltungMuted VolumeSliderLautstrke: %1% Volume: %1% VolumeSliderqutim-0.2.0/languages/bg_BG/0000755000175000017500000000000011273101310017207 5ustar euroelessareuroelessarqutim-0.2.0/languages/bg_BG/Pinfo.xml0000644000175000017500000000061211235640707021023 0ustar euroelessareuroelessar languages art all bg_BG --VERSION-- Bulgarian language for qutIM 0.2 Beta --URL-- Boyan G. Kiroff Creative Commons BY-SA 3.0 http://qutim.kiroff.org/img/qutim.png qutim-0.2.0/languages/bg_BG/sources/0000755000175000017500000000000011273101310020672 5ustar euroelessareuroelessarqutim-0.2.0/languages/bg_BG/sources/formules.ts0000644000175000017500000000301711257074057023122 0ustar euroelessareuroelessar formulesSettingsClass Settings Настройки Scale: Мащаб: Do next to show source text of evaluation: За преглед на изходния текст на израза използвайте: [tex]EVALUATION THERE[/tex] [tex]ИЗРАЗ[/tex] $$EVALUATION THERE$$ $$ИЗРАЗ$$ qutim-0.2.0/languages/bg_BG/sources/imagepub.ts0000644000175000017500000004006411254124741023053 0ustar euroelessareuroelessar imagepubPlugin Send image via ImagePub plugin Изпращане на изображение чрез ImagePub добавка Choose image file Избор на файл с изображение Choose image Избор на изображение Image Files (*.png *.jpg *.gif) Изображения (*.png *.jpg *.gif) Canceled Отказан File size is null Размерът на файла е null Sending image URL... Изпращане на връзка към изображението... Image sent: %N (%S bytes) %U Изображението е изпратено: %N (%S Байта) %U Image URL sent Връзка към изображението бе изпратена Can't parse URL Разборът на връзката е неуспешен imagepubSettingsClass Settings Настройки Image hosting service: Услуга за публикуване на изображения: Send image template: Изпращане на шаблон за изображения: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> %N - file name; %U - file URL; %S - file size %N - име на файла; %U - връзка към файла; %S - размер на файла About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">ImagePub qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Send images via public web services</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">ImagePub добавка за qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Изпращане на изображения чрез публични уеб услуги</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Александър Казарин</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> uploadDialog Uploading... Качване... Progress: %1 / %2 Напредък: %1 / %2 Elapsed time: %1 Изтекло време: %1 Speed: %1 kb/sec Скорост: %1 kbps File: %1 Файл: %1 uploadDialogClass Uploading... Upload started. Качването е стартирано. File: Файл: Progress: Напредък: Elapsed time: Изтекло време: Speed: Скорост: Cancel Отказ qutim-0.2.0/languages/bg_BG/sources/urlpreview.ts0000644000175000017500000003472611240003554023467 0ustar euroelessareuroelessar urlpreviewPlugin URL Preview Предварителен преглед на адреси bytes Байта Make URL previews in messages Предварителен преглед на адреси в съобщенията urlpreviewSettingsClass Settings Настройки General Общи Enable on incoming messages Включване за входящите съобщения Enable on outgoing messages Включване за изходящите съобщения Don't show info for text/html content type Да не се показва информация за text/html content type Info template: Шаблон на информацията: Macros: %TYPE% - Content-Type %SIZE% - Content-Length Макроси: %TYPE% - тип на съдържанието %SIZE% - размер на съдържанието Images Изображения Max file size limit (in bytes) Максимален размер на файла (в Байтове) %MAXW% macro %MAXW% макрос %MAXH% macro %MAXH% макрос Image preview template: Шаблон за предварителен преглед изображения: Macros: %URL% - Image URL %UID% - Generated unique ID Макрос: %URL% - Адрес на изображението %UID% - Генериран уникален идентификатор <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Make previews for URLs in messages</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Добавка за предварителен преглед на адреси в qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn версия</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Предварителен преглед на адреси в съобщенията</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Александър Казарин</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> About За добавката qutim-0.2.0/languages/bg_BG/sources/qt_bg.ts0000644000175000017500000107113411232541367022364 0ustar euroelessareuroelessar AudioOutput <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> <html>Звуковото устройство <b>%1</b> не работи.<br/>Връщане към <b>%2</b>.</html> <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> <html>Превключване към звуково устройство <b>%1</b>,<br/>което стана достъпно и е предпочитано.</html> Revert back to device '%1' Връщане към устройство '%1' CloseButton Close Tab Затваряне на раздела PPDOptionsModel Name Име Phonon:: Notifications Уведомления Music Музика Video Видео Communication Връзка Games Игри Accessibility Специални възможности Phonon::Gstreamer::Backend Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled. Предупреждение: Изглежда нямате инсталиран пакета gstreamer0.10-plugins-good. Някой от видео характеристиките бяха изключени. Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled Предупреждение: Изглежда нямате инсталирана основната GStreamer добавка. Поддръжката на звук и видео бе изключена Phonon::Gstreamer::MediaObject Cannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed. Изпълнението не може да започне. Проверете инсталацията на Gstreamer и се уверете, че libgstreamer-plugins-base е инсталиран. A required codec is missing. You need to install the following codec(s) to play this content: %0 Липсващ кодек. Нужно е следните кодеци да бъдат инсталирани, за да се изпълни: %0 Could not open media source. Невъзможно е да бъде отворен източника. Invalid source type. Невалиден тип на източника. Could not locate media source. Невъзможно е да бъде открит източника. Could not open audio device. The device is already in use. Звуковото устройство не може да бъде отворено. То вече се използва. Could not decode media source. Невъзможно е да бъде декодиран източника. Phonon::VolumeSlider Volume: %1% Сила на звука: %1% Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% Използвайте този плъзгач за регулиране силата на звука. Най-лявата позиция е 0%, най-дясната %1% Q3Accel %1, %2 not defined %1, %2 не са зададени Ambiguous %1 not handled Неопределението %1 не бе обработено Q3DataTable True True False False Insert Вмъкване Update Актуализиране Delete Изтриване Q3FileDialog Copy or Move a File Копиране или преместване на файл Read: %1 Четене: %1 Write: %1 Запис: %1 Cancel Отказ All Files (*) Всички файлове (*) Name Име Size Размер Type Тип Date Дата Attributes Атрибути &OK &OK Look &in: &Преглед в: File &name: &Име на файла: File &type: &Тип на файла: Back Назад One directory up Едно ниво нагоре Create New Folder Създаване на нова папка List View Списък Detail View Подробности Preview File Info Предварителен преглед на информацията за файла Preview File Contents Предварителен преглед на съдържанието на файла Read-write Четене-и запис Read-only Само за четене Write-only Само за запис Inaccessible Недостъпен Symlink to File Символна връзка към файл Symlink to Directory Символна връзка към директория Symlink to Special Символна връзка към специален файл File Файл Dir Дир Special Специален файл Open Отваряне Save As Запис като &Open &Отваряне &Save &Запис &Rename &Преименуване &Delete &Изтриване R&eload &Презареждане Sort by &Name По &име Sort by &Size По &големина Sort by &Date По &дата &Unsorted &Без подредба Sort Подредба Show &hidden files Показване на &скритите файлове the file файла the directory директорията the symlink символната връзка Delete %1 Изтриване на %1 <qt>Are you sure you wish to delete %1 "%2"?</qt> <qt>Сигурни ли сте, че желаете да изтриете %1 "%2"?</qt> &Yes &Да &No &Не New Folder 1 Нова папка 1 New Folder Нова папка New Folder %1 Нова папка %1 Find Directory Намиране на директория Directories Директории Directory: Директория Error Грешка %1 File not found. Check path and filename. %1 Файлът не бе намерен. Проверете пътя и името на файла. All Files (*.*) Всички файлове (*.*) Open Отваряне Select a Directory Избор на директория Q3LocalFs Could not read directory %1 Невъзможно е да бъде прочетена директорията %1 Could not create directory %1 Невъзможно е да бъде създадена директорията %1 Could not remove file or directory %1 Невъзможно е да бъде изтрит(а) файла или директорията %1 Could not rename %1 to %2 Невъзможно е преименуването от %1 на %2 Could not open %1 Невъзможно е да бъде отворен(а) %1 Could not write %1 Невъзможно е да бъде записан %1 Q3MainWindow Line up Подравняване Customize... Персонализиране... Q3NetworkProtocol Operation stopped by the user Операцията бе прекъсната от потребителя Q3ProgressDialog Cancel Отказ Q3TabDialog OK ОК Apply Прилагане Help Помощ Defaults По подразбиране Cancel Отказ Q3TextEdit &Undo &Отмяна &Redo &Възстановяване Cu&t &Изрязване &Copy &Копиране &Paste &Поставяне Clear Изчистване Select All Избор на всички Q3TitleBar System Система Restore up Възстановяване нагоре Minimize Минимизиране Restore down Възстановяване надолу Maximize Максимизиране Close Затваряне Contains commands to manipulate the window Съдържа команди за манипулиране с прозореца Puts a minimized back to normal Връща свития обратно в нормален Moves the window out of the way Измества прозореца Puts a maximized window back to normal Връща разтворения обратно в нормален Makes the window full screen Разтваря прозореца на пълен екран Closes the window Затваря прозореца Displays the name of the window and contains controls to manipulate it Показва името на прозореца и съдържа контроли за манипулиране с него Q3ToolBar More... Още... Q3UrlOperator The protocol `%1' is not supported Протоколът `%1' не се поддържа The protocol `%1' does not support listing directories Протоколът `%1' не поддържа преглед на директории The protocol `%1' does not support creating new directories Протоколът `%1' не поддържа създаване на нови директории The protocol `%1' does not support removing files or directories Протоколът `%1' не поддържа премахване на файлове и директории The protocol `%1' does not support renaming files or directories Протоколът `%1' не поддържа преименуване на файлове и директории The protocol `%1' does not support getting files Протоколът `%1' не поддържа изтегляне на файлове The protocol `%1' does not support putting files Протоколът `%1' не поддържа качване на файлове The protocol `%1' does not support copying or moving files or directories Протоколът `%1' не поддържа копиране или преместване на файлове и директории (unknown) (неизвестно) Q3Wizard &Cancel &Отказ < &Back < &Назад &Next > &Напред > &Finish &Приключване &Help &Помощ QAbstractSocket Host not found Хостът не бе намерен Connection refused Връзката бе отказана Connection timed out Изтекло време на връзката Operation on socket is not supported Операции със сокети не се поддържат Socket operation timed out Изтекло време на сокет операцията Socket is not connected Сокетът не е свързан Network unreachable Мрежата е недостъпна QAbstractSpinBox &Step up &Стъпка нагоре Step &down &Стъпка надолу &Select All &Избор на всички QApplication QT_LAYOUT_DIRECTION Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. LTR Executable '%1' requires Qt %2, found Qt %3. Изпълнимият модул '%1' изисква Qt %2, открита е %3. Incompatible Qt Library Error Грешка поради несъвместимост на Qt библиотеките Activate Активиране Activates the program's main window Активира главния прозорец на програмата QAxSelect Select ActiveX Control Избор на ActiveX контрол OK ОК &Cancel &Отказ COM &Object: COM &обект: QCheckBox Uncheck Премахване на отметка Check Слагане на отметка Toggle Превключване QColorDialog Hu&e: &Тон: &Sat: &Нас: &Val: &Ярк: &Red: &Черв: &Green: &Зел: Bl&ue: С&ин: A&lpha channel: &Алфа-канал: Select Color Избор на цвят &Basic colors &Основни цветове &Custom colors &Собствени цветове &Define Custom Colors >> &Избор на собствени цвета >> OK OK Cancel Отказ &Add to Custom Colors &Добавяне към собствените цветове Select color Избор на цвят QComboBox Open Отваряне False False True True Close Затваряне QCoreApplication %1: key is empty QSystemSemaphore %1: ключът е празен %1: unable to make key QSystemSemaphore %1: невъзможно е да бъде създаден ключ %1: ftok failed QSystemSemaphore %1: ftok (ключ от файл) е неуспешна QDB2Driver Unable to connect Невъзможно е да се установи връзка Unable to commit transaction Невъзможно е изпълнението на транзакцията Unable to rollback transaction Невъзможно е връщането на транзакцията Unable to set autocommit Невъзможно е да се установи autocommit QDB2Result Unable to execute statement Невъзможно е да се изпълни заявката Unable to prepare statement Невъзможно е да се приготви заявката Unable to bind variable Невъзможно е да се свърже параметъра Unable to fetch record %1 Невъзможно е да се извлече ред %1 Unable to fetch next Невъзможно е да се извлече следващия Unable to fetch first Невъзможно е да се извлече първия QDateTimeEdit AM am PM pm QDial QDial SpeedoMeter Скоростомер SliderHandle Управление на плъзгача QDialog What's This? Какво е това? Done Завършено QDialogButtonBox OK ОК Save Запис &Save &Запис Open Отваряне Cancel Отказ &Cancel &Отказ Close Затваряне &Close &Затваряне Apply Прилагане Reset Нулиране Help Помощ Don't Save Да не се записва Discard Отхвърляне &Yes &Да Yes to &All Да на &всички &No &Не N&o to All Н&е на всички Save All Запис на всички Abort Прекратяване Retry Повторен опит Ignore Игнориране Restore Defaults Възстановяване подразбиращото се Close without Saving Затваряне без запис &OK &OK QDirModel Name Име Size Размер Kind Match OS X Finder Вид Type All other platforms Тип Date Modified Дата на промяна QDockWidget Close Затваряне Dock Прибиране Float Изваждане QDoubleSpinBox More Подробно Less Кратко QErrorMessage &Show this message again Да се &показва това съобщение отново &OK &OK Debug Message: Съобщение за откриване на грешки: Warning: Предупреждение: Fatal Error: Критична грешка: QFile Destination file exists Целевият файл съществува Cannot remove source file Изходният файл не може да бъде премахнат Cannot open %1 for input Файлът %1 не може да бъде отворен за въвеждане Cannot open for output Файлът не може да бъде отворен за извеждане Failure to write block Неуспешен запис на блок Cannot create %1 for output Файлът %1 не може да бъде създаден за извеждане QFileDialog All Files (*) Всички файлове (*) Back Назад List View Списък Detail View Подробности File Файл Open Отваряне Save As Запис като &Open &Отваряне &Save &Запис Recent Places Последно отваряни места &Rename &Преименуване &Delete &Изтриване Show &hidden files Показване на &скритите файлове New Folder Нова папка Find Directory Намиране на директория Directories Директории All Files (*.*) Всички файлове (*.*) Directory: Директория %1 already exists. Do you want to replace it? %1 вече съществува. Желаете ли да бъде заменен(а)? %1 File not found. Please verify the correct file name was given. %1 Файлът не бе намерен. Моля уверете се, че е зададено правилно име. My Computer Моят компютър Parent Directory Родителска директория Files of type: Файлове от тип: %1 Directory not found. Please verify the correct directory name was given. %1 Директорията не бе намерена. Моля уверете се, че е зададено правилно име. '%1' is write protected. Do you want to delete it anyway? '%1' е защитен(а) за запис. Желаете ли да бъде изтрит(а), въпреки това? Are sure you want to delete '%1'? Сигурни ли сте, че желаете да изтриете '%1'? Could not delete directory. Невъзможно е да бъде изтрита директорията. Drive Устройство Unknown Неизвестен Show Показване Forward Напред &New Folder &Нова папка &Choose &Избиране Remove Премахване File &name: Име на &файла: Look in: Преглед в: Create New Folder Създаване на нова папка QFileSystemModel %1 TB %1 ТБ %1 GB %1 ГБ %1 MB %1 МБ %1 KB %1 кБ %1 bytes %1 Байта Invalid filename Невалидно име на файл <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. <b>Името "%1" не може да бъде използвано.</b><p>Опитайте с друго име, с по-малко символи или без пунктуационни такива. Name Име Size Размер Kind Match OS X Finder Вид Type All other platforms Тип Date Modified Дата на промяна My Computer Моят компютър Computer Компютър QFontDatabase Normal Нормален Bold Получер Demi Bold Black Черен Demi Light Лек Italic Курсив Oblique Полегат Any Всички Latin латински Greek гръцки Cyrillic на кирилица Armenian арменски Hebrew Иврит Arabic арабски Syriac сирийски Thaana Devanagari Bengali Gurmukhi Gujarati Oriya Tamil Telugu Kannada Malayalam Sinhala Thai тайландски Lao лаоски Tibetan тибетски Myanmar мианмарски Georgian грузински Khmer кхмерски Simplified Chinese опростен китайски Traditional Chinese традиционен китайски Japanese японски Korean корейски Vietnamese виетнамски Symbol символен Ogham огам Runic рунически QFontDialog &Font &Шрифт Font st&yle &Стил на шрифта &Size &Размер Effects Ефекти Stri&keout &Зачертаване &Underline П&одчертаване Sample Пример Select Font Избор на шрифт Wr&iting System С&истема на писане QFtp Host %1 found Хостът %1 е намерен Host found Хостът е намерен Connected to host %1 Установена е връзка с хост %1 Connected to host Установена е връзка с хоста Connection to %1 closed Връзката с хост %1 бе затворена Connection closed Връзката бе затворена Host %1 not found Хостът %1 не бе намерен Connection refused to host %1 Връзката с хост %1 бе отказана Connection timed out to host %1 Изтекло време на връзката с хост %1 Unknown error Неизвестна грешка Connecting to host failed: %1 Грешка при свързване с хоста: %1 Login failed: %1 Неуспешен вход в системата: %1 Listing directory failed: %1 Грешка при разлистване на директорията: %1 Changing directory failed: %1 Грешка при смяна на директорията: %1 Downloading file failed: %1 Грешка при изтегляне на файла: %1 Uploading file failed: %1 Грешка при качване: %1 Removing file failed: %1 Грешка при премахване на файла: %1 Creating directory failed: %1 Грешка при създаване на директорията: %1 Removing directory failed: %1 Грешка при премахване на директорията: %1 Not connected Няма връзка Connection refused for data connection Връзката за данни бе отказана QHostInfo Unknown error Неизвестна грешка QHostInfoAgent Host not found Хостът не бе намерен Unknown address type Неизвестен тип адрес Unknown error Неизвестна грешка QHttp Connection refused Връзката бе отказана Host %1 not found Хостът %1 не бе намерен Wrong content length Неправилна дължина на съдържанието HTTPS connection requested but SSL support not compiled in Заявена бе HTTPS връзка, но поддръжката на SSL не е компилирана HTTP request failed HTTP-заявката е неуспешна Host %1 found Хостът %1 е намерен Host found Хостът е намерен Connected to host %1 Установена е връзка с хост %1 Connected to host Установена е връзка с хоста Connection to %1 closed Връзката с %1 бе затворена Connection closed Връзката е затворена Unknown error Неизвестна грешка Request aborted Заявката е прекъсната No server set to connect to Не е зададен сървър, към който да се се инициира връзка Server closed connection unexpectedly Неочаквано прекъсване на връзката от страна на сървъра Invalid HTTP response header Невалидна заглавна част на HTTP отговора Unknown authentication method Неизвестен метод на удостоверяване Invalid HTTP chunked body Невалиден HTTP отговор Error writing response to device Грешка при запис на отговора върху устройството Proxy authentication required Изисква удостоверяване в прокси сървъра Authentication required Изисква се удостоверяване Connection refused (or timed out) Връзката бе отказана (или времето за връзка е изтекло) Proxy requires authentication Прокси сървърът изисква удостоверяване Host requires authentication Хостът изисква удостоверяване Data corrupted Повредени данни Unknown protocol specified Зададен е неизвестен протокол SSL handshake failed SSL handshake операцията е неуспешна QHttpSocketEngine Did not receive HTTP response from proxy Не получен HTTP отговор от прокси сървъра Error parsing authentication request from proxy Грешка в синтактичния разбор на заявката за удостоверяване от прокси сървъра Authentication required Изисква се удостоверяване Proxy denied connection Прокси сървърът отказа връзката Error communicating with HTTP proxy Грешка в комуникацията с HTTP прокси сървъра Proxy server not found Прокси сървърът не бе открит Proxy connection refused Прокси сървърът отхвърли връзката Proxy server connection timed out Изтекло време на връзката с прокси сървъра Proxy connection closed prematurely Прокси сървърът преждевременно затвори връзката QIBaseDriver Error opening database Грешка при отваряне на базата данни Could not start transaction Невъзможно е започването на транзакция Unable to commit transaction Невъзможно е изпълнението на транзакцията Unable to rollback transaction Невъзможно е връщането на транзакцията QIBaseResult Unable to create BLOB Unable to write BLOB Unable to open BLOB Unable to read BLOB Could not find array Could not get array data Could not get query info Невъзможно е да се извлече информация за заявката Could not start transaction Невъзможно е започването на транзакция Unable to commit transaction Невъзможно е изпълнението на транзакцията Could not allocate statement Could not prepare statement Невъзможно е да се приготви заявката Could not describe input statement Could not describe statement Unable to close statement Невъзможно е да се затвори заявката Unable to execute query Невъзможно е да се изпълни заявката Could not fetch next item Could not get statement info Невъзможно е да се извлече информация за заявката QIODevice Permission denied Отказан достъп Too many open files Твърде много отворени файлове No such file or directory Няма такъв файл или директория No space left on device Няма място на устройството Unknown error Неизвестна грешка QInputContext XIM XIM XIM input method XIM метод на въвеждане Windows input method Windows метод на въвеждане Mac OS X input method Mac OS X метод на въвеждане QInputDialog Enter a value: Въведете стойност: QLibrary Could not mmap '%1': %2 Plugin verification data mismatch in '%1' Could not unmap '%1': %2 The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" Unknown error Неизвестна грешка The shared library was not found. The file '%1' is not a valid Qt plugin. The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) Cannot load library %1: %2 Cannot unload library %1: %2 Cannot resolve symbol "%1" in %2: %3 QLineEdit &Undo &Отмяна &Redo &Възстановяване Cu&t &Изрязване &Copy &Копиране &Paste &Поставяне Select All Избор на всички Delete Изтриване QLocalServer %1: Name error %1: Грешно име %1: Permission denied %1: Отказан достъп %1: Address in use %1: Адресът вече се използва %1: Unknown error %2 %1: Неизвестна грешка %2 QLocalSocket %1: Connection refused %1: Отказана връзка %1: Remote closed %1: Отдалечено затваряне %1: Invalid name %1: Невалидно име %1: Socket access error %1: Грешка при достъпа на сокета %1: Socket resource error %1: Грешка в ресурса на сокета %1: Socket operation timed out %1: Изтекло време на сокет операцията %1: Datagram too large %1: Дейтаграмата е твърде голяма %1: Connection error %1: Грешка при свързване %1: The socket operation is not supported %1: Операцията със сокета не се поддържа %1: Unknown error %1: Неизвестна грешка %1: Unknown error %2 %1: Неизвестна грешка %2 QMYSQLDriver Unable to open database ' Невъзможно е да се отвори базата данни ' Unable to connect Невъзможно е да се установи връзка Unable to begin transaction Невъзможно е започването на транзакция Unable to commit transaction Невъзможно е изпълнението на транзакцията Unable to rollback transaction Невъзможно е връщането на транзакцията QMYSQLResult Unable to fetch data Невъзможно е да се извлекат данни Unable to execute query Невъзможно е да се изпълни заявката Unable to store result Невъзможно е да се съхранят резултатите Unable to prepare statement Невъзможно е да се приготви заявката Unable to reset statement Невъзможно е да се нулира заявката Unable to bind value Невъзможно е да се свърже стойността Unable to execute statement Невъзможно е да се изпълни заявката Unable to bind outvalues Невъзможно е да се свържат стойностите Unable to store statement results Невъзможно е да се съхранят резултатите от заявката Unable to execute next query Невъзможно е да се изпълни следващата заявка Unable to store next result Невъзможно е да се съхранят следващите резултати QMdiArea (Untitled) (неозаглавен) QMdiSubWindow %1 - [%2] %1 - [%2] Close Затваряне Minimize Минимизиране Restore Down Възстановяване надолу &Restore &Възстановяване &Move &Преместване &Size &Размер Mi&nimize Ми&нимизиране Ma&ximize Ма&ксимизиране Stay on &Top Винаги &отгоре &Close &Затваряне - [%1] - [%1] Maximize Максимизиране Unshade От сянка Shade В сянка Restore Възстановяване Help Помощ Menu Меню QMenu Close Затваряне Open Отваряне Execute Изпълнение QMenuBar About За програмата Config Конфигурация Preference Настройки Options Параметри Setting Настройки Setup Настройки Quit Изход Exit Изход QMessageBox OK ОК About Qt За Qt Help Помощ Show Details... Показване на подробности... Hide Details... Скриване на подробности... <h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p> <h3>За Qt</h3><p>Тази програма ползва Qt версия %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p> QMultiInputContext Select IM Избор QMultiInputContextPlugin Multiple input method switcher Multiple input method switcher that uses the context menu of the text widgets QNativeSocketEngine The remote host closed the connection Network operation timed out Out of resources Unsupported socket operation Сокет операцията не се поддържа Protocol type not supported Invalid socket descriptor Network unreachable Permission denied Connection timed out Connection refused Връзката бе отказана The bound address is already in use The address is not available The address is protected Unable to send a message Unable to receive a message Unable to write Network error Another socket is already listening on the same port Unable to initialize non-blocking socket Unable to initialize broadcast socket Attempt to use IPv6 socket on a platform with no IPv6 support Host unreachable Datagram was too large to send Operation on non-socket Unknown error Неизвестна грешка The proxy type is invalid for this operation QNetworkAccessCacheBackend Error opening %1 Грешка при отваряне на %1 QNetworkAccessFileBackend Request for opening non-local file %1 Заявка за отваряне на файла %1, който не е локален Error opening %1: %2 Грешка при отваряне на %1: %2 Write error writing to %1: %2 Грешка при запис на %1: %2 Cannot open %1: Path is a directory Невъзможно е да се отвори %1: Пътят е към директория Read error reading from %1: %2 Грешка при четене на %1: %2 QNetworkAccessFtpBackend No suitable proxy found Не е намерен подходящ прокси сървър Cannot open %1: is a directory Невъзможно е да се отвори %1: е директория Logging in to %1 failed: authentication required Влизането в %1 е неуспешно: изисква се удостоверяване Error while downloading %1: %2 Грешка при изтегляне на %1: %2 Error while uploading %1: %2 Грешка при качване на %1: %2 QNetworkAccessHttpBackend No suitable proxy found Не е намерен подходящ прокси сървър QNetworkReply Error downloading %1 - server replied: %2 Грешка при изтегляне на %1 - сървъра отговори: %2 Protocol "%1" is unknown Протоколът "%1" е неизвестен QNetworkReplyImpl Operation canceled Операцията е отменена QOCIDriver Unable to logon Невъзможно е да се влезе Unable to initialize QOCIDriver Невъзможно е да се извърши инициализация Unable to begin transaction Невъзможно е започването на транзакция Unable to commit transaction Невъзможно е изпълнението на транзакцията Unable to rollback transaction Невъзможно е връщането на транзакцията QOCIResult Unable to bind column for batch execute Невъзможно е да се свърже колона за изпълнение на набора Unable to execute batch statement Невъзможно е да се изпълни набора от заявки Unable to goto next Невъзможно е да се премине към следващия Unable to alloc statement Невъзможно е да се разпредели заявката Unable to prepare statement Невъзможно е да се приготви заявката Unable to bind value Невъзможно е да се свърже стойността Unable to execute statement Невъзможно е да се изпълни заявката QODBCDriver Unable to connect Невъзможно е да се установи връзка Unable to connect - Driver doesn't support all needed functionality Невъзможно е да се установи връзка - Драйверът не поддържа необходимата функционалност Unable to disable autocommit Невъзможно е да се преустанови autocommit Unable to commit transaction Невъзможно е изпълнението на транзакцията Unable to rollback transaction Невъзможно е връщането на транзакцията Unable to enable autocommit Невъзможно е да се установи autocommit QODBCResult QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult::reset:Невъзможно е да се установи 'SQL_CURSOR_STATIC' като атрибут на заявката. Моля проверете настройките на ODBC драйвера Unable to execute statement Невъзможно е да се изпълни заявката Unable to fetch next Невъзможно е да се извлече следващия Unable to prepare statement Невъзможно е да се приготви заявката Unable to bind variable Невъзможно е да се свърже параметъра Unable to fetch last Невъзможно е да се извлече последния Unable to fetch Невъзможно е да се извлече Unable to fetch first Невъзможно е да се извлече първия Unable to fetch previous Невъзможно е да се извлече предходния QObject Home Домашен Operation not supported on %1 Операцията не се поддържа %1 Invalid URI: %1 Невалиден URI: %1 Write error writing to %1: %2 Грешка при запис на %1: %2 Read error reading from %1: %2 Грешка при четене на %1: %2 Socket error on %1: %2 Грешка в сокета %1: %2 Remote host closed the connection prematurely on %1 Отдалеченият хост преждевременно затвори връзката в %1 Protocol error: packet of size 0 received Протоколна грешка: полученият пакет е с дължина 0 No host name given Не е зададено име на хост QPPDOptionsModel Name Име Value Стойност QPSQLDriver Unable to connect Невъзможно е да се установи връзка Could not begin transaction Невъзможно е започването на транзакция Could not commit transaction Невъзможно е изпълнението на транзакцията Could not rollback transaction Невъзможно е връщането на транзакцията Unable to subscribe Абонаментът е невъзможен Unable to unsubscribe Отказът от абонамент е невъзможен QPSQLResult Unable to create query Невъзможно е да се създаде заявката Unable to prepare statement Невъзможно е да се приготви заявката QPageSetupWidget Centimeters (cm) сантиметри (см) Millimeters (mm) милиметри (мм) Inches (in) инчове (инч) Points (pt) Пунктове (pt) Form Paper Хартия Page size: Размер на страницата: Width: Ширина: Height: Височина: Paper source: Източник на хартия: Orientation Ориентация Portrait Портрет Landscape Изглед Reverse landscape Обърнат изглед Reverse portrait Обърнат портрет Margins полета top margin горно поле left margin ляво поле right margin дясно поле bottom margin долно поле QPluginLoader Unknown error Неизвестна грешка The plugin was not loaded. Добавката не бе заредена. QPrintDialog locally connected локален Aliases: %1 Псевдоними: %1 unknown неизвестен OK ОК Cancel Отменяне Print in color if available Цветен печат Printer Принтер Print all Отпечатване на всички Print range Отпечатване на диапазон Print last page first Да започва с последната страница Number of copies: Брой копия: Paper format Формат бумаги Portrait Портрет Landscape Албум A0 (841 x 1189 mm) A0 (841 x 1189 мм) A1 (594 x 841 mm) A1 (594 x 841 мм) A2 (420 x 594 mm) A2 (420 x 594 мм) A3 (297 x 420 mm) A3 (297 x 420 мм) A5 (148 x 210 mm) A5 (148 x 210 мм) A6 (105 x 148 mm) A6 (105 x 148 мм) A7 (74 x 105 mm) A7 (74 x 105 мм) A8 (52 x 74 mm) A8 (52 x 74 мм) A9 (37 x 52 mm) A9 (37 x 52 мм) B0 (1000 x 1414 mm) B0 (1000 x 1414 мм) B1 (707 x 1000 mm) B1 (707 x 1000 мм) B2 (500 x 707 mm) B2 (500 x 707 мм) B3 (353 x 500 mm) B3 (353 x 500 мм) B4 (250 x 353 mm) B4 (250 x 353 мм) B6 (125 x 176 mm) B6 (125 x 176 мм) B7 (88 x 125 mm) B7 (88 x 125 мм) B8 (62 x 88 mm) B8 (62 x 88 мм) B9 (44 x 62 mm) B9 (44 x 62 мм) B10 (31 x 44 mm) B10 (31 x 44 мм) C5E (163 x 229 mm) C5E (163 x 229 мм) DLE (110 x 220 mm) DLE (110 x 220 мм) Folio (210 x 330 mm) Folio (210 x 330 мм) Ledger (432 x 279 mm) Ledger (432 x 279 мм) Tabloid (279 x 432 mm) Tabloid (279 x 432 мм) US Common #10 Envelope (105 x 241 mm) Плик #10 (105x241 мм) A4 (210 x 297 mm, 8.26 x 11.7 inches) A4 (210 x 297 мм, 8.26 x 11.7 инчове) B5 (176 x 250 mm, 6.93 x 9.84 inches) B5 (176 x 250 мм, 6.93 x 9.84 инчове) Executive (7.5 x 10 inches, 191 x 254 mm) Executive (7.5 x 10 инчове, 191 x 254 мм) Legal (8.5 x 14 inches, 216 x 356 mm) Legal (8.5 x 14 инчове, 216 x 356 мм) Letter (8.5 x 11 inches, 216 x 279 mm) Letter (8.5 x 11 инчове, 216 x 279 мм) Print Отпечатване File Файл Print To File ... Отпечатване във файл ... File %1 is not writable. Please choose a different file name. Файлът %1 не е достъпен за запис. Моля изберете друго име на файла. %1 already exists. Do you want to overwrite it? %1 вече съществува. Желаете ли да бъде презаписан(а)? File exists Файлът съществува <qt>Do you want to overwrite it?</qt> <qt>Желаете ли да се презапише?</qt> Print selection Отпечатване на избраното %1 is a directory. Please choose a different file name. %1 е директория. Моля изберете друго име на файла. A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 C5E DLE Executive Executive Folio Folio Ledger Ledger Legal Legal Letter Letter Tabloid Tabloid US Common #10 Envelope Плик #10 Custom Собствен &Options >> &Възможности >> &Print От&печатване &Options << << &Възможности Print to File (PDF) Отпечатване във файл (PDF) Print to File (Postscript) Отпечатване във файл (Postscript) Local file Локален файл Write %1 file Запис на файла %1 The 'From' value cannot be greater than the 'To' value. Стойността за 'От', не може да е по-голяма от тази на 'До'. QPrintPreviewDialog Page Setup Настройване на страницата %1% Print Preview Предварителен преглед Next page Следваща страница Previous page Предходна страница First page Първа страница Last page Последна страница Fit width Да се събира по ширина Fit page Да се събира страницата Zoom in Приближаване Zoom out Отдалечаване Portrait Портрет Landscape Изглед Show single page Да се показва една страница Show facing pages Да се показва преглед на лицевите страници Show overview of all pages Да се показва преглед на всички страници Print Отпечатване Page setup Настройване на страницата Close Затваряне Export to PDF Експортиране към (PDF) Export to PostScript Експортиране към (PostScript) QPrintPropertiesDialog Save Запис OK OK QPrintPropertiesWidget Form Page Страница Advanced Разширени QPrintSettingsOutput Form Copies копия Print range Отпечатване на диапазон Print all Отпечатване на всички Pages from Страници от to до Selection Избрани Output Settings Настройки на изхода Copies: Копия: Collate Подреждане Reverse Обръщане Options Възможности Color Mode Цветен режим Color Цветно Grayscale Нюанси на сиво Duplex Printing Дуплексно отпечатване None Без Long side Дълга страна Short side Къса страна QPrintWidget Form Printer Принтер &Name: &Име: P&roperties С&войства Location: Местоположение: Preview Предварителен преглед Type: Тип: Output &file: Изходен &файл: ... ... QProcess Could not open input redirection for reading Could not open output redirection for writing Resource error (fork failure): %1 Process operation timed out Error reading from process Error writing to process Process crashed No program defined Process failed to start QProgressDialog Cancel Отказ QPushButton Open Отваряне QRadioButton Check Слагане на отметка QRegExp no error occurred не бяха открити грешки disabled feature used опит за използване на изключена характеристика bad char class syntax bad char class syntax bad lookahead syntax bad lookahead syntax bad repetition syntax bad repetition syntax invalid octal value невалидна осмична стойност missing left delim липсващ ляв разделител unexpected end неочакван край met internal limit достигнато е вътрешно ограничение QSQLite2Driver Error to open database Грешка при отваряне на базата данни Unable to begin transaction Невъзможно е започването на транзакция Unable to commit transaction Невъзможно е изпълнението на транзакцията Unable to rollback Transaction Невъзможно е връщането на транзакцията QSQLite2Result Unable to fetch results Невъзможно е да се извлекат резултати Unable to execute statement Невъзможно е да се изпълни заявката QSQLiteDriver Error opening database Грешка при отваряне на базата данни Error closing database Грешка при затваряне на базата данни Unable to begin transaction Невъзможно е започването на транзакция Unable to commit transaction Невъзможно е изпълнението на транзакцията Unable to rollback transaction Невъзможно е връщането на транзакцията QSQLiteResult Unable to fetch row Невъзможно е да се извлече редът Unable to execute statement Невъзможно е да се изпълни заявката Unable to reset statement Невъзможно е да се нулира заявката Unable to bind parameters Невъзможно е да се свържат параметрите Parameter count mismatch Разлика в броя на параметрите No query Липсва заявка QScrollBar Scroll here Предвижване на плъзгача до тук Left edge Ляв ръб Top Горен ръб Right edge Десен ръб Bottom Долен ръб Page left Страница наляво Page up Страница нагоре Page right Страница надясно Page down Страница надолу Scroll left Предвижване на плъзгача в ляво Scroll up Предвижване на плъзгача нагоре Scroll right Предвижване на плъзгача в дясно Scroll down Предвижване на плъзгача надолу Line up Подравняване Position Позиция Line down Ред надолу QSharedMemory %1: unable to set key on lock %1: create size is less then 0 %1: unable to lock %1: unable to unlock %1: permission denied %1: already exists %1: doesn't exists %1: out of resources %1: unknown error %2 %1: key is empty %1: unix key file doesn't exists %1: ftok failed %1: unable to make key %1: system-imposed size restrictions %1: not attached %1: invalid size %1: key error %1: size query failed QShortcut Space Интервал Esc Esc Tab Табулация Backtab Табулация назад Backspace Backspace Return Връщане Enter Enter Ins Ins Del Del Pause Pause Print Print SysReq SysReq Home Домашен End End Left Left Up Up Right Right Down Down PgUp PgUp PgDown PgDown CapsLock CapsLock NumLock NumLock ScrollLock ScrollLock Menu Меню Help Помощ Back Назад Forward Напред Stop Спиране Refresh Обновяване Volume Down Намаляване силата на звука Volume Mute Заглушаване на звука Volume Up Увеличаване силата на звука Bass Boost Bass Boost Bass Up Bass Up Bass Down Bass Down Treble Up Treble Up Treble Down Treble Down Media Play Възпроизвеждане Media Stop Спиране на изпълнението Media Previous Предходно изпълнение Media Next Следващо изпълнение Media Record Запис Favorites Любими Search Търсене Standby Standby Open URL Отваряне на URL Launch Mail Клиент за електронна поща Launch Media Изпълнение на запис Launch (0) Стартиране на (0) Launch (1) Стартиране на (1) Launch (2) Стартиране на (2) Launch (3) Стартиране на (3) Launch (4) Стартиране на (4) Launch (5) Стартиране на (5) Launch (6) Стартиране на (6) Launch (7) Стартиране на (7) Launch (8) Стартиране на (8) Launch (9) Стартиране на (9) Launch (A) Стартиране на (A) Launch (B) Стартиране на (B) Launch (C) Стартиране на (C) Launch (D) Стартиране на (D) Launch (E) Стартиране на (E) Launch (F) Стартиране на (F) Print Screen Print Screen Page Up Page Up Page Down Page Down Caps Lock Caps Lock Num Lock Num Lock Number Lock Number Lock Scroll Lock Scroll Lock Insert Вмъкване Delete Изтриване Escape Escape System Request System Request Select Избор Yes Да No Не Context1 Контекст1 Context2 Контекст2 Context3 Контекст3 Context4 Контекст4 Call Прозвъняване Hangup Прекъсване на разговора Flip Ctrl Ctrl Shift Shift Alt Alt Meta Meta + + F%1 F%1 Home Page Home Page QSlider Page left Страница наляво Page up Страница нагоре Position Позиция Page right Страница надясно Page down Страница надолу QSocks5SocketEngine Connection to proxy refused Connection to proxy closed prematurely Proxy host not found Connection to proxy timed out Proxy authentication failed Proxy authentication failed: %1 SOCKS version 5 protocol error General SOCKSv5 server failure Connection not allowed by SOCKSv5 server TTL expired SOCKSv5 command not supported Address type not supported Unknown SOCKSv5 proxy error code 0x%1 Network operation timed out QSpinBox More Подробно Less Кратко QSql Delete Изтриване Delete this record? Изтриване на записа? Yes Да No Не Insert Вмъкване Update Актуализиране Save edits? Запис на промените? Cancel Отказ Confirm Потвърждение Cancel your edits? Отказ от промените? QSslSocket Unable to write data: %1 Error while reading: %1 Error during SSL handshake: %1 Error creating SSL context (%1) Invalid or empty cipher list (%1) Error creating SSL session, %1 Error creating SSL session: %1 Cannot provide a certificate with no key, %1 Error loading local certificate, %1 Error loading private key, %1 Private key does not certificate public key, %1 QSystemSemaphore %1: out of resources %1: недостатъчни ресурси %1: permission denied %1: отказан достъп %1: already exists %1: вече съществува %1: does not exist %1: не съществува %1: unknown error %2 %1: неизвестна грешка %2 QTDSDriver Unable to open connection Невъзможно е да се установи връзка Unable to use database Невъзможно е да се използва базата данни QTabBar Scroll Left Предвижване на плъзгача в ляво Scroll Right Предвижване на плъзгача в дясно QTcpServer Operation on socket is not supported Операции със сокети не се поддържат QTextControl &Undo &Отмяна &Redo &Възстановяване Cu&t &Изрязване &Copy &Копиране Copy &Link Location Копиране &адреса връзката &Paste &Поставяне Delete Изтриване Select All Избор на всички QToolButton Press Натискане Open Отваряне QUdpSocket This platform does not support IPv6 Тази платформа не поддържа IPv6 QUndoGroup Undo Отмяна Redo Възстановяване QUndoModel <empty> <празно> QUndoStack Undo Отмяна Redo Възстановяване QUnicodeControlCharacterMenu LRM Left-to-right mark RLM Right-to-left mark ZWJ Zero width joiner ZWNJ Zero width non-joiner ZWSP Zero width space LRE Start of left-to-right embedding RLE Start of right-to-left embedding LRO Start of left-to-right override RLO Start of right-to-left override PDF Pop directional formatting Insert Unicode control character QWebFrame Request cancelled Заявката е отменена Request blocked Заявката е блокирана Cannot show URL (URL) не може да бъде показан Frame load interruped by policy change Зареждането на рамката е прекъснато поради промяна на политиката Cannot show mimetype MimeType не може да бъде показан File does not exist Файлът не съществува QWebPage Bad HTTP request Лоша HTTP заявка Submit default label for Submit buttons in forms on web pages Предаване Submit Submit (input element) alt text for <input> elements with no alt, title, or value Предаване Reset default label for Reset buttons in forms on web pages Нулиране This is a searchable index. Enter search keywords: text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' Това е индекс, в който може да се търси. Въведете ключова дума за търсене: Choose File title for file button used in HTML forms Избиране на файл No file selected text to display in file button used in HTML forms when no file is selected Не е избран файл Open in New Window Open in New Window context menu item Отваряне в нов прозорец Save Link... Download Linked File context menu item Запис на препратката... Copy Link Copy Link context menu item Копиране препратката Open Image Open Image in New Window context menu item Отваряне на изображението Save Image Download Image context menu item Запис на изображението Copy Image Copy Link context menu item Копиране на изображението Open Frame Open Frame in New Window context menu item Отваряне на рамката Copy Copy context menu item Копиране Go Back Back context menu item Назад Go Forward Forward context menu item Напред Stop Stop context menu item Спиране Reload Reload context menu item Презареждане Cut Cut context menu item Изрязване Paste Paste context menu item Поставяне No Guesses Found No Guesses Found context menu item Не са намерени предложения Ignore Ignore Spelling context menu item Игнориране Add To Dictionary Learn Spelling context menu item Добавяне в речника Search The Web Search The Web context menu item Търсене в Интернет Look Up In Dictionary Look Up in Dictionary context menu item Добавяне в речника Open Link Open Link context menu item Отваряне на препратката Ignore Ignore Grammar context menu item Игнориране Spelling Spelling and Grammar context sub-menu item Правопис Show Spelling and Grammar menu item title Да се показват правописа и граматиката Hide Spelling and Grammar menu item title Да не се показват правописа и граматиката Check Spelling Check spelling context menu item Проверка на правописа Check Spelling While Typing Check spelling while typing context menu item Проверка на правописа при писане Check Grammar With Spelling Check grammar with spelling context menu item Да се проверява и граматика заедно с правописа Fonts Font context sub-menu item Шрифтове Bold Bold context menu item Получер Italic Italic context menu item Курсив Underline Underline context menu item Подчертаване Outline Outline context menu item Очертание Direction Writing direction context sub-menu item Посока Text Direction Text direction context sub-menu item Посока на текста Default Default writing direction context menu item Подразбиращ се LTR Left to Right context menu item LTR RTL Right to Left context menu item RTL Inspect Inspect Element context menu item Изследване No recent searches Label for only item in menu that appears when clicking on the search field image, when no searches have been performed Няма последни търсения Recent searches label for first item in the menu that appears when clicking on the search field image, used as embedded menu title Последни търсения Clear recent searches menu item in Recent Searches menu that empties menu's contents Изчистване на последните търсения Unknown Unknown filesize FTP directory listing item Неизвестен %1 (%2x%3 pixels) Title string for images %1 (%2x%3 пиксела) Web Inspector - %2 Web Inspector - %2 Scroll here Предвижване на плъзгача до тук Left edge Ляв ръб Top Горен ръб Right edge Десен ръб Bottom Долен ръб Page left Страница наляво Page up Страница нагоре Page right Страница надясно Page down Страница надолу Scroll left Предвижване на плъзгача в ляво Scroll up Предвижване на плъзгача нагоре Scroll right Предвижване на плъзгача в дясно Scroll down Предвижване на плъзгача надолу %n file(s) number of chosen file %n файл %n файлове JavaScript Alert - %1 JavaScript Alert - %1 JavaScript Confirm - %1 JavaScript Confirm - %1 JavaScript Prompt - %1 JavaScript Prompt - %1 Move the cursor to the next character Преместване на курсора до следващия символ Move the cursor to the previous character Преместване на курсора до предходния символ Move the cursor to the next word Преместване на курсора до следващата дума Move the cursor to the previous word Преместване на курсора до предходната дума Move the cursor to the next line Преместване на курсора до следващия ред Move the cursor to the previous line Преместване на курсора до предходния ред Move the cursor to the start of the line Преместване на курсора до началото на реда Move the cursor to the end of the line Преместване на курсора до края на реда Move the cursor to the start of the block Преместване на курсора до началото на блока Move the cursor to the end of the block Преместване на курсора до края на блока Move the cursor to the start of the document Преместване на курсора до началото на документа Move the cursor to the end of the document Преместване на курсора до края на документа Select all Избор на всички Select to the next character Избиране до следващия символ Select to the previous character Избиране до предходния символ Select to the next word Избиране до следващата дума Select to the previous word Избиране до предходната дума Select to the next line Избиране до следващия ред Select to the previous line Избиране до предходния ред Select to the start of the line Избиране до началото на реда Select to the end of the line Избиране до края на реда Select to the start of the block Избиране до началото на блока Select to the end of the block Избиране до края на блока Select to the start of the document Избиране до началото на документа Select to the end of the document Избиране до края на документа Delete to the start of the word Изтриване до началото на думата Delete to the end of the word Изтриване до края на думата Insert a new paragraph Вмъкване на нов абзац Insert a new line Вмъкване на нов ред QWhatsThisAction What's This? Какво е това? QWidget * * QWizard < &Back < &Назад &Finish &Приключване &Help &Помощ Go Back Назад Continue Продължаване Commit Поверяване Done Завършено Quit Изход Help Помощ Cancel Отказ &Next &Напред &Next > &Напред > QWorkspace &Restore &Възстановяване &Move &Преместване &Size &Размер Mi&nimize Ми&нимизиране Ma&ximize Ма&ксимизиране &Close &Затваряне Stay on &Top Винаги &отгоре Sh&ade В с&янка %1 - [%2] %1 - [%2] Minimize Минимизиране Restore Down Възстановяване надолу Close Затваряне &Unshade От с&янка QXml no error occurred не бяха открити грешки error triggered by consumer грешка инициирана от потребителя unexpected end of file неочакван край на файла more than one document type definition повече от един тип на документа error occurred while parsing element възникна грешка при синтактичния разбор на елемента tag mismatch несъответствие на таговете error occurred while parsing content възникна грешка при синтактичния разбор на съдържанието unexpected character неочакван символ invalid name for processing instruction невалидно име на инструкцията за обработка version expected while reading the XML declaration очаква се параметър version при четене на XML декларацията wrong value for standalone declaration неправилна стойност на standalone декларацията encoding declaration or standalone declaration expected while reading the XML declaration очаква се параметър encoding или standalone при четене на XML декларацията standalone declaration expected while reading the XML declaration очаква се параметър standalone при четене на XML декларацията error occurred while parsing document type definition възникна грешка при синтактичния разбор на дефиницията за тип на документа letter is expected очаква се буква error occurred while parsing comment възникна грешка при синтактичния разбор на коментара error occurred while parsing reference възникна грешка при синтактичния разбор на препратката internal general entity reference not allowed in DTD internal general entity reference not allowed in DTD external parsed general entity reference not allowed in attribute value external parsed general entity reference not allowed in attribute value external parsed general entity reference not allowed in DTD external parsed general entity reference not allowed in DTD unparsed entity reference in wrong context unparsed entity reference in wrong context recursive entities рекурсивни обекти error in the text declaration of an external entity error in the text declaration of an external entity QXmlStream Extra content at end of document. Invalid entity value. Invalid XML character. Sequence ']]>' not allowed in content. Namespace prefix '%1' not declared Attribute redefined. Unexpected character '%1' in public id literal. Invalid XML version string. Unsupported XML version. %1 is an invalid encoding name. Encoding %1 is unsupported Standalone accepts only yes or no. Invalid attribute in XML declaration. Premature end of document. Invalid document. Expected , but got ' Unexpected ' Expected character data. Recursive entity detected. Start tag expected. XML declaration not at start of document. NDATA in parameter entity declaration. %1 is an invalid processing instruction name. Invalid processing instruction name. Illegal namespace declaration. Invalid XML name. Opening and ending tag mismatch. Reference to unparsed entity '%1'. Entity '%1' not declared. Reference to external entity '%1' in attribute value. Invalid character reference. Encountered incorrectly encoded content. The standalone pseudo attribute must appear after the encoding. %1 is an invalid PUBLIC identifier. QtXmlPatterns An %1-attribute with value %2 has already been declared. An %1-attribute must have a valid %2 as value, which %3 isn't. Network timeout. Element %1 can't be serialized because it appears outside the document element. Attribute %1 can't be serialized because it appears at the top level. Year %1 is invalid because it begins with %2. Day %1 is outside the range %2..%3. Month %1 is outside the range %2..%3. Overflow: Can't represent date %1. Day %1 is invalid for month %2. Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; Time %1:%2:%3.%4 is invalid. Overflow: Date can't be represented. At least one component must be present. At least one time component must appear after the %1-delimiter. No operand in an integer division, %1, can be %2. The first operand in an integer division, %1, cannot be infinity (%2). The second operand in a division, %1, cannot be zero (%2). %1 is not a valid value of type %2. When casting to %1 from %2, the source value cannot be %3. Integer division (%1) by zero (%2) is undefined. Division (%1) by zero (%2) is undefined. Modulus division (%1) by zero (%2) is undefined. Dividing a value of type %1 by %2 (not-a-number) is not allowed. Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. A value of type %1 cannot have an Effective Boolean Value. Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. Value %1 of type %2 exceeds maximum (%3). Value %1 of type %2 is below minimum (%3). A value of type %1 must contain an even number of digits. The value %2 does not. %1 is not valid as a value of type %2. Operator %1 cannot be used on type %2. Operator %1 cannot be used on atomic values of type %2 and %3. The namespace URI in the name for a computed attribute cannot be %1. The name for a computed attribute cannot have the namespace URI %1 with the local name %2. Type error in cast, expected %1, received %2. When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. No casting is possible with %1 as the target type. It is not possible to cast from %1 to %2. Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. It's not possible to cast the value %1 of type %2 to %3 Failure when casting from %1 to %2: %3 A comment cannot contain %1 A comment cannot end with a %1. No comparisons can be done involving the type %1. Operator %1 is not available between atomic values of type %2 and %3. An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. A library module cannot be evaluated directly. It must be imported from a main module. No template by name %1 exists. A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. A positional predicate must evaluate to a single numeric value. The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. The data of a processing instruction cannot contain the string %1 No namespace binding exists for the prefix %1 No namespace binding exists for the prefix %1 in %2 %1 is an invalid %2 %1 takes at most %n argument(s). %2 is therefore invalid. %1 requires at least %n argument(s). %2 is therefore invalid. The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. %1 is not a valid XML 1.0 character. The first argument to %1 cannot be of type %2. If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. %1 was called. %1 must be followed by %2 or %3, not at the end of the replacement string. In the replacement string, %1 must be followed by at least one digit when not escaped. In the replacement string, %1 can only be used to escape itself or %2, not %3 %1 matches newline characters %1 and %2 match the start and end of a line. Matches are case insensitive Whitespace characters are removed, except when they appear in character classes %1 is an invalid regular expression pattern: %2 %1 is an invalid flag for regular expressions. Valid flags are: If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. It will not be possible to retrieve %1. The root node of the second argument to function %1 must be a document node. %2 is not a document node. The default collection is undefined %1 cannot be retrieved The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). A zone offset must be in the range %1..%2 inclusive. %3 is out of range. %1 is not a whole number of minutes. Required cardinality is %1; got cardinality %2. The item %1 did not match the required type %2. %1 is an unknown schema type. Only one %1 declaration can occur in the query prolog. The initialization of variable %1 depends on itself No variable by name %1 exists The variable %1 is unused Version %1 is not supported. The supported XQuery version is 1.0. The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. No function with signature %1 is available A default namespace declaration must occur before function, variable, and option declarations. Namespace declarations must occur before function, variable, and option declarations. Module imports must occur before function, variable, and option declarations. It is not possible to redeclare prefix %1. Prefix %1 is already declared in the prolog. The name of an option must have a prefix. There is no default namespace for options. The Schema Import feature is not supported, and therefore %1 declarations cannot occur. The target namespace of a %1 cannot be empty. The module import feature is not supported No value is available for the external variable by name %1. A construct was encountered which only is allowed in XQuery. A template by name %1 has already been declared. The keyword %1 cannot occur with any other mode name. The value of attribute %1 must of type %2, which %3 isn't. The prefix %1 can not be bound. By default, it is already bound to the namespace %2. A variable by name %1 has already been declared. A stylesheet function must have a prefixed name. The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 A function already exists with the signature %1. No external functions are supported. All supported functions can be used directly, without first declaring them as external An argument by name %1 has already been declared. Every argument name must be unique. When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. In an XSL-T pattern, function %1 cannot have a third argument. In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. %1 is an invalid template mode name. The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. None of the pragma expressions are supported. Therefore, a fallback expression must be present Each name of a template parameter must be unique; %1 is duplicated. The %1-axis is unsupported in XQuery %1 is not a valid name for a processing-instruction. %1 is not a valid numeric literal. No function by name %1 is available. The namespace URI cannot be the empty string when binding to a prefix, %1. %1 is an invalid namespace URI. It is not possible to bind to the prefix %1 Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). Two namespace declaration attributes have the same name: %1. The namespace URI must be a constant and cannot use enclosed expressions. An attribute by name %1 has already appeared on this element. A direct element constructor is not well-formed. %1 is ended with %2. The name %1 does not refer to any schema type. %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. %1 is not an atomic type. Casting is only possible to atomic types. %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. The name of an extension expression must be in a namespace. empty zero or one exactly one one or more zero or more Required type is %1, but %2 was found. Promoting %1 to %2 may cause loss of precision. The focus is undefined. It's not possible to add attributes after any other kind of node. An attribute by name %1 has already been created. Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. %1 is an unsupported encoding. %1 contains octets which are disallowed in the requested encoding %2. The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. Ambiguous rule match. In a namespace constructor, the value for a namespace cannot be an empty string. The prefix must be a valid %1, which %2 is not. The prefix %1 cannot be bound. Only the prefix %1 can be bound to %2 and vice versa. Circularity detected The parameter %1 is required, but no corresponding %2 is supplied. The parameter %1 is passed, but no corresponding %2 exists. The URI cannot have a fragment Element %1 is not allowed at this location. Text nodes are not allowed at this location. Parse error: %1 The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. Running an XSL-T 1.0 stylesheet with a 2.0 processor. Unknown XSL-T attribute %1. Attribute %1 and %2 are mutually exclusive. In a simplified stylesheet module, attribute %1 must be present. If element %1 has no attribute %2, it cannot have attribute %3 or %4. Element %1 must have at least one of the attributes %2 or %3. At least one mode must be specified in the %1-attribute on element %2. Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. The attribute %1 must appear on element %2. The element with local name %1 does not exist in XSL-T. Element %1 must come last. At least one %1-element must occur before %2. Only one %1-element can appear. At least one %1-element must occur inside %2. When attribute %1 is present on %2, a sequence constructor cannot be used. Element %1 must have either a %2-attribute or a sequence constructor. When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. Element %1 cannot have children. Element %1 cannot have a sequence constructor. The attribute %1 cannot appear on %2, when it is a child of %3. A parameter in a function cannot be declared to be a tunnel. This processor is not Schema-aware and therefore %1 cannot be used. Top level stylesheet elements must be in a non-null namespace, which %1 isn't. The value for attribute %1 on element %2 must either be %3 or %4, not %5. Attribute %1 cannot have the value %2. The attribute %1 can only appear on the first %2 element. At least one %1 element must appear as child of %2. VolumeSlider Muted Заглушен Volume: %1% Сила на звука: %1% qutim-0.2.0/languages/bg_BG/sources/histman.ts0000644000175000017500000002771711264561616022746 0ustar euroelessareuroelessar ChooseClientPage WizardPage Магьосник ChooseOrDumpPage WizardPage Магьосник Import history from one more client Импортиране на хронологията от друг клиент Dump history Запис на хронологията ClientConfigPage WizardPage Магьосник Path to profile: Път до профила: ... ... Encoding: Кодировка: Select accounts for each protocol in the list. Изберете сметки за всеки протокол в списъка. Select your Jabber account. Изберете Jabber сметка. DumpHistoryPage WizardPage Магьосник Choose format: Избор на формат: JSON JSON Binary Двоичен Merging history state: Състояние на обединяването на хронологията: Dumping history state: Състояние на записа на хронологията: HistoryManager::ChooseClientPage Client Клиент Choose client which history you want to import to qutIM. Choose client from which you want to import history to qutIM. Изберете клиент, от който да се зареди хронологията в qutIM. HistoryManager::ChooseOrDumpPage What to do next? Dump history or choose next client Вашето следващо действие? It is possible to choose another client for import history or dump history to the disk. Възможностите са: да изберете друг клиент или да експортирате хронологията на диска. HistoryManager::ClientConfigPage Configuration Конфигурация System системен Enter path of your %1 profile file. Въведете път до папката, съдържаща профила %1. Enter path of your %1 profile dir. Въведете път до папката, съдържаща профила %1. If your history encoding differs from the system one, choose the appropriate encoding for history. Ако кодировката на хронологията ви се различава от системната, изберете подходящата кодировка. Select path Избор на път HistoryManager::DumpHistoryPage Dumping Записване Choose appropriate format of history, binary is default qutIM format nowadays. Избор на подходящ формат, по подразбиране е двоичен. Last step. Click 'Dump' to start dumping process. Последна стъпка. Натиснете 'Запис', за да започне процеса на записване. Manager merges history, it make take several minutes. Приставката обединява хронологията, това може да отнеме няколко минути. History has been succesfully imported. Хронологията бе импортирана успешно. HistoryManager::HistoryManagerWindow History manager Управление на хронологията &Dump &Запис HistoryManager::ImportHistoryPage Loading Зареждане %n message(s) have been succesfully loaded to memory. %n съобщение бе успешно заредено в паметта. %n съобщения бяха успешно заредени в паметта. It has taken %n ms. Операцията отне %n мс. Операцията отне %n мс. Manager loads all history to memory, it may take several minutes. Приставката зарежда цялата хронология в паметта, това може да отнеме няколко минути. HistoryManagerPlugin Import history History Manager Импортиране на хронология HistoryManagerWindow Form ImportHistoryPage WizardPage Магьосник qutim-0.2.0/languages/bg_BG/sources/twitter.ts0000644000175000017500000001111111240003554022744 0ustar euroelessareuroelessar LoginForm Form От Username or email: Потребителско име или Email: Password: Парола: Autoconnect on start Автоматично свързване при стартиране twApiWrap Twitter protocol error: Грешка в Twitter протокола: twContactList Friends Приятели Followers Цветя Name: Име: Location: Местонахождение: Description: Описание: Followers count: Брой цветя: Friends count: Брой приятели: Favourites count: Брой фаворити: Statuses count: Брой статуси: Last status text: Съобщение на последния статус: twStatusObject Online На линия Offline Извън линия qutim-0.2.0/languages/bg_BG/sources/jabber.ts0000644000175000017500000065020111272653352022514 0ustar euroelessareuroelessar AcceptAuthDialog Form От Authorize Удостоверяване Deny Отказ Ignore Пренебрегване AddContact Add User Добавяне на потребител Jabber ID: Jabber ID: User information Информация за потребител Name: Име: <no group> <без група> Send authorization request Заявка за удостоверяване Group: Група: Find user Намиране на потребител Add Добавяне Cancel Отказ Author Ruslan Nigmatullin Руслан Нигматуллин Contacts Form Show contact status text in contact list Показване текста на статуса на контакта в списъка Show mood icon in contact list Показване на икони за настроение на контактите Show main activity icon in contact list Показване на икони за основната дейност на контактите Show extended activity icon in contact list Показване на икони за разширената дейност на контактите Show tune icon in contact list Показване на икони за мелодия на контактите Show not authorized icon Показване на икони за "Без удостоверение" Show QIP xStatus in contact list Показване на икони за разширен статус на QIP контактите Show main resource in notifications Показване на основния ресурс в известията Dialog Dialog Диалог Ok ОК Cancel Отказ JabberClient qutIM Local qutIM's name qutIM en Default language bg Online На линия Free for chat Свободен за разговор Away Отсъствам NA Недостъпен съм DND Не ме безпокойте Offline Извън линия JabberSettings Form Default resource: Ресурс по подразбиране: Reconnect after disconnect Повторно свързване при загуба на връзка Don't send request for avatars Да не се изпращат заявки за аватари Listen port for filetransfer: Порт за предаване на файлове: Priority depends on status Приоритетът зависи от статуса Online На линия Free for chat Свободен за разговор Away Отсъства NA Недостъпен DND Не безпокойте Online: На линия: Free for chat: Свободен за разговор: Away: Отсъства: NA: Недостъпен: DND: Не безпокойте: JoinChat Join groupchat Присъединяване към групов разговор Settings Настройки Name Име Conference Конференция Nick Псевдоним Password Парола Auto join Автоматично присъединяване Save Запис Search Търсене Join Присъединяване Close Затваряне History Хронология Request last Заявка за последните messages съобщения Request messages since the datetime Заявка за съобщенията след H:mm:ss Ч:мм:сс Request messages since Заявка за съобщенията след Bookmarks Отметки JoinConferenceFormClass JoinConferenceForm Присъединяване към конференция Host: Хост: conference.jabber.ru conference.jabber.ru Room: Стая: qutim qutim Nickname: Псевдоним: tst_qutim tst_qutim Password: Парола: Join Присъединяване Cancel Отказ LoginForm Registration Регистраране You must enter a valid jid Необходимо е да въведете валиден JID You must enter a password Необходимо е да въведете валидна парола <font color='green'>%1</font> <font color='green'>%1</font> <font color='red'>%1</font> <font color='red'>%1</font> LoginFormClass LoginForm Детайли за вход Password: Парола: Register new account Регистриране на нова сметка Register this account Регистриране на тази сметка JID: JID: Personal Form General Общи E-mail Email Phone Телефон Home Домашен Work Служебен Plugin XMPP XMPP Module-based realization of XMPP Модуларизирана поддръжка на XMPP Jabber Jabber Module-based realization of Jabber protocol Модуларизирана поддръжка на Jabber протокола QObject <font size='2'><b>Status text:</b> %1</font> <font size='2'><b>Текст на статуса:</b> %1</font> <font size='2'><b>Possible client:</b> %1</font> <font size='2'><b>Вероятен клиент:</b> %1</font> <font color='#808080'>%1</font> <font color='#808080'>%1</font> %1 %1 Join groupchat on Присъединяване към групов разговор за Afraid Изплашен Amazed Смаян Amorous Влюбчив Angry Бесен Annoyed Раздразнен Anxious Загрижен Aroused Буден Ashamed Засрамен Bored Отегчен Brave Смел Calm Спокоен Cautious Предпазлив Cold Замръзнал Confident Уверен Confused Объркан Contemplative Замислен Contented Доволен Cranky Раздразнителен Crazy Луд Creative Градивен Curious Любопитен Dejected Обезсърчен Depressed Подтиснат Disappointed Разочарован Disgusted Отвратен Dismayed Поразен Distracted Обезумял Embarrassed Затруднен Envious Завистлив Excited Възбуден Flirtatious Флиртуващ Frustrated Обезсърчен Grateful Признателен Grieving Огорчен Grumpy Нацупен Guilty Виновен Happy Щастлив Hopeful Надяващ се Hot Сексапилен Humbled Скромен Humiliated Унизен Hungry Гладен Hurt Наранен Impressed Впечатлен In awe Благоговеещ In love Влюбен Indignant Възмутен Interested Заинтересован Intoxicated Опиянен Invincible Непобедим Jealous Ревнив Lonely Самотен Lost Изгубен Lucky Късметлия Mean Подъл Moody На настроения Nervous Нервен Neutral Неутрален Offended Засегнат Outraged Жесток Playful Игрив Proud Горд Relaxed Отпуснат Relieved Облекчен Remorseful Разкайващ се Restless Неспокоен Sad Тъжен Sarcastic Саркастичен Satisfied Задоволен Serious Сериозен Shocked Шокиран Shy Срамежлив Sick Болен Sleepy Сънлив Spontaneous Спонтанен Stressed Под напрежение Strong Силен Surprised Учуден Thankful Благодарен Thirsty Жаден Tired Уморен Undefined Неопределен Weak Слаб Worried Разтревожен Unknown Неизвестен Doing chores Домакинска работа buying groceries пазаруващ в бакалията cleaning чистещ cooking готвещ doing maintenance правещ ремонт doing the dishes миещ чинии doing the laundry перящ gardening работещ в градината running an errand изпълняващ поръчки walking the dog разхождащ кучето Drinking Пиене having a beer пиещ бира having coffee пиещ кафе having tea пиещ чай Eating Ядене having a snack хапващ на бързо having breakfast закусващ having dinner вечерящ having lunch обядващ Exercising Упражнения cycling каращ колело dancing танцуващ hiking ходещ пеша jogging на джогинг playing sports спортуващ running бягащ skiing каращ ски swimming плуващ working out трениращ Grooming Поддръжка at the spa в спа центъра brushing teeth миещ зъбите си getting a haircut на фризьор shaving бръснещ се taking a bath вземащ баня taking a shower вземащ душ Having appointment На среща Inactive Неактивен day off в отпуск hanging out простиращ hiding криещ се on vacation на почивка praying молещ се scheduled holiday на планирана почивка sleeping спящ thinking мислещ Relaxing Почивка fishing на риболов gaming играещ going out излизащ partying на купон reading четящ rehearsing репетиращ shopping пазаруващ smoking пушещ socializing създаващ контакти sunbathing правещ слънчеви бани watching TV гледащ ТВ watching a movie гледащ филм Talking Разговор in real life в истинския живот on the phone на телефона on video phone на видеофона Traveling Пътуване commuting редовен транспорт driving шофиращ in a car в кола on a bus в градския транспорт on a plane в самолета on a train във влака on a trip на екскурзия walking вървящ Working Работа coding пишещ код in a meeting на среща studying учащ writing пишещ <font size='2'><i>%1</i></font> <font size='2'><i>%1</i></font> <font size='2'><i>%1:</i> %2</font> <font size='2'><i>%1:</i> %2</font> <font size='2'><b>Authorization:</b> <i>None</i></font> <font size='2'><b>Удостоверение:</b> <i>Няма</i></font> <font size='2'><b>Authorization:</b> <i>To</i></font> <font size='2'><b>Удостоверение:</b> <i>На</i></font> <font size='2'><b>Authorization:</b> <i>From</i></font> <font size='2'><b>Удостоверение:</b> <i>От</i></font> Open File Отваряне на файл All files (*) Всички файлове (*) <font size='2'><b>User went offline at:</b> <i>%1</i></font> <font size='2'><b>Извън линия от:</b> <i>%1</i></font> <font size='2'><i>Listening:</i> %1</font> <font size='2'><i>Слуша:</i> %1</font> %1 seconds %1 секунди %1 second %1 секунда %1 minutes %1 минути 1 minute 1 минута %1 hours %1 часа 1 hour 1 час %1 days %1 дни 1 day 1 ден %1 years %1 години 1 year 1 година <font size='2'><b>User went offline at:</b> <i>%1</i> (with message: <i>%2</i>)</font> <font size='2'><b>Потребителят излезе извън линия в:</b> <i>%1</i> (със съобщение: <i>%2</i>)</font> Mood Настроение Activity Дейност Tune Мелодия RoomConfig Form Apply Прилагане Ok ОК Cancel Отказ RoomParticipant Form Owners Собственици JID JID Administrators Администратори Members Членове Banned Със забрана Reason Причина Apply Прилагане Ok ОК Cancel Отказ SaveWidget Save to bookmarks Запазване в отметки Bookmark name: Име на отметката: Conferene: Конференция: Nick: Псевдоним: Password: Парола: Auto join Автоматично присъединяване Save Запис Cancel Отказ Search Form Server: Сървър: Fetch Вземане Type server and fetch search fields. Въведете сървър за вземане на полетата за търсене. Clear Изчистване Search Търсене Close Затваряне SearchConference Search conference Търсене на конференция SearchService Search service Търсене на услуги SearchTransport Search transport Търсене на транспорти ServiceBrowser jServiceBrowser Разглеждане на услуги Server: Сървър: Close Затваряне Name Име JID JID Join conference Присъединяване към конференция Register Регистрация Search Търсене Execute command Изпълнение на команда Show VCard Показване на VCard Add to roster Добавяне към списъка Add to proxy list Добавяне към списъка с проксита Task Author Автор VCardAvatar <img src='%1' width='%2' height='%3'/> <img src='%1' width='%2' height='%3'/> VCardBirthday Birthday: Роден: %1&nbsp;(<font color='#808080'>wrong date format</font>) %1&nbsp;(<font color='#808080'>сгрешен формат на дата</font>) VCardRecord Site: Страница: Company: Фирма: Department: Отдел: Title: Звание: Role: Позиция: Country: Държава: Region: Област: City: Град: Post code: Пощенски код: Street: Улица: PO Box: П.К.: XmlConsole Form От <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Clear Изчистване XML Input... Въвеждане на XML... Close Затваряне <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> XmlPrompt XML Input XML Вход &Send &Изпращане &Close &Затваряне activityDialogClass Choose your activity Избор на дейност Choose Избиране Cancel Отказ changeResourceClass Change resource/priority Промяна на ресурс/приоритет Resource: Ресурс: Priority: Приоритет: Change Промяна Return Връщане customStatusDialogClass Choose Избиране Cancel Отказ Choose your mood Избор на настроение jAccount Additional Допълнителни Join groupchat Присъединяване към групов разговор Online На линия Offline Извън линия Free for chat Свободен за разговор Away Отсъствам NA Недостъпен DND Не безпокойте Open XML console Отваряне на XML конзола Conferences Конференции Add new contact Добавяне на нов контакт Add new contact on Добавяне на нов контакт към Service browser Разглеждане на услуги Set mood Задаване на настроение Set activity Задаване на дейност Services Услуги Privacy status Личен статус Find users Намиране на потребители View/change personal vCard Преглед/Промяна на моята vCard You must use a valid jid. Please, recreate your jabber account. Необходимо е да използвате валиден JID. Моля, създайте наново Jabber сметката си. You must enter a password in settings. Необходимо е да въведете валидна парола в настройките. Invisible for all Невидим за всички Visible for all Видим за всички Visible only for visible list Видим само за списък "Видими" Invisible only for invisible list Невидим само за списък "Невидими" jAccountSettings Editing %1 Редактиране на %1 Warning Внимание You must enter a password Необходимо е да въведете парола jAccountSettingsClass jAccountSettings Настройки на сметката Account Сметка JID: JID: Password: Парола: OK ОК Apply Прилагане Cancel Отказ Resource: Ресурс: Priority: Приоритет: Set priority depending of the status Задаване приоритетът да зависи от статуса Autoconnect at start Автоматично свързване при стартиране Keep previous session status Запазване на предходния статус на сесията Use this option for servers doesn't support bookmark Тази опция се използва за сървъри, които не поддържат отметки Local bookmark storage Локално хранилище за отметки Connection Връзка Encrypt connection: Шифроване на връзката: Never Никога When available Когато е налично Always Винаги Compress traffic (if possible) Компресиране на трафика (ако е възможно) Host: Хост: Port: Порт: Proxy Прокси Proxy type: Тип прокси: None Без HTTP HTTP SOCKS 5 SOCKS 5 Default По подразбиране Authentication Удостоверяване User name: Потребителско име: Manually set server host and port Ръчно задаване на хоста и порта на сървъра jAddContact <no group> <без група> Services Услуги jAdhoc Finish Приключване Cancel Отказ Previous Предходен Next Следващ Ok ОК Complete Готово jConference %1 is now known as %2 %1 сега се подвизава като %2 %1 has left the room %1 напусна стаята moderator модератор participant участник visitor посетител %2 (%1) has joined the room %1 (%2) влезе в стаята %3 now is %1 and %2 %3 сега е %1 и %2 Unknown error: No description. Неизвестна грешка: Липсва описание. Not authorized: Password required. Липсва удостоверение: Изисква се парола. Forbidden: Access denied, user is banned. Забрана: Отказан достъп на потребителя. Item not found: The room does not exist. Няма намерени резултати: Стаята не съществува. Not allowed: Room creation is restricted. Непозволено: Създаването на стая е ограничено. Not acceptable: Room nicks are locked down. Неприемливо: Псевдонимите на стаите са заключени. Registration required: User is not on the member list. Изисква се регистрация: Потребителят не е в списъка с членове. Conflict: Desired room nickname is in use or registered by another user. Конфликт: Желаният псевдоним на стая или вече се използва или е регистриран от друг потребител. Service unavailable: Maximum number of users has been reached. Услугата недостъпна: Достигнат е максималният брой потребители . <font size='2'><b>Affiliation:</b> %1</font> <font size='2'><b>Affilation:</b> %1</font> <font size='2'><b>Връзки:</b> %1</font> <font size='2'><b>JID:</b> %1</font> <font size='2'><b>JID:</b> %1</font> %1 has set the subject to: %2 %1 зададе тема: %2 Kick Изритване Ban Забрана Visitor Посетител Participant Участник Moderator Модератор Kick message Съобщение при изритване Ban message Съобщение при забрана %3 has joined the room as %1 and %2 %3 влезе в стаята като %1 и %2 Join groupchat on Присъединяване към групов разговор за You have been kicked from Бяхте изритан(а) от with reason: по следната причина: without reason без причина You have been kicked Бяхте изритан(а) You have been banned from Беше ви наложена забрана за You have been banned Беше ви наложена забрана %2 has joined the room as %1 %2 влезе в стаята като %1 %2 has joined the room %2 влезе в стаята %4 (%3) has joined the room as %1 and %2 %4 (%3) влезе в стаята като %1 и %2 %3 (%2) has joined the room as %1 %3 (%2) влезе в стаята като %1 %2 now is %1 %2 сега е %1 %4 (%3) now is %1 and %2 %4 (%3) сега е %1 и %2 %3 (%2) now is %1 %3 (%2) сега е %1 banned със забрана member член owner собственик administrator администратор guest гост Copy JID to clipboard Копиране на JID в клип-борда Add to contact list Добавяне в списъка с контакти Rejoin to conference Повторно присъединяване към конференция Save to bookmarks Запазване в отметки Room configuration Настройване на стаята Room participants Участници в стаята Room configuration: %1 Настройване на стая: %1 Room participants: %1 Участници в стаята: %1 The subject is: %2 Темата е: %2 <font size='2'><b>Role:</b> %1</font> <font size='2'><b>Роля:</b> %1</font> %1 has been kicked %1 бе ритнат %1 has been banned %1 получи забрана Invite to groupchat Показа на групов разговор User %1 invite you to conference %2 with reason "%3" Accept invitation? Потребителят %1 ви кани в конференцията %2 по следната причина "%3" Приемате ли поканата? jFileTransferRequest Save File Запис на файл Form From: От: File name: Име на файла: File size: Размер: Accept Приемане Decline Отхвърляне jFileTransferWidget Form File transfer: %1 Предаване на файла: %1 Waiting... Изчакване... Getting... Получаване... Done... Завършено... Filename: Име на файла: Done: Завършено: Speed: Скорост: File size: Размер: Last time: Изминало време: Remained time: Оставащо време: Status: Статус: Open Отваряне Cancel Отказ Sending... Изпращане... Close Затваряне jJoinChat New conference Нова конференция new chat нов разговор jLayer Jabber General Jabber Общи Contacts Контакти jProtocol en xml:lang bg A stream error occured. The stream has been closed. Възникна грешка в потока. Потокът бе затворен. The incoming stream's version is not supported Версията на входящия поток не се поддържа The stream has been closed (by the server). Потокът бе затворен (от сървъра). The HTTP/SOCKS5 proxy requires authentication. HTTP/SOCKS5 проксито изисква удостоверяване. HTTP/SOCKS5 proxy authentication failed. Неуспешно удостоверяване в HTTP/SOCKS5 проксито. The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. HTTP/SOCKS5 проксито изисква механизъм на удостоверяване, който не се поддържа. An I/O error occured. Възникна входно/изходна грешка. An XML parse error occurred. Грешка в синтактичния разбор на XML. The connection was refused by the server (on the socket level). Връзката бе отказана от сървъра (на ниво сокет). Resolving the server's hostname failed. Неуспешно установяване името (на хоста) на сървъра. Out of memory. Uhoh. Препълнена памет. Ух, Ах. The auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. Механизмите на удостоверяване, които сървъра предлага или не се поддържат, или изобщо не се предлагат такива. The server's certificate could not be verified or the TLS handshake did not complete successfully. Сертификатът на сървъра не може да бъде проверен или "TLS handshake" операцията не е приключила успешно. The server didn't offer TLS while it was set to be required or TLS was not compiled in. Сървърът не предлага поддръжка на TLS, въпреки че е указано да се изисква или липсва поддръжка на TLS при компилация. Negotiating/initializing compression failed. Неуспешно определяне/задаване на компресия. Authentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. Неуспешно удостоверяване. Потребителските име/парола са грешни или сметката не съществува. Използвайте ClientBase::authError(), за да откриете причината. The user (or higher-level protocol) requested a disconnect. Потребителят (или протоколът от по-високо ниво) заявиха прекъсване на връзката. There is no active connection. Липсва активна връзка. Unknown error. It is amazing that you see it... O_o Незнайна грешка. Цяло чудо е, че въобще я виждате... O_o vCard is succesfully saved vCard е записана успешно You were authorized Дадено ви бе удостоверение Sender: %2 <%1> От: %2 <%1> Senders: От: %2 <%1> %2 <%1> Subject: %1 Тема: %1 URL: %1 URL: %1 Unreaded messages: %1 Непрочетени съобщения: %1 Authorization request Заявка за удостоверяване Contacts's authorization was removed Удостоверението на контакта бе премахнато Your authorization was removed Удостоверението ви бе премахнато Services Услуги JID: %1<br/>Idle: %2 JID: %1<br/>Бездейства: %2 JID: %1<br/>The feature requested is not implemented by the recipient or server. JID: %1<br/>Заявената характеристика не се поддържа от ответния сървър. JID: %1<br/>The requesting entity does not possess the required permissions to perform the action. JID: %1<br/>Заявяващият обект не притежава изискваните права за изпълнение на действието. JID: %1<br/>It is unknown StanzaError! Please notify developers.<br/>Error: %2 JID: %1<br/>Това е неизвестна StanzaError! Моля уведомете разработчиците.<br/>Грешка: %2 jPubsubInfo <h3>Mood info:</h3> <h3>Информация за настроението:</h3> Name: %1 Име: %1 Text: %1 Текст: %1 <h3>Activity info:</h3> <h3>Информация за дейността:</h3> General: %1 Обща: %1 Specific: %1 Конкретна: %1 <h3>Tune info:</h3> <h3>Информация за мелодията:</h3> Artist: %1 Изпълнител: %1 Title: %1 Заглавие: %1 Source: %1 Източник: %1 Track: %1 Песен: %1 Uri: <a href="%1">link</a> Uri: <a href="%1">връзка</a> Length: %1 Дължина: %1 Rating: %1 Рейтинг: %1 jPubsubInfoClass Pubsub info Информация Close Затваряне jRoster Rename contact Преименуване на контакта Delete contact Изтриване на контакта Move to group Преместване в група Authorization Удостоверяване Send authorization to Изпращане удостоверение на Ask authorization from Заявяване на удостоверяване от Remove authorization from Премахване на удостоверението от Copy JID to clipboard Копиране на JID в клип-борда Delete from visible list Изтриване от списък "Видими" Add to visible list Добавяне в списък "Видими" Delete from invisible list Изтриване от списък "Невидими" Add to invisible list Добавяне в списък "Невидими" Delete from ignore list Изтриване от списък "Пренебрегнати" Add to ignore list Добавяне в списък "Пренебрегнати" Name: Име: Contact will be deleted. Are you sure? Контактът ще бъде изтрит. Сигурни ли сте? Move %1 Преместване на %1 Group: Група: Authorize contact? Да бъде дадено удостоверение на контакта? Ask authorization from %1 Заявяване на удостоверяване от %1 Reason: Причина: Remove authorization from %1 Премахване на удостоверението от %1 Conferences Конференции Send message to: Изпращане на съобщение до: Add to contact list Добавяне в списъка с контакти Transports Транспорти Register Регистрация Unregister Премахване на регистрация Services Услуги Log In Влизане Log Out Излизане Remove transport and his contacts? Да се премахне транспорта и прилежащите му контакти? Delete with contacts Изтриване с контактите Delete without contacts Изтриване без контактите Cancel Отказ Get idle from: Проверка бездействието на: Get idle Проверка на бездействието Send file to: Изпращане на файл до: Invite to conference: Покана за конференция: Execute command: Изпълнение на команда: Execute command Изпълнение на команда Send file Изпращане на файл PubSub info: Информация: jSearch Search Търсене Error Грешка Jabber ID Jabber ID JID JID Nickname Псевдоним jServiceBrowser <br/><b>Identities:</b><br/> <br/><b>Самоличности:</b><br/> category: категория: type: тип: <br/><b>Features:</b><br/> <br/><b>Характеристики:</b><br/> jServiceDiscovery The sender has sent XML that is malformed or that cannot be processed. Изпращачът прати деформиран XML, който не може да бъде обработен. Access cannot be granted because an existing resource or session exists with the same name or address. Не може да бъде даден достъп, защото вече съществува ресурс или сесия със същото име или адрес. The feature requested is not implemented by the recipient or server and therefore cannot be processed. Заявената характеристика не се поддържа от ответния сървър затова не може да бъде използвана. The requesting entity does not possess the required permissions to perform the action. Заявяващият обект не притежава изискваните права за изпълнение на действието. The recipient or server can no longer be contacted at this address. Ответният сървър повече не е достъпен на този адрес. The server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error. Сървърът не може да обработи строфата, поради неправилна конфигурация или друга неопределена вътрешна сървърна грешка. The addressed JID or item requested cannot be found. Адресираният JID или заявеният елемент не може да бъде открит. The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme. Изпращащият обект предостави или съобщи XMPP адрес или аспект от него, които не се придържат към синтаксиса определен в Адресиращата схема. The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server. Получателят или ответният сървър разбира заявката, но отказва да я изпълни, тъй като тя не отговаря на изискванията на получателят или ответният сървър. The recipient or server does not allow any entity to perform the action. Получателят или ответният сървър не позволява никой обект да извърши това действие. The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials. Изпращачът трябва да предостави подходящи пълномощия, преди да бъде разрешено извършването на действието, или предоставените пълномощия са неподходящи. The item requested has not changed since it was last requested. Заявеният елемент не се е променил след като последно е бил заявен. The requesting entity is not authorized to access the requested service because payment is required. Заявяващият обект няма разрешение да достъпва заявената услуга, защото тя изисква плащане. The intended recipient is temporarily unavailable. Избраният получател е временно недостъпен. The recipient or server is redirecting requests for this information to another entity, usually temporarily. Получателят или ответният сървър пренасочва заявките за тази информация към друг обект, обикновено временно. The requesting entity is not authorized to access the requested service because registration is required. Заявяващият обект няма разрешение да достъпва заявената услуга, защото тя изисква регистрация. A remote server or service specified as part or all of the JID of the intended recipient does not exist. Отдалеченият сървър или услуга зададени като част от (или) целия JID на избрания получател не съществуват. A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time. Отдалеченият сървър или услуга зададени като част от (или) целия JID на избрания получател не могат да бъдат достъпени в рамките на разумен период от време. The server or recipient lacks the system resources necessary to service the request. Получателят или ответният сървър не притежава необходимите системни ресурси, за да обслужи заявката. The server or recipient does not currently provide the requested service. Получателят или ответният сървър в момента не предоставя заявената услуга. The requesting entity is not authorized to access the requested service because a subscription is required. Заявяващият обект няма разрешение да достъпва заявената услуга, защото тя изисква абонамент. The unknown error condition. Неизвестна (условие на) грешка. The recipient or server understood the request but was not expecting it at this time. Получателят или ответният сървър разбра заявката, но не я очакваше в този момент. The stanza 'from' address specified by a connected client is not valid for the stream. Строфата 'от' адрес, зададена от свързания клиент е невалидна за потока. jSlotSignal %1@%2 %1@%2 Invisible for all Невидим за всички Visible for all Видим за всички Visible only for visible list Видим само за списък "Видими" Invisible only for invisible list Невидим само за списък "Невидими" jTransport Register Регистриране Name Име Nick Псевдоним Password Парола First Първо Last Фамилно E-Mail Email Address Адрес City Град State Щат Zip П.К. Phone Телефон URL URL Date Дата Misc Разни Text Текст jVCard Update photo Смяна на снимка Add name Добавяне на име Add nick Добавяне на псевдоним Add birthday Добавяне на рожден ден Add homepage Добавяне на лична страница Add description Добавяне на описание Add country Добавяне на държава Add region Добавяне на област Add city Добавяне на град Add postcode Добавяне на пощенски код Add street Добавяне на улица Add PO box Добавяне на пощенска кутия Add organization name Добавяне на име на организация Add organization unit Добавяне на име на подразделение на организация Add title Добавяне на заглавие Add role Добавяне на позиция Open File Отваряне на файл Images (*.gif *.bmp *.jpg *.jpeg *.png) Изображения (*.gif *.png *.bmp *.jpg *.jpeg) Open error Грешка при отваряне Image size is too big Твърде голям размер на изображението userInformation Информация за потребител Request details Заявка за подробности Close Затваряне Save Запис topicConfigDialogClass Change topic Промяна на тема Change Промяна Cancel Отказ qutim-0.2.0/languages/bg_BG/sources/ubuntunotify.ts0000644000175000017500000000444711240006134024030 0ustar euroelessareuroelessar QObject System message from %1: Системное сообщение от %1: Message from %1: %2 Сообщение от %1: %2 %1 is typing %1 печатает Blocked message from %1: %2 Блокированное сообщение от %1: %2 %1 has birthday today!! %1 празднует день рождений!! UbuntuNotificationLayer System message from %1: Системно съобщениe от %1: Message from %1 Съобщениe от %1 %1 is typing %1 пише Blocked message from %1 Блокирано съобщение от %1 has birthday today!! има рожден ден днес!! qutIM is started qutIM е стартиран qutim-0.2.0/languages/bg_BG/sources/core.ts0000644000175000017500000056733211273045737022236 0ustar euroelessareuroelessar AbstractContextLayer Send message Изпращане на съобщение Message history Хронология на съобщенията Contact details Подробности за контакта AccountManagementClass AccountManagement Управление на сметки Add Добавяне Remove Премахване Edit Редактиране AddAccountWizard Add Account Wizard Помощник за добавяне на сметки AdiumChatForm Form about:blank about:blank Send Изпращане AntiSpamLayerSettingsClass AntiSpamSettings Настройки на защитата от спам Accept messages only from contact list Приемане на съобщения само от контакти в списъка Notify when blocking message Уведомяване при блокиране на съобщение Do not accept NIL messages concerning authorization Да не се приемат съобщения касаещи удостоверяване Do not accept NIL messages with URLs Да не се приемат съобщения с URL адреси Enable anti-spam bot Включване защитата срещу спам Anti-spam question: Въпрос за защитата срещу спам: Answer to question: Отговор на въпроса: Message after right answer: Съобщение при верен отговор: Don't send question/reply if my status is "invisible" Да не се изпраща въпрос/отговор ако статуса ми е "Невидим" AppearanceSettings Form Select theme: Избор на тема Test Проба Edit Редактиране ChatForm Form Contact history Хронология Ctrl+H Ctrl+H Emoticon menu Емотикони Ctrl+M Ctrl+M Send image < 7,6 KB Изпращане на картинка < 7,6 kB Ctrl+I Ctrl+I Send file Изпращане на файл Ctrl+F Ctrl+F Translit Транслитерация Ctrl+T Ctrl+T Contact information Информация за контакта Send message on enter Изпращане на съобщения с "Enter" Send typing notification Изпращане на уведомления при писане Quote selected text Цитиране на избрания текст Ctrl+Q Ctrl+Q Clear chat log Изчистване на прозореца със съобщения ... ... Send message Изпращане на съобщение Send Изпращане Swap layout Обръщане на знаковата подредба ChatLayerClass Chat window Прозорец със съобщения ChatSettingsWidget Form Tabbed mode Включване на раздели Chats and conferences in one window Всички (лични и групови) разговори в един прозорец Close button on tabs Бутон за затваряне във всеки раздел Tabs are movable Разделите могат да бъдат местени Remember openned privates after closing chat window Запомняне на отворените лични разговори след затваряне на прозореца със съобщения Close tab/message window after sending a message Затваряне на раздела/прозореца след изпращане на съобщение Open tab/message window if received message Отваряне на раздел/прозорец при получаване на съобщение Webkit mode Режим WebKit Don't show events if message window is open Да не се показват събития ако прозореца със съобщения е отворен Send message on enter Изпращане на съобщения с "Enter" Send message on double enter Изпращане на съобщения с двоен "Enter" Send typing notifications Изпращане на уведомления при писане Don't blink in task bar Да не мига в лентата със процеси After clicking on tray icon show all unreaded messages След щракване върху иконата в системния поднос да се показват всички непрочетени съобщения Remove messages from chat view after: Премахване на съобщенията от прозореца след: Text browser mode Режим текстови браузър Show names Да се показват имена Timestamp: Формат на времето: ( hour:min:sec day/month/year ) (час:мин:сек ден/месец/година) ( hour:min:sec ) (час:мин:сек) ( hour:min, full date ) ( час:мин, пълна дата ) Colorize nicknames in conferences Оцветяване на псевдонимите в груповите разговори General Общи Chat Разговор Don't group messages after (sec): Да не се групират съобщенията след (сек.): ChatWindow <font color='green'>Typing...</font> <font color='green'>Пише...</font> Open File Отваряне на файл Images (*.gif *.png *.bmp *.jpg *.jpeg) Изображения (*.gif *.png *.bmp *.jpg *.jpeg) Open error Грешка при отваряне Image size is too big Твърде голям размер на изображението ConfForm Form Show emoticons Показване на емотикони Ctrl+M, Ctrl+S Ctrl+M, Ctrl+S Invert/translit message Преобразуване/Транслитерация на съобщението Ctrl+T Ctrl+T Send on enter Изпращане с "Enter" Quote selected text Цитиране на избрания текст Ctrl+Q Ctrl+Q Clear chat Изчистване на прозореца със съобщения Send Изпращане Console Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> ContactListProxyModel Online На линия Offline Извън линия Not in list Извън списъка ContactListSettingsClass ContactListSettings Настройки на списъка с контакти Main Основни Show accounts Показване на сметките Hide empty groups Скриване на празните групи Hide offline users Скриване на потребителите извън линия Hide online/offline separators Скриване на разделителя "На линия"/"Извън линия" Sort contacts by status Подреждане на контактите по статус Draw the background with using alternating colors Запълване на фона с редуващи се цветове Show client icons Показване иконите на клиентите Show avatars Показване на аватари Look'n'Feel Външен вид Opacity: Прозрачност: 100% 100% Window Style: Стил на прозореца: Regular Window Нормален прозорец Borderless Window Прозорец без ограждение Tool window Инструментален прозорец Show groups Показване на групи Customize Персонализиране Customize font: Персонализиране на шрифтове: Account: Сметка: Group: Група: Online: На линия: Offline: Извън линия: Separator: Разделител: Theme border Тема на ограждението Core::PListConfigBackend Cannot write to file %1 Невъзможен е записът във файла %1 DefaultContactList qutIM qutIM Main menu Основно меню Show/hide offline Скриване/показване на контактите "Извън линия" Show/hide groups Скриване/показване на групи Sound on/off Включване/изключване на звука About За програмата &File &Файл Control Управление Show offline Показване на контактите "Извън линия" Hide groups Скриване на групите Mute Заглушаване GeneralWindow qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? явертъуиопшщасдфгхйкл;'зьцжбнм,./ЯВЕРТЪУИОПШЩАСДФГХЙКЛ:"ЗЬЦЖБНМ<>? Possible variants Възможни варианти GlobalProxySettingsClass GlobalProxySettings Настройки на общото прокси Proxy Прокси Type: Тип: Host: Хост: Port: Порт: None Без HTTP HTTP SOCKS 5 SOCKS 5 Authentication Удостоверяване User name: Потребителско име: Password: Парола: GuiSetttingsWindowClass User interface settings Настройки на потребителския интерфейс Emoticons: Емотикони: <None> <няма> Contact list theme: Тема на списъка с контакти: <Default> <по подразбиране> Chat window dialog: Тема на прозореца със съобщения: Chat log theme (webkit): Тема на дневника (режим WebKit): Popup windows theme: Тема на изскачащите прозорци: Status icon theme: Тема на иконите за статус: System icon theme: Тема на системните икони: Language: Език: <Default> ( English ) <по подразбиране> (английски) Application style: Стил на приложението: OK ОК Apply Прилагане Cancel Отказ Border theme: Тема на ограждението: <System> <системна> Sounds theme: Звукова тема: <Manually> <ръчно> HistorySettingsClass HistorySettings Настройки на хронологията Save message history Запазване на хронология на съобщенията Show recent messages in messaging window Показване на последните съобщения в прозореца Show recent messages in messaging window: Показване на последните съобщения в прозореца: HistoryWindow No History Няма хронология HistoryWindowClass HistoryWindow Хронология Account: Сметка: From: От: Search Търсене Return Връщане 1 1 In: %L1 Входящи: %L1 Out: %L1 Изходящи: %L1 All: %L1 Общо: %L1 JsonHistoryNamespace::HistoryWindow No History Няма хронология In: %L1 Входящи: %L1 Out: %L1 Изходящи: %L1 All: %L1 Общо: %L1 KineticPopupBackend System message from %1: Системно съобщение от %1: %1 was changed status %1 промени статуса си %1 changed status %1 промени статуса си Message from %1: Съобщение от %1: %1 is typing %1 пише Blocked message from %1 Блокирано съобщение от %1 %1 has birthday today!! %1 има рожден ден днес!! Custom message for %1 Собствено съобщение до %1 %1 is online %1 е на линия %1 is offline %1 е извън линия qutIM launched qutIM е стартиран Count Брой LastLoginPage Please type chosen protocol login data Моля въведете потребителско име и парола за избрания протокол Please fill all fields. Моля попълнете всички полета. NotificationsLayerSettingsClass NotificationsLayerSettings Настройки на уведомленията Show popup windows Показване на изскачащи прозорци Width: Ширина: Height: Височина: Show time: Продължителност на показване: px px s сек Position: Позиция: Style: Стил: Upper left corner Горен ляв ъгъл Upper right corner Горен десен ъгъл Lower left corner Долен ляв ъгъл Lower right corner Долен десен ъгъл No slide Без плъзгане Slide vertically Вертикално плъзгане Slide horizontally Хоризонтално плъзгане Show balloon messages Показване на балони със съобщения Notify when: Уведомяване когато: Contact sign on контакт влиза на линия Contact sign off контакт излиза извън линия Contact typing message контакт пише съобщение Contact change status контакт променя статуса си Message received е получено съобщение Show balloon messages: Показване на балони със съобщения: Plugin Kinetic popups Изскачащи прозорци (Kinetic) Default qutIM popup realization. Powered by Kinetic Конфигурация на qutIM по подразбиране. Базирана на Kinetic AES crypto AES шифриране Default qutIM crypto realization. Based on algorithm aes256 Подразбираща се за qutIM реализация на шифриране. На базата на aes256 алгоритъма JSON config JSON конфигурация Default qutIM config realization. Based on JSON. Конфигурация на qutIM по подразбиране. Базирана на JSON. PList config PList конфигурация Additional qutIM config realization for Apple plists Допълнителна конфигурация на qutIM за Apple plists Simple ContactList Опростен списък с контакти Default qutIM contact list realization. Just simple Конфигурация на qutIM по подразбиране. Опростена X Settings dialog Х настройки Default qutIM settings dialog realization with OS X style top bar Подразбиращ се за qutIM диалог за настройване, с OS X стил на заглавната лента Webkit chat layer WebKit слой за разговор Default qutIM chat realization, based on Adium chat styles Подразбираща се за qutIM реализация на разговор. На базата на Audium стилове за разговора PluginSettingsClass Configure plugins - qutIM Настройване на добавки - qutIM 1 1 Ok ОК Cancel Отказ PopupWindow <b>%1</b> <b>%1</b> <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 PopupWindowClass PopupWindow Изскачащи прозорци ProfileLoginDialog Log in Влизане Profile Профил Incorrect password Сгрешена парола Delete profile Изтриване на профил Delete %1 profile? Да се изтрие профила %1? ProfileLoginDialogClass ProfileLoginDialog Влизане в профила Name: Име: Password: Парола: Remember password Запомняне на паролата Don't show on startup Да не се показва при стартиране Sign in Влизане Cancel Отказ Remove profile Премахване на профил ProtocolPage Please choose IM protocol Моля изберете протокол This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts Този съветник ще ви помогне при добавянето на протокол. Винаги можете да добавяте или изтривате сметки чрез менюто Основни->Сметки QObject Anti-spam Защита от спам Authorization blocked Блокирано удостоверение Not in list Извън списъка Message from %1: %2 Съобщение от %1: %2 %1 is typing %1 пише typing пише Blocked message from %1: %2 Блокирано съобщение от %1: %2 (BLOCKED) (БЛОКИРАНО) %1 has birthday today!! %1 има рожден ден днес!!! has birthday today!! има рожден ден днес!!! Open File Отваряне на файл All files (*) Всички файлове (*) Notifications Уведомления Sound Звуци &Quit &Изход Quit Изход Sound notifications Звукови уведомления Contact List Списък с контакти History Хронология 1st quarter 1-ва четвърт 2nd quarter 2-ра четвърт 3rd quarter 3-та четвърт 4th quarter 4-та четвърт Chat with %1 Разговор с %1 Settings Popups Изскачащи прозорци Test settings Проба на настройките Text Текст Combo Комбо Check Чек SoundEngineSettings Select command path Избор на път до командата Executables (*.exe *.com *.cmd *.bat) All files (*.*) Изпълними (*.exe *.com *.cmd *.bat) Всички файлове (*) Executables Изпълними Form ... ... Engine type Тип No sound Без звук QSound QSound Command Команда Custom sound player Собствен звуков плейър Command: Команда: SoundLayerSettings Startup Стартиране System event Системно събитие Outgoing message Изходящо съобщение Incoming message Входящо съобщение Contact is online Контакт влиза на линия Contact changed status Контакт променя статуса си Contact went offline Контакт излиза извън линия Contact's birthday is comming Предстоящ рожден ден на контакт Sound files (*.wav);;All files (*.*) Don't remove ';' chars! Звукови файлове (*.wav);;Всички файлове (*.*) Open sound file Отваряне на звуков файл Export sound style Експортиране на звукова схема XML files (*.xml) XML файлове (*.xml) Export... Експортиране... All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue? Всички звукови файлове ще бъдат копирани в директория "%1/". Съществуващите файлове ще бъдат презаписани без предупреждение. Желаете ли да продължите? Error Грешка Could not open file "%1" for writing. Файлът "%1" не може да бъде отворен за запис. Could not copy file "%1" to "%2". Файлът "%1" не може да бъде копиран в "%2". Sound events successfully exported to file "%1". Звуковата схема е експортирана успешно във файла "%1". Import sound style Импортиране на звукова схема Could not open file "%1" for reading. Файлът "%1" не може да бъде отворен за четене. An error occured while reading file "%1". Грешка при прочитане на файла "%1". File "%1" has wrong format. Файлът "%1" е в неверен формат. SoundSettingsClass soundSettings Настройки на звука Events Събития Sound file: Звуков файл: Play Просвирване Open Отваряне Apply Прилагане Export... Експортиране... Import... Импортиране... You're using a sound theme. Please, disable it to set sounds manually. Вече използвате звукова тема. Моля, първо я изключете, за да зададете звуците ръчно. Status Connecting Свързване Online На линия Offline Извън линия Away Отсъстващ Don't disturb Не безпокойте Not avaiable Недостъпен Occupied Зает Free for chat Свободен за разговор Evil Зъл Depression Депресиран Invisible Невидим At home Вкъщи At work На работа On the phone На телефона Out to lunch На обяд is connecting се свързва is online е на линия is offline е извън линия is away отсъства is busy е зает is not avaiable е недостъпен is occupied е зает is free for chat е свободен за разговор is evil е зъл is depression е депресиран is invisible е невидим is at home е вкъщи is at work е на работа is on the phone е на телефона is out to lunch е на обяд StatusDialog Write your status message Въведете съобщение за вашия статус Preset caption Предварително зададени StatusDialogVisualClass StatusDialog Статус Preset: Зададени: <None> <без> Do not show this dialog Да не се показва диалога повече Save Запис OK ОК Cancel Отказ StatusPresetCaptionClass StatusPresetCaption Предварително зададени статуси Please enter preset caption Въведете име OK ОК Cancel Отказ Please enter preset caption: Моля, въведете предварителен надпис: TreeContactListModel Online На линия Free for chat Свободен за разговор Away Отсъства Not available Недостъпен Occupied Зает Do not disturb Не безпокойте Invisible Невидим Offline Извън линия At home Вкъщи At work На работа Having lunch Храни се Evil Зъл Depression Депресиран Without authorization Без удостоверение XSettingsDialog General Общи General configuration Общи настройки Protocols Протоколи Accounts and protocols settings Настройки на сметки и протоколи Appearance Външен вид Appearance settings Настройки на външния вид Plugins Добавки Additional plugins settings Допълтнителни настройки на добавките XSettingsDialog Х настройки Sorry, this category doesn't contain any settings Извинете, но тази категория не съдържа никакви настройки XSettingsGroup Form XToolBar XBar appearence Външен вид на Х лентата XBar appearance Външен вид на Х лентата Small (16x16) Малък (16x16) Normal (32x32) Нормален (32х32) Big (48x48) Голям (48х48) Other Друг Icon size Размер на иконите Only display the icon Показване само на икона Only display the text Показване само на текст The text appears beside the icon Текстът се появява до иконата The text appears under the icon Текстът се появява под иконата Follow the style В зависимост от стила Tool button style Стил на бутона Animated Анимирани aboutInfo Support project with a donation: Подкрепете проекта с дарение: Yandex.Money Yandex.Money Enter there your names, dear translaters <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Боян Киров (kiroff)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boyan.kiroff@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">boyan.kiroff@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Ако има желаещи да помогнат и/или да предложат корекции и промени <br/> да се свържат с мен на посочения e-mail адрес <br/> или в секцията за български превод във <a href="http://qutim.org/forum/viewtopic.php?f=63&t=745"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">форума на qutIM</span></a></span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> GNU General Public License, version 2 Общ публичен лиценз на ГНУ (GNU GPL) 2 aboutInfoClass About qutIM За qutIM About За програмата <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutIM, multiplatform instant messenger</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutim.develop@gmail.com</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(c) 2008, Rustam Chakin</p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutIM, много-платформен клиент за моментни съобщения</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutim.develop@gmail.com</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(c) 2008-2009, Рустам Чакин, Руслан Нигматуллин</p></body></html> Authors Автори <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; color:#090909;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; color:#090909;"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; color:#090909;">Ruslan Nigmatullin </span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#000000;">Main developer</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Рустам Чакин</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Главен разработчик и основател на проекта</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt; color:#090909;"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt; color:#090909;">Руслан Нигматуллин </span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Главен разработчик</span></p></body></html> Thanks To Благодарности на <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Георги Сирков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Пакет с икони</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Юсуке Камиямане</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Пакет с икони</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Екипът Tango</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Пакет с емотикони </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Денис Новиков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Автор на звуковите събития</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Алексей Игнатиев</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Автор на системата за определяне на клиентите</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Дмитри Аректа</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Маркус К</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Автор на обекта за облик</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> License Agreement Лицензионно споразумение <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Close Затваряне Return Връщане <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, много-платформен клиент за моментни съобщения</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">(c) 2008-2009, Рустам Чакин, Руслан Нигматуллин</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, много-платформен клиент за моментни съобщения</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Рустам Чакин, Руслан Нигматуллин</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">License agreements</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">Лицензионно споразумение</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project leader</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Рустам Чакин</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Главен разработчик и основател на проекта</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Руслан Нигматуллин</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Главен разработчик и водач на проекта</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schröter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox library</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schröter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox библиотека</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Георги Сурков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Пакет с икони</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Пакет с икони</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Екипът Tango </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Пакет с емотикони </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Денис Новиков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор на звуковите събития</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Алексей Игнатиев</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор на ситемата за определяне на клиентите</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Дмитри Аректа</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор на обекта за облик</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Рустам Чакин</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Главен разработчик и основател на проекта</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Руслан Нигматуллин</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Главен разработчик </span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Георги Сурков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Пакет с икони</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Пакет с икони</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Екипът Tango </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Пакет с емотикони </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Денис Новиков</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор на звуковите събития</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Алексей Игнатиев</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор на ситемата за определяне на клиентите</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Дмитри Аректа</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Автор на обекта за облик</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> Translators Преводачи <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"></p></body></html> Donates Дарители loginDialog Delete account Изтриване на сметка Delete %1 account? Изтриване на сметката %1? loginDialogClass Account Сметка Account: Сметка: ... ... Password: Парола: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximum length of ICQ password is limited to 8 characters.</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Максималната дължина на ICQ паролата е ограничена до 8 символа.</span></p></body></html> Save my password Запомняне на паролата Autoconnect Автоматично свързване Secure login Сигурно влизане Show on startup Показване при стартиране Sign in Влизане Remove profile Премахване на профил mainSettingsClass mainSettings Основни настройки Save main window size and position Запомняне на размера и позицията на прозореца Hide on startup Скриване при стартиране Don't show login dialog on startup Да не се показва прозореца за вход при стартиране Start only one qutIM at same time Стартиране само на една инстанция на qutIM Add accounts to system tray menu Добавяне на сметките в менюто на системния поднос Always on top Винаги отгоре Auto-hide: Автоматично скриване след: s сек Auto-away after: Автоматично преминаване в "Отсъствам" след: min мин Show status from: Показване на статуса от: qutIM &Quit &Изход &Settings... &Настройки... &User interface settings... &Настройки на потребителския интерфейс... Plug-in settings... Настройки на добавките... Do you really want to switch profile? Сигурни ли сте, че наистина желаете да смените профила? Switch profile Смяна на профил qutIMClass qutIM qutIM qutimSettings Accounts Сметки General Общи Save settings Запис на настройките Save %1 settings? Запазване промените за %1? Global proxy Общо прокси qutimSettingsClass Settings Настройки 1 1 OK ОК Apply Прилагане Cancel Отказ qutim-0.2.0/languages/bg_BG/sources/w7i.ts0000644000175000017500000000123211263034335021761 0ustar euroelessareuroelessar w7isettingsClass PIZDO!!! Нещо тъпо, което не искам да превеждам!!! Show contact list on the taskbar Показване на списъка с контакти в панела със задачи qutim-0.2.0/languages/bg_BG/sources/vkontakte.ts0000644000175000017500000002127511267527651023306 0ustar euroelessareuroelessar EdditAccount Editing %1 Редактиране на %1 Form General Общи Password: Парола: Autoconnect on start Автоматично свързване при стартиране Keep-alive every: Поддържане връзката на всеки: s сек Refresh friend list every: Обновяване на списъка с приятели на всеки: Check for new messages every: Проверка за ново съобщение на всеки: Updates Актуализации Check for friends updates every: Проверка за актуализации на приятелите на всеки: Enable friends photo updates notifications Известяване за актуализации в снимките на приятелите Insert preview URL on new photos notifications Вмъкване на предварителен преглед на URL при известие за нова снимка Insert fullsize URL on new photos notifications Вмъкване на пълноразмерен преглед на URL при известие за нова снимка OK ОК Apply Прилагане Cancel Отказ LoginForm Form E-mail: E-mail: Password: Парола: Autoconnect on start Автоматично свързване при стартиране VcontactList Friends Приятели Favorites Любими <font size='2'><b>Status message:</b>&nbsp;%1</font <font size='2'><b>Съобщение на статуса:</b>&nbsp;%1</font> Open user page Отваряне страницата на потребителя <font size='2'><b>Status message:</b>%1</font <font size='2'><b>Съобщение на статуса:</b>%1</font> VprotocolWrap Mismatch nick or password Псевдонимът или паролата не съвпадат Vkontakte.ru updates Vkontakte.ru актуализации %1 was tagged on photo %1 бе отбелязан(а) на снимка %1 added new photo %1 е добавил(а) нова снимка VstatusObject Online На линия Offline Извън линия qutim-0.2.0/languages/bg_BG/sources/irc.ts0000644000175000017500000013174211240003554022034 0ustar euroelessareuroelessar AddAccountFormClass AddAccountForm Добавяне на сметка Password: Парола: Save password Запис на паролата Server: Сървър: irc.freenode.net irc.freenode.net Port: Порт: 6667 6667 Nick: Псевдоним: Real Name: Истинско име: IrcConsoleClass IRC Server Console Конзола на IRC сървъра changeTopicClass Change Topic Промяна на тема ircAccount Online На линия Offline Извън линия Console Конзола Join Channel Присъединяване към канал Private chat Личен разговор Information Информация CTCP CTCP Channels List Списък от канали Channel owner Собственик на канала Channel administrator Администратор на канала Channel operator Оператор в канала Channel half-operator Полу-оператор в канала Voice Глас Banned Със забрана Change topic Промяна на тема IRC operator IRC оператор Mode Режим Notify avatar Уведомяване аватар Give Op Предоставяне на операторски права Take Op Получаване на операторски права Give HalfOp Предоставяне на полу-операторски права Take HalfOp Получаване на полу-операторски права Give Voice Предоставяне на глас Take Voice Получаване на глас Kick Изритване Kick with... Изритване с... Ban Забрана UnBan Премахване на забрана Modes Режими Kick / Ban Изритване / Забрана Kick reason Повод за изритване Away Отсъства ircAccountSettingsClass IRC Account Settings Настройки на IRC сметката General Общи Nick: Псевдоним: Alternate Nick: Алтернативен псевдоним: Real Name: Истинско име: Server: Сървър: Port: Порт: Codepage: Кодировка: Identify Идентифициране Age: Възраст: Gender: Пол: Unspecified Неопределен Male Мъж Female Жена Location Местонахождение Languages: Езици: Avatar URL: URL на аватара: Other: Други: Advanced Разширени OK ОК Cancel Отказ Apply Прилагане Autologin on start Автоматично свързване при стартиране Part message: Съобщение при излизане: Quit message: Съобщение при затваряне: Autosend commands after connect: Автоматично изпращане на команди след свързване: Apple Roman Apple Roman Big5 Big5 Big5-HKSCS Big5-HKSCS EUC-JP EUC-JP EUC-KR EUC-KR GB18030-0 GB18030-0 IBM 850 IBM 850 IBM 866 IBM 866 IBM 874 IBM 874 ISO 2022-JP ISO 2022-JP ISO 8859-1 ISO 8859-1 ISO 8859-2 ISO 8859-2 ISO 8859-3 ISO 8859-3 ISO 8859-4 ISO 8859-4 ISO 8859-5 ISO 8859-5 ISO 8859-6 ISO 8859-6 ISO 8859-7 ISO 8859-7 ISO 8859-8 ISO 8859-8 ISO 8859-9 ISO 8859-9 ISO 8859-10 ISO 8859-10 ISO 8859-13 ISO 8859-13 ISO 8859-14 ISO 8859-14 ISO 8859-15 ISO 8859-15 ISO 8859-16 ISO 8859-16 Iscii-Bng Iscii-Bng Iscii-Dev Iscii-Dev Iscii-Gjr Iscii-Gjr Iscii-Knd Iscii-Knd Iscii-Mlm Iscii-Mlm Iscii-Ori Iscii-Ori Iscii-Pnj Iscii-Pnj Iscii-Tlg Iscii-Tlg Iscii-Tml Iscii-Tml JIS X 0201 JIS X 0201 JIS X 0208 JIS X 0208 KOI8-R KOI8-R KOI8-U KOI8-U MuleLao-1 MuleLao-1 ROMAN8 ROMAN8 Shift-JIS Shift-JIS TIS-620 TIS-620 TSCII TSCII UTF-8 UTF-8 UTF-16 UTF-16 UTF-16BE UTF-16BE UTF-16LE UTF-16LE Windows-1250 Windows-1250 Windows-1251 Windows-1251 Windows-1252 Windows-1252 Windows-1253 Windows-1253 Windows-1254 Windows-1254 Windows-1255 Windows-1255 Windows-1256 Windows-1256 Windows-1257 Windows-1257 Windows-1258 Windows-1258 WINSAMI2 WINSAMI2 ircProtocol Connecting to %1 Установяване на връзка с %1 Trying alternate nick: %1 Опит с алтернативен псевдоним: %1 %1 requests %2 %1 заявява %2 %1 requests unknown command %2 %1 заявява неизвестна команда %2 %1 reply from %2: %3 %1 отговор от %2: %3 %1 has set mode %2 %1 установи режим %2 ircSettingsClass ircSettings Настройки за IRC Main Основни Advanced Разширени joinChannelClass Join Channel Присъединяване към канал Channel: Канал: listChannel Sending channels list request... Изпращане на заявка за списък от канали... Channels list loaded. (%1) Списъкът от канали бе зареден. (%1) Fetching channels list... (%1) Получаване на списък от канали... (%1) Fetching channels list... %1 Получаване на списък от канали... %1 listChannelClass Channels List Списъкът от канали Filter by: Филтриране по: Request list Заявка за списък Users Потребители Channel Канал Topic Тема <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> textDialogClass textDialog Текст qutim-0.2.0/languages/bg_BG/sources/nowlistening.ts0000644000175000017500000007255211253116574024015 0ustar euroelessareuroelessar settingsUi Form Current plugin mode Текущ статус на добавката Activated Активирана Settings Настройки Music Player Музикален плеър Amarok 2 Amarok 1.4 Amarok 2 %artist - %title %artist - %title QMMP QMMP Winamp Winamp Info Информация background-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); background-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); Mode Режим Deactivated Деактивирана Changes current X-status message Променя текущото съобщение на разширения статус Activates when X-status is "Listening to music" Активира се когато разширения статус е "Слушам музика" X-status message mask Маска за съобщението на разширения статус Listening now: %artist - %title В момента слушам: %artist - %title Set mode for all accounts Установяване за всички сметки You have no ICQ or Jabber accounts. Не са намерени ICQ или Jabber сметки. For Jabber accounts За Jabber сметките Info to be presented Информация за представяне artist title artist title For ICQ accounts За ICQ сметките RadioButton Радио бутон Amarok 1.4 Amarok 1.4 AIMP AIMP Audacious Audacious MPD MPD Rhythmbox Rhythmbox Song Bird (Linux) Song Bird (Линукс) Check period (in seconds) Период на проверка (в секунди) 10 10 Hostname Име на хост 127.0.0.1 127.0.0.1 Port Порт 6600 6600 Password Парола <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Winamp module author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">"В момента слушам" добавка за qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Автор:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Автор на WinAmp модула:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Петер Русанов </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html> VLC VLC <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For ICQ X-status message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - track length in minutes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - full path to file</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For Jabber Tune message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - track length in seconds</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - full path to file</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">За разширеният статус в ICQ се използват следните ключови думи:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - изпълнител</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - заглавие</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - албум</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - номер на песен</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - продължителност в минути</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - пълен път до файла</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">За настроенията в Jabber се използват следните ключови думи:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - изпълнител</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - заглавие</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - албум</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - номер на песен</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - продължителност в секунди</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - пълен пъ до файла</span></p></body></html> About За добавката qutim-0.2.0/languages/bg_BG/sources/gpgcrypt.ts0000644000175000017500000000741311240003554023113 0ustar euroelessareuroelessar GPGCrypt Set GPG Key Задаване на GPG ключ GPGSettings Form Settings Настройки Your Key: Вашият ключ: Passphrase OpenPGP Passphrase Your passphrase is needed to use OpenPGP security. Please enter your passphrase below: За да се изпoлзва OpenPGP защита е нобходим вашия passphrase. Моля въведете го по-долу: &Cancel &Отказ &OK &OK PassphraseDlg %1: OpenPGP Passphrase %1: OpenPGP Passphrase setKey Select Contact Key Избор на ключ на контакта Select Key: Избор на ключ: qutim-0.2.0/languages/bg_BG/sources/jsonhistory.ts0000644000175000017500000000752311240003554023651 0ustar euroelessareuroelessar HistorySettingsClass HistorySettings Настройки на хронологията Save message history Запазване на хронология на съобщенията Show recent messages in messaging window Показване на последните съобщения в прозореца HistoryWindowClass HistoryWindow Хронология Account: Сметка: From: От: Search Търсене Return Връщане 1 1 JsonHistoryNamespace::HistoryWindow No History Няма хронология QObject History Хронология qutim-0.2.0/languages/bg_BG/sources/youtubedownload.ts0000644000175000017500000003117111255750431024507 0ustar euroelessareuroelessar urlpreviewPlugin Download Изтегляне Add download links for YouTube urls Добавяне на YouTube връзки за изтегляне urlpreviewSettingsClass Settings Настройки General Общи Enable on incoming messages Активиране за входящи съобщения Enable on outgoing messages Активиране за изходящи съобщения Info template: Информационен шаблон: Macros: %URL% - Clip address Макрос: %URL% - адрес на клипа About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">YouTube download link qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Adds link for downloading clips</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:saboteur@saboteur.mp"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Evgeny Soynov</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Template:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler@co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Alexander Kazarin</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Добавка за изтегляне на YouTube връзки</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Добавяне на връзки към YouTube за изтегляне</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:saboteur@saboteur.mp"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Евгени Сойнов</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Шаблон:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler@co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Александър Казарин</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/bg_BG/sources/kde-integration.ts0000644000175000017500000002051011262313565024343 0ustar euroelessareuroelessar KDENotificationLayer Open chat Отваряне на разговор Close Затваряне KdeSpellerLayer Spell checker Проверка на правописа KdeSpellerSettings Form Select dictionary: Избор на речник: Autodetect of language Автоматично разпознаване на езика QObject System message from %1: Системно съобщение от %1: Message from %1: Съобщение от %1: %1 is typing %1 пише Blocked message from %1 Блокирано съобщение от %1 Custom message for %1 Собствено съобщение за %1 Message from %1:<br />%2 Съобщение от %1:<br />%2 %1</b><br /> is typing %1</b><br /> пише Blocked message from<br /> %1: %2 Блокирано съобщение от<br /> %1: %2 %1 has birthday today!! %1 има рожден ден днес!!! Notifications Уведомления System message from %1: <br /> Системно съобщение от %1: <br /> plugmanSettings Form Settings Настройки Installed plugins: Инсталирани добавки: Install from internet Инсталиране от Интернет Install from file Инсталиране от файл About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Simple qutIM plugin</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Author: </span>Sidorov Aleksey</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Проста добавка за qutIM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Автор: </span>Алексей Сидоров</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">За връзка: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html> qutim-0.2.0/languages/bg_BG/sources/weather.ts0000644000175000017500000003302611240003554022712 0ustar euroelessareuroelessar weatherSettingsClass Settings Настройки Cities Градове Add Добавяне Delete city Изтриване на град Refresh period: Период на обновяване: Show weather in the status row Показване на времето в реда за статус Search Търсене Enter city name Име на град About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Weather qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Weather qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Добавка за времето в qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Никита Белов</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/bg_BG/sources/plugman.ts0000644000175000017500000012122311252374115022722 0ustar euroelessareuroelessar ChooseCategoryPage Select art Избор на графика Select core Избор на ядро Library (*.dll) Библиотека (*.dll) Library (*.dylib *.bundle *.so) Библиотека (*.dylib *.bundle *.so) Library (*.so) Библиотека (*.so) Select library Избор на библиотека WizardPage Магьосник Package category: Категория на пакета: Art Графика Core Ядро Lib Библиотека Plugin Добавка ... ... ChoosePathPage WizardPage Магьосник ... ... ConfigPackagePage WizardPage Магьосник Name: Име: * * Version: Версия: Category: Категория: Art Графика Core Ядро Lib Библиотека Plugin Добавка Type: Тип: Short description: Кратко описание: Url: URL: Author: Автор: License: Лиценз: Platform: Платформа: Package name: Име на пакет: QObject Package name is empty Името на пакета е празно Package type is empty Типът на пакета е празен Invalid package version Невалидна версия на пакета Wrong platform Грешна платформа manager Plugman Plugman Not yet implemented В процес на разработка Apply Прилагане Actions Действия find намиране plugDownloader bytes/sec Байта/сек kB/s кБ/сек MB/s МБ/сек Downloading: %1%, speed: %2 %3 Изтегляне на: %1%, скорост: %2 %3 plugInstaller Unable to open archive: %1 Неуспешно отваряне на архива: %1 warning: trying to overwrite existing files! Внимание: Опит за презаписване на съществуващи файлове! Need restart! Нужно е рестартиране! Unable to extract archive: %1 to %2 Неуспешно извличане на архива: %1 в %2 Installing: Инсталиране на: Unable to update package %1: installed version is later Неуспешно надграждане на пакета %1: Инсталираната версия е по-актуална Unable to install package: %1 Неуспешно инсталиране на пакета: %1 Invalid package: %1 Невалиден пакет: %1 Removing: Премахване на: plugItemDelegate isUpgradable за надграждане isInstallable за инсталиране isDowngradable за обратно надграждане installed инсталиран Unknown Неизвестен Install Инсталиране Remove Премахване Upgrade Надграждане plugMan Manage packages Управление на пакети plugManager Actions Действия Update packages list Актуализиране на списъка с пакети Upgrade all Надграждане на всички Revert changes Отмяна на промените plugPackageModel Packages Пакети plugXMLHandler Unable to open file Неуспешно отваряне на файла Unable to set content Неуспешно задаване на съдържание Unable to write file Неуспешен запис на файла Can't read database. Check your pesmissions. Неуспешно прочитане на базата данни. Проверете правата си. Broken package database Повредена база данни с пакети unable to open file неуспешно отваряне на файл unable to set content неуспешно задаване на съдържание plugmanSettings Form Settings Настройки <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Прост мениджър за управление на добавки в qutIM.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Алексей Сидоров</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Контакти: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009</span></p></body></html> About За добавката Not yet implemented В процес на разработка group packages групиране на пакети <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mirror list</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Списък с огледала</span></p></body></html> Add Добавяне Name Име Description Описание Url URL <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Прост мениджър за управление на добавки в qutIM.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Алексей Сидоров</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Контакти: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> qutim-0.2.0/languages/bg_BG/sources/growlnotification.ts0000644000175000017500000001425511262342141025021 0ustar euroelessareuroelessar GrowlNotificationLayer QutIM message Съобщение от qutIM Growl Growl Select sound file Избор на звуков файл All files (*.*) Всички файлове (*) GrowlSettings Form Pop-ups Изскачащи прозорци Enabled Активирано Notify about status changes Известяване при промяна на статус Notify when user came offline Известяване когато потребител излиза извън линия Notify when user came online Известяване когато потребител влиза на линия Notify when contact is typing Известяване когато контакт пише Notify when message is recieved Известяване когато е получено съобщение Notify about birthdays Известяване за рожден ден Notify when message is blocked Известяване когато е блокирано съобщение Notify about custom requests Известяване при собствени заявки Sounds Звуци ... ... System Event Системно събитие Incoming message Входящо съобщение Contact online Контактът е на линия Contact offline Контактът е извън линия Status change Променя статуса Birthay Рожден ден reset Нулиране Startup При стартиране Outgoing message Изходящо съобщение QObject %1 %1 Typing пише Blocked message : %1 Блокирано съобщение : %1 has birthday today!! има рожден ден днес!! qutim-0.2.0/languages/bg_BG/sources/nowplaying.ts0000644000175000017500000003114211240003554023437 0ustar euroelessareuroelessar nowplayingSettingsClass Settings Настройки General Общи On Включена Not change Без промяна Change to: Да се променя на: With this status: Със следния статус: X-Status title: Заглавие за разширения статус: %artist% for the artist %title% for the name of song %album% for the album %artist% за изпълнител %title% за заглавие на песен %album% за албум ICQ ICQ Forever Завинаги Jabber Jabber Change tune Да се променя мелодията Status message: Съобщение за статус: Convert tags from windows-1251 to utf8 Преобразуване на етикетите от windows-1251 на utf8 About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/logo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Now playing qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/logo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">"В момента слушам" добавка за qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Никита Белов</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> qutim-0.2.0/languages/bg_BG/sources/qutim.qph0000644000175000017500000021374711267012021022564 0ustar euroelessareuroelessar Default Подразбиращ се Simple Опростен Send file Изпращане на файл Open File Отваряне на файл Choose Избиране Cancel Отказ Confirm Потвърждение Yes Да No Не deleteContactDialog Изтриване на контакт Contact will be deleted. Are you sure? Контактът ще бъде изтрит. Сигурни ли сте? Save File Запис на файл All files (*) Всички файлове (*) From: От: Accept Приемане Decline Отхвърляне %1 is typing %1 пише typing пише Sign in Влизане Show on startup Показване при стартиране Send multiple Многократно изпращане Stop Спиране Change Промяна &Quit &Изход Apply Прилагане Close Затваряне Return Връщане Account suspended because of your age (age < 13) Сметката е преустановена поради възрастта ви (възраст < 13) Mismatch nick or password Псевдонима или паролата не съвпадат Suspended account Преустановена сметка User too heavily warned Потребителят е предупреден твърде сериозно No access to database Няма достъп до базата данни Can't register on the ICQ network. Reconnect in a few minutes Невъзможно регистриране в ICQ мрежата. Моля опитайте отново след няколко минути Invalid database fields Невалидни полета в базата данни Invalid account Невалидна сметка Invalid SecurID Невалиден SecurID The users num connected from this IP has reached the maximum Надвишен максимален брой потребители, свързани от този адрес Rate limit exceeded. Please try to reconnect in a few minutes Надвишен брой опити. Моля опитайте отново след няколко минути Bad database status Лош статус на базата данни Deleted account Изтрита сметка Reservation timeout Изтекло време на резервация Expired account Изтекла сметка DB link error Грешка при свързване с базата данни Connection Error Грешка при свързване DB send error Грешка при изпращане на базата данни Internal error Вътрешна грешка Service temporarily offline Временно услугата не е на линия You are using an older version of ICQ. Upgrade required Използвате стара версия на ICQ. Необходимо е да обновите клиента You are using an older version of ICQ. Upgrade recommended Използвате стара версия на ICQ. Препоръчително е да обновите клиента Connection Error: %1 Грешка при свързване: %1 ] : %1 is reading your away message ] : %1 прочита вашето съобщение при отсъствие Widowed Вдовец/Вдовица Skills Умения Social science Социални науки searchUser Търсене на потребител Women Жени Widowed Вдовец/Вдовица Wales Уелс Travel Пътуване Sports Спорт Sporting and athletic Спортуване и атлетика Single Свободен/Свободна Separated Разделен(а) Search by: Търсене по: Search Търсене Science/Technology Наука/Технологии Science & Research Наука и изследвания Science & Research Наука и изследователска дейност Retired Пенсионер(ка) Other services Други услуги Nick name: Псевдоним: Nick name Псевдоним News & Media Новини и медии Nature and Environment Природа и околна среда Mystics Мистерии Music Музика Movies/TV Филми/Телевизия More >> Още >> Medical/Health Медицина/Здраве Married Женен/Омъжена Outdoor Activities Занимания на открито Manufacturing Производство Managerial Управление Last name: Фамилия: Last name Фамилия Language: Език: Keywords: Ключови думи: Interests: Интереси: Household products Стоки за бита Hobbies Хобита High School Student Гимназист(ка) Health and beauty Здраве и красота Government Правителство Gender: Пол: First name Име Financial Services Финансови услуги Finance and corporate Финанси и корпорации Female Жена Engaged Сгоден(а) Email Email Divorced Разведен(а) Culture & Literature Култура и литература Country: Държава: Consumer electronics Потребителска електроника Computers Компютри Clear Изчистване College Student Студент(ка) City: Град: Business services Бизнес услуги Business & Economy Бизнес и икономика Bulgarian български Bulgaria България Authorize Удостоверяване Audio and visual Аудио и видео Astronomy Астрономия Art/Entertainment Изкуство/Забава Art Изкуство Age: Възраст: Other Други Male Мъж Cars Автомобили Lifestyle Начин на живот Parenting Отглеждане на деца Pets/Animals Домашни любимци/Животни Entertainment Забава Password: Парола: ICQ General ICQ Общи Network Мрежа Statuses Статуси Contacts Контакти <font size='2'><b>External ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Външен IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Internal ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Вътрешен IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Away since:</b> %1<br> <font size='2'><b>Отсъства от:</b> %1<br> <font size='2'><b>N/A since:</b> %1<br> <font size='2'><b>Недостъпен от:</b> %1<br> <b>Reg. date:</b> %1<br> <b>Регистрация от:</b> %1<br> <b>Possible client:</b> %1</font> <b>Вероятен клиент:</b> %1</font> <b>External ip:</b> %1.%2.%3.%4<br> <b>Външен IP:</b> %1.%2.%3.%4<br> <b>Internal ip:</b> %1.%2.%3.%4<br> <b>Вътрешен IP:</b> %1.%2.%3.%4<br> <b>Away since:</b> %1<br> <b>Отсъства от:</b> %1<br> <b>N/A since:</b> %1<br> <b>Недостъпен от:</b> %1<br> <b>Possible client:</b> %1<br> <b>Вероятен клиент:</b> %1<br> Authorize Удостоверяване Move Преместване Local name: Име: Group: Група: Add Добавяне Name: Име: OK ОК Invalid nick or password Невалидни псевдоним или парола Service temporarily unavailable Услугата е временно недостъпна Incorrect nick or password Сгрешени псевдоним или парола Mismatch nick or password Псевдонимът или паролата не съвпадат Internal client error (bad input to authorizer) Вътрешна грешка на клиента (неуспешно удостоверяване) The users num connected from this IP has reached the maximum (reservation) Надвишен максимален брой потребители, свързани от този адрес (резервация) Rate limit exceeded (reservation). Please try to reconnect in a few minutes Надвишен брой опити (резервация). Моля опитайте отново след няколко минути is online е на линия is dnd не желае да бъде обезпокояван is n/a е недостъпен is occupied е зает is free for chat е свободен за разговор is invisible е невидим is offline е извън линия is away липсва at home е вкъщи at work е на работа having lunch се храни is evil е зъл in depression е депресиран %1 is reading your away message %1 прочита съобщението ви при отсъствие is away отсъства %1 is reading your x-status message %1 прочита съобщението на разширения ви статус Password is successfully changed Паролата е променена успешно Password is not changed Паролата не бе променена Privacy lists Лични списъци View/change my details Преглед/Промяна на моите подробности Change my password Промяна на моята парола You were added Бяхте добавен New group Нова група Rename group Преименуване на група Delete group Изтриване на група Send message Изпращане на съобщение Copy UIN to clipboard Копиране на UIN в клипборда Contact status check Проверка за статуса на контакта Message history Хронология на съобщенията Read away message Прочитане на съобщението при отсъствие Rename contact Преименуване на контакта Delete contact Изтриване на контакта Move to group Преместване в група Add to visible list Добавяне в списък "Видими" Add to invisible list Добавяне в списък "Невидими" Add to ignore list Добавяне в списък "Пренебрегнати" Add to ignore list Добавяне в списък "Пренебрегнати" Delete from visible list Изтриване от списък "Видими" Delete from invisible list Изтриване от списък "Невидими" Delete from ignore list Изтриване от списък "Пренебрегнати" Authorization request Заявка за удостоверяване Add to contact list Добавяне в списъка с контакти Allow contact to add me Позволяване да бъда добавен Remove myself from contact's list Премахване от списъка на контакта Read custom status Прочитане на разширения статус Edit note Редактиране на бележка Create group Създаване на група Delete group "%1"? Група "%1" да бъде изтрита? %1 away message %1 съобщение при отсъствие Delete %1 Изтриване на %1 Move %1 to: Преместване на %1 в: Authorization accepted Удостоверението е дадено Authorization declined Удостоверението бе отхвърлено %1 xStatus message Съобщение на разширения статус на %1 Contact does not support file transfer Контактът не поддържа предаване на файлове Angry Бесен Taking a bath В банята съм ... Tired Уморен съм Party Купонясвам Drinking beer Жуля бира Thinking Размишлявам Eating Хапвам Watching TV Гледам телевизия Meeting На среща съм Listening to music Слушам музика Business Имам работа Shooting Снимам Having fun Забавлявам се On the phone На телефона Gaming Играя Shopping Пазарувам Feeling sick Боледувам Sleeping Спя Surfing Сърфирам Browsing Ровя се в нета Working Бачкам Typing Набирам Picnic На тиферич On WC Друсам крушата To be or not to be Да бъда или да не бъда ... Custom status Разширен статус File request Заявка за предаване на файл File name: Име на файла: File size: Размер: File transfer: %1 Предаване на файла: %1 Waiting... Изчакване... Declined by remote user Отхвърлено от отдалечения потребител Accepted Приет Sending... Изпращане... Done Завършено Getting... Получаване... File transfer Предаване на файл Current file: Текущ файл: Speed: Скорост: Files: Файлове: Last time: Изминало време: Remained time: Оставащо време: Sender's IP: IP на изпращача: Status: Статус: Online На линия Offline Извън линия Free for chat Свободен за разговор Away Отсъства NA Недостъпен Occupied Зает DND Не безпокойте Invisible Невидим Lunch Храня се Evil Зъл Depression Депресиран At Home Вкъщи At Work На работа Custom status Разширен статус Privacy status Личен статус Visible for all Видим за всички Visible only for visible list Видим само за списък "Видими" Invisible only for invisible list Невидим само за списък "Невидими" Visible only for contact list Видим само за списъка с контакти Invisible for all Невидим за всички Additional Допълнителни is reading your away message прочита съобщението ви при отсъствие is reading your x-status message прочита съобщението на разширения ви статус Main Основни Autoconnect on start Автоматично свързване при стартиране Save my status on exit Запазване на статуса ми при излизане Don't send requests for avatarts Да не се изпращат заявки за аватари Reconnect after disconnect Повторно свързване при загуба на връзка Client ID: Идентификация на клиента: qutIM qutIM Protocol version: Версия на протокола: Client capability list: Възможности на клиента: Advanced Разширени Account button and tray icon Бутон на регистрацията в системния поднос Show main status icon Показване иконата на основния статус Show custom status icon Показване иконата на разширения статус Show last choosen Показване иконата на последно избрания статус Codepage( note that online messages use utf-8 in most cases ): Кодировка (имайте предвид, че в повечето случаи съобщенията са в UTF-8) Send Изпращане Connection Връзка Server Сървър Host: Хост: Port: Порт: Keep connection alive Поддържане на връзката Secure login Сигурно влизане Proxy connection Връзка през прокси Listen port for file transfer: Порт за предаване на файлове: Proxy Прокси Type: Тип: None Без Authentication Удостоверяване User name: Потребителско име: The remote host closed the connection. Отдалеченият хост затвори връзката. The host address was not found. Адресът на хоста не бе намерен. The socket operation failed because the application lacked the required privileges. Сокет операцията бе неуспешна, поради липса на необходимите права. The local system ran out of resources (e.g., too many sockets). Ресурсите на локалната система са изчерпани (напр. твърде много сокети). The socket operation timed out. Изтекло време на сокет операцията. The socket is using a proxy, and the proxy requires authentication. Сокетът ползва прокси, което изисква удостоверяване. An unidentified network error occurred. Възникна мрежови проблем, който не може да бъде определен. The connection was refused by the peer (or timed out). Отказана, от отсрещната страна, връзка (или изтекло време). An error occurred with the network (e.g., the network cable was accidentally plugged out). Възникна проблем с мрежата (напр. мрежовия кабел е измъкнат по погрешка). The requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). Заявената сокет операция не се поддържа от локалната операционна система (напр. липсва поддръжка на IPv6). The socket is using a proxy, and the proxy requires authentication. Сокетът ползва прокси, изискващо удостоверяване. Current password is invalid Текущата парола е невалидна Change password Промяна на парола Current password: Настояща парола: New password: Нова парола: Retype new password: Повторение на новата парола: Change Промяна Enter %1 password Въведете парола за %1 Enter your password Въведете вашата парола Your password: Вашата парола: Save password Запис на паролата Visible list Списък "Видими" I Информация D Изтриване Invisible list Списък "Невидими" Ignore list Списък "Пренебрегнати" Searching Търсене Nothing found Не са намерени резултати Always Винаги Authorize Удостоверяване Contact details Подробности за контакта Accept messages only from contact list Приемане на съобщения само от контакти в списъка Notify when blocking message Уведомяване при блокиране на съобщение Do not accept NIL messages concerning authorization Да не се приемат съобщения касаещи удостоверяване Do not accept NIL messages with URLs Да не се приемат съобщения с URL адреси Enable anti-spam bot Включване защитата срещу спам Anti-spam question: Въпрос за защитата срещу спам: Answer to question: Отговор на въпроса: Message after right answer: Съобщение при верен отговор: Don't send question/reply if my status is "invisible" Да не се изпраща въпрос/отговор ако статуса ми е "Невидим" Tabbed messaging mode Включване на раздели Remember opened tabs after closing chat window Запомняне на отворените раздели след затваряне на прозореца със съобщения Hide empty groups Скриване на празните групи Hide offline users Скриване на потребителите извън линия Hide online/offline separators Скриване на разделителя "На линия"/"Извън линия" Sort contacts by status Подреждане на контактите по статус Draw the background with using alternating colors Запълване на фона с редуващи се цветове Show client icons Показване иконите на клиентите Show avatars Показване на аватари Look'n'Feel Външен вид Opacity: Прозрачност: Window Style: Стил на прозореца: Regular Window Нормален прозорец Borderless Window Прозорец без ограждение Show groups Показване на групи Customize font: Персонализиране на шрифтове: Theme border Тема на ограждението Emoticon menu Емотикони Show popup windows Показване на изскачащи прозорци Width: Ширина: Height: Височина: Position: Позиция: Style: Стил: Upper left corner Горен ляв ъгъл Upper right corner Горен десен ъгъл Lower left corner Долен ляв ъгъл Lower right corner Долен десен ъгъл No slide Без плъзгане Slide vertically Вертикално плъзгане Slide horizontally Хоризонтално плъзгане Delete profile Изтриване на профил Remember password Запомняне на паролата Don't show on startup Да не се показва при стартиране Please choose IM protocol Моля изберете протокол System message for : %1 Системно съобщение: %1 Message from %1: %2 Съобщение от %1: %2 Blocked message from %1: %2 Блокирано съобщение от %1: %2 (BLOCKED) (БЛОКИРАНО) %1 has birthday today!! %1 има рожден ден днес!!! has birthday today!! има рожден ден днес!!! Images (*.gif *.png *.bmp *.jpg *.jpeg) Изображения (*.gif *.png *.bmp *.jpg *.jpeg) Open error Грешка при отваряне Image size is too big Твърде голям размер на изображението System event Системно събитие Outgoing message Изходящо съобщение Incoming message Входящо съобщение Contact is online Контакт влиза на линия Command Команда Executables Изпълними Sound files (*.wav) Звукови файлове (*.wav) Open sound file Отваряне на звуков файл Export sound style Експортиране на звукова схема XML files (*.xml) XML файлове (*.xml) Export... Експортиране... Import sound style Импортиране на звукова схема Could not open file "%1" for reading. Файлът "%1" не може да бъде отворен за четене. Error Грешка Events Събития No sound Без звук Sound file: Звуков файл: Import... Импортиране... Write your status message Въведете съобщение за вашия статус Do not show this dialog Да не се показва диалога повече Save Запис Not available Недостъпен Without authorization Без удостоверение Delete account Изтриване на сметка Delete %1 account? Изтриване на сметката %1? Account Сметка Autoconnect Автоматично свързване Add accounts to system tray menu Добавяне на сметките в менюто на системния поднос Always on top Винаги отгоре Auto-hide: Автоматично скриване след: Street address: Улица: Home address: Домашен адрес: Work address Служебен адрес: Occupation: Длъжност: Occupation: Сфера: Position: Длъжност: Web site: Уеб страница: Personal Лични данни Marital status: Семеен статус: Home page: Лична страница: Spoken language: Говорими езици: Authorization/webaware Удостоверяване/Видимост в мрежата My authorization is required Изисква се моето удостоверение All uses can add me without authorization Всички потребители могат да ме добавят без удостоверение Summary Обобщени General Общи About За мен Additinonal Допълнителни Request details Заявка за подробности Room: Стая: Nickname: Псевдоним: Join Присъединяване Contact list Списък с контакти Incorrect email Сгрешен Email Add to group: Добавяне в група Away Отсъствам Add contact Добавяне на контакт Open mailbox Отваряне на пощата Messages in mailbox: Съобщения в пощата: Rename Преименуване Remove Премахване Request authorization Заявка за удостоверение The Ram Овен The Bull Телец The Twins Близнаци The Crab Рак The Lion Лъв The Virgin Дева The Balance Везни The Scorpion Скорпион The Archer Стрелец The Capricorn Козирог The Water-bearer Водолей The Fish Риби January януари February февруари March март April април May май June юни July юли August август September септември October октомври November ноември December декември Search contact Търсене на контакт Surname: Фамилия: Sex: Пол: Region: Област: Birthday: Рожден ден: Day: Ден: Month: Месец: Zodiac: Зодия: Reject Отхвърляне Join groupchat Присъединяване към групов разговор (personal) (личен) (work) (служебен) (home) (домашен) (celluar) (мобилен) Resource: Ресурс: Priority: Приоритет: Priority: Приоритет: Change resource Промяна на ресурс Unknown error: No description. Неизвестна грешка: Липсва описание. Any Всички Any Всяка Any Всеки M М F Ж Nick Псевдоним Info Информация Show contact xStatus icon Показване на икони за разширен статус на контактите Show birthday/happy icon Показване на икона за рожден/празничен ден Show not authorized icon Показване на икони за "Без удостоверение" Show "visible" icon if contact in visible list Показване на икона за "видим" ако контакта е в списък "Видими" Show "invisible" icon if contact in invisible list Показване на икона за "невидим" ако контакта е в списък "Невидими" Show "ignore" icon if contact in ignore list Показване на икона за "пренебрегнат" ако контакта е в списък "Пренебреганти" Show contact's xStatus text in contact list Показване текста на разширения статус на контакта в списъка Show contact xStatus icon Показване на икона за разширен статус на контактите Show birthday/happy icon Показване на икона за рожден/празничен ден Show not authorized icon Показване на икона за "Без удостоверение" DND Не ме безпокойте Another client is loggin with this uin Друг клиент с този UIN се свързва Any без значение Birthday: Роден: Global proxy Общо прокси Other Друго Close tab/message window after sending a message Затваряне на раздела/прозореца след изпращане на съобщение Rate limit exceeded (reservation). Please try to reconnect in a few minutes Надвишен брой опити (резервация). Моля опитайте отново след няколко минути icqSettings Настройки за ICQ ChatWindowSettings Настройки на прозореца със съобщения JoinConferenceForm Конференция LoginForm Детайли за вход Arabic арабски Do not disturb Не безпокойте Phone Телефон Home Домашен Add new contact Добавяне на нов контакт Add User Добавяне на потребител Select Избор Add/find users Добавяне/Намиране на потребители General settings Общи настройки Connection settings Настройки на връзката Visitor Посетител Participant Участник Moderator Модератор banned със забрана member член owner собственик administrator администратор guest гост AccountManagement Управление на сметки Edit Редактиране new chat нов разговор Finish Приключване About За добавката Reciever: Получател: Size Размер Play Просвирване Unspecified Неопределен Location Местонахождение &Settings... &Настройки... &User interface settings... &Настройки на потребителския интерфейс... Plug-in settings... Настройки на добавките... Switch profile Смяна на профил Install Инсталиране Upgrade Надграждане Packages Пакети Not yet implemented В процес на разработка Actions Действия Images Изображения Remember Запомняне Loading Зареждане About За програмата Profile Профил Notifications Уведомления Update Актуализиране Insert Вмъкване Delete Изтриване Name Име &OK &OK Back Назад List View Списък File Файл Open Отваряне Save As Запис като New Folder Нова папка Directory: Директория Help Помощ Defaults По подразбиране Select All Избор на всички Reset Нулиране Discard Отхвърляне Retry Повторен опит Abort Прекратяване Save All Запис на всички Drive Устройство Show Показване Execute Изпълнение Value Стойност Preview Предварителен преглед Host found Хостът е намерен Computer Компютър Italic Курсив Bold Получер Oblique Полегат Space Интервал Refresh Обновяване Favorites Любими Continue Продължаване Reload Презареждане Paste Поставяне Open in New Window Отваряне в нов прозорец Open Link Отваряне на препратката Open Image Отваряне на изображението Open Frame Отваряне на рамката Cut Изрязване Copy Link Копиране препратката Copy Image Копиране на избражението Check Spelling Проверка на правописа <empty> <празно> Inspect Изследване Ignore Пренебрегване Warning Внимание Default По подразбиране Party! Купон! Description Описание Settings Настройки Format Формат Image: Изображение: Down Надолу Up Нагоре Import Импортиране Export Експортиране Information Информация <default> <по подразбиране> Shortcuts Препратки Age: Възраст: Bad resolver status Лош статус на DNS Author Автор Download Изтегляне Connecting Свързване Sounds Звуци Protocols Протоколи Appearance Външен вид Plugins Добавки qutim-0.2.0/languages/bg_BG/sources/massmessaging.ts0000644000175000017500000002561611245431636024135 0ustar euroelessareuroelessar Dialog Multiply Sending Многократно изпращане Items Списък Message Съобщение 15 15 Interval (in seconds): Интервал (в сек.): <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Notes:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">You can use the templates:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Name of the recipient </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Name of the sender (profile name)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Current time</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Бележки:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Могат да се ползват следните шаблони:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Име на получателя </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Име на изпращача (име на профила)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Текущо време</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TextLabel</span></p></body></html> Actions Действия Stop Спиране Send Изпращане Manager Accounts Сметки Unknown Неизвестен Error: message is empty Грешка: съобщението е празно Error: unknown account : %1 Грешка: неизвестна сметка : %1 Messaging Multiply Sending Многократно изпращане MessagingDialog Actions Действия Load buddy list Зареждане на списък с контакти Save buddy list Съхраняване на списъка с контакти Multiply sending: all jobs finished Многократно изпращане: всички задачи са приключени Load custom buddy list Зареждане на личен списък с контакти Sending message to %1: %v/%m Изпращане на съобщение до %1: %v/%m Sending message to %1 Изпращане на съобщение до %1 Sending message to %1 (%2/%3), time remains: %4 Изпращане на съобщение до %1 (%2/%3), оставащо време: %4 qutim-0.2.0/languages/bg_BG/sources/protocolicon.ts0000644000175000017500000000317611240003554023770 0ustar euroelessareuroelessar PluginSettings Select protocol icon theme pack: Избор на тема за протоколни икони: <Default> <по подразбиране> Change account icon Промяна иконата на сметката Change contact icon Промяна иконата на контакта qutim-0.2.0/languages/bg_BG/sources/msn.ts0000644000175000017500000002147311251401306022052 0ustar euroelessareuroelessar EdditAccount Editing %1 Редактиране на %1 Form General Общи Password: Парола: Autoconnect on start Автоматично свързване при стартиране Statuses Статуси Online На линия Busy Зает Idle Бездейства Will be right back Отсъства за малко Away Отсъства On the phone На телефона Out to lunch На обяд Don't show autoreply dialog Да не се показва прозореца за автоматичен отговор OK ОК Apply Прилагане Cancel Отказ LoginForm Form От E-mail: Email: Password: Парола: Autoconnect on start Автоматично свързване при стартиране MSNConnStatusBox Online На линия Busy Зает Idle Бездейства Will be right back Отсъства за малко Away Отсъства On the phone На телефона Out to lunch На обяд Invisible Невидим Offline Извън линия MSNContactList Without group Без група qutim-0.2.0/languages/bg_BG/sources/chess.ts0000644000175000017500000002521411240003554022360 0ustar euroelessareuroelessar Drawer Error moving Грешен ход You cannot move this figure because the king is in check Не може да местите тази фигура, защото Царя е в шах To castle За рокада Do you want to castle? Желаете ли да направите рокада? Yes Да No Не FigureDialog What figure should I set? Каква фигура да бъде зададена? GameBoard QutIM chess plugin Добавка за игра на шахмат в qutIM White game with Белите играят с Black game with Черните играят с Your turn. Ваш ред е. White game from Белите играят от Black game from Черните играят от Opponent turn. Ред е на противника ви. Your opponent has closed the game Противникът ви затвори играта End the game Приключване на играта Want you to end the game? You will lose it Сигурни ли сте, че желаете да приключите играта? Ще я загубите B K C Q Error! Грешка! Save image Запис на изображение Do you want to save the image? Желаете ли да съхраните избражението? Yes, save Да No, don't save Не Game over Край на играта You scored the game Вие спечелихте играта You have a mate. You lost the game. Мат! Загубихте играта. You have a stalemate Пат! chessPlugin Play chess Игра на шахмат QutIM chess plugin Добавка за игра на шахмат в qutIM invites you to play chess. Accept? ви кани на партия шах. Приемате ли? , with reason: " , причина: " don't accept your invite to play chess не приема поканата ви за партия шах gameboard QutIM chess plugin Добавка за игра на шахмат в qutIM Your moves: Вашите ходове: Opponent moves: Противниковите ходове: Game chat Разговор в играта qutim-0.2.0/languages/bg_BG/sources/fmtune.ts0000644000175000017500000006166711271524467022604 0ustar euroelessareuroelessar EditStations Format Формат URL URL <new> <нова> Delete station? Да бъде ли изтрита станцията? Delete stream? Да бъде ли изтрит потока? Import... Импортиране... All files (*.*) Всички файлове (*) Export... Експортиране... FMtune XML (*.ftx) FMtune XML (*.ftx) Dialog Настройване Edit stations Редактиране на станции Name: Име: Genre: Жанр: Language: Език: URL: URL: Format: Формат: Stream URL: URL на потока: Image: Изображение: Save Запис Delete stream Изтриване на поток ... ... Add stream Добавяне на поток Down Надолу Up Нагоре Add station Добавяне на станция Delete station Изтриване на станция Import Импортиране Export Експортиране Equalizer Dialog Настройване Equalizer Еквалайзер FastAddStation stream поток Fast add station Бързо добавяне на станция Name: Име: Stream URL: URL на потока: ImportExport Fast find: Бързо намиране: Finish Приключване Info Dialog Настройване Information Информация Stream: Поток: Radio: Радио: Song: Изпълнение: Time: Време: Bitrate: Честота: Cover: Обложка: QMessageBox An incorrect version of BASS was loaded. Заредена е неправилна версия на BASS. Can't initialize device Устройтсвото не може да бъде инициализирано Recording ... ... Recording Записване Stop Спиране Pause Пауза Record Запис Volume Volume Сила на звука Mute Заглушаване 000% 000% %1% %1% fmtunePlugin Radio on Пускане на радиото Radio off Спиране на радиото Copy song name Копиране на името на песента Information Информация Equalizer Еквалайзер Recording Записване Volume Сила на звука %1% %1% Mute Заглушаване Edit stations Редактиране на станции Fast add station Бързо добавяне на станция fmtuneSettings <default> <по подразбиране> fmtuneSettingsClass Settings Настройки General Общи Shortcuts Горещи клавиши Turn on/off radio: Спиране/Пускане на радиото: Volume up: Усилване на звука: Volume down: Намаляне на звука: Volume mute: Заглушаване: Activate global keyboard shortcuts Активиране на общите клавишни комбинации Devices Устройства Output device: Изходно устройство: Plugins Добавки Devices: Устройства: Stream URL: URL на потока: About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune добавка</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> qutim-0.2.0/languages/bg_BG/sources/yandexnarod.ts0000644000175000017500000007554611240003554023604 0ustar euroelessareuroelessar requestAuthDialogClass Authorization Удостоверяване Login: Потребителско име: Password: Парола: Remember Запомняне Captcha: Captcha: about:blank uploadDialog Uploading Качване Done Завършено uploadDialogClass Uploading... Upload started. Качването е стартирано. File: Файл: Progress: Напредък: Elapsed time: Изтекло време: Speed: Скорост: Cancel Отказ yandexnarodManage Yandex.Narod file manager Yandex.Narod файлов организатор Choose file Избор на файл yandexnarodManageClass Form От Get Filelist Получаване на списък от полета Upload File Качване на файл Actions: Действия: Clipboard Клип-борд Delete File Изтриване на файл line1 line2 ред 1 ред 2 Close Затваряне Files list: Списък от файлове: New Item Нов елемент yandexnarodNetMan Authorizing... Удостоверяване... Canceled Отказан Downloading filelist... Изтегляне на списък от файлове... Deleting files... Изтриване на файлове... Getting storage... Получаване на хранилището... File size is null Размерът на файла е null Starting upload... Начало на качването... Can't read file Файлът не може да бъде прочетен Can't get storage Хранилището не може да бъде получено Verifying... Проверка... Authorization failed Неуспешно удостоверяване Authorizing OK Удостоверяването е успешно Authorization captcha request Заявка за captcha удостоверяване Filelist downloaded (%1 files) Списъкът от файлове е изтеглен (%1 файла) File(s) deleted Изтрити файл(ове) Uploaded successfully Качването е успешно Verifying failed Неуспешна проверка yandexnarodPlugin Send file via Yandex.Narod Изпращане на файл чрез Yandex.Narod Manage Yandex.Narod files Организиране на Yandex.Narod файлове Choose file for Избор на файл за File sent Файлът е изпратен yandexnarodSettingsClass Settings Настройки Password Парола Login Потребителско име Test Authorization Проверка на удостоверението status статус <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p></body></html> Send file template Изпращане на шаблон за файл %N - file name; %U - file URL; %S - file size %N - име на файла; %U - връзка към файла; %S - размер на файла About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">File exchange via </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"> service</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">File exchange via </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"> service</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod добавка за qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Обмяна на файлове чрез услугата </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"></span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Александър Казарин</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> qutim-0.2.0/languages/bg_BG/sources/libnotify.ts0000644000175000017500000000374511257216433023271 0ustar euroelessareuroelessar LibnotifyLayer System message Системно съобщение %1 %1 Blocked message from %1 Блокирано съобщение от %1 has birthday today! има рожден ден днес! QObject System message from %1: <br /> Системно съобщение от %1: <br /> Message from %1:<br />%2 Съобщение от %1:<br />%2 %1</b><br /> is typing %1</b><br /> пише Blocked message from<br /> %1: %2 Блокирано съобщение от<br /> %1: %2 %1 has birthday today!! %1 има рожден ден днес!! qutim-0.2.0/languages/bg_BG/sources/connectioncheck.ts0000644000175000017500000002374211240003554024414 0ustar euroelessareuroelessar connectioncheckSettings Settings Настройки Check period (sec.): Период на проверка (сек.): Plugin status: Статус на добавката: Enabled Активна Disabled Неактивна Check method: Метод за проверка: Route table Маршрутна таблица Ping Ping About За добавката <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Добавка за проверка на връзката в qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Автор: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Игор 'Sqee' Сиромятников</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> qutim-0.2.0/languages/bg_BG/sources/icq.ts0000644000175000017500000104613211262173131022035 0ustar euroelessareuroelessar AccountEditDialog Editing %1 Редактиране на %1 AddAccountFormClass AddAccountForm Добавяне на сметка UIN: UIN: Password: Парола: Save password Запис на паролата Author Ruslan Nigmatullin Руслан Нигматуллин ConnectionError Invalid nick or password Невалидни псевдоним или парола Service temporarily unavailable Услугата е временно недостъпна Incorrect nick or password Сгрешени псевдоним или парола Mismatch nick or password Псевдонимът или паролата не съвпадат Internal client error (bad input to authorizer) Вътрешна грешка на клиента (неуспешно удостоверяване) Invalid account Невалидна сметка Deleted account Изтрита сметка Expired account Изтекла сметка No access to database Няма достъп до базата данни No access to resolver Няма достъп до DNS Invalid database fields Невалидни полета в базата данни Bad database status Лош статус на базата данни Bad resolver status Лош статус на DNS Internal error Вътрешна грешка Service temporarily offline Временно услугата не е на линия Suspended account Преустановена сметка DB send error Грешка при изпращане на базата данни DB link error Грешка при свързване с базата данни Reservation map error Грешка при резервация Reservation link error Грешка при резервация The users num connected from this IP has reached the maximum Надвишен максимален брой потребители, свързани от този адрес The users num connected from this IP has reached the maximum (reservation) Надвишен максимален брой потребители, свързани от този адрес (резервация) Rate limit exceeded (reservation). Please try to reconnect in a few minutes Надвишен брой опити (резервация). Моля опитайте отново след няколко минути User too heavily warned Потребителят е предупреден твърде сериозно Reservation timeout Изтекло време на резервация You are using an older version of ICQ. Upgrade required Използвате стара версия на ICQ. Необходимо е да обновите клиента You are using an older version of ICQ. Upgrade recommended Използвате стара версия на ICQ. Препоръчително е да обновите клиента Rate limit exceeded. Please try to reconnect in a few minutes Надвишен брой опити. Моля опитайте отново след няколко минути Can't register on the ICQ network. Reconnect in a few minutes Невъзможно регистриране в ICQ мрежата. Моля опитайте отново след няколко минути Invalid SecurID Невалиден SecurID Account suspended because of your age (age < 13) Сметката е преустановена поради възрастта ви (възраст < 13) Connection Error Грешка при свързване ContactSettingsClass ContactSettings Настройки на контакта Show contact xStatus icon Показване на икони за разширен статус на контактите Show birthday/happy icon Показване на икони за рожден/празничен ден Show not authorized icon Показване на икони за "Без удостоверение" Show "visible" icon if contact in visible list Показване на икона за "видим" ако контакта е в списък "Видими" Show "invisible" icon if contact in invisible list Показване на икона за "невидим" ако контакта е в списък "Невидими" Show "ignore" icon if contact in ignore list Показване на икона за "пренебрегнат" ако контакта е в списък "Пренебрегнати" Show contact's xStatus text in contact list Показване текста на разширения статус на контакта в списъка FileTransfer Send file Изпращане на файл Plugin Oscar Oscar Module-based realization of Oscar protocol Модулна реализация на OSCAR протокола ICQ ICQ Module-based realization of ICQ protocol Модулна реализация на ICQ протокола QObject ICQ General ICQ Общи Statuses Статуси Contacts Контакти <font size='2'><b>External ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Външен IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Internal ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Вътрешен IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Online time:</b> %1d %2h %3m %4s<br> <font size='2'><b>На линия от:</b> %1д. %2ч. %3мин. %4сек.<br> <b>Signed on:</b> %1<br> <b>Влязъл в:</b> %1<br> <font size='2'><b>Away since:</b> %1<br> <font size='2'><b>Отсъства от:</b> %1<br> <font size='2'><b>N/A since:</b> %1<br> <font size='2'><b>Недостъпен от:</b> %1<br> <b>Reg. date:</b> %1<br> <font size='2'><b>Регистрация от:</b> %1<br></font> <b>Possible client:</b> %1</font> <b>Вероятен клиент:</b> %1</font> <b>External ip:</b> %1.%2.%3.%4<br> <b>Външен IP:</b> %1.%2.%3.%4<br> <b>Internal ip:</b> %1.%2.%3.%4<br> <b>Вътрешен IP:</b> %1.%2.%3.%4<br> <b>Online time:</b> %1d %2h %3m %4s<br> <b>На линия от:</b> %1д. %2ч. %3мин. %4сек.<br> <b>Away since:</b> %1<br> <b>Отсъства от:</b> %1<br> <b>N/A since:</b> %1<br> <b>Недостъпен от:</b> %1<br> <b>Possible client:</b> %1<br> <b>Вероятен клиент:</b> %1<br> <font size='2'><b>Last Online:</b> %1</font> <font size='2'><b>Последно на линия:</b> %1</font> Open File Отваряне на файл All files (*) Всички файлове (*) Task Author Автор acceptAuthDialogClass acceptAuthDialog Заявка за удостоверяване Authorize Удостоверяване Decline Отхвърляне accountEdit Form OK ОК Apply Прилагане Cancel Отказ Icq settings Настройки за ICQ Password: Парола: Save password Запис на паролата AOL expert settings Настройки на AOL за напреднали Client id: Идентификация на клиента: Client major version: Основна версия на клиента: Client minor version: Допълнителна версия на клиента: Client lesser version: Второстепенна версия на клиента: Client build number: Номер на компилацията: Client id number: Номер за идентификация на клиента: Client distribution number: Номер за разпространение на клиента: Seq first id: Пореден номер: Server Сървър Host: Хост: Port: Порт: login.icq.com login.icq.com Save password: Запис на паролата: Autoconnect on start Автоматично свързване при стартиране Save my status on exit Запазване на статуса ми при излизане Keep connection alive Поддържане на връзката Secure login Сигурно влизане Proxy connection Връзка през прокси Listen port for file transfer: Порт за предаване на файлове: Proxy Прокси Type: Тип: None Без HTTP HTTP SOCKS 5 SOCKS 5 Authentication Удостоверяване User name: Потребителско име: addBuddyDialog Add %1 Добавяне на %1 Move Преместване addBuddyDialogClass addBuddyDialog Добавяне на контакт Local name: Име: Group: Група: Add Добавяне addRenameDialogClass addRenameDialog Добавяне/Преименуване Name: Име: OK ОК Return Връщане closeConnection Invalid nick or password Невалидни псевдоним или парола Service temporarily unavailable Услугата е временно недостъпна Incorrect nick or password Сгрешени псевдоним или парола Mismatch nick or password Псевдонимът или паролата не съвпадат Internal client error (bad input to authorizer) Вътрешна грешка на клиента (неуспешно удостоверяване) Invalid account Невалидна сметка Deleted account Изтрита сметка Expired account Изтекла сметка No access to database Няма достъп до базата данни No access to resolver Няма достъп до DNS Invalid database fields Невалидни полета в базата данни Bad database status Лош статус на базата данни Bad resolver status Лош статус на DNS Internal error Вътрешна грешка Service temporarily offline Временно услугата не е на линия Suspended account Преустановена сметка DB send error Грешка при изпращане на базата данни DB link error Грешка при свързване с базата данни Reservation map error Грешка при резервация Reservation link error Грешка при резервация The users num connected from this IP has reached the maximum Надвишен максимален брой потребители, свързани от този адрес The users num connected from this IP has reached the maximum (reservation) Надвишен максимален брой потребители, свързани от този адрес (резервация) Rate limit exceeded (reservation). Please try to reconnect in a few minutes Надвишен брой опити (резервация). Моля опитайте отново след няколко минути User too heavily warned Потребителят е предупреден твърде сериозно Reservation timeout Изтекло време на резервация You are using an older version of ICQ. Upgrade required Използвате стара версия на ICQ. Необходимо е да обновите клиента You are using an older version of ICQ. Upgrade recommended Използвате стара версия на ICQ. Препоръчително е да обновите клиента Rate limit exceeded. Please try to reconnect in a few minutes Надвишен брой опити. Моля опитайте отново след няколко минути Can't register on the ICQ network. Reconnect in a few minutes Невъзможно регистриране в ICQ мрежата. Моля опитайте отново след няколко минути Invalid SecurID Невалиден SecurID Account suspended because of your age (age < 13) Сметката е преустановена поради възрастта ви (възраст < 13) Connection Error Грешка при свързване Another client is loggin with this uin Друг клиент с този UIN се свързва contactListTree is online е на линия is away отсъства is dnd не желае да бъде обезпокояван is n/a е недостъпен is occupied е зает is free for chat е свободен за разговор is invisible е невидим is offline е извън линия at home е вкъщи at work е на работа having lunch се храни is evil е зъл in depression е депресиран %1 is reading your away message %1 прочита съобщението ви при отсъствие %1 is reading your x-status message %1 прочита съобщението на разширения ви статус Password is successfully changed Паролата е променена успешно Password is not changed Паролата не бе променена Add/find users Добавяне/Намиране на потребители Send multiple Многократно изпращане Privacy lists Лични списъци View/change my details Преглед/Промяна на моите подробности Change my password Промяна на моята парола You were added Бяхте добавен New group Нова група Rename group Преименуване на група Delete group Изтриване на група Send message Изпращане на съобщение Contact details Подробности за контакта Copy UIN to clipboard Копиране на UIN в клип-борда Contact status check Проверка за статуса на контакта Message history Хронология на съобщенията Read away message Прочитане на съобщението при отсъствие Rename contact Преименуване на контакта Delete contact Изтриване на контакта Move to group Преместване в група Add to visible list Добавяне в списък "Видими" Add to invisible list Добавяне в списък "Невидими" Add to ignore list Добавяне в списък "Пренебрегнати" Delete from visible list Изтриване от списък "Видими" Delete from invisible list Изтриване от списък "Невидими" Delete from ignore list Изтриване от списък "Пренебрегнати" Authorization request Заявка за удостоверяване Add to contact list Добавяне в списъка с контакти Allow contact to add me Позволяване да бъда добавен Remove myself from contact's list Премахване от списъка на контакта Read custom status Прочитане на разширения статус Edit note Редактиране на бележка Create group Създаване на група Delete group "%1"? Група "%1" да бъде изтрита? %1 away message %1 съобщение при отсъствие Delete %1 Изтриване на %1 Move %1 to: Преместване на %1 в: Accept authorization from %1 Приемане на удостоверението от %1 Authorization accepted Удостоверението е дадено Authorization declined Удостоверението бе отхвърлено %1 xStatus message Съобщение на разширения статус на %1 Contact does not support file transfer Контактът не поддържа предаване на файлове customStatusDialog Angry Бесен Taking a bath В банята съм Tired Уморен съм Party Купонясвам Drinking beer Жуля бира Thinking Размишлявам Eating Хапвам Watching TV Гледам телевизия Meeting На среща съм Coffee Жулвам кафенце Listening to music Слушам музика Business Имам работа Shooting Снимам Having fun Забавлявам се On the phone На телефона Gaming Играя Studying Уча Shopping Пазарувам Feeling sick Боледувам Sleeping Спя Surfing Сърфирам Browsing Ровя се в нета Working Бачкам Typing Набирам Picnic На тиферич On WC Друсам крушата To be or not to be Да бъда или да не бъда PRO 7 PRO 7 Love Влюбен съм Sex Плющя се Smoking Пуша Cold Зъзна Crying Рева Fear Шубе ме е Reading Чета Sport Фиткам In tansport Пътувам ? ? customStatusDialogClass Custom status Разширен статус Choose Избиране Cancel Отказ Set birthday/happy flag Показване на флага за рожден/празничен ден deleteContactDialogClass deleteContactDialog Изтриване на контакт Contact will be deleted. Are you sure? Контактът ще бъде изтрит. Сигурни ли сте? Delete contact history Изтриване на хронологията на контакта Yes Да No Не fileRequestWindow Save File Запис на файл All files (*) Всички файлове (*) fileRequestWindowClass File request Заявка за предаване на файл From: От: IP: IP: File name: Име на файла: File size: Размер: Accept Приемане Decline Отхвърляне fileTransferWindow File transfer: %1 Предаване на файла: %1 Waiting... Изчакване... Declined by remote user Отхвърлено от отдалечения потребител Accepted Приет Sending... Изпращане... Done Завършено Getting... Получаване... /s /сек. B В KB кВ MB МВ GB GB fileTransferWindowClass File transfer Предаване на файл Current file: Текущ файл: Done: Завършено: Speed: Скорост: File size: Размер: Files: Файлове: 1/1 1/1 Last time: Изминало време: Remained time: Оставащо време: Sender's IP: IP на изпращача: Status: Статус: Open Отваряне Cancel Отказ icqAccount Online На линия Offline Извън линия Free for chat Свободен за разговор Away Отсъствам NA Не съм достъпен Occupied Зает съм DND Не ме безпокойте Invisible Невидим Lunch Храня се Evil Зъл съм Depression Депресиран At Home Вкъщи At Work На работа Custom status Разширен статус Privacy status Личен статус Visible for all Видим за всички Visible only for visible list Видим само за списък "Видими" Invisible only for invisible list Невидим само за списък "Невидими" Visible only for contact list Видим само за списъка с контакти Invisible for all Невидим за всички Additional Допълнителни is reading your away message прочита съобщението ви при отсъствие is reading your x-status message прочита съобщението на разширения ви статус icqSettingsClass icqSettings Настройки за ICQ Main Основни Autoconnect on start Автоматично свързване при стартиране Save my status on exit Запазване на статуса ми при излизане Don't send requests for avatarts Да не се изпращат заявки за аватари Reconnect after disconnect Повторно свързване при загуба на връзка Client ID: Идентификация на клиента: qutIM qutIM ICQ 6 ICQ 6 ICQ 5.1 ICQ 5.1 ICQ 5 ICQ 5 ICQ Lite 4 ICQ Lite 4 ICQ 2003b Pro ICQ 2003b Pro ICQ 2002/2003a ICQ 2002/2003a Mac ICQ Mac ICQ QIP 2005 QIP 2005 QIP Infium QIP Infium - - Protocol version: Версия на протокола: Client capability list: Възможности на клиента: Codepage: (note that online messages use utf-8 in most cases) Кодировка: (имайте предвид, че в повечето случаи съобщенията са в UTF-8) Advanced Разширени Account button and tray icon Бутон на регистрацията в системния поднос Show main status icon Показване иконата на основния статус Show custom status icon Показване иконата на разширения статус Show last choosen Показване иконата на последно избрания статус Codepage( note that online messages use utf-8 in most cases ): Кодировка (имайте предвид, че в повечето случаи съобщенията са в UTF-8): Apple Roman Apple Roman Big5 Big5 Big5-HKSCS Big5-HKSCS EUC-JP EUC-JP EUC-KR EUC-KR GB18030-0 GB18030-0 IBM 850 IBM 850 IBM 866 IBM 866 IBM 874 IBM 874 ISO 2022-JP ISO 2022-JP ISO 8859-1 ISO 8859-1 ISO 8859-2 ISO 8859-2 ISO 8859-3 ISO 8859-3 ISO 8859-4 ISO 8859-4 ISO 8859-5 ISO 8859-5 ISO 8859-6 ISO 8859-6 ISO 8859-7 ISO 8859-7 ISO 8859-8 ISO 8859-8 ISO 8859-9 ISO 8859-9 ISO 8859-10 ISO 8859-10 ISO 8859-13 ISO 8859-13 ISO 8859-14 ISO 8859-14 ISO 8859-15 ISO 8859-15 ISO 8859-16 ISO 8859-16 Iscii-Bng Iscii-Bng Iscii-Dev Iscii-Dev Iscii-Gjr Iscii-Gjr Iscii-Knd Iscii-Knd Iscii-Mlm Iscii-Mlm Iscii-Ori Iscii-Ori Iscii-Pnj Iscii-Pnj Iscii-Tlg Iscii-Tlg Iscii-Tml Iscii-Tml JIS X 0201 JIS X 0201 JIS X 0208 JIS X 0208 KOI8-R KOI8-R KOI8-U KOI8-U MuleLao-1 MuleLao-1 ROMAN8 ROMAN8 Shift-JIS Shift-JIS TIS-620 TIS-620 TSCII TSCII UTF-8 UTF-8 UTF-16 UTF-16 UTF-16BE UTF-16BE UTF-16LE UTF-16LE Windows-1250 Windows-1250 Windows-1251 Windows-1251 Windows-1252 Windows-1252 Windows-1253 Windows-1253 Windows-1254 Windows-1254 Windows-1255 Windows-1255 Windows-1256 Windows-1256 Windows-1257 Windows-1257 Windows-1258 Windows-1258 WINSAMI2 WINSAMI2 multipleSending Send multiple Многократно изпращане multipleSendingClass multipleSending Многократно изпращане 1 1 Send Изпращане Stop Спиране networkSettingsClass networkSettings Настройки на мрежата Connection Връзка Server Сървър Host: Хост: Port: Порт: login.icq.com login.icq.com Keep connection alive Поддържане на връзката Secure login Сигурно влизане Proxy connection Връзка през прокси Listen port for file transfer: Порт за предаване на файлове: Proxy Прокси Type: Тип: None Без HTTP HTTP SOCKS 5 SOCKS 5 Authentication Удостоверяване User name: Потребителско име: Password: Парола: noteWidgetClass noteWidget Бележка OK ОК Cancel Отказ oscarProtocol The connection was refused by the peer (or timed out). Отказана, от отсрещната страна, връзка (или изтекло време). The remote host closed the connection. Отдалеченият хост затвори връзката. The host address was not found. Адресът на хоста не бе намерен. The socket operation failed because the application lacked the required privileges. Сокет операцията бе неуспешна, поради липса на необходимите права. The local system ran out of resources (e.g., too many sockets). Ресурсите на локалната система са изчерпани (напр. твърде много сокети). The socket operation timed out. Изтекло време на сокет операцията. An error occurred with the network (e.g., the network cable was accidentally plugged out). Възникна проблем с мрежата (напр. мрежовия кабел е измъкнат по погрешка). The requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). Заявената сокет операция не се поддържа от локалната операционна система (напр. липсва поддръжка на IPv6). The socket is using a proxy, and the proxy requires authentication. Сокетът ползва прокси, изискващо удостоверяване. An unidentified network error occurred. Възникна мрежови проблем, който не може да бъде определен. passwordChangeDialog Password error Грешка Current password is invalid Текущата парола е невалидна Confirm password does not match Паролите не съвпадат passwordChangeDialogClass Change password Промяна на парола Current password: Настояща парола: New password: Нова парола: Retype new password: Повторение на новата парола: Change Промяна passwordDialog Enter %1 password Въведете парола за %1 passwordDialogClass Enter your password Въведете вашата парола Your password: Вашата парола: Save password Запис на паролата OK ОК privacyListWindow Privacy lists Лични списъци privacyListWindowClass privacyListWindow Лични списъци Visible list Списък "Видими" UIN UIN Nick name Псевдоним I Информация D Изтриване Invisible list Списък "Невидими" Ignore list Списък "Пренебрегнати" readAwayDialogClass readAwayDialog Прочитане на съобщението при отсъствие <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Close Затваряне Return Връщане <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> requestAuthDialogClass Authorization request Заявка за удостоверяване Send Изпращане searchUser Add/find users Добавяне/Намиране на потребители Searching Търсене Nothing found Не са намерени резултати Done Завършено Always Винаги Authorize Удостоверяване Add to contact list Добавяне в списъка с контакти Contact details Подробности за контакта Send message Изпращане на съобщение Contact status check Проверка за статуса на контакта searchUserClass searchUser Търсене на потребител Search by: Търсене по: UIN UIN Email Email Other Друго Nick name: Псевдоним: First name: Име: Last name: Фамилия: Online only Само на линия More >> Още >> Advanced Разширени Gender: Пол: Female Жена Male Мъж Age: Възраст: 13-17 13-17 18-22 18-22 23-29 23-29 30-39 30-39 40-49 40-49 50-59 50-59 60+ 60+ Country: Държава: Afghanistan Афганистан Albania Албания Algeria Алжир American Samoa Американски Самоа Andorra Андора Angola Ангола Anguilla Ангуила Antigua Антигуа Antigua & Barbuda Антигуа и Барбуда Antilles Антилските о-ви Argentina Аржентина Armenia Армения Aruba Аруба AscensionIsland О-в Възнесение Australia Австралия Austria Австрия Azerbaijan Азербайджан Bahamas Бахамските о-ви Bahrain Бахрейн Bangladesh Бангладеш Barbados Барбейдос Barbuda Барбуда Belarus Беларус Belgium Белгия Belize Белийз Benin Бенин Bermuda Бермуда Bhutan Бутан Bolivia Боливия Botswana Боцвана Brazil Бразилия Brunei Бруней Bulgaria България Burkina Faso Буркина Фасо Burundi Бурунди Cambodia Камбоджа Cameroon Камерун Canada Канада Canary Islands Канарски о-ви Cayman Islands Каймански о-ви Chad Чад Chile, Rep. of Република Чили China Китай Christmas Island О-в Рождество Colombia Колумбия Comoros Коморски о-ви CookIslands О-ви Кук Costa Rica Коста Рика Croatia Хърватия Cuba Куба Cyprus Кипър Czech Rep. Чешката република Denmark Дания Diego Garcia Диего Гарсия Djibouti Джибути Dominica Доминика Dominican Rep. Доминиканска Република Ecuador Еквадор Egypt Египет El Salvador Ел Салвадор Eritrea Еритрея Estonia Естония Ethiopia Етиопия Faeroe Islands Фарьорски о-ви Falkland Islands Фолкленски о-ви Fiji Фиджи Finland Финландия France Франция FrenchAntilles Френски Антили French Guiana Френска Гуана French Polynesia Френска Полинезия Gabon Габон Gambia Гамбия Georgia Грузия Germany Германия Ghana Гана Gibraltar Гибралтар Greece Гърция Greenland Гренландия Grenada Гренада Guadeloupe Гуаделупе Guatemala Гватемала Guinea Гвинея Guinea-Bissau Гвинея-Бисау Guyana Гвиана Haiti Хаити Honduras Хондурас Hong Kong Хонг Конг Hungary Унгария Iceland Исландия India Индия Indonesia Индонезия Iraq Ирак Ireland Ирландия Israel Израел Italy Италия Jamaica Ямайка Japan Япония Jordan Йордания Kazakhstan Казахстан Kenya Кения Kiribati Кирибати Korea, North Северна Корея Korea, South Южна Корея Kuwait Кувейт Kyrgyzstan Киргизстан Laos Лаос Latvia Латвия Lebanon Ливан Lesotho Лесото Liberia Либерия Liechtenstein Лихтенщайн Lithuania Литва Luxembourg Люксембург Macau Макао Madagascar О-в Мадагаскар Malawi Малави Malaysia Малайзия Maldives Малдиви Mali Мали Malta Малта Marshall Islands Маршалски о-ви Martinique Мартиника Mauritania Мавритания Mauritius Мавриций MayotteIsland Майот Mexico Мексико Moldova, Rep. of Република Молдова Monaco Монако Mongolia Монголия Montserrat Монсерат Morocco Мароко Mozambique Мозамбик Myanmar Мианмар Namibia Намибия Nauru Науру Nepal Непал Netherlands Холандия Nevis Сейнт Китс и Невис NewCaledonia Нова Каледония New Zealand Нова Зеландия Nicaragua Никарагуа Niger Нигер Nigeria Нигерия Niue Ниуе Norfolk Island Норфолкски о-ви Norway Норвегия Oman Оман Pakistan Пакистан Palau Палау Panama Панама Papua New Guinea Папуа и Нова Гвинея Paraguay Парагвай Peru Перу Philippines Филипини Poland Полша Portugal Португалия Puerto Rico Пуерто Рико Qatar Катар Reunion Island О-в Съединение Romania Румъния Rota Island О-в Рота Russia Русия Rwanda Руанда Saint Lucia Санта Лучия Saipan Island О-в Сайпан San Marino Сан Марино Saudi Arabia Саудитска Арабия Scotland Шотландия Senegal Сенегал Seychelles Сейшелски о-ви Sierra Leone Сиера Леоне Singapore Сингапур Slovakia Словакия Slovenia Словения Solomon Islands Соломонови о-ви Somalia Сомалия SouthAfrica ЮАР Spain Испания Sri Lanka Шри Ланка St. Helena Св. Елена St. Kitts Св. Китс Sudan Судан Suriname Суринами Swaziland Свазиленд Sweden Швеция Switzerland Швейцария Syrian ArabRep. Сирия Taiwan Тайван Tajikistan Таджикистан Tanzania Танзания Thailand Тайланд Tinian Island О-в Тиниан Togo Того Tokelau Токелау Tonga Тонга Tunisia Тунис Turkey Турция Turkmenistan Туркменистан Tuvalu Тувалу Uganda Уганда Ukraine Украйна United Kingdom Обединено кралство Uruguay Уругвай USA САЩ Uzbekistan Узбекистан Vanuatu Вануату Vatican City Ватикан Venezuela Венецуела Vietnam Виетнам Wales Уелс Western Samoa Западна Самоа Yemen Йемен Yugoslavia Югославия Yugoslavia - Montenegro Черна Гора Yugoslavia - Serbia Сърбия Zambia Замбия Zimbabwe Зимбабве City: Град: Interests: Интереси: Art Изкуство Cars Автомобили Celebrity Fans Почитатели на известни личности Collections Колекциониране Computers Компютри Culture & Literature Култура и литература Fitness Фитнес Games Игри Hobbies Хобита ICQ - Providing Help ICQ - Помощ Internet Интернет Lifestyle Начин на живот Movies/TV Филми/Телевизия Music Музика Outdoor Activities Занимания на открито Parenting Отглеждане на деца Pets/Animals Домашни любимци/Животни Religion Религия Science/Technology Наука/Технологии Skills Умения Sports Спорт Web Design Уеб дизайн Nature and Environment Природа и околна среда News & Media Новини и медии Government Правителство Business & Economy Бизнес и икономика Mystics Мистерии Travel Пътуване Astronomy Астрономия Space Космос Clothing Дрехи Parties Партита Women Жени Social science Социални науки 60's 60-те 70's 70-те 80's 80-те 50's 50-те Finance and corporate Финанси и корпорации Entertainment Забава Consumer electronics Потребителска електроника Retail stores Складове на едро Health and beauty Здраве и красота Media Медия Household products Стоки за бита Mail order catalog Каталог за поръчка по поща Business services Бизнес услуги Audio and visual Аудио и видео Sporting and athletic Спортуване и атлетика Publishing Издателска дейност Home automation Автоматизация за бита Language: Език: Arabic арабски Bhojpuri божпури Bulgarian български Burmese бирмански Cantonese кантонийка Catalan каталонски Chinese китайски Croatian хърватски Czech чешки Danish датски Dutch холандски English английски Esperanto есперанто Estonian естонски Farsi фарси Finnish фински French френски Gaelic келтски German немски Greek гръцки Hebrew иврит Hindi хинди Hungarian унгарски Icelandic исландски Indonesian индонезийски Italian италиански Japanese японски Khmer кхмерски Korean корейски Lao лаоски Latvian латвийски Lithuanian литовски Malay малайски Norwegian норвежки Polish полски Portuguese португалски Romanian румънски Russian руски Serbian сръбски Slovak словашки Slovenian словенски Somali сомалийски Spanish испански Swahili суахили Swedish шведски Tagalog тагалог Tatar татарски Thai тайландски Turkish турски Ukrainian украински Urdu урду Vietnamese виетнамски Yiddish идиш Yoruba йоруба Afrikaans африкански Persian персийски Albanian албански Armenian арменски Kyrgyz киргизки Maltese малтийски Occupation: Сфера: Academic Академична Administrative Административна Art/Entertainment Изкуство/Забава College Student Колежанин Community & Social Обществена Education Образование Engineering Инженерни дейности Financial Services Финансови услуги High School Student Гимназист(ка) Home В къщи Law Правна Managerial Управленска Manufacturing Производство Medical/Health Медицина/Здраве Military Военна Non-Goverment Organisation Неправителствена организация Professional Професионална Retail Продажби на дребно Retired Пенсионер(ка) Science & Research Наука и изследователска дейност Technical Техническа University student Студент(ка) Web building Строителство Other services Други услуги Keywords: Ключови думи: Marital status: Семеен статус: Divorced Разведен(а) Engaged Сгоден(а) Long term relationship С продължителна връзка Married Женен/Омъжена Open relationship С отворена връзка Separated Разделен(а) Single Свободен/Свободна Widowed Вдовец/Вдовица Do not clear previous results Да не се изчистват предходните резултати Clear Изчистване Search Търсене Return Връщане Account Сметка Nick name Псевдоним First name Име Last name Фамилия Gender/Age Пол/Възраст Authorize Удостоверяване snacChannel Invalid nick or password Невалидни псевдоним или парола Service temporarily unavailable Услугата е временно недостъпна Incorrect nick or password Сгрешени псевдоним или парола Mismatch nick or password Псевдонимът или паролата не съвпадат Internal client error (bad input to authorizer) Вътрешна грешка на клиента (неуспешно удостоверяване) Invalid account Невалидна сметка Deleted account Изтрита сметка Expired account Изтекла сметка No access to database Няма достъп до базата данни No access to resolver Няма достъп до DNS Invalid database fields Невалидни полета в базата данни Bad database status Лош статус на базата данни Bad resolver status Лош статус на DNS Internal error Вътрешна грешка Service temporarily offline Временно услугата не е на линия Suspended account Преустановена сметка DB send error Грешка при изпращане на базата данни DB link error Грешка при свързване с базата данни Reservation map error Изтекло време на резервация The users num connected from this IP has reached the maximum Надвишен максимален брой потребители, свързани от този адрес The users num connected from this IP has reached the maximum (reservation) Надвишен максимален брой потребители, свързани от този адрес (резервация) Rate limit exceeded (reservation). Please try to reconnect in a few minutes Надвишен брой опити (резервация). Моля опитайте отново след няколко минути User too heavily warned Потребителят е предупреден твърде сериозно Reservation timeout Изтекло време на резервация You are using an older version of ICQ. Upgrade required Използвате стара версия на ICQ. Необходимо е да обновите клиента You are using an older version of ICQ. Upgrade recommended Използвате стара версия на ICQ. Препоръчително е да обновите клиента Rate limit exceeded. Please try to reconnect in a few minutes Надвишен брой опити. Моля опитайте отново след няколко минути Can't register on the ICQ network. Reconnect in a few minutes Невъзможно регистриране в ICQ мрежата. Моля опитайте отново след няколко минути Invalid SecurID Невалиден SecurID Account suspended because of your age (age < 13) Сметката е преустановена поради възрастта ви (възраст < 13) Connection Error: %1 Грешка при свързване: %1 statusSettingsClass statusSettings Настройки на статуса Allow other to view my status from the Web Разрешаване други да виждат моя статус при търсене и в мрежата Add additional statuses to status menu Допълнителни статуси в менюто Ask for xStauses automatically Автоматично запитване за разширен статус Notify about reading your status Известяване при прочитане на моя статус Away Отсъствам Lunch Храня се Evil Зъл Depression Депресиран съм At home Вкъщи At work На работа N/A Недостъпен Occupied Зает съм DND Не ме безпокойте Don't show autoreply dialog Да не се показва прозореца за автоматичен отговор userInformation %1 contact information Информация за %1 <img src='%1' height='%2' width='%3'> <img src='%1' height='%2' width='%3'> <b>Nick name:</b> %1 <br> <b>Псевдоним:</b> %1 <br> <b>First name:</b> %1 <br> <b>Име:</b> %1 <br> <b>Last name:</b> %1 <br> <b>Фамилия:</b> %1 <br> <b>Home:</b> %1 %2<br> <b>Дом. адрес:</b> %1 %2<br> <b>Gender:</b> %1 <br> <b>Пол:</b> %1 <br> <b>Age:</b> %1 <br> <b>Възраст:</b> %1 <br> <b>Birth date:</b> %1 <br> <b>Дата на раждане:</b> %1 <br> <b>Spoken languages:</b> %1 %2 %3<br> <b>Говорими езици:</b> %1 %2 %3<br> Open File Отваряне на файл Images (*.gif *.bmp *.jpg *.jpeg *.png) Изображения (*.gif *.png *.bmp *.jpg *.jpeg) Open error Грешка при отваряне Image size is too big Твърде голям размер на изображението <b>Protocol version: </b>%1<br> <b>Версия на протокола: </b>%1<br> <b>[Capabilities]</b><br> <b>[Възможности]</b><br> <b>[Short capabilities]</b><br> <b>[Съкратени възможности]</b><br> <b>[Direct connection extra info]</b><br> <b>[Допълнителна информация за директна връзка]</b><br> userInformationClass userInformation Информация за потребител Name Име Nick name: Псевдоним: Last login: Последно влизане: First name: Име: Last name: Фамилия: Account info: Информация за сметка: UIN: UIN: Registration: Регистрация от: Email: Email: Don't publish for all Да не е публично достъпен Home address: Домашен адрес: Country Държава City: Град: State: Щат: Zip: П.К.: Phone: Телефон: Fax: Факс: Cellular: Мобилен: Street address: Улица: Originally from: Роден в: Country: Държава: Work address Служебен адрес Street: Улица: Company Фирма Company name: Име на фирма: Occupation: Сфера: Div/dept: Отдел/Звено: Position: Длъжност: Web site: Уеб страница: Personal Лични данни Marital status: Семеен статус: Gender: Пол: Female Жена Male Мъж Home page: Лична страница: Age: Възраст: Birth date Дата на раждане Spoken language: Говорими езици: Interests Интереси <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Authorization/webaware Удостоверяване/Видимост в мрежата My authorization is required Изисква се моето удостоверение All uses can add me without authorization Всички потребители могат да ме добавят без удостоверение Allow others to view my status in search and from the web Разрешаване други да виждат моя статус при търсене и в мрежата Save Запис Close Затваряне Summary Обобщена General Обща Home Домашна Work Служебна About За мен Additinonal Допълнителна Request details Заявка за подробности Account info Информация за сметка Originally from Роден в Home address Домашен адрес <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> qutim-0.2.0/languages/bg_BG/sources/floaties.ts0000644000175000017500000000073411240003554023061 0ustar euroelessareuroelessar FloatiesPlugin Show floaties Плаващ контакт qutim-0.2.0/languages/bg_BG/sources/mrim.ts0000644000175000017500000020440711267012021022220 0ustar euroelessareuroelessar AddContactWidget Incorrect email Сгрешен Email Email you entered is not valid or empty! Въведеният Email е невалиден или празен! AddContactWidgetClass Add contact to list Добавяне към списъка с контакти Add to group: Добавяне в група: Contact email: Email на контакта: Contact nickname: Псевдоним на контакта: Add Добавяне AddNumberWidget Phone numbers Телефонни номера Home: Домашен: Work: Служебен: Mobile: Мобилен: Save Запис ContactDetails M М F Ж No avatar без аватар ContactDetailsClass Personal data Лични данни E-Mail Email Nickname Псевдоним Surname Фамилия Sex Пол Age Възраст Birthday Рожден ден Zodiac sign Зодия Living place Живущ <email> <email> <nickname> <псевдоним> Name Име E-Mail: E-Mail: Nickname: Псевдоним: Surname: Фамилия: Sex: Пол: Age: Възраст: Birthday: Роден: Zodiac sign: Зодиакален знак: Living place: Местожителство: Name: Име: <name> <име> <surname> <фамилия> <sex> <пол> <age> <възраст> <birthday> <рожден ден> <zodiac> <зодия> <living place> <местожителство> Avatar Аватар No avatar без аватар Add contact Добавяне на контакт Update Актуализиране Close Затваряне Contact details Подробности за контакта EditAccount Edit %1 account settings Редактиране настройките на %1 Edit account Редактиране на сметка Account Сметка Connection Връзка Use profile settings Настройки на потребителския профил FileTransferRequestWidget File transfer request from %1 Заявка за предаване на файл от %1 Form From: От: File(s): Файл(ове): File name Име на файла Size Размер Total size: Общ размер: Accept Приемане Decline Отхвърляне Choose location to save file(s) Изберете място за запис на файл(ове) FileTransferWidget File transfer with: %1 Предаване на файл от: %1 Waiting... Изчакване... Form Filename: Име на файла: Done: Завършено: Speed: Скорост: File size: Размер: Last time: Изминало време: Remained time: Оставащо време: Status: Статус: Open Отваряне Cancel Отказ /sec /сек Done! Завършено! Getting file... Получаване на файл... Close Затваряне Close window after tranfer is finished Затваряне на прозореца след приключване на предаването Sending file... Изпращане на файл... GeneralSettings GeneralSettings Общи настройки General settings Общи настройки Restore status at application's start Възстановяване на статуса при рестартиране Show phone contacts Показване на контакти от телефона Show status text in contact list Показване текста на статуса в списъка с контакти LoginFormClass LoginForm Детайли за вход Password: Парола: E-mail: Email: MRIMClient Add contact Добавяне на контакт Open mailbox Отваряне на пощата Search contacts Търсене на контакти Messages in mailbox: Съобщения в пощата: Unread messages: Непрочетени съобщения: User %1 is requesting authorization: Потребителят %1 изпрати заявка за удостоверяване: Server closed the connection. Authentication failed! Сървърът затвори връзката. Неуспешно удостоверяване! Server closed the connection. Another client with same login connected! Сървърът затвори връзката. Друг клиент, със същите детайли за вход се е свързал! Server closed the connection for unknown reason... Сървърът затвори връзката. Неизвестна причина... Unread emails: %1 Непрочетени писма: %1 Request authorization Заявка за удостоверение Pls authorize and add me to your contact list! Thanks! Email: Моля да ми дадете удостоверение и да ме добавите в списъка си с контакти. Благодаря! Email: Contact list operation failed! Неуспешно действие! No such user! Няма такъв потребител! Internal server error! Вътрешна грешка на сървъра! Invalid info provided! Предоставената информация е невалидна! User already exists! Потребителят вече съществува! Group limit reached! Достигнат е лимита на групата! No MPOP session available for you, sorry... Липсва достъпна МРОР сесия, съжаляваме... Sorry, no contacts found :( Try to change search parameters Съжаляваме, не бяха открити контакти :( Опитайте да промените параметрите за търсене Authorize contact Удостоверяване на контакта Rename contact Преименуване на контакта Delete contact Изтриване на контакта Move to group Преместване в група Add to list Добавяне към списъка Authorization request accepted by Заявката за удостоверяване бе приета от Unknown error! Неизвестна грешка! Send SMS Изпращане на SMS Add phone number Добавяне на телефонен номер MRIMCommonUtils B В KB кВ MB МВ GB GB MRIMContact Possible client: Вероятен клиент: Renaming %1 Преименуване на %1 You can't rename a contact while you're offline! Не е възможно да преименувате контакт докато сте извън линия! MRIMContactList Phone contacts Контакти от телефона MRIMLoginWidgetClass MRIMLoginWidget Детайли за вход Email: Email: Password: Парола: MRIMPluginSystem General settings Общи настройки Connection settings Настройки на връзката MRIMProto Offline message Съобщение извън линия Pls authorize and add me to your contact list! Thanks! Моля да ми дадете удостоверение и да ме добавите в списъка си с контакти. Благодаря! File transfer request from %1 couldn't be processed! Заявката за предаване на файл от %1 не може да бъде обслужена! MRIMSearchWidget Any без значение The Ram Овен The Bull Телец The Twins Близнаци The Crab Рак The Lion Лъв The Virgin Дева The Balance Везни The Scorpion Скорпион The Archer Стрелец The Capricorn Козирог The Water-bearer Водолей The Fish Риби Male Мъж Female Жена January януари February февруари March март April април May май June юни July юли August август September септември October октомври November ноември December декември MRIMSearchWidgetClass Search contacts Търсене на контакт Search form Търсене Nickname: Псевдоним: Name: Име: Surname: Фамилия: Sex: Пол: Country: Държава: Region: Област: Birthday: Роден: Day: Ден: Any без значение 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 Month: Месец: Zodiac: Зодия: Age from: На възраст от: to до Search only online contacts Търсене само в контакти на линия Show avatars Показване на аватари E-Mail Email Note: search is available only for following domains: Забележка: Търсенето е възможно само за следните домейни: @mail.ru, @list.ru, @bk.ru, @inbox.ru @mail.ru, @list.ru, @bk.ru, @inbox.ru Start search! Начало на търсенето! MoveToGroupWidget Move Преместване Move contact to group Преместване на контакта в група Move! Преместване! Group: Група: RenameWidget Rename Преименуване Rename contact Преименуване на контакта New name: Ново име: OK ОК SMSWidget Send SMS Изпращане на SMS Reciever: Получател: TextLabel Текстово поле Send! Изпращане! SearchResultsWidget M М F Ж SearchResultsWidgetClass Nick Псевдоним E-Mail Email Name Име Surname Фамилия Sex Пол Age Възраст Info Информация Add contact Добавяне на контакт Search results Резултати от търсенето SettingsWidget Default proxy Прокси по подразбиране SettingsWidgetClass SettingsWidget Настройки Connection params Параметри на връзката MRIM server host: MRIM сървър хост: MRIM server port: MRIM сървър порт: Use proxy Използване на прокси Proxy type: Тип: Proxy host: Хост: Proxy port: Порт: Proxy username: Потребителско име: Password: Парола: StatusManager Offline Извън линия Do Not Disturb Не безпокойте Free For Chat Свободен за разговор Online На линия Away Отсъствам Invisible Невидим Sick Болен At home Вкъщи Lunch Храня се Where am I? Къде съм? WC Друсам крушата Cooking Готвя Walking Разхождам се I'm an alien! Извънземен съм! I'm a shrimp! Скарида съм! I'm lost :( Изгубен съм :-( Crazy %) Луд %) Duck Патка Playing Играя Smoke Пуша At work На работа съм On the meeting На среща съм Beer Смуча бира Coffee Жулвам кафенце Shovel Копая Sleeping Спя On the phone На телефона съм In the university В университета съм School На училище съм You have the wrong number! Разполагате с грешния номер! LOL LOL Tongue Плезене Smiley Усмивка Hippy Хипи Depression Депресиран Crying Рева Surprised Учуден Angry Бесен Evil Зъл Ass Задник Heart Сърце Crescent Полумесец Coool! Якооо! Horns Рога Figa F*ck you! Мамицата ти! Skull Череп Rocket Ракета Ktulhu Goat Козел Must die!! Мри! Squirrel Катерица Party! Купон! Music Музика ? ? XtrazSettings Form Enable Xtraz Включване на Xtraz Xtraz packages: Xtraz пакети: Information: Информация: authwidgetClass Authorization request Заявка за удостоверяване Authorize Удостоверяване Reject Отхвърляне qutim-0.2.0/languages/bg_BG/binaries/0000755000175000017500000000000011273101310021003 5ustar euroelessareuroelessarqutim-0.2.0/languages/bg_BG/binaries/imagepub.qm0000644000175000017500000003303311240003554023142 0ustar euroelessareuroelessar@JB =0 2@J7:0B0 5 =5CA?5H5=Can't parse URLimagepubPluginB:070=CanceledimagepubPlugin(71>@ =0 87>1@065=85 Choose imageimagepubPlugin671>@ =0 D09; A 87>1@065=85Choose image fileimagepubPlugin0 07<5@JB =0 D09;0 5 nullFile size is nullimagepubPlugin>7>1@065=8O (*.png *.jpg *.gif)Image Files (*.png *.jpg *.gif)imagepubPluginJ@J7:0 :J< 87>1@065=85B> 15 87?@0B5=0Image URL sentimagepubPluginV7>1@065=85B> 5 87?@0B5=>: %N (%S 09B0) %UImage sent: %N (%S bytes) %UimagepubPlugin\7?@0I0=5 =0 87>1@065=85 G@57 ImagePub 4>102:0Send image via ImagePub pluginimagepubPluginP7?@0I0=5 =0 2@J7:0 :J< 87>1@065=85B>...Sending image URL...imagepubPlugin|%N - 8<5 =0 D09;0; %U - 2@J7:0 :J< D09;0; %S - @07<5@ =0 D09;0-%N - file name; %U - file URL; %S - file sizeimagepubSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">ImagePub 4>102:0 70 qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">7?@0I0=5 =0 87>1@065=8O G@57 ?C1;8G=8 C51 CA;C38</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">;5:A0=4J@ 070@8=</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> O

ImagePub qutIM plugin

v%VERSION%

Send images via public web services

Author:

Alexander Kazarin

boiler@co.ru

(c) 2009

imagepubSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

imagepubSettingsClass0 4>102:0B0AboutimagepubSettingsClassJ#A;C30 70 ?C1;8:C20=5 =0 87>1@065=8O:Image hosting service:imagepubSettingsClassF7?@0I0=5 =0 H01;>= 70 87>1@065=8O:Send image template:imagepubSettingsClass0AB@>9:8SettingsimagepubSettingsClass"7B5:;> 2@5<5: %1Elapsed time: %1 uploadDialog$09;: %1File: %1 uploadDialog"0?@54J:: %1 / %2Progress: %1 / %2 uploadDialog !:>@>AB: %1 kbpsSpeed: %1 kb/sec uploadDialog0G20=5... Uploading... uploadDialog B:07CanceluploadDialogClass7B5:;> 2@5<5: Elapsed time:uploadDialogClass $09;: File: uploadDialogClass0?@54J:: Progress:uploadDialogClass!:>@>AB:Speed:uploadDialogClass.0G20=5B> 5 AB0@B8@0=>.Upload started.uploadDialogClass Uploading...uploadDialogClassqutim-0.2.0/languages/bg_BG/binaries/connectioncheck.qm0000644000175000017500000001774611240003554024523 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">>102:0 70 ?@>25@:0 =0 2@J7:0B0 2 qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">3>@ 'Sqee' !8@><OB=8:>2</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> u

Connection check qutIM plugin

v 0.0.7

Author:

Igor 'Sqee' Syromyatnikov

sqee@olimp.ua

connectioncheckSettings0 4>102:0B0AboutconnectioncheckSettings$5B>4 70 ?@>25@:0: Check method:connectioncheckSettings45@8>4 =0 ?@>25@:0 (A5:.):Check period (sec.):connectioncheckSettings50:B82=0DisabledconnectioncheckSettings:B82=0EnabledconnectioncheckSettingsPingPingconnectioncheckSettings(!B0BCA =0 4>102:0B0:Plugin status:connectioncheckSettings"0@H@CB=0 B01;8F0 Route tableconnectioncheckSettings0AB@>9:8SettingsconnectioncheckSettingsqutim-0.2.0/languages/bg_BG/binaries/yandexnarod.qm0000644000175000017500000003642511240003554023675 0ustar euroelessareuroelessar| H0] RzN > a > k$@ BsL b2 <=B. k l  E h  s:) Tdaa o:pC~i;$#4>AB>25@O20=5 AuthorizationrequestAuthDialogClassCaptcha:Captcha:requestAuthDialogClass$>B@518B5;A:> 8<5:Login:requestAuthDialogClass0@>;0: Password:requestAuthDialogClass0?><=O=5RememberrequestAuthDialogClass about:blankrequestAuthDialogClass02J@H5=>Done uploadDialog0G20=5 Uploading uploadDialog B:07CanceluploadDialogClass7B5:;> 2@5<5: Elapsed time:uploadDialogClass $09;: File: uploadDialogClass0?@54J:: Progress:uploadDialogClass!:>@>AB:Speed:uploadDialogClass.0G20=5B> 5 AB0@B8@0=>.Upload started.uploadDialogClass Uploading...uploadDialogClass71>@ =0 D09; Choose fileyandexnarodManage>Yandex.Narod D09;>2 >@30=870B>@Yandex.Narod file manageryandexnarodManage59AB28O:Actions:yandexnarodManageClass;8?-1>@4 ClipboardyandexnarodManageClass0B20@O=5CloseyandexnarodManageClass"7B@820=5 =0 D09; Delete FileyandexnarodManageClass$!?8AJ: >B D09;>25: Files list:yandexnarodManageClassBFormyandexnarodManageClass<>;CG020=5 =0 A?8AJ: >B ?>;5B0 Get FilelistyandexnarodManageClass>2 5;5<5=BNew ItemyandexnarodManageClass0G20=5 =0 D09; Upload FileyandexnarodManageClass@54 1 @54 2 line1 line2yandexnarodManageClass@0O2:0 70 captcha C4>AB>25@O20=5Authorization captcha requestyandexnarodNetMan05CA?5H=> C4>AB>25@O20=5Authorization failedyandexnarodNetMan4#4>AB>25@O20=5B> 5 CA?5H=>Authorizing OKyandexnarodNetMan"#4>AB>25@O20=5...Authorizing...yandexnarodNetManH%@0=8;8I5B> =5 <>65 40 1J45 ?>;CG5=>Can't get storageyandexnarodNetMan>$09;JB =5 <>65 40 1J45 ?@>G5B5=Can't read fileyandexnarodNetManB:070=CanceledyandexnarodNetMan.7B@820=5 =0 D09;>25...Deleting files...yandexnarodNetManB7B53;O=5 =0 A?8AJ: >B D09;>25...Downloading filelist...yandexnarodNetMan0 07<5@JB =0 D09;0 5 nullFile size is nullyandexnarodNetMan"7B@8B8 D09;(>25)File(s) deletedyandexnarodNetManR!?8AJ:JB >B D09;>25 5 87B53;5= (%1 D09;0)Filelist downloaded (%1 files)yandexnarodNetMan8>;CG020=5 =0 E@0=8;8I5B>...Getting storage...yandexnarodNetMan,0G0;> =0 :0G20=5B>...Starting upload...yandexnarodNetMan&0G20=5B> 5 CA?5H=>Uploaded successfullyyandexnarodNetMan$5CA?5H=0 ?@>25@:0Verifying failedyandexnarodNetMan@>25@:0... Verifying...yandexnarodNetMan 71>@ =0 D09; 70Choose file for yandexnarodPlugin"$09;JB 5 87?@0B5= File sentyandexnarodPluginH@30=878@0=5 =0 Yandex.Narod D09;>25Manage Yandex.Narod filesyandexnarodPluginF7?@0I0=5 =0 D09; G@57 Yandex.NarodSend file via Yandex.NarodyandexnarodPlugin|%N - 8<5 =0 D09;0; %U - 2@J7:0 :J< D09;0; %S - @07<5@ =0 D09;0-%N - file name; %U - file URL; %S - file sizeyandexnarodSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod 4>102:0 70 qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">1<O=0 =0 D09;>25 G@57 CA;C30B0 </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"></span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">;5:A0=4J@ 070@8=</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> n

Yandex.Narod qutIM plugin

svn version

File exchange via Yandex.Narod service

Author:

Alexander Kazarin

boiler@co.ru

(c) 2008-2009

yandexnarodSettingsClass

yandexnarodSettingsClass0 4>102:0B0AboutyandexnarodSettingsClass">B@518B5;A:> 8<5LoginyandexnarodSettingsClass 0@>;0PasswordyandexnarodSettingsClass67?@0I0=5 =0 H01;>= 70 D09;Send file templateyandexnarodSettingsClass0AB@>9:8SettingsyandexnarodSettingsClass6@>25@:0 =0 C4>AB>25@5=85B>Test AuthorizationyandexnarodSettingsClass AB0BCAstatusyandexnarodSettingsClassqutim-0.2.0/languages/bg_BG/binaries/plugman.qm0000644000175000017500000004723211251453335023032 0ustar euroelessareuroelessar1 I\{9Y#E 3lj ,#stsFj@&j 3g6n;. H{x1 A   v @*\# 2` 2`J MgJ ~ ?d5 bL J  _ (  {  d = RV n f  . sK 5։ =zZ,L \CKqr;\̜ ,iK......ChooseCategoryPage@0D8:0ArtChooseCategoryPage/4@>CoreChooseCategoryPage81;8>B5:0LibChooseCategoryPage$81;8>B5:0 (*.dll)Library (*.dll)ChooseCategoryPageD81;8>B5:0 (*.dylib *.bundle *.so)Library (*.dylib *.bundle *.so)ChooseCategoryPage"81;8>B5:0 (*.so)Library (*.so)ChooseCategoryPage(0B53>@8O =0 ?0:5B0:Package category:ChooseCategoryPage>102:0PluginChooseCategoryPage 71>@ =0 3@0D8:0 Select artChooseCategoryPage71>@ =0 O4@> Select coreChooseCategoryPage&71>@ =0 181;8>B5:0Select libraryChooseCategoryPage03L>A=8: WizardPageChooseCategoryPage......ChoosePathPage03L>A=8: WizardPageChoosePathPage**ConfigPackagePage@0D8:0ArtConfigPackagePage 2B>@:Author:ConfigPackagePage0B53>@8O: Category:ConfigPackagePage/4@>CoreConfigPackagePage81;8>B5:0LibConfigPackagePage8F5=7:License:ConfigPackagePage<5:Name:ConfigPackagePage<5 =0 ?0:5B: Package name:ConfigPackagePage;0BD>@<0: Platform:ConfigPackagePage>102:0PluginConfigPackagePage @0B:> >?8A0=85:Short description:ConfigPackagePage"8?:Type:ConfigPackagePageURL:Url:ConfigPackagePage5@A8O:Version:ConfigPackagePage03L>A=8: WizardPageConfigPackagePage4520;84=0 25@A8O =0 ?0:5B0Invalid package versionQObject0<5B> =0 ?0:5B0 5 ?@07=>Package name is emptyQObject0"8?JB =0 ?0:5B0 5 ?@075=Package type is emptyQObject @5H=0 ?;0BD>@<0Wrong platformQObject59AB28OActionsmanager@8;030=5Applymanager, ?@>F5A =0 @07@01>B:0Not yet implementedmanagerPlugmanPlugmanmanager=0<8@0=5findmanagerB7B53;O=5 =0: %1%, A:>@>AB: %2 %3Downloading: %1%, speed: %2 %3plugDownloader /A5:MB/splugDownloader09B0/A5: bytes/secplugDownloader :/A5:kB/splugDownloader=AB0;8@0=5 =0: Installing: plugInstaller&520;845= ?0:5B: %1Invalid package: %1 plugInstaller*C6=> 5 @5AB0@B8@0=5! Need restart! plugInstaller@5<0E20=5 =0: Removing: plugInstallerL5CA?5H=> 872;8G0=5 =0 0@E820: %1 2 %2#Unable to extract archive: %1 to %2 plugInstallerF5CA?5H=> 8=AB0;8@0=5 =0 ?0:5B0: %1Unable to install package: %1 plugInstaller@5CA?5H=> >B20@O=5 =0 0@E820: %1Unable to open archive: %1 plugInstaller5CA?5H=> =043@0640=5 =0 ?0:5B0 %1: =AB0;8@0=0B0 25@A8O 5 ?>-0:BC0;=07Unable to update package %1: installed version is later plugInstallern=8<0=85: ?8B 70 ?@570?8A20=5 =0 AJI5AB2C20I8 D09;>25!,warning: trying to overwrite existing files! plugInstaller=AB0;8@0=5InstallplugItemDelegate@5<0E20=5RemoveplugItemDelegate58725AB5=UnknownplugItemDelegate043@0640=5UpgradeplugItemDelegate8=AB0;8@0= installedplugItemDelegate,70 >1@0B=> =043@0640=5isDowngradableplugItemDelegate70 8=AB0;8@0=5 isInstallableplugItemDelegate70 =043@0640=5 isUpgradableplugItemDelegate(#?@02;5=85 =0 ?0:5B8Manage packagesplugMan59AB28OActions plugManager&B<O=0 =0 ?@><5=8B5Revert changes plugManagerB:BC0;878@0=5 =0 A?8AJ:0 A ?0:5B8Update packages list plugManager*043@0640=5 =0 2A8G:8 Upgrade all plugManager 0:5B8PackagesplugPackageModel:>2@545=0 1070 40==8 A ?0:5B8Broken package databaseplugXMLHandlert5CA?5H=> ?@>G8B0=5 =0 1070B0 40==8. @>25@5B5 ?@020B0 A8.,Can't read database. Check your pesmissions.plugXMLHandler65CA?5H=> >B20@O=5 =0 D09;0Unable to open fileplugXMLHandler@5CA?5H=> 704020=5 =0 AJ4J@60=85Unable to set contentplugXMLHandler05CA?5H5= 70?8A =0 D09;0Unable to write fileplugXMLHandler4=5CA?5H=> >B20@O=5 =0 D09;unable to open fileplugXMLHandler@=5CA?5H=> 704020=5 =0 AJ4J@60=85unable to set contentplugXMLHandler<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">!?8AJ: A >3;540;0</span></p></body></html>

Mirror list

plugmanSettingsX<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">@>AB <5=846J@ 70 C?@02;5=85 =0 4>102:8 2 qutIM.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">;5:A59 !84>@>2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">>=B0:B8: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">2008-2009</span></p></body></html>

simple qutIM extentions manager.

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com


2008-2009

plugmanSettings<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">@>AB <5=846J@ 70 C?@02;5=85 =0 4>102:8 2 qutIM.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">;5:A59 !84>@>2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">>=B0:B8: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html>O

simple qutIM extentions manager.

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com


2008-2009

plugmanSettings0 4>102:0B0AboutplugmanSettings>102O=5AddplugmanSettings?8A0=85 DescriptionplugmanSettingsFormplugmanSettings<5NameplugmanSettings, ?@>F5A =0 @07@01>B:0Not yet implementedplugmanSettings0AB@>9:8SettingsplugmanSettingsURLUrlplugmanSettings&3@C?8@0=5 =0 ?0:5B8group packagesplugmanSettingsqutim-0.2.0/languages/bg_BG/binaries/growlnotification.qm0000644000175000017500000000555111262342141025120 0ustar euroelessareuroelessar25 (*)All files (*.*)GrowlNotificationLayer GrowlGrowlGrowlNotificationLayer$!J>1I5=85 >B qutIM QutIM messageGrowlNotificationLayer(71>@ =0 72C:>2 D09;Select sound fileGrowlNotificationLayer...... GrowlSettings >645= 45=Birthay GrowlSettings.>=B0:BJB 5 872J= ;8=8OContact offline GrowlSettings(>=B0:BJB 5 =0 ;8=8OContact online GrowlSettings:B828@0=>Enabled GrowlSettingsForm GrowlSettings"E>4OI> AJ>1I5=85Incoming message GrowlSettings2725ABO20=5 70 @>645= 45=Notify about birthdays GrowlSettings@725ABO20=5 ?@8 A>1AB25=8 70O2:8Notify about custom requests GrowlSettingsB725ABO20=5 ?@8 ?@><O=0 =0 AB0BCANotify about status changes GrowlSettings>725ABO20=5 :>30B> :>=B0:B ?8H5Notify when contact is typing GrowlSettingsP725ABO20=5 :>30B> 5 1;>:8@0=> AJ>1I5=85Notify when message is blocked GrowlSettingsN725ABO20=5 :>30B> 5 ?>;CG5=> AJ>1I5=85Notify when message is recieved GrowlSettings`725ABO20=5 :>30B> ?>B@518B5; 87;870 872J= ;8=8ONotify when user came offline GrowlSettingsX725ABO20=5 :>30B> ?>B@518B5; 2;870 =0 ;8=8ONotify when user came online GrowlSettings$7E>4OI> AJ>1I5=85Outgoing message GrowlSettings$7A:0G0I8 ?@>7>@F8Pop-ups GrowlSettings 2CF8Sounds GrowlSettings@8 AB0@B8@0=5Startup GrowlSettings@><5=O AB0BCA0 Status change GrowlSettings !8AB5<=> AJ18B85 System Event GrowlSettingsC;8@0=5reset GrowlSettings%1%1QObject0;>:8@0=> AJ>1I5=85 : %1Blocked message : %1QObject?8H5TypingQObject*8<0 @>645= 45= 4=5A!!has birthday today!!QObjectqutim-0.2.0/languages/bg_BG/binaries/w7i.qm0000644000175000017500000000053311255743560022074 0ustar euroelessareuroelessar BJ?>, :>5B> =5 8A:0< 40 ?@525640<!!!PIZDO!!!w7isettingsClassf>:0720=5 =0 A?8AJ:0 A :>=B0:B8 2 ?0=5;0 AJA 7040G8 Show contact list on the taskbarw7isettingsClassqutim-0.2.0/languages/bg_BG/binaries/ubuntunotify.qm0000644000175000017500000000126711240006134024125 0ustar euroelessareuroelessar:8@0=> AJ>1I5=85 >B %1Blocked message from %1UbuntuNotificationLayer!J>1I5=8e >B %1Message from %1UbuntuNotificationLayer4!8AB5<=> AJ>1I5=8e >B %1: System message from %1: UbuntuNotificationLayer*8<0 @>645= 45= 4=5A!!has birthday today!!UbuntuNotificationLayer"qutIM 5 AB0@B8@0=qutIM is startedUbuntuNotificationLayer ) , qutim-0.2.0/languages/bg_BG/binaries/floaties.qm0000644000175000017500000000016511240003554023157 0ustar euroelessareuroelessar=B0:B Show floatiesFloatiesPluginqutim-0.2.0/languages/bg_BG/binaries/mrim.qm0000644000175000017500000005755611253763713022353 0ustar euroelessareuroelessarc$&Z$&%&GGBuHY,DHY8HGQ<NHS.YDi}*HH9JKKu֍֍֍TPKB9-E.8%.2F>H5C5OClf <Q-rX'(Q+H93)B}}CHNGHx,J6J6~KdquKdM NNL"OyLSOcOiSLS.aSĘNsTlq?T T:>TNYaAIZ,,Q]ZFQ^h-j: !R/ OjZDZ.Z >&~n &O'L1w 5 TkQNdM=!ME#n4 6}aB+N FZ:e0EOhP UH5@*P\PlPQzX.NRƨ 0O#1=-DG-D@iE_V1oN*vdߒ=ߒ 4Tv)%Žj9P=. )PP:OSKR[1vbC`? m8}wiG7~l +BDa/8#8/C|RqSfuHgHJrȳsIJ;R#ɠI4.JL 9A$g ( 0 \ =R# t7J? yStR] q'z   9 qK2 @ <) W~ " "6 "B $7z F $7z:u 4 9̡S C f IC hF %U : > >)/ >E 0 HeDL X-1 Un Y* z(D R zZ Y-, :0720=5 =0 :>=B0:B8 >B B5;5D>=0Show phone contactsGeneralSettings`>:0720=5 B5:AB0 =0 AB0BCA0 2 A?8AJ:0 A :>=B0:B8 Show status text in contact listGeneralSettings Email:E-mail:LoginFormClass5B09;8 70 2E>4 LoginFormLoginFormClass0@>;0: Password:LoginFormClass&>102O=5 =0 :>=B0:B Add contact MRIMClient6>102O=5 =0 B5;5D>=5= =><5@Add phone number MRIMClient(>102O=5 :J< A?8AJ:0 Add to list MRIMClientN0O2:0B0 70 C4>AB>25@O20=5 15 ?@85B0 >B"Authorization request accepted by  MRIMClient4#4>AB>25@O20=5 =0 :>=B0:B0Authorize contact MRIMClient&5CA?5H=> 459AB285!Contact list operation failed! MRIMClient*7B@820=5 =0 :>=B0:B0Delete contact MRIMClient<>AB83=0B 5 ;8<8B0 =0 3@C?0B0!Group limit reached! MRIMClient6JB@5H=0 3@5H:0 =0 AJ@2J@0!Internal server error! MRIMClientL@54>AB025=0B0 8=D>@<0F8O 5 =520;84=0!Invalid info provided! MRIMClient&!J>1I5=8O 2 ?>I0B0:Messages in mailbox:  MRIMClient&@5<5AB20=5 2 3@C?0 Move to group MRIMClientR8?A20 4>ABJ?=0   A5A8O, AJ60;O20<5...+No MPOP session available for you, sorry... MRIMClient,O<0 B0:J2 ?>B@518B5;! No such user! MRIMClient$B20@O=5 =0 ?>I0B0 Open mailbox MRIMClient>;O 40 <8 4045B5 C4>AB>25@5=85 8 40 <5 4>1028B5 2 A?8AJ:0 A8 A :>=B0:B8. ;03>40@O! Email:>Pls authorize and add me to your contact list! Thanks! Email:  MRIMClient0@58<5=C20=5 =0 :>=B0:B0Rename contact MRIMClient.0O2:0 70 C4>AB>25@5=85Request authorization MRIMClient&"J@A5=5 =0 :>=B0:B8Search contacts MRIMClient 7?@0I0=5 =0 SMSSend SMS MRIMClient`!J@2J@JB 70B2>@8 2@J7:0B0. 58725AB=0 ?@8G8=0...2Server closed the connection for unknown reason... MRIMClient!J@2J@JB 70B2>@8 2@J7:0B0. @C3 :;85=B, AJA AJI8B5 45B09;8 70 2E>4 A5 5 A2J@70;!GServer closed the connection. Another client with same login connected! MRIMClienth!J@2J@JB 70B2>@8 2@J7:0B0. 5CA?5H=> C4>AB>25@O20=5!4Server closed the connection. Authentication failed! MRIMClient!J60;O20<5, =5 1OE0 >B:@8B8 :>=B0:B8 :( ?8B09B5 40 ?@><5=8B5 ?0@0<5B@8B5 70 BJ@A5=5G5B5=8 ?8A<0: %1Unread emails: %1 MRIMClient,5?@>G5B5=8 AJ>1I5=8O:Unread messages:  MRIMClientd>B@518B5;OB %1 87?@0B8 70O2:0 70 C4>AB>25@O20=5: %User %1 is requesting authorization:  MRIMClient:>B@518B5;OB 25G5 AJI5AB2C20!User already exists! MRIMClient BMRIMCommonUtilsGB GBMRIMCommonUtils: KBMRIMCommonUtils MBMRIMCommonUtils 5@>OB5= :;85=B:Possible client: MRIMContact$@58<5=C20=5 =0 %1 Renaming %1 MRIMContactz5 5 2J7<>6=> 40 ?@58<5=C20B5 :>=B0:B 4>:0B> AB5 872J= ;8=8O!0You can't rename a contact while you're offline! MRIMContact(>=B0:B8 >B B5;5D>=0Phone contactsMRIMContactList Email:Email:MRIMLoginWidgetClass5B09;8 70 2E>4MRIMLoginWidgetMRIMLoginWidgetClass0@>;0: Password:MRIMLoginWidgetClass*0AB@>9:8 =0 2@J7:0B0Connection settingsMRIMPluginSystem1I8 =0AB@>9:8General settingsMRIMPluginSystem|0O2:0B0 70 ?@54020=5 =0 D09; >B %1 =5 <>65 40 1J45 >1A;C65=0!4File transfer request from %1 couldn't be processed! MRIMProto*!J>1I5=85 872J= ;8=8OOffline message  MRIMProto>;O 40 <8 4045B5 C4>AB>25@5=85 8 40 <5 4>1028B5 2 A?8AJ:0 A8 A :>=B0:B8. ;03>40@O!6Pls authorize and add me to your contact list! Thanks! MRIMProto157 7=0G5=85AnyMRIMSearchWidget 0?@8;AprilMRIMSearchWidget 023CABAugustMRIMSearchWidget45:5<2@8DecemberMRIMSearchWidgetD52@C0@8FebruaryMRIMSearchWidget5=0FemaleMRIMSearchWidget O=C0@8JanuaryMRIMSearchWidgetN;8JulyMRIMSearchWidgetN=8JuneMRIMSearchWidgetJ6MaleMRIMSearchWidget<0@BMarchMRIMSearchWidget<09MayMRIMSearchWidget=>5<2@8NovemberMRIMSearchWidget>:B><2@8OctoberMRIMSearchWidgetA5?B5<2@8 SeptemberMRIMSearchWidget!B@5;5F The ArcherMRIMSearchWidget 57=8 The BalanceMRIMSearchWidget "5;5FThe BullMRIMSearchWidget>78@>3 The CapricornMRIMSearchWidget 0:The CrabMRIMSearchWidget 818The FishMRIMSearchWidgetJ2The LionMRIMSearchWidget25=The RamMRIMSearchWidget!:>@?8>= The ScorpionMRIMSearchWidget;87=0F8 The TwinsMRIMSearchWidget520 The VirginMRIMSearchWidget>4>;59The Water-bearerMRIMSearchWidgetJ@mail.ru, @list.ru, @bk.ru, @inbox.ru& @mail.ru, @list.ru, @bk.ru, @inbox.ruMRIMSearchWidgetClass11MRIMSearchWidgetClass1010MRIMSearchWidgetClass1111MRIMSearchWidgetClass1212MRIMSearchWidgetClass1313MRIMSearchWidgetClass1414MRIMSearchWidgetClass1515MRIMSearchWidgetClass1616MRIMSearchWidgetClass1717MRIMSearchWidgetClass1818MRIMSearchWidgetClass1919MRIMSearchWidgetClass22MRIMSearchWidgetClass2020MRIMSearchWidgetClass2121MRIMSearchWidgetClass2222MRIMSearchWidgetClass2323MRIMSearchWidgetClass2424MRIMSearchWidgetClass2525MRIMSearchWidgetClass2626MRIMSearchWidgetClass2727MRIMSearchWidgetClass2828MRIMSearchWidgetClass2929MRIMSearchWidgetClass33MRIMSearchWidgetClass3030MRIMSearchWidgetClass3131MRIMSearchWidgetClass44MRIMSearchWidgetClass55MRIMSearchWidgetClass66MRIMSearchWidgetClass77MRIMSearchWidgetClass88MRIMSearchWidgetClass99MRIMSearchWidgetClass0 2J7@0AB >B: Age from:MRIMSearchWidgetClass157 7=0G5=85AnyMRIMSearchWidgetClass  >45=: Birthday:MRIMSearchWidgetClassJ@6020:Country:MRIMSearchWidgetClass5=:Day:MRIMSearchWidgetClass EmailE-MailMRIMSearchWidgetClass 5A5F:Month:MRIMSearchWidgetClass<5:Name:MRIMSearchWidgetClassA524>=8<: Nickname:MRIMSearchWidgetClassr015;56:0: "J@A5=5B> 5 2J7<>6=> A0<> 70 A;54=8B5 4><59=8:5Note: search is available only for following domains:MRIMSearchWidgetClass1;0AB:Region:MRIMSearchWidgetClass$"J@A5=5 =0 :>=B0:BSearch contactsMRIMSearchWidgetClass"J@A5=5 Search formMRIMSearchWidgetClass@"J@A5=5 A0<> 2 :>=B0:B8 =0 ;8=8OSearch only online contactsMRIMSearchWidgetClass>;:Sex:MRIMSearchWidgetClass(>:0720=5 =0 020B0@8 Show avatarsMRIMSearchWidgetClass(0G0;> =0 BJ@A5=5B>! Start search!MRIMSearchWidgetClass$0<8;8O:Surname:MRIMSearchWidgetClass >48O:Zodiac:MRIMSearchWidgetClass4>toMRIMSearchWidgetClass @C?0:Group:MoveToGroupWidget@5<5AB20=5MoveMoveToGroupWidget>@5<5AB20=5 =0 :>=B0:B0 2 3@C?0Move contact to groupMoveToGroupWidget@5<5AB20=5!Move!MoveToGroupWidget>2> 8<5: New name: RenameWidgetOK RenameWidget@58<5=C20=5Rename RenameWidget0@58<5=C20=5 =0 :>=B0:B0Rename contact RenameWidget>;CG0B5;: Reciever: SMSWidget 7?@0I0=5 =0 SMSSend SMS SMSWidget7?@0I0=5!Send! SMSWidget"5:AB>2> ?>;5 TextLabel SMSWidgetFSearchResultsWidgetMSearchResultsWidget&>102O=5 =0 :>=B0:B Add contactSearchResultsWidgetClassJ7@0ABAgeSearchResultsWidgetClass EmailE-MailSearchResultsWidgetClass=D>@<0F8OInfoSearchResultsWidgetClass<5NameSearchResultsWidgetClassA524>=8<NickSearchResultsWidgetClass, 57C;B0B8 >B BJ@A5=5B>Search resultsSearchResultsWidgetClass>;SexSearchResultsWidgetClass$0<8;8OSurnameSearchResultsWidgetClass,@>:A8 ?> ?>4@0718@0=5 Default proxySettingsWidget"MRIM AJ@2J@ E>AB:MRIM server host:SettingsWidgetClass"MRIM AJ@2J@ ?>@B:MRIM server port:SettingsWidgetClass0@>;0: Password:SettingsWidgetClass %>AB: Proxy host:SettingsWidgetClass >@B: Proxy port:SettingsWidgetClass"8?: Proxy type:SettingsWidgetClass$>B@518B5;A:> 8<5:Proxy username:SettingsWidgetClass0AB@>9:8SettingsWidgetSettingsWidgetClass(7?>;720=5 =0 ?@>:A8 Use proxySettingsWidgetClass?? StatusManager 5A5=Angry StatusManager 04=8:Ass StatusManager :JI8At home StatusManager0 @01>B0 AJ<At work StatusManagerBAJAB20<Away StatusManager!<CG0 18@0Beer StatusManagerC;20< :0D5=F5Coffee StatusManager >B2OCooking StatusManager /:>>>!Coool! StatusManager C4 %)Crazy %) StatusManager>;C<5A5FCrescent StatusManager 520Crying StatusManager5?@5A8@0= Depression StatusManager5 157?>:>9B5Do Not Disturb StatusManager 0B:0Duck StatusManagerJ;Evil StatusManager0<8F0B0 B8! F*ck you! StatusManagerFiga StatusManager(!2>1>45= 70 @073>2>@ Free For Chat StatusManager >75;Goat StatusManager !J@F5Heart StatusManager%8?8Hippy StatusManager >30Horns StatusManager!:0@840 AJ<! I'm a shrimp! StatusManager72J=75<5= AJ<! I'm an alien! StatusManager73C15= AJ< :-( I'm lost :( StatusManager$ C=825@A8B5B0 AJ<In the university StatusManager52848< Invisible StatusManagerKtulhu StatusManagerLOLLOL StatusManager%@0=O A5Lunch StatusManager C78:0Music StatusManager@8! Must die!! StatusManager72J= ;8=8OOffline StatusManager0 A@5I0 AJ<On the meeting StatusManager0 B5;5D>=0 AJ< On the phone StatusManager0 ;8=8OOnline StatusManager C?>=!Party! StatusManager 3@0OPlaying StatusManager  0:5B0Rocket StatusManager0 CG8;8I5 AJ<School StatusManager >?0OShovel StatusManager >;5=Sick StatusManager '5@5?Skull StatusManager!?OSleeping StatusManager#A<82:0Smiley StatusManagerCH0Smoke StatusManager0B5@8F0Squirrel StatusManager #GC45= Surprised StatusManager;575=5Tongue StatusManager@CA0< :@CH0B0WC StatusManager 07E>640< A5Walking StatusManagerJ45 AJ<? Where am I? StatusManager8 07?>;030B5 A 3@5H=8O =><5@!You have the wrong number! StatusManager$:;NG20=5 =0 Xtraz Enable Xtraz XtrazSettingsForm XtrazSettings=D>@<0F8O: Information: XtrazSettingsXtraz ?0:5B8:Xtraz packages: XtrazSettings00O2:0 70 C4>AB>25@O20=5Authorization requestauthwidgetClass#4>AB>25@O20=5 AuthorizeauthwidgetClassBE2J@;O=5RejectauthwidgetClassqutim-0.2.0/languages/bg_BG/binaries/icq.qm0000644000175000017500000026335411256503046022150 0ustar euroelessareuroelessar$jl%j4!m89+G0cHmI$r I$' M)N:iQ1(RRY`MYY wZq _f~}}9Gq&yt$[EkEȺ>p˂\r(H N֍*'ِ*Kِ55?ݱ(c6^J78%$8%A@8)RF0&H5BHPVE+VEc~<forlDD9DBFM`xy  ȵ!F:G\ p} p}AR p}!N 8> $ < w#d2%n04`G4RM5D5`Y60i70y80K8G8dHNZHw9%HHIAyJ 5J <8J+hJ63J6pXw7x~(Ӯ N8Ȅ./.RZ$>pU(]јg%֍ ~j$Rں"hOIk4+<p4VA{b8%b%2&&-& .N?DO1Nyp CTTG::B:"-0!9?P 7g7C7#DHoEM_W2b,EVH@CMG hI&hI3hI kj.vDfK;.tR%6|  bIka 3ϗ8AMj=ZQ6ƾhR5U3ȡt ~.Z ~ $6o~&+6o~7pGº`ON`MNɂ9?O)~b5Ub5~!9lHi<ŧ^^B*^""fhtNViYqJ/LqJCyth#zW:Fzb/|6|N!7x1b$^~k'ڰvGI&IdImmIJ9LgĹsLfdR̵[PZD.a|Nb|G[yȣ*P|E-uG\z h6e6e@6e >58%8%>,jnC8@G]5L؄M?Ę҅ܓ~,軕Sl:0/ O׷mA6sA GUrr6Sȡ[Wu$fQ"%&  j ~lSW&~c(b+b+b7G+b,.D0 1**4~8(?8` "8`:Z8`<=O9=LAFGG4DzHGJ)KQNtTT87TVe0EuhH1VodCo_tv(Dv0{*2n1rj!bK.29Py?[?5?7N%3l{Shshs5(hs8)zpbiaih ~F{EVup6C7  5 A pGcOƜNƜ?ƜP۵+5Z0t .sפ#~+e8 Tu ^*9-DT1K)6@K!CRdIKstNgS'VѥUVѥZ~#|hDODp3?qk*$qk*@s*o*'tdMsގw Lu{4œ=zŽj^Žj=:I[ɟ.ʧ:FNLsG W ߀߀B^}NtNkDXPqQY4^x&ߗ1NmX_(^e`ZPk7#Iphr@zFQ~if~n=Vz@l0z[*44F}+̳R ̳R?"ٷ<ݮ"㤬q+ q4]yf'gF#y~ߦdS< () + + +=D+-ȱw.C47%8e-8eA9^a:<>O@s*DHKiZ`Q duq&eqVfUWfu&Rg&gWKhI2q q;qkum&uumyw̠~ V^ @p OPıRB[J zx`‰Fê,)"KʸG4^W4.rO4.'U S7hSSj*jlIL 1 \1 ~1 'B 1 94g6 7d& ۠ ~j < S? jt j) Ľ,O ȏ. ȣcs <l ʟ.D ' =  ׭jzg ۊ 8Y ^ 3 Lì  %-; % I) JVi N R T) Vi w {) { zC ' ,6 1)1 7YG Co F a8 Ws( c! cѫ dh< di# fʉ g hP k# wǹ% wǹ2 wǹ }] c$, %J %0 ǚ 4 85; /$ /$? /$ /e :p > >, >2 K J1 *E 0$ 0hd @ ~ 8F |8 8ɐ LJ8 Ț@e a .9 T y d ۰ F #/ F g ( b1 $ 7; ) ]l[ Nl Yl 0%c Sn, Sn d w d: d3 S S8 Si #G # 0Eak 2.- B3@ CU R? Td a dܰ nts s vI vI9M vI  y (  M" W @ W (  -a / 5I >Pg M} N% N0ͨ R͊(y Rz VC cP؟ f"a jc tg  5 C " C ޔ aCH Q ew H3[< 4K m dΚ hb { * $ bs. S  - Im/ Im CS C (7 Pt  us ) L  dq} _ &TNI 8/ TRNv Z U Z~ `>sd `>sq cB dtG ls^ o;| o;}6 o;}p qL qLB{ 8Q~y T T2s T Q(  <Ѐ Ĭ Ĭ? <?R ƍ 8b VD A m  K<# ;b}Er!ru;$#$#Vel'S$+b+b7+b^7dr`7w<9pG:0K~4J'eLi c# PG9Nu6c| ʭ%ʭ%@Vʭ% Z^ysG0be\4'! GەDPRX٬as@ax Xf`gk`kvCm3Khm3/tW( <Wr&T C&T;{&T|G3QVN0:iG" 540:B8@0=5 =0 %1 Editing %1AccountEditDialog$>102O=5 =0 A<5B:0AddAccountFormAddAccountFormClass0@>;0: Password:AddAccountFormClass"0?8A =0 ?0@>;0B0 Save passwordAddAccountFormClassUIN:UIN:AddAccountFormClass$ CA;0= 83<0BC;;8=Ruslan NigmatullinAuthor(@5CAB0=>25=0 A<5B:0 Suspended accountConnectionError0428H5= <0:A8<0;5= 1@>9 ?>B@518B5;8, A2J@70=8 >B B>78 04@5A (@575@20F8O)K The users num connected from this IP has reached the maximum (reservation)ConnectionErrorv!<5B:0B0 5 ?@5CAB0=>25=0 ?>@048 2J7@0ABB0 28 (2J7@0AB < 13)0Account suspended because of your age (age < 13)ConnectionError4>H AB0BCA =0 1070B0 40==8Bad database statusConnectionError">H AB0BCA =0 DNSBad resolver statusConnectionError52J7<>6=> @538AB@8@0=5 2 ICQ <@560B0. >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8=Can't register on the ICQ network. Reconnect in a few minutesConnectionError(@5H:0 ?@8 A2J@720=5Connection ErrorConnectionErrorF@5H:0 ?@8 A2J@720=5 A 1070B0 40==8 DB link errorConnectionErrorH@5H:0 ?@8 87?@0I0=5 =0 1070B0 40==8 DB send errorConnectionError7B@8B0 A<5B:0Deleted accountConnectionError7B5:;0 A<5B:0Expired accountConnectionError:!3@5H5=8 ?A524>=8< 8;8 ?0@>;0Incorrect nick or passwordConnectionErrorjJB@5H=0 3@5H:0 =0 :;85=B0 (=5CA?5H=> C4>AB>25@O20=5)/Internal client error (bad input to authorizer)ConnectionErrorJB@5H=0 3@5H:0Internal errorConnectionError"520;845= SecurIDInvalid SecurIDConnectionError 520;84=0 A<5B:0Invalid accountConnectionError>520;84=8 ?>;5B0 2 1070B0 40==8Invalid database fieldsConnectionError<520;84=8 ?A524>=8< 8;8 ?0@>;0Invalid nick or passwordConnectionErrorHA524>=8<JB 8;8 ?0@>;0B0 =5 AJ2?040BMismatch nick or passwordConnectionError6O<0 4>ABJ? 4> 1070B0 40==8No access to databaseConnectionError$O<0 4>ABJ? 4> DNSNo access to resolverConnectionError0428H5= 1@>9 >?8B8 (@575@20F8O). >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8KRate limit exceeded (reservation). Please try to reconnect in a few minutesConnectionErrorz0428H5= 1@>9 >?8B8. >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8=Rate limit exceeded. Please try to reconnect in a few minutesConnectionError*@5H:0 ?@8 @575@20F8OReservation link errorConnectionError*@5H:0 ?@8 @575@20F8OReservation map errorConnectionError67B5:;> 2@5<5 =0 @575@20F8OReservation timeoutConnectionError>@5<5==> CA;C30B0 =5 5 =0 ;8=8OService temporarily offlineConnectionError<#A;C30B0 5 2@5<5==> =54>ABJ?=0Service temporarily unavailableConnectionErrorx0428H5= <0:A8<0;5= 1@>9 ?>B@518B5;8, A2J@70=8 >B B>78 04@5AB@518B5;OB 5 ?@54C?@545= B2J@45 A5@8>7=>User too heavily warnedConnectionError7?>;720B5 AB0@0 25@A8O =0 ICQ. @5?>@JG8B5;=> 5 40 >1=>28B5 :;85=B0:You are using an older version of ICQ. Upgrade recommendedConnectionError7?>;720B5 AB0@0 25@A8O =0 ICQ. 5>1E>48<> 5 40 >1=>28B5 :;85=B07You are using an older version of ICQ. Upgrade requiredConnectionError*0AB@>9:8 =0 :>=B0:B0ContactSettingsContactSettingsClass>:0720=5 =0 8:>=0 70 "?@5=51@53=0B" 0:> :>=B0:B0 5 2 A?8AJ: "@5=51@53=0B8",Show "ignore" icon if contact in ignore listContactSettingsClass>:0720=5 =0 8:>=0 70 "=52848<" 0:> :>=B0:B0 5 2 A?8AJ: "52848<8"2Show "invisible" icon if contact in invisible listContactSettingsClass|>:0720=5 =0 8:>=0 70 "2848<" 0:> :>=B0:B0 5 2 A?8AJ: "848<8".Show "visible" icon if contact in visible listContactSettingsClassT>:0720=5 =0 8:>=8 70 @>645=/?@07=8G5= 45=Show birthday/happy iconContactSettingsClassf>:0720=5 =0 8:>=8 70 @07H8@5= AB0BCA =0 :>=B0:B8B5Show contact xStatus iconContactSettingsClassv>:0720=5 B5:AB0 =0 @07H8@5=8O AB0BCA =0 :>=B0:B0 2 A?8AJ:0+Show contact's xStatus text in contact listContactSettingsClassR>:0720=5 =0 8:>=8 70 "57 C4>AB>25@5=85"Show not authorized iconContactSettingsClass"7?@0I0=5 =0 D09; Send file FileTransferICQICQPluginF>4C;=0 @50;870F8O =0 ICQ ?@>B>:>;0(Module-based realization of ICQ protocolPluginJ>4C;=0 @50;870F8O =0 OSCAR ?@>B>:>;0*Module-based realization of Oscar protocolPlugin OscarOscarPlugin4<b>BAJAB20 >B:</b> %1<br>Away since: %1
QObjectB<b>J=H5= IP:</b> %1.%2.%3.%4<br>#External ip: %1.%2.%3.%4
QObjectF<b>JB@5H5= IP:</b> %1.%2.%3.%4<br>#Internal ip: %1.%2.%3.%4
QObject8<b>54>ABJ?5= >B:</b> %1<br>N/A since: %1
QObject^<b>0 ;8=8O >B:</b> %14. %2G. %3<8=. %4A5:.<br>'Online time: %1d %2h %3m %4s
QObjectB<b>5@>OB5= :;85=B:</b> %1</font>!Possible client: %1
QObject<<b>5@>OB5= :;85=B:</b> %1<br>Possible client: %1
QObjectf<font size='2'><b> 538AB@0F8O >B:</b> %1<br></font>Reg. date: %1
QObject.<b>;O7J; 2:</b> %1<br>Signed on: %1
QObjectR<font size='2'><b>BAJAB20 >B:</b> %1<br>(Away since: %1
QObjectn<font size='2'><b>J=H5= IP:</b> %1.%2.%3.%4<br></font>9External ip: %1.%2.%3.%4
QObjectr<font size='2'><b>JB@5H5= IP:</b> %1.%2.%3.%4<br></font>9Internal ip: %1.%2.%3.%4
QObjectd<font size='2'><b>>A;54=> =0 ;8=8O:</b> %1</font>,Last Online: %1QObjectV<font size='2'><b>54>ABJ?5= >B:</b> %1<br>'N/A since: %1
QObject|<font size='2'><b>0 ;8=8O >B:</b> %14. %2G. %3<8=. %4A5:.<br>6Online time: %1d %2h %3m %4s
QObject$A8G:8 D09;>25 (*) All files (*)QObject>=B0:B8ContactsQObjectICQ 1I8 ICQ GeneralQObject B20@O=5 =0 D09; Open FileQObject!B0BCA8StatusesQObject 2B>@AuthorTask#4>AB>25@O20=5 AuthorizeacceptAuthDialogClassBE2J@;O=5DeclineacceptAuthDialogClass00O2:0 70 C4>AB>25@O20=5acceptAuthDialogacceptAuthDialogClass<0AB@>9:8 =0 AOL 70 =0?@54=0;8AOL expert settings accountEdit@8;030=5Apply accountEdit#4>AB>25@O20=5Authentication accountEditH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect on start accountEdit B:07Cancel accountEdit,><5@ =0 :><?8;0F8OB0:Client build number: accountEditH><5@ 70 @07?@>AB@0=5=85 =0 :;85=B0:Client distribution number: accountEditD><5@ 70 845=B8D8:0F8O =0 :;85=B0:Client id number: accountEdit245=B8D8:0F8O =0 :;85=B0: Client id: accountEdit@B>@>AB5?5==0 25@A8O =0 :;85=B0:Client lesser version: accountEdit4A=>2=0 25@A8O =0 :;85=B0:Client major version: accountEdit>>?J;=8B5;=0 25@A8O =0 :;85=B0:Client minor version: accountEditForm accountEditHTTPHTTP accountEdit %>AB:Host: accountEdit 0AB@>9:8 70 ICQ Icq settings accountEdit,>44J@60=5 =0 2@J7:0B0Keep connection alive accountEdit:>@B 70 ?@54020=5 =0 D09;>25:Listen port for file transfer: accountEdit57None accountEditOK accountEdit0@>;0: Password: accountEdit >@B:Port: accountEdit @>:A8Proxy accountEdit$@J7:0 ?@57 ?@>:A8Proxy connection accountEditSOCKS 5SOCKS 5 accountEditH0?0720=5 =0 AB0BCA0 <8 ?@8 87;870=5Save my status on exit accountEdit"0?8A =0 ?0@>;0B0 Save password accountEdit$0?8A =0 ?0@>;0B0:Save password: accountEdit!83C@=> 2;870=5 Secure login accountEdit>@545= =><5@: Seq first id: accountEdit !J@2J@Server accountEdit"8?:Type: accountEdit$>B@518B5;A:> 8<5: User name: accountEditlogin.icq.com login.icq.com accountEdit>102O=5 =0 %1Add %1addBuddyDialog@5<5AB20=5MoveaddBuddyDialog>102O=5AddaddBuddyDialogClass @C?0:Group:addBuddyDialogClass<5: Local name:addBuddyDialogClass&>102O=5 =0 :>=B0:BaddBuddyDialogaddBuddyDialogClass<5:Name:addRenameDialogClassOKaddRenameDialogClass@JI0=5ReturnaddRenameDialogClass*>102O=5/@58<5=C20=5addRenameDialogaddRenameDialogClass(@5CAB0=>25=0 A<5B:0 Suspended accountcloseConnection0428H5= <0:A8<0;5= 1@>9 ?>B@518B5;8, A2J@70=8 >B B>78 04@5A (@575@20F8O)K The users num connected from this IP has reached the maximum (reservation)closeConnectionv!<5B:0B0 5 ?@5CAB0=>25=0 ?>@048 2J7@0ABB0 28 (2J7@0AB < 13)0Account suspended because of your age (age < 13)closeConnectionB@C3 :;85=B A B>78 UIN A5 A2J@720&Another client is loggin with this uincloseConnection4>H AB0BCA =0 1070B0 40==8Bad database statuscloseConnection">H AB0BCA =0 DNSBad resolver statuscloseConnection52J7<>6=> @538AB@8@0=5 2 ICQ <@560B0. >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8=Can't register on the ICQ network. Reconnect in a few minutescloseConnection(@5H:0 ?@8 A2J@720=5Connection ErrorcloseConnectionF@5H:0 ?@8 A2J@720=5 A 1070B0 40==8 DB link errorcloseConnectionH@5H:0 ?@8 87?@0I0=5 =0 1070B0 40==8 DB send errorcloseConnection7B@8B0 A<5B:0Deleted accountcloseConnection7B5:;0 A<5B:0Expired accountcloseConnection:!3@5H5=8 ?A524>=8< 8;8 ?0@>;0Incorrect nick or passwordcloseConnectionjJB@5H=0 3@5H:0 =0 :;85=B0 (=5CA?5H=> C4>AB>25@O20=5)/Internal client error (bad input to authorizer)closeConnectionJB@5H=0 3@5H:0Internal errorcloseConnection"520;845= SecurIDInvalid SecurIDcloseConnection 520;84=0 A<5B:0Invalid accountcloseConnection>520;84=8 ?>;5B0 2 1070B0 40==8Invalid database fieldscloseConnection<520;84=8 ?A524>=8< 8;8 ?0@>;0Invalid nick or passwordcloseConnectionHA524>=8<JB 8;8 ?0@>;0B0 =5 AJ2?040BMismatch nick or passwordcloseConnection6O<0 4>ABJ? 4> 1070B0 40==8No access to databasecloseConnection$O<0 4>ABJ? 4> DNSNo access to resolvercloseConnection0428H5= 1@>9 >?8B8 (@575@20F8O). >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8KRate limit exceeded (reservation). Please try to reconnect in a few minutescloseConnectionz0428H5= 1@>9 >?8B8. >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8=Rate limit exceeded. Please try to reconnect in a few minutescloseConnection*@5H:0 ?@8 @575@20F8OReservation link errorcloseConnection*@5H:0 ?@8 @575@20F8OReservation map errorcloseConnection67B5:;> 2@5<5 =0 @575@20F8OReservation timeoutcloseConnection>@5<5==> CA;C30B0 =5 5 =0 ;8=8OService temporarily offlinecloseConnection<#A;C30B0 5 2@5<5==> =54>ABJ?=0Service temporarily unavailablecloseConnectionx0428H5= <0:A8<0;5= 1@>9 ?>B@518B5;8, A2J@70=8 >B B>78 04@5AB@518B5;OB 5 ?@54C?@545= B2J@45 A5@8>7=>User too heavily warnedcloseConnection7?>;720B5 AB0@0 25@A8O =0 ICQ. @5?>@JG8B5;=> 5 40 >1=>28B5 :;85=B0:You are using an older version of ICQ. Upgrade recommendedcloseConnection7?>;720B5 AB0@0 25@A8O =0 ICQ. 5>1E>48<> 5 40 >1=>28B5 :;85=B07You are using an older version of ICQ. Upgrade requiredcloseConnection4%1 AJ>1I5=85 ?@8 >BAJAB285%1 away messagecontactListTreeN%1 ?@>G8B0 AJ>1I5=85B> 28 ?@8 >BAJAB285%1 is reading your away messagecontactListTree\%1 ?@>G8B0 AJ>1I5=85B> =0 @07H8@5=8O 28 AB0BCA#%1 is reading your x-status messagecontactListTreeH!J>1I5=85 =0 @07H8@5=8O AB0BCA =0 %1%1 xStatus messagecontactListTreeB@85<0=5 =0 C4>AB>25@5=85B> >B %1Accept authorization from %1contactListTree:>102O=5 2 A?8AJ:0 A :>=B0:B8Add to contact listcontactListTreeB>102O=5 2 A?8AJ: "@5=51@53=0B8"Add to ignore listcontactListTree8>102O=5 2 A?8AJ: "52848<8"Add to invisible listcontactListTree4>102O=5 2 A?8AJ: "848<8"Add to visible listcontactListTree@>102O=5/0<8@0=5 =0 ?>B@518B5;8Add/find userscontactListTree6>72>;O20=5 40 1J40 4>1025=Allow contact to add mecontactListTree0#4>AB>25@5=85B> 5 4045=>Authorization acceptedcontactListTree:#4>AB>25@5=85B> 15 >BE2J@;5=>Authorization declinedcontactListTree00O2:0 70 C4>AB>25@O20=5Authorization requestcontactListTree.@><O=0 =0 <>OB0 ?0@>;0Change my passwordcontactListTree.>4@>1=>AB8 70 :>=B0:B0Contact detailscontactListTreeT>=B0:BJB =5 ?>44J@60 ?@54020=5 =0 D09;>25&Contact does not support file transfercontactListTree>@>25@:0 70 AB0BCA0 =0 :>=B0:B0Contact status checkcontactListTree8>?8@0=5 =0 UIN 2 :;8?-1>@40Copy UIN to clipboardcontactListTree$!J74020=5 =0 3@C?0 Create groupcontactListTree7B@820=5 =0 %1 Delete %1contactListTree*7B@820=5 =0 :>=B0:B0Delete contactcontactListTreeF7B@820=5 >B A?8AJ: "@5=51@53=0B8"Delete from ignore listcontactListTree<7B@820=5 >B A?8AJ: "52848<8"Delete from invisible listcontactListTree87B@820=5 >B A?8AJ: "848<8"Delete from visible listcontactListTree$7B@820=5 =0 3@C?0 Delete groupcontactListTree6@C?0 "%1" 40 1J45 87B@8B0?Delete group "%1"?contactListTree, 540:B8@0=5 =0 15;56:0 Edit notecontactListTree2%@>=>;>38O =0 AJ>1I5=8OB0Message historycontactListTree(@5<5AB20=5 =0 %1 2: Move %1 to:contactListTree&@5<5AB20=5 2 3@C?0 Move to groupcontactListTree>20 3@C?0 New groupcontactListTree00@>;0B0 =5 15 ?@><5=5=0Password is not changedcontactListTree80@>;0B0 5 ?@><5=5=0 CA?5H=> Password is successfully changedcontactListTree8G=8 A?8AJF8 Privacy listscontactListTreeL@>G8B0=5 =0 AJ>1I5=85B> ?@8 >BAJAB285Read away messagecontactListTree<@>G8B0=5 =0 @07H8@5=8O AB0BCARead custom statuscontactListTreeB@5<0E20=5 >B A?8AJ:0 =0 :>=B0:B0!Remove myself from contact's listcontactListTree0@58<5=C20=5 =0 :>=B0:B0Rename contactcontactListTree*@58<5=C20=5 =0 3@C?0 Rename groupcontactListTree,7?@0I0=5 =0 AJ>1I5=85 Send messagecontactListTree*=>3>:@0B=> 87?@0I0=5 Send multiplecontactListTreeH@53;54/@><O=0 =0 <>8B5 ?>4@>1=>AB8View/change my detailscontactListTreeOEB5 4>1025=You were addedcontactListTree5 2:JI8at homecontactListTree5 =0 @01>B0at workcontactListTreeA5 E@0=8 having lunchcontactListTree5 45?@5A8@0= in depressioncontactListTree>BAJAB20is awaycontactListTree:=5 65;05 40 1J45 >157?>:>O20=is dndcontactListTree 5 7J;is evilcontactListTree,5 A2>1>45= 70 @073>2>@is free for chatcontactListTree5 =52848< is invisiblecontactListTree5 =54>ABJ?5=is n/acontactListTree 5 705B is occupiedcontactListTree5 872J= ;8=8O is offlinecontactListTree5 =0 ;8=8O is onlinecontactListTree??customStatusDialog 5A5=AngrycustomStatusDialog >2O A5 2 =5B0BrowsingcustomStatusDialog<0< @01>B0BusinesscustomStatusDialogC;20< :0D5=F5CoffeecustomStatusDialog J7=0ColdcustomStatusDialog 520CryingcustomStatusDialogC;O 18@0 Drinking beercustomStatusDialog %0?20<EatingcustomStatusDialog(C15 <5 5FearcustomStatusDialog>;54C20< Feeling sickcustomStatusDialog 3@0OGamingcustomStatusDialog0102;O20< A5 Having funcustomStatusDialogJBC20< In tansportcustomStatusDialog!;CH0< <C78:0Listening to musiccustomStatusDialog;N15= AJ<LovecustomStatusDialog0 A@5I0 AJ<MeetingcustomStatusDialog@CA0< :@CH0B0On WCcustomStatusDialog0 B5;5D>=0 On the phonecustomStatusDialog PRO 7PRO 7customStatusDialogC?>=OA20<PartycustomStatusDialog0 B8D5@8GPicniccustomStatusDialog'5B0ReadingcustomStatusDialog;NIO A5SexcustomStatusDialog !=8<0<ShootingcustomStatusDialog070@C20<ShoppingcustomStatusDialog!?OSleepingcustomStatusDialogCH0SmokingcustomStatusDialog $8B:0<SportcustomStatusDialog#G0StudyingcustomStatusDialog!J@D8@0<SurfingcustomStatusDialog 10=OB0 AJ< Taking a bathcustomStatusDialog 07<8H;O20<ThinkingcustomStatusDialog#<>@5= AJ<TiredcustomStatusDialog,0 1J40 8;8 40 =5 1J40To be or not to becustomStatusDialog018@0<TypingcustomStatusDialog ;540< B5;52878O Watching TVcustomStatusDialog 0G:0<WorkingcustomStatusDialog B:07CancelcustomStatusDialogClass718@0=5ChoosecustomStatusDialogClass 07H8@5= AB0BCA Custom statuscustomStatusDialogClassT>:0720=5 =0 D;030 70 @>645=/?@07=8G5= 45=Set birthday/happy flagcustomStatusDialogClassR>=B0:BJB I5 1J45 87B@8B. !83C@=8 ;8 AB5?&Contact will be deleted. Are you sure?deleteContactDialogClassJ7B@820=5 =0 E@>=>;>38OB0 =0 :>=B0:B0Delete contact historydeleteContactDialogClass5NodeleteContactDialogClass0YesdeleteContactDialogClass(7B@820=5 =0 :>=B0:BdeleteContactDialogdeleteContactDialogClass$A8G:8 D09;>25 (*) All files (*)fileRequestWindow0?8A =0 D09; Save FilefileRequestWindow@85<0=5AcceptfileRequestWindowClassBE2J@;O=5DeclinefileRequestWindowClass<5 =0 D09;0: File name:fileRequestWindowClass60O2:0 70 ?@54020=5 =0 D09; File requestfileRequestWindowClass 07<5@: File size:fileRequestWindowClassB:From:fileRequestWindowClassIP:IP:fileRequestWindowClass BfileTransferWindowGB GBfileTransferWindow: KBfileTransferWindow MBfileTransferWindow /A5:./sfileTransferWindow @85BAcceptedfileTransferWindowHBE2J@;5=> >B >B40;5G5=8O ?>B@518B5;Declined by remote userfileTransferWindow02J@H5=>DonefileTransferWindow,@54020=5 =0 D09;0: %1File transfer: %1fileTransferWindow>;CG020=5... Getting...fileTransferWindow7?@0I0=5... Sending...fileTransferWindow7G0:20=5... Waiting...fileTransferWindow1/11/1fileTransferWindowClass B:07CancelfileTransferWindowClass"5:CI D09;: Current file:fileTransferWindowClass02J@H5=>:Done:fileTransferWindowClass 07<5@: File size:fileTransferWindowClass"@54020=5 =0 D09; File transferfileTransferWindowClass$09;>25:Files:fileTransferWindowClass7<8=0;> 2@5<5: Last time:fileTransferWindowClassB20@O=5OpenfileTransferWindowClassAB020I> 2@5<5:Remained time:fileTransferWindowClass IP =0 87?@0I0G0: Sender's IP:fileTransferWindowClass!:>@>AB:Speed:fileTransferWindowClass!B0BCA:Status:fileTransferWindowClass>?J;=8B5;=8 Additional icqAccount :JI8At Home icqAccount0 @01>B0At Work icqAccountBAJAB20<Away icqAccount 07H8@5= AB0BCA Custom status icqAccount 5 <5 157?>:>9B5DND icqAccount5?@5A8@0= Depression icqAccountJ; AJ<Evil icqAccount(!2>1>45= 70 @073>2>@ Free for chat icqAccount52848< Invisible icqAccount"52848< 70 2A8G:8Invisible for all icqAccountB52848< A0<> 70 A?8AJ: "52848<8"!Invisible only for invisible list icqAccount%@0=O A5Lunch icqAccount5 AJ< 4>ABJ?5=NA icqAccount05B AJ<Occupied icqAccount72J= ;8=8OOffline icqAccount0 ;8=8OOnline icqAccount8G5= AB0BCAPrivacy status icqAccount848< 70 2A8G:8Visible for all icqAccount@848< A0<> 70 A?8AJ:0 A :>=B0:B8Visible only for contact list icqAccount:848< A0<> 70 A?8AJ: "848<8"Visible only for visible list icqAccountH?@>G8B0 AJ>1I5=85B> 28 ?@8 >BAJAB285is reading your away message icqAccountV?@>G8B0 AJ>1I5=85B> =0 @07H8@5=8O 28 AB0BCA is reading your x-status message icqAccount--icqSettingsClassRCB>= =0 @538AB@0F8OB0 2 A8AB5<=8O ?>4=>AAccount button and tray iconicqSettingsClass 07H8@5=8AdvancedicqSettingsClassApple Roman Apple RomanicqSettingsClassH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect on starticqSettingsClassBig5Big5icqSettingsClassBig5-HKSCS Big5-HKSCSicqSettingsClass245=B8D8:0F8O =0 :;85=B0: Client ID:icqSettingsClass.J7<>6=>AB8 =0 :;85=B0:Client capability list:icqSettingsClass>48@>2:0: (8<09B5 ?@54284, G5 2 ?>25G5B> A;CG08 AJ>1I5=8OB0 A0 2 UTF-8)=Codepage: (note that online messages use utf-8 in most cases)icqSettingsClassF0 =5 A5 87?@0I0B 70O2:8 70 020B0@8 Don't send requests for avatartsicqSettingsClass EUC-JPEUC-JPicqSettingsClass EUC-KREUC-KRicqSettingsClassGB18030-0 GB18030-0icqSettingsClassIBM 850IBM 850icqSettingsClassIBM 866IBM 866icqSettingsClassIBM 874IBM 874icqSettingsClassICQ 2002/2003aICQ 2002/2003aicqSettingsClassICQ 2003b Pro ICQ 2003b ProicqSettingsClass ICQ 5ICQ 5icqSettingsClassICQ 5.1ICQ 5.1icqSettingsClass ICQ 6ICQ 6icqSettingsClassICQ Lite 4 ICQ Lite 4icqSettingsClassISO 2022-JP ISO 2022-JPicqSettingsClassISO 8859-1 ISO 8859-1icqSettingsClassISO 8859-10 ISO 8859-10icqSettingsClassISO 8859-13 ISO 8859-13icqSettingsClassISO 8859-14 ISO 8859-14icqSettingsClassISO 8859-15 ISO 8859-15icqSettingsClassISO 8859-16 ISO 8859-16icqSettingsClassISO 8859-2 ISO 8859-2icqSettingsClassISO 8859-3 ISO 8859-3icqSettingsClassISO 8859-4 ISO 8859-4icqSettingsClassISO 8859-5 ISO 8859-5icqSettingsClassISO 8859-6 ISO 8859-6icqSettingsClassISO 8859-7 ISO 8859-7icqSettingsClassISO 8859-8 ISO 8859-8icqSettingsClassISO 8859-9 ISO 8859-9icqSettingsClassIscii-Bng Iscii-BngicqSettingsClassIscii-Dev Iscii-DevicqSettingsClassIscii-Gjr Iscii-GjricqSettingsClassIscii-Knd Iscii-KndicqSettingsClassIscii-Mlm Iscii-MlmicqSettingsClassIscii-Ori Iscii-OriicqSettingsClassIscii-Pnj Iscii-PnjicqSettingsClassIscii-Tlg Iscii-TlgicqSettingsClassIscii-Tml Iscii-TmlicqSettingsClassJIS X 0201 JIS X 0201icqSettingsClassJIS X 0208 JIS X 0208icqSettingsClass KOI8-RKOI8-RicqSettingsClass KOI8-UKOI8-UicqSettingsClassMac ICQMac ICQicqSettingsClassA=>2=8MainicqSettingsClassMuleLao-1 MuleLao-1icqSettingsClass(5@A8O =0 ?@>B>:>;0:Protocol version:icqSettingsClassQIP 2005QIP 2005icqSettingsClassQIP Infium QIP InfiumicqSettingsClass ROMAN8ROMAN8icqSettingsClassN>2B>@=> A2J@720=5 ?@8 703C10 =0 2@J7:0Reconnect after disconnecticqSettingsClassH0?0720=5 =0 AB0BCA0 <8 ?@8 87;870=5Save my status on exiticqSettingsClassShift-JIS Shift-JISicqSettingsClassL>:0720=5 8:>=0B0 =0 @07H8@5=8O AB0BCAShow custom status iconicqSettingsClassZ>:0720=5 8:>=0B0 =0 ?>A;54=> 871@0=8O AB0BCAShow last choosenicqSettingsClassH>:0720=5 8:>=0B0 =0 >A=>2=8O AB0BCAShow main status iconicqSettingsClassTIS-620TIS-620icqSettingsClass TSCIITSCIIicqSettingsClass UTF-16UTF-16icqSettingsClassUTF-16BEUTF-16BEicqSettingsClassUTF-16LEUTF-16LEicqSettingsClass UTF-8UTF-8icqSettingsClassWINSAMI2WINSAMI2icqSettingsClassWindows-1250 Windows-1250icqSettingsClassWindows-1251 Windows-1251icqSettingsClassWindows-1252 Windows-1252icqSettingsClassWindows-1253 Windows-1253icqSettingsClassWindows-1254 Windows-1254icqSettingsClassWindows-1255 Windows-1255icqSettingsClassWindows-1256 Windows-1256icqSettingsClassWindows-1257 Windows-1257icqSettingsClassWindows-1258 Windows-1258icqSettingsClass 0AB@>9:8 70 ICQ icqSettingsicqSettingsClass qutIMqutIMicqSettingsClass*=>3>:@0B=> 87?@0I0=5 Send multiplemultipleSending11multipleSendingClass7?@0I0=5SendmultipleSendingClass!?8@0=5StopmultipleSendingClass*=>3>:@0B=> 87?@0I0=5multipleSendingmultipleSendingClass#4>AB>25@O20=5AuthenticationnetworkSettingsClass @J7:0 ConnectionnetworkSettingsClassHTTPHTTPnetworkSettingsClass %>AB:Host:networkSettingsClass,>44J@60=5 =0 2@J7:0B0Keep connection alivenetworkSettingsClass:>@B 70 ?@54020=5 =0 D09;>25:Listen port for file transfer:networkSettingsClass57NonenetworkSettingsClass0@>;0: Password:networkSettingsClass >@B:Port:networkSettingsClass @>:A8ProxynetworkSettingsClass$@J7:0 ?@57 ?@>:A8Proxy connectionnetworkSettingsClassSOCKS 5SOCKS 5networkSettingsClass!83C@=> 2;870=5 Secure loginnetworkSettingsClass !J@2J@ServernetworkSettingsClass"8?:Type:networkSettingsClass$>B@518B5;A:> 8<5: User name:networkSettingsClasslogin.icq.com login.icq.comnetworkSettingsClass(0AB@>9:8 =0 <@560B0networkSettingsnetworkSettingsClass B:07CancelnoteWidgetClassOKnoteWidgetClass5;56:0 noteWidgetnoteWidgetClassJ7=8:=0 ?@>1;5< A <@560B0 (=0?@. <@56>28O :015; 5 87<J:=0B ?> ?>3@5H:0).ZAn error occurred with the network (e.g., the network cable was accidentally plugged out). oscarProtocoltJ7=8:=0 <@56>28 ?@>1;5<, :>9B> =5 <>65 40 1J45 >?@545;5=.'An unidentified network error occurred. oscarProtocolvB:070=0, >B >BA@5I=0B0 AB@0=0, 2@J7:0 (8;8 87B5:;> 2@5<5).6The connection was refused by the peer (or timed out). oscarProtocol>4@5AJB =0 E>AB0 =5 15 =0<5@5=.The host address was not found. oscarProtocol 5AC@A8B5 =0 ;>:0;=0B0 A8AB5<0 A0 87G5@?0=8 (=0?@. B2J@45 <=>3> A>:5B8).?The local system ran out of resources (e.g., too many sockets). oscarProtocolFB40;5G5=8OB E>AB 70B2>@8 2@J7:0B0.&The remote host closed the connection. oscarProtocol0O25=0B0 A>:5B >?5@0F8O =5 A5 ?>44J@60 >B ;>:0;=0B0 >?5@0F8>==0 A8AB5<0 (=0?@. ;8?A20 ?>44@J6:0 =0 IPv6).kThe requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). oscarProtocol`!>:5BJB ?>;720 ?@>:A8, 878A:20I> C4>AB>25@O20=5.CThe socket is using a proxy, and the proxy requires authentication. oscarProtocol!>:5B >?5@0F8OB0 15 =5CA?5H=0, ?>@048 ;8?A0 =0 =5>1E>48<8B5 ?@020.SThe socket operation failed because the application lacked the required privileges. oscarProtocolD7B5:;> 2@5<5 =0 A>:5B >?5@0F8OB0.The socket operation timed out. oscarProtocol(0@>;8B5 =5 AJ2?040BConfirm password does not matchpasswordChangeDialog6"5:CI0B0 ?0@>;0 5 =520;84=0Current password is invalidpasswordChangeDialog @5H:0Password errorpasswordChangeDialog@><O=0ChangepasswordChangeDialogClass"@><O=0 =0 ?0@>;0Change passwordpasswordChangeDialogClass 0AB>OI0 ?0@>;0:Current password:passwordChangeDialogClass>20 ?0@>;0: New password:passwordChangeDialogClass8>2B>@5=85 =0 =>20B0 ?0@>;0:Retype new password:passwordChangeDialogClass*J2545B5 ?0@>;0 70 %1Enter %1 passwordpasswordDialog,J2545B5 20H0B0 ?0@>;0Enter your passwordpasswordDialogClassOKpasswordDialogClass"0?8A =0 ?0@>;0B0 Save passwordpasswordDialogClass0H0B0 ?0@>;0:Your password:passwordDialogClass8G=8 A?8AJF8 Privacy listsprivacyListWindow7B@820=5DprivacyListWindowClass=D>@<0F8OIprivacyListWindowClass,!?8AJ: "@5=51@53=0B8" Ignore listprivacyListWindowClass"!?8AJ: "52848<8"Invisible listprivacyListWindowClassA524>=8< Nick nameprivacyListWindowClassUINUINprivacyListWindowClass!?8AJ: "848<8" Visible listprivacyListWindowClass8G=8 A?8AJF8privacyListWindowprivacyListWindowClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html>

readAwayDialogClass0B20@O=5ClosereadAwayDialogClass@JI0=5ReturnreadAwayDialogClassL@>G8B0=5 =0 AJ>1I5=85B> ?@8 >BAJAB285readAwayDialogreadAwayDialogClass00O2:0 70 C4>AB>25@O20=5Authorization requestrequestAuthDialogClass7?@0I0=5SendrequestAuthDialogClass:>102O=5 2 A?8AJ:0 A :>=B0:B8Add to contact list searchUser@>102O=5/0<8@0=5 =0 ?>B@518B5;8Add/find users searchUser 8=038Always searchUser#4>AB>25@O20=5 Authorize searchUser.>4@>1=>AB8 70 :>=B0:B0Contact details searchUser>@>25@:0 70 AB0BCA0 =0 :>=B0:B0Contact status check searchUser02J@H5=>Done searchUser05 A0 =0<5@5=8 @57C;B0B8 Nothing found searchUser"J@A5=5 Searching searchUser,7?@0I0=5 =0 AJ>1I5=85 Send message searchUser 13-1713-17searchUserClass 18-2218-22searchUserClass 23-2923-29searchUserClass 30-3930-39searchUserClass 40-4940-49searchUserClass 50-B550'ssearchUserClass 50-5950-59searchUserClass 60-B560'ssearchUserClass60+60+searchUserClass 70-B570'ssearchUserClass 80-B580'ssearchUserClass:045<8G=0AcademicsearchUserClass !<5B:0AccountsearchUserClass4<8=8AB@0B82=0AdministrativesearchUserClass 07H8@5=8AdvancedsearchUserClassD30=8AB0= AfghanistansearchUserClass0D@8:0=A:8 AfrikaanssearchUserClassJ7@0AB:Age:searchUserClass;10=8OAlbaniasearchUserClass0;10=A:8AlbaniansearchUserClass ;68@AlgeriasearchUserClass"<5@8:0=A:8 !0<>0American SamoasearchUserClass =4>@0AndorrasearchUserClass =3>;0AngolasearchUserClass=3C8;0AnguillasearchUserClass=B83C0AntiguasearchUserClass"=B83C0 8 0@1C40Antigua & BarbudasearchUserClass=B8;A:8B5 >-28AntillessearchUserClass0@01A:8ArabicsearchUserClass@65=B8=0 ArgentinasearchUserClass@<5=8OArmeniasearchUserClass0@<5=A:8ArmeniansearchUserClass7:CAB2>ArtsearchUserClass7:CAB2>/01020Art/EntertainmentsearchUserClass @C10ArubasearchUserClass-2 J7=5A5=85AscensionIslandsearchUserClassAB@>=><8O AstronomysearchUserClassC48> 8 2845>Audio and visualsearchUserClass2AB@0;8O AustraliasearchUserClass2AB@8OAustriasearchUserClass#4>AB>25@O20=5 AuthorizesearchUserClass75@109460= AzerbaijansearchUserClass0E0<A:8B5 >-28BahamassearchUserClass0E@59=BahrainsearchUserClass0=3;045H BangladeshsearchUserClass0@1594>ABarbadossearchUserClass0@1C40BarbudasearchUserClass5;0@CABelarussearchUserClass 5;38OBelgiumsearchUserClass 5;897BelizesearchUserClass 5=8=BeninsearchUserClass5@<C40BermudasearchUserClass1>6?C@8BhojpurisearchUserClass CB0=BhutansearchUserClass>;828OBoliviasearchUserClass>F20=0BotswanasearchUserClass@078;8OBrazilsearchUserClass @C=59BruneisearchUserClassJ;30@8OBulgariasearchUserClass1J;30@A:8 BulgariansearchUserClassC@:8=0 $0A> Burkina FasosearchUserClass18@<0=A:8BurmesesearchUserClassC@C=48BurundisearchUserClass$87=5A 8 8:>=><8:0Business & EconomysearchUserClass87=5A CA;C38Business servicessearchUserClass0<1>460CambodiasearchUserClass0<5@C=CameroonsearchUserClass 0=040CanadasearchUserClass0=0@A:8 >-28Canary IslandssearchUserClass:0=B>=89:0 CantonesesearchUserClass2B><>18;8CarssearchUserClass:0B0;>=A:8CatalansearchUserClass09<0=A:8 >-28Cayman IslandssearchUserClass>>G8B0B5;8 =0 8725AB=8 ;8G=>AB8Celebrity FanssearchUserClass'04ChadsearchUserClass 5?C1;8:0 '8;8Chile, Rep. ofsearchUserClass 8B09ChinasearchUserClass:8B09A:8ChinesesearchUserClass-2  >645AB2>Christmas IslandsearchUserClass @04:City:searchUserClass7G8AB20=5ClearsearchUserClass @5E8ClothingsearchUserClass>;5:F8>=8@0=5 CollectionssearchUserClass>;560=8=College StudentsearchUserClass>;C<18OColombiasearchUserClass1I5AB25=0Community & SocialsearchUserClass><>@A:8 >-28ComorossearchUserClass><?NB@8 ComputerssearchUserClass2>B@518B5;A:0 5;5:B@>=8:0Consumer electronicssearchUserClass-28 C: CookIslandssearchUserClass>AB0  8:0 Costa RicasearchUserClassJ@6020:Country:searchUserClass%J@20B8OCroatiasearchUserClassEJ@20BA:8CroatiansearchUserClassC10CubasearchUserClass(C;BC@0 8 ;8B5@0BC@0Culture & LiteraturesearchUserClass 8?J@CyprussearchUserClass G5H:8CzechsearchUserClass"'5H:0B0 @5?C1;8:0 Czech Rep.searchUserClass 40BA:8DanishsearchUserClass 0=8ODenmarksearchUserClass853> 0@A8O Diego GarciasearchUserClass 072545=(0)DivorcedsearchUserClass681CB8DjiboutisearchUserClassP0 =5 A5 87G8AB20B ?@54E>4=8B5 @57C;B0B8Do not clear previous resultssearchUserClass><8=8:0DominicasearchUserClass,><8=8:0=A:0  5?C1;8:0Dominican Rep.searchUserClassE>;0=4A:8DutchsearchUserClass:204>@EcuadorsearchUserClass1@07>20=85 EducationsearchUserClass 38?5BEgyptsearchUserClass; !0;204>@ El SalvadorsearchUserClass EmailEmailsearchUserClass!3>45=(0)EngagedsearchUserClass$=65=5@=8 459=>AB8 EngineeringsearchUserClass0=3;89A:8EnglishsearchUserClass 01020 EntertainmentsearchUserClass@8B@5OEritreasearchUserClass5A?5@0=B> EsperantosearchUserClassAB>=8OEstoniasearchUserClass5AB>=A:8EstoniansearchUserClassB8>?8OEthiopiasearchUserClass$0@L>@A:8 >-28Faeroe IslandssearchUserClass$>;:;5=A:8 >-28Falkland IslandssearchUserClass D0@A8FarsisearchUserClass5=0FemalesearchUserClass $8468FijisearchUserClass($8=0=A8 8 :>@?>@0F88Finance and corporatesearchUserClass $8=0=A>28 CA;C38Financial ServicessearchUserClass$8=;0=48OFinlandsearchUserClass D8=A:8FinnishsearchUserClass<5 First namesearchUserClass<5: First name:searchUserClass $8B=5AFitnesssearchUserClass$@0=F8OFrancesearchUserClassD@5=A:8FrenchsearchUserClass$@5=A:0 C0=0 French GuianasearchUserClass"$@5=A:0 >;8=578OFrench PolynesiasearchUserClass$@5=A:8 =B8;8FrenchAntillessearchUserClass 01>=GabonsearchUserClass:5;BA:8GaelicsearchUserClass 0<18OGambiasearchUserClass3@8GamessearchUserClass>;/J7@0AB Gender/AgesearchUserClass>;:Gender:searchUserClass @C78OGeorgiasearchUserClass =5<A:8GermansearchUserClass5@<0=8OGermanysearchUserClass0=0GhanasearchUserClass81@0;B0@ GibraltarsearchUserClass@028B5;AB2> GovernmentsearchUserClass J@F8OGreecesearchUserClass 3@JF:8GreeksearchUserClass@5=;0=48O GreenlandsearchUserClass@5=040GrenadasearchUserClassC045;C?5 GuadeloupesearchUserClass20B5<0;0 GuatemalasearchUserClass 28=5OGuineasearchUserClass28=5O-8A0C Guinea-BissausearchUserClass 280=0GuyanasearchUserClass %08B8HaitisearchUserClass 4@025 8 :@0A>B0Health and beautysearchUserClass 82@8BHebrewsearchUserClass8<=078AB(:0)High School StudentsearchUserClass E8=48HindisearchUserClass %>18B0HobbiessearchUserClass  :JI8HomesearchUserClass*2B><0B870F8O 70 18B0Home automationsearchUserClass%>=4C@0AHondurassearchUserClass%>=3 >=3 Hong KongsearchUserClass!B>:8 70 18B0Household productssearchUserClassC=30@A:8 HungariansearchUserClass#=30@8OHungarysearchUserClassICQ - ><>IICQ - Providing HelpsearchUserClassA;0=48OIcelandsearchUserClass8A;0=4A:8 IcelandicsearchUserClass =48OIndiasearchUserClass=4>=578O IndonesiasearchUserClass8=4>=5789A:8 IndonesiansearchUserClass=B5@5A8: Interests:searchUserClass=B5@=5BInternetsearchUserClass@0:IraqsearchUserClass@;0=48OIrelandsearchUserClass 7@05;IsraelsearchUserClass8B0;80=A:8ItaliansearchUserClass B0;8OItalysearchUserClass /<09:0JamaicasearchUserClass /?>=8OJapansearchUserClassO?>=A:8JapanesesearchUserClass>@40=8OJordansearchUserClass070EAB0= KazakhstansearchUserClass 5=8OKenyasearchUserClass;NG>28 4C<8: Keywords:searchUserClass:E<5@A:8KhmersearchUserClass8@810B8KiribatisearchUserClass!525@=0 >@5O Korea, NorthsearchUserClass.6=0 >@5O Korea, SouthsearchUserClass:>@59A:8KoreansearchUserClass C259BKuwaitsearchUserClass:8@387:8KyrgyzsearchUserClass8@387AB0= KyrgyzstansearchUserClass 78:: Language:searchUserClass ;0>A:8LaosearchUserClass0>ALaossearchUserClass$0<8;8O Last namesearchUserClass$0<8;8O: Last name:searchUserClass 0B28OLatviasearchUserClass;0B289A:8LatviansearchUserClass @02=0LawsearchUserClass 820=LebanonsearchUserClass 5A>B>LesothosearchUserClass815@8OLiberiasearchUserClass8EB5=I09= LiechtensteinsearchUserClass0G8= =0 682>B LifestylesearchUserClass 8B20 LithuaniasearchUserClass;8B>2A:8 LithuaniansearchUserClass,! ?@>4J;68B5;=0 2@J7:0Long term relationshipsearchUserClassN:A5<1C@3 LuxembourgsearchUserClass 0:0>MacausearchUserClass-2 04030A:0@ MadagascarsearchUserClass40B0;>3 70 ?>@JG:0 ?> ?>I0Mail order catalogsearchUserClass 0;028MalawisearchUserClass<0;09A:8MalaysearchUserClass0;0978OMalaysiasearchUserClass0;4828MaldivessearchUserClassJ6MalesearchUserClass0;8MalisearchUserClass 0;B0MaltasearchUserClass<0;B89A:8MaltesesearchUserClass#?@02;5=A:0 ManagerialsearchUserClass@>872>4AB2> ManufacturingsearchUserClass!5<55= AB0BCA:Marital status:searchUserClass5=5=/<J65=0MarriedsearchUserClass0@H0;A:8 >-28Marshall IslandssearchUserClass0@B8=8:0 MartiniquesearchUserClass02@8B0=8O MauritaniasearchUserClass02@8F89 MauritiussearchUserClass 09>B MayotteIslandsearchUserClass 548OMediasearchUserClass548F8=0/4@025Medical/HealthsearchUserClass5:A8:>MexicosearchUserClass >5==0MilitarysearchUserClass" 5?C1;8:0 >;4>20Moldova, Rep. ofsearchUserClass >=0:>MonacosearchUserClass>=3>;8OMongoliasearchUserClass>=A5@0B MontserratsearchUserClass I5 >>More >>searchUserClass 0@>:>MoroccosearchUserClass$8;<8/"5;52878O Movies/TVsearchUserClass>70<18: MozambiquesearchUserClass C78:0MusicsearchUserClass80=<0@MyanmarsearchUserClass8AB5@88MysticssearchUserClass0<818ONamibiasearchUserClass,@8@>40 8 >:>;=0 A@540Nature and EnvironmentsearchUserClass 0C@CNaurusearchUserClass 5?0;NepalsearchUserClass%>;0=48O NetherlandssearchUserClass$!59=B 8BA 8 528ANevissearchUserClass>20 5;0=48O New ZealandsearchUserClass>20 0;54>=8O NewCaledoniasearchUserClass>28=8 8 <5488 News & MediasearchUserClass8:0@03C0 NicaraguasearchUserClassA524>=8< Nick namesearchUserClassA524>=8<: Nick name:searchUserClass 835@NigersearchUserClass835@8ONigeriasearchUserClass8C5NiuesearchUserClass85?@028B5;AB25=0 >@30=870F8ONon-Goverment OrganisationsearchUserClass>@D>;:A:8 >-28Norfolk IslandsearchUserClass>@2538ONorwaysearchUserClass=>@256:8 NorwegiansearchUserClass !D5@0: Occupation:searchUserClass<0=OmansearchUserClass!0<> =0 ;8=8O Online onlysearchUserClass"! >B2>@5=0 2@J7:0Open relationshipsearchUserClass @C3>OthersearchUserClass@C38 CA;C38Other servicessearchUserClass(0=8<0=8O =0 >B:@8B>Outdoor ActivitiessearchUserClass0:8AB0=PakistansearchUserClass 0;0CPalausearchUserClass 0=0<0PanamasearchUserClass&0?C0 8 >20 28=5OPapua New GuineasearchUserClass0@03209ParaguaysearchUserClass$B3;5640=5 =0 45F0 ParentingsearchUserClass0@B8B0PartiessearchUserClass?5@A89A:8PersiansearchUserClass5@CPerusearchUserClass.><0H=8 ;N18<F8/82>B=8 Pets/AnimalssearchUserClass$8;8?8=8 PhilippinessearchUserClass >;H0PolandsearchUserClass ?>;A:8PolishsearchUserClass>@BC30;8OPortugalsearchUserClass?>@BC30;A:8 PortuguesesearchUserClass@>D5A8>=0;=0 ProfessionalsearchUserClass$740B5;A:0 459=>AB PublishingsearchUserClassC5@B>  8:> Puerto RicosearchUserClass 0B0@QatarsearchUserClass 5;838OReligionsearchUserClass$@>40618 =0 4@51=>RetailsearchUserClass !:;04>25 =0 54@> Retail storessearchUserClass5=A8>=5@(:0)RetiredsearchUserClass@JI0=5ReturnsearchUserClass-2 !J548=5=85Reunion IslandsearchUserClass C<J=8ORomaniasearchUserClass@C<J=A:8RomaniansearchUserClass-2  >B0 Rota IslandsearchUserClass  CA8ORussiasearchUserClass @CA:8RussiansearchUserClass  C0=40RwandasearchUserClass!0=B0 CG8O Saint LuciasearchUserClass-2 !09?0= Saipan IslandsearchUserClass!0= 0@8=> San MarinosearchUserClass !0C48BA:0 @018O Saudi ArabiasearchUserClass>0C:0 8 87A;54>20B5;A:0 459=>ABScience & ResearchsearchUserClass 0C:0/"5E=>;>388Science/TechnologysearchUserClass(>B;0=48OScotlandsearchUserClass"J@A5=5SearchsearchUserClass"J@A5=5 ?>: Search by:searchUserClass!5=530;SenegalsearchUserClass 0745;5=(0) SeparatedsearchUserClassA@J1A:8SerbiansearchUserClass!59H5;A:8 >-28 SeychellessearchUserClass!85@0 5>=5 Sierra LeonesearchUserClass!8=30?C@ SingaporesearchUserClass"!2>1>45=/!2>1>4=0SinglesearchUserClass #<5=8OSkillssearchUserClassA;>20H:8SlovaksearchUserClass!;>20:8OSlovakiasearchUserClass!;>25=8OSloveniasearchUserClassA;>25=A:8 SloveniansearchUserClass!>F80;=8 =0C:8Social sciencesearchUserClass!>;><>=>28 >-28Solomon IslandssearchUserClassA><0;89A:8SomalisearchUserClass!><0;8OSomaliasearchUserClass.  SouthAfricasearchUserClass >A<>ASpacesearchUserClassA?0=8OSpainsearchUserClass8A?0=A:8SpanishsearchUserClass*!?>@BC20=5 8 0B;5B8:0Sporting and athleticsearchUserClass !?>@BSportssearchUserClass(@8 0=:0 Sri LankasearchUserClass!2. ;5=0 St. HelenasearchUserClass!2. 8BA St. KittssearchUserClass !C40=SudansearchUserClass!C@8=0<8SurinamesearchUserClassAC0E8;8SwahilisearchUserClass!2078;5=4 SwazilandsearchUserClass (25F8OSwedensearchUserClassH254A:8SwedishsearchUserClass(259F0@8O SwitzerlandsearchUserClass !8@8OSyrian ArabRep.searchUserClassB030;>3TagalogsearchUserClass "0920=TaiwansearchUserClass"0468:8AB0= TajikistansearchUserClass"0=70=8OTanzaniasearchUserClassB0B0@A:8TatarsearchUserClass"5E=8G5A:0 TechnicalsearchUserClassB09;0=4A:8ThaisearchUserClass"09;0=4ThailandsearchUserClass-2 "8=80= Tinian IslandsearchUserClass">3>TogosearchUserClass">:5;0CTokelausearchUserClass ">=30TongasearchUserClassJBC20=5TravelsearchUserClass "C=8ATunisiasearchUserClass "C@F8OTurkeysearchUserClass BC@A:8TurkishsearchUserClass"C@:<5=8AB0= TurkmenistansearchUserClass "C20;CTuvalusearchUserClassUINUINsearchUserClass!)USAsearchUserClass #30=40UgandasearchUserClass#:@09=0UkrainesearchUserClassC:@08=A:8 UkrainiansearchUserClass$1548=5=> :@0;AB2>United KingdomsearchUserClass!BC45=B(:0)University studentsearchUserClassC@4CUrdusearchUserClass#@C3209UruguaysearchUserClass#715:8AB0= UzbekistansearchUserClass0=C0BCVanuatusearchUserClass0B8:0= Vatican CitysearchUserClass5=5FC5;0 VenezuelasearchUserClass85B=0<VietnamsearchUserClass285B=0<A:8 VietnamesesearchUserClass#5;AWalessearchUserClass#51 48709= Web DesignsearchUserClass!B@>8B5;AB2> Web buildingsearchUserClass0?04=0 !0<>0 Western SamoasearchUserClass4>25F/4>28F0WidowedsearchUserClass5=8WomensearchUserClass 5<5=YemensearchUserClass848HYiddishsearchUserClass 9>@C10YorubasearchUserClass.3>A;028O YugoslaviasearchUserClass'5@=0 >@0Yugoslavia - MontenegrosearchUserClass !J@18OYugoslavia - SerbiasearchUserClass 0<18OZambiasearchUserClass8<10125ZimbabwesearchUserClass*"J@A5=5 =0 ?>B@518B5; searchUsersearchUserClass(@5CAB0=>25=0 A<5B:0 Suspended account snacChannel0428H5= <0:A8<0;5= 1@>9 ?>B@518B5;8, A2J@70=8 >B B>78 04@5A (@575@20F8O)K The users num connected from this IP has reached the maximum (reservation) snacChannelv!<5B:0B0 5 ?@5CAB0=>25=0 ?>@048 2J7@0ABB0 28 (2J7@0AB < 13)0Account suspended because of your age (age < 13) snacChannel4>H AB0BCA =0 1070B0 40==8Bad database status snacChannel">H AB0BCA =0 DNSBad resolver status snacChannel52J7<>6=> @538AB@8@0=5 2 ICQ <@560B0. >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8=Can't register on the ICQ network. Reconnect in a few minutes snacChannel0@5H:0 ?@8 A2J@720=5: %1Connection Error: %1 snacChannelF@5H:0 ?@8 A2J@720=5 A 1070B0 40==8 DB link error snacChannelH@5H:0 ?@8 87?@0I0=5 =0 1070B0 40==8 DB send error snacChannel7B@8B0 A<5B:0Deleted account snacChannel7B5:;0 A<5B:0Expired account snacChannel:!3@5H5=8 ?A524>=8< 8;8 ?0@>;0Incorrect nick or password snacChanneljJB@5H=0 3@5H:0 =0 :;85=B0 (=5CA?5H=> C4>AB>25@O20=5)/Internal client error (bad input to authorizer) snacChannelJB@5H=0 3@5H:0Internal error snacChannel"520;845= SecurIDInvalid SecurID snacChannel 520;84=0 A<5B:0Invalid account snacChannel>520;84=8 ?>;5B0 2 1070B0 40==8Invalid database fields snacChannel<520;84=8 ?A524>=8< 8;8 ?0@>;0Invalid nick or password snacChannelHA524>=8<JB 8;8 ?0@>;0B0 =5 AJ2?040BMismatch nick or password snacChannel6O<0 4>ABJ? 4> 1070B0 40==8No access to database snacChannel$O<0 4>ABJ? 4> DNSNo access to resolver snacChannel0428H5= 1@>9 >?8B8 (@575@20F8O). >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8KRate limit exceeded (reservation). Please try to reconnect in a few minutes snacChannelz0428H5= 1@>9 >?8B8. >;O >?8B09B5 >B=>2> A;54 =O:>;:> <8=CB8=Rate limit exceeded. Please try to reconnect in a few minutes snacChannel67B5:;> 2@5<5 =0 @575@20F8OReservation map error snacChannel67B5:;> 2@5<5 =0 @575@20F8OReservation timeout snacChannel>@5<5==> CA;C30B0 =5 5 =0 ;8=8OService temporarily offline snacChannel<#A;C30B0 5 2@5<5==> =54>ABJ?=0Service temporarily unavailable snacChannelx0428H5= <0:A8<0;5= 1@>9 ?>B@518B5;8, A2J@70=8 >B B>78 04@5AB@518B5;OB 5 ?@54C?@545= B2J@45 A5@8>7=>User too heavily warned snacChannel7?>;720B5 AB0@0 25@A8O =0 ICQ. @5?>@JG8B5;=> 5 40 >1=>28B5 :;85=B0:You are using an older version of ICQ. Upgrade recommended snacChannel7?>;720B5 AB0@0 25@A8O =0 ICQ. 5>1E>48<> 5 40 >1=>28B5 :;85=B07You are using an older version of ICQ. Upgrade required snacChannel:>?J;=8B5;=8 AB0BCA8 2 <5=NB>&Add additional statuses to status menustatusSettingsClass| 07@5H020=5 4@C38 40 28640B <>O AB0BCA ?@8 BJ@A5=5 8 2 <@560B0*Allow other to view my status from the WebstatusSettingsClassP2B><0B8G=> 70?8B20=5 70 @07H8@5= AB0BCAAsk for xStauses automaticallystatusSettingsClass :JI8At homestatusSettingsClass0 @01>B0At workstatusSettingsClassBAJAB20<AwaystatusSettingsClass 5 <5 157?>:>9B5DNDstatusSettingsClass5?@5A8@0= AJ< DepressionstatusSettingsClassb0 =5 A5 ?>:0720 ?@>7>@5F0 70 02B><0B8G5= >B3>2>@Don't show autoreply dialogstatusSettingsClassJ;EvilstatusSettingsClass%@0=O A5LunchstatusSettingsClass54>ABJ?5=N/AstatusSettingsClassN725ABO20=5 ?@8 ?@>G8B0=5 =0 <>O AB0BCA Notify about reading your statusstatusSettingsClass05B AJ<OccupiedstatusSettingsClass(0AB@>9:8 =0 AB0BCA0statusSettingsstatusSettingsClass =D>@<0F8O 70 %1%1 contact informationuserInformation.<b>J7@0AB:</b> %1 <br>Age: %1
userInformation><b>0B0 =0 @0640=5:</b> %1 <br>Birth date: %1
userInformation&<b><5:</b> %1 <br>First name: %1
userInformation&<b>>;:</b> %1 <br>Gender: %1
userInformation8<b>><. 04@5A:</b> %1 %2<br>Home: %1 %2
userInformation.<b>$0<8;8O:</b> %1 <br>Last name: %1
userInformation2<b>A524>=8<:</b> %1 <br>Nick name: %1
userInformationD<b>5@A8O =0 ?@>B>:>;0: </b>%1<br>Protocol version: %1
userInformationF<b>>2>@8<8 578F8:</b> %1 %2 %3<br>%Spoken languages: %1 %2 %3
userInformation0<b>[J7<>6=>AB8]</b><br>[Capabilities]
userInformationn<b>[>?J;=8B5;=0 8=D>@<0F8O 70 48@5:B=0 2@J7:0]</b><br>)[Direct connection extra info]
userInformationD<b>[!J:@0B5=8 2J7<>6=>AB8]</b><br>[Short capabilities]
userInformationJ<img src='%1' height='%2' width='%3'>%userInformationH"2J@45 3>;O< @07<5@ =0 87>1@065=85B>Image size is too biguserInformationX7>1@065=8O (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.bmp *.jpg *.jpeg *.png)userInformation B20@O=5 =0 D09; Open FileuserInformation&@5H:0 ?@8 >B20@O=5 Open erroruserInformation<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html>

userInformationClass 0 <5=AboutuserInformationClass(=D>@<0F8O 70 A<5B:0 Account infouserInformationClass>?J;=8B5;=0 AdditinonaluserInformationClassJ7@0AB:Age:userInformationClasspA8G:8 ?>B@518B5;8 <>30B 40 <5 4>102OB 157 C4>AB>25@5=85)All uses can add me without authorizationuserInformationClass| 07@5H020=5 4@C38 40 28640B <>O AB0BCA ?@8 BJ@A5=5 8 2 <@560B09Allow others to view my status in search and from the webuserInformationClassB#4>AB>25@O20=5/848<>AB 2 <@560B0Authorization/webawareuserInformationClass0B0 =0 @0640=5 Birth dateuserInformationClass>18;5=: Cellular:userInformationClass @04:City:userInformationClass0B20@O=5CloseuserInformationClass $8@<0CompanyuserInformationClass<5 =0 D8@<0: Company name:userInformationClassJ@6020:Country:userInformationClassB45;/25=>: Div/dept:userInformationClass20 =5 5 ?C1;8G=> 4>ABJ?5=Don't publish for alluserInformationClass Email:Email:userInformationClass $0:A:Fax:userInformationClass5=0FemaleuserInformationClass<5: First name:userInformationClass>;:Gender:userInformationClass1I0GeneraluserInformationClass><0H=0HomeuserInformationClass><0H5= 04@5A Home addressuserInformationClass8G=0 AB@0=8F0: Home page:userInformationClass=B5@5A8 InterestsuserInformationClass">A;54=> 2;870=5: Last login:userInformationClass$0<8;8O: Last name:userInformationClassJ6MaleuserInformationClass!5<55= AB0BCA:Marital status:userInformationClass<78A:20 A5 <>5B> C4>AB>25@5=85My authorization is requireduserInformationClass<5NameuserInformationClassA524>=8<: Nick name:userInformationClass !D5@0: Occupation:userInformationClass >45= 2Originally fromuserInformationClass8G=8 40==8PersonaluserInformationClass"5;5D>=:Phone:userInformationClass;J6=>AB: Position:userInformationClass 538AB@0F8O >B: Registration:userInformationClass*0O2:0 70 ?>4@>1=>AB8Request detailsuserInformationClass 0?8ASaveuserInformationClass>2>@8<8 578F8:Spoken language:userInformationClass)0B:State:userInformationClass #;8F0:Street address:userInformationClass #;8F0:Street:userInformationClass1>1I5=0SummaryuserInformationClassUIN:UIN:userInformationClass#51 AB@0=8F0: Web site:userInformationClass!;C651=0WorkuserInformationClass!;C6515= 04@5A Work addressuserInformationClass ..:Zip:userInformationClass0=D>@<0F8O 70 ?>B@518B5;userInformationuserInformationClassqutim-0.2.0/languages/bg_BG/binaries/chess.qm0000644000175000017500000000701411240003554022456 0ustar euroelessareuroelessarb?z v Zw!B88Zo0I } ^C^ Z^ ɖA=qa5?f* nk>Nr ,O C˕3  l#  e #,'!E)i >5;05B5 ;8 40 =0?@028B5 @>:040?Do you want to castle?Drawer@5H5= E>4 Error movingDrawer5NoDrawer0 @>:040 To castleDrawer0YesDrawerf5 <>65 40 <5AB8B5 B078 D83C@0, 70I>B> &0@O 5 2 H0E8You cannot move this figure because the king is in checkDrawer<0:20 D83C@0 40 1J45 704045=0?What figure should I set? FigureDialogB GameBoard"'5@=8B5 83@0OB >BBlack game from GameBoard '5@=8B5 83@0OB ABlack game with GameBoardC GameBoardJ5;05B5 ;8 40 AJE@0=8B5 871@065=85B>?Do you want to save the image? GameBoard*@8:;NG20=5 =0 83@0B0 End the game GameBoard@5H:0!Error! GameBoard@09 =0 83@0B0 Game over GameBoardK GameBoard5No, don't save GameBoard. 54 5 =0 ?@>B82=8:0 28.Opponent turn. GameBoardQ GameBoardB>102:0 70 83@0 =0 H0E<0B 2 qutIMQutIM chess plugin GameBoard(0?8A =0 87>1@065=85 Save image GameBoard|!83C@=8 ;8 AB5, G5 65;05B5 40 ?@8:;NG8B5 83@0B0? )5 O 703C18B5*Want you to end the game? You will lose it GameBoard 5;8B5 83@0OB >BWhite game from GameBoard5;8B5 83@0OB AWhite game with GameBoard0 Yes, save GameBoard,0B! 03C18EB5 83@0B0.#You have a mate. You lost the game. GameBoard0B!You have a stalemate GameBoard*85 A?5G5;8EB5 83@0B0You scored the game GameBoard:@>B82=8:JB 28 70B2>@8 83@0B0!Your opponent has closed the game GameBoard0H @54 5. Your turn. GameBoardF28 :0=8 =0 ?0@B8O H0E. @85<0B5 ;8?# invites you to play chess. Accept? chessPlugin, ?@8G8=0: ", with reason: " chessPlugin3@0 =0 H0E<0B Play chess chessPluginB>102:0 70 83@0 =0 H0E<0B 2 qutIMQutIM chess plugin chessPluginF=5 ?@85<0 ?>:0=0B0 28 70 ?0@B8O H0E&don't accept your invite to play chess chessPlugin" 073>2>@ 2 83@0B0 Game chat gameboard,@>B82=8:>28B5 E>4>25:Opponent moves: gameboardB>102:0 70 83@0 =0 H0E<0B 2 qutIMQutIM chess plugin gameboard0H8B5 E>4>25: Your moves: gameboardqutim-0.2.0/languages/bg_BG/binaries/nowplaying.qm0000644000175000017500000002220011240003554023532 0ustar euroelessareuroelessarT Y# ĥ <!$ +i#%artist% 70 87?J;=8B5; %title% 70 703;0285 =0 ?5A5= %album% 70 0;1C< J%artist% for the artist %title% for the name of song %album% for the albumnowplayingSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/logo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">" <><5=B0 A;CH0<" 4>102:0 70 qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">8:8B0 5;>2</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html>

Now playing qutIM plugin

v0.1.2

Author:

Nikita Belov

null@deltaz.ru

(c) 2009

nowplayingSettingsClass0 4>102:0B0AboutnowplayingSettingsClass"0 A5 ?@><5=O =0: Change to:nowplayingSettingsClass.0 A5 ?@><5=O <5;>48OB0 Change tunenowplayingSettingsClassd@5>1@07C20=5 =0 5B8:5B8B5 >B windows-1251 =0 utf8&Convert tags from windows-1251 to utf8nowplayingSettingsClass028=038ForevernowplayingSettingsClass1I8GeneralnowplayingSettingsClassICQICQnowplayingSettingsClass JabberJabbernowplayingSettingsClass57 ?@><O=0 Not changenowplayingSettingsClass:;NG5=0OnnowplayingSettingsClass0AB@>9:8SettingsnowplayingSettingsClass(!J>1I5=85 70 AB0BCA:Status message:nowplayingSettingsClass&!JA A;54=8O AB0BCA:With this status:nowplayingSettingsClass<03;0285 70 @07H8@5=8O AB0BCA:X-Status title:nowplayingSettingsClassqutim-0.2.0/languages/bg_BG/binaries/core.qm0000644000175000017500000034235211273045737022327 0ustar euroelessareuroelessarx {=}2b>f-Y[98@ :ߵ@n.bNmNuz*XSzox>M3 % Iw 2W}  $T'b:R,):v:`E'meOS\dZJ Zsq3^M.;|MGWdbW _b\-qL-qNl ~4"U6o~@F8I9}QoQq}{Fc{οue?mFdNj?I|dDhd{4.lsm<ew?WAZIlRNT@O|f qJBIEIeIj IIiI j ~    :  i ų)͢)el:3/ G G\4>f'ti=3D "5i6#MC$dC QDC oSWk@e0E0ge0EjlDxt~v|su{y#@.h%FMN129f\@@ND$UvNnwK+500 0ߺ]K`Px9k 5sJf#r6z?^ACvpS6>VѥVѥ@X42a_ibdm=qp#uz6zóJՊF8H`tL<]]8ӣ'`{># c?^CQZ%\:, [f)b:c;L8#e`.i=9i=diANjx? kJI8r>09*uilTJfpGtftӉCqY78eB{=]B<4 G RO`da aU1fug p.<oܲop>0p}J:7.4^;`G4.9Ձ.^I 1# } Ih Zj f` & 0| \P% q v |Z  S Q 0 Lo  ; ?? j ="f f3O " 1P2 1n o# uV] 8y 1t 7 li G zY v "P -D A e; s> U ~ $r  zzD >A >j > 2 -q b: t t! F p ] G D y '+ )o7 7N =]% _ڃf d ~b$k su hR  qJ TJ:e . G; ɔ mh % SM CR 4 j l  ӕy *T t1 c9 Ew Es u #` ;*4 >1g m ?@ [NU g6 |,M |,Ou R K [ b& _yq Z 7 c=e sp  5 _hy jE ss ycwP n4\ u a U;ZF W7 YveT ZK q:I rN rN t) 5 ##6 zHk t H < <f <q 2a N~ 9 +PdUJ'.l+EY)4h6OXl5fl s8x:VÊr\/EG] rO%vC /ue!ELSm3}p.~@BlC $5 1i.>4@>1=>AB8 70 :>=B0:B0Contact detailsAbstractContextLayer2%@>=>;>38O =0 AJ>1I5=8OB0Message historyAbstractContextLayer,7?@0I0=5 =0 AJ>1I5=85 Send messageAbstractContextLayer(#?@02;5=85 =0 A<5B:8AccountManagementAccountManagementClass>102O=5AddAccountManagementClass 540:B8@0=5EditAccountManagementClass@5<0E20=5RemoveAccountManagementClass<><>I=8: 70 4>102O=5 =0 A<5B:8Add Account WizardAddAccountWizardForm AdiumChatForm7?@0I0=5Send AdiumChatFormabout:blank about:blank AdiumChatForm`@85<0=5 =0 AJ>1I5=8O A0<> >B :>=B0:B8 2 A?8AJ:0&Accept messages only from contact listAntiSpamLayerSettingsClass&B3>2>@ =0 2J?@>A0:Answer to question:AntiSpamLayerSettingsClass<J?@>A 70 70I8B0B0 A@5IC A?0<:Anti-spam question:AntiSpamLayerSettingsClass:0AB@>9:8 =0 70I8B0B0 >B A?0<AntiSpamSettingsAntiSpamLayerSettingsClassb0 =5 A5 ?@85<0B AJ>1I5=8O :0A05I8 C4>AB>25@O20=53Do not accept NIL messages concerning authorizationAntiSpamLayerSettingsClassN0 =5 A5 ?@85<0B AJ>1I5=8O A URL 04@5A8$Do not accept NIL messages with URLsAntiSpamLayerSettingsClasst0 =5 A5 87?@0I0 2J?@>A/>B3>2>@ 0:> AB0BCA0 <8 5 "52848<"5Don't send question/reply if my status is "invisible"AntiSpamLayerSettingsClass::;NG20=5 70I8B0B0 A@5IC A?0<Enable anti-spam botAntiSpamLayerSettingsClass8!J>1I5=85 ?@8 25@5= >B3>2>@:Message after right answer:AntiSpamLayerSettingsClassL#254><O20=5 ?@8 1;>:8@0=5 =0 AJ>1I5=85Notify when blocking messageAntiSpamLayerSettingsClass 540:B8@0=5EditAppearanceSettingsFormAppearanceSettings71>@ =0 B5<0 Select theme:AppearanceSettings @>10TestAppearanceSettings......ChatFormJ7G8AB20=5 =0 ?@>7>@5F0 AJA AJ>1I5=8OClear chat logChatForm%@>=>;>38OContact historyChatForm,=D>@<0F8O 70 :>=B0:B0Contact informationChatForm Ctrl+FCtrl+FChatForm Ctrl+HCtrl+HChatForm Ctrl+ICtrl+IChatForm Ctrl+MCtrl+MChatForm Ctrl+QCtrl+QChatForm Ctrl+TCtrl+TChatForm<>B8:>=8 Emoticon menuChatFormFormChatForm4&8B8@0=5 =0 871@0=8O B5:ABQuote selected textChatForm7?@0I0=5SendChatForm"7?@0I0=5 =0 D09; Send fileChatForm<7?@0I0=5 =0 :0@B8=:0 < 7,6 kBSend image < 7,6 KBChatForm,7?@0I0=5 =0 AJ>1I5=85 Send messageChatForm@7?@0I0=5 =0 AJ>1I5=8O A "Enter"Send message on enterChatFormF7?@0I0=5 =0 C254><;5=8O ?@8 ?8A0=5Send typing notificationChatForm<1@JI0=5 =0 7=0:>20B0 ?>4@5410 Swap layoutChatForm,@>7>@5F AJA AJ>1I5=8O Chat windowChatLayerClass.( G0A:<8=, ?J;=0 40B0 )( hour:min, full date )ChatSettingsWidget(G0A:<8=:A5:)( hour:min:sec )ChatSettingsWidget<(G0A:<8=:A5: 45=/<5A5F/3>48=0)( hour:min:sec day/month/year )ChatSettingsWidget!;54 I@0:20=5 2J@EC 8:>=0B0 2 A8AB5<=8O ?>4=>A 40 A5 ?>:0720B 2A8G:8 =5?@>G5B5=8 AJ>1I5=8O6After clicking on tray icon show all unreaded messagesChatSettingsWidget 073>2>@ChatChatSettingsWidgetdA8G:8 (;8G=8 8 3@C?>28) @073>2>@8 2 548= ?@>7>@5F#Chats and conferences in one windowChatSettingsWidgetFCB>= 70 70B20@O=5 2J2 2A5:8 @0745;Close button on tabsChatSettingsWidgett0B20@O=5 =0 @0745;0/?@>7>@5F0 A;54 87?@0I0=5 =0 AJ>1I5=850Close tab/message window after sending a messageChatSettingsWidget`F25BO20=5 =0 ?A524>=8<8B5 2 3@C?>28B5 @073>2>@8!Colorize nicknames in conferencesChatSettingsWidget@0 =5 <830 2 ;5=B0B0 AJA ?@>F5A8Don't blink in task barChatSettingsWidgetT0 =5 A5 3@C?8@0B AJ>1I5=8OB0 A;54 (A5:.):!Don't group messages after (sec):ChatSettingsWidget~0 =5 A5 ?>:0720B AJ18B8O 0:> ?@>7>@5F0 AJA AJ>1I5=8O 5 >B2>@5=+Don't show events if message window is openChatSettingsWidgetFormChatSettingsWidget1I8GeneralChatSettingsWidgetnB20@O=5 =0 @0745;/?@>7>@5F ?@8 ?>;CG020=5 =0 AJ>1I5=85+Open tab/message window if received messageChatSettingsWidget0?><=O=5 =0 >B2>@5=8B5 ;8G=8 @073>2>@8 A;54 70B20@O=5 =0 ?@>7>@5F0 AJA AJ>1I5=8O3Remember openned privates after closing chat windowChatSettingsWidgetX@5<0E20=5 =0 AJ>1I5=8OB0 >B ?@>7>@5F0 A;54:%Remove messages from chat view after:ChatSettingsWidgetL7?@0I0=5 =0 AJ>1I5=8O A 42>5= "Enter"Send message on double enterChatSettingsWidget@7?@0I0=5 =0 AJ>1I5=8O A "Enter"Send message on enterChatSettingsWidgetF7?@0I0=5 =0 C254><;5=8O ?@8 ?8A0=5Send typing notificationsChatSettingsWidget(0 A5 ?>:0720B 8<5=0 Show namesChatSettingsWidget(:;NG20=5 =0 @0745;8 Tabbed modeChatSettingsWidget@ 0745;8B5 <>30B 40 1J40B <5AB5=8Tabs are movableChatSettingsWidget, 568< B5:AB>28 1@0C7J@Text browser modeChatSettingsWidget$$>@<0B =0 2@5<5B>: Timestamp:ChatSettingsWidget 568< WebKit Webkit modeChatSettingsWidgetD<font color='green'>8H5...</font>$Typing... ChatWindowH"2J@45 3>;O< @07<5@ =0 87>1@065=85B>Image size is too big ChatWindowX7>1@065=8O (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.png *.bmp *.jpg *.jpeg) ChatWindow B20@O=5 =0 D09; Open File ChatWindow&@5H:0 ?@8 >B20@O=5 Open error ChatWindowJ7G8AB20=5 =0 ?@>7>@5F0 AJA AJ>1I5=8O Clear chatConfFormCtrl+M, Ctrl+SCtrl+M, Ctrl+SConfForm Ctrl+QCtrl+QConfForm Ctrl+TCtrl+TConfFormFormConfFormV@5>1@07C20=5/"@0=A;8B5@0F8O =0 AJ>1I5=85B>Invert/translit messageConfForm4&8B8@0=5 =0 871@0=8O B5:ABQuote selected textConfForm7?@0I0=5SendConfForm&7?@0I0=5 A "Enter" Send on enterConfForm,>:0720=5 =0 5<>B8:>=8Show emoticonsConfForm(<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html>

Console <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html>

ConsoleFormConsole72J= A?8AJ:0 Not in listContactListProxyModel72J= ;8=8OOfflineContactListProxyModel0 ;8=8OOnlineContactListProxyModel100%100%ContactListSettingsClass!<5B:0:Account:ContactListSettingsClass.@>7>@5F 157 >3@0645=85Borderless WindowContactListSettingsClass>0AB@>9:8 =0 A?8AJ:0 A :>=B0:B8ContactListSettingsContactListSettingsClass5@A>=0;878@0=5 CustomizeContactListSettingsClass85@A>=0;878@0=5 =0 H@8DB>25:Customize font:ContactListSettingsClassN0?J;20=5 =0 D>=0 A @54C20I8 A5 F25B>251Draw the background with using alternating colorsContactListSettingsClass @C?0:Group:ContactListSettingsClass4!:@820=5 =0 ?@07=8B5 3@C?8Hide empty groupsContactListSettingsClassJ!:@820=5 =0 ?>B@518B5;8B5 872J= ;8=8OHide offline usersContactListSettingsClass`!:@820=5 =0 @0745;8B5;O "0 ;8=8O"/"72J= ;8=8O"Hide online/offline separatorsContactListSettingsClassJ=H5= 284 Look'n'FeelContactListSettingsClassA=>2=8MainContactListSettingsClass72J= ;8=8O:Offline:ContactListSettingsClass0 ;8=8O:Online:ContactListSettingsClass@>7@0G=>AB:Opacity:ContactListSettingsClass">@<0;5= ?@>7>@5FRegular WindowContactListSettingsClass 0745;8B5;: Separator:ContactListSettingsClass*>:0720=5 =0 A<5B:8B5 Show accountsContactListSettingsClass(>:0720=5 =0 020B0@8 Show avatarsContactListSettingsClass<>:0720=5 8:>=8B5 =0 :;85=B8B5Show client iconsContactListSettingsClass$>:0720=5 =0 3@C?8 Show groupsContactListSettingsClassD>4@5640=5 =0 :>=B0:B8B5 ?> AB0BCASort contacts by statusContactListSettingsClass("5<0 =0 >3@0645=85B> Theme borderContactListSettingsClass.=AB@C<5=B0;5= ?@>7>@5F Tool windowContactListSettingsClass$!B8; =0 ?@>7>@5F0: Window Style:ContactListSettingsClassB52J7<>65= 5 70?8AJB 2J2 D09;0 %1Cannot write to file %1Core::PListConfigBackend &$09;&FileDefaultContactList0 ?@>3@0<0B0AboutDefaultContactList#?@02;5=85ControlDefaultContactList&!:@820=5 =0 3@C?8B5 Hide groupsDefaultContactListA=>2=> <5=N Main menuDefaultContactList03;CH020=5MuteDefaultContactListJ>:0720=5 =0 :>=B0:B8B5 "72J= ;8=8O" Show offlineDefaultContactList6!:@820=5/?>:0720=5 =0 3@C?8Show/hide groupsDefaultContactList\!:@820=5/?>:0720=5 =0 :>=B0:B8B5 "72J= ;8=8O"Show/hide offlineDefaultContactList::;NG20=5/87:;NG20=5 =0 72C:0 Sound on/offDefaultContactList qutIMqutIMDefaultContactList"J7<>6=8 20@80=B8Possible variants GeneralWindowO25@BJC8>?HI0A4D3E9:;;'7LF61=<,.// "*#()!$%:",&<>?Bqwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? GeneralWindow#4>AB>25@O20=5AuthenticationGlobalProxySettingsClass40AB@>9:8 =0 >1I>B> ?@>:A8GlobalProxySettingsGlobalProxySettingsClassHTTPHTTPGlobalProxySettingsClass %>AB:Host:GlobalProxySettingsClass57NoneGlobalProxySettingsClass0@>;0: Password:GlobalProxySettingsClass >@B:Port:GlobalProxySettingsClass @>:A8ProxyGlobalProxySettingsClassSOCKS 5SOCKS 5GlobalProxySettingsClass"8?:Type:GlobalProxySettingsClass$>B@518B5;A:> 8<5: User name:GlobalProxySettingsClass"<?> ?>4@0718@0=5> GuiSetttingsWindowClass:<?> ?>4@0718@0=5> (0=3;89A:8) ( English )GuiSetttingsWindowClass<@JG=>> GuiSetttingsWindowClass <=O<0>GuiSetttingsWindowClass<A8AB5<=0>GuiSetttingsWindowClass*!B8; =0 ?@8;>65=85B>:Application style:GuiSetttingsWindowClass@8;030=5ApplyGuiSetttingsWindowClass*"5<0 =0 >3@0645=85B>: Border theme:GuiSetttingsWindowClass B:07CancelGuiSetttingsWindowClass@"5<0 =0 4=52=8:0 (@568< WebKit):Chat log theme (webkit):GuiSetttingsWindowClass@"5<0 =0 ?@>7>@5F0 AJA AJ>1I5=8O:Chat window dialog:GuiSetttingsWindowClass6"5<0 =0 A?8AJ:0 A :>=B0:B8:Contact list theme:GuiSetttingsWindowClass<>B8:>=8: Emoticons:GuiSetttingsWindowClass 78:: Language:GuiSetttingsWindowClassOKGuiSetttingsWindowClass:"5<0 =0 87A:0G0I8B5 ?@>7>@F8:Popup windows theme:GuiSetttingsWindowClass2C:>20 B5<0: Sounds theme:GuiSetttingsWindowClass4"5<0 =0 8:>=8B5 70 AB0BCA:Status icon theme:GuiSetttingsWindowClass2"5<0 =0 A8AB5<=8B5 8:>=8:System icon theme:GuiSetttingsWindowClassJ0AB@>9:8 =0 ?>B@518B5;A:8O 8=B5@D59AUser interface settingsGuiSetttingsWindowClass20AB@>9:8 =0 E@>=>;>38OB0HistorySettingsHistorySettingsClassL0?0720=5 =0 E@>=>;>38O =0 AJ>1I5=8OB0Save message historyHistorySettingsClassZ>:0720=5 =0 ?>A;54=8B5 AJ>1I5=8O 2 ?@>7>@5F0(Show recent messages in messaging windowHistorySettingsClass11HistoryWindowClass!<5B:0:Account:HistoryWindowClass1I>: %L1All: %L1HistoryWindowClassB:From:HistoryWindowClass%@>=>;>38O HistoryWindowHistoryWindowClassE>4OI8: %L1In: %L1HistoryWindowClass7E>4OI8: %L1Out: %L1HistoryWindowClass@JI0=5ReturnHistoryWindowClass"J@A5=5SearchHistoryWindowClass1I>: %L1All: %L1#JsonHistoryNamespace::HistoryWindowE>4OI8: %L1In: %L1#JsonHistoryNamespace::HistoryWindowO<0 E@>=>;>38O No History#JsonHistoryNamespace::HistoryWindow7E>4OI8: %L1Out: %L1#JsonHistoryNamespace::HistoryWindow*%1 ?@><5=8 AB0BCA0 A8%1 changed statusKineticPopupBackend0%1 8<0 @>645= 45= 4=5A!!%1 has birthday today!!KineticPopupBackend %1 5 872J= ;8=8O %1 is offlineKineticPopupBackend%1 5 =0 ;8=8O %1 is onlineKineticPopupBackend%1 ?8H5 %1 is typingKineticPopupBackend2;>:8@0=> AJ>1I5=85 >B %1Blocked message from %1KineticPopupBackend@>9CountKineticPopupBackend !J>1I5=85 >B %1:Message from %1:KineticPopupBackend2!8AB5<=> AJ>1I5=85 >B %1:System message from %1:KineticPopupBackend"qutIM 5 AB0@B8@0=qutIM launchedKineticPopupBackend:>;O ?>?J;=5B5 2A8G:8 ?>;5B0.Please fill all fields. LastLoginPagez>;O 2J2545B5 ?>B@518B5;A:> 8<5 8 ?0@>;0 70 871@0=8O ?@>B>:>;&Please type chosen protocol login data LastLoginPagepx pxNotificationsLayerSettingsClassA5: sNotificationsLayerSettingsClass4:>=B0:B ?@><5=O AB0BCA0 A8Contact change statusNotificationsLayerSettingsClass4:>=B0:B 87;870 872J= ;8=8OContact sign offNotificationsLayerSettingsClass,:>=B0:B 2;870 =0 ;8=8OContact sign onNotificationsLayerSettingsClass,:>=B0:B ?8H5 AJ>1I5=85Contact typing messageNotificationsLayerSettingsClass8A>G8=0:Height:NotificationsLayerSettingsClass>;5= ;O2 J3J;Lower left cornerNotificationsLayerSettingsClass >;5= 45A5= J3J;Lower right cornerNotificationsLayerSettingsClass(5 ?>;CG5=> AJ>1I5=85Message receivedNotificationsLayerSettingsClass57 ?;J730=5No slideNotificationsLayerSettingsClass40AB@>9:8 =0 C254><;5=8OB0NotificationsLayerSettingsNotificationsLayerSettingsClass&#254><O20=5 :>30B>: Notify when:NotificationsLayerSettingsClass>78F8O: Position:NotificationsLayerSettingsClassD>:0720=5 =0 10;>=8 AJA AJ>1I5=8O:Show balloon messages:NotificationsLayerSettingsClass>>:0720=5 =0 87A:0G0I8 ?@>7>@F8Show popup windowsNotificationsLayerSettingsClass:@>4J;68B5;=>AB =0 ?>:0720=5: Show time:NotificationsLayerSettingsClass*%>@87>=B0;=> ?;J730=5Slide horizontallyNotificationsLayerSettingsClass&5@B8:0;=> ?;J730=5Slide verticallyNotificationsLayerSettingsClass !B8;:Style:NotificationsLayerSettingsClass>@5= ;O2 J3J;Upper left cornerNotificationsLayerSettingsClass >@5= 45A5= J3J;Upper right cornerNotificationsLayerSettingsClass(8@8=0:Width:NotificationsLayerSettingsClassAES H8D@8@0=5 AES cryptoPlugind>?J;=8B5;=0 :>=D83C@0F8O =0 qutIM 70 Apple plists4Additional qutIM config realization for Apple plistsPlugin>4@0718@0I0 A5 70 qutIM @50;870F8O =0 @073>2>@. 0 1070B0 =0 Audium AB8;>25 70 @073>2>@0:Default qutIM chat realization, based on Adium chat stylesPluginp>=D83C@0F8O =0 qutIM ?> ?>4@0718@0=5. 078@0=0 =0 JSON.0Default qutIM config realization. Based on JSON.Plugin`>=D83C@0F8O =0 qutIM ?> ?>4@0718@0=5. ?@>AB5=03Default qutIM contact list realization. Just simplePlugin>4@0718@0I0 A5 70 qutIM @50;870F8O =0 H8D@8@0=5. 0 1070B0 =0 aes256 0;3>@8BJ<0;Default qutIM crypto realization. Based on algorithm aes256Plugint>=D83C@0F8O =0 qutIM ?> ?>4@0718@0=5. 078@0=0 =0 Kinetic3Default qutIM popup realization. Powered by KineticPlugin>4@0718@0I A5 70 qutIM 480;>3 70 =0AB@>920=5, A OS X AB8; =0 703;02=0B0 ;5=B0ADefault qutIM settings dialog realization with OS X style top barPlugin"JSON :>=D83C@0F8O JSON configPlugin87A:0G0I8 ?@>7>@F8 (Kinetic)Kinetic popupsPlugin$PList :>=D83C@0F8O PList configPlugin4?@>AB5= A?8AJ: A :>=B0:B8Simple ContactListPlugin.WebKit A;>9 70 @073>2>@Webkit chat layerPlugin% =0AB@>9:8X Settings dialogPlugin11PluginSettingsClass B:07CancelPluginSettingsClass<0AB@>920=5 =0 4>102:8 - qutIMConfigure plugins - qutIMPluginSettingsClassOkPluginSettingsClass<b>%1</b> %1 PopupWindow<b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2b%1
%2 PopupWindow$7A:0G0I8 ?@>7>@F8 PopupWindowPopupWindowClass00 A5 87B@85 ?@>D8;0 %1?Delete %1 profile?ProfileLoginDialog&7B@820=5 =0 ?@>D8;Delete profileProfileLoginDialog!3@5H5=0 ?0@>;0Incorrect passwordProfileLoginDialog;870=5Log inProfileLoginDialog @>D8;ProfileProfileLoginDialog B:07CancelProfileLoginDialogClass>0 =5 A5 ?>:0720 ?@8 AB0@B8@0=5Don't show on startupProfileLoginDialogClass<5:Name:ProfileLoginDialogClass0@>;0: Password:ProfileLoginDialogClass";870=5 2 ?@>D8;0ProfileLoginDialogProfileLoginDialogClass*0?><=O=5 =0 ?0@>;0B0Remember passwordProfileLoginDialogClass(@5<0E20=5 =0 ?@>D8;Remove profileProfileLoginDialogClass;870=5Sign inProfileLoginDialogClass,>;O 8715@5B5 ?@>B>:>;Please choose IM protocol ProtocolPage">78 AJ25B=8: I5 28 ?><>3=5 ?@8 4>102O=5B> =0 ?@>B>:>;. 8=038 <>65B5 40 4>102OB5 8;8 87B@820B5 A<5B:8 G@57 <5=NB> A=>2=8->!<5B:8 This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts ProtocolPage2%1 8<0 @>645= 45= 4=5A!!!%1 has birthday today!!QObject%1 ?8H5 %1 is typingQObject &7E>4&QuitQObject( )  (BLOCKED) QObject1-20 G5B2J@B 1st quarterQObject2-@0 G5B2J@B 2nd quarterQObject3-B0 G5B2J@B 3rd quarterQObject4-B0 G5B2J@B 4th quarterQObject$A8G:8 D09;>25 (*) All files (*)QObject0I8B0 >B A?0< Anti-spamQObject.;>:8@0=> C4>AB>25@5=85Authorization blockedQObject:;>:8@0=> AJ>1I5=85 >B %1: %2Blocked message from %1: %2QObject 073>2>@ A %1 Chat with %1QObject"!?8AJ: A :>=B0:B8 Contact ListQObject%@>=>;>38OHistoryQObject&!J>1I5=85 >B %1: %2Message from %1: %2QObject72J= A?8AJ:0 Not in listQObject#254><;5=8O NotificationsQObject B20@O=5 =0 D09; Open FileQObject 7E>4QuitQObject 2CF8SoundQObject&2C:>28 C254><;5=8OSound notificationsQObject,8<0 @>645= 45= 4=5A!!!has birthday today!!QObject?8H5typingQObject'5:CheckSettings ><1>ComboSettings$7A:0G0I8 ?@>7>@F8PopupsSettings(@>10 =0 =0AB@>9:8B5 Test settingsSettings "5:ABTextSettings......SoundEngineSettings><0=40:Command:SoundEngineSettings,!>1AB25= 72C:>2 ?;59J@Custom sound playerSoundEngineSettings"8? Engine typeSoundEngineSettings7?J;=8<8 ExecutablesSoundEngineSettingsl7?J;=8<8 (*.exe *.com *.cmd *.bat) A8G:8 D09;>25 (*)5Executables (*.exe *.com *.cmd *.bat) All files (*.*)SoundEngineSettingsFormSoundEngineSettings57 72C:No soundSoundEngineSettings QSoundQSoundSoundEngineSettings271>@ =0 ?JB 4> :><0=40B0Select command pathSoundEngineSettings,A8G:8 72C:>28 D09;>25 I5 1J40B :>?8@0=8 2 48@5:B>@8O "%1/". !JI5AB2C20I8B5 D09;>25 I5 1J40B ?@570?8A0=8 157 ?@54C?@5645=85. 5;05B5 ;8 40 ?@>4J;68B5?All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue?SoundLayerSettingsF@5H:0 ?@8 ?@>G8B0=5 =0 D09;0 "%1".)An error occured while reading file "%1".SoundLayerSettings4>=B0:B ?@><5=O AB0BCA0 A8Contact changed statusSoundLayerSettings,>=B0:B 2;870 =0 ;8=8OContact is onlineSoundLayerSettings4>=B0:B 87;870 872J= ;8=8OContact went offlineSoundLayerSettings>@54AB>OI @>645= 45= =0 :>=B0:BContact's birthday is commingSoundLayerSettingsV$09;JB "%1" =5 <>65 40 1J45 :>?8@0= 2 "%2".!Could not copy file "%1" to "%2".SoundLayerSettings\$09;JB "%1" =5 <>65 40 1J45 >B2>@5= 70 G5B5=5.%Could not open file "%1" for reading.SoundLayerSettingsZ$09;JB "%1" =5 <>65 40 1J45 >B2>@5= 70 70?8A.%Could not open file "%1" for writing.SoundLayerSettings @5H:0ErrorSoundLayerSettings::A?>@B8@0=5 =0 72C:>20 AE5<0Export sound styleSoundLayerSettings:A?>@B8@0=5... Export...SoundLayerSettings>$09;JB "%1" 5 2 =525@5= D>@<0B.File "%1" has wrong format.SoundLayerSettings8<?>@B8@0=5 =0 72C:>20 AE5<0Import sound styleSoundLayerSettings"E>4OI> AJ>1I5=85Incoming messageSoundLayerSettings.B20@O=5 =0 72C:>2 D09;Open sound fileSoundLayerSettings$7E>4OI> AJ>1I5=85Outgoing messageSoundLayerSettingsl2C:>20B0 AE5<0 5 5:A?>@B8@0=0 CA?5H=> 2J2 D09;0 "%1".0Sound events successfully exported to file "%1".SoundLayerSettingsZ2C:>28 D09;>25 (*.wav);;A8G:8 D09;>25 (*.*)$Sound files (*.wav);;All files (*.*)SoundLayerSettings!B0@B8@0=5StartupSoundLayerSettings !8AB5<=> AJ18B85 System eventSoundLayerSettings&XML D09;>25 (*.xml)XML files (*.xml)SoundLayerSettings@8;030=5ApplySoundSettingsClass!J18B8OEventsSoundSettingsClass:A?>@B8@0=5... Export...SoundSettingsClass<?>@B8@0=5... Import...SoundSettingsClassB20@O=5OpenSoundSettingsClass@>A28@20=5PlaySoundSettingsClass2C:>2 D09;: Sound file:SoundSettingsClass5G5 87?>;720B5 72C:>20 B5<0. >;O, ?J@2> O 87:;NG5B5, 70 40 704045B5 72CF8B5 @JG=>.FYou're using a sound theme. Please, disable it to set sounds manually.SoundSettingsClass$0AB@>9:8 =0 72C:0 soundSettingsSoundSettingsClass5 2:JI8 is at homeStatus5 =0 @01>B0 is at workStatus>BAJAB20is awayStatus 5 705Bis busyStatusA5 A2J@720 is connectingStatus5 45?@5A8@0= is depressionStatus 5 7J;is evilStatus,5 A2>1>45= 70 @073>2>@is free for chatStatus5 =52848< is invisibleStatus5 =54>ABJ?5=is not avaiableStatus 5 705B is occupiedStatus5 872J= ;8=8O is offlineStatus5 =0 B5;5D>=0is on the phoneStatus5 =0 ;8=8O is onlineStatus5 =0 >1O4is out to lunchStatus,@5420@8B5;=> 704045=8Preset caption StatusDialogDJ2545B5 AJ>1I5=85 70 20H8O AB0BCAWrite your status message StatusDialog <157>StatusDialogVisualClass B:07CancelStatusDialogVisualClass>0 =5 A5 ?>:0720 480;>30 ?>25G5Do not show this dialogStatusDialogVisualClassOKStatusDialogVisualClass04045=8:Preset:StatusDialogVisualClass 0?8ASaveStatusDialogVisualClass !B0BCA StatusDialogStatusDialogVisualClass B:07CancelStatusPresetCaptionClassOKStatusPresetCaptionClassH>;O, 2J2545B5 ?@5420@8B5;5= =04?8A:Please enter preset caption:StatusPresetCaptionClass<@5420@8B5;=> 704045=8 AB0BCA8StatusPresetCaptionStatusPresetCaptionClass :JI8At homeTreeContactListModel0 @01>B0At workTreeContactListModelBAJAB20AwayTreeContactListModel5?@5A8@0= DepressionTreeContactListModel5 157?>:>9B5Do not disturbTreeContactListModelJ;EvilTreeContactListModel(!2>1>45= 70 @073>2>@ Free for chatTreeContactListModel%@0=8 A5 Having lunchTreeContactListModel52848< InvisibleTreeContactListModel54>ABJ?5= Not availableTreeContactListModel05BOccupiedTreeContactListModel72J= ;8=8OOfflineTreeContactListModel0 ;8=8OOnlineTreeContactListModel"57 C4>AB>25@5=85Without authorizationTreeContactListModel>0AB@>9:8 =0 A<5B:8 8 ?@>B>:>;8Accounts and protocols settingsXSettingsDialogH>?J;B=8B5;=8 =0AB@>9:8 =0 4>102:8B5Additional plugins settingsXSettingsDialogJ=H5= 284 AppearanceXSettingsDialog00AB@>9:8 =0 2J=H=8O 284Appearance settingsXSettingsDialog1I8GeneralXSettingsDialog1I8 =0AB@>9:8General configurationXSettingsDialog>102:8PluginsXSettingsDialog@>B>:>;8 ProtocolsXSettingsDialogp728=5B5, => B078 :0B53>@8O =5 AJ4J@60 =8:0:28 =0AB@>9:81Sorry, this category doesn't contain any settingsXSettingsDialog% =0AB@>9:8XSettingsDialogXSettingsDialogFormXSettingsGroup=8<8@0=8AnimatedXToolBar>;O< (48E48) Big (48x48)XToolBar* 7028A8<>AB >B AB8;0Follow the styleXToolBar" 07<5@ =0 8:>=8B5 Icon sizeXToolBar >@<0;5= (32E32)Normal (32x32)XToolBar.>:0720=5 A0<> =0 8:>=0Only display the iconXToolBar.>:0720=5 A0<> =0 B5:ABOnly display the textXToolBar@C3OtherXToolBar0;J: (16x16) Small (16x16)XToolBar:"5:ABJB A5 ?>O2O20 4> 8:>=0B0 The text appears beside the iconXToolBar<"5:ABJB A5 ?>O2O20 ?>4 8:>=0B0The text appears under the iconXToolBar!B8; =0 1CB>=0Tool button styleXToolBar.J=H5= 284 =0 % ;5=B0B0XBar appearanceXToolBar V<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">>O= 8@>2 (kiroff)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boyan.kiroff@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">boyan.kiroff@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> :> 8<0 65;05I8 40 ?><>3=0B 8/8;8 40 ?@54;>60B :>@5:F88 8 ?@><5=8 <br/> 40 A5 A2J@60B A <5= =0 ?>A>G5=8O e-mail 04@5A <br/> 8;8 2 A5:F8OB0 70 1J;30@A:8 ?@52>4 2J2 <a href="http://qutim.org/forum/viewtopic.php?f=63&t=745"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">D>@C<0 =0 qutIM</span></a></span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html>(Enter there your names, dear translaters aboutInfoL1I ?C1;8G5= ;8F5=7 =0 # (GNU GPL) 2%GNU General Public License, version 2 aboutInfo:>4:@5?5B5 ?@>5:B0 A 40@5=85: Support project with a donation: aboutInfoYandex.Money Yandex.Money aboutInfo <!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" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutIM, <=>3>-?;0BD>@<5= :;85=B 70 <><5=B=8 AJ>1I5=8O</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qutim.develop@gmail.com</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(c) 2008-2009,  CAB0< '0:8=,  CA;0= 83<0BC;;8=</p></body></html>

qutIM, multiplatform instant messenger

qutim.develop@gmail.com

(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin

aboutInfoClass/d<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">5>@38 !8@:>2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> 0:5B A 8:>=8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">.AC:5 0<8O<0=5</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> 0:5B A 8:>=8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">:8?JB Tango</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> 0:5B A 5<>B8:>=8 </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">5=8A >28:>2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> 2B>@ =0 72C:>28B5 AJ18B8O</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">;5:A59 3=0B852</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> 2B>@ =0 A8AB5<0B0 70 >?@545;O=5 =0 :;85=B8B5</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"><8B@8 @5:B0</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">0@:CA </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> 2B>@ =0 >15:B0 70 >1;8:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html>

Georgy Surkov

Icons pack

mexanist@gmail.com

Yusuke Kamiyamane

Icons pack

http://www.pinvoke.com/

Tango team

Smile pack

http://tango.freedesktop.org/

Denis Novikov

Author of sound events

Alexey Ignatiev

Author of client identification system

twosev@gmail.com

Dmitri Arekhta

daemones@gmail.com

Markus K

Author of skin object

QSkinWindows

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> CAB0< '0:8=</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">;025= @07@01>BG8: 8 >A=>20B5; =0 ?@>5:B0</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt; color:#090909;"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt; color:#090909;"> CA;0= 83<0BC;;8= </span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">;025= @07@01>BG8:</span></p></body></html>

Rustam Chakin

qutim.develop@gmail.com

Main developer and Project founder

Ruslan Nigmatullin

euroelessar@gmail.com

Main developer

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

aboutInfoClass&<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> CAB0< '0:8=</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">;025= @07@01>BG8: 8 >A=>20B5; =0 ?@>5:B0</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> CA;0= 83<0BC;;8=</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">;025= @07@01>BG8: 8 2>40G =0 ?@>5:B0</span></p></body></html>

Rustam Chakin

qutim.develop@gmail.com

Main developer and Project founder

Ruslan Nigmatullin

euroelessar@gmail.com

Main developer and Project leader

aboutInfoClass2<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schrter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox 181;8>B5:0</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">5>@38 !C@:>2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 0:5B A 8:>=8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 0:5B A 8:>=8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">:8?JB Tango </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 0:5B A 5<>B8:>=8 </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">5=8A >28:>2</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 2B>@ =0 72C:>28B5 AJ18B8O</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">;5:A59 3=0B852</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 2B>@ =0 A8B5<0B0 70 >?@545;O=5 =0 :;85=B8B5</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"><8B@8 @5:B0</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 2B>@ =0 >15:B0 70 >1;8:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html>

Jakob Schröter

Gloox library

http://camaya.net/gloox/

Georgy Surkov

Icons pack

mexanist@gmail.com

Yusuke Kamiyamane

Icons pack

http://www.pinvoke.com/

Tango team

Smile pack

http://tango.freedesktop.org/

Denis Novikov

Author of sound events

Alexey Ignatiev

Author of client identification system

twosev@gmail.com

Dmitri Arekhta

daemones@gmail.com

Markus K

Author of skin object

QSkinWindow

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

aboutInfoClass <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, <=>3>-?;0BD>@<5= :;85=B 70 <><5=B=8 AJ>1I5=8O</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 2008-2009,  CAB0< '0:8=,  CA;0= 83<0BC;;8=</span></p></body></html>

qutIM, multiplatform instant messenger

euroelessar@gmail.com

© 2008-2009, Rustam Chakin, Ruslan Nigmatullin

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">8F5=78>==> A?>@07C<5=85</a></p></body></html>

License agreements

aboutInfoClass0 ?@>3@0<0B0AboutaboutInfoClass0 qutIM About qutIMaboutInfoClass 2B>@8AuthorsaboutInfoClass0B20@O=5CloseaboutInfoClass0@8B5;8DonatesaboutInfoClass08F5=78>==> A?>@07C<5=85License AgreementaboutInfoClass@JI0=5ReturnaboutInfoClass ;03>40@=>AB8 =0 Thanks ToaboutInfoClass@52>40G8 TranslatorsaboutInfoClass27B@820=5 =0 A<5B:0B0 %1?Delete %1 account? loginDialog&7B@820=5 =0 A<5B:0Delete account loginDialog......loginDialogClassR<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">0:A8<0;=0B0 4J;68=0 =0 ICQ ?0@>;0B0 5 >3@0=8G5=0 4> 8 A8<2>;0.</span></p></body></html>$

Maximum length of ICQ password is limited to 8 characters.

loginDialogClass !<5B:0AccountloginDialogClass!<5B:0:Account:loginDialogClass*2B><0B8G=> A2J@720=5 AutoconnectloginDialogClass0@>;0: Password:loginDialogClass(@5<0E20=5 =0 ?@>D8;Remove profileloginDialogClass*0?><=O=5 =0 ?0@>;0B0Save my passwordloginDialogClass!83C@=> 2;870=5 Secure loginloginDialogClass0>:0720=5 ?@8 AB0@B8@0=5Show on startuploginDialogClass;870=5Sign inloginDialogClass<8= minmainSettingsClassA5: smainSettingsClassb>102O=5 =0 A<5B:8B5 2 <5=NB> =0 A8AB5<=8O ?>4=>A Add accounts to system tray menumainSettingsClass8=038 >B3>@5 Always on topmainSettingsClassV2B><0B8G=> ?@5<8=020=5 2 "BAJAB20<" A;54:Auto-away after:mainSettingsClass42B><0B8G=> A:@820=5 A;54: Auto-hide:mainSettingsClassb0 =5 A5 ?>:0720 ?@>7>@5F0 70 2E>4 ?@8 AB0@B8@0=5"Don't show login dialog on startupmainSettingsClass.!:@820=5 ?@8 AB0@B8@0=5Hide on startupmainSettingsClassZ0?><=O=5 =0 @07<5@0 8 ?>78F8OB0 =0 ?@>7>@5F0"Save main window size and positionmainSettingsClass0>:0720=5 =0 AB0BCA0 >B:Show status from:mainSettingsClassT!B0@B8@0=5 A0<> =0 54=0 8=AB0=F8O =0 qutIM!Start only one qutIM at same timemainSettingsClass"A=>2=8 =0AB@>9:8 mainSettingsmainSettingsClass &7E>4&QuitqutIM&0AB@>9:8... &Settings...qutIMR&0AB@>9:8 =0 ?>B@518B5;A:8O 8=B5@D59A...&User interface settings...qutIMn!83C@=8 ;8 AB5, G5 =08AB8=0 65;05B5 40 A<5=8B5 ?@>D8;0?%Do you really want to switch profile?qutIM20AB@>9:8 =0 4>102:8B5...Plug-in settings...qutIM!<O=0 =0 ?@>D8;Switch profilequtIM qutIMqutIM qutIMClass !<5B:8Accounts qutimSettings1I8General qutimSettings1I> ?@>:A8 Global proxy qutimSettings40?0720=5 ?@><5=8B5 70 %1?Save %1 settings? qutimSettings(0?8A =0 =0AB@>9:8B5 Save settings qutimSettings11qutimSettingsClass@8;030=5ApplyqutimSettingsClass B:07CancelqutimSettingsClassOKqutimSettingsClass0AB@>9:8SettingsqutimSettingsClassqutim-0.2.0/languages/bg_BG/binaries/urlpreview.qm0000644000175000017500000002776311240003554023572 0ustar euroelessareuroelessar֡s) K:+1 s. t)& .f <*hY,|i/BZ@5420@8B5;5= ?@53;54 =0 04@5A8 2 AJ>1I5=8OB0Make URL previews in messagesurlpreviewPlugin>@5420@8B5;5= ?@53;54 =0 04@5A8 URL PreviewurlpreviewPlugin 09B0bytesurlpreviewPlugin%MAXH% <0:@>A %MAXH% macrourlpreviewSettingsClass%MAXW% <0:@>A %MAXW% macrourlpreviewSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">>102:0 70 ?@5420@8B5;5= ?@53;54 =0 04@5A8 2 qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn 25@A8O</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">@5420@8B5;5= ?@53;54 =0 04@5A8 2 AJ>1I5=8OB0</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">;5:A0=4J@ 070@8=</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html>

URLPreview qutIM plugin

svn version

Make previews for URLs in messages

Author:

Alexander Kazarin

<boiler@co.ru>

(c) 2008-2009

urlpreviewSettingsClass0 4>102:0B0AbouturlpreviewSettingsClassj0 =5 A5 ?>:0720 8=D>@<0F8O 70 text/html content type*Don't show info for text/html content typeurlpreviewSettingsClass@:;NG20=5 70 2E>4OI8B5 AJ>1I5=8OEnable on incoming messagesurlpreviewSettingsClassB:;NG20=5 70 87E>4OI8B5 AJ>1I5=8OEnable on outgoing messagesurlpreviewSettingsClass1I8GeneralurlpreviewSettingsClassX(01;>= 70 ?@5420@8B5;5= ?@53;54 87>1@065=8O:Image preview template:urlpreviewSettingsClass7>1@065=8OImagesurlpreviewSettingsClass.(01;>= =0 8=D>@<0F8OB0:Info template:urlpreviewSettingsClass0:@>A8: %TYPE% - B8? =0 AJ4J@60=85B> %SIZE% - @07<5@ =0 AJ4J@60=85B>5Macros: %TYPE% - Content-Type %SIZE% - Content-LengthurlpreviewSettingsClass0:@>A: %URL% - 4@5A =0 87>1@065=85B> %UID% - 5=5@8@0= C=8:0;5= 845=B8D8:0B>@5Macros: %URL% - Image URL %UID% - Generated unique IDurlpreviewSettingsClassL0:A8<0;5= @07<5@ =0 D09;0 (2 09B>25)Max file size limit (in bytes)urlpreviewSettingsClass0AB@>9:8SettingsurlpreviewSettingsClassqutim-0.2.0/languages/bg_BG/binaries/nowlistening.qm0000644000175000017500000006213611253116574024112 0ustar euroelessareuroelessar]GWbh^v`a% {aYYL^^ YǒeZH@`]i4ZZD\:ln.^3 J.a YY E ƾ_ 'At ysY X F=[2 P B 5] T_6 [ s_ RXU Ze[tέ$\ib %artist - %title%artist - %title settingsUi1010 settingsUi127.0.0.1 127.0.0.1 settingsUi66006600 settingsUi<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">" <><5=B0 A;CH0<" 4>102:0 70 qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">2B>@:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">2B>@ =0 WinAmp <>4C;0:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">5B5@  CA0=>2 </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html>J

Now Listening qutIM Plugin

v 0.6

Author:

Ian 'NayZaK' Kazlauskas

nayzak90@googlemail.com

Winamp module author:

Rusanov Peter

tazkrut@mail.ru

(c) 2009

 settingsUiB<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">0 @07H8@5=8OB AB0BCA 2 ICQ A5 87?>;720B A;54=8B5 :;NG>28 4C<8:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - 87?J;=8B5;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - 703;0285</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - 0;1C<</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - =><5@ =0 ?5A5=</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - ?@>4J;68B5;=>AB 2 <8=CB8</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - ?J;5= ?JB 4> D09;0</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">0 =0AB@>5=8OB0 2 Jabber A5 87?>;720B A;54=8B5 :;NG>28 4C<8:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - 87?J;=8B5;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - 703;0285</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - 0;1C<</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - =><5@ =0 ?5A5=</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - ?@>4J;68B5;=>AB 2 A5:C=48</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - ?J;5= ?J 4> D09;0</span></p></body></html> g

For ICQ X-status message adopted next terms:

%artist - artist

%title - title

%album - album

%tracknumber - track number

%time - track length in minutes

%uri - full path to file

For Jabber Tune message adopted next terms:

artist - artist

title - title

album - album

tracknumber - track number

length - track length in seconds

uri - full path to file

 settingsUiAIMPAIMP settingsUi0 4>102:0B0About settingsUi:B828@0=0 Activated settingsUil:B828@0 A5 :>30B> @07H8@5=8O AB0BCA 5 "!;CH0< <C78:0"/Activates when X-status is "Listening to music" settingsUiAmarok 1.4 Amarok 1.4 settingsUiAmarok 2Amarok 2 settingsUiAudacious Audacious settingsUi^@><5=O B5:CI>B> AJ>1I5=85 =0 @07H8@5=8O AB0BCA Changes current X-status message settingsUi<5@8>4 =0 ?@>25@:0 (2 A5:C=48)Check period (in seconds) settingsUi2"5:CI AB0BCA =0 4>102:0B0Current plugin mode settingsUi50:B828@0=0 Deactivated settingsUi0 ICQ A<5B:8B5For ICQ accounts settingsUi$0 Jabber A<5B:8B5For Jabber accounts settingsUiForm settingsUi<5 =0 E>ABHostname settingsUi=D>@<0F8OInfo settingsUi2=D>@<0F8O 70 ?@54AB02O=5Info to be presented settingsUiD <><5=B0 A;CH0<: %artist - %titleListening now: %artist - %title settingsUiMPDMPD settingsUi  568<Mode settingsUiC78:0;5= ?;5J@ Music Player settingsUi 0@>;0Password settingsUi>@BPort settingsUiQMMPQMMP settingsUi 048> 1CB>= RadioButton settingsUiRhythmbox Rhythmbox settingsUi:#AB0=>2O20=5 70 2A8G:8 A<5B:8Set mode for all accounts settingsUi0AB@>9:8Settings settingsUi$Song Bird (8=C:A)Song Bird (Linux) settingsUiVLCVLC settingsUi WinampWinamp settingsUiR0A:0 70 AJ>1I5=85B> =0 @07H8@5=8O AB0BCAX-status message mask settingsUiJ5 A0 =0<5@5=8 ICQ 8;8 Jabber A<5B:8.#You have no ICQ or Jabber accounts. settingsUiartist title artist title settingsUibackground-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png);Qbackground-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); settingsUiqutim-0.2.0/languages/bg_BG/binaries/formules.qm0000644000175000017500000000107011247666202023215 0ustar euroelessareuroelessar4=8O B5:AB =0 87@070 87?>;7209B5:*Do next to show source text of evaluation:formulesSettingsClass 0I01:Scale:formulesSettingsClass0AB@>9:8SettingsformulesSettingsClass [tex] [/tex]ex]EVALUATION THERE[/tex]formulesSettingsClassqutim-0.2.0/languages/bg_BG/binaries/histman.qm0000644000175000017500000001246411264561616023037 0ustar euroelessareuroelessar)>*@ .O N }^ :WܝZHTt.^ d<ayO8Ub IJ ҩS > Z |E A p 0 t ^ 8B. i03L>A=8: WizardPageChooseClientPage*0?8A =0 E@>=>;>38OB0 Dump historyChooseOrDumpPageT<?>@B8@0=5 =0 E@>=>;>38OB0 >B 4@C3 :;85=B#Import history from one more clientChooseOrDumpPage03L>A=8: WizardPageChooseOrDumpPage......ClientConfigPage>48@>2:0: Encoding:ClientConfigPageJB 4> ?@>D8;0:Path to profile:ClientConfigPageX715@5B5 A<5B:8 70 2A5:8 ?@>B>:>; 2 A?8AJ:0..Select accounts for each protocol in the list.ClientConfigPage.715@5B5 Jabber A<5B:0.Select your Jabber account.ClientConfigPage03L>A=8: WizardPageClientConfigPage2>8G5=BinaryDumpHistoryPage 71>@ =0 D>@<0B:Choose format:DumpHistoryPageH!JAB>O=85 =0 70?8A0 =0 E@>=>;>38OB0:Dumping history state:DumpHistoryPageJSONJSONDumpHistoryPageV!JAB>O=85 =0 >1548=O20=5B> =0 E@>=>;>38OB0:Merging history state:DumpHistoryPage03L>A=8: WizardPageDumpHistoryPagex715@5B5 :;85=B, >B :>9B> 40 A5 70@548 E@>=>;>38OB0 2 qutIM.8Choose client which history you want to import to qutIM. HistoryManager::ChooseClientPage ;85=BClient HistoryManager::ChooseClientPageJ7<>6=>AB8B5 A0: 40 8715@5B5 4@C3 :;85=B 8;8 40 5:A?>@B8@0B5 E@>=>;>38OB0 =0 48A:0.WIt is possible to choose another client for import history or dump history to the disk. HistoryManager::ChooseOrDumpPage20H5B> A;5420I> 459AB285?What to do next? HistoryManager::ChooseOrDumpPage>=D83C@0F8O Configuration HistoryManager::ClientConfigPage\J2545B5 ?JB 4> ?0?:0B0, AJ4J@60I0 ?@>D8;0 %1."Enter path of your %1 profile dir. HistoryManager::ClientConfigPage\J2545B5 ?JB 4> ?0?:0B0, AJ4J@60I0 ?@>D8;0 %1.#Enter path of your %1 profile file. HistoryManager::ClientConfigPage:> :>48@>2:0B0 =0 E@>=>;>38OB0 28 A5 @07;8G020 >B A8AB5<=0B0, 8715@5B5 ?>4E>4OI0B0 :>48@>2:0.bIf your history encoding differs from the system one, choose the appropriate encoding for history. HistoryManager::ClientConfigPage71>@ =0 ?JB Select path HistoryManager::ClientConfigPageA8AB5<5=System HistoryManager::ClientConfigPage0?8A20=5DumpingHistoryManager::DumpHistoryPageH%@>=>;>38OB0 15 8<?>@B8@0=0 CA?5H=>.&History has been succesfully imported.HistoryManager::DumpHistoryPage>A;54=0 ABJ?:0. 0B8A=5B5 '0?8A', 70 40 70?>G=5 ?@>F5A0 =0 70?8A20=5.1Last step. Click 'Dump' to start dumping process.HistoryManager::DumpHistoryPage@8AB02:0B0 >1548=O20 E@>=>;>38OB0, B>20 <>65 40 >B=5<5 =O:>;:> <8=CB8.5Manager merges history, it make take several minutes.HistoryManager::DumpHistoryPage &0?8A&Dump$HistoryManager::HistoryManagerWindow4#?@02;5=85 =0 E@>=>;>38OB0History manager$HistoryManager::HistoryManagerWindowV%n AJ>1I5=85 15 CA?5H=> 70@545=> 2 ?0<5BB0.Z%n AJ>1I5=8O 1OE0 CA?5H=> 70@545=8 2 ?0<5BB0.5%n message(s) have been succesfully loaded to memory.!HistoryManager::ImportHistoryPage,?5@0F8OB0 >B=5 %n <A.,?5@0F8OB0 >B=5 %n <A.It has taken %n ms.!HistoryManager::ImportHistoryPage0@5640=5Loading!HistoryManager::ImportHistoryPage@8AB02:0B0 70@5640 FO;0B0 E@>=>;>38O 2 ?0<5BB0, B>20 <>65 40 >B=5<5 =O:>;:> <8=CB8.AManager loads all history to memory, it may take several minutes.!HistoryManager::ImportHistoryPage2<?>@B8@0=5 =0 E@>=>;>38OImport historyHistoryManagerPluginFormHistoryManagerWindow03L>A=8: WizardPageImportHistoryPagequtim-0.2.0/languages/bg_BG/binaries/protocolicon.qm0000644000175000017500000000075611240003554024071 0ustar euroelessareuroelessar ?>4@0718@0=5> PluginSettings6@><O=0 8:>=0B0 =0 A<5B:0B0Change account iconPluginSettings6@><O=0 8:>=0B0 =0 :>=B0:B0Change contact iconPluginSettingsD71>@ =0 B5<0 70 ?@>B>:>;=8 8:>=8: Select protocol icon theme pack:PluginSettingsqutim-0.2.0/languages/bg_BG/binaries/youtubedownload.qm0000644000175000017500000003122011255750431024602 0ustar euroelessareuroelessar102O=5 =0 YouTube 2@J7:8 70 87B53;O=5#Add download links for YouTube urlsurlpreviewPlugin7B53;O=5DownloadurlpreviewPlugin<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">>102:0 70 87B53;O=5 =0 YouTube 2@J7:8</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">>102O=5 =0 2@J7:8 :J< YouTube 70 87B53;O=5</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:saboteur@saboteur.mp"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">235=8 !>9=>2</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">(01;>=:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler@co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">;5:A0=4J@ 070@8=</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html>l

YouTube download link qutIM plugin

svn version

Adds link for downloading clips

Author:

Evgeny Soynov

Template:

Alexander Kazarin

(c) 2008-2009

urlpreviewSettingsClass0 4>102:0B0AbouturlpreviewSettingsClass>:B828@0=5 70 2E>4OI8 AJ>1I5=8OEnable on incoming messagesurlpreviewSettingsClass@:B828@0=5 70 87E>4OI8 AJ>1I5=8OEnable on outgoing messagesurlpreviewSettingsClass1I8GeneralurlpreviewSettingsClass*=D>@<0F8>=5= H01;>=:Info template:urlpreviewSettingsClass<0:@>A: %URL% - 04@5A =0 :;8?0Macros: %URL% - Clip addressurlpreviewSettingsClass0AB@>9:8SettingsurlpreviewSettingsClassqutim-0.2.0/languages/bg_BG/binaries/massmessaging.qm0000644000175000017500000001471611245431636024234 0ustar euroelessareuroelessar!''n*ʗk0T y R 4 5o = RV` T* Cvi1515Dialog

TextLabel

Dialog R<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">5;56:8:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">>30B 40 A5 ?>;720B A;54=8B5 H01;>=8:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - <5 =0 ?>;CG0B5;O </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - <5 =0 87?@0I0G0 (8<5 =0 ?@>D8;0)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - "5:CI> 2@5<5</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html>!

Notes:

You can use the templates:

  • {reciever} - Name of the recipient
  • {sender} - Name of the sender (profile name)
  • {time} - Current time

Dialog59AB28OActionsDialog$=B5@20; (2 A5:.):Interval (in seconds):Dialog !?8AJ:ItemsDialog!J>1I5=85MessageDialog*=>3>:@0B=> 87?@0I0=5Multiply SendingDialog7?@0I0=5SendDialog!?8@0=5StopDialog !<5B:8AccountsManager8@5H:0: AJ>1I5=85B> 5 ?@07=>Error: message is emptyManager<@5H:0: =58725AB=0 A<5B:0 : %1Error: unknown account : %1Manager58725AB5=UnknownManager*=>3>:@0B=> 87?@0I0=5Multiply Sending Messaging59AB28OActionsMessagingDialog<0@5640=5 =0 A?8AJ: A :>=B0:B8Load buddy listMessagingDialogH0@5640=5 =0 ;8G5= A?8AJ: A :>=B0:B8Load custom buddy listMessagingDialogd=>3>:@0B=> 87?@0I0=5: 2A8G:8 7040G8 A0 ?@8:;NG5=8#Multiply sending: all jobs finishedMessagingDialogB!JE@0=O20=5 =0 A?8AJ:0 A :>=B0:B8Save buddy listMessagingDialog87?@0I0=5 =0 AJ>1I5=85 4> %1Sending message to %1MessagingDialogp7?@0I0=5 =0 AJ>1I5=85 4> %1 (%2/%3), >AB020I> 2@5<5: %4/Sending message to %1 (%2/%3), time remains: %4MessagingDialogF7?@0I0=5 =0 AJ>1I5=85 4> %1: %v/%mSending message to %1: %v/%mMessagingDialogqutim-0.2.0/languages/bg_BG/binaries/jsonhistory.qm0000644000175000017500000000200511240003554023737 0ustar euroelessareuroelessar9:8 =0 E@>=>;>38OB0HistorySettingsHistorySettingsClassL0?0720=5 =0 E@>=>;>38O =0 AJ>1I5=8OB0Save message historyHistorySettingsClassZ>:0720=5 =0 ?>A;54=8B5 AJ>1I5=8O 2 ?@>7>@5F0(Show recent messages in messaging windowHistorySettingsClass11HistoryWindowClass!<5B:0:Account:HistoryWindowClassB:From:HistoryWindowClass%@>=>;>38O HistoryWindowHistoryWindowClass@JI0=5ReturnHistoryWindowClass"J@A5=5SearchHistoryWindowClassO<0 E@>=>;>38O No History#JsonHistoryNamespace::HistoryWindow%@>=>;>38OHistoryQObjectqutim-0.2.0/languages/bg_BG/binaries/libnotify.qm0000644000175000017500000000171711257216433023366 0ustar euroelessareuroelessar:8@0=> AJ>1I5=85 >B %1Blocked message from %1LibnotifyLayer(!8AB5<=> AJ>1I5=85 System message LibnotifyLayer(8<0 @>645= 45= 4=5A!has birthday today!LibnotifyLayer0%1 8<0 @>645= 45= 4=5A!!%1 has birthday today!!QObject"%1</b><br /> ?8H5%1

is typingQObjectF;>:8@0=> AJ>1I5=85 >B<br /> %1: %2!Blocked message from
%1: %2QObject0!J>1I5=85 >B %1:<br />%2Message from %1:
%2QObject@!8AB5<=> AJ>1I5=85 >B %1: <br />System message from %1:
QObjectqutim-0.2.0/languages/bg_BG/binaries/irc.qm0000644000175000017500000003312111240003554022124 0ustar euroelessareuroelessar   T/ I' I JV NH R T V wd { {  ee u0 " $h >  / @ 0J ū)j 7 !> ! ! ". "~ " # #n # Õ M M M&k Ap As At3 Au Av K ʌs& T T'j Y( 4Wg o; o; o;O z ĬW < % u 7dr RERXOj'1*I iӘ$Gd0i166676667AddAccountFormClass$>102O=5 =0 A<5B:0AddAccountFormAddAccountFormClassA524>=8<:Nick:AddAccountFormClass0@>;0: Password:AddAccountFormClass >@B:Port:AddAccountFormClassAB8=A:> 8<5: Real Name:AddAccountFormClass"0?8A =0 ?0@>;0B0 Save passwordAddAccountFormClass!J@2J@:Server:AddAccountFormClass irc.freenode.netirc.freenode.netAddAccountFormClass,>=7>;0 =0 IRC AJ@2J@0IRC Server ConsoleIrcConsoleClass@><O=0 =0 B5<0 Change TopicchangeTopicClassBAJAB20Away ircAccount01@0=0Ban ircAccount!JA 701@0=0Banned ircAccountCTCPCTCP ircAccount@><O=0 =0 B5<0 Change topic ircAccount.4<8=8AB@0B>@ =0 :0=0;0Channel administrator ircAccount,>;C->?5@0B>@ 2 :0=0;0Channel half-operator ircAccount"?5@0B>@ 2 :0=0;0Channel operator ircAccount(!>1AB25=8: =0 :0=0;0 Channel owner ircAccount !?8AJ: >B :0=0;8 Channels List ircAccount>=7>;0Console ircAccountL@54>AB02O=5 =0 ?>;C->?5@0B>@A:8 ?@020 Give HalfOp ircAccountB@54>AB02O=5 =0 >?5@0B>@A:8 ?@020Give Op ircAccount(@54>AB02O=5 =0 3;0A Give Voice ircAccountIRC >?5@0B>@ IRC operator ircAccount=D>@<0F8O Information ircAccount0@8AJ548=O20=5 :J< :0=0; Join Channel ircAccount7@8B20=5Kick ircAccount&7@8B20=5 / 01@0=0 Kick / Ban ircAccount$>2>4 70 87@8B20=5 Kick reason ircAccount7@8B20=5 A... Kick with... ircAccount  568<Mode ircAccount  568<8Modes ircAccount$#254><O20=5 020B0@ Notify avatar ircAccount72J= ;8=8OOffline ircAccount0 ;8=8OOnline ircAccount8G5= @073>2>@ Private chat ircAccountH>;CG020=5 =0 ?>;C->?5@0B>@A:8 ?@020 Take HalfOp ircAccount>>;CG020=5 =0 >?5@0B>@A:8 ?@020Take Op ircAccount$>;CG020=5 =0 3;0A Take Voice ircAccount*@5<0E20=5 =0 701@0=0UnBan ircAccount;0AVoice ircAccount 07H8@5=8AdvancedircAccountSettingsClassJ7@0AB:Age:ircAccountSettingsClass.;B5@=0B825= ?A524>=8<:Alternate Nick:ircAccountSettingsClassApple Roman Apple RomanircAccountSettingsClass@8;030=5ApplyircAccountSettingsClassH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autologin on startircAccountSettingsClass`2B><0B8G=> 87?@0I0=5 =0 :><0=48 A;54 A2J@720=5: Autosend commands after connect:ircAccountSettingsClassURL =0 020B0@0: Avatar URL:ircAccountSettingsClassBig5Big5ircAccountSettingsClassBig5-HKSCS Big5-HKSCSircAccountSettingsClass B:07CancelircAccountSettingsClass>48@>2:0: Codepage:ircAccountSettingsClass EUC-JPEUC-JPircAccountSettingsClass EUC-KREUC-KRircAccountSettingsClass5=0FemaleircAccountSettingsClassGB18030-0 GB18030-0ircAccountSettingsClass>;:Gender:ircAccountSettingsClass1I8GeneralircAccountSettingsClassIBM 850IBM 850ircAccountSettingsClassIBM 866IBM 866ircAccountSettingsClassIBM 874IBM 874ircAccountSettingsClass20AB@>9:8 =0 IRC A<5B:0B0IRC Account SettingsircAccountSettingsClassISO 2022-JP ISO 2022-JPircAccountSettingsClassISO 8859-1 ISO 8859-1ircAccountSettingsClassISO 8859-10 ISO 8859-10ircAccountSettingsClassISO 8859-13 ISO 8859-13ircAccountSettingsClassISO 8859-14 ISO 8859-14ircAccountSettingsClassISO 8859-15 ISO 8859-15ircAccountSettingsClassISO 8859-16 ISO 8859-16ircAccountSettingsClassISO 8859-2 ISO 8859-2ircAccountSettingsClassISO 8859-3 ISO 8859-3ircAccountSettingsClassISO 8859-4 ISO 8859-4ircAccountSettingsClassISO 8859-5 ISO 8859-5ircAccountSettingsClassISO 8859-6 ISO 8859-6ircAccountSettingsClassISO 8859-7 ISO 8859-7ircAccountSettingsClassISO 8859-8 ISO 8859-8ircAccountSettingsClassISO 8859-9 ISO 8859-9ircAccountSettingsClass45=B8D8F8@0=5IdentifyircAccountSettingsClassIscii-Bng Iscii-BngircAccountSettingsClassIscii-Dev Iscii-DevircAccountSettingsClassIscii-Gjr Iscii-GjrircAccountSettingsClassIscii-Knd Iscii-KndircAccountSettingsClassIscii-Mlm Iscii-MlmircAccountSettingsClassIscii-Ori Iscii-OriircAccountSettingsClassIscii-Pnj Iscii-PnjircAccountSettingsClassIscii-Tlg Iscii-TlgircAccountSettingsClassIscii-Tml Iscii-TmlircAccountSettingsClassJIS X 0201 JIS X 0201ircAccountSettingsClassJIS X 0208 JIS X 0208ircAccountSettingsClass KOI8-RKOI8-RircAccountSettingsClass KOI8-UKOI8-UircAccountSettingsClass 78F8: Languages:ircAccountSettingsClass5AB>=0E>645=85LocationircAccountSettingsClassJ6MaleircAccountSettingsClassMuleLao-1 MuleLao-1ircAccountSettingsClassA524>=8<:Nick:ircAccountSettingsClassOKircAccountSettingsClass @C38:Other:ircAccountSettingsClass.!J>1I5=85 ?@8 87;870=5: Part message:ircAccountSettingsClass >@B:Port:ircAccountSettingsClass0!J>1I5=85 ?@8 70B20@O=5: Quit message:ircAccountSettingsClass ROMAN8ROMAN8ircAccountSettingsClassAB8=A:> 8<5: Real Name:ircAccountSettingsClass!J@2J@:Server:ircAccountSettingsClassShift-JIS Shift-JISircAccountSettingsClassTIS-620TIS-620ircAccountSettingsClass TSCIITSCIIircAccountSettingsClass UTF-16UTF-16ircAccountSettingsClassUTF-16BEUTF-16BEircAccountSettingsClassUTF-16LEUTF-16LEircAccountSettingsClass UTF-8UTF-8ircAccountSettingsClass5>?@545;5= UnspecifiedircAccountSettingsClassWINSAMI2WINSAMI2ircAccountSettingsClassWindows-1250 Windows-1250ircAccountSettingsClassWindows-1251 Windows-1251ircAccountSettingsClassWindows-1252 Windows-1252ircAccountSettingsClassWindows-1253 Windows-1253ircAccountSettingsClassWindows-1254 Windows-1254ircAccountSettingsClassWindows-1255 Windows-1255ircAccountSettingsClassWindows-1256 Windows-1256ircAccountSettingsClassWindows-1257 Windows-1257ircAccountSettingsClassWindows-1258 Windows-1258ircAccountSettingsClass(%1 CAB0=>28 @568< %2%1 has set mode %2 ircProtocol(%1 >B3>2>@ >B %2: %3%1 reply from %2: %3 ircProtocol%1 70O2O20 %2%1 requests %2 ircProtocol@%1 70O2O20 =58725AB=0 :><0=40 %2%1 requests unknown command %2 ircProtocol6#AB0=>2O20=5 =0 2@J7:0 A %1Connecting to %1 ircProtocolB?8B A 0;B5@=0B825= ?A524>=8<: %1Trying alternate nick: %1 ircProtocol 07H8@5=8AdvancedircSettingsClassA=>2=8MainircSettingsClass 0AB@>9:8 70 IRC ircSettingsircSettingsClass 0=0;:Channel:joinChannelClass0@8AJ548=O20=5 :J< :0=0; Join ChanneljoinChannelClassF!?8AJ:JB >B :0=0;8 15 70@545=. (%1)Channels list loaded. (%1) listChannelH>;CG020=5 =0 A?8AJ: >B :0=0;8... %1Fetching channels list... %1 listChannelL>;CG020=5 =0 A?8AJ: >B :0=0;8... (%1)Fetching channels list... (%1) listChannelT7?@0I0=5 =0 70O2:0 70 A?8AJ: >B :0=0;8... Sending channels list request... listChannel<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html>

listChannelClass 0=0;ChannellistChannelClass$!?8AJ:JB >B :0=0;8 Channels ListlistChannelClass$8;B@8@0=5 ?>: Filter by:listChannelClass 0O2:0 70 A?8AJ: Request listlistChannelClass"5<0TopiclistChannelClass>B@518B5;8UserslistChannelClass "5:AB textDialogtextDialogClassqutim-0.2.0/languages/bg_BG/binaries/qt_bg.qm0000644000175000017500000031621311232541367022463 0ustar euroelessareuroelessarHI#PQYRHST6UV`WXKY]IJ;(;>;N;;MMInO/O9:4}ImI (5+;+;K+;R+O+OKq1XE@F-H4!HYhH%IJ$JIvKLD%CL%PS'QNRkWZyZr48[`!=[`f\_6_91TEVBL]!$i$F,# yH) ?$REJEi%%l%_&H֍֍~֍ ֍0(0N0Q00&0jI5ل5' DQ2 Dg+-(,R|,7v5*To*06*0h+F(+Fj+Lh+f+fZ+z@+)O++>+z@+^+K+[P+o1++kg+į)+į+į>+AF0iFn4qFn4GL2Hw9'Hw9LtHWI'i`I>IJ+)J6*yJ6B8J6LJ6QJ6J6J6J6kJcb 0KQWK_LZ%jLLBmLb:M5REMbdMeKMNjAO|APFE-KPFEPFElQkRkR|RkS8^TTʴ{|T#U|IU}lV1V1 qVlV'VZEV0W@uWTtWT{WT1XO.X[(X˙OX1YlY^Y2YcZZg3*ZkM^\\ݞ\ggc~vJvg2fv4L]56CiIA$[Ohb"@I.:yɵnDRɵnbɵnBɵn{ɵnʍɵnSɵnOɵn8:z* 1HOM]|qn cH=<yp#Q(ŎeG*4-ct:Y2F5vO<?t}CCCeD"D1uM#CaR?[efPloR;or^2w^x|{ys;22mWD4{'Gj.SAiE~: dsJyS ̄ YdJX Ȇ"lz):-w/=N4k5~sA< 0?2Ţ?NmMZNkykUi]"|`F_`խjtRqlglyzl}QoiMvtyCp_)6K266j^w')b>mRT=0 o<2">\=EE\ ]{A=8AAu[yILOnF,mWmMMjsEqE{w&ww I)5*/e5d5.yByYFIOZf@`cփ-g&4jCe u('Im* Vt,y )$$wr+(5r)^wKcK{֊A nT;y[IxS?kMeYMrYM{h^/i5 w;rwxhۊAN=f]]FL II'I(ILI-I7IiLI)Y)i*-y*w(q())O'('I,3+ +U++*uDv`uDZDixo ,,B,$,8,?]T9ɘe%5$ 4kfRffRaN&b0jtc2|SlPqyjVNBVLfRZ'9  j M +P %C0&~kI+,D?"?>uVKN;M"aV|lS]]]:k0y^,{y5tZFb1:N!lG%p$صǥm"2+2`Lt{yQ/ ,dr9\m3sm/%>C-M5/rdC^ƨVƨ9˾ҝzէ?8zW&ߺU.^!$~bay~bgo!|+u~D+3/f/ 4~36 2a? 2gA jGq2GbfLAU<^PѧM!Q;Sn(U+UTNZ#Z#Z$"Z$Z[i]k*a=^nu_peiviy;{ }u0a}w}w7}wZ}r.Bv9tt..7D3VPiU#aDDqYt7rt|tj_ /+dF,ʢGʢƴׇdHddddB0X+~NS9YdٲBxh֭w˝ F+,DV2S6x%?;CU]LVDxJ0^KK[U|#C\arutP|(^[|WL|}wZ}$A}$6}$YϗwZU^D/QPqNK<Nf+I(·9׳  /~ Eou%5gTTsi~$iE9%ab9wG#ܢ'5kEz=;y??V%XU `/bD3fdDgA$MhIji$9x1 #|z*2"|QR`deU"5FzTSc.tCrdXImp^Je_n&1†5e1CPTʴ5gʴ5k"ʶ /^ Ԅo۔#DoVduF5- F5YpI)I`{Ask HN }$A qezn ڥ E E; Ac Acc   , n" H* K+ 팤ɥ  ,} _ } oU ) */! .> 7uwg =pV B J"K J"w K2c Ty 9 T^" Uj4t ]# ` ` bl c( cE0 d8N e ea f1s f* g5Uv gnv k, D rD"' tz" m`/J w yrJK _3 H H[ :d $] .@4 % i ^ *2 x ? ^ %Z J J_E t. k=F Ӈ* M9 (F ̺o -Dp ۷" k p k]i U)g 6 <- : 0/< V  z+XM  v  %nc / E xH 2 .? 7FvK >y" >y >z > > > > > ?t|B> DT I? P@  RVc RVgX RV S.7 SG S ( Yk Y hۮj j7oYr p@1 . y. TD T T Tw 0 G]  T .ES . . . .z .  y- ' %T- uS G & 9E0 t :b ʜ>5 +>AH 0Et ;ɾ? Fg K9 Pt: PtlL fe feO gw iFC& i` i&j jӮ m9Kd u0( v&: v{ w w67 wY4 w} w}6z w}Yx _ r |K %Cp J ^B Pf  xN y U ɰel X2 D b t5 t5l  l ) .RaVT9K6jgT9*7>*i/E8I_LOO[ na.MvɅ"y$~4ƪ4CSv^ǗX:AB5rݖ2[y m z ^f"#\$U %4P%4g0i)-0.n2wT-RD0DH JdL$.pc5c5[Zg3pOyC1G{~a,6$P$Y5#&Ą&`aO^>bKDNX` E`"~r8r=kyB *Pt2<sdUBi|<html>@52:;NG20=5 :J< 72C:>2> CAB@>9AB2> <b>%1</b>,<br/>:>5B> AB0=0 4>ABJ?=> 8 5 ?@54?>G8B0=>.</html>xSwitching to the audio playback device %1
which just became available and has higher preference. AudioOutput<html>2C:>2>B> CAB@>9AB2> <b>%1</b> =5 @01>B8.<br/>@JI0=5 :J< <b>%2</b>.</html>^The audio playback device %1 does not work.
Falling back to %2. AudioOutput6@JI0=5 :J< CAB@>9AB2> '%1'Revert back to device '%1' AudioOutput(0B20@O=5 =0 @0745;0 Close Tab CloseButton*!?5F80;=8 2J7<>6=>AB8 AccessibilityPhonon:: @J7:0 CommunicationPhonon::3@8GamesPhonon:: C78:0MusicPhonon::#254><;5=8O NotificationsPhonon:: 845>VideoPhonon::@54C?@5645=85: 73;5640 =O<0B5 8=AB0;8@0=0 >A=>2=0B0 GStreamer 4>102:0. >44@J6:0B0 =0 72C: 8 2845> 15 87:;NG5=0~Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabledPhonon::Gstreamer::Backend@54C?@5645=85: 73;5640 =O<0B5 8=AB0;8@0= ?0:5B0 gstreamer0.10-plugins-good. O:>9 >B 2845> E0@0:B5@8AB8:8B5 1OE0 87:;NG5=8.Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.Phonon::Gstreamer::Backend8?A20I :>45:. C6=> 5 A;54=8B5 :>45F8 40 1J40B 8=AB0;8@0=8, 70 40 A5 87?J;=8: %0`A required codec is missing. You need to install the following codec(s) to play this content: %0Phonon::Gstreamer::MediaObject7?J;=5=85B> =5 <>65 40 70?>G=5. @>25@5B5 8=AB0;0F8OB0 =0 Gstreamer 8 A5 C25@5B5, G5 libgstreamer-plugins-base 5 8=AB0;8@0=.wCannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed.Phonon::Gstreamer::MediaObjectR52J7<>6=> 5 40 1J45 45:>48@0= 87B>G=8:0.Could not decode media source.Phonon::Gstreamer::MediaObjectL52J7<>6=> 5 40 1J45 >B:@8B 87B>G=8:0.Could not locate media source.Phonon::Gstreamer::MediaObject2C:>2>B> CAB@>9AB2> =5 <>65 40 1J45 >B2>@5=>. "> 25G5 A5 87?>;720.:Could not open audio device. The device is already in use.Phonon::Gstreamer::MediaObjectN52J7<>6=> 5 40 1J45 >B2>@5= 87B>G=8:0.Could not open media source.Phonon::Gstreamer::MediaObject6520;845= B8? =0 87B>G=8:0.Invalid source type.Phonon::Gstreamer::MediaObject7?>;7209B5 B>78 ?;J730G 70 @53C;8@0=5 A8;0B0 =0 72C:0. 09-;O20B0 ?>78F8O 5 0%, =09-4OA=0B0 %1%WUse this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%Phonon::VolumeSlider$!8;0 =0 72C:0: %1% Volume: %1%Phonon::VolumeSlider*%1, %2 =5 A0 704045=8%1, %2 not definedQ3AccelF5>?@545;5=85B> %1 =5 15 >1@01>B5=>Ambiguous %1 not handledQ3Accel7B@820=5Delete Q3DataTable FalseFalse Q3DataTable<J:20=5Insert Q3DataTableTrueTrue Q3DataTable:BC0;878@0=5Update Q3DataTabler%1 $09;JB =5 15 =0<5@5=. @>25@5B5 ?JBO 8 8<5B> =0 D09;0.+%1 File not found. Check path and filename. Q3FileDialog&7B@820=5&Delete Q3FileDialog&5&No Q3FileDialog&OK&OK Q3FileDialog&B20@O=5&Open Q3FileDialog&@58<5=C20=5&Rename Q3FileDialog &0?8A&Save Q3FileDialog&57 ?>4@5410 &Unsorted Q3FileDialog&0&Yes Q3FileDialogp<qt>!83C@=8 ;8 AB5, G5 65;05B5 40 87B@85B5 %1 "%2"?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialog$A8G:8 D09;>25 (*) All Files (*) Q3FileDialog(A8G:8 D09;>25 (*.*)All Files (*.*) Q3FileDialogB@81CB8 Attributes Q3FileDialog 0704Back Q3FileDialog B:07Cancel Q3FileDialog@>?8@0=5 8;8 ?@5<5AB20=5 =0 D09;Copy or Move a File Q3FileDialog.!J74020=5 =0 =>20 ?0?:0Create New Folder Q3FileDialog0B0Date Q3FileDialog7B@820=5 =0 %1 Delete %1 Q3FileDialog>4@>1=>AB8 Detail View Q3FileDialog8@Dir Q3FileDialog8@5:B>@88 Directories Q3FileDialog8@5:B>@8O Directory: Q3FileDialog @5H:0Error Q3FileDialog$09;File Q3FileDialog&<5 =0 D09;0: File &name: Q3FileDialog&"8? =0 D09;0: File &type: Q3FileDialog,0<8@0=5 =0 48@5:B>@8OFind Directory Q3FileDialog54>ABJ?5= Inaccessible Q3FileDialog !?8AJ: List View Q3FileDialog&@53;54 2: Look &in: Q3FileDialog<5Name Q3FileDialog>20 ?0?:0 New Folder Q3FileDialog>20 ?0?:0 %1 New Folder %1 Q3FileDialog>20 ?0?:0 1 New Folder 1 Q3FileDialog 4=> =82> =03>@5One directory up Q3FileDialogB20@O=5Open Q3FileDialogB20@O=5Open  Q3FileDialog\@5420@8B5;5= ?@53;54 =0 AJ4J@60=85B> =0 D09;0Preview File Contents Q3FileDialog\@5420@8B5;5= ?@53;54 =0 8=D>@<0F8OB0 70 D09;0Preview File Info Q3FileDialog&@570@5640=5R&eload Q3FileDialog!0<> 70 G5B5=5 Read-only Q3FileDialog'5B5=5-8 70?8A Read-write Q3FileDialog'5B5=5: %1Read: %1 Q3FileDialog0?8A :0B>Save As Q3FileDialog&71>@ =0 48@5:B>@8OSelect a Directory Q3FileDialog<>:0720=5 =0 &A:@8B8B5 D09;>25Show &hidden files Q3FileDialog  07<5@Size Q3FileDialog>4@5410Sort Q3FileDialog> &40B0 Sort by &Date Q3FileDialog> &8<5 Sort by &Name Q3FileDialog> &3>;5<8=0 Sort by &Size Q3FileDialog!?5F80;5= D09;Special Q3FileDialog<!8<2>;=0 2@J7:0 :J< 48@5:B>@8OSymlink to Directory Q3FileDialog0!8<2>;=0 2@J7:0 :J< D09;Symlink to File Q3FileDialogD!8<2>;=0 2@J7:0 :J< A?5F80;5= D09;Symlink to Special Q3FileDialog"8?Type Q3FileDialog!0<> 70 70?8A Write-only Q3FileDialog0?8A: %1 Write: %1 Q3FileDialog48@5:B>@8OB0 the directory Q3FileDialog D09;0the file Q3FileDialog"A8<2>;=0B0 2@J7:0 the symlink Q3FileDialog\52J7<>6=> 5 40 1J45 AJ74045=0 48@5:B>@8OB0 %1Could not create directory %1 Q3LocalFsD52J7<>6=> 5 40 1J45 >B2>@5=(0) %1Could not open %1 Q3LocalFs\52J7<>6=> 5 40 1J45 ?@>G5B5=0 48@5:B>@8OB0 %1Could not read directory %1 Q3LocalFsp52J7<>6=> 5 40 1J45 87B@8B(0) D09;0 8;8 48@5:B>@8OB0 %1%Could not remove file or directory %1 Q3LocalFsN52J7<>6=> 5 ?@58<5=C20=5B> >B %1 =0 %2Could not rename %1 to %2 Q3LocalFs>52J7<>6=> 5 40 1J45 70?8A0= %1Could not write %1 Q3LocalFs$5@A>=0;878@0=5... Customize... Q3MainWindow>4@02=O20=5Line up Q3MainWindowN?5@0F8OB0 15 ?@5:JA=0B0 >B ?>B@518B5;OOperation stopped by the userQ3NetworkProtocol B:07CancelQ3ProgressDialog@8;030=5Apply Q3TabDialog B:07Cancel Q3TabDialog> ?>4@0718@0=5Defaults Q3TabDialog ><>IHelp Q3TabDialogOK Q3TabDialog&>?8@0=5&Copy Q3TextEdit&>AB02O=5&Paste Q3TextEdit&J7AB0=>2O20=5&Redo Q3TextEdit&B<O=0&Undo Q3TextEdit7G8AB20=5Clear Q3TextEdit&7@O720=5Cu&t Q3TextEdit71>@ =0 2A8G:8 Select All Q3TextEdit0B20@O=5Close Q3TitleBar"0B20@O ?@>7>@5F0Closes the window Q3TitleBarV!J4J@60 :><0=48 70 <0=8?C;8@0=5 A ?@>7>@5F0*Contains commands to manipulate the window Q3TitleBar>:0720 8<5B> =0 ?@>7>@5F0 8 AJ4J@60 :>=B@>;8 70 <0=8?C;8@0=5 A =53>FDisplays the name of the window and contains controls to manipulate it Q3TitleBarB 07B20@O ?@>7>@5F0 =0 ?J;5= 5:@0=Makes the window full screen Q3TitleBar0:A8<878@0=5Maximize Q3TitleBar8=8<878@0=5Minimize Q3TitleBar$7<5AB20 ?@>7>@5F0Moves the window out of the way Q3TitleBarH@JI0 @07B2>@5=8O >1@0B=> 2 =>@<0;5=&Puts a maximized window back to normal Q3TitleBar>@JI0 A28B8O >1@0B=> 2 =>@<0;5=Puts a minimized back to normal Q3TitleBar*J7AB0=>2O20=5 =04>;C Restore down Q3TitleBar*J7AB0=>2O20=5 =03>@5 Restore up Q3TitleBar!8AB5<0System Q3TitleBar I5...More... Q3ToolBar(=58725AB=>) (unknown) Q3UrlOperator@>B>:>;JB `%1' =5 ?>44J@60 :>?8@0=5 8;8 ?@5<5AB20=5 =0 D09;>25 8 48@5:B>@88IThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorp@>B>:>;JB `%1' =5 ?>44J@60 AJ74020=5 =0 =>28 48@5:B>@88;The protocol `%1' does not support creating new directories Q3UrlOperator`@>B>:>;JB `%1' =5 ?>44J@60 87B53;O=5 =0 D09;>250The protocol `%1' does not support getting files Q3UrlOperatorb@>B>:>;JB `%1' =5 ?>44J@60 ?@53;54 =0 48@5:B>@886The protocol `%1' does not support listing directories Q3UrlOperator\@>B>:>;JB `%1' =5 ?>44J@60 :0G20=5 =0 D09;>250The protocol `%1' does not support putting files Q3UrlOperator|@>B>:>;JB `%1' =5 ?>44J@60 ?@5<0E20=5 =0 D09;>25 8 48@5:B>@88@The protocol `%1' does not support removing files or directories Q3UrlOperator@>B>:>;JB `%1' =5 ?>44J@60 ?@58<5=C20=5 =0 D09;>25 8 48@5:B>@88@The protocol `%1' does not support renaming files or directories Q3UrlOperator<@>B>:>;JB `%1' =5 A5 ?>44J@60"The protocol `%1' is not supported Q3UrlOperator &B:07&CancelQ3Wizard&@8:;NG20=5&FinishQ3Wizard &><>I&HelpQ3Wizard&0?@54 >&Next >Q3Wizard< &0704< &BackQ3Wizard(@J7:0B0 15 >B:070=0Connection refusedQAbstractSocket27B5:;> 2@5<5 =0 2@J7:0B0Connection timed outQAbstractSocket(%>ABJB =5 15 =0<5@5=Host not foundQAbstractSocket(@560B0 5 =54>ABJ?=0Network unreachableQAbstractSocketF?5@0F88 AJA A>:5B8 =5 A5 ?>44J@60B$Operation on socket is not supportedQAbstractSocket(!>:5BJB =5 5 A2J@70=Socket is not connectedQAbstractSocketB7B5:;> 2@5<5 =0 A>:5B >?5@0F8OB0Socket operation timed outQAbstractSocket &71>@ =0 2A8G:8 &Select AllQAbstractSpinBox&!BJ?:0 =03>@5&Step upQAbstractSpinBox&!BJ?:0 =04>;C Step &downQAbstractSpinBox:B828@0=5Activate QApplicationN:B828@0 3;02=8O ?@>7>@5F =0 ?@>3@0<0B0#Activates the program's main window QApplicationf7?J;=8<8OB <>4C; '%1' 878A:20 Qt %2, >B:@8B0 5 %3.,Executable '%1' requires Qt %2, found Qt %3. QApplication^@5H:0 ?>@048 =5AJ2<5AB8<>AB =0 Qt 181;8>B5:8B5Incompatible Qt Library Error QApplicationLTRQT_LAYOUT_DIRECTION QApplication &B:07&Cancel QAxSelectCOM &>15:B: COM &Object: QAxSelectOK QAxSelect071>@ =0 ActiveX :>=B@>;Select ActiveX Control QAxSelect$!;030=5 =0 >B<5B:0Check QCheckBox@52:;NG20=5Toggle QCheckBox*@5<0E20=5 =0 >B<5B:0Uncheck QCheckBoxB&>102O=5 :J< A>1AB25=8B5 F25B>25&Add to Custom Colors QColorDialog &A=>2=8 F25B>25 &Basic colors QColorDialog$&!>1AB25=8 F25B>25&Custom colors QColorDialog &5;:&Green: QColorDialog &'5@2:&Red: QColorDialog &0A:&Sat: QColorDialog &/@::&Val: QColorDialog&;D0-:0=0;:A&lpha channel: QColorDialog !&8=:Bl&ue: QColorDialog &">=:Hu&e: QColorDialog71>@ =0 F2OB Select Color QColorDialog0B20@O=5Close QComboBox FalseFalse QComboBoxB20@O=5Open QComboBoxTrueTrue QComboBoxF%1: ftok (:;NG >B D09;) 5 =5CA?5H=0%1: ftok failedQCoreApplication&%1: :;NGJB 5 ?@075=%1: key is emptyQCoreApplicationL%1: =52J7<>6=> 5 40 1J45 AJ74045= :;NG%1: unable to make keyQCoreApplicationR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transaction QDB2DriverD52J7<>6=> 5 40 A5 CAB0=>28 2@J7:0Unable to connect QDB2DriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Unable to rollback transaction QDB2DriverL52J7<>6=> 5 40 A5 CAB0=>28 autocommitUnable to set autocommit QDB2DriverH52J7<>6=> 5 40 A5 A2J@65 ?0@0<5BJ@0Unable to bind variable QDB2ResultF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute statement QDB2ResultB52J7<>6=> 5 40 A5 872;5G5 ?J@28OUnable to fetch first QDB2ResultH52J7<>6=> 5 40 A5 872;5G5 A;5420I8OUnable to fetch next QDB2ResultB52J7<>6=> 5 40 A5 872;5G5 @54 %1Unable to fetch record %1 QDB2ResultH52J7<>6=> 5 40 A5 ?@83>B28 70O2:0B0Unable to prepare statement QDB2ResultAM QDateTimeEditPM QDateTimeEditam QDateTimeEditpm QDateTimeEditQDialQDial,#?@02;5=85 =0 ?;J730G0 SliderHandleQDial!:>@>AB><5@ SpeedoMeterQDial02J@H5=>DoneQDialog0:2> 5 B>20? What's This?QDialog &B:07&CancelQDialogButtonBox&0B20@O=5&CloseQDialogButtonBox&5&NoQDialogButtonBox&OK&OKQDialogButtonBox &0?8A&SaveQDialogButtonBox&0&YesQDialogButtonBox@5:@0BO20=5AbortQDialogButtonBox@8;030=5ApplyQDialogButtonBox B:07CancelQDialogButtonBox0B20@O=5CloseQDialogButtonBox&0B20@O=5 157 70?8AClose without SavingQDialogButtonBoxBE2J@;O=5DiscardQDialogButtonBox 0 =5 A5 70?8A20 Don't SaveQDialogButtonBox ><>IHelpQDialogButtonBox3=>@8@0=5IgnoreQDialogButtonBox&5 =0 2A8G:8 N&o to AllQDialogButtonBoxOKQDialogButtonBoxB20@O=5OpenQDialogButtonBoxC;8@0=5ResetQDialogButtonBox@J7AB0=>2O20=5 ?>4@0718@0I>B> A5Restore DefaultsQDialogButtonBox>2B>@5= >?8BRetryQDialogButtonBox 0?8ASaveQDialogButtonBox0?8A =0 2A8G:8Save AllQDialogButtonBox0 =0 &2A8G:8 Yes to &AllQDialogButtonBox0B0 =0 ?@><O=0 Date Modified QDirModel84Kind QDirModel<5Name QDirModel  07<5@Size QDirModel"8?Type QDirModel0B20@O=5Close QDockWidget@818@0=5Dock QDockWidget720640=5Float QDockWidget @0B:>LessQDoubleSpinBox>4@>1=>MoreQDoubleSpinBox&OK&OK QErrorMessageH0 A5 &?>:0720 B>20 AJ>1I5=85 >B=>2>&Show this message again QErrorMessageB!J>1I5=85 70 >B:@820=5 =0 3@5H:8:Debug Message: QErrorMessage @8B8G=0 3@5H:0: Fatal Error: QErrorMessage@54C?@5645=85:Warning: QErrorMessage^$09;JB %1 =5 <>65 40 1J45 AJ74045= 70 8725640=5Cannot create %1 for outputQFile\$09;JB %1 =5 <>65 40 1J45 >B2>@5= 70 2J25640=5Cannot open %1 for inputQFileV$09;JB =5 <>65 40 1J45 >B2>@5= 70 8725640=5Cannot open for outputQFileP7E>4=8OB D09; =5 <>65 40 1J45 ?@5<0E=0BCannot remove source fileQFile0&5;528OB D09; AJI5AB2C20Destination file existsQFile.5CA?5H5= 70?8A =0 1;>:Failure to write blockQFile%1 8@5:B>@8OB0 =5 15 =0<5@5=0. >;O C25@5B5 A5, G5 5 704045=> ?@028;=> 8<5.K%1 Directory not found. Please verify the correct directory name was given. QFileDialog%1 $09;JB =5 15 =0<5@5=. >;O C25@5B5 A5, G5 5 704045=> ?@028;=> 8<5.A%1 File not found. Please verify the correct file name was given. QFileDialogd%1 25G5 AJI5AB2C20. 5;05B5 ;8 40 1J45 70<5=5=(0)?-%1 already exists. Do you want to replace it? QFileDialog&718@0=5&Choose QFileDialog&7B@820=5&Delete QFileDialog&>20 ?0?:0 &New Folder QFileDialog&B20@O=5&Open QFileDialog&@58<5=C20=5&Rename QFileDialog &0?8A&Save QFileDialog'%1' 5 70I8B5=(0) 70 70?8A. 5;05B5 ;8 40 1J45 87B@8B(0), 2J?@5:8 B>20?9'%1' is write protected. Do you want to delete it anyway? QFileDialog$A8G:8 D09;>25 (*) All Files (*) QFileDialog(A8G:8 D09;>25 (*.*)All Files (*.*) QFileDialogX!83C@=8 ;8 AB5, G5 65;05B5 40 87B@85B5 '%1'?!Are sure you want to delete '%1'? QFileDialog 0704Back QFileDialogT52J7<>6=> 5 40 1J45 87B@8B0 48@5:B>@8OB0.Could not delete directory. QFileDialog.!J74020=5 =0 =>20 ?0?:0Create New Folder QFileDialog>4@>1=>AB8 Detail View QFileDialog8@5:B>@88 Directories QFileDialog8@5:B>@8O Directory: QFileDialog#AB@>9AB2>Drive QFileDialog$09;File QFileDialog<5 =0 &D09;0: File &name: QFileDialog$09;>25 >B B8?:Files of type: QFileDialog,0<8@0=5 =0 48@5:B>@8OFind Directory QFileDialog 0?@54Forward QFileDialog !?8AJ: List View QFileDialog@53;54 2:Look in: QFileDialog>OB :><?NBJ@ My Computer QFileDialog>20 ?0?:0 New Folder QFileDialogB20@O=5Open QFileDialog* >48B5;A:0 48@5:B>@8OParent Directory QFileDialog.>A;54=> >B20@O=8 <5AB0 Recent Places QFileDialog@5<0E20=5Remove QFileDialog0?8A :0B>Save As QFileDialog>:0720=5Show  QFileDialog<>:0720=5 =0 &A:@8B8B5 D09;>25Show &hidden files QFileDialog58725AB5=Unknown QFileDialog %1 %1 GBQFileSystemModel %1 :%1 KBQFileSystemModel %1 %1 MBQFileSystemModel %1 "%1 TBQFileSystemModel%1 09B0%1 bytesQFileSystemModel<b><5B> "%1" =5 <>65 40 1J45 87?>;720=>.</b><p>?8B09B5 A 4@C3> 8<5, A ?>-<0;:> A8<2>;8 8;8 157 ?C=:BC0F8>==8 B0:820.oThe name "%1" can not be used.

Try using another name, with fewer characters or no punctuations marks.QFileSystemModel><?NBJ@ComputerQFileSystemModel0B0 =0 ?@><O=0 Date ModifiedQFileSystemModel*520;84=> 8<5 =0 D09;Invalid filenameQFileSystemModel84KindQFileSystemModel>OB :><?NBJ@ My ComputerQFileSystemModel<5NameQFileSystemModel  07<5@SizeQFileSystemModel"8?TypeQFileSystemModel A8G:8Any QFontDatabase0@01A:8Arabic QFontDatabase0@<5=A:8Armenian QFontDatabase '5@5=Black QFontDatabase>;CG5@Bold QFontDatabase=0 :8@8;8F0Cyrillic QFontDatabase3@C78=A:8Georgian QFontDatabase 3@JF:8Greek QFontDatabase 2@8BHebrew QFontDatabase C@A82Italic QFontDatabaseO?>=A:8Japanese QFontDatabase:E<5@A:8Khmer QFontDatabase:>@59A:8Korean QFontDatabase ;0>A:8Lao QFontDatabase;0B8=A:8Latin QFontDatabase5:Light QFontDatabase<80=<0@A:8Myanmar QFontDatabase>@<0;5=Normal QFontDatabase>;530BOblique QFontDatabase>30<Ogham QFontDatabase@C=8G5A:8Runic QFontDatabase">?@>AB5= :8B09A:8Simplified Chinese QFontDatabaseA8<2>;5=Symbol QFontDatabaseA8@89A:8Syriac QFontDatabaseB09;0=4A:8Thai QFontDatabaseB815BA:8Tibetan QFontDatabase(B@048F8>=5= :8B09A:8Traditional Chinese QFontDatabase285B=0<A:8 Vietnamese QFontDatabase &(@8DB&Font QFontDialog& 07<5@&Size QFontDialog&>4G5@B020=5 &Underline QFontDialog D5:B8Effects QFontDialog&!B8; =0 H@8DB0 Font st&yle QFontDialog @8<5@Sample QFontDialog71>@ =0 H@8DB Select Font QFontDialog&0G5@B020=5 Stri&keout QFontDialog$!&8AB5<0 =0 ?8A0=5Wr&iting System QFontDialogH@5H:0 ?@8 A<O=0 =0 48@5:B>@8OB0: %1Changing directory failed: %1QFtp6#AB0=>25=0 5 2@J7:0 A E>AB0Connected to hostQFtp:#AB0=>25=0 5 2@J7:0 A E>AB %1Connected to host %1QFtp@@5H:0 ?@8 A2J@720=5 A E>AB0: %1Connecting to host failed: %1QFtp*@J7:0B0 15 70B2>@5=0Connection closedQFtp:@J7:0B0 70 40==8 15 >B:070=0&Connection refused for data connectionQFtp<@J7:0B0 A E>AB %1 15 >B:070=0Connection refused to host %1QFtpF7B5:;> 2@5<5 =0 2@J7:0B0 A E>AB %1Connection timed out to host %1QFtp>@J7:0B0 A E>AB %1 15 70B2>@5=0Connection to %1 closedQFtpP@5H:0 ?@8 AJ74020=5 =0 48@5:B>@8OB0: %1Creating directory failed: %1QFtpB@5H:0 ?@8 87B53;O=5 =0 D09;0: %1Downloading file failed: %1QFtp&%>ABJB %1 5 =0<5@5= Host %1 foundQFtp.%>ABJB %1 =5 15 =0<5@5=Host %1 not foundQFtp %>ABJB 5 =0<5@5= Host foundQFtpT@5H:0 ?@8 @07;8AB20=5 =0 48@5:B>@8OB0: %1Listing directory failed: %1QFtp<5CA?5H5= 2E>4 2 A8AB5<0B0: %1Login failed: %1QFtpO<0 2@J7:0 Not connectedQFtpR@5H:0 ?@8 ?@5<0E20=5 =0 48@5:B>@8OB0: %1Removing directory failed: %1QFtpD@5H:0 ?@8 ?@5<0E20=5 =0 D09;0: %1Removing file failed: %1QFtp"58725AB=0 3@5H:0 Unknown errorQFtp,@5H:0 ?@8 :0G20=5: %1Uploading file failed: %1QFtp"58725AB=0 3@5H:0 Unknown error QHostInfo(%>ABJB =5 15 =0<5@5=Host not foundQHostInfoAgent(58725AB5= B8? 04@5AUnknown address typeQHostInfoAgent"58725AB=0 3@5H:0 Unknown errorQHostInfoAgent278A:20 A5 C4>AB>25@O20=5Authentication requiredQHttp6#AB0=>25=0 5 2@J7:0 A E>AB0Connected to hostQHttp:#AB0=>25=0 5 2@J7:0 A E>AB %1Connected to host %1QHttp(@J7:0B0 5 70B2>@5=0Connection closedQHttp(@J7:0B0 15 >B:070=0Connection refusedQHttpl@J7:0B0 15 >B:070=0 (8;8 2@5<5B> 70 2@J7:0 5 87B5:;>)!Connection refused (or timed out)QHttp4@J7:0B0 A %1 15 70B2>@5=0Connection to %1 closedQHttp>2@545=8 40==8Data corruptedQHttp^@5H:0 ?@8 70?8A =0 >B3>2>@0 2J@EC CAB@>9AB2>B> Error writing response to deviceQHttp2HTTP-70O2:0B0 5 =5CA?5H=0HTTP request failedQHttp~0O25=0 15 HTTPS 2@J7:0, => ?>44@J6:0B0 =0 SSL =5 5 :><?8;8@0=0:HTTPS connection requested but SSL support not compiled inQHttp&%>ABJB %1 5 =0<5@5= Host %1 foundQHttp.%>ABJB %1 =5 15 =0<5@5=Host %1 not foundQHttp %>ABJB 5 =0<5@5= Host foundQHttp:%>ABJB 878A:20 C4>AB>25@O20=5Host requires authenticationQHttp,520;845= HTTP >B3>2>@Invalid HTTP chunked bodyQHttpP520;84=0 703;02=0 G0AB =0 HTTP >B3>2>@0Invalid HTTP response headerQHttpn5 5 704045= AJ@2J@, :J< :>9B> 40 A5 A5 8=8F88@0 2@J7:0No server set to connect toQHttpN78A:20 C4>AB>25@O20=5 2 ?@>:A8 AJ@2J@0Proxy authentication requiredQHttpL@>:A8 AJ@2J@JB 878A:20 C4>AB>25@O20=5Proxy requires authenticationQHttp*0O2:0B0 5 ?@5:JA=0B0Request abortedQHttpHSSL handshake >?5@0F8OB0 5 =5CA?5H=0SSL handshake failedQHttpl5>G0:20=> ?@5:JA20=5 =0 2@J7:0B0 >B AB@0=0 =0 AJ@2J@0%Server closed connection unexpectedlyQHttpD58725AB5= <5B>4 =0 C4>AB>25@O20=5Unknown authentication methodQHttp"58725AB=0 3@5H:0 Unknown errorQHttp:04045= 5 =58725AB5= ?@>B>:>;Unknown protocol specifiedQHttpD5?@028;=0 4J;68=0 =0 AJ4J@60=85B>Wrong content lengthQHttp278A:20 A5 C4>AB>25@O20=5Authentication requiredQHttpSocketEngineR5 ?>;CG5= HTTP >B3>2>@ >B ?@>:A8 AJ@2J@0(Did not receive HTTP response from proxyQHttpSocketEngineX@5H:0 2 :><C=8:0F8OB0 A HTTP ?@>:A8 AJ@2J@0#Error communicating with HTTP proxyQHttpSocketEngine@5H:0 2 A8=B0:B8G=8O @071>@ =0 70O2:0B0 70 C4>AB>25@O20=5 >B ?@>:A8 AJ@2J@0/Error parsing authentication request from proxyQHttpSocketEngine^@>:A8 AJ@2J@JB ?@56452@5<5==> 70B2>@8 2@J7:0B0#Proxy connection closed prematurelyQHttpSocketEngineB@>:A8 AJ@2J@JB >BE2J@;8 2@J7:0B0Proxy connection refusedQHttpSocketEngine>@>:A8 AJ@2J@JB >B:070 2@J7:0B0Proxy denied connectionQHttpSocketEngineT7B5:;> 2@5<5 =0 2@J7:0B0 A ?@>:A8 AJ@2J@0!Proxy server connection timed outQHttpSocketEngine8@>:A8 AJ@2J@JB =5 15 >B:@8BProxy server not foundQHttpSocketEngineL52J7<>6=> 5 70?>G20=5B> =0 B@0=70:F8OCould not start transaction QIBaseDriverF@5H:0 ?@8 >B20@O=5 =0 1070B0 40==8Error opening database QIBaseDriverR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transaction QIBaseDriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Unable to rollback transaction QIBaseDriverb52J7<>6=> 5 40 A5 872;5G5 8=D>@<0F8O 70 70O2:0B0Could not get query info QIBaseResultb52J7<>6=> 5 40 A5 872;5G5 8=D>@<0F8O 70 70O2:0B0Could not get statement info QIBaseResultH52J7<>6=> 5 40 A5 ?@83>B28 70O2:0B0Could not prepare statement QIBaseResultL52J7<>6=> 5 70?>G20=5B> =0 B@0=70:F8OCould not start transaction QIBaseResultF52J7<>6=> 5 40 A5 70B2>@8 70O2:0B0Unable to close statement QIBaseResultR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transaction QIBaseResultF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute query QIBaseResult4O<0 <OAB> =0 CAB@>9AB2>B>No space left on device QIODevice<O<0 B0:J2 D09; 8;8 48@5:B>@8ONo such file or directory QIODeviceB:070= 4>ABJ?Permission denied QIODevice:"2J@45 <=>3> >B2>@5=8 D09;>25Too many open files QIODevice"58725AB=0 3@5H:0 Unknown error QIODevice6Mac OS X <5B>4 =0 2J25640=5Mac OS X input method QInputContext4Windows <5B>4 =0 2J25640=5Windows input method QInputContextXIMXIM QInputContext,XIM <5B>4 =0 2J25640=5XIM input method QInputContext$J2545B5 AB>9=>AB:Enter a value: QInputDialog"58725AB=0 3@5H:0 Unknown errorQLibrary&>?8@0=5&Copy QLineEdit&>AB02O=5&Paste QLineEdit&J7AB0=>2O20=5&Redo QLineEdit&B<O=0&Undo QLineEdit&7@O720=5Cu&t QLineEdit7B@820=5Delete QLineEdit71>@ =0 2A8G:8 Select All QLineEdit8%1: 4@5AJB 25G5 A5 87?>;720%1: Address in use QLocalServer%1: @5H=> 8<5%1: Name error QLocalServer$%1: B:070= 4>ABJ?%1: Permission denied QLocalServer0%1: 58725AB=0 3@5H:0 %2%1: Unknown error %2 QLocalServer0%1: @5H:0 ?@8 A2J@720=5%1: Connection error QLocalSocket&%1: B:070=0 2@J7:0%1: Connection refused QLocalSocket@%1: 59B03@0<0B0 5 B2J@45 3>;O<0%1: Datagram too large QLocalSocket"%1: 520;84=> 8<5%1: Invalid name QLocalSocket0%1: B40;5G5=> 70B20@O=5%1: Remote closed QLocalSocket@%1: @5H:0 ?@8 4>ABJ?0 =0 A>:5B0%1: Socket access error QLocalSocketJ%1: 7B5:;> 2@5<5 =0 A>:5B >?5@0F8OB0%1: Socket operation timed out QLocalSocket<%1: @5H:0 2 @5AC@A0 =0 A>:5B0%1: Socket resource error QLocalSocketP%1: ?5@0F8OB0 AJA A>:5B0 =5 A5 ?>44J@60)%1: The socket operation is not supported QLocalSocket*%1: 58725AB=0 3@5H:0%1: Unknown error QLocalSocket0%1: 58725AB=0 3@5H:0 %2%1: Unknown error %2 QLocalSocketL52J7<>6=> 5 70?>G20=5B> =0 B@0=70:F8OUnable to begin transaction QMYSQLDriverR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transaction QMYSQLDriverD52J7<>6=> 5 40 A5 CAB0=>28 2@J7:0Unable to connect QMYSQLDriverP52J7<>6=> 5 40 A5 >B2>@8 1070B0 40==8 'Unable to open database ' QMYSQLDriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Unable to rollback transaction QMYSQLDriverL52J7<>6=> 5 40 A5 A2J@60B AB>9=>AB8B5Unable to bind outvalues QMYSQLResultH52J7<>6=> 5 40 A5 A2J@65 AB>9=>ABB0Unable to bind value QMYSQLResultX52J7<>6=> 5 40 A5 87?J;=8 A;5420I0B0 70O2:0Unable to execute next query QMYSQLResultF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute query QMYSQLResultF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute statement QMYSQLResultB52J7<>6=> 5 40 A5 872;5:0B 40==8Unable to fetch data QMYSQLResultH52J7<>6=> 5 40 A5 ?@83>B28 70O2:0B0Unable to prepare statement QMYSQLResultD52J7<>6=> 5 40 A5 =C;8@0 70O2:0B0Unable to reset statement QMYSQLResult`52J7<>6=> 5 40 A5 AJE@0=OB A;5420I8B5 @57C;B0B8Unable to store next result QMYSQLResultN52J7<>6=> 5 40 A5 AJE@0=OB @57C;B0B8B5Unable to store result QMYSQLResultf52J7<>6=> 5 40 A5 AJE@0=OB @57C;B0B8B5 >B 70O2:0B0!Unable to store statement results QMYSQLResult(=5>703;025=) (Untitled)QMdiArea%1 - [%2] %1 - [%2] QMdiSubWindow&0B20@O=5&Close QMdiSubWindow&@5<5AB20=5&Move QMdiSubWindow&J7AB0=>2O20=5&Restore QMdiSubWindow& 07<5@&Size QMdiSubWindow - [%1]- [%1] QMdiSubWindow0B20@O=5Close QMdiSubWindow ><>IHelp QMdiSubWindow0&:A8<878@0=5 Ma&ximize QMdiSubWindow0:A8<878@0=5Maximize QMdiSubWindow5=NMenu QMdiSubWindow8&=8<878@0=5 Mi&nimize QMdiSubWindow8=8<878@0=5Minimize QMdiSubWindowJ7AB0=>2O20=5Restore QMdiSubWindow*J7AB0=>2O20=5 =04>;C Restore Down QMdiSubWindow AO=:0Shade QMdiSubWindow8=038 &>B3>@5 Stay on &Top QMdiSubWindowB AO=:0Unshade QMdiSubWindow0B20@O=5CloseQMenu7?J;=5=85ExecuteQMenuB20@O=5OpenQMenu <h3>0 Qt</h3><p>"078 ?@>3@0<0 ?>;720 Qt 25@A8O %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p>^

About Qt

This program uses Qt version %1.

Qt is a C++ toolkit for cross-platform application development.

Qt provides single-source portability across MS Windows, Mac OS X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.

Qt is available under three different licensing options designed to accommodate the needs of our various users.

Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.

Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.

Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.

Please see www.qtsoftware.com/products/licensing for an overview of Qt licensing.

Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).

Qt is a Nokia product. See www.qtsoftware.com/qt for more information.

 QMessageBox 0 QtAbout Qt QMessageBox ><>IHelp QMessageBox4!:@820=5 =0 ?>4@>1=>AB8...Hide Details... QMessageBoxOK QMessageBox6>:0720=5 =0 ?>4@>1=>AB8...Show Details... QMessageBox 71>@ Select IMQMultiInputContext(@J7:0B0 15 >B:070=0Connection refusedQNativeSocketEngine"58725AB=0 3@5H:0 Unknown errorQNativeSocketEngine>!>:5B >?5@0F8OB0 =5 A5 ?>44J@60Unsupported socket operationQNativeSocketEngine2@5H:0 ?@8 >B20@O=5 =0 %1Error opening %1QNetworkAccessCacheBackendh52J7<>6=> 5 40 A5 >B2>@8 %1: JBOB 5 :J< 48@5:B>@8O#Cannot open %1: Path is a directoryQNetworkAccessFileBackend:@5H:0 ?@8 >B20@O=5 =0 %1: %2Error opening %1: %2QNetworkAccessFileBackend6@5H:0 ?@8 G5B5=5 =0 %1: %2Read error reading from %1: %2QNetworkAccessFileBackendd0O2:0 70 >B20@O=5 =0 D09;0 %1, :>9B> =5 5 ;>:0;5=%Request for opening non-local file %1QNetworkAccessFileBackend4@5H:0 ?@8 70?8A =0 %1: %2Write error writing to %1: %2QNetworkAccessFileBackendT52J7<>6=> 5 40 A5 >B2>@8 %1: 5 48@5:B>@8OCannot open %1: is a directoryQNetworkAccessFtpBackend<@5H:0 ?@8 87B53;O=5 =0 %1: %2Error while downloading %1: %2QNetworkAccessFtpBackend8@5H:0 ?@8 :0G20=5 =0 %1: %2Error while uploading %1: %2QNetworkAccessFtpBackendj;870=5B> 2 %1 5 =5CA?5H=>: 878A:20 A5 C4>AB>25@O20=50Logging in to %1 failed: authentication requiredQNetworkAccessFtpBackendF5 5 =0<5@5= ?>4E>4OI ?@>:A8 AJ@2J@No suitable proxy foundQNetworkAccessFtpBackendF5 5 =0<5@5= ?>4E>4OI ?@>:A8 AJ@2J@No suitable proxy foundQNetworkAccessHttpBackendb@5H:0 ?@8 87B53;O=5 =0 %1 - AJ@2J@0 >B3>2>@8: %2)Error downloading %1 - server replied: %2 QNetworkReply8@>B>:>;JB "%1" 5 =58725AB5=Protocol "%1" is unknown QNetworkReply*?5@0F8OB0 5 >B<5=5=0Operation canceledQNetworkReplyImplL52J7<>6=> 5 70?>G20=5B> =0 B@0=70:F8OUnable to begin transaction QOCIDriverR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transaction QOCIDriverP52J7<>6=> 5 40 A5 872J@H8 8=8F80;870F8OUnable to initialize QOCIDriver052J7<>6=> 5 40 A5 2;575Unable to logon QOCIDriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Unable to rollback transaction QOCIDriverL52J7<>6=> 5 40 A5 @07?@545;8 70O2:0B0Unable to alloc statement QOCIResultp52J7<>6=> 5 40 A5 A2J@65 :>;>=0 70 87?J;=5=85 =0 =01>@0'Unable to bind column for batch execute QOCIResultH52J7<>6=> 5 40 A5 A2J@65 AB>9=>ABB0Unable to bind value QOCIResultV52J7<>6=> 5 40 A5 87?J;=8 =01>@0 >B 70O2:8!Unable to execute batch statement QOCIResultF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute statement QOCIResultP52J7<>6=> 5 40 A5 ?@5<8=5 :J< A;5420I8OUnable to goto next QOCIResultH52J7<>6=> 5 40 A5 ?@83>B28 70O2:0B0Unable to prepare statement QOCIResultR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transaction QODBCDriverD52J7<>6=> 5 40 A5 CAB0=>28 2@J7:0Unable to connect QODBCDriver52J7<>6=> 5 40 A5 CAB0=>28 2@J7:0 - @0925@JB =5 ?>44J@60 =5>1E>48<0B0 DC=:F8>=0;=>ABCUnable to connect - Driver doesn't support all needed functionality QODBCDriverR52J7<>6=> 5 40 A5 ?@5CAB0=>28 autocommitUnable to disable autocommit QODBCDriverL52J7<>6=> 5 40 A5 CAB0=>28 autocommitUnable to enable autocommit QODBCDriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Unable to rollback transaction QODBCDriverQODBCResult::reset:52J7<>6=> 5 40 A5 CAB0=>28 'SQL_CURSOR_STATIC' :0B> 0B@81CB =0 70O2:0B0. >;O ?@>25@5B5 =0AB@>9:8B5 =0 ODBC 4@0925@0yQODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResultH52J7<>6=> 5 40 A5 A2J@65 ?0@0<5BJ@0Unable to bind variable QODBCResultF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute statement QODBCResult452J7<>6=> 5 40 A5 872;5G5Unable to fetch QODBCResultB52J7<>6=> 5 40 A5 872;5G5 ?J@28OUnable to fetch first QODBCResultH52J7<>6=> 5 40 A5 872;5G5 ?>A;54=8OUnable to fetch last QODBCResultH52J7<>6=> 5 40 A5 872;5G5 A;5420I8OUnable to fetch next QODBCResultJ52J7<>6=> 5 40 A5 872;5G5 ?@54E>4=8OUnable to fetch previous QODBCResultH52J7<>6=> 5 40 A5 ?@83>B28 70O2:0B0Unable to prepare statement QODBCResult><0H5=HomeQObject"520;845= URI: %1Invalid URI: %1QObject25 5 704045=> 8<5 =0 E>ABNo host name givenQObject8?5@0F8OB0 =5 A5 ?>44J@60 %1Operation not supported on %1QObjectb@>B>:>;=0 3@5H:0: ?>;CG5=8OB ?0:5B 5 A 4J;68=0 0)Protocol error: packet of size 0 receivedQObject6@5H:0 ?@8 G5B5=5 =0 %1: %2Read error reading from %1: %2QObjectlB40;5G5=8OB E>AB ?@56452@5<5==> 70B2>@8 2@J7:0B0 2 %13Remote host closed the connection prematurely on %1QObject.@5H:0 2 A>:5B0 %1: %2Socket error on %1: %2QObject4@5H:0 ?@8 70?8A =0 %1: %2Write error writing to %1: %2QObject<5NameQPPDOptionsModel!B>9=>ABValueQPPDOptionsModelL52J7<>6=> 5 70?>G20=5B> =0 B@0=70:F8OCould not begin transaction QPSQLDriverR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Could not commit transaction QPSQLDriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Could not rollback transaction QPSQLDriverD52J7<>6=> 5 40 A5 CAB0=>28 2@J7:0Unable to connect QPSQLDriver01>=0<5=BJB 5 =52J7<>65=Unable to subscribe QPSQLDriverBB:07JB >B 01>=0<5=B 5 =52J7<>65=Unable to unsubscribe QPSQLDriverF52J7<>6=> 5 40 A5 AJ74045 70O2:0B0Unable to create query QPSQLResultH52J7<>6=> 5 40 A5 ?@83>B28 70O2:0B0Unable to prepare statement QPSQLResultA0=B8<5B@8 (A<)Centimeters (cm)QPageSetupWidgetFormQPageSetupWidget8A>G8=0:Height:QPageSetupWidget8=G>25 (8=G) Inches (in)QPageSetupWidget 73;54 LandscapeQPageSetupWidget ?>;5B0MarginsQPageSetupWidget<8;8<5B@8 (<<)Millimeters (mm)QPageSetupWidget@85=B0F8O OrientationQPageSetupWidget* 07<5@ =0 AB@0=8F0B0: Page size:QPageSetupWidget %0@B8OPaperQPageSetupWidget&7B>G=8: =0 E0@B8O: Paper source:QPageSetupWidgetC=:B>25 (pt) Points (pt)QPageSetupWidget>@B@5BPortraitQPageSetupWidget1J@=0B 873;54Reverse landscapeQPageSetupWidget1J@=0B ?>@B@5BReverse portraitQPageSetupWidget(8@8=0:Width:QPageSetupWidget4>;=> ?>;5 bottom marginQPageSetupWidget;O2> ?>;5 left marginQPageSetupWidget4OA=> ?>;5 right marginQPageSetupWidget3>@=> ?>;5 top marginQPageSetupWidget2>102:0B0 =5 15 70@545=0.The plugin was not loaded. QPluginLoader"58725AB=0 3@5H:0 Unknown error QPluginLoaderj%1 25G5 AJI5AB2C20. 5;05B5 ;8 40 1J45 ?@570?8A0=(0)?/%1 already exists. Do you want to overwrite it? QPrintDialogd%1 5 48@5:B>@8O. >;O 8715@5B5 4@C3> 8<5 =0 D09;0.7%1 is a directory. Please choose a different file name. QPrintDialog<< &J7<>6=>AB8 &Options << QPrintDialog&J7<>6=>AB8 >> &Options >> QPrintDialogB&?5G0B20=5&Print QPrintDialogH<qt>5;05B5 ;8 40 A5 ?@570?8H5?</qt>%Do you want to overwrite it? QPrintDialogA0 QPrintDialog$A0 (841 x 1189 <<)A0 (841 x 1189 mm) QPrintDialogA1 QPrintDialog"A1 (594 x 841 <<)A1 (594 x 841 mm) QPrintDialogA2 QPrintDialog"A2 (420 x 594 <<)A2 (420 x 594 mm) QPrintDialogA3 QPrintDialog"A3 (297 x 420 <<)A3 (297 x 420 mm) QPrintDialogA4 QPrintDialogJA4 (210 x 297 <<, 8.26 x 11.7 8=G>25)%A4 (210 x 297 mm, 8.26 x 11.7 inches) QPrintDialogA5 QPrintDialog"A5 (148 x 210 <<)A5 (148 x 210 mm) QPrintDialogA6 QPrintDialog"A6 (105 x 148 <<)A6 (105 x 148 mm) QPrintDialogA7 QPrintDialog A7 (74 x 105 <<)A7 (74 x 105 mm) QPrintDialogA8 QPrintDialogA8 (52 x 74 <<)A8 (52 x 74 mm) QPrintDialogA9 QPrintDialogA9 (37 x 52 <<)A9 (37 x 52 mm) QPrintDialogA524>=8<8: %1 Aliases: %1 QPrintDialogB0 QPrintDialog&B0 (1000 x 1414 <<)B0 (1000 x 1414 mm) QPrintDialogB1 QPrintDialog$B1 (707 x 1000 <<)B1 (707 x 1000 mm) QPrintDialogB10 QPrintDialog B10 (31 x 44 <<)B10 (31 x 44 mm) QPrintDialogB2 QPrintDialog"B2 (500 x 707 <<)B2 (500 x 707 mm) QPrintDialogB3 QPrintDialog"B3 (353 x 500 <<)B3 (353 x 500 mm) QPrintDialogB4 QPrintDialog"B4 (250 x 353 <<)B4 (250 x 353 mm) QPrintDialogB5 QPrintDialogJB5 (176 x 250 <<, 6.93 x 9.84 8=G>25)%B5 (176 x 250 mm, 6.93 x 9.84 inches) QPrintDialogB6 QPrintDialog"B6 (125 x 176 <<)B6 (125 x 176 mm) QPrintDialogB7 QPrintDialog B7 (88 x 125 <<)B7 (88 x 125 mm) QPrintDialogB8 QPrintDialogB8 (62 x 88 <<)B8 (62 x 88 mm) QPrintDialogB9 QPrintDialogB9 (44 x 62 <<)B9 (44 x 62 mm) QPrintDialogC5E QPrintDialog$C5E (163 x 229 <<)C5E (163 x 229 mm) QPrintDialog!>1AB25=Custom QPrintDialogDLE QPrintDialog$DLE (110 x 220 <<)DLE (110 x 220 mm) QPrintDialogExecutive Executive QPrintDialogRExecutive (7.5 x 10 8=G>25, 191 x 254 <<))Executive (7.5 x 10 inches, 191 x 254 mm) QPrintDialog$09;JB %1 =5 5 4>ABJ?5= 70 70?8A. >;O 8715@5B5 4@C3> 8<5 =0 D09;0.=File %1 is not writable. Please choose a different file name. QPrintDialog"$09;JB AJI5AB2C20 File exists QPrintDialog FolioFolio QPrintDialog(Folio (210 x 330 <<)Folio (210 x 330 mm) QPrintDialog LedgerLedger QPrintDialog*Ledger (432 x 279 <<)Ledger (432 x 279 mm) QPrintDialog LegalLegal QPrintDialogJLegal (8.5 x 14 8=G>25, 216 x 356 <<)%Legal (8.5 x 14 inches, 216 x 356 mm) QPrintDialog LetterLetter QPrintDialogLLetter (8.5 x 11 8=G>25, 216 x 279 <<)&Letter (8.5 x 11 inches, 216 x 279 mm) QPrintDialog>:0;5= D09; Local file QPrintDialogOK QPrintDialogB?5G0B20=5Print QPrintDialog0B?5G0B20=5 2J2 D09; ...Print To File ... QPrintDialog*B?5G0B20=5 =0 2A8G:8 Print all QPrintDialog.B?5G0B20=5 =0 480?07>= Print range QPrintDialog0B?5G0B20=5 =0 871@0=>B>Print selection QPrintDialog4B?5G0B20=5 2J2 D09; (PDF)Print to File (PDF) QPrintDialogBB?5G0B20=5 2J2 D09; (Postscript)Print to File (Postscript) QPrintDialogTabloidTabloid QPrintDialog,Tabloid (279 x 432 <<)Tabloid (279 x 432 mm) QPrintDialogv!B>9=>ABB0 70 'B', =5 <>65 40 5 ?>-3>;O<0 >B B078 =0 '>'.7The 'From' value cannot be greater than the 'To' value. QPrintDialog;8: #10US Common #10 Envelope QPrintDialog*;8: #10 (105x241 <<)%US Common #10 Envelope (105 x 241 mm) QPrintDialog"0?8A =0 D09;0 %1 Write %1 file QPrintDialog;>:0;5=locally connected QPrintDialog=58725AB5=unknown QPrintDialog%1%QPrintPreviewDialog0B20@O=5CloseQPrintPreviewDialog,:A?>@B8@0=5 :J< (PDF) Export to PDFQPrintPreviewDialog::A?>@B8@0=5 :J< (PostScript)Export to PostScriptQPrintPreviewDialogJ@20 AB@0=8F0 First pageQPrintPreviewDialog.0 A5 AJ18@0 AB@0=8F0B0Fit pageQPrintPreviewDialog,0 A5 AJ18@0 ?> H8@8=0 Fit widthQPrintPreviewDialog 73;54 LandscapeQPrintPreviewDialog">A;54=0 AB@0=8F0 Last pageQPrintPreviewDialog"!;5420I0 AB@0=8F0 Next pageQPrintPreviewDialog20AB@>920=5 =0 AB@0=8F0B0 Page SetupQPrintPreviewDialog20AB@>920=5 =0 AB@0=8F0B0 Page setupQPrintPreviewDialog>@B@5BPortraitQPrintPreviewDialog$@54E>4=0 AB@0=8F0 Previous pageQPrintPreviewDialogB?5G0B20=5PrintQPrintPreviewDialog*@5420@8B5;5= ?@53;54 Print PreviewQPrintPreviewDialogT0 A5 ?>:0720 ?@53;54 =0 ;8F528B5 AB@0=8F8Show facing pagesQPrintPreviewDialogP0 A5 ?>:0720 ?@53;54 =0 2A8G:8 AB@0=8F8Show overview of all pagesQPrintPreviewDialog60 A5 ?>:0720 54=0 AB@0=8F0Show single pageQPrintPreviewDialog@81;86020=5Zoom inQPrintPreviewDialogB40;5G020=5Zoom outQPrintPreviewDialog 07H8@5=8AdvancedQPrintPropertiesWidgetFormQPrintPropertiesWidget!B@0=8F0PageQPrintPropertiesWidget>4@5640=5CollateQPrintSettingsOutput &25B=>ColorQPrintSettingsOutput&25B5= @568< Color ModeQPrintSettingsOutput :>?8OCopiesQPrintSettingsOutput >?8O:Copies:QPrintSettingsOutput*C?;5:A=> >B?5G0B20=5Duplex PrintingQPrintSettingsOutputFormQPrintSettingsOutputN0=A8 =0 A82> GrayscaleQPrintSettingsOutputJ;30 AB@0=0 Long sideQPrintSettingsOutput57NoneQPrintSettingsOutputJ7<>6=>AB8OptionsQPrintSettingsOutput&0AB@>9:8 =0 87E>40Output SettingsQPrintSettingsOutput!B@0=8F8 >B Pages fromQPrintSettingsOutput*B?5G0B20=5 =0 2A8G:8 Print allQPrintSettingsOutput.B?5G0B20=5 =0 480?07>= Print rangeQPrintSettingsOutput1@JI0=5ReverseQPrintSettingsOutput71@0=8 SelectionQPrintSettingsOutputJA0 AB@0=0 Short sideQPrintSettingsOutput4>toQPrintSettingsOutput &<5:&Name: QPrintWidget...... QPrintWidgetForm QPrintWidget5AB>?>;>65=85: Location: QPrintWidget7E>45= &D09;: Output &file: QPrintWidget!&2>9AB20 P&roperties QPrintWidget*@5420@8B5;5= ?@53;54Preview QPrintWidget@8=B5@Printer QPrintWidget"8?:Type: QPrintWidget B:07CancelQProgressDialogB20@O=5Open QPushButton$!;030=5 =0 >B<5B:0Check QRadioButton*bad char class syntaxbad char class syntaxQRegExp(bad lookahead syntaxbad lookahead syntaxQRegExp*bad repetition syntaxbad repetition syntaxQRegExp\>?8B 70 87?>;720=5 =0 87:;NG5=0 E0@0:B5@8AB8:0disabled feature usedQRegExp4=520;84=0 >A<8G=0 AB>9=>ABinvalid octal valueQRegExpB4>AB83=0B> 5 2JB@5H=> >3@0=8G5=85met internal limitQRegExp,;8?A20I ;O2 @0745;8B5;missing left delimQRegExp,=5 1OE0 >B:@8B8 3@5H:8no error occurredQRegExp=5>G0:20= :@09unexpected endQRegExpF@5H:0 ?@8 >B20@O=5 =0 1070B0 40==8Error to open databaseQSQLite2DriverL52J7<>6=> 5 70?>G20=5B> =0 B@0=70:F8OUnable to begin transactionQSQLite2DriverR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transactionQSQLite2DriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Unable to rollback TransactionQSQLite2DriverF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute statementQSQLite2ResultJ52J7<>6=> 5 40 A5 872;5:0B @57C;B0B8Unable to fetch resultsQSQLite2ResultH@5H:0 ?@8 70B20@O=5 =0 1070B0 40==8Error closing database QSQLiteDriverF@5H:0 ?@8 >B20@O=5 =0 1070B0 40==8Error opening database QSQLiteDriverL52J7<>6=> 5 70?>G20=5B> =0 B@0=70:F8OUnable to begin transaction QSQLiteDriverR52J7<>6=> 5 87?J;=5=85B> =0 B@0=70:F8OB0Unable to commit transaction QSQLiteDriverL52J7<>6=> 5 2@JI0=5B> =0 B@0=70:F8OB0Unable to rollback transaction QSQLiteDriver8?A20 70O2:0No query QSQLiteResult: 07;8:0 2 1@>O =0 ?0@0<5B@8B5Parameter count mismatch QSQLiteResultL52J7<>6=> 5 40 A5 A2J@60B ?0@0<5B@8B5Unable to bind parameters QSQLiteResultF52J7<>6=> 5 40 A5 87?J;=8 70O2:0B0Unable to execute statement QSQLiteResult@52J7<>6=> 5 40 A5 872;5G5 @54JBUnable to fetch row QSQLiteResultD52J7<>6=> 5 40 A5 =C;8@0 70O2:0B0Unable to reset statement QSQLiteResult>;5= @J1Bottom QScrollBarO2 @J1 Left edge QScrollBar 54 =04>;C Line down QScrollBar>4@02=O20=5Line up QScrollBar!B@0=8F0 =04>;C Page down QScrollBar!B@0=8F0 =0;O2> Page left QScrollBar !B@0=8F0 =04OA=> Page right QScrollBar!B@0=8F0 =03>@5Page up QScrollBar>78F8OPosition QScrollBar5A5= @J1 Right edge QScrollBar<@5428620=5 =0 ?;J730G0 =04>;C Scroll down QScrollBar<@5428620=5 =0 ?;J730G0 4> BC: Scroll here QScrollBar<@5428620=5 =0 ?;J730G0 2 ;O2> Scroll left QScrollBar>@5428620=5 =0 ?;J730G0 2 4OA=> Scroll right QScrollBar<@5428620=5 =0 ?;J730G0 =03>@5 Scroll up QScrollBar>@5= @J1Top QScrollBar++ QShortcutAltAlt QShortcut 0704Back QShortcutBackspace Backspace QShortcut"01C;0F8O =0704Backtab QShortcutBass Boost Bass Boost QShortcutBass Down Bass Down QShortcutBass UpBass Up QShortcut@>72J=O20=5Call QShortcutCaps Lock Caps Lock QShortcutCapsLockCapsLock QShortcut>=B5:AB1Context1 QShortcut>=B5:AB2Context2 QShortcut>=B5:AB3Context3 QShortcut>=B5:AB4Context4 QShortcutCtrlCtrl QShortcutDelDel QShortcut7B@820=5Delete QShortcutDownDown QShortcutEndEnd QShortcut EnterEnter QShortcutEscEsc QShortcut EscapeEscape QShortcutF%1F%1 QShortcut N18<8 Favorites QShortcutFlip QShortcut 0?@54Forward QShortcut.@5:JA20=5 =0 @073>2>@0Hangup QShortcut ><>IHelp QShortcut><0H5=Home QShortcutHome Page Home Page QShortcutInsIns QShortcut<J:20=5Insert QShortcut"!B0@B8@0=5 =0 (0) Launch (0) QShortcut"!B0@B8@0=5 =0 (1) Launch (1) QShortcut"!B0@B8@0=5 =0 (2) Launch (2) QShortcut"!B0@B8@0=5 =0 (3) Launch (3) QShortcut"!B0@B8@0=5 =0 (4) Launch (4) QShortcut"!B0@B8@0=5 =0 (5) Launch (5) QShortcut"!B0@B8@0=5 =0 (6) Launch (6) QShortcut"!B0@B8@0=5 =0 (7) Launch (7) QShortcut"!B0@B8@0=5 =0 (8) Launch (8) QShortcut"!B0@B8@0=5 =0 (9) Launch (9) QShortcut"!B0@B8@0=5 =0 (A) Launch (A) QShortcut"!B0@B8@0=5 =0 (B) Launch (B) QShortcut"!B0@B8@0=5 =0 (C) Launch (C) QShortcut"!B0@B8@0=5 =0 (D) Launch (D) QShortcut"!B0@B8@0=5 =0 (E) Launch (E) QShortcut"!B0@B8@0=5 =0 (F) Launch (F) QShortcut2;85=B 70 5;5:B@>==0 ?>I0 Launch Mail QShortcut&7?J;=5=85 =0 70?8A Launch Media QShortcutLeftLeft QShortcut&!;5420I> 87?J;=5=85 Media Next QShortcutJ7?@>8725640=5 Media Play QShortcut(@54E>4=> 87?J;=5=85Media Previous QShortcut 0?8A Media Record QShortcut.!?8@0=5 =0 87?J;=5=85B> Media Stop QShortcut5=NMenu QShortcutMetaMeta QShortcut5No QShortcutNum LockNum Lock QShortcutNumLockNumLock QShortcutNumber Lock Number Lock QShortcutB20@O=5 =0 URLOpen URL QShortcutPage Down Page Down QShortcutPage UpPage Up QShortcut PausePause QShortcut PgDownPgDown QShortcutPgUpPgUp QShortcut PrintPrint QShortcutPrint Screen Print Screen QShortcut1=>2O20=5Refresh QShortcut@JI0=5Return QShortcut RightRight QShortcutScroll Lock Scroll Lock QShortcutScrollLock ScrollLock QShortcut"J@A5=5Search QShortcut 71>@Select QShortcut ShiftShift QShortcut=B5@20;Space QShortcutStandbyStandby QShortcut!?8@0=5Stop QShortcut SysReqSysReq QShortcutSystem RequestSystem Request QShortcut"01C;0F8OTab QShortcutTreble Down Treble Down QShortcutTreble Up Treble Up QShortcutUpUp QShortcut40<0;O20=5 A8;0B0 =0 72C:0 Volume Down QShortcut(03;CH020=5 =0 72C:0 Volume Mute QShortcut6#25;8G020=5 A8;0B0 =0 72C:0 Volume Up QShortcut0Yes QShortcut!B@0=8F0 =04>;C Page downQSlider!B@0=8F0 =0;O2> Page leftQSlider !B@0=8F0 =04OA=> Page rightQSlider!B@0=8F0 =03>@5Page upQSlider>78F8OPositionQSlider @0B:>LessQSpinBox>4@>1=>MoreQSpinBox B:07CancelQSql&B:07 >B ?@><5=8B5?Cancel your edits?QSql>B2J@645=85ConfirmQSql7B@820=5DeleteQSql(7B@820=5 =0 70?8A0?Delete this record?QSql<J:20=5InsertQSql5NoQSql&0?8A =0 ?@><5=8B5? Save edits?QSql:BC0;878@0=5UpdateQSql0YesQSql&%1: 25G5 AJI5AB2C20%1: already existsQSystemSemaphore"%1: =5 AJI5AB2C20%1: does not existQSystemSemaphore0%1: =54>AB0BJG=8 @5AC@A8%1: out of resourcesQSystemSemaphore$%1: >B:070= 4>ABJ?%1: permission deniedQSystemSemaphore0%1: =58725AB=0 3@5H:0 %2%1: unknown error %2QSystemSemaphoreD52J7<>6=> 5 40 A5 CAB0=>28 2@J7:0Unable to open connection QTDSDriverP52J7<>6=> 5 40 A5 87?>;720 1070B0 40==8Unable to use database QTDSDriver<@5428620=5 =0 ?;J730G0 2 ;O2> Scroll LeftQTabBar>@5428620=5 =0 ?;J730G0 2 4OA=> Scroll RightQTabBarF?5@0F88 AJA A>:5B8 =5 A5 ?>44J@60B$Operation on socket is not supported QTcpServer&>?8@0=5&Copy QTextControl&>AB02O=5&Paste QTextControl&J7AB0=>2O20=5&Redo QTextControl&B<O=0&Undo QTextControl2>?8@0=5 &04@5A0 2@J7:0B0Copy &Link Location QTextControl&7@O720=5Cu&t QTextControl7B@820=5Delete QTextControl71>@ =0 2A8G:8 Select All QTextControlB20@O=5Open QToolButton0B8A:0=5Press QToolButton>"078 ?;0BD>@<0 =5 ?>44J@60 IPv6#This platform does not support IPv6 QUdpSocketJ7AB0=>2O20=5Redo QUndoGroup B<O=0Undo QUndoGroup<?@07=>> QUndoModelJ7AB0=>2O20=5Redo QUndoStack B<O=0Undo QUndoStack:(URL) =5 <>65 40 1J45 ?>:070=Cannot show URL QWebFrame@MimeType =5 <>65 40 1J45 ?>:070=Cannot show mimetype QWebFrame($09;JB =5 AJI5AB2C20File does not exist QWebFrame0@5640=5B> =0 @0<:0B0 5 ?@5:JA=0B> ?>@048 ?@><O=0 =0 ?>;8B8:0B0&Frame load interruped by policy change QWebFrame(0O2:0B0 5 1;>:8@0=0Request blocked QWebFrame&0O2:0B0 5 >B<5=5=0Request cancelled QWebFrame$%1 (%2x%3 ?8:A5;0)%1 (%2x%3 pixels)QWebPage%n D09;%n D09;>25 %n file(s)QWebPage$>102O=5 2 @5G=8:0Add To DictionaryQWebPage >H0 HTTP 70O2:0Bad HTTP requestQWebPage>;CG5@BoldQWebPage>;5= @J1BottomQWebPage\0 A5 ?@>25@O20 8 3@0<0B8:0 7054=> A ?@02>?8A0Check Grammar With SpellingQWebPage*@>25@:0 =0 ?@02>?8A0Check SpellingQWebPage@@>25@:0 =0 ?@02>?8A0 ?@8 ?8A0=5Check Spelling While TypingQWebPage 718@0=5 =0 D09; Choose FileQWebPageB7G8AB20=5 =0 ?>A;54=8B5 BJ@A5=8OClear recent searchesQWebPage>?8@0=5CopyQWebPage2>?8@0=5 =0 87>1@065=85B> Copy ImageQWebPage(>?8@0=5 ?@5?@0B:0B0 Copy LinkQWebPage7@O720=5CutQWebPage>4@0718@0I A5DefaultQWebPage67B@820=5 4> :@0O =0 4C<0B0Delete to the end of the wordQWebPage>7B@820=5 4> =0G0;>B> =0 4C<0B0Delete to the start of the wordQWebPage >A>:0 DirectionQWebPage(@8DB>25FontsQWebPage 0704Go BackQWebPage 0?@54 Go ForwardQWebPageR0 =5 A5 ?>:0720B ?@02>?8A0 8 3@0<0B8:0B0Hide Spelling and GrammarQWebPage3=>@8@0=5IgnoreQWebPage3=>@8@0=5 Ignore Grammar context menu itemIgnoreQWebPage&<J:20=5 =0 =>2 @54Insert a new lineQWebPage*<J:20=5 =0 =>2 0170FInsert a new paragraphQWebPage7A;5420=5InspectQWebPage C@A82ItalicQWebPage*JavaScript Alert - %1JavaScript Alert - %1QWebPage.JavaScript Confirm - %1JavaScript Confirm - %1QWebPage,JavaScript Prompt - %1JavaScript Prompt - %1QWebPageLTRLTRQWebPageO2 @J1 Left edgeQWebPage$>102O=5 2 @5G=8:0Look Up In DictionaryQWebPageN@5<5AB20=5 =0 :C@A>@0 4> :@0O =0 1;>:0'Move the cursor to the end of the blockQWebPageV@5<5AB20=5 =0 :C@A>@0 4> :@0O =0 4>:C<5=B0*Move the cursor to the end of the documentQWebPageL@5<5AB20=5 =0 :C@A>@0 4> :@0O =0 @540&Move the cursor to the end of the lineQWebPageT@5<5AB20=5 =0 :C@A>@0 4> A;5420I8O A8<2>;%Move the cursor to the next characterQWebPageN@5<5AB20=5 =0 :C@A>@0 4> A;5420I8O @54 Move the cursor to the next lineQWebPageR@5<5AB20=5 =0 :C@A>@0 4> A;5420I0B0 4C<0 Move the cursor to the next wordQWebPageV@5<5AB20=5 =0 :C@A>@0 4> ?@54E>4=8O A8<2>;)Move the cursor to the previous characterQWebPageP@5<5AB20=5 =0 :C@A>@0 4> ?@54E>4=8O @54$Move the cursor to the previous lineQWebPageT@5<5AB20=5 =0 :C@A>@0 4> ?@54E>4=0B0 4C<0$Move the cursor to the previous wordQWebPageV@5<5AB20=5 =0 :C@A>@0 4> =0G0;>B> =0 1;>:0)Move the cursor to the start of the blockQWebPage^@5<5AB20=5 =0 :C@A>@0 4> =0G0;>B> =0 4>:C<5=B0,Move the cursor to the start of the documentQWebPageT@5<5AB20=5 =0 :C@A>@0 4> =0G0;>B> =0 @540(Move the cursor to the start of the lineQWebPage45 A0 =0<5@5=8 ?@54;>65=8ONo Guesses FoundQWebPage 5 5 871@0= D09;No file selectedQWebPage,O<0 ?>A;54=8 BJ@A5=8ONo recent searchesQWebPage&B20@O=5 =0 @0<:0B0 Open FrameQWebPage2B20@O=5 =0 87>1@065=85B> Open ImageQWebPage.B20@O=5 =0 ?@5?@0B:0B0 Open LinkQWebPage.B20@O=5 2 =>2 ?@>7>@5FOpen in New WindowQWebPageG5@B0=85OutlineQWebPage!B@0=8F0 =04>;C Page downQWebPage!B@0=8F0 =0;O2> Page leftQWebPage !B@0=8F0 =04OA=> Page rightQWebPage!B@0=8F0 =03>@5Page upQWebPage>AB02O=5PasteQWebPageRTLRTLQWebPage">A;54=8 BJ@A5=8ORecent searchesQWebPage@570@5640=5ReloadQWebPageC;8@0=5ResetQWebPage5A5= @J1 Right edgeQWebPage,0?8A =0 87>1@065=85B> Save ImageQWebPage.0?8A =0 ?@5?@0B:0B0... Save Link...QWebPage<@5428620=5 =0 ?;J730G0 =04>;C Scroll downQWebPage<@5428620=5 =0 ?;J730G0 4> BC: Scroll hereQWebPage<@5428620=5 =0 ?;J730G0 2 ;O2> Scroll leftQWebPage>@5428620=5 =0 ?;J730G0 2 4OA=> Scroll rightQWebPage<@5428620=5 =0 ?;J730G0 =03>@5 Scroll upQWebPage$"J@A5=5 2 =B5@=5BSearch The WebQWebPage71>@ =0 2A8G:8 Select allQWebPage2718@0=5 4> :@0O =0 1;>:0Select to the end of the blockQWebPage:718@0=5 4> :@0O =0 4>:C<5=B0!Select to the end of the documentQWebPage0718@0=5 4> :@0O =0 @540Select to the end of the lineQWebPage8718@0=5 4> A;5420I8O A8<2>;Select to the next characterQWebPage2718@0=5 4> A;5420I8O @54Select to the next lineQWebPage6718@0=5 4> A;5420I0B0 4C<0Select to the next wordQWebPage:718@0=5 4> ?@54E>4=8O A8<2>; Select to the previous characterQWebPage4718@0=5 4> ?@54E>4=8O @54Select to the previous lineQWebPage8718@0=5 4> ?@54E>4=0B0 4C<0Select to the previous wordQWebPage:718@0=5 4> =0G0;>B> =0 1;>:0 Select to the start of the blockQWebPageB718@0=5 4> =0G0;>B> =0 4>:C<5=B0#Select to the start of the documentQWebPage8718@0=5 4> =0G0;>B> =0 @540Select to the start of the lineQWebPageL0 A5 ?>:0720B ?@02>?8A0 8 3@0<0B8:0B0Show Spelling and GrammarQWebPage@02>?8ASpellingQWebPage!?8@0=5StopQWebPage@54020=5SubmitQWebPage@54020=5QSubmit (input element) alt text for elements with no alt, title, or valueSubmitQWebPage >A>:0 =0 B5:AB0Text DirectionQWebPage">20 5 8=45:A, 2 :>9B> <>65 40 A5 BJ@A8. J2545B5 :;NG>20 4C<0 70 BJ@A5=5: 3This is a searchable index. Enter search keywords: QWebPage>@5= @J1TopQWebPage>4G5@B020=5 UnderlineQWebPage58725AB5=UnknownQWebPage$Web Inspector - %2Web Inspector - %2QWebPage0:2> 5 B>20? What's This?QWhatsThisAction**QWidget&@8:;NG20=5&FinishQWizard &><>I&HelpQWizard&0?@54&NextQWizard&0?@54 >&Next >QWizard< &0704< &BackQWizard B:07CancelQWizard>25@O20=5CommitQWizard@>4J;6020=5ContinueQWizard02J@H5=>DoneQWizard 0704Go BackQWizard ><>IHelpQWizard%1 - [%2] %1 - [%2] QWorkspace&0B20@O=5&Close QWorkspace&@5<5AB20=5&Move QWorkspace&J7AB0=>2O20=5&Restore QWorkspace& 07<5@&Size QWorkspaceB A&O=:0&Unshade QWorkspace0B20@O=5Close QWorkspace0&:A8<878@0=5 Ma&ximize QWorkspace8&=8<878@0=5 Mi&nimize QWorkspace8=8<878@0=5Minimize QWorkspace*J7AB0=>2O20=5 =04>;C Restore Down QWorkspace A&O=:0Sh&ade QWorkspace8=038 &>B3>@5 Stay on &Top QWorkspace>G0:20 A5 ?0@0<5BJ@ encoding 8;8 standalone ?@8 G5B5=5 =0 XML 45:;0@0F8OB0Yencoding declaration or standalone declaration expected while reading the XML declarationQXmlferror in the text declaration of an external entity3error in the text declaration of an external entityQXmlh2J7=8:=0 3@5H:0 ?@8 A8=B0:B8G=8O @071>@ =0 :><5=B0@0$error occurred while parsing commentQXmln2J7=8:=0 3@5H:0 ?@8 A8=B0:B8G=8O @071>@ =0 AJ4J@60=85B>$error occurred while parsing contentQXml2J7=8:=0 3@5H:0 ?@8 A8=B0:B8G=8O @071>@ =0 45D8=8F8OB0 70 B8? =0 4>:C<5=B05error occurred while parsing document type definitionQXmlf2J7=8:=0 3@5H:0 ?@8 A8=B0:B8G=8O @071>@ =0 5;5<5=B0$error occurred while parsing elementQXmll2J7=8:=0 3@5H:0 ?@8 A8=B0:B8G=8O @071>@ =0 ?@5?@0B:0B0&error occurred while parsing referenceQXml@3@5H:0 8=8F88@0=0 >B ?>B@518B5;Oerror triggered by consumerQXmlvexternal parsed general entity reference not allowed in DTD;external parsed general entity reference not allowed in DTDQXmlexternal parsed general entity reference not allowed in attribute valueGexternal parsed general entity reference not allowed in attribute valueQXmlhinternal general entity reference not allowed in DTD4internal general entity reference not allowed in DTDQXmlT=520;84=> 8<5 =0 8=AB@C:F8OB0 70 >1@01>B:0'invalid name for processing instructionQXml>G0:20 A5 1C:20letter is expectedQXml>?>25G5 >B 548= B8? =0 4>:C<5=B0&more than one document type definitionQXml,=5 1OE0 >B:@8B8 3@5H:8no error occurredQXml"@5:C@A82=8 >15:B8recursive entitiesQXmlz>G0:20 A5 ?0@0<5BJ@ standalone ?@8 G5B5=5 =0 XML 45:;0@0F8OB0Astandalone declaration expected while reading the XML declarationQXml4=5AJ>B25BAB285 =0 B03>25B5 tag mismatchQXml =5>G0:20= A8<2>;unexpected characterQXml.=5>G0:20= :@09 =0 D09;0unexpected end of fileQXmlTunparsed entity reference in wrong context*unparsed entity reference in wrong contextQXmlt>G0:20 A5 ?0@0<5BJ@ version ?@8 G5B5=5 =0 XML 45:;0@0F8OB02version expected while reading the XML declarationQXml\=5?@028;=0 AB>9=>AB =0 standalone 45:;0@0F8OB0&wrong value for standalone declarationQXml03;CH5=Muted VolumeSlider$!8;0 =0 72C:0: %1% Volume: %1% VolumeSliderqutim-0.2.0/languages/bg_BG/binaries/jabber.qm0000644000175000017500000020630511272653352022616 0ustar euroelessareuroelessare(R+v.+De0ђQ21)ti53j7HHN&'Hw9IHw9JHw9sH I>2Ih'I'KJ V J+MJ+dJ6;J6N-J6QJ6dJ6>J6J6vJ)KdLbLʘN_L0M SM Ny-NNcOJ1OjzOjzvOa@S)27Te2TTTxTMVEVEpWizyW4=Wz"Y'bnYbWYf  Z WZ[8i^%\cn@cnAi\Zgi\Zyinmvx xy.?^5f^K1*n_I>ieVx:;613ŖPb$S$lUCIWuA ]C{(J. )C ? :‹A7B~O UTX^O Y2>Z@]7AWm4<sC |ejv-@T-0D Or)lS*APuPA<F%MU_ErzvI NϱfNi6ek^J:iENkjW4(M6o~s67QG+TRIlXrzYVR^onrH%A|BX9pZdarp{~~$lt~q 7Ct)/}>Q"tdlst'GEygKagh,Ȍ-Bt7t#P2?(E?]2A36#8ez8CnXF%Uo&R_&kWFm<"n` 5|w02nU\,SDF&s5'CDdA$&R,8t =#=7CJŀe)@2>JWQJgŽ4fS'u8u.XY̧- += )ab 6 8aBD <# B5| I~ P{qf P^! _S f<-Q lC ySt7 \ $ U V Z đ4+ P7DL Ơ# _G 6 N S_ 7E *V 6A V  w md k $7z -y 4$ > >Г6 C F 7E L < PH eͲ` f '; f6 gDEr gK gU h] lJg lJz o x 7 '; Ԏd u< % 5Hm vՁ / : > > >M@ >ya % *W  0 St, tu 8 S,r 2 2 )t Th 9 F %}  8< 0'; 0Q )r ]! NM Y n+ 45 9 ]o _LI  ]> ]>K .| # #T ( -zz] 0EaE NI?! S? dN} eo) ntk ntW * 74 D '= ̩< { R9t > %)f Fb %% k3 ` BR Bų B oBɩ '+ { E3 E )  % (4 /44 > RV94 ]+ f gAn t 0 SnX S} Sb S? z )#5= HG x3 s (e -jf "L "o O3g qRL ށ ^ , ! '=A w 2+  &T ; M(o S*9 TRN dt 7G >ޢ PrX uw ~ V֕ <9P9FVy+nM+n=x#=}P ed"=i 9i9ult87HH4nm0n6MbO4@X@rGG 0!Y7YLnM$Rk>1bRk>XPjZw4f.TgiEVkok'm"^q<t"".t?TmCuʊ/Ԯv 8?Ò. </ i4#4>AB>25@O20=5 AuthorizeAcceptAuthDialog B:07DenyAcceptAuthDialogBFormAcceptAuthDialog@5=51@5320=5IgnoreAcceptAuthDialog<157 3@C?0>  AddContact>102O=5Add AddContact,>102O=5 =0 ?>B@518B5;Add User AddContact B:07Cancel AddContact,0<8@0=5 =0 ?>B@518B5; Find user AddContact @C?0:Group: AddContactJabber ID: Jabber ID: AddContact<5:Name: AddContact00O2:0 70 C4>AB>25@O20=5Send authorization request AddContact0=D>@<0F8O 70 ?>B@518B5;User information AddContact$ CA;0= 83<0BC;;8=Ruslan NigmatullinAuthorFormContactsn>:0720=5 =0 8:>=8 70 @07H8@5= AB0BCA =0 QIP :>=B0:B8B5 Show QIP xStatus in contact listContactsb>:0720=5 B5:AB0 =0 AB0BCA0 =0 :>=B0:B0 2 A?8AJ:0(Show contact status text in contact listContactsn>:0720=5 =0 8:>=8 70 @07H8@5=0B0 459=>AB =0 :>=B0:B8B5+Show extended activity icon in contact listContactsj>:0720=5 =0 8:>=8 70 >A=>2=0B0 459=>AB =0 :>=B0:B8B5'Show main activity icon in contact listContactsR>:0720=5 =0 >A=>2=8O @5AC@A 2 8725AB8OB0#Show main resource in notificationsContacts\>:0720=5 =0 8:>=8 70 =0AB@>5=85 =0 :>=B0:B8B5Show mood icon in contact listContactsR>:0720=5 =0 8:>=8 70 "57 C4>AB>25@5=85"Show not authorized iconContactsV>:0720=5 =0 8:>=8 70 <5;>48O =0 :>=B0:B8B5Show tune icon in contact listContacts B:07CancelDialog 80;>3DialogDialogOkDialogbgen JabberClient qutIMqutIM JabberClientBAJAB20:Away:JabberSettings5 157?>:>9B5:DND:JabberSettings. 5AC@A ?> ?>4@0718@0=5:Default resource:JabberSettingsF0 =5 A5 87?@0I0B 70O2:8 70 020B0@8Don't send request for avatarsJabberSettingsFormJabberSettings*!2>1>45= 70 @073>2>@:Free for chat:JabberSettings:>@B 70 ?@54020=5 =0 D09;>25:Listen port for filetransfer:JabberSettings54>ABJ?5=:NA:JabberSettings0 ;8=8O:Online:JabberSettings:@8>@8B5BJB 7028A8 >B AB0BCA0Priority depends on statusJabberSettingsN>2B>@=> A2J@720=5 ?@8 703C10 =0 2@J7:0Reconnect after disconnectJabberSettings42B><0B8G=> ?@8AJ548=O20=5 Auto joinJoinChatB<5B:8 BookmarksJoinChat0B20@O=5CloseJoinChat>=D5@5=F8O ConferenceJoinChat':<<:AAH:mm:ssJoinChat%@>=>;>38OHistoryJoinChat@8AJ548=O20=5JoinJoinChatD@8AJ548=O20=5 :J< 3@C?>2 @073>2>@Join groupchatJoinChat<5NameJoinChatA524>=8<NickJoinChat 0@>;0PasswordJoinChat(0O2:0 70 ?>A;54=8B5 Request last JoinChat40O2:0 70 AJ>1I5=8OB0 A;54Request messages sinceJoinChat40O2:0 70 AJ>1I5=8OB0 A;54#Request messages since the datetimeJoinChat 0?8ASaveJoinChat"J@A5=5SearchJoinChat0AB@>9:8SettingsJoinChatAJ>1I5=8OmessagesJoinChat B:07CancelJoinConferenceFormClass %>AB:Host:JoinConferenceFormClass@8AJ548=O20=5JoinJoinConferenceFormClass<@8AJ548=O20=5 :J< :>=D5@5=F8OJoinConferenceFormJoinConferenceFormClassA524>=8<: Nickname:JoinConferenceFormClass0@>;0: Password:JoinConferenceFormClass !B0O:Room:JoinConferenceFormClass(conference.jabber.ruconference.jabber.ruJoinConferenceFormClass qutimqutimJoinConferenceFormClasstst_qutim tst_qutimJoinConferenceFormClass:<font color='green'>%1</font>%1 LoginForm6<font color='red'>%1</font>%1 LoginForm 538AB@0@0=5 Registration LoginFormN5>1E>48<> 5 40 2J2545B5 20;84=0 ?0@>;0You must enter a password LoginFormH5>1E>48<> 5 40 2J2545B5 20;845= JIDYou must enter a valid jid LoginFormJID:JID:LoginFormClass5B09;8 70 2E>4 LoginFormLoginFormClass0@>;0: Password:LoginFormClass6 538AB@8@0=5 =0 =>20 A<5B:0Register new accountLoginFormClass6 538AB@8@0=5 =0 B078 A<5B:0Register this accountLoginFormClass EmailE-mailPersonalFormPersonal1I8GeneralPersonal><0H5=HomePersonal"5;5D>=PhonePersonal!;C6515=WorkPersonal JabberJabberPluginX>4C;0@878@0=0 ?>44@J6:0 =0 Jabber ?@>B>:>;0+Module-based realization of Jabber protocolPlugin@>4C;0@878@0=0 ?>44@J6:0 =0 XMPP Module-based realization of XMPPPluginXMPPXMPPPlugin%1%1QObject %1 4=8%1 daysQObject%1 G0A0%1 hoursQObject%1 <8=CB8 %1 minutesQObject%1 A5:C=40 %1 secondQObject%1 A5:C=48 %1 secondsQObject%1 3>48=8%1 yearsQObject 1 45=1 dayQObject 1 G0A1 hourQObject1 <8=CB01 minuteQObject1 3>48=01 yearQObject><font color='#808080'>%1</font>%1QObjectj<font size='2'><b>#4>AB>25@5=85:</b> <i>B</i></font>7Authorization: FromQObjectn<font size='2'><b>#4>AB>25@5=85:</b> <i>O<0</i></font>7Authorization: NoneQObjectj<font size='2'><b>#4>AB>25@5=85:</b> <i>0</i></font>5Authorization: ToQObject`<font size='2'><b>5@>OB5= :;85=B:</b> %1</font>0Possible client: %1QObjectb<font size='2'><b>"5:AB =0 AB0BCA0:</b> %1</font>,Status text: %1QObject<font size='2'><b>>B@518B5;OB 87;575 872J= ;8=8O 2:</b> <i>%1</i> (AJA AJ>1I5=85: <i>%2</i>)</font>VUser went offline at: %1 (with message: %2)QObjectl<font size='2'><b>72J= ;8=8O >B:</b> <i>%1</i></font><User went offline at: %1QObjectF<font size='2'><i>%1:</i> %2</font>#%1: %2QObject><font size='2'><i>%1</i></font>%1QObjectL<font size='2'><i>!;CH0:</i> %1</font>*Listening: %1QObject59=>ABActivityQObject7?;0H5=AfraidQObject$A8G:8 D09;>25 (*) All files (*)QObject !<0O=AmazedQObject;N1G82AmorousQObject 5A5=AngryQObject 074@07=5=AnnoyedQObject03@865=AnxiousQObject C45=ArousedQObject0A@0<5=AshamedQObjectB53G5=BoredQObject!<5;BraveQObject!?>:>5=CalmQObject@54?07;82CautiousQObject0<@J7=0;ColdQObject #25@5= ConfidentQObject1J@:0=ConfusedQObject0<8A;5= ContemplativeQObject>2>;5= ContentedQObject 074@07=8B5;5=CrankyQObjectC4CrazyQObject@04825=CreativeQObjectN1>?8B5=CuriousQObject157AJ@G5=DejectedQObject>4B8A=0B DepressedQObject 07>G0@>20= DisappointedQObjectB2@0B5= DisgustedQObject>@075=DismayedQObject157C<O; DistractedQObject"><0:8=A:0 @01>B0 Doing choresQObject 85=5DrinkingQObject /45=5EatingQObject0B@C4=5= EmbarrassedQObject028AB;82EnviousQObjectJ71C45=ExcitedQObject#?@06=5=8O ExercisingQObject$;8@BC20I FlirtatiousQObject157AJ@G5= FrustratedQObject@87=0B5;5=GratefulQObject3>@G5=GrievingQObject>44@J6:0GroomingQObject0FC?5=GrumpyQObject8=>25=GuiltyQObject)0AB;82HappyQObject0 A@5I0Having appointmentQObject04O20I A5HopefulQObject!5:A0?8;5=HotQObject!:@><5=HumbledQObject #=875= HumiliatedQObject ;045=HungryQObject0@0=5=HurtQObject?5G0B;5= ImpressedQObject;03>3>255IIn aweQObject ;N15=In loveQObject50:B825=InactiveQObjectJ7<CB5= IndignantQObject08=B5@5A>20= InterestedQObject?8O=5= IntoxicatedQObject5?>1548< InvincibleQObject  52=82JealousQObjectJ@8AJ548=O20=5 :J< 3@C?>2 @073>2>@ 70Join groupchat onQObject!0<>B5=LonelyQObject73C15=LostQObjectJA<5B;8OLuckyQObject >4J;MeanQObject0AB@>5=85MoodQObject0 =0AB@>5=8OMoodyQObject 5@25=NervousQObject5CB@0;5=NeutralQObject0A53=0BOffendedQObject B20@O=5 =0 D09; Open FileQObject 5AB>:OutragedQObject 3@82PlayfulQObject>@4ProudQObjectB?CA=0BRelaxedQObject>G82:0RelaxingQObject1;5:G5=RelievedQObject 07:0920I A5 RemorsefulQObject5A?>:>5=RestlessQObject "J65=SadQObject!0@:0AB8G5= SarcasticQObject04>2>;5= SatisfiedQObject!5@8>75=SeriousQObject(>:8@0=ShockedQObject!@0<56;82ShyQObject >;5=SickQObject !J=;82SleepyQObject!?>=B0=5= SpontaneousQObject>4 =0?@565=85StressedQObject !8;5=StrongQObject #GC45= SurprisedQObject 073>2>@TalkingQObject;03>40@5=ThankfulQObject 045=ThirstyQObject #<>@5=TiredQObjectJBC20=5 TravelingQObject5;>48OTuneQObject5>?@545;5= UndefinedQObject58725AB5=UnknownQObject!;01WeakQObject  01>B0WorkingQObject 07B@52>65=WorriedQObject2 A?0 F5=BJ@0 at the spaQObject<85I 7J18B5 A8brushing teethQObject*?070@C20I 2 10:0;8OB0buying groceriesQObject G8AB5IcleaningQObject?8H5I :>4codingQObject"@54>25= B@0=A?>@B commutingQObject 3>B25IcookingQObject:0@0I :>;5;>cyclingQObjectB0=FC20IdancingQObject2 >B?CA:day offQObject?@025I @5<>=Bdoing maintenanceQObject<85I G8=88doing the dishesQObject ?5@OIdoing the laundryQObjectH>D8@0IdrivingQObject=0 @81>;>2fishingQObject 83@05IgamingQObject&@01>B5I 2 3@048=0B0 gardeningQObject=0 D@87L>@getting a haircutQObject87;870I going outQObject?@>AB8@0I hanging outQObject?85I 18@0 having a beerQObjectE0?20I =0 1J@7>having a snackQObject70:CA20Ihaving breakfastQObject?85I :0D5 having coffeeQObject25G5@OI having dinnerQObject>1O420I having lunchQObject?85I G09 having teaQObject :@85I A5hidingQObjectE>45I ?5H0hikingQObject 2 :>;0in a carQObject=0 A@5I0 in a meetingQObject"2 8AB8=A:8O 682>B in real lifeQObject=0 46>38=3joggingQObject(2 3@04A:8O B@0=A?>@Bon a busQObject2 A0<>;5B0 on a planeQObject2J2 2;0:0 on a trainQObject=0 5:A:C@78O on a tripQObject=0 B5;5D>=0 on the phoneQObject=0 ?>G82:0 on vacationQObject=0 2845>D>=0on video phoneQObject=0 :C?>=partyingQObjectA?>@BC20Iplaying sportsQObject<>;5I A5prayingQObject G5BOIreadingQObject@5?5B8@0I rehearsingQObject 1O30IrunningQObject$87?J;=O20I ?>@JG:8running an errandQObject(=0 ?;0=8@0=0 ?>G82:0scheduled holidayQObject1@JA=5I A5shavingQObject?070@C20IshoppingQObject:0@0I A:8skiingQObjectA?OIsleepingQObject ?CH5IsmokingQObject"AJ74020I :>=B0:B8 socializingQObjectCG0IstudyingQObject(?@025I A;J=G528 10=8 sunbathingQObject ?;C20IswimmingQObject275<0I 10=O taking a bathQObject275<0I 4CHtaking a showerQObject <8A;5IthinkingQObject 2J@2OIwalkingQObject @07E>640I :CG5B>walking the dogQObject3;540I " watching TVQObject3;540I D8;<watching a movieQObjectB@5=8@0I working outQObject ?8H5IwritingQObject@8;030=5Apply RoomConfig B:07Cancel RoomConfigForm RoomConfigOk RoomConfig4<8=8AB@0B>@8AdministratorsRoomParticipant@8;030=5ApplyRoomParticipant!JA 701@0=0BannedRoomParticipant B:07CancelRoomParticipantFormRoomParticipantJIDJIDRoomParticipant';5=>25MembersRoomParticipantOkRoomParticipant!>1AB25=8F8OwnersRoomParticipant@8G8=0ReasonRoomParticipant42B><0B8G=> ?@8AJ548=O20=5 Auto join SaveWidget"<5 =0 >B<5B:0B0:Bookmark name: SaveWidget B:07Cancel SaveWidget>=D5@5=F8O: Conferene: SaveWidgetA524>=8<:Nick: SaveWidget0@>;0: Password: SaveWidget 0?8ASave SaveWidget&0?0720=5 2 >B<5B:8Save to bookmarks SaveWidget7G8AB20=5ClearSearch0B20@O=5CloseSearch75<0=5FetchSearchFormSearch"J@A5=5SearchSearch!J@2J@:Server:SearchdJ2545B5 AJ@2J@ 70 275<0=5 =0 ?>;5B0B0 70 BJ@A5=5.$Type server and fetch search fields.Search,"J@A5=5 =0 :>=D5@5=F8OSearch conferenceSearchConference""J@A5=5 =0 CA;C38Search service SearchService*"J@A5=5 =0 B@0=A?>@B8Search transportSearchTransport>>102O=5 :J< A?8AJ:0 A ?@>:A8B0Add to proxy listServiceBrowser(>102O=5 :J< A?8AJ:0 Add to rosterServiceBrowser0B20@O=5CloseServiceBrowser*7?J;=5=85 =0 :><0=40Execute commandServiceBrowserJIDJIDServiceBrowser<@8AJ548=O20=5 :J< :>=D5@5=F8OJoin conferenceServiceBrowser<5NameServiceBrowser 538AB@0F8ORegisterServiceBrowser"J@A5=5SearchServiceBrowser!J@2J@:Server:ServiceBrowser$>:0720=5 =0 VCard Show VCardServiceBrowser* 073;5640=5 =0 CA;C38jServiceBrowserServiceBrowser 2B>@AuthorTaskL<img src='%1' width='%2' height='%3'/>& VCardAvatarz%1&nbsp;(<font color='#808080'>A3@5H5= D>@<0B =0 40B0</font>)8%1 (wrong date format) VCardBirthday  >45=: Birthday: VCardBirthday @04:City: VCardRecord $8@<0:Company: VCardRecordJ@6020:Country: VCardRecord B45;: Department: VCardRecord ..:PO Box: VCardRecord>I5=A:8 :>4: Post code: VCardRecord1;0AB:Region: VCardRecord>78F8O:Role: VCardRecord!B@0=8F0:Site: VCardRecord #;8F0:Street: VCardRecord20=85:Title: VCardRecord<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

 XmlConsole <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html>

 XmlConsole7G8AB20=5Clear XmlConsole0B20@O=5Close XmlConsoleBForm XmlConsole&J25640=5 =0 XML... XML Input... XmlConsole&0B20@O=5&Close XmlPrompt&7?@0I0=5&Send XmlPromptXML E>4 XML Input XmlPrompt B:07CancelactivityDialogClass718@0=5ChooseactivityDialogClass 71>@ =0 459=>ABChoose your activityactivityDialogClass@><O=0ChangechangeResourceClass6@><O=0 =0 @5AC@A/?@8>@8B5BChange resource/prioritychangeResourceClass@8>@8B5B: Priority:changeResourceClass 5AC@A: Resource:changeResourceClass@JI0=5ReturnchangeResourceClass B:07CancelcustomStatusDialogClass718@0=5ChoosecustomStatusDialogClass&71>@ =0 =0AB@>5=85Choose your moodcustomStatusDialogClass.>102O=5 =0 =>2 :>=B0:BAdd new contactjAccount6>102O=5 =0 =>2 :>=B0:B :J<Add new contact onjAccount>?J;=8B5;=8 AdditionaljAccountBAJAB20<AwayjAccount>=D5@5=F88 ConferencesjAccount5 157?>:>9B5DNDjAccount.0<8@0=5 =0 ?>B@518B5;8 Find usersjAccount(!2>1>45= 70 @073>2>@ Free for chatjAccount"52848< 70 2A8G:8Invisible for alljAccountB52848< A0<> 70 A?8AJ: "52848<8"!Invisible only for invisible listjAccountD@8AJ548=O20=5 :J< 3@C?>2 @073>2>@Join groupchatjAccount54>ABJ?5=NAjAccount72J= ;8=8OOfflinejAccount0 ;8=8OOnlinejAccount.B20@O=5 =0 XML :>=7>;0Open XML consolejAccount8G5= AB0BCAPrivacy statusjAccount* 073;5640=5 =0 CA;C38Service browserjAccount #A;C38ServicesjAccount&04020=5 =0 459=>AB Set activityjAccount,04020=5 =0 =0AB@>5=85Set moodjAccount<@53;54/@><O=0 =0 <>OB0 vCardView/change personal vCardjAccount848< 70 2A8G:8Visible for alljAccount:848< A0<> 70 A?8AJ: "848<8"Visible only for visible listjAccountl5>1E>48<> 5 40 2J2545B5 20;84=0 ?0@>;0 2 =0AB@>9:8B5.&You must enter a password in settings.jAccount5>1E>48<> 5 40 87?>;720B5 20;845= JID. >;O, AJ7409B5 =0=>2> Jabber A<5B:0B0 A8.?You must use a valid jid. Please, recreate your jabber account.jAccount" 540:B8@0=5 =0 %1 Editing %1jAccountSettings=8<0=85WarningjAccountSettings>5>1E>48<> 5 40 2J2545B5 ?0@>;0You must enter a passwordjAccountSettings !<5B:0AccountjAccountSettingsClass 8=038AlwaysjAccountSettingsClass@8;030=5ApplyjAccountSettingsClass#4>AB>25@O20=5AuthenticationjAccountSettingsClassH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect at startjAccountSettingsClass B:07CanceljAccountSettingsClassP><?@5A8@0=5 =0 B@0D8:0 (0:> 5 2J7<>6=>)Compress traffic (if possible)jAccountSettingsClass @J7:0 ConnectionjAccountSettingsClass> ?>4@0718@0=5DefaultjAccountSettingsClass,(8D@>20=5 =0 2@J7:0B0:Encrypt connection:jAccountSettingsClassHTTPHTTPjAccountSettingsClass %>AB:Host:jAccountSettingsClassJID:JID:jAccountSettingsClassR0?0720=5 =0 ?@54E>4=8O AB0BCA =0 A5A8OB0Keep previous session statusjAccountSettingsClass8>:0;=> E@0=8;8I5 70 >B<5B:8Local bookmark storagejAccountSettingsClassT JG=> 704020=5 =0 E>AB0 8 ?>@B0 =0 AJ@2J@0!Manually set server host and portjAccountSettingsClass 8:>30NeverjAccountSettingsClass57NonejAccountSettingsClassOKjAccountSettingsClass0@>;0: Password:jAccountSettingsClass >@B:Port:jAccountSettingsClass@8>@8B5B: Priority:jAccountSettingsClass @>:A8ProxyjAccountSettingsClass"8? ?@>:A8: Proxy type:jAccountSettingsClass 5AC@A: Resource:jAccountSettingsClassSOCKS 5SOCKS 5jAccountSettingsClassR04020=5 ?@8>@8B5BJB 40 7028A8 >B AB0BCA0$Set priority depending of the statusjAccountSettingsClassz"078 >?F8O A5 87?>;720 70 AJ@2J@8, :>8B> =5 ?>44J@60B >B<5B:84Use this option for servers doesn't support bookmarkjAccountSettingsClass$>B@518B5;A:> 8<5: User name:jAccountSettingsClass >30B> 5 =0;8G=>When availablejAccountSettingsClass*0AB@>9:8 =0 A<5B:0B0jAccountSettingsjAccountSettingsClass<157 3@C?0>  jAddContact #A;C38Services jAddContact B:07CanceljAdhoc >B>2>CompletejAdhoc@8:;NG20=5FinishjAdhoc!;5420INextjAdhocOkjAdhoc@54E>45=PreviousjAdhoc"%1 ?>;CG8 701@0=0%1 has been banned jConference%1 15 @8B=0B%1 has been kicked jConference"%1 =0?CA=0 AB0OB0%1 has left the room jConference$%1 704045 B5<0: %2%1 has set the subject to: %2 jConference8%1 A530 A5 ?>4287020 :0B> %2%1 is now known as %2 jConference,%1 (%2) 2;575 2 AB0OB0%2 (%1) has joined the room jConference"%2 2;575 2 AB0OB0%2 has joined the room jConference2%2 2;575 2 AB0OB0 :0B> %1%2 has joined the room as %1 jConference%2 A530 5 %1 %2 now is %1 jConference<%3 (%2) 2;575 2 AB0OB0 :0B> %1!%3 (%2) has joined the room as %1 jConference"%3 (%2) A530 5 %1%3 (%2) now is %1 jConference<%3 2;575 2 AB0OB0 :0B> %1 8 %2#%3 has joined the room as %1 and %2 jConference"%3 A530 5 %1 8 %2%3 now is %1 and %2 jConferenceF%4 (%3) 2;575 2 AB0OB0 :0B> %1 8 %2(%4 (%3) has joined the room as %1 and %2 jConference,%4 (%3) A530 5 %1 8 %2%4 (%3) now is %1 and %2 jConferenceN<font size='2'><b>@J7:8:</b> %1</font>,Affiliation: %1 jConferenceH<font size='2'><b>JID:</b> %1</font>$JID: %1 jConferenceJ<font size='2'><b> >;O:</b> %1</font>%Role: %1 jConference:>102O=5 2 A?8AJ:0 A :>=B0:B8Add to contact list jConference01@0=0Ban jConference*!J>1I5=85 ?@8 701@0=0 Ban message jConference>=D;8:B: 5;0=8OB ?A524>=8< =0 AB0O 8;8 25G5 A5 87?>;720 8;8 5 @538AB@8@0= >B 4@C3 ?>B@518B5;.HConflict: Desired room nickname is in use or registered by another user. jConference8>?8@0=5 =0 JID 2 :;8?-1>@40Copy JID to clipboard jConferenceN01@0=0: B:070= 4>ABJ? =0 ?>B@518B5;O.)Forbidden: Access denied, user is banned. jConference2>:070 =0 3@C?>2 @073>2>@Invite to groupchat jConference\O<0 =0<5@5=8 @57C;B0B8: !B0OB0 =5 AJI5AB2C20.(Item not found: The room does not exist. jConferenceJ@8AJ548=O20=5 :J< 3@C?>2 @073>2>@ 70Join groupchat on jConference7@8B20=5Kick jConference.!J>1I5=85 ?@8 87@8B20=5 Kick message jConference>45@0B>@ Moderator jConferenceb5?@85<;82>: A524>=8<8B5 =0 AB08B5 A0 70:;NG5=8.+Not acceptable: Room nicks are locked down. jConference\5?>72>;5=>: !J74020=5B> =0 AB0O 5 >3@0=8G5=>.)Not allowed: Room creation is restricted. jConferenceP8?A20 C4>AB>25@5=85: 78A:20 A5 ?0@>;0."Not authorized: Password required. jConference#G0AB=8: Participant jConference|78A:20 A5 @538AB@0F8O: >B@518B5;OB =5 5 2 A?8AJ:0 A G;5=>25.6Registration required: User is not on the member list. jConferenceN>2B>@=> ?@8AJ548=O20=5 :J< :>=D5@5=F8ORejoin to conference jConference*0AB@>920=5 =0 AB0OB0Room configuration jConference.0AB@>920=5 =0 AB0O: %1Room configuration: %1 jConference$#G0AB=8F8 2 AB0OB0Room participants jConference,#G0AB=8F8 2 AB0OB0: %1Room participants: %1 jConference&0?0720=5 2 >B<5B:8Save to bookmarks jConference#A;C30B0 =54>ABJ?=0: >AB83=0B 5 <0:A8<0;=8OB 1@>9 ?>B@518B5;8 .>Service unavailable: Maximum number of users has been reached. jConference"5<0B0 5: %2The subject is: %2 jConferenceF58725AB=0 3@5H:0: 8?A20 >?8A0=85.Unknown error: No description. jConference>B@518B5;OB %1 28 :0=8 2 :>=D5@5=F8OB0 %2 ?> A;54=0B0 ?@8G8=0 "%3" @85<0B5 ;8 ?>:0=0B0?GUser %1 invite you to conference %2 with reason "%3" Accept invitation? jConference>A5B8B5;Visitor jConference05H5 28 =0;>65=0 701@0=0You have been banned jConference65H5 28 =0;>65=0 701@0=0 70You have been banned from jConference OEB5 87@8B0=(0)You have been kicked jConference&OEB5 87@8B0=(0) >BYou have been kicked from jConference04<8=8AB@0B>@ administrator jConferenceAJA 701@0=0banned jConference3>ABguest jConferenceG;5=member jConference<>45@0B>@ moderator jConferenceA>1AB25=8:owner jConferenceCG0AB=8: participant jConference?>A5B8B5;visitor jConference(?> A;54=0B0 ?@8G8=0: with reason: jConference157 ?@8G8=0without reason jConference@85<0=5AcceptjFileTransferRequestBE2J@;O=5DeclinejFileTransferRequest<5 =0 D09;0: File name:jFileTransferRequest 07<5@: File size:jFileTransferRequestFormjFileTransferRequestB:From:jFileTransferRequest0?8A =0 D09; Save FilejFileTransferRequest B:07CanceljFileTransferWidget0B20@O=5ClosejFileTransferWidget02J@H5=>...Done...jFileTransferWidget02J@H5=>:Done:jFileTransferWidget 07<5@: File size:jFileTransferWidget,@54020=5 =0 D09;0: %1File transfer: %1jFileTransferWidget<5 =0 D09;0: Filename:jFileTransferWidgetFormjFileTransferWidget>;CG020=5... Getting...jFileTransferWidget7<8=0;> 2@5<5: Last time:jFileTransferWidgetB20@O=5OpenjFileTransferWidgetAB020I> 2@5<5:Remained time:jFileTransferWidget7?@0I0=5... Sending...jFileTransferWidget!:>@>AB:Speed:jFileTransferWidget!B0BCA:Status:jFileTransferWidget7G0:20=5... Waiting...jFileTransferWidget >20 :>=D5@5=F8ONew conference jJoinChat=>2 @073>2>@new chat jJoinChat>=B0:B8ContactsjLayerJabber 1I8Jabber GeneraljLayer%2 <%1>%2 <%1> jProtocol\J7=8:=0 3@5H:0 2 ?>B>:0. >B>:JB 15 70B2>@5=.3A stream error occured. The stream has been closed. jProtocol>J7=8:=0 2E>4=>/87E>4=0 3@5H:0.An I/O error occured. jProtocolH@5H:0 2 A8=B0:B8G=8O @071>@ =0 XML.An XML parse error occurred. jProtocol45CA?5H=> C4>AB>25@O20=5. >B@518B5;A:8B5 8<5/?0@>;0 A0 3@5H=8 8;8 A<5B:0B0 =5 AJI5AB2C20. 7?>;7209B5 ClientBase::authError(), 70 40 >B:@85B5 ?@8G8=0B0.yAuthentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. jProtocol00O2:0 70 C4>AB>25@O20=5Authorization request jProtocolR#4>AB>25@5=85B> =0 :>=B0:B0 15 ?@5<0E=0B>$Contacts's authorization was removed jProtocol`5CA?5H=> C4>AB>25@O20=5 2 HTTP/SOCKS5 ?@>:A8B>.(HTTP/SOCKS5 proxy authentication failed. jProtocol4JID: %1<br/>57459AB20: %2JID: %1
Idle: %2 jProtocolJID: %1<br/>">20 5 =58725AB=0 StanzaError! >;O C254><5B5 @07@01>BG8F8B5.<br/>@5H:0: %2NJID: %1
It is unknown StanzaError! Please notify developers.
Error: %2 jProtocolJID: %1<br/>0O25=0B0 E0@0:B5@8AB8:0 =5 A5 ?>44J@60 >B >B25B=8O AJ@2J@.PJID: %1
The feature requested is not implemented by the recipient or server. jProtocolJID: %1<br/>0O2O20I8OB >15:B =5 ?@8B56020 878A:20=8B5 ?@020 70 87?J;=5=85 =0 459AB285B>.bJID: %1
The requesting entity does not possess the required permissions to perform the action. jProtocolV5CA?5H=> >?@545;O=5/704020=5 =0 :><?@5A8O.,Negotiating/initializing compression failed. jProtocol2@5?J;=5=0 ?0<5B. #E, E.Out of memory. Uhoh. jProtocolf5CA?5H=> CAB0=>2O20=5 8<5B> (=0 E>AB0) =0 AJ@2J@0.'Resolving the server's hostname failed. jProtocolB: %2 <%1>Sender: %2 <%1> jProtocolB: Senders:  jProtocol #A;C38Services jProtocol"5<0: %1 Subject: %1 jProtocolHTTP/SOCKS5 ?@>:A8B> 878A:20 <5E0=87J< =0 C4>AB>25@O20=5, :>9B> =5 A5 ?>44J@60.=The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. jProtocolXHTTP/SOCKS5 ?@>:A8B> 878A:20 C4>AB>25@O20=5..The HTTP/SOCKS5 proxy requires authentication. jProtocol5E0=87<8B5 =0 C4>AB>25@O20=5, :>8B> AJ@2J@0 ?@54;030 8;8 =5 A5 ?>44J@60B, 8;8 87>1I> =5 A5 ?@54;030B B0:820.hThe auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. jProtocol`@J7:0B0 15 >B:070=0 >B AJ@2J@0 (=0 =82> A>:5B).?The connection was refused by the server (on the socket level). jProtocolR5@A8OB0 =0 2E>4OI8O ?>B>: =5 A5 ?>44J@60.The incoming stream's version is not supported jProtocol!J@2J@JB =5 ?@54;030 ?>44@J6:0 =0 TLS, 2J?@5:8 G5 5 C:070=> 40 A5 878A:20 8;8 ;8?A20 ?>44@J6:0 =0 TLS ?@8 :><?8;0F8O.WThe server didn't offer TLS while it was set to be required or TLS was not compiled in. jProtocol!5@B8D8:0BJB =0 AJ@2J@0 =5 <>65 40 1J45 ?@>25@5= 8;8 "TLS handshake" >?5@0F8OB0 =5 5 ?@8:;NG8;0 CA?5H=>.bThe server's certificate could not be verified or the TLS handshake did not complete successfully. jProtocolB>B>:JB 15 70B2>@5= (>B AJ@2J@0).+The stream has been closed (by the server). jProtocol>B@518B5;OB (8;8 ?@>B>:>;JB >B ?>-28A>:> =82>) 70O28E0 ?@5:JA20=5 =0 2@J7:0B0.;The user (or higher-level protocol) requested a disconnect. jProtocol,8?A20 0:B82=0 2@J7:0.There is no active connection. jProtocolURL: %1URL: %1 jProtocolp57=09=0 3@5H:0. &O;> GC4> 5, G5 2J>1I5 O 28640B5... O_o3Unknown error. It is amazing that you see it... O_o jProtocol25?@>G5B5=8 AJ>1I5=8O: %1Unreaded messages: %1 jProtocol4045=> 28 15 C4>AB>25@5=85You were authorized jProtocol@#4>AB>25@5=85B> 28 15 ?@5<0E=0B>Your authorization was removed jProtocolbgen jProtocol0vCard 5 70?8A0=0 CA?5H=>vCard is succesfully saved jProtocolB<h3>=D>@<0F8O 70 459=>ABB0:</h3>

Activity info:

 jPubsubInfoH<h3>=D>@<0F8O 70 =0AB@>5=85B>:</h3>

Mood info:

 jPubsubInfoB<h3>=D>@<0F8O 70 <5;>48OB0:</h3>

Tune info:

 jPubsubInfo7?J;=8B5;: %1 Artist: %1 jPubsubInfo1I0: %1 General: %1 jPubsubInfoJ;68=0: %1 Length: %1 jPubsubInfo<5: %1Name: %1 jPubsubInfo 59B8=3: %1 Rating: %1 jPubsubInfo7B>G=8:: %1 Source: %1 jPubsubInfo>=:@5B=0: %1 Specific: %1 jPubsubInfo"5:AB: %1Text: %1 jPubsubInfo03;0285: %1 Title: %1 jPubsubInfo5A5=: %1 Track: %1 jPubsubInfo8Uri: <a href="%1">2@J7:0</a>Uri: link jPubsubInfo0B20@O=5ClosejPubsubInfoClass=D>@<0F8O Pubsub infojPubsubInfoClass:>102O=5 2 A?8AJ:0 A :>=B0:B8Add to contact listjRosterB>102O=5 2 A?8AJ: "@5=51@53=0B8"Add to ignore listjRoster8>102O=5 2 A?8AJ: "52848<8"Add to invisible listjRoster4>102O=5 2 A?8AJ: "848<8"Add to visible listjRoster<0O2O20=5 =0 C4>AB>25@O20=5 >BAsk authorization fromjRosterB0O2O20=5 =0 C4>AB>25@O20=5 >B %1Ask authorization from %1jRoster#4>AB>25@O20=5 AuthorizationjRosterR0 1J45 4045=> C4>AB>25@5=85 =0 :>=B0:B0?Authorize contact?jRoster B:07CanceljRosterR>=B0:BJB I5 1J45 87B@8B. !83C@=8 ;8 AB5?&Contact will be deleted. Are you sure?jRoster8>?8@0=5 =0 JID 2 :;8?-1>@40Copy JID to clipboardjRoster*7B@820=5 =0 :>=B0:B0Delete contactjRosterF7B@820=5 >B A?8AJ: "@5=51@53=0B8"Delete from ignore listjRoster<7B@820=5 >B A?8AJ: "52848<8"Delete from invisible listjRoster87B@820=5 >B A?8AJ: "848<8"Delete from visible listjRoster,7B@820=5 A :>=B0:B8B5Delete with contactsjRoster07B@820=5 157 :>=B0:B8B5Delete without contactsjRoster*7?J;=5=85 =0 :><0=40Execute commandjRoster,7?J;=5=85 =0 :><0=40:Execute command:jRoster2@>25@:0 =0 157459AB285B>Get idlejRoster4@>25@:0 157459AB285B> =0:Get idle from:jRoster @C?0:Group:jRoster,>:0=0 70 :>=D5@5=F8O:Invite to conference:jRoster;870=5Log InjRoster7;870=5Log OutjRoster"@5<5AB20=5 =0 %1Move %1jRoster&@5<5AB20=5 2 3@C?0 Move to groupjRoster<5:Name:jRoster=D>@<0F8O: PubSub info:jRoster@8G8=0:Reason:jRoster 538AB@0F8ORegisterjRoster@@5<0E20=5 =0 C4>AB>25@5=85B> >BRemove authorization fromjRosterF@5<0E20=5 =0 C4>AB>25@5=85B> >B %1Remove authorization from %1jRosterh0 A5 ?@5<0E=5 B@0=A?>@B0 8 ?@8;560I8B5 <C :>=B0:B8?"Remove transport and his contacts?jRoster0@58<5=C20=5 =0 :>=B0:B0Rename contactjRoster47?@0I0=5 C4>AB>25@5=85 =0Send authorization tojRoster"7?@0I0=5 =0 D09; Send filejRoster*7?@0I0=5 =0 D09; 4>: Send file to:jRoster47?@0I0=5 =0 AJ>1I5=85 4>:Send message to:jRoster #A;C38ServicesjRoster"@0=A?>@B8 TransportsjRoster2@5<0E20=5 =0 @538AB@0F8O UnregisterjRoster @5H:0ErrorjSearchJIDJIDjSearchJabber ID Jabber IDjSearchA524>=8<NicknamejSearch"J@A5=5SearchjSearch@<br/><b>%0@0:B5@8AB8:8:</b><br/>
Features:
jServiceBrowser<<br/><b>!0<>;8G=>AB8:</b><br/>
Identities:
jServiceBrowser:0B53>@8O: category: jServiceBrowserB8?:type: jServiceBrowser8B40;5G5=8OB AJ@2J@ 8;8 CA;C30 704045=8 :0B> G0AB >B (8;8) F5;8O JID =0 871@0=8O ?>;CG0B5; =5 <>30B 40 1J40B 4>ABJ?5=8 2 @0<:8B5 =0 @07C<5= ?5@8>4 >B 2@5<5.A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time.jServiceDiscoveryB40;5G5=8OB AJ@2J@ 8;8 CA;C30 704045=8 :0B> G0AB >B (8;8) F5;8O JID =0 871@0=8O ?>;CG0B5; =5 AJI5AB2C20B.hA remote server or service specified as part or all of the JID of the intended recipient does not exist.jServiceDiscovery5 <>65 40 1J45 4045= 4>ABJ?, 70I>B> 25G5 AJI5AB2C20 @5AC@A 8;8 A5A8O AJA AJI>B> 8<5 8;8 04@5A.fAccess cannot be granted because an existing resource or session exists with the same name or address.jServiceDiscovery|4@5A8@0=8OB JID 8;8 70O25=8OB 5;5<5=B =5 <>65 40 1J45 >B:@8B.4The addressed JID or item requested cannot be found.jServiceDiscovery0O25=0B0 E0@0:B5@8AB8:0 =5 A5 ?>44J@60 >B >B25B=8O AJ@2J@ 70B>20 =5 <>65 40 1J45 87?>;720=0.fThe feature requested is not implemented by the recipient or server and therefore cannot be processed.jServiceDiscoveryT71@0=8OB ?>;CG0B5; 5 2@5<5==> =54>ABJ?5=.2The intended recipient is temporarily unavailable.jServiceDiscovery0O25=8OB 5;5<5=B =5 A5 5 ?@><5=8; A;54 :0B> ?>A;54=> 5 18; 70O25=.?The item requested has not changed since it was last requested.jServiceDiscoveryjB25B=8OB AJ@2J@ ?>25G5 =5 5 4>ABJ?5= =0 B>78 04@5A. CThe recipient or server can no longer be contacted at this address.jServiceDiscovery>;CG0B5;OB 8;8 >B25B=8OB AJ@2J@ =5 ?>72>;O20 =8:>9 >15:B 40 872J@H8 B>20 459AB285.HThe recipient or server does not allow any entity to perform the action.jServiceDiscovery>;CG0B5;OB 8;8 >B25B=8OB AJ@2J@ ?@5=0A>G20 70O2:8B5 70 B078 8=D>@<0F8O :J< 4@C3 >15:B, >18:=>25=> 2@5<5==>.lThe recipient or server is redirecting requests for this information to another entity, usually temporarily.jServiceDiscovery0>;CG0B5;OB 8;8 >B25B=8OB AJ@2J@ @0718@0 70O2:0B0, => >B:0720 40 O 87?J;=8, BJ9 :0B> BO =5 >B3>20@O =0 878A:20=8OB0 =0 ?>;CG0B5;OB 8;8 >B25B=8OB AJ@2J@.The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server.jServiceDiscovery>;CG0B5;OB 8;8 >B25B=8OB AJ@2J@ @071@0 70O2:0B0, => =5 O >G0:20H5 2 B>78 <><5=B.UThe recipient or server understood the request but was not expecting it at this time.jServiceDiscovery0O2O20I8OB >15:B =5 ?@8B56020 878A:20=8B5 ?@020 70 87?J;=5=85 =0 459AB285B>.VThe requesting entity does not possess the required permissions to perform the action.jServiceDiscovery0O2O20I8OB >15:B =O<0 @07@5H5=85 40 4>ABJ?20 70O25=0B0 CA;C30, 70I>B> BO 878A:20 01>=0<5=B.kThe requesting entity is not authorized to access the requested service because a subscription is required.jServiceDiscovery0O2O20I8OB >15:B =O<0 @07@5H5=85 40 4>ABJ?20 70O25=0B0 CA;C30, 70I>B> BO 878A:20 ?;0I0=5.dThe requesting entity is not authorized to access the requested service because payment is required.jServiceDiscovery0O2O20I8OB >15:B =O<0 @07@5H5=85 40 4>ABJ?20 70O25=0B0 CA;C30, 70I>B> BO 878A:20 @538AB@0F8O.iThe requesting entity is not authorized to access the requested service because registration is required.jServiceDiscovery7?@0I0GJB ?@0B8 45D>@<8@0= XML, :>9B> =5 <>65 40 1J45 >1@01>B5=.FThe sender has sent XML that is malformed or that cannot be processed.jServiceDiscovery.7?@0I0GJB B@O120 40 ?@54>AB028 ?>4E>4OI8 ?J;=><>I8O, ?@548 40 1J45 @07@5H5=> 872J@H20=5B> =0 459AB285B>, 8;8 ?@54>AB025=8B5 ?J;=><>I8O A0 =5?>4E>4OI8.}The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials.jServiceDiscovery7?@0I0I8OB >15:B ?@54>AB028 8;8 AJ>1I8 XMPP 04@5A 8;8 0A?5:B >B =53>, :>8B> =5 A5 ?@84J@60B :J< A8=B0:A8A0 >?@545;5= 2 4@5A8@0I0B0 AE5<0. The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme.jServiceDiscovery!J@2J@JB =5 <>65 40 >1@01>B8 AB@>D0B0, ?>@048 =5?@028;=0 :>=D83C@0F8O 8;8 4@C30 =5>?@545;5=0 2JB@5H=0 AJ@2J@=0 3@5H:0.vThe server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error.jServiceDiscovery>;CG0B5;OB 8;8 >B25B=8OB AJ@2J@ 2 <><5=B0 =5 ?@54>AB02O 70O25=0B0 CA;C30.IThe server or recipient does not currently provide the requested service.jServiceDiscovery>;CG0B5;OB 8;8 >B25B=8OB AJ@2J@ =5 ?@8B56020 =5>1E>48<8B5 A8AB5<=8 @5AC@A8, 70 40 >1A;C68 70O2:0B0.TThe server or recipient lacks the system resources necessary to service the request.jServiceDiscovery!B@>D0B0 '>B' 04@5A, 704045=0 >B A2J@70=8O :;85=B 5 =520;84=0 70 ?>B>:0.VThe stanza 'from' address specified by a connected client is not valid for the stream.jServiceDiscovery>58725AB=0 (CA;>285 =0) 3@5H:0.The unknown error condition.jServiceDiscovery %1@%2%1@%2 jSlotSignal"52848< 70 2A8G:8Invisible for all jSlotSignalB52848< A0<> 70 A?8AJ: "52848<8"!Invisible only for invisible list jSlotSignal848< 70 2A8G:8Visible for all jSlotSignal:848< A0<> 70 A?8AJ: "848<8"Visible only for visible list jSlotSignal 4@5AAddress jTransport@04City jTransport0B0Date jTransport EmailE-Mail jTransport J@2>First jTransport$0<8;=>Last jTransport  07=8Misc jTransport<5Name jTransportA524>=8<Nick jTransport 0@>;0Password jTransport"5;5D>=Phone jTransport 538AB@8@0=5Register jTransport)0BState jTransport "5:ABText jTransportURLURL jTransport..Zip jTransport4>102O=5 =0 ?>I5=A:0 :CB8O Add PO boxjVCard,>102O=5 =0 @>645= 45= Add birthdayjVCard >102O=5 =0 3@04Add cityjVCard&>102O=5 =0 4J@6020 Add countryjVCard(>102O=5 =0 >?8A0=85Add descriptionjVCard4>102O=5 =0 ;8G=0 AB@0=8F0 Add homepagejVCard>102O=5 =0 8<5Add namejVCard*>102O=5 =0 ?A524>=8<Add nickjVCard<>102O=5 =0 8<5 =0 >@30=870F8OAdd organization namejVCard^>102O=5 =0 8<5 =0 ?>4@0745;5=85 =0 >@30=870F8OAdd organization unitjVCard0>102O=5 =0 ?>I5=A:8 :>4 Add postcodejVCard$>102O=5 =0 >1;0AB Add regionjVCard&>102O=5 =0 ?>78F8OAdd rolejVCard">102O=5 =0 C;8F0 Add streetjVCard(>102O=5 =0 703;0285 Add titlejVCard0B20@O=5ClosejVCardH"2J@45 3>;O< @07<5@ =0 87>1@065=85B>Image size is too bigjVCardX7>1@065=8O (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.bmp *.jpg *.jpeg *.png)jVCard B20@O=5 =0 D09; Open FilejVCard&@5H:0 ?@8 >B20@O=5 Open errorjVCard*0O2:0 70 ?>4@>1=>AB8Request detailsjVCard 0?8ASavejVCard!<O=0 =0 A=8<:0 Update photojVCard0=D>@<0F8O 70 ?>B@518B5;userInformationjVCard B:07CanceltopicConfigDialogClass@><O=0ChangetopicConfigDialogClass@><O=0 =0 B5<0 Change topictopicConfigDialogClassqutim-0.2.0/languages/bg_BG/binaries/kde-integration.qm0000644000175000017500000001275511261316050024446 0ustar euroelessareuroelessar2>@ Open chatKDENotificationLayer*@>25@:0 =0 ?@02>?8A0 Spell checkerKdeSpellerLayerB2B><0B8G=> @07?>7=020=5 =0 578:0Autodetect of languageKdeSpellerSettingsFormKdeSpellerSettings 71>@ =0 @5G=8::Select dictionary:KdeSpellerSettings2%1 8<0 @>645= 45= 4=5A!!!%1 has birthday today!!QObject%1 ?8H5 %1 is typingQObject2;>:8@0=> AJ>1I5=85 >B %1Blocked message from %1QObject2!>1AB25=> AJ>1I5=85 70 %1Custom message for %1QObject !J>1I5=85 >B %1:Message from %1:QObject#254><;5=8O NotificationsQObject2!8AB5<=> AJ>1I5=85 >B %1:System message from %1:QObject <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">@>AB0 4>102:0 70 qutIM</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">2B>@: </span>;5:A59 !84>@>2</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">0 2@J7:0: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html>

Simple qutIM plugin

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com

plugmanSettings0 4>102:0B0AboutplugmanSettingsFormplugmanSettings&=AB0;8@0=5 >B D09;Install from fileplugmanSettings.=AB0;8@0=5 >B =B5@=5BInstall from internetplugmanSettings(=AB0;8@0=8 4>102:8:Installed plugins:plugmanSettings0AB@>9:8SettingsplugmanSettingsqutim-0.2.0/languages/bg_BG/binaries/fmtune.qm0000644000175000017500000003264511266647544022704 0ustar euroelessareuroelessar h> h W h Z 00 .2 M7 F) \B \B  O 2 2 s1C Ž Ž Y n i8:5 iAM <0s/ oi3< <=>20> EditStations&>102O=5 =0 AB0=F8O Add station EditStations">102O=5 =0 ?>B>: Add stream EditStations$A8G:8 D09;>25 (*)All files (*.*) EditStations(7B@820=5 =0 AB0=F8ODelete station EditStations:0 1J45 ;8 87B@8B0 AB0=F8OB0?Delete station? EditStations$7B@820=5 =0 ?>B>: Delete stream EditStations20 1J45 ;8 87B@8B ?>B>:0?Delete stream? EditStations 04>;CDown EditStations, 540:B8@0=5 =0 AB0=F88 Edit stations EditStations:A?>@B8@0=5Export EditStations:A?>@B8@0=5... Export... EditStations$FMtune XML (*.ftx)FMtune XML (*.ftx) EditStations $>@<0BFormat EditStations$>@<0B:Format: EditStations 0=@:Genre: EditStations7>1@065=85:Image: EditStations<?>@B8@0=5Import EditStations<?>@B8@0=5... Import... EditStations 78:: Language: EditStations<5:Name: EditStations 0?8ASave EditStationsURL =0 ?>B>:0: Stream URL: EditStationsURLURL EditStationsURL:URL: EditStations 03>@5Up EditStations:20;0975@ Equalizer Equalizer2J@7> 4>102O=5 =0 AB0=F8OFast add stationFastAddStation<5:Name:FastAddStationURL =0 ?>B>:0: Stream URL:FastAddStation ?>B>:streamFastAddStationJ@7> =0<8@0=5: Fast find: ImportExport@8:;NG20=5Finish ImportExport'5AB>B0:Bitrate:Info1;>6:0:Cover:Info=D>@<0F8O InformationInfo  048>:Radio:Info7?J;=5=85:Song:Info >B>::Stream:Info @5<5:Time:InfoJ0@545=0 5 =5?@028;=0 25@A8O =0 BASS.(An incorrect version of BASS was loaded. QMessageBoxV#AB@>9BA2>B> =5 <>65 40 1J45 8=8F80;878@0=>Can't initialize device QMessageBox 0C70Pause Recording 0?8ARecord Recording0?8A20=5 Recording Recording!?8@0=5Stop Recording03;CH020=5MuteVolume!8;0 =0 72C:0VolumeVolume%1%%1% fmtunePlugin8>?8@0=5 =0 8<5B> =0 ?5A5=B0Copy song name fmtunePlugin, 540:B8@0=5 =0 AB0=F88 Edit stations fmtunePlugin:20;0975@ Equalizer fmtunePlugin2J@7> 4>102O=5 =0 AB0=F8OFast add station fmtunePlugin=D>@<0F8O Information fmtunePlugin03;CH020=5Mute fmtunePlugin$!?8@0=5 =0 @048>B> Radio off fmtunePlugin$CA:0=5 =0 @048>B>Radio on fmtunePlugin0?8A20=5 Recording fmtunePlugin!8;0 =0 72C:0Volume fmtunePlugin"<?> ?>4@0718@0=5> fmtuneSettings<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune 4>102:0</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html>

FMtune plugin

v%1

Author:

Lms

lms.cze7@gmail.com

(c) 2009

fmtuneSettingsClass0 4>102:0B0AboutfmtuneSettingsClassP:B828@0=5 =0 >1I8B5 :;028H=8 :><18=0F88"Activate global keyboard shortcutsfmtuneSettingsClass#AB@>9AB20DevicesfmtuneSettingsClass1I8GeneralfmtuneSettingsClass&7E>4=> CAB@>9AB2>:Output device:fmtuneSettingsClass>102:8PluginsfmtuneSettingsClass0AB@>9:8SettingsfmtuneSettingsClass>@5I8 :;028H8 ShortcutsfmtuneSettingsClass6!?8@0=5/CA:0=5 =0 @048>B>:Turn on/off radio:fmtuneSettingsClass$0<0;O=5 =0 72C:0: Volume down:fmtuneSettingsClass03;CH020=5: Volume mute:fmtuneSettingsClass$#A8;20=5 =0 72C:0: Volume up:fmtuneSettingsClassqutim-0.2.0/languages/bg_BG/binaries/gpgcrypt.qm0000644000175000017500000000203311240003554023204 0ustar euroelessareuroelessarz` I  E| sti(04020=5 =0 GPG :;NG Set GPG KeyGPGCryptForm GPGSettings0AB@>9:8Settings GPGSettings0H8OB :;NG: Your Key: GPGSettings &B:07&Cancel Passphrase&OK&OK PassphraseOpenPGP Passphrase Passphrase0 40 A5 87?o;720 OpenPGP 70I8B0 5 =>1E>48< 20H8O passphrase. >;O 2J2545B5 3> ?>-4>;C:VYour passphrase is needed to use OpenPGP security. Please enter your passphrase below: Passphrase,%1: OpenPGP Passphrase%1: OpenPGP Passphrase PassphraseDlg271>@ =0 :;NG =0 :>=B0:B0Select Contact KeysetKey71>@ =0 :;NG: Select Key:setKeyqutim-0.2.0/languages/bg_BG/binaries/weather.qm0000644000175000017500000002100611240003554023005 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">>102:0 70 2@5<5B> 2 qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">2B>@: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">8:8B0 5;>2</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html>

Weather qutIM plugin

v0.1.2 (Info)

Author:

Nikita Belov

null@deltaz.ru

(c) 2008-2009

weatherSettingsClass0 4>102:0B0AboutweatherSettingsClass>102O=5AddweatherSettingsClass@04>25CitiesweatherSettingsClass"7B@820=5 =0 3@04 Delete cityweatherSettingsClass<5 =0 3@04Enter city nameweatherSettingsClass*5@8>4 =0 >1=>2O20=5:Refresh period:weatherSettingsClass"J@A5=5SearchweatherSettingsClass0AB@>9:8SettingsweatherSettingsClassJ>:0720=5 =0 2@5<5B> 2 @540 70 AB0BCAShow weather in the status rowweatherSettingsClassqutim-0.2.0/languages/bg_BG/binaries/vkontakte.qm0000644000175000017500000000633011267012021023355 0ustar euroelessareuroelessar > )8 j iFC   <]i  A5: s EdditAccount@8;030=5Apply EdditAccountH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect on start EdditAccount B:07Cancel EdditAccount`@>25@:0 70 0:BC0;870F88 =0 ?@8OB5;8B5 =0 2A5:8: Check for friends updates every: EdditAccountH@>25@:0 70 =>2> AJ>1I5=85 =0 2A5:8:Check for new messages every: EdditAccount" 540:B8@0=5 =0 %1 Editing %1 EdditAccounth725ABO20=5 70 0:BC0;870F88 2 A=8<:8B5 =0 ?@8OB5;8B5*Enable friends photo updates notifications EdditAccountForm EdditAccount1I8General EdditAccount<J:20=5 =0 ?J;=>@07<5@5= ?@53;54 =0 URL ?@8 8725AB85 70 =>20 A=8<:0/Insert fullsize URL on new photos notifications EdditAccount<J:20=5 =0 ?@5420@8B5;5= ?@53;54 =0 URL ?@8 8725AB85 70 =>20 A=8<:0.Insert preview URL on new photos notifications EdditAccount:>44J@60=5 2@J7:0B0 =0 2A5:8:Keep-alive every: EdditAccountOK EdditAccount0@>;0: Password: EdditAccountT1=>2O20=5 =0 A?8AJ:0 A ?@8OB5;8 =0 2A5:8:Refresh friend list every: EdditAccount:BC0;870F88Updates EdditAccountH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect on start LoginFormE-mail:E-mail: LoginFormForm LoginForm0@>;0: Password: LoginFormt<font size='2'><b>!J>1I5=85 =0 AB0BCA0:</b>&nbsp;%1</font>3Status message: %1B@518B5;OOpen user page VcontactList6%1 5 4>1028;(0) =>20 A=8<:0%1 added new photo VprotocolWrap8%1 15 >B15;O70=(0) =0 A=8<:0%1 was tagged on photo VprotocolWrapHA524>=8<JB 8;8 ?0@>;0B0 =5 AJ2?040BMismatch nick or password VprotocolWrap2Vkontakte.ru 0:BC0;870F88Vkontakte.ru updates VprotocolWrap72J= ;8=8OOffline VstatusObject0 ;8=8OOnline VstatusObjectqutim-0.2.0/languages/bg_BG/binaries/msn.qm0000644000175000017500000000440111240003554022143 0ustar euroelessareuroelessar >2 ) u <Xi@8;030=5Apply EdditAccountH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect on start EdditAccountBAJAB20Away EdditAccount05BBusy EdditAccount B:07Cancel EdditAccountb0 =5 A5 ?>:0720 ?@>7>@5F0 70 02B><0B8G5= >B3>2>@Don't show autoreply dialog EdditAccount" 540:B8@0=5 =0 %1 Editing %1 EdditAccountForm EdditAccount1I8General EdditAccount57459AB20Idle EdditAccountOK EdditAccount0 B5;5D>=0 On the phone EdditAccount0 ;8=8OOnline EdditAccount0 >1O4 Out to lunch EdditAccount0@>;0: Password: EdditAccount!B0BCA8Statuses EdditAccount"BAJAB20 70 <0;:>Will be right back EdditAccountH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect on start LoginForm Email:E-mail: LoginFormBForm LoginForm0@>;0: Password: LoginFormBAJAB20AwayMSNConnStatusBox05BBusyMSNConnStatusBox57459AB20IdleMSNConnStatusBox52848< InvisibleMSNConnStatusBox72J= ;8=8OOfflineMSNConnStatusBox0 B5;5D>=0 On the phoneMSNConnStatusBox0 ;8=8OOnlineMSNConnStatusBox0 >1O4 Out to lunchMSNConnStatusBox"BAJAB20 70 <0;:>Will be right backMSNConnStatusBox57 3@C?0 Without groupMSNContactListqutim-0.2.0/languages/bg_BG/binaries/twitter.qm0000644000175000017500000000261711240003554023057 0ustar euroelessareuroelessar :"{ iH2B><0B8G=> A2J@720=5 ?@8 AB0@B8@0=5Autoconnect on start LoginFormBForm LoginForm0@>;0: Password: LoginForm8>B@518B5;A:> 8<5 8;8 Email:Username or email: LoginForm6@5H:0 2 Twitter ?@>B>:>;0:Twitter protocol error: twApiWrap?8A0=85: Description: twContactList@>9 D02>@8B8:Favourites count: twContactList &25BO Followers twContactList@>9 F25BO:Followers count: twContactList@8OB5;8Friends twContactList@>9 ?@8OB5;8:Friends count: twContactList<!J>1I5=85 =0 ?>A;54=8O AB0BCA:Last status text: twContactList 5AB>=0E>645=85: Location: twContactList<5:Name: twContactList@>9 AB0BCA8:Statuses count: twContactList72J= ;8=8OOfflinetwStatusObject0 ;8=8OOnlinetwStatusObjectqutim-0.2.0/languages/make.sh0000755000175000017500000000642611237637637017565 0ustar euroelessareuroelessar#!/bin/sh STARTDIR=`pwd` cd `dirname $0` # Common vars QUERY=$1 if [ "$QUERY" = "pack" ] || [ "$QUERY" = "just-pack" ]; then PACK=1 else PACK=0 fi if [ "$QUERY" = "compile" ] || [ "$QUERY" = "pack" ]; then COMPILE=1 else COMPILE=0 fi if [ "$QUERY" = "clean" ]; then CLEAN=1 else CLEAN=0 fi # Packaging vars URL_PREFIX="http://qutim.org/downloads/qutim-lang_" URL_SUFFIX=".zip" PLUGMAN_INFO='Pinfo.xml' # Fill the list of languages shift if [ "$#" -gt "0" ]; then LANGUAGES="$@" else LANGUAGES=`find . -mindepth 1 -maxdepth 1 -type d -not -name ".svn" -and -not -name "__trans" -and -not -name "__tmp" -and -not -name "debian" -print` fi # Check command if [ "$COMPILE" -eq "0" ] && [ "$PACK" -eq "0" ] && [ "$CLEAN" -eq "0" ]; then echo "Usage:" echo " ./make.sh command [language ...]" echo "Where:" echo " * command - is one of the following:" echo " compile - compile .ts files" echo " pack - compile .ts files and create plugman packages" echo " just-pack - create plugman packages from already compiled .ts files" echo " clean - remove '__trans' and '__tmp' dirs" echo " * language - optional parameter, specifies one or more languages to compile" echo " if languages are not specified, all of them are compiled" cd $STARTDIR && exit 1 fi # Package cleaning if [ "$CLEAN" -eq "1" ]; then rm -rf __trans __tmp for language in $LANGUAGES; do rm -rf $language/binaries/*.qm done cd $STARTDIR && exit fi # A number of checks if [ ! -x "`which sed`" ] then echo "sed not found!!! Kill yourself, please!" cd $STARTDIR && exit 1 else SED=`which sed` echo "sed found in '$SED'" fi if [ "$PACK" -eq "1" ]; then if [ ! -x "`which zip`" ]; then echo "zip not found!" cd $STARTDIR && exit 1 else ZIP=`which zip` echo "zip found in '$ZIP'" fi if [ ! -x "`which svn`" ]; then echo "svn not found!" cd $STARTDIR && exit 1 else SVN=`which svn` echo "svn found in '$SVN'" fi if [ ! -x "`which awk`" ]; then echo "awk not found!" cd $STARTDIR && exit 1 else AWK=`which awk` echo "awk found in '$AWK'" fi if [ -d ".svn" ]; then REV=`LANG=C $SVN info | $AWK '$1=="Revision:" {print $2;}'` else REV=`LANG=C $SVN info http://qutim.org/svn/languages | $AWK '$1=="Revision:" {print $2;}'` fi fi if [ "$COMPILE" -eq "1" ] then if [ -x "`which lrelease-qt4`" ]; then LRELEASE=`which lrelease-qt4` echo "lrelease found in '$LRELEASE'" else if [ -x "`which lrelease`" ]; then LRELEASE=`which lrelease` echo "lrelease found in '$LRELEASE'" else echo 'lrelease not found!' cd $STARTDIR && exit 1 fi fi fi for language in ${LANGUAGES}; do if [ "$COMPILE" -eq "1" ]; then for ts in `ls ${language}/sources/*.ts`; do qm="${language}/binaries/`basename $ts | sed 's/ts$/qm/'`" $LRELEASE $ts -qm $qm done fi if [ "$PACK" -eq "1" ]; then [ -d "__trans" ] || mkdir -p "__trans" lang=`echo ${language} | sed 's@^\.\+/@@'` [ -d "__tmp/languages/${lang}" ] || mkdir -p "__tmp/languages/${lang}" cp ${language}/binaries/*.qm __tmp/languages/${lang}/ cp ${language}/${PLUGMAN_INFO} __tmp/ cd __tmp sed -i "s@--VERSION--@${REV}@" ${PLUGMAN_INFO} URL=${URL_PREFIX}${lang}${URL_SUFFIX} sed -i "s@--URL--@${URL}@" ${PLUGMAN_INFO} zip -r ../__trans/qutim-lang_${lang}.zip * cd .. rm -rf __tmp fi done qutim-0.2.0/languages/AUTHORS0000644000175000017500000000040511235565766017351 0ustar euroelessareuroelessarqutIM languages: set of qutIM translations ========================================== Translators: ------------ MrFree - Russian language Nightwolf_ng - alternative Russian language kiroff - Bulgarian language Marvin42 - German language Lms - Czech language qutim-0.2.0/languages/cs_CZ/0000755000175000017500000000000011273101310017250 5ustar euroelessareuroelessarqutim-0.2.0/languages/cs_CZ/Pinfo.xml0000644000175000017500000000055211236534563021072 0ustar euroelessareuroelessar languages art all cs_CZ --VERSION-- Czech language for qutIM 0.2 beta --URL-- Lms (lms.cze7@gmail.com) Creative Commons BY-SA 3.0 qutim-0.2.0/languages/cs_CZ/sources/0000755000175000017500000000000011273101310020733 5ustar euroelessareuroelessarqutim-0.2.0/languages/cs_CZ/sources/webhistory.ts0000644000175000017500000002437411270772612023534 0ustar euroelessareuroelessar historySettingsClass Settings Nastavení URL: Login: Přihlašovací jméno: Password: Heslo: Enable notification when get messages Zapnout oznamování, když dostanete novou zprávu Store locally in SQLite database (SQL History plugin) Ukládat lokálně v SQLite databázi (SQL History plugin) Store locally in JSON files (JSON History plugin) Ukládat lokálně v JSON souborech (JSON History plugin) About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Web History plugin for qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Store history on web-server</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Web History plugin pro qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Ukládá historii na webový server</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html> webhistoryPlugin Store messages from WebHistory:<br/> Ukládat zprávy z WebHistory in JSON: %1<br/> v JSON: %1<br/> in SQLite: %1<br/> v SQLite: %1<br/> qutim-0.2.0/languages/cs_CZ/sources/formules.ts0000644000175000017500000000150611270772612023161 0ustar euroelessareuroelessar formulesSettingsClass Settings Nastavení Scale: Měřítko: Do next to show source text of evaluation: Formát zdrojového textu pro výpočet: [tex]EVALUATION THERE[/tex] [tex]VÝPOČET ZDE[/tex] $$EVALUATION THERE$$ $$VÝPOČET ZDE$$ qutim-0.2.0/languages/cs_CZ/sources/imagepub.ts0000644000175000017500000002525311270772612023123 0ustar euroelessareuroelessar imagepubPlugin Send image via ImagePub plugin Poslat obrázek přes plugin ImagePub Choose image file Vyberte soubor obrázku Choose image Vyberte obrázek Image Files (*.png *.jpg *.gif) Obrázkové soubory (*.png *.jpg *.gif) Canceled Zrušeno File size is null Velikost souboru je nulová Sending image URL... Odesílání URL obrázku... Image sent: %N (%S bytes) %U Obrázek odeslán: %N (%S bytů) %U Image URL sent URL obrázku odeslán Can't parse URL Nelze parsovat URL imagepubSettingsClass Settings Nastavení Image hosting service: Servis hostingu obrázků: Send image template: Poslat šablonu obrázku: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> %N - file name; %U - file URL; %S - file size %N - název souboru; %U - URL soubor; %S - velikost souboru About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/imagepub-icon48.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">ImagePub qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%VERSION%</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Send images via public web services</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> uploadDialog Uploading... Nahrávám... Progress: %1 / %2 Postup: %1 / %2 Elapsed time: %1 Uplynulý čas: %1 Speed: %1 kb/sec Rychlost: %1 kb/s File: %1 Soubor: %1 uploadDialogClass Uploading... Nahrávám... Upload started. Nahrávání začalo. File: Soubor: Progress: Postup: Elapsed time: Uplynulý čas: Speed: Rychlost: Cancel qutim-0.2.0/languages/cs_CZ/sources/urlpreview.ts0000644000175000017500000003001011270772612023521 0ustar euroelessareuroelessar urlpreviewPlugin URL Preview Náhled URL bytes byty Make URL previews in messages Vytvářet URL náhledy ve zprávách urlpreviewSettingsClass Settings Nastavení General Obecné Enable on incoming messages Povolit na příchozí zprávy Enable on outgoing messages Povolit na odchozí zprávy Don't show info for text/html content type Nezobrazovat informace pro kontextový typ text/html Info template: Šablona informací: Macros: %TYPE% - Content-Type %SIZE% - Content-Length Makra: %TYPE% - Content-Type %SIZE% - Content-Length Images Obrázky Max file size limit (in bytes) Maximální limit velikosti souboru (v bytech) %MAXW% macro %MAXW% makro %MAXH% macro %MAXH% makro Image preview template: Šablona náhledu obrázku: Macros: %URL% - Image URL %UID% - Generated unique ID Makra: %URL% - URL obrázku %UID% - Vygenerované unikátní ID About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Make previews for URLs in messages</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Vytváří náhledy pro URL ve zprávách</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/cs_CZ/sources/histman.ts0000644000175000017500000002461711270772612023000 0ustar euroelessareuroelessar ChooseClientPage WizardPage Průvodce ChooseOrDumpPage WizardPage Průvodce Import history from one more client Import historie z jednoho nebo více klientů Dump history Uložit historii ClientConfigPage Select your Jabber account. Označit Jabber účet. Select accounts for each protocol in the list. Označíte účty pro každý protokol na seznamu. WizardPage Průvodce Path to profile: Cesta k profilu: ... Encoding: Šifrování: DumpHistoryPage WizardPage Průvodce Choose format: Vyberte formát: JSON Binary Binární Merging history state: Stav slučování historie: Dumping history state: Stav ukládání historie: HistoryManager::ChooseClientPage Client Klient Choose client which history you want to import to qutIM. Vyberte klienta, ze kterého chcete importovat historii do qutIMu. HistoryManager::ChooseOrDumpPage What to do next? Dump history or choose next client Uložit historii nebo vybrat dalšího klienta Co dělat dál? It is possible to choose another client for import history or dump history to the disk. Je možné vybrat jiného klienta pro import historie nebo uložit historii na disk. HistoryManager::ClientConfigPage System Systémový Configuration Nastavení Enter path of your %1 profile file. Zadejte cestu pro soubor s profilem %1. Enter path of your %1 profile dir. Zadejte cestu pro adresář s profilem %1. If your history encoding differs from the system one, choose the appropriate encoding for history. Pokud se kódování historie liší od systému historie, vyberte vhodné kódování pro historii. Select path Vyberte cestu HistoryManager::DumpHistoryPage Dumping Ukládání Last step. Click 'Dump' to start dumping process. Poslední krok. Klikněte 'Uložit' pro start ukládacího procesu. Manager merges history, it make take several minutes. Spojování historie může trvat několik minut. History has been succesfully imported. Historie byla úspěšně importována. HistoryManager::HistoryManagerWindow History manager Správce historie &Dump &Uložit HistoryManager::ImportHistoryPage Loading Načítání Manager loads all history to memory, it may take several minutes. Správce načte veškerou historii do paměti, může to trvat několik minut. %n message(s) have been succesfully loaded to memory. %n zpráv bylo úspěšně načteno do paměti. It has taken %n ms. Bylo přijato %n ms. HistoryManagerPlugin Import history Importovat historii HistoryManagerWindow Form ImportHistoryPage WizardPage Průvodce qutim-0.2.0/languages/cs_CZ/sources/twitter.ts0000644000175000017500000000724211270772612023032 0ustar euroelessareuroelessar LoginForm Form Username or email: Jméno nebo email: Password: Heslo: Autoconnect on start Automaticky připojit twApiWrap Twitter protocol error: Chyba Twitter protokolu: twContactList Friends Přátelé Followers Příznivci Name: Jméno: Location: Umístění: Description: Popis: Followers count: Počet příznivců: Friends count: Počet přátel: Favourites count: Počet oblíbených: Statuses count: Počet stavů: Last status text: Poslední text stavu: twStatusObject Online Offline qutim-0.2.0/languages/cs_CZ/sources/jabber.ts0000644000175000017500000070016711272760570022565 0ustar euroelessareuroelessar AcceptAuthDialog Form Authorize Autorizovat Deny Odmítnout Ignore Ignorovat AddContact Add User Přidat uživatele Jabber ID: User information Informace o uživateli Name: Jméno: <no group> <bez skupiny> Send authorization request Poslat požadavek o autorizaci Group: Skupina: Add Přidat Cancel Zrušit Author Ruslan Nigmatullin Contacts Form Show contact status text in contact list Zobrazit text stavu kontaktu v seznamu kontaktů Show mood icon in contact list Zobrazit ikonu nálady v seznamu kontaktů Show main activity icon in contact list Zobrazit ikonu hlavní činnosti v seznamu kontaktů Show extended activity icon in contact list Zobrazit ikonu rozšířené činnosti v seznamu kontaktů Show tune icon in contact list Zobrazit tune ikonu v seznamu kontaktů Show not authorized icon Zobrazit ikonu pro neautorizovaný kontakt Show QIP xStatus in contact list Zobrazovat QIP xStatus v seznamu kontaktů Show main resource in notifications Zobrazit hlavní zdroj v oznámeních Dialog Dialog Ok Cancel Zrušit JabberClient qutIM Local qutIM's name en Default language cs-CZ JabberSettings Form Default resource: Výchozí zdroj: Reconnect after disconnect Obnovit připojení po odpojení Don't send request for avatars Neposílat požadavek na avatary Listen port for filetransfer: Naslouchací port pro přenos souborů: Priority depends on status Priorita závislá na stavu Online: Free for chat: Připraven na pokec: Away: Pryč: NA: Nepřítomen: DND: Nerušit: JoinChat Join groupchat Vstoupit do chatovací místnosti Bookmarks Záložky Settings Nastavení Name Jméno Conference Konference Nick Přezdívka Password Heslo Auto join Automaticky vstoupit Save Uložit Search Hledat Join Vstoupit History Historie Request last Poslední žádost messages zpráv Request messages since the datetime H:mm:ss Request messages since LoginForm Registration Registrace You must enter a valid jid Musíte zadat platný JID You must enter a password Musíte zadat heslo <font color='green'>%1</font> <font color='red'>%1</font> LoginFormClass LoginForm JID: Password: Heslo: Register this account Registrovat tento účet Personal Form General Obecné E-mail Phone Telefon Home Bydliště Work Zaměstnání Plugin XMPP Module-based realization of XMPP Modul založený na XMPP relizaci Jabber Module-based realization of Jabber protocol Modul založený na relizaci Jabber protokolu QObject <font color='#808080'>%1</font> %1 Join groupchat on <font size='2'><b>Status text:</b> %1</font> <font size='2'><b>Stavový text:</b> %1</font> <font size='2'><b>Possible client:</b> %1</font> <font size='2'><b>Pravděpodobný klient:</b> %1</font> <font size='2'><b>User went offline at:</b> <i>%1</i></font> <font size='2'><b>User went offline at:</b> <i>%1</i> (with message: <i>%2</i>)</font> <font size='2'><b>Authorization:</b> <i>None</i></font> <font size='2'><b>Autorizace:</b> <i>není</i></font> <font size='2'><b>Authorization:</b> <i>To</i></font> <font size='2'><b>Autorizace:</b> <i>pro</i></font> <font size='2'><b>Authorization:</b> <i>From</i></font> <font size='2'><b>Autorizace:</b> <i>od</i></font> <font size='2'><i>%1</i></font> <font size='2'><i>%1:</i> %2</font> <font size='2'><i>Listening:</i> %1</font> <font size='2'><i>Poslouchá:</i> %1</font> Afraid Obavy Amazed Úžas Amorous Zamilovaný Angry Zlost Annoyed Rozčílení Anxious Starosti Aroused Vzrušení Ashamed Hanba Bored Nuda Brave Odvaha Calm Bezvětří Cautious Opatrný Cold Zima Confident Sebejistý Confused Zmatek Contemplative Zamyšlený Contented Spokojenost Cranky Mrzutý Crazy Šílený Creative Tvůrčí Curious Zvědavost Dejected Deprimovaný Depressed Deprese Disappointed Rozčilování Disgusted Znechucení Dismayed Zděšený Distracted Roztržitost Embarrassed Trapas Envious Závistivý Excited Rozjařenost Flirtatious Flirt Frustrated Frustrace Grateful Vděčný Grieving Truchlící Grumpy Nevrlost Guilty Vina Happy Štěstí Hopeful Plný naděje Hot Horko Humbled Pokora Humiliated Potupa Hungry Hlad Hurt To bolí Impressed Válím oči In awe Úžas In love Láska Indignant Rozhořčení Interested Zájem Intoxicated Pod vlivem alkoholu Invincible Neporazitelný Jealous Závist Lonely Osamělost Lost Ztracený Lucky Šťastný Mean Mínit Moody Rozladěnost Nervous Nervozita Neutral Neutrální Offended Uraženost Outraged Pobouřený Playful Hravý Proud Hrdost Relaxed Uvolněný Relieved Úleva Remorseful Litující Restless Nedočkavý Sad Smutek Sarcastic Sarkasmus Satisfied Spokojený Serious Vážný Shocked V šoku Shy Nesmělost Sick Nemocný Sleepy Ospalý Spontaneous Spontánní Stressed Stress Strong Silný Surprised Překvapení Thankful Vděčný Thirsty Žízeň Tired Unavený Undefined Neurčený Weak Slabý Worried Obavy Unknown Neznámý Doing chores Běžné povinnosti buying groceries nákup potravin cleaning uklízím cooking vařím doing maintenance údržba doing the dishes myju nádobí doing the laundry peru prádlo gardening na zahrádce running an errand pochůzka walking the dog venku se psem Drinking Piju having a beer piju pivo having coffee piju kávu having tea piju čaj Eating Jím having a snack svačím having breakfast snídám having dinner večeřím having lunch obědvám Exercising Cvičení cycling cyklistika dancing tancování hiking turistika jogging jogging playing sports sportovní hry running běhání skiing lyžování swimming plavání working out vypracování Grooming Péče o tělo at the spa v lázních brushing teeth čistím si zuby getting a haircut v kadeřnictví shaving holím se taking a bath koupu se taking a shower sprchuji se Having appointment na schůzce Inactive Nečinný day off volný den hanging out vyvěšeno hiding schovávání se on vacation na dovolené praying modlení scheduled holiday naplánovaná dovolená sleeping spím thinking přemýšlím Relaxing odpočinek fishing rybaření gaming hraní her going out venku partying party reading čtení rehearsing nacvičování shopping nakupování smoking kouřím socializing ve společnosti sunbathing opalování watching TV sleduji TV watching a movie sleduji film Talking Mluvení in real life v reálném životě on the phone na telefonu on video phone na video telefonu Traveling Cestuji commuting dojíždím driving řídím in a car v autě on a bus v autobusu on a plane v letadle on a train ve vlaku on a trip na výletě walking na procházce Working Pracuji coding programuji in a meeting na poradě studying studuji writing píši Open File Otevřít soubor All files (*) Všechny soubory (*.*) %1 seconds %1 sekund %1 second %1 sekunda %1 minutes %1 minut 1 minute 1 minuta %1 hours %1 hodin 1 hour 1 hodina %1 days %1 dní 1 day 1 den %1 years %1 roků 1 year 1 rok Mood Nálada Activity Činnost Tune Hudba RoomConfig Form Apply Použít Ok Cancel Zrušit RoomParticipant Form Owners Vlastníci JID Administrators Administrátoři Members Členové Banned Zabanovaní Reason Důvod Apply Použít Ok Cancel Zrušit SaveWidget Save to bookmarks Uložit záložky Bookmark name: Název záložky: Conferene: Konference: Nick: Přezdívka: Password: Heslo: Auto join Automaticky vstoupit Save Uložit Cancel Zrušit Search Form Server: Fetch Načíst Type server and fetch search fields. Napište server a budou načtena vyhledávácí pole. Clear Vymazat Search Hledat Close Zavřít SearchConference Search conference Hledat konferenci SearchService Search service Hledat službu SearchTransport Search transport Hledat transport ServiceBrowser jServiceBrowser Server: Close Zavřít Name Jméno JID Join conference Vstoupit do chatovací místnosti Register Registrovat Search Hledat Execute command Spustit příkaz Show VCard Zobrazit VCard Add to roster Přidat do rosteru Add to proxy list Přidat do seznamu proxy Task Author Autor VCardAvatar <img src='%1' width='%2' height='%3'/> VCardBirthday Birthday: Narozeniny: %1&nbsp;(<font color='#808080'>wrong date format</font>) %1&nbsp;(<font color='#808080'>chybný formát data</font>) VCardRecord Site: Stránka: Company: Společnost: Department: Oddělení: Title: Název: Role: Funkce: Country: Země: Region: Území: City: Obec: Post code: PSČ: Street: Ulice: PO Box: XmlConsole <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> Clear Vymazat XML Input... XML vstup... Close Zavřít XmlPrompt XML Input XML vstup &Send Ode&slat &Close &Zavřít activityDialogClass Choose your activity Vyberte vaši činnost Choose Vybrat Cancel Zrušit customStatusDialogClass Choose your mood Vyberte vaši činnost Choose Vyberte Cancel jAccount Join groupchat Vstoupit do chatovací místnosti Additional Doplňující Open XML console Otevřít XML konzoli Add new contact Přidat nový kontakt Find users Najít uživatele Service browser Prohlížeč služeb View/change personal vCard Zobrazit/změnit osobní vCard Privacy status Nastavení soukromí Set mood Nastavit náladu Set activity Nastavit činnost Online Offline Free for chat Připraven na pokec Away Pryč NA Nepřítomen DND Nerušit You must use a valid jid. Please, recreate your jabber account. Musíte zadat platný JID. Prosím znovu vytvořte Jabber účet. You must enter a password in settings. Musíte zadat heslo v nastavení. Services Služby Conferences Konference Add new contact on Přidat nový kontakt do Invisible for all Neviditelný pro všechny Visible for all Viditelný pro všechny Visible only for visible list Viditelný pouze pro seznam viditelných Invisible only for invisible list Neviditelný pouze pro seznam neviditelných jAccountSettings Editing %1 Upravování %1 Warning Varování You must enter a password Musíte zadat heslo jAccountSettingsClass jAccountSettings Account Účet JID: Password: Heslo: Resource: Zdroj: Priority: Priorita: Set priority depending of the status Nastavit prioritu v závislosti na stavu Autoconnect at start Automatické připojení po spuštění Keep previous session status Udržovat předchozí stav relace Use this option for servers doesn't support bookmark Tuto volbu pro servery, které nepodporují záložky Local bookmark storage Místní skladování záložek Connection Připojení Encrypt connection: Šifrované spojení: Never Nikdy When available Když bude k dispozici Always Vždy Compress traffic (if possible) Komprimovat provoz (pokud je možno) Host: Hostitel: Port: Manually set server host and port Ručně nastavit hostitele a port serveru Proxy Proxy type: Typ proxy: None není HTTP SOCKS 5 Default Výchozí Authentication Ověření User name: Jméno: OK Apply Použít Cancel Zrušit jAddContact <no group> <bez skupiny> Services Služby jAdhoc Finish Dokončit Cancel Zrušit Previous Předchozí Next Další Complete Kompletní Ok jConference Kick Vykopnout Ban Zabanovat Visitor Návštěvník Participant Účastník Moderator Moderátor Invite to groupchat Pozvat do chatovací místnosti User %1 invite you to conference %2 with reason "%3" Accept invitation? Uživatel %1 vás zve do konference %2 s odůvodněním "%3" Přijmete pozvání? %1 has set the subject to: %2 %1 nastavil téma na : %2 The subject is: %2 Téma: %2 Not authorized: Password required. Není autorizováno: Vyžadováno heslo. Forbidden: Access denied, user is banned. Zakázáno: Přístup zamítnut, uživatel je zabanován. Item not found: The room does not exist. Položka nenalezena: Místnost neexistuje. Not allowed: Room creation is restricted. Nepovoleno: Vytváření místností je omezeno. Not acceptable: Room nicks are locked down. Nepřijatelné: Přezdívky místnosti jsou zamknuty. Registration required: User is not on the member list. Vyžadována registrace: Uživatel není na seznamu členů. Conflict: Desired room nickname is in use or registered by another user. Konflikt: Požadovaná přezdívka v místnosti je použita nebo zaregistrovaná jiným uživatelem. Service unavailable: Maximum number of users has been reached. Služba není k dispozici: Byl dosažen maximální počet uživatelů v místnosti. Unknown error: No description. Neznámá chyba: Bez popisu. Join groupchat on Vstoupit do chatovací místnosti na %1 is now known as %2 %1 se přejmenoval(a) na %2 You have been kicked from Byl jsi vykopnut z with reason: s odůvodněním: without reason bez odůvodnění You have been kicked Byl jsi vykopnut You have been banned from Byl jsi zabanován z You have been banned Byl jsi zabanován %1 has been kicked %1 byl(a) vyhozen(a) %1 has been banned %1 byla(a) zabanován(a) %1 has left the room %1 opustil(a) místnost %3 has joined the room as %1 and %2 %3 vstoupil(a) do místnosti jako %1 a %2 %2 has joined the room as %1 %2 vstoupil(a) do místnosti jako %1 %2 has joined the room %2 vstoupil(a) do místnosti %4 (%3) has joined the room as %1 and %2 %4 (%3) vstoupil(a) do místnosti jako %1 a %2 %3 (%2) has joined the room as %1 %3 (%2) vstoupil(a) do místnosti jako %1 %2 (%1) has joined the room %2 (%1) vstoupil(a) do místnosti %3 now is %1 and %2 %3 nyní je %1 a %2 %2 now is %1 %2 nyní je %1 %4 (%3) now is %1 and %2 %4 (%3) nyní je %1 a %2 %3 (%2) now is %1 %3 (%2) nyní je %1 moderator moderátor participant účastník visitor návštěvník banned zabanován member člen owner vlastník administrator administrátor guest host <font size='2'><b>Affiliation:</b> %1</font> <font size='2'><b>Vztah:</b> %1</font> <font size='2'><b>Role:</b> %1</font> <font size='2'><b>Funkce:</b> %1</font> <font size='2'><b>JID:</b> %1</font> Copy JID to clipboard Kopírovat JID do schránky Add to contact list Přidat do seznamu kontaktů Kick message Vykopávací zpráva Ban message Zabanovací zpráva Rejoin to conference Znovu vstoupit do chatovací místnosti Save to bookmarks Uložit záložky Room configuration Nastavení místnosti Room participants Účastníci místnosti Room configuration: %1 Nastavení místnosti: %1 Room participants: %1 Účastníci místnosti: %1 jFileTransferRequest Save File Uložit soubor Form From: Od: File name: Název souboru: File size: Velikost souboru: Accept Přijmout Decline Odmítnout jFileTransferWidget File transfer: %1 Přenos souboru: %1 Waiting... Čekání... Sending... Odesílání... Getting... Přijímání... Done... Hotovo... Close Zavřít Form Filename: Název souboru: Done: Hotovo: Speed: Rychlost: File size: Velikost: Last time: Uplynulý čas: Remained time: Zbývající čas: Status: Stav: Open Otevřít Cancel Zrušit jJoinChat new chat Nová chatovací místnost New conference Nová chatovací místnost jLayer Jabber General Jabber Obecné Contacts Kontakty jProtocol en xml:lang cs-CZ A stream error occured. The stream has been closed. Ve streamu nastala chyba. Stream bude uzavřen. The incoming stream's version is not supported Příchozí verze streamu není podporována The stream has been closed (by the server). Stream byl serverem uzavřen. The HTTP/SOCKS5 proxy requires authentication. HTTP/SOCKS5 proxy vyžaduje ověření. HTTP/SOCKS5 proxy authentication failed. Ověření HTTP/SOCKS5 proxy selhalo. The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. HTTP/SOCKS5 proxy vyžaduje nepodporovaný ověřovací mechanizmus. An I/O error occured. Nastala vstupně/výstupní chyba. An XML parse error occurred. Nastala chyba parsování XML. The connection was refused by the server (on the socket level). Spojení bylo odmítnuto ze strany serveru (na úrovni soketu). Resolving the server's hostname failed. Selhalo vyřešení hostname serveru. Out of memory. Uhoh. Nedostatek paměti. Uhoh. The auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. Nabízený ověřovací mechanizmus serverem není podporován nebo server nenabízí ověřovací mechanizmus vůbec. The server's certificate could not be verified or the TLS handshake did not complete successfully. Certifikát serveru nelze ověřit nebo TLS nebylo úspěšně dokončeno. The server didn't offer TLS while it was set to be required or TLS was not compiled in. Server nenabízí TLS, zatímco požadavek byl nastaven nebo TLS nebyl dokončen. Negotiating/initializing compression failed. Vyjednávání/zahajování komprese se nezdařilo. Authentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. Ověření selhalo. Uživatelské jméno nebo heslo je chybné, nebo účet neexistuje. Použijte ClientBase::authError() k nalezení důvodu. The user (or higher-level protocol) requested a disconnect. Uživatel (nebo vyšší úroveň protokolu) požádal o odpojení. There is no active connection. Neexistuje žádné aktivní připojení. Unknown error. It is amazing that you see it... O_o Neznámá chyba. Je úžasné, že toto vidíte... O_o Services Služby Authorization request Vyžadována autorizace You were authorized Byl jsi autorizován Contacts's authorization was removed Autorizace kontaktu byla zrušena Your authorization was removed Vaše autorizace byla zrušena Sender: %2 <%1> Odesílatel: %2 <%1> Senders: Odesílatelé: %2 <%1> Subject: %1 Předmět: %1 URL: %1 Unreaded messages: %1 Nepřečtených zpráv: %1 vCard is succesfully saved vCard byla úspěšně uložena JID: %1<br/>Idle: %2 JID: %1<br/>Nečinný: %2 JID: %1<br/>The feature requested is not implemented by the recipient or server. JID: %1<br/>Požadovaná funkce není implementována u příjemce nebo na serveru. JID: %1<br/>The requesting entity does not possess the required permissions to perform the action. JID: %1<br/>Žádající entita nemá požadované oprávnění k provedení akce. JID: %1<br/>It is unknown StanzaError! Please notify developers.<br/>Error: %2 JID: %1<br/>Neznámý StanzaError! Prosím oznamte vývojářům.<br/>Chyba: %2 jPubsubInfo <h3>Mood info:</h3> <h3>Informace o náladě:</h3> Name: %1 Jméno: %1 Text: %1 <h3>Activity info:</h3> <h3>Informace o činnosti:</h3> General: %1 Obecné: %1 Specific: %1 Upřesnění: %1 <h3>Tune info:</h3> <h3>Informace o hudbě:</h3> Artist: %1 Interpret: %1 Title: %1 Název: %1 Source: %1 Zdroj: %1 Track: %1 Skladba: %1 Uri: <a href="%1">link</a> Uri: <a href="%1">odkaz</a> Length: %1 Délka: %1 Rating: %1 Hodnocení: %1 jPubsubInfoClass Pubsub info Close Zavřít jRoster Add to contact list Přidat do seznamu kontaktů Rename contact Přejmenovat kontakt Delete contact Odstranit kontakt Move to group Přesunout do skupiny Authorization Autorizace Send authorization to Poslat autorizaci Ask authorization from Požádat o autorizaci Remove authorization from Zrušit autorizaci Transports Transporty Register Registrovat Unregister Odregistrovat Log In Přihlásit Log Out Odhlásit Services Služby Copy JID to clipboard Kopírovat JID do schránky Send message to: Poslat zprávu do: Send file to: Poslat soubor do: Get idle from: Zjistil nečinnost z: Execute command: Spustit příkaz: Invite to conference: Pozvat do chatovací místnosti: Send file Poslat soubor Get idle Zjistit nečinnost Execute command Spustit příkaz PubSub info: PubSub informace: Delete from visible list Odstranit ze seznamu viditelných Add to visible list Přidat do seznamu viditelných Delete from invisible list Odstranit ze seznamu neviditelných Add to invisible list Přidat do seznamu neviditelných Delete from ignore list Odstranit ze seznamu ignorovaných Add to ignore list Přidat do seznamu ignorovaných Name: Jméno: Remove transport and his contacts? Odstranit transport a jeho kontakty? Delete with contacts Odstranit s kontakty Delete without contacts Odstranit bez kontaktů Cancel Zrušit Contact will be deleted. Are you sure? Kontakty budou smazány. Jste si jisti? Move %1 Přesunout %1 Group: Skupina: Authorize contact? Autorizovat kontakt? Ask authorization from %1 Požádat o autorizaci od %1 Reason: Důvod: Remove authorization from %1 Odstranit autorizaci od %1 jSearch Search Hledat Jabber ID JID Nickname Přezdívka Error Chyba jServiceBrowser <br/><b>Identities:</b><br/> <br/><b>Identity:</b><br/> category: kategorie: type: typ: <br/><b>Features:</b><br/> <br/><b>Možnosti:</b><br/> jServiceDiscovery The sender has sent XML that is malformed or that cannot be processed. Odesílatel poslal poškozené nebo nezpracovatelné XML. Access cannot be granted because an existing resource or session exists with the same name or address. Přístup nemůže být poskytnut, protože existuje zdroj nebo session se stejným jménem nebo adresou. The feature requested is not implemented by the recipient or server and therefore cannot be processed. Požadovaná funkce není implementována u příjemce nebo na serveru a proto nemohou být zpracovány. The requesting entity does not possess the required permissions to perform the action. Žádající entita nemá požadované oprávnění k provedení akce. The recipient or server can no longer be contacted at this address. Příjemce nebo server již nelze kontaktovat na této adrese. The server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error. Server nemohl zpracovat stanza z důvodu nesrozumitelného nebo jinak nedefinované vnitřní chyby serveru. The addressed JID or item requested cannot be found. Nebylo nalezeno JID nebo požadovaný požadavek. The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme. Vysílající entita poskytla nebo oznámila XMPP adresu nebo hledisko, které nebude dodržovat syntaxi definované v adresovacím schématu. The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server. Příjemce nebo server chápe požadavek, ale odmítá jej zpracovat, protože nesplňuje kritéria stanovená pro příjemce nebo server. The recipient or server does not allow any entity to perform the action. Příjemce nebo server neumožňuje žádnou entitu k provedení akce. The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials. Odesílatel musí zajistit řádné oprávnění, než bude moci provádět akce, nebo poskytl ověření impreoper. The item requested has not changed since it was last requested. Požadovaná položka nebyla změněna od doby kdy byla naposledy požadována. The requesting entity is not authorized to access the requested service because payment is required. Žádající entita není autorizovaná pro přístup k požadované službě, protože je požadována platba. The intended recipient is temporarily unavailable. Příjemce je dočasně nedostupný. The recipient or server is redirecting requests for this information to another entity, usually temporarily. Příjemce nebo server přesměrovává dotazy na tyto informace na jinou entitu, obvykle dočasně. The requesting entity is not authorized to access the requested service because registration is required. Žádající entita není autorizovaná pro přístup k požadované službě, protože je vyžadována registrace. A remote server or service specified as part or all of the JID of the intended recipient does not exist. Vzdálený server nebo služba jsou určeny jako část nebo celé JID příjemce, protože neexistuje. A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time. Vzdálený server nebo služba jsou určeny jako část nebo celé JID příjemce, nemohl být kontaktován v rozumném množství času. The server or recipient lacks the system resources necessary to service the request. Server nebo příjemce postrádá systémové prostředky nezbytné k žádosti služby. The server or recipient does not currently provide the requested service. Server nebo příjemce v současné době neposkytuje požadované služby. The requesting entity is not authorized to access the requested service because a subscription is required. Žádající entita není autorizovaná pro přístup k požadované službě, protože je vyžadováno přihlášení. The unknown error condition. Neznámá chyba podmínky. The recipient or server understood the request but was not expecting it at this time. Příjemce nebo server pochopil dotaz, ale teď ho nečekal. The stanza 'from' address specified by a connected client is not valid for the stream. Stanza adresa 'z' uvedená pro připojený klient neplatí pro stream. jSlotSignal %1@%2 Invisible for all Neviditelný pro všechny Visible for all Viditelný pro všechny Visible only for visible list Viditelný pouze pro seznam viditelných Invisible only for invisible list Neviditelný pouze pro seznam neviditelných jTransport Register Registrovat Name Jméno Nick Přezdívka First První Last Poslední E-Mail Address Adresa City Obec State Stát Zip PSČ Phone Telefon URL Date Datum Misc Různé Text Password Heslo jVCard Update photo Aktualizovat fotku Add name Přidat jméno Add nick Přidat přezdívku Add birthday Přidat narozeniny Add homepage Přidat domovskou stránku Add description Přidat popis Add country Přidat zemi Add region Přidat území Add city Přidat obec Add postcode Přidat PSČ Add street Přidat ulici Add PO box Přidat PO box Add organization name Přidat název organizace Add organization unit Přidat část organizace Add title Přidat název Add role Přidat funkci Open File Otevřít soubor Images (*.gif *.bmp *.jpg *.jpeg *.png) Obrázky (*.gif *.bmp *.jpg *.jpeg *.png) Open error Chyba při otevírání Image size is too big Obrázek je příliš velký userInformation Request details Detaily Close Zavřít Save Uložit topicConfigDialogClass Change topic Změnit téma Change Změnit Cancel Zrušit qutim-0.2.0/languages/cs_CZ/sources/core.ts0000644000175000017500000052746011273035151022262 0ustar euroelessareuroelessar AbstractContextLayer Send message Poslat zprávu Message history Historie konverzace Contact details Detaily kontaktu AccountManagementClass AccountManagement Účty Add Přidat Edit Upravit Remove Odstranit AddAccountWizard Add Account Wizard Průvodce přidáním účtu AdiumChatForm Form about:blank Send Odeslat AntiSpamLayerSettingsClass AntiSpamSettings Anti-spam Accept messages only from contact list Přijímat zprávy jen od uživatelů ze seznamu kontaktů Notify when blocking message Upozornit, když je zpráva zablokována Do not accept NIL messages concerning authorization Nepřijímat prázdné zprávy o autorizaci Do not accept NIL messages with URLs Nepřijímat prázdné zprávy s URL adresami Enable anti-spam bot Zapnout anti-spamového robota Anti-spam question: Antispamová otázka: Answer to question: Odpověď na otázku: Message after right answer: Zpráva po správně odpovědi: Don't send question/reply if my status is "invisible" Neposílat otázku/odpověď, pokud jste ve stavu "Neviditelný" AppearanceSettings Form Select theme: Vybrat motiv: Test Otestovat Edit Upravit ChatForm Form Contact history Historie kontaktu Ctrl+H Emoticon menu Smajlíci Ctrl+M Send image < 7,6 KB Poslat obrázek (menší než 7,6 kB) Ctrl+I Send file Poslat soubor Ctrl+F Ctrl+T Contact information Informace o kontaktu Send message on enter Odesílání zpráv enterem Send typing notification Odesílat oznámení o psaní Quote selected text Citovat označený text Ctrl+Q Clear chat log Vymazat text z konverzace ... Send message Poslat zprávu Send Odeslat Swap layout Vyměnit vzhled ChatLayerClass Chat window Okno konverzace ChatSettingsWidget Form Tabbed mode Záložkový režim Chats and conferences in one window Konverzace a konference v jednom okně Close button on tabs Tlačítko pro zavření na záložkách Tabs are movable Záložky jsou přesunutelné Remember openned privates after closing chat window Zapamatovat otevřené záložky po zavření okna konverzace Close tab/message window after sending a message Zavřít okno/záložku po odeslání zprávy Open tab/message window if received message Otevřít okno/záložku při přijetí zprávy Webkit mode Webkit režim Don't show events if message window is open Nezobrazovat události, pokud je otevřeno okno Send message on enter Odesílání zpráv enterem Send message on double enter Odesílání zpráv dvojitým enterem Send typing notifications Odesílat oznámení o psaní Don't blink in task bar Neblikat v systémové liště After clicking on tray icon show all unreaded messages Po kliknutí na ikonu v systémové liště zobrazit všechny nepřečtené zprávy Remove messages from chat view after: Odstranit zprávy z okna po: Text browser mode Vzhled zpráv Show names Zobrazit jména Timestamp: Formát data a času: ( hour:min:sec day/month/year ) ( hodina:minuta:sekunda den/měsíc/rok ) ( hour:min:sec ) ( hodina:minuta:sekunda ) ( hour:min, full date ) ( hodina:minuta, celé datum ) Colorize nicknames in conferences Obarvovat přezdívky v konferencích General Obecné Chat Konverzace Don't group messages after (sec): Neseskupovat zprávy po (sek.): ChatWindow <font color='green'>Typing...</font> <font color='green'>Píše...</font> Open File Otevřít soubor Images (*.gif *.png *.bmp *.jpg *.jpeg) Obrázky (*.gif *.png *.bmp *.jpg *.jpeg) Open error Chyba při otevírání Image size is too big Obrázek je příliš velký ConfForm Form Show emoticons Zobrazit smajlíky Ctrl+M, Ctrl+S Invert/translit message Obrácení/transliterace zpráv Ctrl+T Send on enter Odesílání enterem Quote selected text Citovat označený text Ctrl+Q Clear chat Vymazat konverzaci Send Odeslat Console Form <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;" bgcolor="#000000"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"></p></body></html> ContactListProxyModel Online Offline Not in list Není v seznamu ContactListSettingsClass ContactListSettings Nastavení seznamu kontaktů Main Hlavní Show accounts Zobrazit účty Hide empty groups Skrýt prázdné skupiny Hide offline users Skrýt offline uživatele Hide online/offline separators Skrýt offline/online oddělovače Sort contacts by status Seřadit kontakty podle stavu Draw the background with using alternating colors Vykreslit pozadí za použití alternativní barvy Show client icons Zobrazit ikony klientů Show avatars Zobrazit avatary Look'n'Feel Vzhled a dojem Opacity: Neprůhlednost: 100% Window Style: Styl okna: Regular Window Standardní okno Theme border Motiv rámečku Borderless Window Bez rámečku okna Tool window Nástrojové okno Show groups Zobrazit skupiny Customize Přizpůsobení Customize font: Přizpůsobit font: Account: Účet: Group: Skupina: Online: Offline: Separator: Oddělovač: Core::PListConfigBackend Cannot write to file %1 Nelze zapsat do souboru %1 DefaultContactList qutIM Main menu Hlavní nabídka Show/hide offline Zobrazit/skrýt offline kontakty Show/hide groups Zobrazit/skrýt skupiny Sound on/off Zapnout/vypnout zvuk About O qutIM &File &Soubor Control Ovládání Show offline Zobrazit offline kontakty Hide groups Skrýt skupiny Mute Ztlumit GeneralWindow qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? Possible variants Možné varianty GlobalProxySettingsClass GlobalProxySettings Proxy Proxy Type: Typ: Host: Hostitel: Port: None není HTTP SOCKS 5 Authentication Ověření User name: Jméno: Password: Heslo: GuiSetttingsWindowClass User interface settings Nastavení uživatelského rozhraní Emoticons: Smajlíci: <None> <není> Contact list theme: Motiv seznamu kontaktů: <Default> <Výchozí> Chat window dialog: Komunikační dialogové okno: Chat log theme (webkit): Motiv zpráv (webkit): Popup windows theme: Motiv oznamovacího okna: Status icon theme: Motiv stavových ikon: System icon theme: Motiv systémových ikon: Language: Jazyk: <Default> ( English ) <Výchozí> (English) Application style: Styl aplikace: Border theme: Motiv rámečku: <System> <Systémový> OK Apply Použít Cancel Zrušit Sounds theme: Motiv zvuků: <Manually> <Ručně> HistorySettingsClass HistorySettings Historie Save message history Ukládat historii konverzace Show recent messages in messaging window Zobrazených posledních zpráv v okně konverzace HistoryWindowClass HistoryWindow Historie Account: Účet: From: Od: Search Hledat Return Vrátit 1 In: %L1 Příchozí: %L1 Out: %L1 Odchozí: %L1 All: %L1 Vše: %L1 JsonHistoryNamespace::HistoryWindow No History není historie In: %L1 Příchozí: %L1 Out: %L1 Odchozí: %L1 All: %L1 Vše: %L1 KineticPopupBackend System message from %1: Systémová zpráva od %1: %1 changed status %1 změnil stav Message from %1: Zpráva od %1: %1 is typing %1 píše Blocked message from %1 Zablokovaná zpráva od %1 %1 has birthday today!! %1 má dnes narozeniny! %1 is online %1 je online %1 is offline %1 je offline qutIM launched qutIM spuštěn Count Počet LastLoginPage Please type chosen protocol login data Zadejte přihlašovací údaje pro zvolený protokol Please fill all fields. Vyplňte veškeré údaje. NotificationsLayerSettingsClass NotificationsLayerSettings Oznámení Show popup windows Zobrazovat oznamovací okna Width: Šířka: Height: Výška: Show time: Skrýt po: px s Position: Pozice: Style: Styl: Upper left corner Horní levý roh Upper right corner Pravý horní roh Lower left corner Dolní levý roh Lower right corner Dolní pravý roh No slide Neposouvat Slide vertically Posouvat vertikálně Slide horizontally Posouvat horizontálně Notify when: Oznámit, pokud: Contact sign on se kontakt přihlásí Contact sign off se kontakt odhlásí Contact typing message kontakt píše zprávu Contact change status kontakt změní stav Message received je přijata zpráva Show balloon messages: Zobrazovat zprávy v bublině: Plugin AES crypto AES šifrování Default qutIM crypto realization. Based on algorithm aes256 Výchozí realizace qutIM šifrování. Založené na algoritmu AES256 JSON config Nastavení JSON Default qutIM config realization. Based on JSON. Výchozí realizace qutIM nastavení. Založené na JSON. PList config Nastavení PList Additional qutIM config realization for Apple plists Doplňující nastavení qutIMu realizované pro Apple PListy Simple ContactList Jednoduchý seznam kontaktů Default qutIM contact list realization. Just simple Výchozí realizace qutIM seznam kontaktů. Nyní jednoduchá Kinetic popups Kinetické oznamovací okna Default qutIM popup realization. Powered by Kinetic Výchozí realizace qutIM oznamovacích oken. Běží na Kinetic X Settings dialog Default qutIM settings dialog realization with OS X style top bar Výchozí realizace qutIM dialogu nastavení s OS X stylem na horním panelu Webkit chat layer Webkit vzhled konverzace Default qutIM chat realization, based on Adium chat styles Výchozí realizace qutIM konverzace, založené na stylech Adium konverzace PluginSettingsClass Configure plugins - qutIM Nastavení pluginů - qutIM 1 Ok Cancel Zrušit PopupWindow <b>%1</b> <b>%1</b><br /> <img align='left' height='64' width='64' src='%avatar%' hspace='4' vspace='4'> %2 PopupWindowClass PopupWindow Oznamovací okno ProfileLoginDialog Log in Přihlásit Profile Profil Incorrect password Nesprávné heslo Delete profile Odstranit profil Delete %1 profile? Odstranit profil "%1"? ProfileLoginDialogClass ProfileLoginDialog Výběr profilu Name: Jméno: Password: Heslo: Remember password Zapamatovat heslo Don't show on startup Nezobrazovat pro spuštění Sign in Přihlásit Cancel Zrušit Remove profile Odstranit profil ProtocolPage Please choose IM protocol Vyberte IM protokol This wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts Tento průvodce vám pomůže přidat svůj účet zvoleného protokolu. Vždycky můžete přidat nebo odstranit účty z Hlavního nastavení -> Účty QObject Anti-spam Authorization blocked Autorizace zablokována Open File Otevřít soubor All files (*) Všechny soubory (*.*) 1st quarter 1. čtvrtletí 2nd quarter 2. čtvrtletí 3rd quarter 3. čtvrtletí 4th quarter 4. čtvrtletí Contact List Seznam kontaktů Not in list Není v seznamu History Historie Notifications Oznamování Sound notifications Zvukové oznamování Message from %1: %2 Zpráva od %1: %2 %1 is typing %1 píše typing píše Blocked message from %1: %2 Zablokovaná zpráva od %1: %2 (BLOCKED) (ZABLOKOVÁNO) %1 has birthday today!! %1 má dnes narozeniny! has birthday today!! má dnes narozeniny! Sound Zvuk &Quit &Ukončit Quit Ukončit Chat with %1 Konverzace s %1 Settings Popups Oznamovací okna Test settings Testovací nastavení Text Combo Check SoundEngineSettings Select command path Vyberte cestu k příkazu Executables (*.exe *.com *.cmd *.bat) All files (*.*) Spustitelné (*.exe *.com *.cmd *.bat) Všechny soubory (*.*) Executables Spustitelný Form ... Engine type Přehrávač No sound Bez zvuku QSound Custom sound player Vlastní hudební přehrávač Command: Příkaz: SoundLayerSettings Startup Spuštění System event Systémová událost Outgoing message Odchozí zpráva Incoming message Příchozí zpráva Contact is online Přihlášení kontaktu Contact changed status Kontakt změnil stav Contact went offline Odhlášení kontaktu Contact's birthday is comming Narozeniny kontaktu se blíží Sound files (*.wav);;All files (*.*) Don't remove ';' chars! Zvukové soubory (*.wav);;Všechny soubory (*.*) Open sound file Otevřít zvukový soubor Export sound style Exportovat styl zvuku XML files (*.xml) XML soubory (*.xml) Export... All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue? Všechny zvukové soubory budou zkopírovány do adresáře "%1/". Existující soubory budou přepsány bez jakékoliv výzvy. Chcete pokračovat? Error Chyba Could not open file "%1" for writing. Nelze otevřít soubor "%1" pro zápis. Could not copy file "%1" to "%2". Nelze zkopírovat soubor "%1" do "%2". Sound events successfully exported to file "%1". Zvuková upozornění úspěšně exportována do souboru "%1". Import sound style Importovat styl zvuku Could not open file "%1" for reading. Nelze otevřít soubor "%1" pro čtení. An error occured while reading file "%1". Chyba při čtení souboru "%1". File "%1" has wrong format. Soubor "%1" má nesprávný formát. SoundSettingsClass soundSettings Zvuk Events Události Sound file: Zvukový soubor: Play Přehrát Open Otevřít Apply Použít Export... Import... You're using a sound theme. Please, disable it to set sounds manually. Používáte zvukový motiv. Vypněte jej pokud chcete nastavit zvuky ručně. Status is connecting se připojuje is online je online is offline je offline is away je pryč is busy je zaměstnaný is not avaiable je pryč is occupied je zaneprázdněn is free for chat je připraven na pokec is evil je naštvaný is depression je v depresi is invisible je neviditelný is at home je doma is at work je v práci is on the phone je na telefonu is out to lunch je na obědě StatusDialog Write your status message Napište vaši stavovou zprávu Preset caption Přednastavený popisek StatusDialogVisualClass StatusDialog Stav Preset: Přednastavený: <None> <není> Do not show this dialog Nezobrazovat tento dialog Save Uložit OK Cancel Zrušit StatusPresetCaptionClass StatusPresetCaption Popis stavu OK Cancel Zrušit Please enter preset caption: Zadejte přednastavený popisek: TreeContactListModel Online Free for chat Připraven na pokec Away Pryč Not available Nepřítomen Occupied Zaneprázdněn Do not disturb Nerušit Invisible Neviditelný Offline At home Doma At work V práci Having lunch Obědvám Evil Naštvaný Depression V depresi Without authorization Bez autorizace XSettingsDialog General Obecné General configuration Obecná konfigurace Protocols Protokoly Accounts and protocols settings Nastavení účtů a protokolů Appearance Vzhled Appearance settings Nastavení vzhledu Plugins Pluginy Additional plugins settings Nastavení přídaných pluginů XSettingsDialog Sorry, this category doesn't contain any settings Omlouváme se, tato kategorie neobsahuje žádné nastavení XSettingsGroup Form XToolBar XBar appearance Vzhled XBaru Small (16x16) Malé (16x16) Normal (32x32) Normální (32x32) Big (48x48) Velké (48x48) Other Jiné Icon size Velikost ikony Only display the icon Pouze zobrazit ikonu Only display the text Pouze zobrazit text The text appears beside the icon Text bude zobrazen vedle ikony The text appears under the icon Text bude zobrazen pod ikonou Follow the style Tool button style Animated Animované aboutInfo Support project with a donation: Podpořit projekt darem: Yandex.Money Enter there your names, dear translaters <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Lms</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"></span></p></body></html> GNU General Public License, version 2 GNU General Public License, verze 2 aboutInfoClass About qutIM O qutIM About O programu <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, multiplatformní instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> Authors Autoři <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Main developer</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Hlavní vývojář a zakladel projektu</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Hlavní vývojář</span></p></body></html> Thanks To Poděkování <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Balíček ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Balíček ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Balíček smajlíků</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Autor zvuků pro události</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Autor identifikačního systému klientů</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Autor objektu pro skiny</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html> License Agreement Licenční ujednání <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Close Zavřít Return Vrátit <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatform instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatformní instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">© 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">License agreements</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">Licenční podmínky</a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project founder</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Main developer and Project leader</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Hlavní vývojář a zakladel projektu</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Hlavní vývojář a vedoucí projektu</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schröter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox library</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Icons pack</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Smile pack </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of sound events</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of client identification system</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Author of skin object</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schröter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox knihovna</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Balíček ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Balíček ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Balíček smajlíků </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Autor zvuků pro události</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Autor systémů identifikace klientů</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Autor skin objektu</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Translators Překladatelé Donates Darovat loginDialog Delete account Odstranit účet Delete %1 account? Odstranit účet "%1"? loginDialogClass Account Účet Account: Účet: ... Password: Heslo: <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximum length of ICQ password is limited to 8 characters.</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximální délka hesla pro ICQ je omezena na 8 znaků.</span></p></body></html> Save my password Uložit heslo Autoconnect Automatické připojení Secure login Zabezpečené přihlášení Show on startup Zobrazit po spuštění Sign in Přihlásit Remove profile Odstranit profil mainSettingsClass mainSettings Hlavní nastavení Save main window size and position Ukládat velikost a pozici hlavního okna Hide on startup Skrýt po spuštění Don't show login dialog on startup Nezobrazovat přihlašovací dialog po spuštění Start only one qutIM at same time Spustit pouze jeden qutIM ve stejný čas Add accounts to system tray menu Přidat účty do menu systémové lišty Always on top Vždy nahoře Auto-hide: Automaticky skrýt po: s Auto-away after: Automaticky nastavit stav Pryč po: min Show status from: Ukázat stav: qutIM &Quit &Ukončit &Settings... Na&stavení... &User interface settings... &Uživatelské rozhraní... Plug-in settings... Nastavení pluginů... Switch profile Přepnout profil Do you really want to switch profile? Opravdu chcete přepnout profil? qutIMClass qutIM qutimSettings Accounts Účty General Obecné Global proxy Globální proxy Save settings Uložit nastavení Save %1 settings? Uložit nastavení %1? qutimSettingsClass Settings Nastavení 1 OK Apply Použít Cancel Zrušit qutim-0.2.0/languages/cs_CZ/sources/vkontakte.ts0000644000175000017500000001642211270772612023336 0ustar euroelessareuroelessar EdditAccount Editing %1 Upravování %1 Form General Obecné Password: Heslo: Autoconnect on start Automaticky připojit po spuštění Keep-alive every: Udržovat připojení každých: s Refresh friend list every: Obnovit seznam přátel každých: Check for new messages every: Kontrolovat nové zprávy každých: Updates Aktualizace Check for friends updates every: Kontrolovat aktualizace přátel každých: Enable friends photo updates notifications Povolit oznamování aktualizací fotek přátel Insert preview URL on new photos notifications Vložit na oznámení o nové fotce náhled URL Insert fullsize URL on new photos notifications Vložit na oznámení o nové fotce celou URL OK Apply Použít Cancel Zrušit LoginForm Form E-mail: Password: Heslo: Autoconnect on start Automaticky připojit po spuštění VcontactList Friends Přátelé Favorites Oblíbené <font size='2'><b>Status message:</b>&nbsp;%1</font <font size='2'><b>Zpráva stavu:</b>&nbsp;%1</font Open user page Otevřít stránku uživatele VprotocolWrap Mismatch nick or password Záměna přezdívky nebo hesla Vkontakte.ru updates Aktualizace Vkontakte.ru %1 was tagged on photo %1 byl označen na fotce %1 added new photo %1 přidal novou fotku VstatusObject Online Offline qutim-0.2.0/languages/cs_CZ/sources/coder.ts0000644000175000017500000003603711270772612022430 0ustar euroelessareuroelessar HelpUI Help Nápověda qrc:/htmls/help/help.html About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Plugin, that lets you to organize encrypted chats with any </p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">contact from your contact list.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Encryption algorithms developer:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maksim 'Loz' Velesiuk</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Plugin developer:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(с) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Plugin, který umožňuje organizovat šifrovanoé konverzace</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> s jakýmkoliv kontaktem v seznamu kontaktů.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Vývojář šifrovacího algoritmu:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maksim 'Loz' Velesiuk</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Vývojář pluginu:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(с) 2009</span></p></body></html> ОК QutimCoder Begin encrypted chat Zahájit šifrovanou konverzaci Close encrypted chat Ukončit šifrovanou konverzaci Make this encrypted chat permanent Udělat tuto komunikaci jako trvale šifrovanou Make this encrypted chat regular Udělat tuto komunikaci jako pravidelně šifrovanou Encryption Šifrování Qutim Coder qutIM Coder Plugin, that lets you to organize encrypted chat sessions with any contact from your contact list. Plugin, který umožní organizovat šifrovanou komunikaci se všemi kontakty v seznamu kontaktů. Enqrypted chat with Šifrovaná konverzace s has already begun již začala have not been started yet nebyla zatím zahájena You already have permanent encrypted chat with Již máte trvale šifrovanou komunikaci s contact kontakt You don't have permanent encrypted chat with Nemáte stále šifrovanou komunikaci s SettingsCoding OK! This factors combination is available OK! Tato kombinace faktorů je k dispozici Error! This factors combination is not available Chyba! Tato kombinace faktorů není k dispozici Coding Settings Nastavení kódování Level Úroveň Base Báze Factors Faktory Check Zkontrolovat Please, read Help first. Nejdříve si přečtěte nápovědu. Help Nápověda OK Cancel Zrušit qutim-0.2.0/languages/cs_CZ/sources/irc.ts0000644000175000017500000007323111270772612022106 0ustar euroelessareuroelessar AddAccountFormClass AddAccountForm Přidat účet Server: irc.freenode.net Port: 6667 Nick: Přezdívka: Real Name: Skutečné jméno: Password: Heslo: Save password Uložit heslo IrcConsoleClass IRC Server Console Konzola IRC serveru ircAccount Channel owner Vlastník kanálu Channel administrator Administrátor kanálu Channel operator Operátor kanálu Channel half-operator Poloviční operátor kanálu Voice Hlas Banned Zabanováno Online Offline Away Pryč Console Konzola Channels List Seznam kanálů Join Channel Vstoupit do kanálu Change topic Změnit téma IRC operator IRC operátor Mode Režim Private chat Soukromá konverzace Notify avatar Oznámit avatar Give Op Dát operátora Take Op Vzít operátora Give HalfOp Dát polovičního operátora Take HalfOp Vzít polovičního operátora Give Voice Dát hlas Take Voice Vzít hlas Kick Kick with... Vykopnout s... Ban Zabanovat UnBan Odbanovat Information Informace CTCP Modes Režimy Kick / Ban Vykopnout / zabanovat Kick reason Důvod vykopnutí ircAccountSettingsClass IRC Account Settings Nastavení IRC účtu General Obecné Nick: Přezdívka: Alternate Nick: Alternativní přezdívka: Real Name: Skutečné jméno: Autologin on start Automaticky přihlásit po startu Server: Port: Codepage: Kódová stránka: Apple Roman Big5 Big5-HKSCS EUC-JP EUC-KR GB18030-0 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 ISO 8859-16 Iscii-Bng Iscii-Dev Iscii-Gjr Iscii-Knd Iscii-Mlm Iscii-Ori Iscii-Pnj Iscii-Tlg Iscii-Tml JIS X 0201 JIS X 0208 KOI8-R KOI8-U MuleLao-1 ROMAN8 Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 WINSAMI2 Identify Rozpoznat Age: Věk: Gender: Pohlaví: Unspecified nespecifikované Male Mužské Female Ženské Location Umístění Languages: Jazyky: Avatar URL: URL avataru: Other: Jiné: Advanced Pokročilé Part message: Část zprávy: Quit message: Odchozí zpráva: Autosend commands after connect: Automaticky poslat příkazy po připojení: OK Cancel Zrušit Apply Použít ircProtocol Connecting to %1 Připojování k %1 Trying alternate nick: %1 Zkouším alternativní přezdívku: %1 %1 requests %2 %1 požaduje %2 %1 requests unknown command %2 %1 požaduje neznámý kontakt %2 %1 reply from %2: %3 %1 odpověď od %2: %3 %1 has set mode %2 %1 nastavil režim %2 ircSettingsClass ircSettings Nastavení IRC Main Hlavní Advanced Pokročilé joinChannelClass Join Channel Vstoupit do kanálu Channel: Kanál: listChannel Sending channels list request... Odesílání požadavku na seznam kanálů... Fetching channels list... %1 Získávám seznam kanálů... %1 Channels list loaded. (%1) Seznam kanálů načten. (%1) Fetching channels list... (%1) Získávám seznam kanálů... (%1) listChannelClass Channels List Seznam kanálů Filter by: Filtrovat podle: Request list Požádat o seznam <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/irc-loading.gif" /></p></body></html> Users Uživatelé Channel Kanál Topic Téma textDialogClass textDialog qutim-0.2.0/languages/cs_CZ/sources/nowlistening.ts0000644000175000017500000013200111270772612024040 0ustar euroelessareuroelessar settingsUi Form Mode Režim Set mode for all accounts Nastavit režim pro všechny účty You have no ICQ or Jabber accounts. Nemáte ICQ ani Jabber účty. Current plugin mode Aktuální režim pluginu Deactivated Deaktivovaný For Jabber accounts Pro Jabber účty Activated Aktivovaný Info to be presented Informace, které budou zobrazeny artist title interpret název For ICQ accounts Pro ICQ účty RadioButton Changes current X-status message Změnit současnou X-status zprávu X-status message mask Maska X-status zprávy Listening now: %artist - %title Nyní poslouchám: %artist - %title Activates when X-status is "Listening to music" Aktivovat, když X-status je "Poslouchám hudbu" %artist - %title Settings Nastavení Music Player Amarok 1.4 AIMP Amarok 2 Audacious MPD QMMP Rhythmbox Song Bird (Linux) VLC <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For ICQ X-status message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - track length in minutes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - full path to file</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">For Jabber Tune message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - track length in seconds</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - full path to file</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Pro ICQ X-status zprávu existují následující podmínky:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - interpret</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - název</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber - číslo skladby</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - délka skladby v minutách</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - úplná cesta k souboru</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Pro Jabber Tune zprávu existují následující podmínky:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - interpret</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - název</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber - číslo skladby</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - délka skladby v sekundách</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - úplná cesta k souboru</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Winamp module author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Autor:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Autor modulu pro Winamp:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Winamp module author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Autor:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Autor modulu pro Winamp:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">(c) 2009</span></p></body></html> Winamp Check period (in seconds) Interval kontroly (v sekundách) 10 Hostname Hostitel 127.0.0.1 Port 6600 Password Heslo Info Informace background-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">For ICQ X-status message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%time - track length in minutes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%uri - full path to file</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">For Jabber Tune message adopted next terms:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">artist - artist</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">title - title</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">tracknumber - track number</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">length - track length in seconds</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">uri - full path to file</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Pro ICQ X-status zprávu existují následující podmínky:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%artist - interpret</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%title - název</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%tracknumber - číslo skladby</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%time - délka skladby v minutách</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">%uri - úplná cesta k souboru</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-weight:600;">Pro Jabber Tune zprávu existují následující podmínky:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">artist - interpret</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">title - název</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">tracknumber - číslo skladby</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">length - délka skladby v sekundách</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">uri - úplná cesta k souboru</span></p></body></html> About O... qutim-0.2.0/languages/cs_CZ/sources/gpgcrypt.ts0000644000175000017500000000510311270772612023161 0ustar euroelessareuroelessar GPGCrypt Set GPG Key Nastavit PGP klíč GPGSettings Form Settings Nastavení Your Key: Váš klíč: Passphrase OpenPGP Passphrase OpenPGP heslo Your passphrase is needed to use OpenPGP security. Please enter your passphrase below: Vaše heslo je potřebné pro použití OpenPGP ochrany. Zadejte heslo: &Cancel &Zrušit &OK &OK PassphraseDlg %1: OpenPGP Passphrase %1: OpenPGP heslo setKey Select Contact Key Označit klíč kontaktu Select Key: Označit klíč: qutim-0.2.0/languages/cs_CZ/sources/jsonhistory.ts0000644000175000017500000000500611270772612023717 0ustar euroelessareuroelessar HistorySettingsClass HistorySettings Nastavení historie Save message history Ukládat historii konverzace Show recent messages in messaging window Zobrazených posledních zpráv v okně konverzace HistoryWindowClass HistoryWindow Historie Account: Účet: From: Od: Search Hledat Return Vrátit 1 JsonHistoryNamespace::HistoryWindow No History není historie QObject History Historie qutim-0.2.0/languages/cs_CZ/sources/qt.ts0000644000175000017500000116342511246510757021766 0ustar euroelessareuroelessar AudioOutput <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> <html>Zařízení na přehrávání zvuku <b>%1</b> nefunguje.<br/>Vracím se k <b>%2</b>.</html> <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> Revert back to device '%1' Vrátit se zpět k zařízení '%1' CloseButton Close Tab Zavřít panel Phonon:: Notifications Oznamování Music Hudba Video Communication Komunikace Games Hry Accessibility Dostupnost Phonon::Gstreamer::Backend Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled. Varování: Balík gstreamer0.10-plugins-good pravděpodobně není nainstalován. Některé funkce videa budou vypnuty. Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled Varování: Základna pro GStreamer pluginy pravděpodobně není nainstalována. Veškerá audio a video podpora bude vypnuta Phonon::Gstreamer::MediaObject Cannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed. A required codec is missing. You need to install the following codec(s) to play this content: %0 Could not open media source. Invalid source type. Chybný typ zdroje. Could not locate media source. Could not open audio device. The device is already in use. Could not decode media source. Phonon::VolumeSlider Volume: %1% Hlasitost: %1% Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% Q3Accel %1, %2 not defined %1, %2 není definován Ambiguous %1 not handled Q3DataTable True Ano False Ne Insert Vložit Update Aktualizovat Delete Smazat Q3FileDialog Copy or Move a File Kopírovat nebo přesunout soubor Read: %1 Číst: %1 Write: %1 Zapsat: %1 Cancel Zrušit All Files (*) Všechny soubory (*.*) Name Název Size Velikost Type Typ Date Datum Attributes Atributy &OK Look &in: Náhled: File &name: Název souboru: File &type: Typ souboru: Back Zpět One directory up O jeden adresář výš Create New Folder Vytvořit novou složku List View Seznam pohledů Detail View Detailní pohled Preview File Info Náhled informací o souboru Preview File Contents Náhled obsahu souboru Read-write Pro zápis i pro čtení Read-only Pouze ke čtení Write-only Inaccessible Symlink to File Odkaz na soubor Symlink to Directory Odkaz na adresář Symlink to Special Odkaz na zvláštní soubor File Soubor Dir Adresář Special Speciální Open Otevřít Save As Uložit jako &Open &Otevřít &Save &Uložit &Rename &Přejmenovat &Delete &Smazat R&eload O&bnovit Sort by &Name Setřídit podle &jména Sort by &Size Setřídit podle &velikosti Sort by &Date Setřídit podle &datumu &Unsorted &Nesetříděné Sort Třídit Show &hidden files Ukázat &skryté soubory the file soubor the directory adresář the symlink odkaz Delete %1 Odstranit %1 <qt>Are you sure you wish to delete %1 "%2"?</qt> <qt>Skutečně chcete smazat %1 "%2"?</qt> &Yes &Ano &No &Ne New Folder 1 Nová složka 1 New Folder Nová složka New Folder %1 Nová složka %1 Find Directory Najít adresář Directories Adresáře Directory: Adresář: Error Chyba %1 File not found. Check path and filename. %1 Soubor nebyl nalezen. překontrolujte cestu a jméno souboru. All Files (*.*) Všechny soubory (*.*) Open Otevřít Select a Directory Vyberte adresář Q3LocalFs Could not read directory %1 Nelze číst z adresáře %1 Could not create directory %1 Nelze vytvořit adresář %1 Could not remove file or directory %1 Nelze odstranit soubor nebo adresář %1 Could not rename %1 to %2 Nelze přejmenovat %1 na %2 Could not open %1 Nelze otevřít %1 Could not write %1 Nelze zapsat %1 Q3MainWindow Line up Zarovnat Customize... Upravit... Q3NetworkProtocol Operation stopped by the user Operace zastavena uživatelem Q3ProgressDialog Cancel Zrušit Q3TabDialog OK Apply Použít Help Nápověda Defaults Výchozí Cancel Zrušit Q3TextEdit &Undo &Zpět &Redo Zn&ovu Cu&t Vyjmou&t &Copy &Kopírovat &Paste V&ložit Clear Vymazat Select All Vybrat vše Q3TitleBar System Restore up Obnovit nahoru Minimize Minimalizovat Restore down Obnovit dolů Maximize Maximalizovat Close Zavřít Contains commands to manipulate the window Puts a minimized back to normal Moves the window out of the way Puts a maximized window back to normal Makes the window full screen Closes the window Displays the name of the window and contains controls to manipulate it Q3ToolBar More... Více... Q3UrlOperator The protocol `%1' is not supported Protokol `%1' není podporován The protocol `%1' does not support listing directories Protokol `%1' nepodporuje vypsání adresářů The protocol `%1' does not support creating new directories Protokol `%1' nepodporuje vytváření nových adresářů The protocol `%1' does not support removing files or directories Protokol `%1' nepodporuje odstranění souborů nebo adresářů The protocol `%1' does not support renaming files or directories Protokol `%1' nepodporuje přejmenování souborů nebo adresářů The protocol `%1' does not support getting files Protokol `%1' nepodporuje získávání souborů The protocol `%1' does not support putting files Protokol `%1' nepodporuje zasílání souborů The protocol `%1' does not support copying or moving files or directories Protokol `%1' nepodporuje kopírování nebo přesouvání souborů nebo adresářů (unknown) (neznámý) Q3Wizard &Cancel Z&rušit < &Back < &Zpět &Next > &Další > &Finish Do&končit &Help Nápo&věda QAbstractSocket Operation on socket is not supported Operace na soketu není podporována Host not found Počítač nalezen Connection refused Spojení odmítnuto Connection timed out Časový limit připojení vypršel Socket operation timed out Vypršel časový limit operace soketu Socket is not connected Soket není připojen Network unreachable QAbstractSpinBox &Select All &Vybrat vše &Step up O krok &nahoru Step &down O krok &dolů QApplication Activate Aktivovat Activates the program's main window Aktivuje program v hlavním okně Executable '%1' requires Qt %2, found Qt %3. Spuštění '%1' vyžaduje Qt %2, nalezena Qt %3. Incompatible Qt Library Error Chyba Qt knihovna je nekompatibiní QT_LAYOUT_DIRECTION Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. QAxSelect Select ActiveX Control Vyberte ActiveX prvek OK &Cancel Z&rušit COM &Object: COM &objekt: QCheckBox Uncheck Odškrtnout Check Zaškrtnout Toggle Přepnout QColorDialog Hu&e: Zabar&vení: &Sat: &Sat: &Val: &Hod: &Red: Č&ervená: &Green: &Zelená: Bl&ue: Mo&drá: A&lpha channel: A&lfa kanál: Select Color Zvolit barvu &Basic colors &Základní barvy &Custom colors &Vlastní barvy &Add to Custom Colors Přid&at k vlastním barvám QComboBox False Ne True Ano Open Otevřít Close Zavřít QDB2Driver Unable to connect Nepodařilo se připojit Unable to commit transaction Unable to rollback transaction Unable to set autocommit QDB2Result Unable to execute statement Unable to prepare statement Unable to bind variable Unable to fetch record %1 Unable to fetch next Unable to fetch first QDateTimeEdit AM am PM pm QDial QDial SpeedoMeter SliderHandle QDialog Done Hotovo What's This? Co je toto? QDialogButtonBox OK &OK &Save &Uložit Save Uložit Open Otevřít &Cancel Z&rušit Cancel Zrušit &Close &Zavřít Close Zavřít Apply Použít Reset Resetovat Help Nápověda Don't Save Neukládat Close without Saving Zavřít bez uložení Discard Odmítnout &Yes &Ano Yes to &All Ano &všem &No &Ne N&o to All N&e všem Save All Uložit vše Abort Přerušit Retry Opakovat Ignore Ignorovat Restore Defaults Obnovit výchozí QDirModel Name Název Size Velikost Kind Match OS X Finder Druh Type All other platforms Typ Date Modified Datum změny QDockWidget Close Zavřít Dock Float QDoubleSpinBox More Více Less Méně QErrorMessage Debug Message: Ladicí hlášení: Warning: Varování: Fatal Error: Fatální chyba: &Show this message again &Znovu zobrazit tuto zprávu &OK &OK QFile Destination file exists Cílový soubor existuje Will not rename sequential file using block copy Cannot remove source file Nelze odstranit zdrojový soubor Cannot open %1 for input Nelze otevřít %1 pro vstup Cannot open for output Nelze otevřít pro výstup Failure to write block Cannot create %1 for output Nelze vytvořit %1 pro výstup QFileDialog Find Directory Najít adresář Open Otevřít Save As Uložit jako All Files (*) Všechny soubory (*) Show Zobrazit &Rename P&řejmenovat &Delete &Smazat Show &hidden files Ukázat &skryté soubory &New Folder &Nová složka Directory: Adresář: File &name: Jmé&no souboru: &Open &Otevřít &Save &Uložit Directories Adresáře &Choose &Vyberte %1 Directory not found. Please verify the correct directory name was given. %1 Adresář nenalezen. Ověřte správný název adresáře. %1 already exists. Do you want to replace it? %1 File not found. Please verify the correct file name was given. %1 Soubor nenalezen. Ověřte správný název souboru. New Folder Nová složka '%1' is write protected. Do you want to delete it anyway? Are sure you want to delete '%1'? Could not delete directory. Nelze odstranit adresář. Recent Places Poslední místa Look in: Náhled: Back Zpět Forward Vpřed Parent Directory Create New Folder Vytvořit novou složku List View Seznam pohledů Detail View Detailní pohled Files of type: Typ souborů: All Files (*.*) Všechny soubory (*.*) Remove Odstranit My Computer Tento počítač Drive Jednotka File Soubor Unknown Neznámý QFileSystemModel %1 TB %1 GB %1 MB %1 KB %1 kB %1 bytes %1 bytů Invalid filename Chybný název souboru <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. Name Název Size Velikost Kind Match OS X Finder Druh Type All other platforms Typ Date Modified Datum změny My Computer Tento počítač Computer Počítač QFontDatabase Normal Bold Tučné Demi Bold Black Demi Light Italic Kurzíva Oblique Any nějaký Latin Latinské Greek Řecké Cyrillic Azbuka Armenian Arménské Hebrew Hebrejské Arabic Arabské Syriac Syrské Thaana Thaana Devanagari Devanagari Bengali Bengálské Gurmukhi Gurmukhi Gujarati Gujarati Oriya Oriya Tamil Tamilské Telugu Telugu Kannada Kannada Malayalam Malajské Sinhala Sinhala Thai Thajské Lao Laoské Tibetan Tibetská Myanmar Myanmar Georgian Gruzínské Khmer Khmérské Simplified Chinese Traditional Chinese Japanese Japonština Korean Korejština Vietnamese Vietnamština Symbol Ogham Ogham Runic Runové QFontDialog Select Font Vybrat písmo &Font &Písmo Font st&yle St&yl písma &Size Veliko&st Effects Efekty Stri&keout Přeš&krtnuté &Underline &Podtržené Sample Ukázka Wr&iting System QFtp Not connected Nepřipojen Host %1 not found Počítač %1 nebyl nalezen Connection refused to host %1 Odmítnuto připojení k počítači %1 Connection timed out to host %1 Časový limit připojení k počítači vypršel %1 Connected to host %1 Připojení k počítači %1 Connection refused for data connection Spojení pro datový přenos odmítnuto Unknown error Neznámá chyba Connecting to host failed: %1 Selhalo připojení k počítači: %1 Login failed: %1 Přihlášení selhalo: %1 Listing directory failed: %1 Selhalo vypsání adresáře: %1 Changing directory failed: %1 Selhala změna adresáře: %1 Downloading file failed: %1 Selhalo stažení souboru: %1 Uploading file failed: %1 Selhalo nahrání souboru: %1 Removing file failed: %1 Selhalo odstranění souboru: %1 Creating directory failed: %1 Selhalo vytváření adresáře: %1 Removing directory failed: %1 Selhalo odstranění adresáře: %1 Connection closed Spojení ukončeno Host %1 found Počítač %1 nalezen Connection to %1 closed Připojení k %1 ukončeno Host found Počítač nalezen Connected to host Připojen k počítači QHostInfo Unknown error Neznámá chyba QHostInfoAgent Host not found Počítač nalezen Unknown address type Neznámý typ adresy Unknown error Neznámá chyba QHttp HTTPS connection requested but SSL support not compiled in Unknown error Neznámá chyba Request aborted Dotaz zrušen No server set to connect to Nenastaven žádný server k připojení Wrong content length Chybná délka obsahu Server closed connection unexpectedly Server neočekávaně ukončil připojení Connection refused (or timed out) Spojení odmítnuto Host %1 not found Počítač %1 nenalezen HTTP request failed HTTP požadavek selhal Invalid HTTP response header Chybná hlavička HTTP odpovědi Unknown authentication method Neznámá ověřovací metoda Proxy authentication required Vyžadováno ověření proxy Authentication required Vyžadováno ověření Invalid HTTP chunked body Chybné HTTP tělo Error writing response to device Connection refused Spojení odmítnuto Connection closed Spojení ukončeno Proxy requires authentication Proxy vyžaduje ověření Host requires authentication Počítač vyžaduje ověření Data corrupted Data jsou poškozena Unknown protocol specified Neznámá specifikace protokolu SSL handshake failed Host %1 found Počítač %1 nalezen Connected to host %1 Připojení k počítači %1 Connection to %1 closed Připojení k %1 ukončeno Host found Počítač nalezen Connected to host Připojen k počítači QHttpSocketEngine Did not receive HTTP response from proxy Error parsing authentication request from proxy Authentication required Vyžadováno ověření Proxy denied connection Proxy odmítla připojení Error communicating with HTTP proxy Proxy server not found Proxy server nenalezen Proxy connection refused Proxy server connection timed out Vypršel časový limit připojení k proxy serveru Proxy connection closed prematurely QIBaseDriver Error opening database Chyba při otevírání databáze Could not start transaction Nelze spustit transakci Unable to commit transaction Unable to rollback transaction QIBaseResult Unable to create BLOB Nelze vytvořit BLOB Unable to write BLOB Nelze zapsat BLOB Unable to open BLOB Nelze otevřít BLOB Unable to read BLOB Nelze číst BLOB Could not find array Nepodařilo najít pole Could not get array data Nepodařilo se získat data pole Could not get query info Could not start transaction Nelze spustit transakci Unable to commit transaction Could not allocate statement Could not prepare statement Could not describe input statement Could not describe statement Unable to close statement Unable to execute query Could not fetch next item Could not get statement info QIODevice Permission denied Přístup zamítnut Too many open files Příliš mnoho otevřených souborů No such file or directory Neexistuje žádný takový soubor ani adresář No space left on device Není volné místo na zařízení Unknown error Neznámá chyba QInputContext XIM XIM input method XIM vstupní metoda Windows input method Windows vstupní metoda Mac OS X input method Mac OS X vstupní metoda QInputDialog Enter a value: Zadejte hodnotu: QLibrary Could not mmap '%1': %2 Plugin verification data mismatch in '%1' Could not unmap '%1': %2 The shared library was not found. The file '%1' is not a valid Qt plugin. Soubor '%1' není platný Qt plugin. The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] Plugin '%1' používá nekompatiblní Qt knihovny. (%2.%3.%4) [%5] The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) Unknown error Neznámá chyba Cannot load library %1: %2 Nelze načíst knihovna %1: %2 Cannot unload library %1: %2 Nelze ukončit knihovna %1: %2 Cannot resolve symbol "%1" in %2: %3 Nelze vyřešit symbol "%1" v %2: %3 QLineEdit &Undo &Zpět &Redo Zn&ovu Cu&t Vyjmou&t &Copy &Kopírovat &Paste V&ložit Delete Odstranit Select All Vybrat vše QLocalServer %1: Name error %1: Chyba názvu %1: Unknown error %2 %1: Neznámá chyba %2 QLocalSocket %1: Connection refused %1: Spojení odmítnuto %1: Remote closed %1: Spojení ukončeno %1: Invalid name %1: Chybný název %1: Socket access error %1: Socket resource error %1: Socket operation timed out %1: Vypršel časový limit operace soketu %1: Datagram too large %1: Datagram je příliš velký %1: Connection error %1: Chyba připojení %1: The socket operation is not supported %1: Unknown error %1: Neznámá chyba %1: Unknown error %2 %1: Neznámá chyba %2 QMYSQLDriver Unable to open database ' Nepodařilo se otevřít databázi ' Unable to connect Nepodařilo se připojit Unable to begin transaction Nepodařilo se spustit transakci Unable to commit transaction Unable to rollback transaction QMYSQLResult Unable to fetch data Nepodařilo se načíst data Unable to execute query Nepodařilo se vykonat dotaz Unable to store result Nepodařilo se uložit výsledek Unable to execute next query Nepodařilo se vykonat další dotaz Unable to store next result Nepodařilo se uložit další výsledek Unable to prepare statement Unable to reset statement Unable to bind value Unable to execute statement Unable to bind outvalues Unable to store statement results QMdiArea (Untitled) (Bez názvu) QMdiSubWindow - [%1] %1 - [%2] Minimize Minimalizovat Maximize Maximalizovat Unshade Vyrolovat Shade Zarolovat Restore Down Obnovit dolů Restore Obnovit Close Zavřít Help Nápověda Menu Nabídka &Restore Obno&vit &Move Přes&unout &Size Veliko&st Mi&nimize Mi&nimalizovat Ma&ximize Ma&ximalizovat Stay on &Top Zůs&tat navrchu &Close &Zavřít QMenu Close Zavřít Open Otevřít Execute Spustit QMessageBox Show Details... Zobrazit detaily... Hide Details... Skrýt detaily... OK Help Nápověda <h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p> <h3>O Qt</h3><p>Tento program používá Qt verze %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p> About Qt O Qt QMultiInputContext Select IM Označit IM QMultiInputContextPlugin Multiple input method switcher Multiple input method switcher that uses the context menu of the text widgets QNativeSocketEngine Unable to initialize non-blocking socket Unable to initialize broadcast socket Attempt to use IPv6 socket on a platform with no IPv6 support The remote host closed the connection Network operation timed out Out of resources Unsupported socket operation Protocol type not supported Invalid socket descriptor Host unreachable Network unreachable Permission denied Přístup zamítnut Connection timed out Časový limit připojení vypršel Connection refused Spojení odmítnuto The bound address is already in use The address is not available The address is protected Datagram was too large to send Unable to send a message Unable to receive a message Unable to write Network error Chyba sítě Another socket is already listening on the same port Operation on non-socket The proxy type is invalid for this operation Unknown error Neznámá chyba QNetworkAccessCacheBackend Error opening %1 Chyba při otevírání %1 QNetworkAccessFileBackend Request for opening non-local file %1 Error opening %1: %2 Chyba při otevírání %1: %2 Write error writing to %1: %2 Cannot open %1: Path is a directory Nelze otevřít %1: Cesta je adresář Read error reading from %1: %2 QNetworkAccessFtpBackend No suitable proxy found Nenalezena vhodná proxy Cannot open %1: is a directory Nelze otevřít %1: je to adresář Logging in to %1 failed: authentication required Přihlášení do %1 selhalo: vyžadováno ověření Error while downloading %1: %2 Chyba při stahování %1: %2 Error while uploading %1: %2 Chyba při nahrávání %1: %2 QNetworkAccessHttpBackend No suitable proxy found Nenalezena vhodná proxy QNetworkReply Error downloading %1 - server replied: %2 Chyba stahování %1 - server odpověděl: %2 Protocol "%1" is unknown Protokol "%1" je neznámý QNetworkReplyImpl Operation canceled Operace zrušena QOCIDriver Unable to initialize QOCIDriver Nezdařila se inicializace Unable to logon Nepodařilo se přihlášení Unable to begin transaction Nepodařilo se zahájit transakci Unable to commit transaction Unable to rollback transaction QOCIResult Unable to bind column for batch execute Unable to execute batch statement Unable to goto next Unable to alloc statement Unable to prepare statement Unable to get statement type Unable to bind value Unable to execute statement QODBCDriver Unable to connect Nepodařilo se připojit Unable to connect - Driver doesn't support all needed functionality Nepodařilo se připojit - Ovladač nepodporuje všechny potřebné funkce Unable to disable autocommit Unable to commit transaction Unable to rollback transaction Unable to enable autocommit QODBCResult Unable to fetch last QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration Unable to execute statement Unable to fetch Unable to fetch next Unable to fetch first Unable to fetch previous Unable to prepare statement Unable to bind variable QObject Operation not supported on %1 Operace není podporována na %1 Invalid URI: %1 Neplatné URI: %1 Write error writing to %1: %2 Read error reading from %1: %2 Socket error on %1: %2 Remote host closed the connection prematurely on %1 Protocol error: packet of size 0 received No host name given ID Location Umístění Condition Ignore-count Single-shot Hit-count Close Zavřít New Nový Delete Smazat Go to Line Line: Řádek: Interrupt Shift+F5 Continue Pokračovat F5 Step Into F11 Step Over F10 Step Out Shift+F11 Run to Cursor Ctrl+F10 Run to New Script Toggle Breakpoint F9 Clear Debug Output Clear Error Log Clear Console &Find in Script... Ctrl+F Find &Next Najít &další F3 Find &Previous Najít &předchozí Shift+F3 Ctrl+G Name Název Value Hodnota Level Úroveň Disable Breakpoint Enable Breakpoint Breakpoint Condition: Loaded Scripts Breakpoints Stack Locals Console Konzola Debug Output Ladící výstup Error Log Search Hledat View Zobrazit Qt Script Debugger Debug QPSQLDriver Unable to connect Nepodařilo se připojit Could not begin transaction Nepodařilo se zahájit transakci Could not commit transaction Could not rollback transaction Unable to subscribe Unable to unsubscribe QPSQLResult Unable to create query Nepodařilo se vytvořit dotaz Unable to prepare statement QPageSetupWidget Form Paper Papír Page size: Velikost stránky: Width: Šířka: Height: Výška: Paper source: Zdroj papíru: Orientation Orientace Portrait Na výšku Landscape Na šířku Reverse landscape Reverse portrait Margins Okraje top margin left margin right margin bottom margin QPluginLoader The plugin was not loaded. Plugin nebyl načten. Unknown error Neznámá chyba QPrintDialog Print Tisk The 'From' value cannot be greater than the 'To' value. Hodonota 'Od' nemůže být vyšší jak hodnota 'Do'. OK QPrintPreviewDialog Page Setup Nastavení tisku %1% Print Preview Náhled tisku Next page Další stránka Previous page Předchozí stránka First page První stránka Last page Poslední stránka Fit width Fit page Zoom in Přiblížit Zoom out Oddálit Portrait Portrét Landscape Krajina Show single page Show facing pages Show overview of all pages Print Tisk Page setup Nastavení stránky Close Zavřít Export to PDF Exportovat do PDF Export to PostScript Exportovat do PostScript QPrintPropertiesWidget Form Page Stránka Advanced Pokročilé QPrintSettingsOutput Form Copies Kopie Print range Rozsah tisku Print all Všechny Pages from Stránky od to do Selection Výběr Output Settings Nastavení výstupu Copies: Počet kopií: Collate Reverse Options Možnosti Color Mode Barva Color Barevně Grayscale Černobíle Duplex Printing None Není Long side Short side QPrintWidget Form Printer Tiskárna &Name: &Název: P&roperties &Vlastnosti Location: Umístění: Preview Náhled Type: Typ: Output &file: Výstupní &soubor: ... QProcess Error reading from process Error writing to process Process crashed Proces se zhroutil No program defined Není definován program Could not open input redirection for reading Could not open output redirection for writing Process failed to start Proces selhal při startu Process operation timed out Vypršel časový limit operace procesu QProgressDialog Cancel Zrušit QPushButton Open Otevřít QRadioButton Check Zaškrtnout QRegExp no error occurred nedošlo k žádné chybě disabled feature used používána nepovolená funkce bad char class syntax špatná syntaxe znaku třídy bad lookahead syntax špatná syntaxe bad repetition syntax špatná syntaxe opakování invalid octal value chybná osmičková hodnota missing left delim chybějící levé ohraničení unexpected end neočekávaně skončil met internal limit interní limit QSQLite2Driver Error to open database Chyba při otevírání databáze Unable to begin transaction Nepodařilo se zahájit transakci Unable to commit transaction Unable to rollback Transaction QSQLite2Result Unable to fetch results Nepodařilo se načíst výsledky Unable to execute statement QSQLiteDriver Error opening database Chyba při otevírání databáze Error closing database Chyba při zavírání databáze Unable to begin transaction Nepodařilo se zahájit transakci Unable to commit transaction Unable to rollback transaction QSQLiteResult Unable to fetch row Nepodařilo se načíst řádek No query Není dotaz Unable to execute statement Unable to reset statement Unable to bind parameters Parameter count mismatch QScriptDebuggerCodeFinderWidget Previous Předchozí Next Další Case Sensitive Rozlišovat malá a VELKÁ Whole words Celá slova <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Hledat zalomené QScrollBar Scroll here Left edge Top Right edge Bottom Page left Page up Page right Page down Scroll left Scroll up Scroll right Scroll down Line up Position Pozice Line down QSharedMemory %1: unable to set key on lock %1: create size is less then 0 %1: unable to lock %1: unable to unlock %1: already exists %1: doesn't exists %1: invalid size %1: neplatná velikost %1: out of resources %1: permission denied %1: přístup zamítnut %1: unknown error %2 %1: neznámá chyba %2 %1: unable to make key %1: key error %1: size query failed QShortcut Space Mezerník Esc Tab Backtab Backspace Return Enter Ins Insert Del Delete Pause Print SysReq Home End Left Vlevo Up Nahoru Right Vpravo Down Dolů PgUp PgDown CapsLock NumLock ScrollLock Menu Help Back Forward Stop Refresh Volume Down Volume Mute Volume Up Bass Boost Bass Up Bass Down Treble Up Treble Down Media Play Media Stop Media Previous Media Next Media Record Home Page Favorites Search Standby Open URL Launch Mail Launch Media Launch (0) Spustit (0) Launch (1) Spustit (1) Launch (2) Spustit (2) Launch (3) Spustit (3) Launch (4) Spustit (4) Launch (5) Spustit (5) Launch (6) Spustit (6) Launch (7) Spustit (7) Launch (8) Spustit (8) Launch (9) Spustit (9) Launch (A) Spustit (A) Launch (B) Spustit (B) Launch (C) Spustit (C) Launch (D) Spustit (D) Launch (E) Spustit (E) Launch (F) Spustit (F) Print Screen Page Up Page Down Caps Lock Num Lock Number Lock Scroll Lock Insert Delete Escape System Request Select Yes Ano No Ne Context1 Context2 Context3 Context4 Call Hangup Flip Ctrl Shift Alt Meta + F%1 QSlider Page left Page up Position Pozice Page right Page down QSocks5SocketEngine Connection to proxy refused Connection to proxy closed prematurely Proxy host not found Connection to proxy timed out Proxy authentication failed Proxy authentication failed: %1 SOCKS version 5 protocol error General SOCKSv5 server failure Connection not allowed by SOCKSv5 server TTL expired SOCKSv5 command not supported Address type not supported Unknown SOCKSv5 proxy error code 0x%1 Network operation timed out QSpinBox More Více Less Méně QSql Delete Smazat Delete this record? Smazat záznam? Yes Ano No Ne Insert Vložit Update Aktualizovat Save edits? Uložit úpravy? Cancel Zrušit Confirm Potvrdit Cancel your edits? Zrušit úpravy? QSslSocket Error creating SSL context (%1) Invalid or empty cipher list (%1) Cannot provide a certificate with no key, %1 Error loading local certificate, %1 Error loading private key, %1 Private key does not certificate public key, %1 Error creating SSL session, %1 Error creating SSL session: %1 Unable to write data: %1 Nelze zapisovat data: %1 Error while reading: %1 Chyba při čtení: %1 Error during SSL handshake: %1 QSystemSemaphore %1: out of resources %1: permission denied %1: přístup zamítnut %1: unknown error %2 %1: neznámá chyba %2 QTDSDriver Unable to open connection Nepodařilo se otevřít připojení Unable to use database Nepodařilo se použít databázi QTabBar Scroll Left Scroll Right QTcpServer Operation on socket is not supported Operace na soketu není podporována QTextControl &Undo &Zpět &Redo Zn&ovu Cu&t Vyjmou&t &Copy &Kopírovat Copy &Link Location Kopírovat &adresu odkazu &Paste &Vložit Delete Odstranit Select All Označit vše QToolButton Press Stisknout Open Otevřít QUdpSocket This platform does not support IPv6 Tato platforma nepodporuje IPv6 QUndoGroup Undo Zpět Redo Znovu QUndoModel <empty> <prázdný> QUndoStack Undo Zpět Redo Znovu QUnicodeControlCharacterMenu LRM Left-to-right mark RLM Right-to-left mark ZWJ Zero width joiner ZWNJ Zero width non-joiner ZWSP Zero width space LRE Start of left-to-right embedding RLE Start of right-to-left embedding LRO Start of left-to-right override RLO Start of right-to-left override PDF Pop directional formatting Insert Unicode control character QWebFrame Request cancelled Požadavek zrušen Request blocked Požadavek zablokován Cannot show URL URL nelze zobrazit Frame load interruped by policy change Cannot show mimetype Nelze zobrazit mimetype File does not exist Soubor neexistuje QWebPage Bad HTTP request Chybný HTTP požadavek %n file(s) number of chosen file %n souborů Submit default label for Submit buttons in forms on web pages Odeslat Submit Submit (input element) alt text for <input> elements with no alt, title, or value Odeslat Reset default label for Reset buttons in forms on web pages Resetovat This is a searchable index. Enter search keywords: text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' Choose File title for file button used in HTML forms Vyberte soubor No file selected text to display in file button used in HTML forms when no file is selected Není označen soubor Open in New Window Open in New Window context menu item Otevřít v novém okně Save Link... Download Linked File context menu item Uložit odkaz... Copy Link Copy Link context menu item Kopírovat odkaz Open Image Open Image in New Window context menu item Otevřít obrázek Save Image Download Image context menu item Uložit obrázek Copy Image Copy Link context menu item Kopírovat obrázek Open Frame Open Frame in New Window context menu item Otevřít rám Copy Copy context menu item Kopírovat Go Back Back context menu item Zpět Go Forward Forward context menu item Vpřed Stop Stop context menu item Reload Reload context menu item Znovunačíst Cut Cut context menu item Vyjmout Paste Paste context menu item Vložit No Guesses Found No Guesses Found context menu item Ignore Ignore Spelling context menu item Ignorovat Add To Dictionary Learn Spelling context menu item Přidat do slovníku Search The Web Search The Web context menu item Look Up In Dictionary Look Up in Dictionary context menu item Open Link Open Link context menu item Otevřít odkaz Ignore Ignore Grammar context menu item Ignorovat Spelling Spelling and Grammar context sub-menu item Show Spelling and Grammar menu item title Zobrazit pravopis a gramatiku Hide Spelling and Grammar menu item title Skrýt pravopis a gramatiku Check Spelling Check spelling context menu item Kontrola pravopisu Check Spelling While Typing Check spelling while typing context menu item Check Grammar With Spelling Check grammar with spelling context menu item Fonts Font context sub-menu item Písma Bold Bold context menu item Tučné Italic Italic context menu item Kurzíva Underline Underline context menu item Podtržené Outline Outline context menu item Obrys Direction Writing direction context sub-menu item Směr Text Direction Text direction context sub-menu item Směr textu Default Default writing direction context menu item Výchozí LTR Left to Right context menu item RTL Right to Left context menu item Inspect Inspect Element context menu item No recent searches Label for only item in menu that appears when clicking on the search field image, when no searches have been performed Nejsou poslední vyhledávání Recent searches label for first item in the menu that appears when clicking on the search field image, used as embedded menu title Poslední vyhledávání Clear recent searches menu item in Recent Searches menu that empties menu's contents Vymazat poslední vyhledávání Unknown Unknown filesize FTP directory listing item Neznámý %1 (%2x%3 pixels) Title string for images %1 (%2x%3 pixelů) Scroll here Left edge Top Right edge Bottom Page left Page up Page right Page down Scroll left Scroll up Scroll right Scroll down JavaScript Alert - %1 JavaScript Confirm - %1 JavaScript Prompt - %1 Move the cursor to the next character Move the cursor to the previous character Move the cursor to the next word Move the cursor to the previous word Move the cursor to the next line Move the cursor to the previous line Move the cursor to the start of the line Move the cursor to the end of the line Move the cursor to the start of the block Move the cursor to the end of the block Move the cursor to the start of the document Move the cursor to the end of the document Select all Vybrat vše Select to the next character Vybrat následující znak Select to the previous character Vybrat předchozí znak Select to the next word Vybrat následující slovo Select to the previous word Vybrat předchozí slovo Select to the next line Vybrat následující řádek Select to the previous line Vybrat předchozí řádek Select to the start of the line Select to the end of the line Select to the start of the block Select to the end of the block Select to the start of the document Select to the end of the document Delete to the start of the word Delete to the end of the word Insert a new paragraph Vložit nový odstavec Insert a new line Vložit nový řádek Web Inspector - %2 QWhatsThisAction What's This? Co je toto? QWidget * QWizard Go Back Zpět < &Back < &Zpět Continue Pokračovat &Next Další &Next > &Další > Commit Done Hotovo &Finish Do&končit Cancel Zrušit Help Nápověda &Help Nápo&věda QWorkspace Close Zavřít Minimize Minimalizovat Restore Down Obnovit dolů &Restore Obno&vit &Move Přes&unout &Size Veliko&st Mi&nimize Mi&nimalizovat Ma&ximize Ma&ximalizovat &Close &Zavřít Stay on &Top Zůs&tat navrchu Sh&ade Z&arolovat %1 - [%2] &Unshade &Vyrolovat QXml no error occurred nedošlo k chybě error triggered by consumer chyba zapříčiněná uživatelem unexpected end of file neočekávaný konec souboru more than one document type definition více než jedna definice typu dokumentu error occurred while parsing element při parsování prvku došlo k chybě tag mismatch nesprávný tag error occurred while parsing content při parsování obsahu došlo k chybě unexpected character neočekávaný znak invalid name for processing instruction chybné jméno instrukce procesu version expected while reading the XML declaration při čtení XML hlavičky je očekávána verze wrong value for standalone declaration špatná hodnota deklarace standardu encoding declaration or standalone declaration expected while reading the XML declaration při čtení XML hlavičky je očekávána deklarace kódování nebo standardu standalone declaration expected while reading the XML declaration při čtení XML hlavičky je očekávána deklarace standardu error occurred while parsing document type definition při parsování definice typu dokumentu došlo k chybě letter is expected je očekáváno písmeno error occurred while parsing comment při parsování komentáře došlo k chybě error occurred while parsing reference při parsování odkazu došlo k chybě internal general entity reference not allowed in DTD interní obecná entita není v DTD povolena external parsed general entity reference not allowed in attribute value reference na externě analyzované obecné entity nejsou v hodnotě atributu povoleny external parsed general entity reference not allowed in DTD reference na externě analyzované obecné entity nejsou v DTD povoleny unparsed entity reference in wrong context odkaz na neparsovanou entitu je ve špatném kontextu recursive entities rekurzivní entity error in the text declaration of an external entity chyba v textu deklarace externí entity QXmlStream Extra content at end of document. Invalid entity value. Invalid XML character. Sequence ']]>' not allowed in content. Encountered incorrectly encoded content. Namespace prefix '%1' not declared Illegal namespace declaration. Attribute redefined. Unexpected character '%1' in public id literal. Invalid XML version string. Unsupported XML version. The standalone pseudo attribute must appear after the encoding. %1 is an invalid encoding name. Encoding %1 is unsupported Není podporováno kódování %1 Standalone accepts only yes or no. Invalid attribute in XML declaration. Neplatný atribut v deklaraci XML. Premature end of document. Invalid document. Neplatný dokument. Expected Je očekáváno , but got ' , ale byl obdrženo ' Unexpected ' Nečekané ' Expected character data. Recursive entity detected. Start tag expected. NDATA in parameter entity declaration. XML declaration not at start of document. %1 is an invalid processing instruction name. Invalid processing instruction name. %1 is an invalid PUBLIC identifier. Invalid XML name. Chybný název XML. Opening and ending tag mismatch. Entity '%1' not declared. Reference to unparsed entity '%1'. Reference to external entity '%1' in attribute value. Invalid character reference. QtXmlPatterns An %1-attribute with value %2 has already been declared. An %1-attribute must have a valid %2 as value, which %3 isn't. %1 is an unsupported encoding. %1 contains octets which are disallowed in the requested encoding %2. The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. Network timeout. Vypršel časový limit sítě. Element %1 can't be serialized because it appears outside the document element. Attribute %1 can't be serialized because it appears at the top level. Year %1 is invalid because it begins with %2. Day %1 is outside the range %2..%3. Month %1 is outside the range %2..%3. Overflow: Can't represent date %1. Day %1 is invalid for month %2. Den %1 je chybný pro měsíc %2. Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; Time %1:%2:%3.%4 is invalid. Čas %1:%2:%3.%4 je chybný. Overflow: Date can't be represented. At least one component must be present. At least one time component must appear after the %1-delimiter. No operand in an integer division, %1, can be %2. The first operand in an integer division, %1, cannot be infinity (%2). The second operand in a division, %1, cannot be zero (%2). %1 is not a valid value of type %2. When casting to %1 from %2, the source value cannot be %3. Integer division (%1) by zero (%2) is undefined. Division (%1) by zero (%2) is undefined. Modulus division (%1) by zero (%2) is undefined. Dividing a value of type %1 by %2 (not-a-number) is not allowed. Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. A value of type %1 cannot have an Effective Boolean Value. Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. Value %1 of type %2 exceeds maximum (%3). Value %1 of type %2 is below minimum (%3). A value of type %1 must contain an even number of digits. The value %2 does not. %1 is not valid as a value of type %2. Ambiguous rule match. Operator %1 cannot be used on type %2. Operator %1 cannot be used on atomic values of type %2 and %3. The namespace URI in the name for a computed attribute cannot be %1. The name for a computed attribute cannot have the namespace URI %1 with the local name %2. Type error in cast, expected %1, received %2. When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. No casting is possible with %1 as the target type. It is not possible to cast from %1 to %2. Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. It's not possible to cast the value %1 of type %2 to %3 Failure when casting from %1 to %2: %3 A comment cannot contain %1 A comment cannot end with a %1. No comparisons can be done involving the type %1. Operator %1 is not available between atomic values of type %2 and %3. In a namespace constructor, the value for a namespace cannot be an empty string. The prefix must be a valid %1, which %2 is not. The prefix %1 cannot be bound. Only the prefix %1 can be bound to %2 and vice versa. An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. Circularity detected A library module cannot be evaluated directly. It must be imported from a main module. No template by name %1 exists. A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. A positional predicate must evaluate to a single numeric value. The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. The data of a processing instruction cannot contain the string %1 No namespace binding exists for the prefix %1 No namespace binding exists for the prefix %1 in %2 %1 is an invalid %2 The parameter %1 is passed, but no corresponding %2 exists. The parameter %1 is required, but no corresponding %2 is supplied. %1 takes at most %n argument(s). %2 is therefore invalid. %1 requires at least %n argument(s). %2 is therefore invalid. The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. %1 is not a valid XML 1.0 character. The first argument to %1 cannot be of type %2. The root node of the second argument to function %1 must be a document node. %2 is not a document node. If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. %1 was called. %1 must be followed by %2 or %3, not at the end of the replacement string. In the replacement string, %1 must be followed by at least one digit when not escaped. In the replacement string, %1 can only be used to escape itself or %2, not %3 %1 matches newline characters %1 and %2 match the start and end of a line. Matches are case insensitive Whitespace characters are removed, except when they appear in character classes %1 is an invalid regular expression pattern: %2 %1 is an invalid flag for regular expressions. Valid flags are: If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. It will not be possible to retrieve %1. The default collection is undefined %1 cannot be retrieved The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). A zone offset must be in the range %1..%2 inclusive. %3 is out of range. %1 is not a whole number of minutes. The URI cannot have a fragment Required cardinality is %1; got cardinality %2. The item %1 did not match the required type %2. Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. The attribute %1 must appear on element %2. The element with local name %1 does not exist in XSL-T. The variable %1 is unused A construct was encountered which only is allowed in XQuery. %1 is an unknown schema type. A template by name %1 has already been declared. %1 is not a valid numeric literal. Only one %1 declaration can occur in the query prolog. The initialization of variable %1 depends on itself No variable by name %1 exists Version %1 is not supported. The supported XQuery version is 1.0. The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. No function with signature %1 is available A default namespace declaration must occur before function, variable, and option declarations. Namespace declarations must occur before function, variable, and option declarations. Module imports must occur before function, variable, and option declarations. The keyword %1 cannot occur with any other mode name. The value of attribute %1 must of type %2, which %3 isn't. It is not possible to redeclare prefix %1. The prefix %1 can not be bound. By default, it is already bound to the namespace %2. Prefix %1 is already declared in the prolog. The name of an option must have a prefix. There is no default namespace for options. The Schema Import feature is not supported, and therefore %1 declarations cannot occur. The target namespace of a %1 cannot be empty. The module import feature is not supported A variable by name %1 has already been declared. No value is available for the external variable by name %1. A stylesheet function must have a prefixed name. The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 A function already exists with the signature %1. No external functions are supported. All supported functions can be used directly, without first declaring them as external An argument by name %1 has already been declared. Every argument name must be unique. When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. In an XSL-T pattern, function %1 cannot have a third argument. In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. %1 is an invalid template mode name. The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. None of the pragma expressions are supported. Therefore, a fallback expression must be present Each name of a template parameter must be unique; %1 is duplicated. The %1-axis is unsupported in XQuery No function by name %1 is available. The namespace URI cannot be the empty string when binding to a prefix, %1. %1 is an invalid namespace URI. It is not possible to bind to the prefix %1 Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). Two namespace declaration attributes have the same name: %1. The namespace URI must be a constant and cannot use enclosed expressions. An attribute by name %1 has already appeared on this element. A direct element constructor is not well-formed. %1 is ended with %2. The name %1 does not refer to any schema type. %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. %1 is not an atomic type. Casting is only possible to atomic types. %1 is not a valid name for a processing-instruction. %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. The name of an extension expression must be in a namespace. Element %1 is not allowed at this location. Text nodes are not allowed at this location. Parse error: %1 Chyba při parsování: %1 The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. Running an XSL-T 1.0 stylesheet with a 2.0 processor. Unknown XSL-T attribute %1. Neznámý XSL-T atribut %1. Attribute %1 and %2 are mutually exclusive. In a simplified stylesheet module, attribute %1 must be present. If element %1 has no attribute %2, it cannot have attribute %3 or %4. Element %1 must have at least one of the attributes %2 or %3. At least one mode must be specified in the %1-attribute on element %2. Element %1 must come last. At least one %1-element must occur before %2. Only one %1-element can appear. At least one %1-element must occur inside %2. When attribute %1 is present on %2, a sequence constructor cannot be used. Element %1 must have either a %2-attribute or a sequence constructor. When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. Element %1 cannot have children. Element %1 cannot have a sequence constructor. The attribute %1 cannot appear on %2, when it is a child of %3. A parameter in a function cannot be declared to be a tunnel. This processor is not Schema-aware and therefore %1 cannot be used. Top level stylesheet elements must be in a non-null namespace, which %1 isn't. The value for attribute %1 on element %2 must either be %3 or %4, not %5. Attribute %1 cannot have the value %2. The attribute %1 can only appear on the first %2 element. At least one %1 element must appear as child of %2. empty prázdný zero or one nula nebo jedna exactly one přávě jedna one or more jedna nebo více zero or more nula nebo více Required type is %1, but %2 was found. Promoting %1 to %2 may cause loss of precision. The focus is undefined. It's not possible to add attributes after any other kind of node. An attribute by name %1 has already been created. Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. VolumeSlider Muted Ztlumeno Volume: %1% Hlasitost: %1% qutim-0.2.0/languages/cs_CZ/sources/youtubedownload.ts0000644000175000017500000002764211270772612024562 0ustar euroelessareuroelessar urlpreviewPlugin Download Stáhnout Add download links for YouTube urls Přidat stahovací odkazy pro URL adresy YouTube urlpreviewSettingsClass Settings Nastavení General Obecné Enable on incoming messages Povolit na příchozí zprávy Enable on outgoing messages Povolit na odchozí zprávy Info template: Šablona informací: Macros: %URL% - Clip address Makra: %URL% - adresy klipů About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">YouTube download link qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Adds link for downloading clips</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:saboteur@saboteur.mp"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Evgeny Soynov</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Template:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler@co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Alexander Kazarin</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">YouTube download link qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Přidejte odkazy pro stahování klipů</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:saboteur@saboteur.mp"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Evgeny Soynov</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Šablona:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler@co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Alexander Kazarin</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/cs_CZ/sources/kde-integration.ts0000644000175000017500000001774011270772612024420 0ustar euroelessareuroelessar KDENotificationLayer Open chat Otevřít chatovací místnost Close Zavřít KdeSpellerLayer Spell checker Kontrola pravopisu KdeSpellerSettings Form Select dictionary: Vybrat slovník: Autodetect of language Rozpoznat jazyk QObject System message from %1: Systémová zpráva od %1: Message from %1: Zpráva od %1: %1 is typing %1 píše Blocked message from %1 Zablokovaná zpráva od %1 Custom message for %1 Vlastní zpráva pro %1 Notifications Oznamování %1 has birthday today!! %1 má dnes narozeniny! plugmanSettings Form Settings Nastavení Installed plugins: Nainstalované pluginy: Install from internet Instalovat z internetu Install from file Instalovat ze souboru About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Simple qutIM plugin</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Author: </span>Sidorov Aleksey</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Jednoduchý qutIM plugin</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Autor: </span>Sidorov Aleksey</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Kontakty: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html> qutim-0.2.0/languages/cs_CZ/sources/weather.ts0000644000175000017500000002200711270772612022763 0ustar euroelessareuroelessar weatherSettingsClass Settings Nastavení Cities Obce Add Přidat Delete city Odstranit obec Refresh period: Obnovovací doba: Show weather in the status row Zobrazit počasí ve stavovém řádku <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Weather qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Weather qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> Search Hledat Enter city name Zadejte název obce About O... qutim-0.2.0/languages/cs_CZ/sources/plugman.ts0000644000175000017500000006230511270772612022774 0ustar euroelessareuroelessar ChooseCategoryPage Select art Vybrat grafiku Select core Vybrat jádro Library (*.dll) Knihovna (*.dll) Library (*.dylib *.bundle *.so) Knihovna (*.dylib *.bundle *.so) Library (*.so) Knihovna (*.so) Select library Vybrat knihovnu WizardPage Package category: Kategorie balíčku: Art Grafika Core Jádro Lib Knihovna Plugin Plugin ... ChoosePathPage WizardPage ... ConfigPackagePage WizardPage Name: Název: * Version: Verze: Category: Kategorie: Art Grafika Core Jádro Lib Knihovna Plugin Type: Typ: Short description: Krátký popis: Url: URL: Author: Autor: License: Licence: Platform: Platforma: Package name: Název balíčku: QObject Package name is empty Název balíčku je prázdný Package type is empty Typ balíčku je prázdný Invalid package version Neplatná verze balíčku Wrong platform Špatná platforma manager Plugman Not yet implemented Není implementováno Apply Použít Actions Akce find najít plugDownloader bytes/sec bytů/s kB/s MB/s Downloading: %1%, speed: %2 %3 Stahování: %1%, rychlost: %2 %3 plugInstaller Need restart! Vyžadován restart! Unable to open archive: %1 Nelze otevřít archiv: %1 warning: trying to overwrite existing files! Upozornění: Zkoušíte přepsat existující soubory! Unable to extract archive: %1 to %2 Nepodařilo se rozbalit archiv: %1 do %2 Installing: Instaluji: Unable to update package %1: installed version is later Nelze aktualizovat balíček %1: nainstalovaná verze je pozdější Unable to install package: %1 Nelze nainstalovat balíček: %1 Invalid package: %1 Neplatný balíček: %1 Removing: Odstraňuji: plugItemDelegate isUpgradable aktualizace je k dispozici isInstallable lze nainstalovat isDowngradable lze downgradovat installed nainstalováno Unknown Neznámý Install Instalovat Remove Odstranit Upgrade Aktualizovat plugMan Manage packages Správce balíčků plugManager Actions Akce Update packages list Aktualizovat seznam balíčků Upgrade all Aktualizovat vše Revert changes Vrátit změny plugPackageModel Packages Balíčky plugXMLHandler Unable to open file Nelze otevřít soubor Unable to set content Nelze nastavit obsah Unable to write file Nelze zapsat soubor Can't read database. Check your pesmissions. Nelze číst databáze. Zkontrolujte vaše práva. Broken package database Rozbitá databáze balíčku unable to open file nelze otevřít soubor unable to set content nelze nastavit obsah plugmanSettings Form Settings Nastavení Not yet implemented Není implementováno group packages skupina balíčků <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mirror list</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Seznam mirorů</span></p></body></html> Add Přidat About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">simple qutIM extentions manager.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Contacts: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">jednoduchý qutIM správce rozšíření.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Kontakty: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html> Name Název Description Popis Url URL qutim-0.2.0/languages/cs_CZ/sources/growlnotification.ts0000644000175000017500000002070411231564176025070 0ustar euroelessareuroelessar GrowlNotificationLayer QutIM message qutIM zpráva Growl Select sound file Vyberte zvukový soubor All files (*.*) Všechny soubory (*.*) GrowlSettings Form Pop-ups Oznamovací okna Enabled Zapnuto Notify about status changes Oznamovat změny stavu Notify when user came offline Oznamovat pokud uživatel přešel do offline Notify when user came online Oznamovat pokud uživatel přešel do online Notify when contact is typing Oznamovat pokud kontakt píše Notify when message is recieved Oznámit pokud přijde zpráva Notify about birthdays Oznamovat narozeniny Notify when message is blocked Oznamovat pokud je zpráva zablokována Notify about custom requests Oznamovat vlastní žádosti Sounds Zvuky ... System Event Systémová událost Incoming message Příchozí zpráva Contact online Kontakt online Contact offline Kontakt offline Status change Změna stavu Birthay Narozeniny reset resetovat Startup Spuštění Outgoing message Odchozí zpráva QObject %1 Typing Píše Blocked message : %1 Zablokovaná zpráva : %1 has birthday today!! má dnes narozeniny! qutim-0.2.0/languages/cs_CZ/sources/massmessaging.ts0000644000175000017500000002204611270772612024170 0ustar euroelessareuroelessar Dialog Multiply Sending Hromadné odesílání Items Položky Message Zpráva 15 Interval (in seconds): Interval (v sekundách): <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Notes:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">You can use the templates:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Name of the recipient </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Name of the sender (profile name)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Current time</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Poznámky:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Lze použít tyto šablony:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Jméno příjemce </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Jméno odesílatele (název profilu)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Aktuální čas</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TextLabel</span></p></body></html> Actions Akce Stop Přerušit Send Odeslat Manager Accounts Účty Unknown Neznámý Error: message is empty Chyba: zpráva je prázdná Error: unknown account : %1 Chyba: neznámý účet : %1 Messaging Multiply Sending Hromadné odesílání MessagingDialog Actions Akce Load buddy list Načíst seznam přátel Save buddy list Uložit seznam přátel Multiply sending: all jobs finished Hromadné odesílání: vše dokončeno Load custom buddy list Načíst vlastní seznam přátel Sending message to %1: %v/%m Odesílání zprávy na %1: %v/%m Sending message to %1 Odesílání zprávy na %1 Sending message to %1 (%2/%3), time remains: %4 Odesílání zprávy na %1 (%2/%3), zbývající čas: %4 qutim-0.2.0/languages/cs_CZ/sources/protocolicon.ts0000644000175000017500000000205011270772612024032 0ustar euroelessareuroelessar PluginSettings Select protocol icon theme pack: Zvolte balíček motivů ikon protokolů: <Default> <Výchozí> Change account icon Změnit ikonu účtu Change contact icon Změnit ikonu kontaktu qutim-0.2.0/languages/cs_CZ/sources/msn.ts0000644000175000017500000001426411270772612022127 0ustar euroelessareuroelessar EdditAccount Editing %1 Upravování %1 Form General Obecné Password: Heslo: Autoconnect on start Automaticky připojit po spuštění Statuses Stavy Online Busy Zaneprázdněn Idle Nečinný Will be right back Vrátím se Away Pryč On the phone Na telefonu Out to lunch Na obědě Don't show autoreply dialog Nezobrazovat autoreply dialog OK Apply Použít Cancel Zrušit LoginForm Form E-mail: Password: Heslo: Autoconnect on start Automaticky připojit MSNConnStatusBox Online Busy Zaneprázdněn Idle Nečinný Will be right back Vrátím se Away Pryč On the phone Na telefonu Out to lunch Na obědě Invisible Neviditelný Offline MSNContactList Without group Bez skupin qutim-0.2.0/languages/cs_CZ/sources/chess.ts0000644000175000017500000002061011270772612022427 0ustar euroelessareuroelessar Drawer Error moving Chybný tah You cannot move this figure because the king is in check Nelze přesunout tato figurka, protože král je v šachu To castle K věži Do you want to castle? Provést rošádu? Yes Ano No Ne FigureDialog What figure should I set? Jakou figurku chcete nastavit? GameBoard QutIM chess plugin qutIM chess plugin White game with Bílá hraje s Black game with Černá hraje s Your turn. Táhneš ty. White game from Bílá hraje z Black game from Černá hraje z Opponent turn. Táhne protivník. Your opponent has closed the game Protivník zavřel hru End the game Konec hry Want you to end the game? You will lose it Chcete ukončit hru? Prohrajete B K C Q Error! Chyba! Save image Uložit obrázek Do you want to save the image? Chcete uložit obrázek? Yes, save Ano, uložit No, don't save Ne, neukládat Game over You scored the game Vyhrál jste You have a mate. You lost the game. Máte mat. Prohrál jste. You have a stalemate Máte pat chessPlugin Play chess Hrát šachy QutIM chess plugin invites you to play chess. Accept? vás zve k hraní šachů. Přijmout? , with reason: " , s odůvodněním: " don't accept your invite to play chess Nepřijímá vaši pozvánku ke hře šachy gameboard QutIM chess plugin Your moves: Vaše tahy: Opponent moves: Protivníkovy tahy: Game chat Herní konverzace qutim-0.2.0/languages/cs_CZ/sources/fmtune.ts0000644000175000017500000005325411271546102022624 0ustar euroelessareuroelessar EditStations Edit stations Upravit stanice Name: Název: Genre: Styl: Language: Jazyk: URL: Format: Formát: Stream URL: URL streamu: Image: Obrázek: Save Uložit Delete stream Ostranit stream Add stream Přidat stream Down Dolů Up Nahoru Add station Přidat stanici Delete station Odstranit stanici Import Export Format Formát URL <new> <nové> Delete station? Odstranit stanici? Delete stream? Odstranit stream? Import... Export... FMtune XML (*.ftx) All files (*.*) Všechny soubory (*.*) Equalizer Equalizer Ekvalizér FastAddStation stream Fast add station Rychlé přidání stanice Name: Název: Stream URL: URL streamu: ImportExport Fast find: Rychlé najítí: Finish Dokončit Info Information Informace Stream: Radio: Rádio: Song: Písnička: Time: Čas: Bitrate: Datový tok: Cover: Obal: QMessageBox An incorrect version of BASS was loaded. Byla načtena nesprávná verze BASS. Can't initialize device Nelze inicializovat zařízení Recording Recording Nahrávání Stop Pause Pauza Record Record fmtunePlugin Radio on Zapnout rádio Radio off Vypnout rádio Copy song name Kopírovat název písničky Equalizer Ekvalizér Recording Nahrávání Volume Hlasitost %1% Mute Ztlumit Edit stations Upravit stanice Fast add station Rychlé přidání stanice Information Informace fmtuneSettings <default> <výchozí> fmtuneSettingsClass Settings Nastavení General Obecné Shortcuts Klávesové zkratky Turn on/off radio: Zapnout/vypnout rádio: Volume up: Hlasitost - zesílit: Volume down: Hlasitost - zeslabit: Volume mute: Hlasitost - ztlumit: Activate global keyboard shortcuts Aktivovat globální klávesové zkratky Devices Zařízení Output device: Výstupní zařízení: Plugins Pluginy About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html> qutim-0.2.0/languages/cs_CZ/sources/yandexnarod.ts0000644000175000017500000005223311270772612023644 0ustar euroelessareuroelessar requestAuthDialogClass Authorization Autorizace Login: Přihlašovací jméno: Password: Heslo: Remember Pamatovat Captcha: about:blank uploadDialog Uploading Nahrávám Done Hotovo uploadDialogClass Uploading... Nahrávám... Upload started. Nahrávání začalo. File: Soubor: Progress: Postup: Elapsed time: Uplynulý čas: Speed: Rychlost: Cancel Zrušit yandexnarodManage Yandex.Narod file manager Správce souborů Yandex.Narod Choose file Vyberte soubor yandexnarodManageClass Form Get Filelist Načíst seznam souborů Upload File Nahrát soubor Actions: Činnosti: Clipboard Schránka Delete File Odstranit soubor line1 line2 řádek1 řádek2 Close Zavřít Files list: Seznam souborů: New Item Nová položka yandexnarodNetMan Authorizing... Autorizování... Canceled Zrušeno Authorizing OK Autorizace OK Downloading filelist... Stahování seznamu souborů... Deleting files... Odstraňování souborů... Getting storage... Načítání skladu... File size is null Velikost souboru je nulová Starting upload... Začínání nahrávání... Can't read file Nelze načíst soubor Can't get storage Nelze načíst sklad Verifying... Ověřování... Authorization captcha request Vyžadována captcha autorizace Authorization failed Autorizace selhala Filelist downloaded (%1 files) Seznam souborů stažen (%1 souborů) File(s) deleted Soubor(ů) odstraněno Uploaded successfully Úspěšně nahráno Verifying failed Ověřování selhalo yandexnarodPlugin Send file via Yandex.Narod Poslat soubor přes Yandex.Narod Manage Yandex.Narod files Správce souborů Yandex.Narod Choose file for Vybrat soubor pro File sent Soubor odeslán yandexnarodSettingsClass Settings Nastavení Password Heslo Login Přihlašovací jméno Test Authorization Test autorizace status stav <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p></body></html> Send file template Poslat šablonu souboru %N - file name; %U - file URL; %S - file size %N - název souboru; %U - URL souboru; %S - velikost souboru About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">File exchange via </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"> service</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Výměna souborů přes službu </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"></span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> qutim-0.2.0/languages/cs_CZ/sources/libnotify.ts0000644000175000017500000000437511257577442023344 0ustar euroelessareuroelessar LibnotifyLayer System message Systémová zpráva %1 Blocked message from %1 Zablokována zpráva od %1 has birthday today! má dnes narozeniny! QObject System message from %1: <br /> Systémová zpráva od %1: <br /> Message from %1:<br />%2 Zpráva od %1:<br />%2 %1</b><br /> is typing %1</b><br /> píše Blocked message from<br /> %1: %2 Zablokovaná zpráva od<br /> %1: %2 %1 has birthday today!! %1 má dnes narozeniny! qutim-0.2.0/languages/cs_CZ/sources/connectioncheck.ts0000644000175000017500000004246211270772612024470 0ustar euroelessareuroelessar connectioncheckSettings Settings Nastavení Plugin status: Stav pluginu: Enabled Zapnuto Disabled Vypnuto Check method: Metoda kontroly: Route table Směrovací tabulka Ping Example: www.exgraphics.info Příklad: www.exgraphics.info URL2Ping: Ping na URL: Check period (sec.): Kontrolovat každých (sekund): About O... <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Serif'; font-size:11pt;"> </span><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7.1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" font-family:'Liberation Serif'; font-size:11pt; text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URL2Ping added by: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Evgeniy 'Dexif' Spitsyn</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">www.ExGraphics.info</p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Serif'; font-size:11pt;"> </span><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7.1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" font-family:'Liberation Serif'; font-size:11pt; text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URL2Ping přidal: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Evgeniy 'Dexif' Spitsyn</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">www.ExGraphics.info</p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Liberation Serif'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p></body></html> qutim-0.2.0/languages/cs_CZ/sources/icq.ts0000644000175000017500000074310311270772612022107 0ustar euroelessareuroelessar AccountEditDialog Editing %1 Upravování %1 AddAccountFormClass AddAccountForm Přidat účet UIN: Password: Heslo: Save password Uložit heslo Author Ruslan Nigmatullin ConnectionError Invalid nick or password Chybná přezdívka nebo heslo Service temporarily unavailable Služba dočasně nedostupná Incorrect nick or password Chybná přezdívka nebo heslo Mismatch nick or password Záměna přezdívky nebo hesla Internal client error (bad input to authorizer) Vnitřní chyba klienta (špatný vstup autorizace) Invalid account Neplatný účet Deleted account Smazaný účet Expired account Vypršený účet No access to database Není přístupná databáze No access to resolver Není možný synchronní přenos Invalid database fields Chybné databázové pole Bad database status Chybný stav databáze Bad resolver status Chybný stav synchronizace Internal error Vnitřní chyba Service temporarily offline Služba dočasně offline Suspended account Deaktivovaný účet DB send error Chybná odpověď databáze DB link error Chyba spojení s databází Reservation map error Chyba vyhrazení mapování Reservation link error Chyba vyhrazeného spojení The users num connected from this IP has reached the maximum Počet připojených uživatelů z této IP adresy překročilo maximum The users num connected from this IP has reached the maximum (reservation) Počet připojených uživatelů z této IP adresy překročilo maximum (rezervace) Rate limit exceeded (reservation). Please try to reconnect in a few minutes Limit požadavků byl překročen (rezervace). Zkuste se znovu připojit za pár minut User too heavily warned Uživatel má příliš mnoho varování Reservation timeout Časový limit rezervace You are using an older version of ICQ. Upgrade required Používáte starší verzi protokolu ICQ. Je potřeba aktualizace You are using an older version of ICQ. Upgrade recommended Používáte starší verzi protokolu. Doporučuje se aktualizace Rate limit exceeded. Please try to reconnect in a few minutes Limit požadavků byl překročen. Zkuste se znovu připojit za pár minut Can't register on the ICQ network. Reconnect in a few minutes Nelze se registrovat do ICQ sítě. Zkuste to za pár minut Invalid SecurID Neplatné SecurID Account suspended because of your age (age < 13) Účet byl deaktivován kvůli tvému věku (mladší 13ti let) Connection Error Chyba připojení ContactSettingsClass ContactSettings Nastavení kontaktu Show contact xStatus icon Zobrazit xStatus ikonu u kontaktu Show birthday/happy icon Zobrazit narozeninovou ikonu Show not authorized icon Zobrazit ikonu pro neautorizovaný kontakt Show "visible" icon if contact in visible list Zobrazit ikonu pro kontakt v seznamu viditelných Show "invisible" icon if contact in invisible list Zobrazit ikonu pro kontakt v seznamu neviditelných Show "ignore" icon if contact in ignore list Zobrazit ikonu pro kontakt v seznamu ignorovaných Show contact's xStatus text in contact list Zobrazit xStatus kontaktu v seznamu kontaktů FileTransfer Send file Poslat soubor Plugin Oscar Module-based realization of Oscar protocol Modul založen na Oscar protokolu ICQ Module-based realization of ICQ protocol Modul založen na ICQ protokolu QObject Open File Otevřít soubor All files (*) Všechny soubory (*.*) ICQ General ICQ Obecné Statuses Stavy Contacts Kontakty <font size='2'><b>External ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Vnější IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Internal ip:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Vnitřní IP:</b> %1.%2.%3.%4<br></font> <font size='2'><b>Online time:</b> %1d %2h %3m %4s<br> <font size='2'><b>Doba připojení:</b> %1d %2h %3m %4s<br> <b>Signed on:</b> %1<br> <b>Přihlášený od:</b> %1<br> <font size='2'><b>Away since:</b> %1<br> <font size='2'><b>Pryč od:</b> %1<br> <font size='2'><b>N/A since:</b> %1<br> <font size='2'><b>Nepřítomen od:</b> %1<br> <b>Reg. date:</b> %1<br> <b>Datum registrace:</b> %1<br> <b>Possible client:</b> %1</font> <b>Pravděpodobný klient:</b> %1</font> <font size='2'><b>Last Online:</b> %1</font> <font size='2'><b>Naposled přihlášený:</b> %1</font> <b>External ip:</b> %1.%2.%3.%4<br> <b>Externí IP:</b> %1.%2.%3.%4<br> <b>Internal ip:</b> %1.%2.%3.%4<br> <b>Interní IP:</b> %1.%2.%3.%4<br> <b>Online time:</b> %1d %2h %3m %4s<br> <b>Doba připojení:</b> %1d %2h %3m %4s<br> <b>Away since:</b> %1<br> <b>Pryč od:</b> %1<br> <b>N/A since:</b> %1<br> <b>Nepřítomen od:</b> %1<br> <b>Possible client:</b> %1<br> <b>Pravděpodobný klient:</b> %1<br> Task Author Autor acceptAuthDialogClass acceptAuthDialog Autorizace Authorize Autorizovat Decline Odmítnout accountEdit Form OK Apply Použít Cancel Zrušit Icq settings Nastavení ICQ Password: Heslo: AOL expert settings AOL nastavení pro experty Client id: ID klienta: Client major version: Majoritní verze klienta: Client minor version: Minoritní verze klienta: Client lesser version: Lesser verze klienta: Client build number: Číslo sestavení klienta: Client id number: ID číslo klienta: Client distribution number: Distribuční číslo klienta: Seq first id: Sekvence prvního ID: Server Host: Hostitel: Port: login.icq.com Save password: Uložit heslo: Autoconnect on start Automaticky připojit po spuštění Save my status on exit Uložit stav při ukončení Keep connection alive Udržovat připojení Secure login Zabezpečené přihlášení Proxy connection Připojení proxy Listen port for file transfer: Naslouchací port pro přenos souborů: Proxy Type: Typ: None není HTTP SOCKS 5 Authentication Ověření User name: Jméno: addBuddyDialog Move Přesunout Add %1 Přidat %1 addBuddyDialogClass addBuddyDialog Přidat buddy Local name: Místní název: Group: Skupina: Add Přidat addRenameDialogClass addRenameDialog Name: Jméno: OK Return Vrátit closeConnection Invalid nick or password Chybná přezdívka nebo heslo Service temporarily unavailable Služba dočasně nedostupná Incorrect nick or password Chybná přezdívka nebo heslo Mismatch nick or password Záměna přezdívky nebo hesla Internal client error (bad input to authorizer) Vnitřní chyba klienta (špatný vstup autorizace) Invalid account Neplatný účet Deleted account Smazaný účet Expired account Vypršená platnost účtu No access to database Není přístupná databáze No access to resolver Není možný synchronní přenos Invalid database fields Chybné databázové pole Bad database status Chybný stav databáze Bad resolver status Chybný stav synchronizace Internal error Vnitřní chyba Service temporarily offline Služba dočasně offline Suspended account Deaktivovaný účet DB send error Chybná odpověď databáze DB link error Chyba spojení s databází Reservation map error Chyba vyhrazení mapování Reservation link error Chyba vyhrazeného spojení The users num connected from this IP has reached the maximum Počet připojených uživatelů z této IP adresy překročilo maximum The users num connected from this IP has reached the maximum (reservation) Počet připojených uživatelů z této IP adresy překročilo maximum (rezervace) Rate limit exceeded (reservation). Please try to reconnect in a few minutes Limit požadavků byl překročen (rezervace). Zkuste se znovu připojit za pár minut User too heavily warned Uživatel má příliš mnoho varování Reservation timeout Časový limit rezervace You are using an older version of ICQ. Upgrade required Používáte starší verzi protokolu ICQ. Je potřeba aktualizace You are using an older version of ICQ. Upgrade recommended Používáte starší verzi protokolu. Doporučuje se aktualizace Rate limit exceeded. Please try to reconnect in a few minutes Limit požadavků byl překročen. Zkuste se znovu připojit za pár minut Can't register on the ICQ network. Reconnect in a few minutes Nelze se registrovat do ICQ sítě. Zkuste to za pár minut Invalid SecurID Neplatné SecurID Account suspended because of your age (age < 13) Účet byl deaktivován kvůli tvému věku (mladší 13ti let) Connection Error Chyba připojení Another client is loggin with this uin Jiný klient je přihlášen s tímto UIN contactListTree is online je online is away je pryč is dnd nepřeje si být rušen is n/a je pryč is occupied je zaneprázdněn is free for chat je připraven na pokec is invisible je neviditelný is offline je offline at home je doma at work je v práci having lunch obědvá is evil je naštvaný in depression je v depresi %1 is reading your away message %1 čte vaši stavovou zprávu %1 is reading your x-status message %1 čte vaši rozšířenou stavovou zprávu Password is successfully changed Heslo bylo úspěšně změněno Password is not changed Heslo nebylo změněno Add/find users Přidat/najít uživatele Send multiple Poslat hromadně Privacy lists Nastavení soukromí View/change my details Ukázat/změnit mé detaily Change my password Změnit mé heslo You were added Byl jsi přidán New group Nová skupina Rename group Přejmenovat skupinu Delete group Odstranit skupinu Send message Poslat zprávu Contact details Detaily kontaktu Copy UIN to clipboard Kopírovat UIN do schránky Contact status check Zjistit stav kontaktu Message history Historie konverzace Read away message Přečíst zprávu stavu Rename contact Přejmenovat kontakt Delete contact Odstranit kontakt Move to group Přesunout do skupiny Add to visible list Přidat do seznamu viditelných Add to invisible list Přidat do seznamu neviditelných Add to ignore list Přidat do seznamu ignorovaných Delete from visible list Odstranit ze seznamu viditelných Delete from invisible list Odstranit ze seznamu neviditelných Delete from ignore list Odstranit ze seznamu ignorovaných Authorization request Vyžadována autorizace Add to contact list Přidat do seznamu kontaktů Allow contact to add me Dovolit kontaktu přidat si mě Remove myself from contact's list Odebrat mne ze seznamu uživatele Read custom status Přečíst vlastní stav Edit note Upravit poznámku Create group Vytvořit skupinu Delete group "%1"? Odstranit skupinu "%1"? %1 away message %1 zpráva stavu Delete %1 Odstranit %1 Move %1 to: Přesunout %1 do: Accept authorization from %1 Přijmout autorizaci od %1 Authorization accepted Autorizace přijata Authorization declined Autorizace zamítnuta %1 xStatus message %1 xStatus zpráva Contact does not support file transfer Kontakt nepodporuje přenos souborů customStatusDialog Angry Zlost Taking a bath Koupání Tired Unavený Party Párty Drinking beer Pití piva Thinking Přemýšlím Eating Jím Watching TV Sleduji TV Meeting Na schůzce Coffee Kafé Listening to music Poslouchám hudbu Business Obchod Shooting Fotím Having fun Zábava On the phone Na telefonu Gaming Hraju hru Studying Studium Shopping Na nákupu Feeling sick Není mi dobře Sleeping Spím Surfing Surfuji Browsing Brouzdání po internetu Working V práci Typing Píšu Picnic Piknik On WC Na WC To be or not to be Být či nebýt PRO 7 Love Láska Sex Smoking Kouřím Cold Zima Crying Brečím Fear Strach Reading Čtu Sport Sport In tansport Jedu ? customStatusDialogClass Custom status Vlastní stav Choose Vybrat Cancel Zrušit Set birthday/happy flag Nastavit narozeninovou ikonu deleteContactDialogClass deleteContactDialog Odstranit kontakt Contact will be deleted. Are you sure? Kontakt bude odstraněn. Jste si jist? Delete contact history Odstranit historii kontaktu Yes Ano No Ne fileRequestWindow Save File Uložit soubor All files (*) Všechny soubory (*.*) fileRequestWindowClass File request Žádost o soubor From: Od: IP: File name: Název souboru: File size: Velikost souboru: Accept Přijmout Decline Odmítnout fileTransferWindow File transfer: %1 Přenos souboru: %1 Waiting... Čekání... Declined by remote user Odmítnuto vzdáleným uživatelem Accepted Přijato Sending... Odesílání... Done Hotovo Getting... Přijímání... /s B KB kB MB GB fileTransferWindowClass File transfer Přenos souboru Current file: Aktuální soubor: Done: Hotovo: Speed: Rychlost: File size: Velikost: Files: Soubory: 1/1 Last time: Uplynulý čas: Remained time: Zbývající čas: Sender's IP: IP odesílatele: Status: Stav: Open Otevřít Cancel Zrušit icqAccount Online Offline Free for chat Připraven na pokec Away Pryč NA Nepřítomen Occupied Zaneprázdněn DND Nerušit Invisible Neviditelný Lunch Obědvám Evil Naštvaný Depression V depresi At Home Doma At Work V práci Custom status Vlastní stav Privacy status Nastavení soukromí Visible for all Viditelný pro všechny Visible only for visible list Viditelný pouze pro seznam viditelných Invisible only for invisible list Neviditelný pouze pro seznam neviditelných Visible only for contact list Viditelný pouze pro seznam kontaktů Invisible for all Neviditelný pro všechny Additional Doplňující is reading your away message čte zprávy stavu is reading your x-status message čte zprávu rozšířeného stavu icqSettingsClass icqSettings Nastavení ICQ Main Hlavní Don't send requests for avatarts Neposílat požadavky na avatary Reconnect after disconnect Obnovit připojení po odpojení Client ID: ID klienta: qutIM ICQ 6 ICQ 5.1 ICQ 5 ICQ Lite 4 ICQ 2003b Pro ICQ 2002/2003a Mac ICQ QIP 2005 QIP Infium - Protocol version: Verze protokolu: Client capability list: Seznam schopností klienta: Advanced Pokročilé Account button and tray icon Tlačítko účtu a tray ikona Show main status icon Zobrazit ikonu hlavního stavu Show custom status icon Zobrazit ikonu vlastního stavu Show last choosen Zobrazit poslední vybraný Codepage: (note that online messages use utf-8 in most cases) Kódová stránka (pozn.: ve většině případů se používá UTF-8): Apple Roman Big5 Big5-HKSCS EUC-JP EUC-KR GB18030-0 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 ISO 8859-16 Iscii-Bng Iscii-Dev Iscii-Gjr Iscii-Knd Iscii-Mlm Iscii-Ori Iscii-Pnj Iscii-Tlg Iscii-Tml JIS X 0201 JIS X 0208 KOI8-R KOI8-U MuleLao-1 ROMAN8 Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 WINSAMI2 multipleSending Send multiple Poslat hromadně multipleSendingClass multipleSending 1 Send Odeslat Stop networkSettingsClass networkSettings Connection Připojení Server Host: Hostitel: Port: login.icq.com Keep connection alive Udržovat spojení Secure login Zabezpečené přihlášení Proxy connection Připojení proxy Listen port for file transfer: Naslouchací port pro přenos souborů: Proxy Type: Typ: None není HTTP SOCKS 5 Authentication Ověření User name: Jméno: Password: Heslo: noteWidgetClass noteWidget OK Cancel Zrušit oscarProtocol The connection was refused by the peer (or timed out). Připojení bylo odmítnuto od klienta (nebo vypršel časový limit). The remote host closed the connection. Vzdálený hostitel ukončil spojení. The host address was not found. Adresa hostitele nebyla nalezena. The socket operation failed because the application lacked the required privileges. Operace se selhala, protože aplikaci chybí potřebná oprávnění. The local system ran out of resources (e.g., too many sockets). Místní systém běžel z více zdrojů (např. příliš mnoho soketů). The socket operation timed out. Vypršel časový limit operace. An error occurred with the network (e.g., the network cable was accidentally plugged out). Došlo k chybě v síti (např. sítový kabel byl omylem odpojen). The requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). Žádaná operace není podporována místním operačním systémem (např. chybějící podpora IPv6). The socket is using a proxy, and the proxy requires authentication. Soket používá proxy a proxy vyžaduje ověření. An unidentified network error occurred. Neznámá síťová chyba. passwordChangeDialog Password error Chyba hesla Current password is invalid Současné heslo je neplatné Confirm password does not match Potvrzené heslo není stejné passwordChangeDialogClass Change password Změnit heslo Current password: Současné heslo: New password: Nové heslo: Retype new password: Znovu nové heslo: Change Změnit passwordDialog Enter %1 password Zadejte %1 heslo passwordDialogClass Enter your password Zadejte vaše heslo Your password: Vaše heslo: Save password OK privacyListWindow Privacy lists Nastavení soukromí privacyListWindowClass privacyListWindow Visible list Seznam viditelných UIN Nick name Přezdívka I D Invisible list Seznam neviditelných Ignore list Seznam ignorovaných readAwayDialogClass readAwayDialog <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> Close Zavřít Return Vrátit requestAuthDialogClass Authorization request Vyžadována autorizace Send Odeslat searchUser Add/find users Přidat/najít uživatele Searching Vyhledávám Nothing found Nic nenalezeno Done Hotovo Always Vždy Authorize Autorizovat Add to contact list Přidat do seznamu kontaktů Contact details Detaily kontaktu Send message Poslat zprávu Contact status check Zjistit stav kontaktu searchUserClass searchUser Hledání uživatele Search by: Hledat podle: UIN Email Other Jiné Nick name: Přezdívka: First name: Jméno: Last name: Příjmení: Online only Pouze online More >> Více >> Advanced Pokročilé Gender: Pohlaví: Female Ženské Male Mužské Age: Věk: 13-17 18-22 23-29 30-39 40-49 50-59 60+ Country: Země: Afghanistan Afghánistán Albania Albánie Algeria Alžír American Samoa Americká Samoa Andorra Angola Anguilla Antigua Antigua & Barbuda Antigua a Barbuda Antilles Antilly Argentina Armenia Arménie Aruba AscensionIsland Ascension Australia Austrálie Austria Rakousko Azerbaijan Ázerbajdžán Bahamas Bahamy Bahrain Bahrajn Bangladesh Bangladéš Barbados Barbuda Belarus Bělorusko Belgium Belgie Belize Benin Bermuda Bermudy Bhutan Bhútán Bolivia Bolívie Botswana Brazil Brazílie Brunei Brunej Bulgaria Bulharsko Burkina Faso Burundi Cambodia Kambodža Cameroon Kamerun Canada Kanada Canary Islands Kanárské ostrovy Cayman Islands Kajmanské ostrovy Chad Čad Chile, Rep. of Chile China Čína Christmas Island Vánoční ostrov Colombia Kolumbie Comoros CookIslands Cookovy ostrovy Costa Rica Kostarika Croatia Chorvatsko Cuba Kuba Cyprus Kypr Czech Rep. Česko Denmark Dánsko Diego Garcia Djibouti Džibuti Dominica Dominika Dominican Rep. Dominikánská republika Ecuador Ekvádor Egypt El Salvador Salvador Eritrea Estonia Estonsko Ethiopia Etiopie Faeroe Islands Faerské ostrovy Falkland Islands Falklandy Fiji Fidži Finland Finsko France Francie FrenchAntilles Francouzské Antilly French Guiana Francouzská Guyana French Polynesia Francouzská Polynésie Gabon Gambia Gambie Georgia Gruzie Germany Německo Ghana Ghana Gibraltar Greece Řecko Greenland Grónsko Grenada Guadeloupe Guatemala Guinea Guinea-Bissau Guyana Haiti Honduras Hong Kong Hungary Maďarsko Iceland Island India Indie Indonesia Indonésie Iraq Irák Ireland Irsko Israel Izrael Italy Itálie Jamaica Jamajka Japan Japonsko Jordan Jordánsko Kazakhstan Kazachstán Kenya Keňa Kiribati Korea, North Severní Korea (KLDR) Korea, South Jižní Korea Kuwait Kuvajt Kyrgyzstan Kirgizstán Laos Latvia Lotyšsko Lebanon Libanon Lesotho Liberia Libérie Liechtenstein Lichtnštejnsko Lithuania Litva Luxembourg Lucembursko Macau Macao Madagascar Madagaskar Malawi Malaysia Malajsie Maldives Maledivy Mali Malta Marshall Islands Marshallovy ostrovy Martinique Martinik Mauritania Mauritánie Mauritius Mauricius MayotteIsland Ostrov Mayotte Mexico Mexiko Moldova, Rep. of Moldávie Monaco Monako Mongolia Mongolsko Montserrat Morocco Maroko Mozambique Mozambik Myanmar Namibia Namibie Nauru Nepal Nepál Netherlands Nizozemsko Nevis NewCaledonia Nová Kaledonie New Zealand Nový Zéland Nicaragua Nikaragua Niger Nigeria Nigérie Niue Norfolk Island Norfolk Norway Norsko Oman Omán Pakistan Pákistán Palau Panama Papua New Guinea Papua-Nová Guinea Paraguay Peru Philippines Filipíny Poland Polsko Portugal Portugalsko Puerto Rico Portoriko Qatar Katar Reunion Island Romania Rumunsko Rota Island Rota Russia Rusko Rwanda Saint Lucia Sv. Lucie Saipan Island Saipan San Marino Saudi Arabia Saudská Arábie Scotland Skotsko Senegal Seychelles Seychely Sierra Leone Singapore Singapur Slovakia Slovensko Slovenia Slovinsko Solomon Islands Šalamounovy ostrovy Somalia Somálsko SouthAfrica Jižní Afrika Spain Španělsko Sri Lanka Srí Lanka St. Helena Sv. Helena St. Kitts Sv. Kryštof Sudan Súdán Suriname Surinam Swaziland Svazijsko Sweden Švédsko Switzerland Švýcarsko Syrian ArabRep. Sýrie Taiwan Tajikistan Tádžikistán Tanzania Tanzánie Thailand Thajsko Tinian Island Tinian Togo Tokelau Tonga Tunisia Tunisko Turkey Turecko Turkmenistan Turkmenistán Tuvalu Uganda Ukraine Ukrajina United Kingdom Velká Británie Uruguay USA Uzbekistan Uzbekistán Vanuatu Vatican City Vatikán Venezuela Vietnam Wales Western Samoa Západní Samoa Yemen Jemen Yugoslavia Jugoslávie Yugoslavia - Montenegro Jugoslávie - Černá Hora Yugoslavia - Serbia Jugoslávie - Srbsko Zambia Zambie Zimbabwe City: Obec: Interests: Zájmy: Art Umění Cars Automobily Celebrity Fans Fankluby Collections Sběratelství Computers Počítače Culture & Literature Kultura a literatura Fitness Games Hry Hobbies Koníčky ICQ - Providing Help ICQ - Poskytování pomoci Internet Lifestyle Životní styl Movies/TV Filmy a TV Music Hudba Outdoor Activities Venkovní aktivity Parenting Rodičovství Pets/Animals Mazlíčci a zvířátka Religion Náboženství Science/Technology Věda a technologie Skills Řemesla Sports Sporty Web Design Web. designer Nature and Environment Příroda a životní prostředí News & Media Noviny a časopisy Government Státní správa Business & Economy Obchod a ekonomika Mystics Záhady Travel Cestování Astronomy Astronomie Space Vesmír Clothing Móda Parties Večírky Women Ženy Social science Společenské vědy 60's 60. léta 70's 70. léta 80's 80. léta 50's 50. léta Finance and corporate Finance a obchod Entertainment Zábava Consumer electronics Spotřební elektronika Retail stores Značkové zboží Health and beauty Zdraví a krása Media Média Household products Výrobky pro domácnost Mail order catalog Objednávkové katalogy Business services Podnikání a služby Audio and visual Audio a Video Sporting and athletic Sportování a atletika Publishing Literatura Home automation Domácí spotřebiče Language: Jazyk: Arabic Arabština Bhojpuri Bhodžpuri Bulgarian Bulharština Burmese Barmština Cantonese Kantonština Catalan Katalánština Chinese Čínština Croatian Chorvatština Czech Čeština Danish Dánština Dutch Holandština English Angličtina Esperanto Estonian Estonština Farsi Perština (Farsi) Finnish Finština French Francouzština Gaelic Gaelština German Němčina Greek Řečtina Hebrew Hebrejština Hindi Hindština Hungarian Maďarština Icelandic Islandština Indonesian Indonézština Italian Italština Japanese Japonština Khmer Khmerština Korean Korejština Lao Laosština Latvian Litevština Lithuanian Lotyšština Malay Malajština Norwegian Norština Polish Polština Portuguese Portugalština Romanian Rumunština Russian Ruština Serbian Srbština Slovak Slovenština Slovenian Slovinština Somali Somálština Spanish Španělština Swahili Svahilština Swedish Švédština Tagalog Tagalština Tatar Tatarština Thai Thajština Turkish Turečtina Ukrainian Ukrajinština Urdu Vietnamese Vietnamština Yiddish Jirdiš Yoruba Jorubština Afrikaans Afrikánština Persian Perština Albanian Albánština Armenian Arménština Kyrgyz Kyrgyzská Maltese Maltština Occupation: Zaměstnání: Academic Vysoká škola Administrative Administrativa Art/Entertainment Umění a zábava College Student Student VOŠ Community & Social Společnost, veřejnost Education Vzdělávání Engineering Strojírenství Financial Services Ekonomika High School Student Student SŠ Home V domácnosti Law Právo, justice Managerial Management, vedení Manufacturing Výroba Medical/Health Zdravotnictví Military Armáda Non-Goverment Organisation Nestátní organizace Professional Profesionální organizace Retail Prodej, obchod Retired V důchodu Science & Research Věda a Výzkum Technical Technické obory University student Student VŠ Web building Tvorba webu Other services Ostatní služby Keywords: Klíčová slova: Marital status: Rodinný stav: Divorced Rozvedený/á Engaged Zasnoubený/á Long term relationship Dlouhodobý vztah Married vdaná/ženatý Open relationship Přátelství Separated Žijící odděleně Single Svobodný/á Widowed Ovdovělý/á Do not clear previous results Nemazat předchozí výsledky Clear Vymazat Search Hledat Return Vrátit Account Účet Nick name Přezdívka First name Jméno Last name Příjmení Gender/Age Pohlaví / Věk Authorize Autorizovat snacChannel Invalid nick or password Chybná přezdívka nebo heslo Service temporarily unavailable Služba dočasně nedostupná Incorrect nick or password Chybná přezdívka nebo heslo Mismatch nick or password Záměna přezdívky nebo hesla Internal client error (bad input to authorizer) Vnitřní chyba klienta (špatný vstup autorizace) Invalid account Neplatný účet Deleted account Zrušený účet Expired account Vypršený účet No access to database Není přístupná databáze No access to resolver Není možný synchronní přenos Invalid database fields Chybné databázové pole Bad database status Chybný stav databáze Bad resolver status Chybný stav synchronizace Internal error Vnitřní chyba Service temporarily offline Služba dočasně offline Suspended account Deaktivovaný účet DB send error Chybná odpověď databáze DB link error Chyba spojení s databází Reservation map error Chyba vyhrazení mapování The users num connected from this IP has reached the maximum Počet připojených uživatelů z této IP adresy překročilo maximum The users num connected from this IP has reached the maximum (reservation) Počet připojených uživatelů z této IP adresy překročilo maximum (rezervace) Rate limit exceeded (reservation). Please try to reconnect in a few minutes Limit požadavků byl překročen (rezervace). Zkuste se znovu připojit za pár minut User too heavily warned Uživatel má příliš mnoho varování Reservation timeout Časový limit rezervace You are using an older version of ICQ. Upgrade required Používáte starší verzi protokolu ICQ. Je potřeba aktualizace You are using an older version of ICQ. Upgrade recommended Používáte starší verzi protokolu. Doporučuje se aktualizace Rate limit exceeded. Please try to reconnect in a few minutes Limit požadavků byl překročen. Zkuste se znovu připojit za pár minut Can't register on the ICQ network. Reconnect in a few minutes Nelze se registrovat do ICQ sítě. Zkuste to za pár minut Invalid SecurID Neplatné SecurID Account suspended because of your age (age < 13) Účet byl deaktivován kvůli tvému věku (mladší 13ti let) Connection Error: %1 Chyba připojení: %1 statusSettingsClass statusSettings Stav Allow other to view my status from the Web Povolit zjištění mého stavu z webu Add additional statuses to status menu Přidat další stavy do stavového menu Ask for xStauses automatically Automaticky zjišťovat xStatusy Notify about reading your status Oznámit čtení mého stavu Away Pryč Lunch Obědvám Evil Naštvaný Depression V depresi At home Doma At work V práci N/A Nepřítomen Occupied Zaneprázdněn DND Nerušit Don't show autoreply dialog Nezobrazovat dialog automatické odpovědi userInformation %1 contact information %1 informace o kontaktu <img src='%1' height='%2' width='%3'> <b>Nick name:</b> %1 <br> <b>Přezdívka:</b> %1 <br> <b>First name:</b> %1 <br> <b>Jméno:</b> %1 <br> <b>Last name:</b> %1 <br> <b>Příjmení:</b> %1 <br> <b>Home:</b> %1 %2<br> <b>Bydliště:</b> %1 %2<br> <b>Gender:</b> %1 <br> <b>Pohlaví:</b> %1 <br> <b>Age:</b> %1 <br> <b>Věk:</b> %1 <br> <b>Birth date:</b> %1 <br> <b>Datum narození:</b> %1 <br> <b>Spoken languages:</b> %1 %2 %3<br> <b>Hovoří jazyky:</b> %1 %2 %3<br> Open File Otevřít soubor Images (*.gif *.bmp *.jpg *.jpeg *.png) Obrázky (*.gif *.bmp *.jpg *.jpeg *.png) Open error Chyba při otevírání Image size is too big Obrázek je příliš velký <b>Protocol version: </b>%1<br> <b>Verze protokolu: </b>%1<br> <b>[Capabilities]</b><br> <b>[Schopnosti]</b><br> <b>[Short capabilities]</b><br> <b>[Krátké schopnosti]</b><br> <b>[Direct connection extra info]</b><br> <b>[Extra informace přímého spojení]</b><br> userInformationClass userInformation Name Jméno Nick name: Přezdívka: Last login: Poslední přihlášení: First name: Jméno: Last name: Příjmení: UIN: Registration: Registrace: Email: Don't publish for all Nezveřejňovat pro všechny City: Obec: State: Stát: Zip: PSČ: Phone: Telefon: Fax: Cellular: Mobil: Street address: Adresa: Country: Země: Work address Adresa do práce Street: Ulice: Company Společnost Company name: Název společnosti: Occupation: Povolání: Div/dept: Oddělení: Position: Pozice: Web site: Webové stránky: Account info Informace o účtu Originally from Původně z Home address Adresa domů Personal Osobní Marital status: Rodinný stav: Gender: Pohlaví: Female Ženské Male Mužské Home page: Domovská stránka: Age: Věk: Birth date Datum narození Spoken language: Mluví jazykem: Interests Zájmy <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> Authorization/webaware Autorizace webaware (zjištění stavu přes web) My authorization is required Vyžadovat autorizaci All uses can add me without authorization Všichni uživatelé si mne mohou přidat bez autorizace Allow others to view my status in search and from the web Povolit ostatním vidět můj stav při hledání a na webu Save Uložit Close Zavřít Summary Souhrn General Obecné Home Bydliště Work Zaměstnání About O... Additinonal Doplňující Request details Detaily qutim-0.2.0/languages/cs_CZ/sources/floaties.ts0000644000175000017500000000071011270772612023127 0ustar euroelessareuroelessar FloatiesPlugin Show floaties Zobrazit plovoucí kontakt qutim-0.2.0/languages/cs_CZ/sources/sqlhistory.ts0000644000175000017500000001315311270772612023547 0ustar euroelessareuroelessar HistoryWindowClass HistoryWindow Historie Account: Účet: From: Od: Search Hledat Return Vrátit 1 QObject History Historie SqlHistoryNamespace::HistoryWindow No History není historie SqlHistorySettingsClass HistorySettings Nastavení historie <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">SQL History Settings</span></p></body></html> <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nastavení SQL History</span></p></body></html> Save message history Ukládat historii konverzace Show recent messages in messaging window Zobrazených posledních zpráv v okně konverzace SQL engine: Typ SQL: SQL connection settings Nastavení připojení k SQL Host: Hostitel: Port: Login: Password: Heslo: Database name: Název databáze: SQL History plugin (c) 2009 by Alexander Kazarin qutim-0.2.0/languages/cs_CZ/sources/mrim.ts0000644000175000017500000017231311270772612022276 0ustar euroelessareuroelessar AddContactWidget Incorrect email Nesprávný email Email you entered is not valid or empty! Zadaný email není platný nebo je prázdný! AddContactWidgetClass Add contact to list Přidat kontakt do seznamu Add to group: Přidat do skupiny: Contact email: Email kontaktu: Contact nickname: Přezdívka kontaktu: Add Přidat AddNumberWidget Phone numbers Telefonní čísla Home: Domů: Work: Do práce: Mobile: Mobil: Save Uložit ContactDetails M F Ž No avatar není avatar ContactDetailsClass Contact details Detaily kontaktu Personal data Osobní data <email> <nickname> <přezdívka> E-Mail: Email: Nickname: Přezdívka: Surname: Příjmení: Sex: Pohlaví: Age: Věk: Birthday: Narozeniny: Zodiac sign: Znamení zvěrokruhu: Living place: Bydliště: Name: Jméno: <name> <jméno> <surname> <příjmení> <sex> <pohlaví> <age> <věk> <birthday> <narozeniny> <zodiac> <zvěrokruh> <living place> <bydliště> Avatar No avatar není avatar Add contact Přidat kontakt Update Aktualizovat Close Zavřít EditAccount Edit %1 account settings Upravit nastavení účtu %1 Edit account Upravit účet Account Účet Connection Připojení Use profile settings Použít nastavení profilu FileTransferRequestWidget File transfer request from %1 Dotaz na přenos souboru od %1 Choose location to save file(s) Vyberte umístění pro uložení souborů Form Od From: Od: File(s): Soubor(y): File name Název souboru Size Velikost Total size: Celková velikost: Accept Přijmout Decline Odmítnout FileTransferWidget File transfer with: %1 Přenos souboru s: %1 Waiting... Čekání... /sec /sek Done! Hotovo Getting file... Přijímání souboru... Close Zavřít Sending file... Odesílání souboru... Form Filename: Název souboru: Done: Hotovo: Speed: Rychlost: File size: Velikost souboru: Last time: Uplynulý čas: Remained time: Zbývající čas: Status: Stav: Close window after tranfer is finished Zavřít okno po dokončení přenosu Open Otevřít Cancel Zrušit GeneralSettings GeneralSettings Obecné nastavení Restore status at application's start Obnovit stav po spuštění Show phone contacts Zobrazit telefonní kontakty Show status text in contact list Zobrazit text stavu v seznamu kontaktů LoginFormClass LoginForm E-mail: Password: Heslo: MRIMClient Add contact Přidat kontakt Open mailbox Otevřít emailovou schránku Search contacts Hledat kontakty No MPOP session available for you, sorry... Session MPOP není k dispozici. Messages in mailbox: Zprávy ve schránce: Unread messages: Nepřečtené zprávy: User %1 is requesting authorization: Uživatel %1 požaduje autorizaci: Authorization request accepted by Autorizace byla přijata od Server closed the connection. Authentication failed! Server uzavřel spojení. Ověření selhalo! Server closed the connection. Another client with same login connected! Server uzavřel spojení. Připojen jiný klient se stejným přihlašovacím jménem! Server closed the connection for unknown reason... Server uzavřel spojení z neznámých důvodů... Unread emails: %1 Nepřečtených emailů: %1 Send SMS Poslat SMS Authorize contact Autorizovat kontakt Request authorization Žádost o autorizaci Rename contact Přejmenovat kontakt Delete contact Odstranit kontakt Move to group Přesunout do skupiny Add phone number Přidat telefonní číslo Add to list Přidat do seznamu Pls authorize and add me to your contact list! Thanks! Email: Prosím autorizujte mě a přidejte si mě do Vašeho seznamu kontaktů! Děkuji! Email: Contact list operation failed! Operace se seznamem kontaktů selhala! No such user! Žádný takový uživatel! Internal server error! Vnitřní chyba serveru! Invalid info provided! Poskytnuty neplatné údaje! User already exists! Uživatel již existuje! Group limit reached! Dosažen limit skupiny! Unknown error! Neznámá chyba! Sorry, no contacts found :( Try to change search parameters Žádné kontakty nenalezeny Zkuste změnit parametry hledání MRIMCommonUtils B KB kB MB GB MRIMContact Possible client: Pravděpodobný klient: Renaming %1 Přejmenovávání %1 You can't rename a contact while you're offline! Nemůžete přejmenovat kontakt když jste offline! MRIMContactList Phone contacts Telefon kontaktů MRIMLoginWidgetClass MRIMLoginWidget Email: Password: Heslo: MRIMPluginSystem General settings Obecné nastavení Connection settings Nastavení připojení MRIMProto Offline message Offline zpráva Pls authorize and add me to your contact list! Thanks! Prosím autorizuj mě a přidej si mě do seznamu kontaktů! Děkuji! File transfer request from %1 couldn't be processed! Dotaz o přenos souborů od %1 nemohl být zpracován! MRIMSearchWidget Any nějaké The Ram Beran The Bull Býk The Twins Blíženci The Crab Rak The Lion Lev The Virgin Panna The Balance Váhy The Scorpion Štír The Archer Střelec The Capricorn Kozoroh The Water-bearer Vodnář The Fish Ryby Male Mužské Female Ženské January Leden February Únor March Březen April Duben May Květen June Červen July Červenec August Srpen September Září October Říjen November Listopad December Prosinec MRIMSearchWidgetClass Search contacts Hledat kontakty Search form Hledat Nickname: Přezdívka: Name: Jméno: Surname: Příjmení: Sex: Pohlaví: Country: Země: Region: Území: Birthday: Narozeniny: Day: Den: Any jakýkoliv 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Month: Měsíc: Zodiac: Znamení: Age from: Věk od: to do: Search only online contacts Hledat pouze online kontakty Show avatars Zobrazit avatary E-Mail Note: search is available only for following domains: Poznámka: hledání je k dispozici pouze pro následující domény: @mail.ru, @list.ru, @bk.ru, @inbox.ru Start search! Začít hledání! MoveToGroupWidget Move Přesunout Move contact to group Přesunout kontakt do skupiny Move! Přesunout Group: Skupina: RenameWidget Rename Přejmenovat Rename contact Přejmenovat kontakt New name: Nové jméno: OK SMSWidget Send SMS Poslat SMS Reciever: Příjemce: TextLabel Send! Odeslat SearchResultsWidget M F Ž SearchResultsWidgetClass Search results Výsledky hledání Nick Přezdívka E-Mail Name Jméno Surname Příjmení Sex Pohlaví Age Věk Info Informace Add contact Přidat kontakt SettingsWidget Default proxy Výchozí proxy SettingsWidgetClass SettingsWidget Nastavení MRIM server host: Hostitel MRIM serveru: MRIM server port: Port MRIM serveru: Use proxy Použít proxy Proxy type: Typ proxy: Proxy host: Hostitel proxy: Proxy port: Port proxy: Proxy username: Jméno: Password: Heslo: StatusManager Offline Do Not Disturb Nerušit Free For Chat Připraven na pokec Online Away Pryč Invisible Neviditelný Sick Nemocný At home Doma Lunch Obědvám Where am I? Kde to jsem? WC Cooking vařím Walking na procházce I'm an alien! Jsem mimozemšťan! I'm a shrimp! I'm lost :( Jsem ztracen :( Crazy %) Šílený %) Duck Kachna Playing Hraju Smoke Kouřím At work V práci On the meeting Na schůzce Beer Pivo Coffee Kafé Shovel Házím lopatou Sleeping Spím On the phone Na telefonu In the university Na univerzitě School Škola You have the wrong number! Máte špatné číslo! LOL Tongue Smiley Hippy Depression V depresi Crying Brečím Surprised Překvapení Angry Zlost Evil Naštvaný Ass Osel Heart Srdce Crescent Coool! Horns Rohy Figa F*ck you! Skull Lebka Rocket Raketa Ktulhu Goat Koza Must die!! Musí zemřít!! Squirrel Veverka Party! Párty! Music Hudba ? XtrazSettings Form Od Enable Xtraz Zapnout Xtraz Xtraz packages: Balíčky Xtraz: Information: Informace: authwidgetClass Authorization request Požadavek o autorizaci Authorize Autorizovat Reject Odmítnout qutim-0.2.0/languages/cs_CZ/binaries/0000755000175000017500000000000011273101310021044 5ustar euroelessareuroelessarqutim-0.2.0/languages/cs_CZ/binaries/imagepub.qm0000644000175000017500000001433311270603471023214 0ustar euroelessareuroelessar

ImagePub qutIM plugin

v%VERSION%

Send images via public web services

Author:

Alexander Kazarin

boiler@co.ru

(c) 2009

imagepubSettingsClass

imagepubSettingsClassO...AboutimagepubSettingsClass0Servis hostingu obrzko:Image hosting service:imagepubSettingsClass.Poslat aablonu obrzku:Send image template:imagepubSettingsClassNastavenSettingsimagepubSettingsClass Uplynul  as: %1Elapsed time: %1 uploadDialogSoubor: %1File: %1 uploadDialogPostup: %1 / %2Progress: %1 / %2 uploadDialog"Rychlost: %1 kb/sSpeed: %1 kb/sec uploadDialogNahrvm... Uploading... uploadDialogCanceluploadDialogClassUplynul  as: Elapsed time:uploadDialogClassSoubor:File: uploadDialogClassPostup: Progress:uploadDialogClassRychlost:Speed:uploadDialogClass"Nahrvn za alo.Upload started.uploadDialogClassNahrvm... Uploading...uploadDialogClassqutim-0.2.0/languages/cs_CZ/binaries/connectioncheck.qm0000644000175000017500000002604311230006361024550 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Serif'; font-size:11pt;"> </span><img src=":/icons/connectioncheck.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Serif'; font-size:11pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Connection check qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v 0.0.7.1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Igor 'Sqee' Syromyatnikov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:sqee@olimp.ua"><span style=" font-family:'Liberation Serif'; font-size:11pt; text-decoration: underline; color:#0000c0;">sqee@olimp.ua</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URL2Ping pYidal: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Evgeniy 'Dexif' Spitsyn</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">www.ExGraphics.info</p></body></html> S

Connection check qutIM plugin

v 0.0.7.1

Author:

Igor 'Sqee' Syromyatnikov

sqee@olimp.ua

URL2Ping added by:

Evgeniy 'Dexif' Spitsyn

www.ExGraphics.info

connectioncheckSettingsO...AboutconnectioncheckSettings Metoda kontroly: Check method:connectioncheckSettings:Kontrolovat ka~dch (sekund):Check period (sec.):connectioncheckSettingsVypnutoDisabledconnectioncheckSettingsZapnutoEnabledconnectioncheckSettings8PYklad: www.exgraphics.infoExample: www.exgraphics.infoconnectioncheckSettingsPingconnectioncheckSettingsStav pluginu:Plugin status:connectioncheckSettings"Smrovac tabulka Route tableconnectioncheckSettingsNastavenSettingsconnectioncheckSettingsPing na URL: URL2Ping:connectioncheckSettingsqutim-0.2.0/languages/cs_CZ/binaries/sqlhistory.qm0000644000175000017500000000626211236534563023655 0ustar euroelessareuroelessar =  C Z .  I|i 1HistoryWindowClass  et:Account:HistoryWindowClassOd:From:HistoryWindowClassHistorie HistoryWindowHistoryWindowClass VrtitReturnHistoryWindowClass HledatSearchHistoryWindowClassHistorieHistoryQObjectnen historie No History"SqlHistoryNamespace::HistoryWindow <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nastaven SQL History</span></p></body></html>

SQL History Settings

SqlHistorySettingsClassNzev databze:Database name:SqlHistorySettingsClass$Nastaven historieHistorySettingsSqlHistorySettingsClassHostitel:Host:SqlHistorySettingsClassLogin:SqlHistorySettingsClass Heslo: Password:SqlHistorySettingsClassPort:SqlHistorySettingsClass0SQL History plugin (c) 2009 by Alexander KazarinSqlHistorySettingsClass2Nastaven pYipojen k SQLSQL connection settingsSqlHistorySettingsClassTyp SQL: SQL engine:SqlHistorySettingsClass6Ukldat historii konverzaceSave message historySqlHistorySettingsClass\Zobrazench poslednch zprv v okn konverzace(Show recent messages in messaging windowSqlHistorySettingsClassqutim-0.2.0/languages/cs_CZ/binaries/yandexnarod.qm0000644000175000017500000003574311227526156023755 0ustar euroelessareuroelessar^ H0 Rz4 > a v k$ Bsv b" <=B k^ l E  s9 Td7a o9VC~i9Autorizace AuthorizationrequestAuthDialogClassCaptcha:requestAuthDialogClass&PYihlaaovac jmno:Login:requestAuthDialogClass Heslo: Password:requestAuthDialogClassPamatovatRememberrequestAuthDialogClass about:blankrequestAuthDialogClass HotovoDone uploadDialogNahrvm Uploading uploadDialog ZruaitCanceluploadDialogClassUplynul  as: Elapsed time:uploadDialogClassSoubor:File: uploadDialogClassPostup: Progress:uploadDialogClassRychlost:Speed:uploadDialogClass"Nahrvn za alo.Upload started.uploadDialogClassNahrvm... Uploading...uploadDialogClassVyberte soubor Choose fileyandexnarodManage8Sprvce souboro Yandex.NarodYandex.Narod file manageryandexnarodManage innosti:Actions:yandexnarodManageClassSchrnka ClipboardyandexnarodManageClass ZavYtCloseyandexnarodManageClass Odstranit soubor Delete FileyandexnarodManageClassSeznam souboro: Files list:yandexnarodManageClassFormyandexnarodManageClass*Na st seznam souboro Get FilelistyandexnarodManageClassNov polo~kaNew ItemyandexnarodManageClassNahrt soubor Upload FileyandexnarodManageClassYdek1 Ydek2 line1 line2yandexnarodManageClass:Vy~adovna captcha autorizaceAuthorization captcha requestyandexnarodNetMan$Autorizace selhalaAuthorization failedyandexnarodNetManAutorizace OKAuthorizing OKyandexnarodNetManAutorizovn...Authorizing...yandexnarodNetMan$Nelze na st skladCan't get storageyandexnarodNetMan&Nelze na st souborCan't read fileyandexnarodNetManZruaenoCanceledyandexnarodNetMan.OdstraHovn souboro...Deleting files...yandexnarodNetMan8Stahovn seznamu souboro...Downloading filelist...yandexnarodNetMan4Velikost souboru je nulovFile size is nullyandexnarodNetMan(Soubor(o) odstrannoFile(s) deletedyandexnarodNetManDSeznam souboro sta~en (%1 souboro)Filelist downloaded (%1 files)yandexnarodNetMan$Na tn skladu...Getting storage...yandexnarodNetMan*Za nn nahrvn...Starting upload...yandexnarodNetManspan nahrnoUploaded successfullyyandexnarodNetMan"OvYovn selhaloVerifying failedyandexnarodNetManOvYovn... Verifying...yandexnarodNetMan"Vybrat soubor proChoose file for yandexnarodPluginSoubor odesln File sentyandexnarodPlugin8Sprvce souboro Yandex.NarodManage Yandex.Narod filesyandexnarodPlugin>Poslat soubor pYes Yandex.NarodSend file via Yandex.NarodyandexnarodPluginv%N - nzev souboru; %U - URL souboru; %S - velikost souboru-%N - file name; %U - file URL; %S - file sizeyandexnarodSettingsClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Vmna souboro pYes slu~bu </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"></span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> n

Yandex.Narod qutIM plugin

svn version

File exchange via Yandex.Narod service

Author:

Alexander Kazarin

boiler@co.ru

(c) 2008-2009

yandexnarodSettingsClass

yandexnarodSettingsClassO...AboutyandexnarodSettingsClass$PYihlaaovac jmnoLoginyandexnarodSettingsClass HesloPasswordyandexnarodSettingsClass,Poslat aablonu souboruSend file templateyandexnarodSettingsClassNastavenSettingsyandexnarodSettingsClassTest autorizaceTest AuthorizationyandexnarodSettingsClassstavstatusyandexnarodSettingsClassqutim-0.2.0/languages/cs_CZ/binaries/plugman.qm0000644000175000017500000003340311251735433023070 0ustar euroelessareuroelessar1 EI}\{9Y#E 'lj ,#s\sQFs.@& j ;. {^x A    n@*#a 2` ] 2`3 Mg2 ~ ?d5 b. J  ( 6   d RV n > 4 . s3{ 5։ =zZ,, \C3r\J̜v Di46...ChooseCategoryPageGrafikaArtChooseCategoryPage JdroCoreChooseCategoryPageKnihovnaLibChooseCategoryPage Knihovna (*.dll)Library (*.dll)ChooseCategoryPage@Knihovna (*.dylib *.bundle *.so)Library (*.dylib *.bundle *.so)ChooseCategoryPageKnihovna (*.so)Library (*.so)ChooseCategoryPage$Kategorie bal ku:Package category:ChooseCategoryPage PluginPluginChooseCategoryPageVybrat grafiku Select artChooseCategoryPageVybrat jdro Select coreChooseCategoryPageVybrat knihovnuSelect libraryChooseCategoryPage WizardPageChooseCategoryPage...ChoosePathPage WizardPageChoosePathPage*ConfigPackagePageGrafikaArtConfigPackagePage Autor:Author:ConfigPackagePageKategorie: Category:ConfigPackagePage JdroCoreConfigPackagePageKnihovnaLibConfigPackagePageLicence:License:ConfigPackagePage Nzev:Name:ConfigPackagePageNzev bal ku: Package name:ConfigPackagePagePlatforma: Platform:ConfigPackagePagePluginConfigPackagePageKrtk popis:Short description:ConfigPackagePageTyp:Type:ConfigPackagePageURL:Url:ConfigPackagePage Verze:Version:ConfigPackagePage WizardPageConfigPackagePage,Neplatn verze bal kuInvalid package versionQObject0Nzev bal ku je przdnPackage name is emptyQObject,Typ bal ku je przdnPackage type is emptyQObject `patn platformaWrong platformQObjectAkceActionsmanager Pou~tApplymanager&Nen implementovnoNot yet implementedmanagerPlugmanmanager najtfindmanager>Stahovn: %1%, rychlost: %2 %3Downloading: %1%, speed: %2 %3plugDownloaderMB/splugDownloader byto/s bytes/secplugDownloaderkB/splugDownloaderInstaluji: Installing: plugInstaller(Neplatn bal ek: %1Invalid package: %1 plugInstaller$Vy~adovn restart! Need restart! plugInstallerOdstraHuji: Removing: plugInstallerNNepodaYilo se rozbalit archiv: %1 do %2#Unable to extract archive: %1 to %2 plugInstaller<Nelze nainstalovat bal ek: %1Unable to install package: %1 plugInstaller0Nelze otevYt archiv: %1Unable to open archive: %1 plugInstaller|Nelze aktualizovat bal ek %1: nainstalovan verze je pozdja7Unable to update package %1: installed version is later plugInstaller`Upozornn: Zkouate pYepsat existujc soubory!,warning: trying to overwrite existing files! plugInstallerInstalovatInstallplugItemDelegateOdstranitRemoveplugItemDelegateNeznmUnknownplugItemDelegateAktualizovatUpgradeplugItemDelegatenainstalovno installedplugItemDelegate lze downgradovatisDowngradableplugItemDelegate lze nainstalovat isInstallableplugItemDelegate4aktualizace je k dispozici isUpgradableplugItemDelegateSprvce bal koManage packagesplugManAkceActions plugManagerVrtit zmnyRevert changes plugManager6Aktualizovat seznam bal koUpdate packages list plugManager Aktualizovat vae Upgrade all plugManagerBal kyPackagesplugPackageModel0Rozbit databze bal kuBroken package databaseplugXMLHandlerZNelze  st databze. Zkontrolujte vaae prva.,Can't read database. Check your pesmissions.plugXMLHandler(Nelze otevYt souborUnable to open fileplugXMLHandler(Nelze nastavit obsahUnable to set contentplugXMLHandler&Nelze zapsat souborUnable to write fileplugXMLHandler(nelze otevYt souborunable to open fileplugXMLHandler(nelze nastavit obsahunable to set contentplugXMLHandler<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Seznam miroro</span></p></body></html>

Mirror list

plugmanSettings<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">jednoduch qutIM sprvce rozaYen.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor: </span><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Sidorov Aleksey</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Kontakty: </span><a href="mailto::sauron@citadelspb.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;"><br /></span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Droid Serif'; font-size:10pt;">2008-2009</span></p></body></html>O

simple qutIM extentions manager.

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com


2008-2009

plugmanSettingsO...AboutplugmanSettings PYidatAddplugmanSettings Popis DescriptionplugmanSettingsFormplugmanSettings NzevNameplugmanSettings&Nen implementovnoNot yet implementedplugmanSettingsNastavenSettingsplugmanSettingsURLUrlplugmanSettingsskupina bal kogroup packagesplugmanSettingsqutim-0.2.0/languages/cs_CZ/binaries/growlnotification.qm0000644000175000017500000000524711231564176025175 0ustar euroelessareuroelessar]HY)bHY5HCQ<HiS+Y?i}DyDK5EF(֍֍O֍MF>9*E+8%+LF; H5? O?Df#d 9/K" rJ'R(Q(93';B}_CHNCHx)J6J6KdqKdM NFOcOiSGS+SĘHTlq;TT6THYa=]Z,,KVZFK^h*j: / vOjZDZ.aZ :Z~n$I1bw 5 |N!kKNdG9!G#n4 6}aB)*0,I̵DGEF  &88%*qᬠl::1FZ6De0EIhJ OH5 $7z $7z6 4l 9̡M C\ f D hB %Nn :J > >& >Ap 0 5 He@ X-. N Y z8 "A -zBG :A >% R zZL Y*< h^-< L s# AG? .M d&g 1#zMF"t- t-|t8-u+-ӅpӅ8:(A'k7 m3"|=V(FiORRZadan email nen platn nebo je przdn!(Email you entered is not valid or empty!AddContactWidgetNesprvn emailIncorrect emailAddContactWidget PYidatAddAddContactWidgetClass2PYidat kontakt do seznamuAdd contact to listAddContactWidgetClass$PYidat do skupiny: Add to group:AddContactWidgetClassEmail kontaktu:Contact email:AddContactWidgetClass&PYezdvka kontaktu:Contact nickname:AddContactWidgetClass Domo:Home:AddNumberWidget Mobil:Mobile:AddNumberWidgetTelefonn  sla Phone numbersAddNumberWidget Ulo~itSaveAddNumberWidgetDo prce:Work:AddNumberWidget}FContactDetailsMContactDetailsnen avatar No avatarContactDetails <vk>ContactDetailsClass<narozeniny> ContactDetailsClassContactDetailsClass<bydliat>ContactDetailsClass<jmno>ContactDetailsClass<pYezdvka> ContactDetailsClass<pohlav>ContactDetailsClass<pYjmen> ContactDetailsClass<zvrokruh>ContactDetailsClassPYidat kontakt Add contactContactDetailsClassVk:Age:ContactDetailsClassAvatarContactDetailsClassNarozeniny: Birthday:ContactDetailsClass ZavYtCloseContactDetailsClass Detaily kontaktuContact detailsContactDetailsClass Email:E-Mail:ContactDetailsClassBydliat: Living place:ContactDetailsClass Jmno:Name:ContactDetailsClassPYezdvka: Nickname:ContactDetailsClassnen avatar No avatarContactDetailsClassOsobn data Personal dataContactDetailsClassPohlav:Sex:ContactDetailsClassPYjmen:Surname:ContactDetailsClassAktualizovatUpdateContactDetailsClass&Znamen zvrokruhu: Zodiac sign:ContactDetailsClass etAccount EditAccountPYipojen Connection EditAccount2Upravit nastaven  tu %1Edit %1 account settings EditAccountUpravit  et Edit account EditAccount0Pou~t nastaven profiluUse profile settings EditAccountPYijmoutAcceptFileTransferRequestWidgetHVyberte umstn pro ulo~en souboroChoose location to save file(s)FileTransferRequestWidgetOdmtnoutDeclineFileTransferRequestWidgetNzev souboru File nameFileTransferRequestWidget:Dotaz na pYenos souboru od %1File transfer request from %1FileTransferRequestWidgetSoubor(y):File(s):FileTransferRequestWidgetOdFormFileTransferRequestWidgetOd:From:FileTransferRequestWidgetVelikostSizeFileTransferRequestWidget"Celkov velikost: Total size:FileTransferRequestWidget/sek/secFileTransferWidget ZruaitCancelFileTransferWidget ZavYtCloseFileTransferWidget@ZavYt okno po dokon en pYenosu&Close window after tranfer is finishedFileTransferWidget HotovoDone!FileTransferWidgetHotovo:Done:FileTransferWidget"Velikost souboru: File size:FileTransferWidget(PYenos souboru s: %1File transfer with: %1FileTransferWidgetNzev souboru: Filename:FileTransferWidgetFormFileTransferWidget(PYijmn souboru...Getting file...FileTransferWidgetUplynul  as: Last time:FileTransferWidgetOtevYtOpenFileTransferWidgetZbvajc  as:Remained time:FileTransferWidget(Odesln souboru...Sending file...FileTransferWidgetRychlost:Speed:FileTransferWidget Stav:Status:FileTransferWidget ekn... Waiting...FileTransferWidget Obecn nastavenGeneralSettingsGeneralSettings0Obnovit stav po spuatn%Restore status at application's startGeneralSettings6Zobrazit telefonn kontaktyShow phone contactsGeneralSettingsLZobrazit text stavu v seznamu kontakto Show status text in contact listGeneralSettingsE-mail:LoginFormClass LoginFormLoginFormClass Heslo: Password:LoginFormClassPYidat kontakt Add contact MRIMClient,PYidat telefonn  sloAdd phone number MRIMClient"PYidat do seznamu Add to list MRIMClient6Autorizace byla pYijata od "Authorization request accepted by  MRIMClient&Autorizovat kontaktAuthorize contact MRIMClientJOperace se seznamem kontakto selhala!Contact list operation failed! MRIMClient"Odstranit kontaktDelete contact MRIMClient,Dosa~en limit skupiny!Group limit reached! MRIMClient,VnitYn chyba serveru!Internal server error! MRIMClient4Poskytnuty neplatn daje!Invalid info provided! MRIMClient(Zprvy ve schrnce: Messages in mailbox:  MRIMClient(PYesunout do skupiny Move to group MRIMClient<Session MPOP nen k dispozici.+No MPOP session available for you, sorry... MRIMClient,}dn takov u~ivatel! No such user! MRIMClient4OtevYt emailovou schrnku Open mailbox MRIMClientProsm autorizujte m a pYidejte si m do Vaaeho seznamu kontakto! Dkuji! Email: >Pls authorize and add me to your contact list! Thanks! Email:  MRIMClient&PYejmenovat kontaktRename contact MRIMClient&}dost o autorizaciRequest authorization MRIMClientHledat kontaktySearch contacts MRIMClientPoslat SMSSend SMS MRIMClientXServer uzavYel spojen z neznmch dovodo...2Server closed the connection for unknown reason... MRIMClientServer uzavYel spojen. PYipojen jin klient se stejnm pYihlaaovacm jmnem!GServer closed the connection. Another client with same login connected! MRIMClientPServer uzavYel spojen. OvYen selhalo!4Server closed the connection. Authentication failed! MRIMClientt}dn kontakty nenalezeny Zkuste zmnit parametry hledn$ z#d.8%ny04`G4R5)!5`YG60ip70y808GHNT^Hw9#zHLHIA&J J !SJ+J6J6!K ~KdfKʘKtL7:LLMy^M5tM6uEMMnWM bvMAMG6NENOJOjz'eOjzMPJjP~P9`QQ?RQSyQSPSaSLSĘlSĘyT-TLT|uTTTڷUq7XVXNVpVXVQVMV]V̌REWiz)DWizWW)iWYw~JZg"ZgWZvZZ~ZZ~0[[[d\+\`\\V{]6^cw_þe*+ gJhniypXw7^xSǕ(Ƹ|Ӯ4Ȅ/.#Z>inU%`W~iјg"֍~@$Lں"vhIc+" p4PoA8b%%&&-.N;?DOyhTTB:{:>: 809?JW7O7>7 DC8*zIX2bnEH@M+hIhI/hI_kj*iv)mK.̉tLN6{|  \Iγ kZ@ 38AGjDZKaƾhJ`1Oȡo ~* ~ $$6o~#6o~7GI$[I]%IeIC*FĹdf]c̵U*PD_asbsGUyL*PsEJGV 6e6eŽjŽj"cIɟ.ʧaNtLk WKP߀X߀'^tIkDQqQS04^p&ߗ-JNmX_^ e`Sk7#xpayr%-zFQA~b~fVz%l60r'[zY4a46Fn}̳R ̳R:ٷ<ݮ"τ㤬qY q4WDy_ g#qC~ȃdS  4() Ѝ+ + +8+Y-ȱ(.C4~7 8e)8e9^af:<>O@s'DHKiZ,`QduieifUPfu g gPhIq q7`qum#w~J^p&tO~P~ıQRBJzYh‰QêEKʸ4^Qq4.j4. f ~ShSMj'jlD 1: \1~ ~ '" 1R 94g 7d ۠ ~c < S& jm jk Ľ, ȏ.\ ȣc <K ʟ.) '  6 ׭jq ۊ 8Sh ^ 3 LW 6 %* Ixe JVx Nx Rx Ty VyK wyy {y {y z( '^ , 1)1 7YG ChA F Zw Ws% c c dh! di# f g hP k#. wǹ wǹ. wǹ^ } c! %E< % 9 4ͨ 85 /$ /$;x /$ /^m :i1 > >) > K J1I ** 0" 0a5 @} 8* |* 8' LJe Ț% [$ . T y d ۰U F F `N (f b1> ";  7: ) ]d NeC Ye 0%@ Sn) SnI d d6: d S S4v SL #A #( 0Ead 2. B3U CU R?l Td aZ dŝ ntl sɨ vIO vI4 vI  M W 8 W7 W {"X k Z .  5 i P     E v   /A j DžnV Mp M [ 4R k s 2(; 2 Apu Asv- Atv] Auv Avv f E E! E0 T, 0_ PC P uR a %z '1 (c' ( -a / 5D| >Pg M}c N# N0 R͊% Rqr V( cPn f  jb t` / " Cc k C ޔL a(e e H3T 4E f< d h[` s u $P bs Sب ֏ - Im+ Im CM) C (` P  ukj & LE 6 dqt _٥ &TH 8f TRNL Z Z~L `>s] `>sj8 cB` dtBO ls o;t o;t2 o;t^ qLu qL' 8Qu Ty T.p T Q < Ĭ Ĭ$) <$i $ ƍD 8 P A m8 K<!h6Ibt@!ru -#$#Ve{'S m+b+b3m+ba7dr#7o9G:,K~4Dei \#PG:9N}Bm\|\ʭ%@ʭ%;ʭ% ^QsG.[U$Gە@PRAX…asQax QfYgkYknm3Em3RtQ5( 8:q&T S&T6&TMG|QVNi,Upravovn %1 Editing %1AccountEditDialogPYidat  etAddAccountFormAddAccountFormClass Heslo: Password:AddAccountFormClassUlo~it heslo Save passwordAddAccountFormClassUIN:AddAccountFormClassRuslan NigmatullinAuthor"Deaktivovan  et Suspended accountConnectionErrorPo et pYipojench u~ivatelo z tto IP adresy pYekro ilo maximum (rezervace)K The users num connected from this IP has reached the maximum (reservation)ConnectionErrorn et byl deaktivovn kvoli tvmu vku (mlada 13ti let)0Account suspended because of your age (age < 13)ConnectionError(Chybn stav databzeBad database statusConnectionError2Chybn stav synchronizaceBad resolver statusConnectionErrorpNelze se registrovat do ICQ st. Zkuste to za pr minut=Can't register on the ICQ network. Reconnect in a few minutesConnectionErrorChyba pYipojenConnection ErrorConnectionError0Chyba spojen s databz DB link errorConnectionError.Chybn odpov databze DB send errorConnectionErrorSmazan  etDeleted accountConnectionErrorVypraen  etExpired accountConnectionError6Chybn pYezdvka nebo hesloIncorrect nick or passwordConnectionError^VnitYn chyba klienta (apatn vstup autorizace)/Internal client error (bad input to authorizer)ConnectionErrorVnitYn chybaInternal errorConnectionError Neplatn SecurIDInvalid SecurIDConnectionErrorNeplatn  etInvalid accountConnectionError,Chybn databzov poleInvalid database fieldsConnectionError6Chybn pYezdvka nebo hesloInvalid nick or passwordConnectionError6Zmna pYezdvky nebo heslaMismatch nick or passwordConnectionError.Nen pYstupn databzeNo access to databaseConnectionError8Nen mo~n synchronn pYenosNo access to resolverConnectionErrorLimit po~adavko byl pYekro en (rezervace). Zkuste se znovu pYipojit za pr minutKRate limit exceeded (reservation). Please try to reconnect in a few minutesConnectionErrorLimit po~adavko byl pYekro en. Zkuste se znovu pYipojit za pr minut=Rate limit exceeded. Please try to reconnect in a few minutesConnectionError2Chyba vyhrazenho spojenReservation link errorConnectionError0Chyba vyhrazen mapovnReservation map errorConnectionError, asov limit rezervaceReservation timeoutConnectionError,Slu~ba do asn offlineService temporarily offlineConnectionError2Slu~ba do asn nedostupnService temporarily unavailableConnectionError~Po et pYipojench u~ivatelo z tto IP adresy pYekro ilo maximumPry od:</b> %1<br>Away since: %1
QObjectD<b>Extern IP:</b> %1.%2.%3.%4<br>#External ip: %1.%2.%3.%4
QObjectD<b>Intern IP:</b> %1.%2.%3.%4<br>#Internal ip: %1.%2.%3.%4
QObject8<b>NepYtomen od:</b> %1<br>N/A since: %1
QObjectT<b>Doba pYipojen:</b> %1d %2h %3m %4s<br>'Online time: %1d %2h %3m %4s
QObjectL<b>Pravdpodobn klient:</b> %1</font>!Possible client: %1
QObjectF<b>Pravdpodobn klient:</b> %1<br>Possible client: %1
QObject><b>Datum registrace:</b> %1<br>Reg. date: %1
QObject8<b>PYihlaen od:</b> %1<br>Signed on: %1
QObjectJ<font size='2'><b>Pry od:</b> %1<br>(Away since: %1
QObjectn<font size='2'><b>Vnja IP:</b> %1.%2.%3.%4<br></font>9External ip: %1.%2.%3.%4
QObjectp<font size='2'><b>VnitYn IP:</b> %1.%2.%3.%4<br></font>9Internal ip: %1.%2.%3.%4
QObjecth<font size='2'><b>Naposled pYihlaen:</b> %1</font>,Last Online: %1QObjectV<font size='2'><b>NepYtomen od:</b> %1<br>'N/A since: %1
QObjectr<font size='2'><b>Doba pYipojen:</b> %1d %2h %3m %4s<br>6Online time: %1d %2h %3m %4s
QObject*Vaechny soubory (*.*) All files (*)QObjectKontaktyContactsQObjectICQ Obecn ICQ GeneralQObjectOtevYt soubor Open FileQObject StavyStatusesQObject AutorAuthorTaskAutorizovat AuthorizeacceptAuthDialogClassOdmtnoutDeclineacceptAuthDialogClassAutorizaceacceptAuthDialogacceptAuthDialogClass2AOL nastaven pro expertyAOL expert settings accountEdit Pou~tApply accountEditOvYenAuthentication accountEdit@Automaticky pYipojit po spuatnAutoconnect on start accountEdit ZruaitCancel accountEdit0 slo sestaven klienta:Client build number: accountEdit4Distribu n  slo klienta:Client distribution number: accountEdit"ID  slo klienta:Client id number: accountEditID klienta: Client id: accountEdit*Lesser verze klienta:Client lesser version: accountEdit0Majoritn verze klienta:Client major version: accountEdit0Minoritn verze klienta:Client minor version: accountEditForm accountEditHTTP accountEditHostitel:Host: accountEditNastaven ICQ Icq settings accountEdit$Udr~ovat pYipojenKeep connection alive accountEditHNaslouchac port pro pYenos souboro:Listen port for file transfer: accountEditnenNone accountEditOK accountEdit Heslo: Password: accountEditPort: accountEditProxy accountEditPYipojen proxyProxy connection accountEditSOCKS 5 accountEdit0Ulo~it stav pYi ukon enSave my status on exit accountEditUlo~it heslo:Save password: accountEdit,Zabezpe en pYihlaen Secure login accountEdit(Sekvence prvnho ID: Seq first id: accountEditServer accountEditTyp:Type: accountEdit Jmno: User name: accountEdit login.icq.com accountEditPYidat %1Add %1addBuddyDialogPYesunoutMoveaddBuddyDialog PYidatAddaddBuddyDialogClassSkupina:Group:addBuddyDialogClassMstn nzev: Local name:addBuddyDialogClassPYidat buddyaddBuddyDialogaddBuddyDialogClass Jmno:Name:addRenameDialogClassOKaddRenameDialogClass VrtitReturnaddRenameDialogClassaddRenameDialogaddRenameDialogClass"Deaktivovan  et Suspended accountcloseConnectionPo et pYipojench u~ivatelo z tto IP adresy pYekro ilo maximum (rezervace)K The users num connected from this IP has reached the maximum (reservation)closeConnectionn et byl deaktivovn kvoli tvmu vku (mlada 13ti let)0Account suspended because of your age (age < 13)closeConnectionHJin klient je pYihlaen s tmto UIN&Another client is loggin with this uincloseConnection(Chybn stav databzeBad database statuscloseConnection2Chybn stav synchronizaceBad resolver statuscloseConnectionpNelze se registrovat do ICQ st. Zkuste to za pr minut=Can't register on the ICQ network. Reconnect in a few minutescloseConnectionChyba pYipojenConnection ErrorcloseConnection0Chyba spojen s databz DB link errorcloseConnection.Chybn odpov databze DB send errorcloseConnectionSmazan  etDeleted accountcloseConnection,Vypraen platnost  tuExpired accountcloseConnection6Chybn pYezdvka nebo hesloIncorrect nick or passwordcloseConnection^VnitYn chyba klienta (apatn vstup autorizace)/Internal client error (bad input to authorizer)closeConnectionVnitYn chybaInternal errorcloseConnection Neplatn SecurIDInvalid SecurIDcloseConnectionNeplatn  etInvalid accountcloseConnection,Chybn databzov poleInvalid database fieldscloseConnection6Chybn pYezdvka nebo hesloInvalid nick or passwordcloseConnection6Zmna pYezdvky nebo heslaMismatch nick or passwordcloseConnection.Nen pYstupn databzeNo access to databasecloseConnection8Nen mo~n synchronn pYenosNo access to resolvercloseConnectionLimit po~adavko byl pYekro en (rezervace). Zkuste se znovu pYipojit za pr minutKRate limit exceeded (reservation). Please try to reconnect in a few minutescloseConnectionLimit po~adavko byl pYekro en. Zkuste se znovu pYipojit za pr minut=Rate limit exceeded. Please try to reconnect in a few minutescloseConnection2Chyba vyhrazenho spojenReservation link errorcloseConnection0Chyba vyhrazen mapovnReservation map errorcloseConnection, asov limit rezervaceReservation timeoutcloseConnection,Slu~ba do asn offlineService temporarily offlinecloseConnection2Slu~ba do asn nedostupnService temporarily unavailablecloseConnection~Po et pYipojench u~ivatelo z tto IP adresy pYekro ilo maximumPYidat do seznamu neviditelnchAdd to invisible listcontactListTree:PYidat do seznamu viditelnchAdd to visible listcontactListTree,PYidat/najt u~ivateleAdd/find userscontactListTree:Dovolit kontaktu pYidat si mAllow contact to add mecontactListTree$Autorizace pYijataAuthorization acceptedcontactListTree(Autorizace zamtnutaAuthorization declinedcontactListTree*Vy~adovna autorizaceAuthorization requestcontactListTreeZmnit m hesloChange my passwordcontactListTree Detaily kontaktuContact detailscontactListTreeDKontakt nepodporuje pYenos souboro&Contact does not support file transfercontactListTree*Zjistit stav kontaktuContact status checkcontactListTree2Koprovat UIN do schrnkyCopy UIN to clipboardcontactListTree VytvoYit skupinu Create groupcontactListTreeOdstranit %1 Delete %1contactListTree"Odstranit kontaktDelete contactcontactListTreeBOdstranit ze seznamu ignorovanchDelete from ignore listcontactListTreeDOdstranit ze seznamu neviditelnchDelete from invisible listcontactListTree@Odstranit ze seznamu viditelnchDelete from visible listcontactListTree"Odstranit skupinu Delete groupcontactListTree.Odstranit skupinu "%1"?Delete group "%1"?contactListTree Upravit poznmku Edit notecontactListTree&Historie konverzaceMessage historycontactListTree PYesunout %1 do: Move %1 to:contactListTree(PYesunout do skupiny Move to groupcontactListTreeNov skupina New groupcontactListTree(Heslo nebylo zmnnoPassword is not changedcontactListTree4Heslo bylo span zmnno Password is successfully changedcontactListTree$Nastaven soukrom Privacy listscontactListTree(PYe st zprvu stavuRead away messagecontactListTree(PYe st vlastn stavRead custom statuscontactListTree@Odebrat mne ze seznamu u~ivatele!Remove myself from contact's listcontactListTree&PYejmenovat kontaktRename contactcontactListTree&PYejmenovat skupinu Rename groupcontactListTreePoslat zprvu Send messagecontactListTreePoslat hromadn Send multiplecontactListTree0Ukzat/zmnit m detailyView/change my detailscontactListTreeByl jsi pYidnYou were addedcontactListTreeje domaat homecontactListTreeje v prciat workcontactListTree obdv having lunchcontactListTreeje v depresi in depressioncontactListTreeje pry is awaycontactListTree(nepYeje si bt ruaenis dndcontactListTreeje naatvanis evilcontactListTree*je pYipraven na pokecis free for chatcontactListTreeje neviditeln is invisiblecontactListTreeje pry is n/acontactListTreeje zaneprzdnn is occupiedcontactListTreeje offline is offlinecontactListTreeje online is onlinecontactListTree?customStatusDialog ZlostAngrycustomStatusDialog,Brouzdn po internetuBrowsingcustomStatusDialog ObchodBusinesscustomStatusDialogKafCoffeecustomStatusDialogZimaColdcustomStatusDialog Bre mCryingcustomStatusDialogPit piva Drinking beercustomStatusDialogJmEatingcustomStatusDialog StrachFearcustomStatusDialogNen mi dobYe Feeling sickcustomStatusDialogHraju hruGamingcustomStatusDialog Zbava Having funcustomStatusDialogJedu In tansportcustomStatusDialog Poslouchm hudbuListening to musiccustomStatusDialog LskaLovecustomStatusDialogNa schozceMeetingcustomStatusDialog Na WCOn WCcustomStatusDialogNa telefonu On the phonecustomStatusDialogPRO 7customStatusDialog PrtyPartycustomStatusDialog PiknikPicniccustomStatusDialog tuReadingcustomStatusDialogSexcustomStatusDialog FotmShootingcustomStatusDialogNa nkupuShoppingcustomStatusDialogSpmSleepingcustomStatusDialog KouYmSmokingcustomStatusDialog SportSportcustomStatusDialogStudiumStudyingcustomStatusDialogSurfujiSurfingcustomStatusDialogKoupn Taking a bathcustomStatusDialogPYemalmThinkingcustomStatusDialogUnavenTiredcustomStatusDialogBt  i nebtTo be or not to becustomStatusDialogPauTypingcustomStatusDialogSleduji TV Watching TVcustomStatusDialogV prciWorkingcustomStatusDialog ZruaitCancelcustomStatusDialogClass VybratChoosecustomStatusDialogClassVlastn stav Custom statuscustomStatusDialogClass8Nastavit narozeninovou ikonuSet birthday/happy flagcustomStatusDialogClassJKontakt bude odstrann. Jste si jist?&Contact will be deleted. Are you sure?deleteContactDialogClass6Odstranit historii kontaktuDelete contact historydeleteContactDialogClassNeNodeleteContactDialogClassAnoYesdeleteContactDialogClass"Odstranit kontaktdeleteContactDialogdeleteContactDialogClass*Vaechny soubory (*.*) All files (*)fileRequestWindowUlo~it soubor Save FilefileRequestWindowPYijmoutAcceptfileRequestWindowClassOdmtnoutDeclinefileRequestWindowClassNzev souboru: File name:fileRequestWindowClass}dost o soubor File requestfileRequestWindowClass"Velikost souboru: File size:fileRequestWindowClassOd:From:fileRequestWindowClassIP:fileRequestWindowClass BfileTransferWindow GBfileTransferWindow kB KBfileTransferWindow MBfileTransferWindow/sfileTransferWindowPYijatoAcceptedfileTransferWindow<Odmtnuto vzdlenm u~ivatelemDeclined by remote userfileTransferWindow HotovoDonefileTransferWindow$PYenos souboru: %1File transfer: %1fileTransferWindowPYijmn... Getting...fileTransferWindowOdesln... Sending...fileTransferWindow ekn... Waiting...fileTransferWindow1/1fileTransferWindowClass ZruaitCancelfileTransferWindowClass Aktuln soubor: Current file:fileTransferWindowClassHotovo:Done:fileTransferWindowClassVelikost: File size:fileTransferWindowClassPYenos souboru File transferfileTransferWindowClassSoubory:Files:fileTransferWindowClassUplynul  as: Last time:fileTransferWindowClassOtevYtOpenfileTransferWindowClassZbvajc  as:Remained time:fileTransferWindowClassIP odeslatele: Sender's IP:fileTransferWindowClassRychlost:Speed:fileTransferWindowClass Stav:Status:fileTransferWindowClassDoplHujc Additional icqAccountDomaAt Home icqAccountV prciAt Work icqAccountPry Away icqAccountVlastn stav Custom status icqAccountNeruaitDND icqAccountV depresi Depression icqAccountNaatvanEvil icqAccount$PYipraven na pokec Free for chat icqAccountNeviditeln Invisible icqAccount.Neviditeln pro vaechnyInvisible for all icqAccountTNeviditeln pouze pro seznam neviditelnch!Invisible only for invisible list icqAccountObdvmLunch icqAccountNepYtomenNA icqAccountZaneprzdnnOccupied icqAccountOffline icqAccountOnline icqAccount$Nastaven soukromPrivacy status icqAccount*Viditeln pro vaechnyVisible for all icqAccountFViditeln pouze pro seznam kontaktoVisible only for contact list icqAccountLViditeln pouze pro seznam viditelnchVisible only for visible list icqAccount  te zprvy stavuis reading your away message icqAccount8 te zprvu rozaYenho stavu is reading your x-status message icqAccount-icqSettingsClass4Tla tko  tu a tray ikonaAccount button and tray iconicqSettingsClassPokro ilAdvancedicqSettingsClass Apple RomanicqSettingsClassBig5icqSettingsClass Big5-HKSCSicqSettingsClassID klienta: Client ID:icqSettingsClass4Seznam schopnost klienta:Client capability list:icqSettingsClassxKdov strnka (pozn.: ve vtain pYpado se pou~v UTF-8):=Codepage: (note that online messages use utf-8 in most cases)icqSettingsClass<Neposlat po~adavky na avatary Don't send requests for avatartsicqSettingsClassEUC-JPicqSettingsClassEUC-KRicqSettingsClass GB18030-0icqSettingsClassIBM 850icqSettingsClassIBM 866icqSettingsClassIBM 874icqSettingsClassICQ 2002/2003aicqSettingsClass ICQ 2003b ProicqSettingsClassICQ 5icqSettingsClassICQ 5.1icqSettingsClassICQ 6icqSettingsClass ICQ Lite 4icqSettingsClass ISO 2022-JPicqSettingsClass ISO 8859-1icqSettingsClass ISO 8859-10icqSettingsClass ISO 8859-13icqSettingsClass ISO 8859-14icqSettingsClass ISO 8859-15icqSettingsClass ISO 8859-16icqSettingsClass ISO 8859-2icqSettingsClass ISO 8859-3icqSettingsClass ISO 8859-4icqSettingsClass ISO 8859-5icqSettingsClass ISO 8859-6icqSettingsClass ISO 8859-7icqSettingsClass ISO 8859-8icqSettingsClass ISO 8859-9icqSettingsClass Iscii-BngicqSettingsClass Iscii-DevicqSettingsClass Iscii-GjricqSettingsClass Iscii-KndicqSettingsClass Iscii-MlmicqSettingsClass Iscii-OriicqSettingsClass Iscii-PnjicqSettingsClass Iscii-TlgicqSettingsClass Iscii-TmlicqSettingsClass JIS X 0201icqSettingsClass JIS X 0208icqSettingsClassKOI8-RicqSettingsClassKOI8-UicqSettingsClassMac ICQicqSettingsClass HlavnMainicqSettingsClass MuleLao-1icqSettingsClass Verze protokolu:Protocol version:icqSettingsClassQIP 2005icqSettingsClass QIP InfiumicqSettingsClassROMAN8icqSettingsClass:Obnovit pYipojen po odpojenReconnect after disconnecticqSettingsClass Shift-JISicqSettingsClass<Zobrazit ikonu vlastnho stavuShow custom status iconicqSettingsClass2Zobrazit posledn vybranShow last choosenicqSettingsClass:Zobrazit ikonu hlavnho stavuShow main status iconicqSettingsClassTIS-620icqSettingsClassTSCIIicqSettingsClassUTF-16icqSettingsClassUTF-16BEicqSettingsClassUTF-16LEicqSettingsClassUTF-8icqSettingsClassWINSAMI2icqSettingsClass Windows-1250icqSettingsClass Windows-1251icqSettingsClass Windows-1252icqSettingsClass Windows-1253icqSettingsClass Windows-1254icqSettingsClass Windows-1255icqSettingsClass Windows-1256icqSettingsClass Windows-1257icqSettingsClass Windows-1258icqSettingsClassNastaven ICQ icqSettingsicqSettingsClassqutIMicqSettingsClassPoslat hromadn Send multiplemultipleSending1multipleSendingClassOdeslatSendmultipleSendingClassStopmultipleSendingClassmultipleSendingmultipleSendingClassOvYenAuthenticationnetworkSettingsClassPYipojen ConnectionnetworkSettingsClassHTTPnetworkSettingsClassHostitel:Host:networkSettingsClass Udr~ovat spojenKeep connection alivenetworkSettingsClassHNaslouchac port pro pYenos souboro:Listen port for file transfer:networkSettingsClassnenNonenetworkSettingsClass Heslo: Password:networkSettingsClassPort:networkSettingsClassProxynetworkSettingsClassPYipojen proxyProxy connectionnetworkSettingsClassSOCKS 5networkSettingsClass,Zabezpe en pYihlaen Secure loginnetworkSettingsClassServernetworkSettingsClassTyp:Type:networkSettingsClass Jmno: User name:networkSettingsClass login.icq.comnetworkSettingsClassnetworkSettingsnetworkSettingsClass ZruaitCancelnoteWidgetClassOKnoteWidgetClass noteWidgetnoteWidgetClasszDoalo k chyb v sti (napY. stov kabel byl omylem odpojen).ZAn error occurred with the network (e.g., the network cable was accidentally plugged out). oscarProtocol*Neznm seov chyba.'An unidentified network error occurred. oscarProtocolPYipojen bylo odmtnuto od klienta (nebo vyprael  asov limit).6The connection was refused by the peer (or timed out). oscarProtocolBAdresa hostitele nebyla nalezena.The host address was not found. oscarProtocol|Mstn systm b~el z vce zdrojo (napY. pYlia mnoho soketo).?The local system ran out of resources (e.g., too many sockets). oscarProtocolDVzdlen hostitel ukon il spojen.&The remote host closed the connection. oscarProtocol}dan operace nen podporovna mstnm opera nm systmem (napY. chybjc podpora IPv6).kThe requested socket operation is not supported by the local operating system (e.g., lack of IPv6 support). oscarProtocolZSoket pou~v proxy a proxy vy~aduje ovYen.CThe socket is using a proxy, and the proxy requires authentication. oscarProtocol|Operace se selhala, proto~e aplikaci chyb potYebn oprvnn.SThe socket operation failed because the application lacked the required privileges. oscarProtocol:Vyprael  asov limit operace.The socket operation timed out. oscarProtocol6Potvrzen heslo nen stejnConfirm password does not matchpasswordChangeDialog4Sou asn heslo je neplatnCurrent password is invalidpasswordChangeDialogChyba heslaPassword errorpasswordChangeDialog ZmnitChangepasswordChangeDialogClassZmnit hesloChange passwordpasswordChangeDialogClassSou asn heslo:Current password:passwordChangeDialogClassNov heslo: New password:passwordChangeDialogClass"Znovu nov heslo:Retype new password:passwordChangeDialogClass Zadejte %1 hesloEnter %1 passwordpasswordDialog$Zadejte vaae hesloEnter your passwordpasswordDialogClassOKpasswordDialogClass Save passwordpasswordDialogClassVaae heslo:Your password:passwordDialogClass$Nastaven soukrom Privacy listsprivacyListWindow&Seznam ignorovanch Ignore listprivacyListWindowClass(Seznam neviditelnchInvisible listprivacyListWindowClassPYezdvka Nick nameprivacyListWindowClassUINprivacyListWindowClass$Seznam viditelnch Visible listprivacyListWindowClassprivacyListWindowprivacyListWindowClass

readAwayDialogClass ZavYtClosereadAwayDialogClass VrtitReturnreadAwayDialogClassreadAwayDialogreadAwayDialogClass*Vy~adovna autorizaceAuthorization requestrequestAuthDialogClassOdeslatSendrequestAuthDialogClass4PYidat do seznamu kontaktoAdd to contact list searchUser,PYidat/najt u~ivateleAdd/find users searchUserV~dyAlways searchUserAutorizovat Authorize searchUser Detaily kontaktuContact details searchUser*Zjistit stav kontaktuContact status check searchUser HotovoDone searchUserNic nenalezeno Nothing found searchUserVyhledvm Searching searchUserPoslat zprvu Send message searchUser13-17searchUserClass18-22searchUserClass23-29searchUserClass30-39searchUserClass40-49searchUserClass50. lta50'ssearchUserClass50-59searchUserClass60. lta60'ssearchUserClass60+searchUserClass70. lta70'ssearchUserClass80. lta80'ssearchUserClassVysok akolaAcademicsearchUserClass etAccountsearchUserClassAdministrativaAdministrativesearchUserClassPokro ilAdvancedsearchUserClassAfghnistn AfghanistansearchUserClassAfriknatina AfrikaanssearchUserClassVk:Age:searchUserClassAlbnieAlbaniasearchUserClassAlbnatinaAlbaniansearchUserClass Al~rAlgeriasearchUserClassAmerick SamoaAmerican SamoasearchUserClassAndorrasearchUserClassAngolasearchUserClassAnguillasearchUserClassAntiguasearchUserClass"Antigua a BarbudaAntigua & BarbudasearchUserClassAntillyAntillessearchUserClassArabatinaArabicsearchUserClass ArgentinasearchUserClassArmnieArmeniasearchUserClassArmnatinaArmeniansearchUserClass UmnArtsearchUserClassUmn a zbavaArt/EntertainmentsearchUserClassArubasearchUserClassAscensionAscensionIslandsearchUserClassAstronomie AstronomysearchUserClassAudio a VideoAudio and visualsearchUserClassAustrlie AustraliasearchUserClassRakouskoAustriasearchUserClassAutorizovat AuthorizesearchUserClasszerbajd~n AzerbaijansearchUserClass BahamyBahamassearchUserClassBahrajnBahrainsearchUserClassBanglada BangladeshsearchUserClassBarbadossearchUserClassBarbudasearchUserClassBloruskoBelarussearchUserClass BelgieBelgiumsearchUserClassBelizesearchUserClassBeninsearchUserClassBermudyBermudasearchUserClassBhod~puriBhojpurisearchUserClass BhtnBhutansearchUserClassBolvieBoliviasearchUserClassBotswanasearchUserClassBrazlieBrazilsearchUserClass BrunejBruneisearchUserClassBulharskoBulgariasearchUserClassBulharatina BulgariansearchUserClass Burkina FasosearchUserClassBarmatinaBurmesesearchUserClassBurundisearchUserClass$Obchod a ekonomikaBusiness & EconomysearchUserClass$Podnikn a slu~byBusiness servicessearchUserClassKambod~aCambodiasearchUserClassKamerunCameroonsearchUserClass KanadaCanadasearchUserClass Kanrsk ostrovyCanary IslandssearchUserClassKantonatina CantonesesearchUserClassAutomobilyCarssearchUserClassKatalnatinaCatalansearchUserClass"Kajmansk ostrovyCayman IslandssearchUserClassFanklubyCelebrity FanssearchUserClass adChadsearchUserClass ChileChile, Rep. ofsearchUserClass naChinasearchUserClass natinaChinesesearchUserClassVno n ostrovChristmas IslandsearchUserClass Obec:City:searchUserClassVymazatClearsearchUserClassMdaClothingsearchUserClassSbratelstv CollectionssearchUserClassStudent VO`College StudentsearchUserClassKolumbieColombiasearchUserClass*Spole nost, veYejnostCommunity & SocialsearchUserClassComorossearchUserClassPo ta e ComputerssearchUserClass*SpotYebn elektronikaConsumer electronicssearchUserClassCookovy ostrovy CookIslandssearchUserClassKostarika Costa RicasearchUserClass Zem:Country:searchUserClassChorvatskoCroatiasearchUserClassChorvatatinaCroatiansearchUserClassKubaCubasearchUserClass(Kultura a literaturaCulture & LiteraturesearchUserClassKyprCyprussearchUserClass eatinaCzechsearchUserClass  esko Czech Rep.searchUserClassDnatinaDanishsearchUserClass DnskoDenmarksearchUserClass Diego GarciasearchUserClassRozveden/DivorcedsearchUserClassD~ibutiDjiboutisearchUserClass4Nemazat pYedchoz vsledkyDo not clear previous resultssearchUserClassDominikaDominicasearchUserClass,Dominiknsk republikaDominican Rep.searchUserClassHolandatinaDutchsearchUserClassEkvdorEcuadorsearchUserClassVzdlvn EducationsearchUserClassEgyptsearchUserClassSalvador El SalvadorsearchUserClassEmailsearchUserClassZasnouben/EngagedsearchUserClassStrojrenstv EngineeringsearchUserClassAngli tinaEnglishsearchUserClass Zbava EntertainmentsearchUserClassEritreasearchUserClass EsperantosearchUserClassEstonskoEstoniasearchUserClassEstonatinaEstoniansearchUserClassEtiopieEthiopiasearchUserClassFaersk ostrovyFaeroe IslandssearchUserClassFalklandyFalkland IslandssearchUserClass Peratina (Farsi)FarsisearchUserClass }enskFemalesearchUserClass Fid~iFijisearchUserClass Finance a obchodFinance and corporatesearchUserClassEkonomikaFinancial ServicessearchUserClass FinskoFinlandsearchUserClassFinatinaFinnishsearchUserClass Jmno First namesearchUserClass Jmno: First name:searchUserClassFitnesssearchUserClassFrancieFrancesearchUserClassFrancouzatinaFrenchsearchUserClass$Francouzsk Guyana French GuianasearchUserClass*Francouzsk PolynsieFrench PolynesiasearchUserClass&Francouzsk AntillyFrenchAntillessearchUserClassGabonsearchUserClassGaelatinaGaelicsearchUserClass GambieGambiasearchUserClassHryGamessearchUserClassPohlav / Vk Gender/AgesearchUserClassPohlav:Gender:searchUserClass GruzieGeorgiasearchUserClassNm inaGermansearchUserClassNmeckoGermanysearchUserClass GhanaGhanasearchUserClass GibraltarsearchUserClassSttn sprva GovernmentsearchUserClass XeckoGreecesearchUserClassXe tinaGreeksearchUserClassGrnsko GreenlandsearchUserClassGrenadasearchUserClass GuadeloupesearchUserClass GuatemalasearchUserClassGuineasearchUserClass Guinea-BissausearchUserClassGuyanasearchUserClassHaitisearchUserClassZdrav a krsaHealth and beautysearchUserClassHebrejatinaHebrewsearchUserClassStudent S`High School StudentsearchUserClassHindatinaHindisearchUserClassKon kyHobbiessearchUserClassV domcnostiHomesearchUserClass"Domc spotYebi eHome automationsearchUserClassHondurassearchUserClass Hong KongsearchUserClass*Vrobky pro domcnostHousehold productssearchUserClassMaaratina HungariansearchUserClassMaarskoHungarysearchUserClass0ICQ - Poskytovn pomociICQ - Providing HelpsearchUserClass IslandIcelandsearchUserClassIslandatina IcelandicsearchUserClass IndieIndiasearchUserClassIndonsie IndonesiasearchUserClassIndonzatina IndonesiansearchUserClass Zjmy: Interests:searchUserClassInternetsearchUserClassIrkIraqsearchUserClass IrskoIrelandsearchUserClass IzraelIsraelsearchUserClassItalatinaItaliansearchUserClass ItlieItalysearchUserClassJamajkaJamaicasearchUserClassJaponskoJapansearchUserClassJaponatinaJapanesesearchUserClassJordnskoJordansearchUserClassKazachstn KazakhstansearchUserClassKeHaKenyasearchUserClassKl ov slova: Keywords:searchUserClassKhmeratinaKhmersearchUserClassKiribatisearchUserClass(Severn Korea (KLDR) Korea, NorthsearchUserClassJi~n Korea Korea, SouthsearchUserClassKorejatinaKoreansearchUserClass KuvajtKuwaitsearchUserClassKyrgyzskKyrgyzsearchUserClassKirgizstn KyrgyzstansearchUserClass Jazyk: Language:searchUserClassLaosatinaLaosearchUserClassLaossearchUserClassPYjmen Last namesearchUserClassPYjmen: Last name:searchUserClassLotyaskoLatviasearchUserClassLitevatinaLatviansearchUserClassPrvo, justiceLawsearchUserClassLibanonLebanonsearchUserClassLesothosearchUserClassLibrieLiberiasearchUserClassLichtnatejnsko LiechtensteinsearchUserClass}ivotn styl LifestylesearchUserClass Litva LithuaniasearchUserClassLotyaatina LithuaniansearchUserClass Dlouhodob vztahLong term relationshipsearchUserClassLucembursko LuxembourgsearchUserClass MacaoMacausearchUserClassMadagaskar MadagascarsearchUserClass*Objednvkov katalogyMail order catalogsearchUserClassMalawisearchUserClassMalajatinaMalaysearchUserClassMalajsieMalaysiasearchUserClassMaledivyMaldivessearchUserClass Mu~skMalesearchUserClassMalisearchUserClassMaltasearchUserClassMaltatinaMaltesesearchUserClass$Management, veden ManagerialsearchUserClass Vroba ManufacturingsearchUserClassRodinn stav:Marital status:searchUserClassvdan/~enatMarriedsearchUserClass&Marshallovy ostrovyMarshall IslandssearchUserClassMartinik MartiniquesearchUserClassMauritnie MauritaniasearchUserClassMauricius MauritiussearchUserClassOstrov Mayotte MayotteIslandsearchUserClass MdiaMediasearchUserClassZdravotnictvMedical/HealthsearchUserClass MexikoMexicosearchUserClass ArmdaMilitarysearchUserClassMoldvieMoldova, Rep. ofsearchUserClass MonakoMonacosearchUserClassMongolskoMongoliasearchUserClass MontserratsearchUserClassVce >>More >>searchUserClass MarokoMoroccosearchUserClassFilmy a TV Movies/TVsearchUserClassMozambik MozambiquesearchUserClass HudbaMusicsearchUserClassMyanmarsearchUserClass ZhadyMysticssearchUserClassNamibieNamibiasearchUserClass6PYroda a ~ivotn prostYedNature and EnvironmentsearchUserClassNaurusearchUserClass NeplNepalsearchUserClassNizozemsko NetherlandssearchUserClassNevissearchUserClassNov Zland New ZealandsearchUserClassNov Kaledonie NewCaledoniasearchUserClass"Noviny a  asopisy News & MediasearchUserClassNikaragua NicaraguasearchUserClassPYezdvka Nick namesearchUserClassPYezdvka: Nick name:searchUserClassNigersearchUserClassNigrieNigeriasearchUserClassNiuesearchUserClass&Nesttn organizaceNon-Goverment OrganisationsearchUserClassNorfolkNorfolk IslandsearchUserClass NorskoNorwaysearchUserClassNoratina NorwegiansearchUserClassZamstnn: Occupation:searchUserClassOmnOmansearchUserClassPouze online Online onlysearchUserClassPYtelstvOpen relationshipsearchUserClassJinOthersearchUserClassOstatn slu~byOther servicessearchUserClass"Venkovn aktivityOutdoor ActivitiessearchUserClassPkistnPakistansearchUserClassPalausearchUserClassPanamasearchUserClass"Papua-Nov GuineaPapua New GuineasearchUserClassParaguaysearchUserClassRodi ovstv ParentingsearchUserClassVe rkyPartiessearchUserClassPeratinaPersiansearchUserClassPerusearchUserClass&Mazl ci a zvYtka Pets/AnimalssearchUserClassFilipny PhilippinessearchUserClass PolskoPolandsearchUserClassPolatinaPolishsearchUserClassPortugalskoPortugalsearchUserClassPortugalatina PortuguesesearchUserClass0Profesionln organizace ProfessionalsearchUserClassLiteratura PublishingsearchUserClassPortoriko Puerto RicosearchUserClass KatarQatarsearchUserClassNbo~enstvReligionsearchUserClassProdej, obchodRetailsearchUserClassZna kov zbo~ Retail storessearchUserClassV dochoduRetiredsearchUserClass VrtitReturnsearchUserClassReunion IslandsearchUserClassRumunskoRomaniasearchUserClassRumunatinaRomaniansearchUserClassRota Rota IslandsearchUserClass RuskoRussiasearchUserClassRuatinaRussiansearchUserClassRwandasearchUserClassSv. Lucie Saint LuciasearchUserClass Saipan Saipan IslandsearchUserClass San MarinosearchUserClassSaudsk Arbie Saudi ArabiasearchUserClassVda a VzkumScience & ResearchsearchUserClass$Vda a technologieScience/TechnologysearchUserClassSkotskoScotlandsearchUserClass HledatSearchsearchUserClassHledat podle: Search by:searchUserClassSenegalsearchUserClass}ijc oddlen SeparatedsearchUserClassSrbatinaSerbiansearchUserClassSeychely SeychellessearchUserClass Sierra LeonesearchUserClassSingapur SingaporesearchUserClassSvobodn/SinglesearchUserClassXemeslaSkillssearchUserClassSlovenatinaSlovaksearchUserClassSlovenskoSlovakiasearchUserClassSlovinskoSloveniasearchUserClassSlovinatina SloveniansearchUserClass Spole ensk vdySocial sciencesearchUserClass&`alamounovy ostrovySolomon IslandssearchUserClassSomlatinaSomalisearchUserClassSomlskoSomaliasearchUserClassJi~n Afrika SouthAfricasearchUserClass VesmrSpacesearchUserClass`panlskoSpainsearchUserClass`panlatinaSpanishsearchUserClass*Sportovn a atletikaSporting and athleticsearchUserClass SportySportssearchUserClassSr Lanka Sri LankasearchUserClassSv. Helena St. HelenasearchUserClassSv. Kryatof St. KittssearchUserClass SdnSudansearchUserClassSurinamSurinamesearchUserClassSvahilatinaSwahilisearchUserClassSvazijsko SwazilandsearchUserClass`vdskoSwedensearchUserClass`vdatinaSwedishsearchUserClass`vcarsko SwitzerlandsearchUserClass SrieSyrian ArabRep.searchUserClassTagalatinaTagalogsearchUserClassTaiwansearchUserClassTd~ikistn TajikistansearchUserClassTanznieTanzaniasearchUserClassTataratinaTatarsearchUserClassTechnick obory TechnicalsearchUserClassThajatinaThaisearchUserClassThajskoThailandsearchUserClass Tinian Tinian IslandsearchUserClassTogosearchUserClassTokelausearchUserClassTongasearchUserClassCestovnTravelsearchUserClassTuniskoTunisiasearchUserClassTureckoTurkeysearchUserClassTure tinaTurkishsearchUserClassTurkmenistn TurkmenistansearchUserClassTuvalusearchUserClassUINsearchUserClassUSAsearchUserClassUgandasearchUserClassUkrajinaUkrainesearchUserClassUkrajinatina UkrainiansearchUserClassVelk BritnieUnited KingdomsearchUserClassStudent V`University studentsearchUserClassUrdusearchUserClassUruguaysearchUserClassUzbekistn UzbekistansearchUserClassVanuatusearchUserClassVatikn Vatican CitysearchUserClass VenezuelasearchUserClassVietnamsearchUserClassVietnamatina VietnamesesearchUserClassWalessearchUserClassWeb. designer Web DesignsearchUserClassTvorba webu Web buildingsearchUserClassZpadn Samoa Western SamoasearchUserClassOvdovl/WidowedsearchUserClass}enyWomensearchUserClass JemenYemensearchUserClass JirdiaYiddishsearchUserClassJorubatinaYorubasearchUserClassJugoslvie YugoslaviasearchUserClass.Jugoslvie -  ern HoraYugoslavia - MontenegrosearchUserClass&Jugoslvie - SrbskoYugoslavia - SerbiasearchUserClass ZambieZambiasearchUserClassZimbabwesearchUserClass"Hledn u~ivatele searchUsersearchUserClass"Deaktivovan  et Suspended account snacChannelPo et pYipojench u~ivatelo z tto IP adresy pYekro ilo maximum (rezervace)K The users num connected from this IP has reached the maximum (reservation) snacChanneln et byl deaktivovn kvoli tvmu vku (mlada 13ti let)0Account suspended because of your age (age < 13) snacChannel(Chybn stav databzeBad database status snacChannel2Chybn stav synchronizaceBad resolver status snacChannelpNelze se registrovat do ICQ st. Zkuste to za pr minut=Can't register on the ICQ network. Reconnect in a few minutes snacChannel&Chyba pYipojen: %1Connection Error: %1 snacChannel0Chyba spojen s databz DB link error snacChannel.Chybn odpov databze DB send error snacChannelZruaen  etDeleted account snacChannelVypraen  etExpired account snacChannel6Chybn pYezdvka nebo hesloIncorrect nick or password snacChannel^VnitYn chyba klienta (apatn vstup autorizace)/Internal client error (bad input to authorizer) snacChannelVnitYn chybaInternal error snacChannel Neplatn SecurIDInvalid SecurID snacChannelNeplatn  etInvalid account snacChannel,Chybn databzov poleInvalid database fields snacChannel6Chybn pYezdvka nebo hesloInvalid nick or password snacChannel6Zmna pYezdvky nebo heslaMismatch nick or password snacChannel.Nen pYstupn databzeNo access to database snacChannel8Nen mo~n synchronn pYenosNo access to resolver snacChannelLimit po~adavko byl pYekro en (rezervace). Zkuste se znovu pYipojit za pr minutKRate limit exceeded (reservation). Please try to reconnect in a few minutes snacChannelLimit po~adavko byl pYekro en. Zkuste se znovu pYipojit za pr minut=Rate limit exceeded. Please try to reconnect in a few minutes snacChannel0Chyba vyhrazen mapovnReservation map error snacChannel, asov limit rezervaceReservation timeout snacChannel,Slu~ba do asn offlineService temporarily offline snacChannel2Slu~ba do asn nedostupnService temporarily unavailable snacChannel~Po et pYipojench u~ivatelo z tto IP adresy pYekro ilo maximumVk:</b> %1 <br>Age: %1
userInformation<<b>Datum narozen:</b> %1 <br>Birth date: %1
userInformation*<b>Jmno:</b> %1 <br>First name: %1
userInformation.<b>Pohlav:</b> %1 <br>Gender: %1
userInformation4<b>Bydliat:</b> %1 %2<br>Home: %1 %2
userInformation0<b>PYjmen:</b> %1 <br>Last name: %1
userInformation2<b>PYezdvka:</b> %1 <br>Nick name: %1
userInformation<<b>Verze protokolu: </b>%1<br>Protocol version: %1
userInformationD<b>HovoY jazyky:</b> %1 %2 %3<br>%Spoken languages: %1 %2 %3
userInformation.<b>[Schopnosti]</b><br>[Capabilities]
userInformationX<b>[Extra informace pYmho spojen]</b><br>)[Direct connection extra info]
userInformation<<b>[Krtk schopnosti]</b><br>[Short capabilities]
userInformation%userInformation.Obrzek je pYlia velkImage size is too biguserInformationPObrzky (*.gif *.bmp *.jpg *.jpeg *.png)'Images (*.gif *.bmp *.jpg *.jpeg *.png)userInformationOtevYt soubor Open FileuserInformation&Chyba pYi otevrn Open erroruserInformation<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html>

userInformationClassO...AboutuserInformationClass Informace o  tu Account infouserInformationClassDoplHujc AdditinonaluserInformationClassVk:Age:userInformationClasshVaichni u~ivatel si mne mohou pYidat bez autorizace)All uses can add me without authorizationuserInformationClassjPovolit ostatnm vidt moj stav pYi hledn a na webu9Allow others to view my status in search and from the webuserInformationClassZAutorizace webaware (zjiatn stavu pYes web)Authorization/webawareuserInformationClassDatum narozen Birth dateuserInformationClass Mobil: Cellular:userInformationClass Obec:City:userInformationClass ZavYtCloseuserInformationClassSpole nostCompanyuserInformationClass$Nzev spole nosti: Company name:userInformationClass Zem:Country:userInformationClassOddlen: Div/dept:userInformationClass2NezveYejHovat pro vaechnyDon't publish for alluserInformationClassEmail:userInformationClassFax:userInformationClass }enskFemaleuserInformationClass Jmno: First name:userInformationClassPohlav:Gender:userInformationClass ObecnGeneraluserInformationClassBydliatHomeuserInformationClassAdresa domo Home addressuserInformationClass"Domovsk strnka: Home page:userInformationClass Zjmy InterestsuserInformationClass(Posledn pYihlaen: Last login:userInformationClassPYjmen: Last name:userInformationClass Mu~skMaleuserInformationClassRodinn stav:Marital status:userInformationClass(Vy~adovat autorizaciMy authorization is requireduserInformationClass JmnoNameuserInformationClassPYezdvka: Nick name:userInformationClassPovoln: Occupation:userInformationClassPovodn zOriginally fromuserInformationClass OsobnPersonaluserInformationClassTelefon:Phone:userInformationClassPozice: Position:userInformationClassRegistrace: Registration:userInformationClassDetailyRequest detailsuserInformationClass Ulo~itSaveuserInformationClassMluv jazykem:Spoken language:userInformationClass Stt:State:userInformationClassAdresa:Street address:userInformationClass Ulice:Street:userInformationClass SouhrnSummaryuserInformationClassUIN:userInformationClassWebov strnky: Web site:userInformationClassZamstnnWorkuserInformationClassAdresa do prce Work addressuserInformationClassPS :Zip:userInformationClassuserInformationuserInformationClassqutim-0.2.0/languages/cs_CZ/binaries/chess.qm0000644000175000017500000000574411270772612022542 0ustar euroelessareuroelessarb?z v w!B8iZO0I }^M^^ :ɖAdy=25?f* jk>0NrP,O˕ ( l# e( '!E)i Provst roadu?Do you want to castle?DrawerChybn tah Error movingDrawerNeNoDrawer K v~i To castleDrawerAnoYesDrawerjNelze pYesunout tato figurka, proto~e krl je v aachu8You cannot move this figure because the king is in checkDrawer<Jakou figurku chcete nastavit?What figure should I set? FigureDialog ern hraje zBlack game from GameBoard ern hraje sBlack game with GameBoard,Chcete ulo~it obrzek?Do you want to save the image? GameBoardKonec hry End the game GameBoard Chyba!Error! GameBoard Game over GameBoardNe, neukldatNo, don't save GameBoard Thne protivnk.Opponent turn. GameBoard$qutIM chess pluginQutIM chess plugin GameBoardUlo~it obrzek Save image GameBoard<Chcete ukon it hru? Prohrajete*Want you to end the game? You will lose it GameBoardBl hraje zWhite game from GameBoardBl hraje sWhite game with GameBoardAno, ulo~it Yes, save GameBoard.Mte mat. Prohrl jste.#You have a mate. You lost the game. GameBoardMte patYou have a stalemate GameBoardVyhrl jsteYou scored the game GameBoard(Protivnk zavYel hru!Your opponent has closed the game GameBoardThnea ty. Your turn. GameBoardB vs zve k hran aacho. PYijmout?# invites you to play chess. Accept? chessPlugin$, s odovodnnm: ", with reason: " chessPluginHrt aachy Play chess chessPluginQutIM chess plugin chessPluginHNepYijm vaai pozvnku ke hYe aachy&don't accept your invite to play chess chessPlugin Hern konverzace Game chat gameboard$Protivnkovy tahy:Opponent moves: gameboardQutIM chess plugin gameboardVaae tahy: Your moves: gameboardqutim-0.2.0/languages/cs_CZ/binaries/core.qm0000644000175000017500000032243011273035151022350 0ustar euroelessareuroelessar7(L.VE2fqrr8ahyDfD D(c#i.v)=)>*%-+\+4H<)G-GHw96Hw9q*Hw9@J6JlTALblM =Ojz2oTG5/3TV#lTV`TXmVtdVtV8V̌uPWiz3.W3`ZlDa\3i6p3*Vx0x{/}2b>U9-YJ9\+ *-8ߵ@.&NmNwubz*Gzoe>n=@'  z Id & WiR$T'b:B%)r:v:E'mTOo\dZJ Zwq3M}.;i"GGfdbF_bK-q<-q> ~4"~6o~18I,A}Q]Q_*}h5chοu?,FS jKQj~d55dx\'.lsZ<ed?GAZIlBNTIOif qJ4I6ITbIWIxIzFIx{9 G j    ųqb͢lK! l:&/ 8 tGK4m`0q'tV3D 5WC6#C$SPC A=C \SWXe0E#e0E~jlDet~ Rv|sby#1.UF>M>L29XKI@N4ENlnw;+5v0#0~yߺLR`@m9Ah 5s;wQ#`X6rq?^CcoS)-VѥVѥ X'qaN{ibSm=p#bz)azó:Պ6Hp`a.b]Lz+mӣ~{>sRn1GCAZ%: Jo)Q:R;EL8 e`wi=li=qiANqjx0kJ9r> 0,*y{uW lYT{JUbpGbhfӉ4qI#78e3=B<4G RO`t+a naUsfu{g{p<]Yܲ]]0^J:* 4^uO.U4.|:9Ձ."I $ j[ I I fO & = 0| \P% q| vn |J  C QS $O <   ?? j~0 =W f3?  1@7 1\Q o# uE 8vX 1b 7x Y  zH c " - A  e.$ s> U ~ $_ $ zz5 p9 >2 >X > %` -^ bpw t t t F ^U L 87 5s f )ov 7N =]% _ڃ d ~b$YC s[ hBw  ^ TJ, . 7 ɔb mV %w C4 4C 4u } Y X ӕ *D t c+ E Ea' uu #`P ;* >1g D ?@U [NE g |,= |,? R| KX 1 b _f Z  c/ s  ( _V2 W ` ycd_ n u} P U;Z7U W* YvT Z;N q:: rN rN t nz ## z8 t}[ 9^ < < < % Nk 9; +@dUJ'.+EHz4h)O3Xl(gls8:FZÊ_/6TsG `%?.%vC/uebLS2m3}p.jBZAC $ $i Detaily kontaktuContact detailsAbstractContextLayer&Historie konverzaceMessage historyAbstractContextLayerPoslat zprvu Send messageAbstractContextLayer tyAccountManagementAccountManagementClass PYidatAddAccountManagementClassUpravitEditAccountManagementClassOdstranitRemoveAccountManagementClass,Provodce pYidnm  tuAdd Account WizardAddAccountWizardOdeslatSend AdiumChatForm about:blank AdiumChatFormhPYijmat zprvy jen od u~ivatelo ze seznamu kontakto&Accept messages only from contact listAntiSpamLayerSettingsClass$Odpov na otzku:Answer to question:AntiSpamLayerSettingsClass&Antispamov otzka:Anti-spam question:AntiSpamLayerSettingsClassAnti-spamAntiSpamSettingsAntiSpamLayerSettingsClassLNepYijmat przdn zprvy o autorizaci3Do not accept NIL messages concerning authorizationAntiSpamLayerSettingsClassPNepYijmat przdn zprvy s URL adresami$Do not accept NIL messages with URLsAntiSpamLayerSettingsClassvNeposlat otzku/odpov, pokud jste ve stavu "Neviditeln"5Don't send question/reply if my status is "invisible"AntiSpamLayerSettingsClass:Zapnout anti-spamovho robotaEnable anti-spam botAntiSpamLayerSettingsClass6Zprva po sprvn odpovdi:Message after right answer:AntiSpamLayerSettingsClassJUpozornit, kdy~ je zprva zablokovnaNotify when blocking messageAntiSpamLayerSettingsClassUpravitEditAppearanceSettingsVybrat motiv: Select theme:AppearanceSettingsOtestovatTestAppearanceSettings...ChatForm2Vymazat text z konverzaceClear chat logChatForm"Historie kontaktuContact historyChatForm(Informace o kontaktuContact informationChatFormCtrl+FChatFormCtrl+HChatFormCtrl+IChatFormCtrl+MChatFormCtrl+QChatFormCtrl+TChatFormSmajlci Emoticon menuChatFormFormChatForm*Citovat ozna en textQuote selected textChatFormOdeslatSendChatFormPoslat soubor Send fileChatFormBPoslat obrzek (mena ne~ 7,6 kB)Send image < 7,6 KBChatFormPoslat zprvu Send messageChatForm.Odesln zprv enteremSend message on enterChatForm2Odeslat oznmen o psanSend typing notificationChatFormVymnit vzhled Swap layoutChatFormOkno konverzace Chat windowChatLayerClass:( hodina:minuta, cel datum )( hour:min, full date )ChatSettingsWidget2( hodina:minuta:sekunda )( hour:min:sec )ChatSettingsWidgetN( hodina:minuta:sekunda den/msc/rok )( hour:min:sec day/month/year )ChatSettingsWidgetPo kliknut na ikonu v systmov liat zobrazit vaechny nepYe ten zprvy6After clicking on tray icon show all unreaded messagesChatSettingsWidgetKonverzaceChatChatSettingsWidgetJKonverzace a konference v jednom okn#Chats and conferences in one windowChatSettingsWidgetBTla tko pro zavYen na zlo~kchClose button on tabsChatSettingsWidgetLZavYt okno/zlo~ku po odesln zprvy0Close tab/message window after sending a messageChatSettingsWidgetDObarvovat pYezdvky v konferencch!Colorize nicknames in conferencesChatSettingsWidget4Neblikat v systmov liatDon't blink in task barChatSettingsWidget<Neseskupovat zprvy po (sek.):!Don't group messages after (sec):ChatSettingsWidgetZNezobrazovat udlosti, pokud je otevYeno okno+Don't show events if message window is openChatSettingsWidgetFormChatSettingsWidget ObecnGeneralChatSettingsWidgetNOtevYt okno/zlo~ku pYi pYijet zprvy+Open tab/message window if received messageChatSettingsWidgetnZapamatovat otevYen zlo~ky po zavYen okna konverzace3Remember openned privates after closing chat windowChatSettingsWidget6Odstranit zprvy z okna po:%Remove messages from chat view after:ChatSettingsWidget@Odesln zprv dvojitm enteremSend message on double enterChatSettingsWidget.Odesln zprv enteremSend message on enterChatSettingsWidget2Odeslat oznmen o psanSend typing notificationsChatSettingsWidgetZobrazit jmna Show namesChatSettingsWidgetZlo~kov re~im Tabbed modeChatSettingsWidget2Zlo~ky jsou pYesunutelnTabs are movableChatSettingsWidgetVzhled zprvText browser modeChatSettingsWidget&Formt data a  asu: Timestamp:ChatSettingsWidgetWebkit re~im Webkit modeChatSettingsWidgetD<font color='green'>Pae...</font>$Typing... ChatWindow.Obrzek je pYlia velkImage size is too big ChatWindowPObrzky (*.gif *.png *.bmp *.jpg *.jpeg)'Images (*.gif *.png *.bmp *.jpg *.jpeg) ChatWindowOtevYt soubor Open File ChatWindow&Chyba pYi otevrn Open error ChatWindow$Vymazat konverzaci Clear chatConfFormCtrl+M, Ctrl+SConfFormCtrl+QConfFormCtrl+TConfFormFormConfForm8Obrcen/transliterace zprvInvert/translit messageConfForm*Citovat ozna en textQuote selected textConfFormOdeslatSendConfForm"Odesln enterem Send on enterConfForm"Zobrazit smajlkyShow emoticonsConfForm

Console

ConsoleFormConsoleNen v seznamu Not in listContactListProxyModelOfflineContactListProxyModelOnlineContactListProxyModel100%ContactListSettingsClass  et:Account:ContactListSettingsClass Bez rme ku oknaBorderless WindowContactListSettingsClass4Nastaven seznamu kontaktoContactListSettingsContactListSettingsClassPYizposoben CustomizeContactListSettingsClass"PYizposobit font:Customize font:ContactListSettingsClass\Vykreslit pozad za pou~it alternativn barvy1Draw the background with using alternating colorsContactListSettingsClassSkupina:Group:ContactListSettingsClass*Skrt przdn skupinyHide empty groupsContactListSettingsClass.Skrt offline u~ivateleHide offline usersContactListSettingsClass>Skrt offline/online oddlova eHide online/offline separatorsContactListSettingsClassVzhled a dojem Look'n'FeelContactListSettingsClass HlavnMainContactListSettingsClassOffline:ContactListSettingsClassOnline:ContactListSettingsClassNeprohlednost:Opacity:ContactListSettingsClassStandardn oknoRegular WindowContactListSettingsClassOddlova : Separator:ContactListSettingsClassZobrazit  ty Show accountsContactListSettingsClass Zobrazit avatary Show avatarsContactListSettingsClass,Zobrazit ikony klientoShow client iconsContactListSettingsClass Zobrazit skupiny Show groupsContactListSettingsClass8SeYadit kontakty podle stavuSort contacts by statusContactListSettingsClassMotiv rme ku Theme borderContactListSettingsClassNstrojov okno Tool windowContactListSettingsClassStyl okna: Window Style:ContactListSettingsClass4Nelze zapsat do souboru %1Cannot write to file %1Core::PListConfigBackend&Soubor&FileDefaultContactListO qutIMAboutDefaultContactListOvldnControlDefaultContactListSkrt skupiny Hide groupsDefaultContactListHlavn nabdka Main menuDefaultContactListZtlumitMuteDefaultContactList2Zobrazit offline kontakty Show offlineDefaultContactList,Zobrazit/skrt skupinyShow/hide groupsDefaultContactList>Zobrazit/skrt offline kontaktyShow/hide offlineDefaultContactList(Zapnout/vypnout zvuk Sound on/offDefaultContactListqutIMDefaultContactListMo~n variantyPossible variants GeneralWindowBqwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>? GeneralWindowOvYenAuthenticationGlobalProxySettingsClass ProxyGlobalProxySettingsGlobalProxySettingsClassHTTPGlobalProxySettingsClassHostitel:Host:GlobalProxySettingsClassnenNoneGlobalProxySettingsClass Heslo: Password:GlobalProxySettingsClassPort:GlobalProxySettingsClassProxyGlobalProxySettingsClassSOCKS 5GlobalProxySettingsClassTyp:Type:GlobalProxySettingsClass Jmno: User name:GlobalProxySettingsClass<Vchoz> GuiSetttingsWindowClass&<Vchoz> (English) ( English )GuiSetttingsWindowClass<Ru n> GuiSetttingsWindowClass <nen>GuiSetttingsWindowClass<Systmov>GuiSetttingsWindowClassStyl aplikace:Application style:GuiSetttingsWindowClass Pou~tApplyGuiSetttingsWindowClassMotiv rme ku: Border theme:GuiSetttingsWindowClass ZruaitCancelGuiSetttingsWindowClass*Motiv zprv (webkit):Chat log theme (webkit):GuiSetttingsWindowClass6Komunika n dialogov okno:Chat window dialog:GuiSetttingsWindowClass.Motiv seznamu kontakto:Contact list theme:GuiSetttingsWindowClassSmajlci: Emoticons:GuiSetttingsWindowClass Jazyk: Language:GuiSetttingsWindowClassOKGuiSetttingsWindowClass0Motiv oznamovacho okna:Popup windows theme:GuiSetttingsWindowClassMotiv zvuko: Sounds theme:GuiSetttingsWindowClass*Motiv stavovch ikon:Status icon theme:GuiSetttingsWindowClass.Motiv systmovch ikon:System icon theme:GuiSetttingsWindowClass@Nastaven u~ivatelskho rozhranUser interface settingsGuiSetttingsWindowClassHistorieHistorySettingsHistorySettingsClass6Ukldat historii konverzaceSave message historyHistorySettingsClass\Zobrazench poslednch zprv v okn konverzace(Show recent messages in messaging windowHistorySettingsClass1HistoryWindowClass  et:Account:HistoryWindowClassVae: %L1All: %L1HistoryWindowClassOd:From:HistoryWindowClassHistorie HistoryWindowHistoryWindowClassPYchoz: %L1In: %L1HistoryWindowClassOdchoz: %L1Out: %L1HistoryWindowClass VrtitReturnHistoryWindowClass HledatSearchHistoryWindowClassVae: %L1All: %L1#JsonHistoryNamespace::HistoryWindowPYchoz: %L1In: %L1#JsonHistoryNamespace::HistoryWindownen historie No History#JsonHistoryNamespace::HistoryWindowOdchoz: %L1Out: %L1#JsonHistoryNamespace::HistoryWindow%1 zmnil stav%1 changed statusKineticPopupBackend,%1 m dnes narozeniny!%1 has birthday today!!KineticPopupBackend%1 je offline %1 is offlineKineticPopupBackend%1 je online %1 is onlineKineticPopupBackend%1 pae %1 is typingKineticPopupBackend0Zablokovan zprva od %1Blocked message from %1KineticPopupBackend Po etCountKineticPopupBackendZprva od %1:Message from %1:KineticPopupBackend.Systmov zprva od %1:System message from %1:KineticPopupBackendqutIM spuatnqutIM launchedKineticPopupBackend,VyplHte veaker daje.Please fill all fields. LastLoginPage^Zadejte pYihlaaovac daje pro zvolen protokol&Please type chosen protocol login data LastLoginPage pxNotificationsLayerSettingsClass sNotificationsLayerSettingsClass$kontakt zmn stavContact change statusNotificationsLayerSettingsClass$se kontakt odhlsContact sign offNotificationsLayerSettingsClass&se kontakt pYihlsContact sign onNotificationsLayerSettingsClass&kontakt pae zprvuContact typing messageNotificationsLayerSettingsClass Vaka:Height:NotificationsLayerSettingsClassDoln lev rohLower left cornerNotificationsLayerSettingsClassDoln prav rohLower right cornerNotificationsLayerSettingsClass"je pYijata zprvaMessage receivedNotificationsLayerSettingsClassNeposouvatNo slideNotificationsLayerSettingsClassOznmenNotificationsLayerSettingsNotificationsLayerSettingsClassOznmit, pokud: Notify when:NotificationsLayerSettingsClassPozice: Position:NotificationsLayerSettingsClass8Zobrazovat zprvy v bublin:Show balloon messages:NotificationsLayerSettingsClass4Zobrazovat oznamovac oknaShow popup windowsNotificationsLayerSettingsClassSkrt po: Show time:NotificationsLayerSettingsClass*Posouvat horizontlnSlide horizontallyNotificationsLayerSettingsClass&Posouvat vertiklnSlide verticallyNotificationsLayerSettingsClass Styl:Style:NotificationsLayerSettingsClassHorn lev rohUpper left cornerNotificationsLayerSettingsClassPrav horn rohUpper right cornerNotificationsLayerSettingsClass `Yka:Width:NotificationsLayerSettingsClassAES aifrovn AES cryptoPluginpDoplHujc nastaven qutIMu realizovan pro Apple PListy4Additional qutIM config realization for Apple plistsPluginVchoz realizace qutIM konverzace, zalo~en na stylech Adium konverzace:Default qutIM chat realization, based on Adium chat stylesPluginhVchoz realizace qutIM nastaven. Zalo~en na JSON.0Default qutIM config realization. Based on JSON.PluginpVchoz realizace qutIM seznam kontakto. Nyn jednoduch3Default qutIM contact list realization. Just simplePlugin~Vchoz realizace qutIM aifrovn. Zalo~en na algoritmu AES256;Default qutIM crypto realization. Based on algorithm aes256PlugintVchoz realizace qutIM oznamovacch oken. B~ na Kinetic3Default qutIM popup realization. Powered by KineticPluginVchoz realizace qutIM dialogu nastaven s OS X stylem na hornm paneluADefault qutIM settings dialog realization with OS X style top barPluginNastaven JSON JSON configPlugin2Kinetick oznamovac oknaKinetic popupsPluginNastaven PList PList configPlugin4Jednoduch seznam kontaktoSimple ContactListPlugin0Webkit vzhled konverzaceWebkit chat layerPluginX Settings dialogPlugin1PluginSettingsClass ZruaitCancelPluginSettingsClass2Nastaven plugino - qutIMConfigure plugins - qutIMPluginSettingsClassOkPluginSettingsClass %1 PopupWindowb%1
%2 PopupWindowOznamovac okno PopupWindowPopupWindowClass,Odstranit profil "%1"?Delete %1 profile?ProfileLoginDialog Odstranit profilDelete profileProfileLoginDialogNesprvn hesloIncorrect passwordProfileLoginDialogPYihlsitLog inProfileLoginDialog ProfilProfileProfileLoginDialog ZruaitCancelProfileLoginDialogClass2Nezobrazovat pro spuatnDon't show on startupProfileLoginDialogClass Jmno:Name:ProfileLoginDialogClass Heslo: Password:ProfileLoginDialogClassVbr profiluProfileLoginDialogProfileLoginDialogClass"Zapamatovat hesloRemember passwordProfileLoginDialogClass Odstranit profilRemove profileProfileLoginDialogClassPYihlsitSign inProfileLoginDialogClass&Vyberte IM protokolPlease choose IM protocol ProtocolPage Tento provodce vm pomo~e pYidat svoj  et zvolenho protokolu. V~dycky mo~ete pYidat nebo odstranit  ty z Hlavnho nastaven ->  tyThis wizard will help you add your account of chosen protocol. You always can add or delete accounts from Main settings -> Accounts ProtocolPage,%1 m dnes narozeniny!%1 has birthday today!!QObject%1 pae %1 is typingQObject&Ukon it&QuitQObject(ZABLOKOVNO)  (BLOCKED) QObject1.  tvrtlet 1st quarterQObject2.  tvrtlet 2nd quarterQObject3.  tvrtlet 3rd quarterQObject4.  tvrtlet 4th quarterQObject*Vaechny soubory (*.*) All files (*)QObject Anti-spamQObject,Autorizace zablokovnaAuthorization blockedQObject8Zablokovan zprva od %1: %2Blocked message from %1: %2QObjectKonverzace s %1 Chat with %1QObjectSeznam kontakto Contact ListQObjectHistorieHistoryQObject Zprva od %1: %2Message from %1: %2QObjectNen v seznamu Not in listQObjectOznamovn NotificationsQObjectOtevYt soubor Open FileQObjectUkon itQuitQObjectZvukSoundQObject$Zvukov oznamovnSound notificationsQObject&m dnes narozeniny!has birthday today!!QObjectpaetypingQObjectOznamovac oknaPopupsSettings&Testovac nastaven Test settingsSettingsTextSettings...SoundEngineSettingsPYkaz:Command:SoundEngineSettings2Vlastn hudebn pYehrva Custom sound playerSoundEngineSettingsPYehrva  Engine typeSoundEngineSettingsSpustiteln ExecutablesSoundEngineSettingsvSpustiteln (*.exe *.com *.cmd *.bat) Vaechny soubory (*.*)5Executables (*.exe *.com *.cmd *.bat) All files (*.*)SoundEngineSettingsFormSoundEngineSettingsBez zvukuNo soundSoundEngineSettingsQSoundSoundEngineSettings.Vyberte cestu k pYkazuSelect command pathSoundEngineSettings Vaechny zvukov soubory budou zkoprovny do adresYe "%1/". Existujc soubory budou pYepsny bez jakkoliv vzvy. Chcete pokra ovat?All sound files will be copied into "%1/" directory. Existing files will be replaced without any prompts. Do You want to continue?SoundLayerSettings:Chyba pYi  ten souboru "%1".)An error occured while reading file "%1".SoundLayerSettings&Kontakt zmnil stavContact changed statusSoundLayerSettings&PYihlaen kontaktuContact is onlineSoundLayerSettings$Odhlaen kontaktuContact went offlineSoundLayerSettings8Narozeniny kontaktu se bl~Contact's birthday is commingSoundLayerSettingsJNelze zkoprovat soubor "%1" do "%2".!Could not copy file "%1" to "%2".SoundLayerSettingsHNelze otevYt soubor "%1" pro  ten.%Could not open file "%1" for reading.SoundLayerSettingsHNelze otevYt soubor "%1" pro zpis.%Could not open file "%1" for writing.SoundLayerSettings ChybaErrorSoundLayerSettings*Exportovat styl zvukuExport sound styleSoundLayerSettings Export...SoundLayerSettings@Soubor "%1" m nesprvn formt.File "%1" has wrong format.SoundLayerSettings*Importovat styl zvukuImport sound styleSoundLayerSettingsPYchoz zprvaIncoming messageSoundLayerSettings,OtevYt zvukov souborOpen sound fileSoundLayerSettingsOdchoz zprvaOutgoing messageSoundLayerSettingsnZvukov upozornn span exportovna do souboru "%1".0Sound events successfully exported to file "%1".SoundLayerSettings\Zvukov soubory (*.wav);;Vaechny soubory (*.*)$Sound files (*.wav);;All files (*.*)SoundLayerSettingsSpuatnStartupSoundLayerSettings"Systmov udlost System eventSoundLayerSettings&XML soubory (*.xml)XML files (*.xml)SoundLayerSettings Pou~tApplySoundSettingsClassUdlostiEventsSoundSettingsClass Export...SoundSettingsClass Import...SoundSettingsClassOtevYtOpenSoundSettingsClassPYehrtPlaySoundSettingsClassZvukov soubor: Sound file:SoundSettingsClassPou~vte zvukov motiv. Vypnte jej pokud chcete nastavit zvuky ru n.FYou're using a sound theme. Please, disable it to set sounds manually.SoundSettingsClassZvuk soundSettingsSoundSettingsClassje doma is at homeStatusje v prci is at workStatusje pry is awayStatusje zamstnanis busyStatusse pYipojuje is connectingStatusje v depresi is depressionStatusje naatvanis evilStatus*je pYipraven na pokecis free for chatStatusje neviditeln is invisibleStatusje pry is not avaiableStatusje zaneprzdnn is occupiedStatusje offline is offlineStatusje na telefonuis on the phoneStatusje online is onlineStatusje na obdis out to lunchStatus*PYednastaven popisekPreset caption StatusDialog8Napiate vaai stavovou zprvuWrite your status message StatusDialog <nen>StatusDialogVisualClass ZruaitCancelStatusDialogVisualClass2Nezobrazovat tento dialogDo not show this dialogStatusDialogVisualClassOKStatusDialogVisualClassPYednastaven:Preset:StatusDialogVisualClass Ulo~itSaveStatusDialogVisualClassStav StatusDialogStatusDialogVisualClass ZruaitCancelStatusPresetCaptionClassOKStatusPresetCaptionClass<Zadejte pYednastaven popisek:Please enter preset caption:StatusPresetCaptionClassPopis stavuStatusPresetCaptionStatusPresetCaptionClassDomaAt homeTreeContactListModelV prciAt workTreeContactListModelPry AwayTreeContactListModelV depresi DepressionTreeContactListModelNeruaitDo not disturbTreeContactListModelNaatvanEvilTreeContactListModel$PYipraven na pokec Free for chatTreeContactListModelObdvm Having lunchTreeContactListModelNeviditeln InvisibleTreeContactListModelNepYtomen Not availableTreeContactListModelZaneprzdnnOccupiedTreeContactListModelOfflineTreeContactListModelOnlineTreeContactListModelBez autorizaceWithout authorizationTreeContactListModel4Nastaven  to a protokoloAccounts and protocols settingsXSettingsDialog6Nastaven pYdanch pluginoAdditional plugins settingsXSettingsDialog Vzhled AppearanceXSettingsDialog"Nastaven vzhleduAppearance settingsXSettingsDialog ObecnGeneralXSettingsDialog$Obecn konfiguraceGeneral configurationXSettingsDialogPluginyPluginsXSettingsDialogProtokoly ProtocolsXSettingsDialognOmlouvme se, tato kategorie neobsahuje ~dn nastaven1Sorry, this category doesn't contain any settingsXSettingsDialogAnimovanAnimatedXToolBarVelk (48x48) Big (48x48)XToolBarVelikost ikony Icon sizeXToolBar Normln (32x32)Normal (32x32)XToolBar(Pouze zobrazit ikonuOnly display the iconXToolBar&Pouze zobrazit textOnly display the textXToolBarJinOtherXToolBarMal (16x16) Small (16x16)XToolBar<Text bude zobrazen vedle ikony The text appears beside the iconXToolBar:Text bude zobrazen pod ikonouThe text appears under the iconXToolBarVzhled XBaruXBar appearanceXToolBar<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Lms</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"></span></p></body></html>(Enter there your names, dear translaters aboutInfoFGNU General Public License, verze 2%GNU General Public License, version 2 aboutInfo.PodpoYit projekt darem: Support project with a donation: aboutInfo Yandex.Money aboutInfo <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutIM, multiplatformn instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">qutim.develop@gmail.com</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html>

qutIM, multiplatform instant messenger

qutim.develop@gmail.com

(c) 2008-2009, Rustam Chakin, Ruslan Nigmatullin

aboutInfoClass/F<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Bal ek ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Bal ek ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Bal ek smajlko</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Autor zvuko pro udlosti</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Autor identifika nho systmu kliento</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> Autor objektu pro skiny</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">QSkinWindows</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p></body></html>

Georgy Surkov

Icons pack

mexanist@gmail.com

Yusuke Kamiyamane

Icons pack

http://www.pinvoke.com/

Tango team

Smile pack

http://tango.freedesktop.org/

Denis Novikov

Author of sound events

Alexey Ignatiev

Author of client identification system

twosev@gmail.com

Dmitri Arekhta

daemones@gmail.com

Markus K

Author of skin object

QSkinWindows

aboutInfoClass8<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Rustam Chakin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Hlavn vvojY a zakladel projektu</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana';"></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Ruslan Nigmatullin</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana';">Hlavn vvojY</span></p></body></html>

Rustam Chakin

qutim.develop@gmail.com

Main developer and Project founder

Ruslan Nigmatullin

euroelessar@gmail.com

Main developer

aboutInfoClass

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Rustam Chakin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">qutim.develop@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Hlavn vvojY a zakladel projektu</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Ruslan Nigmatullin</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:euroelessar@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Hlavn vvojY a vedouc projektu</span></p></body></html>

Rustam Chakin

qutim.develop@gmail.com

Main developer and Project founder

Ruslan Nigmatullin

euroelessar@gmail.com

Main developer and Project leader

aboutInfoClass7<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Jakob Schrter</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> Gloox knihovna</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://camaya.net/gloox/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://camaya.net/gloox/</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Georgy Surkov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Bal ek ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:mexanist@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">mexanist@gmail.com</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Yusuke Kamiyamane</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Bal ek ikon</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://www.pinvoke.com/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://www.pinvoke.com/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Tango team</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Bal ek smajlko </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://tango.freedesktop.org/"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://tango.freedesktop.org/</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Denis Novikov</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Autor zvuko pro udlosti</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Alexey Ignatiev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Autor systmo identifikace kliento</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:twosev@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">twosev@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Dmitri Arekhta</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="mailto:daemones@gmail.com"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">daemones@gmail.com</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:9pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;">Markus K</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> Autor skin objektu</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:9pt;"> </span><a href="http://qt-apps.org/content/show.php/QSkinWindows?content=67309"><span style=" font-family:'Verdana'; font-size:9pt; text-decoration: underline; color:#0000ff;">QSkinWindow</span></a></p></body></html>

Jakob Schröter

Gloox library

http://camaya.net/gloox/

Georgy Surkov

Icons pack

mexanist@gmail.com

Yusuke Kamiyamane

Icons pack

http://www.pinvoke.com/

Tango team

Smile pack

http://tango.freedesktop.org/

Denis Novikov

Author of sound events

Alexey Ignatiev

Author of client identification system

twosev@gmail.com

Dmitri Arekhta

daemones@gmail.com

Markus K

Author of skin object

QSkinWindow

aboutInfoClass

aboutInfoClass |<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">qutIM, multiplatformn instant messenger</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:qutim.develop@gmail.com"><span style=" font-size:9pt; text-decoration: underline; color:#0000ff;">euroelessar@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;"> 2008-2009, Rustam Chakin, Ruslan Nigmatullin</span></p></body></html>

qutIM, multiplatform instant messenger

euroelessar@gmail.com

© 2008-2009, Rustam Chakin, Ruslan Nigmatullin

aboutInfoClass<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="#">Licen n podmnky</a></p></body></html>

License agreements

aboutInfoClassO programuAboutaboutInfoClassO qutIM About qutIMaboutInfoClass AutoYiAuthorsaboutInfoClass ZavYtCloseaboutInfoClassDarovatDonatesaboutInfoClass"Licen n ujednnLicense AgreementaboutInfoClass VrtitReturnaboutInfoClassPodkovn Thanks ToaboutInfoClassPYekladatel TranslatorsaboutInfoClass(Odstranit  et "%1"?Delete %1 account? loginDialogOdstranit  etDelete account loginDialog...loginDialogClass<<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Maximln dlka hesla pro ICQ je omezena na 8 znako.</span></p></body></html>$

Maximum length of ICQ password is limited to 8 characters.

loginDialogClass etAccountloginDialogClass  et:Account:loginDialogClass*Automatick pYipojen AutoconnectloginDialogClass Heslo: Password:loginDialogClass Odstranit profilRemove profileloginDialogClassUlo~it hesloSave my passwordloginDialogClass,Zabezpe en pYihlaen Secure loginloginDialogClass(Zobrazit po spuatnShow on startuploginDialogClassPYihlsitSign inloginDialogClass minmainSettingsClass smainSettingsClassFPYidat  ty do menu systmov liaty Add accounts to system tray menumainSettingsClassV~dy nahoYe Always on topmainSettingsClassDAutomaticky nastavit stav Pry po:Auto-away after:mainSettingsClass*Automaticky skrt po: Auto-hide:mainSettingsClassXNezobrazovat pYihlaaovac dialog po spuatn"Don't show login dialog on startupmainSettingsClass"Skrt po spuatnHide on startupmainSettingsClassNUkldat velikost a pozici hlavnho okna"Save main window size and positionmainSettingsClassUkzat stav:Show status from:mainSettingsClassNSpustit pouze jeden qutIM ve stejn  as!Start only one qutIM at same timemainSettingsClass Hlavn nastaven mainSettingsmainSettingsClass&Ukon it&QuitqutIMNa&staven... &Settings...qutIM0&U~ivatelsk rozhran...&User interface settings...qutIM>Opravdu chcete pYepnout profil?%Do you really want to switch profile?qutIM(Nastaven plugino...Plug-in settings...qutIMPYepnout profilSwitch profilequtIMqutIM qutIMClass tyAccounts qutimSettings ObecnGeneral qutimSettingsGlobln proxy Global proxy qutimSettings(Ulo~it nastaven %1?Save %1 settings? qutimSettings Ulo~it nastaven Save settings qutimSettings1qutimSettingsClass Pou~tApplyqutimSettingsClass ZruaitCancelqutimSettingsClassOKqutimSettingsClassNastavenSettingsqutimSettingsClassqutim-0.2.0/languages/cs_CZ/binaries/urlpreview.qm0000644000175000017500000002727311227526156023644 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">URLPreview qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">VytvY nhledy pro URL ve zprvch</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">&lt;boiler@co.ru&gt;</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html>

URLPreview qutIM plugin

svn version

Make previews for URLs in messages

Author:

Alexander Kazarin

<boiler@co.ru>

(c) 2008-2009

urlpreviewSettingsClassO...AbouturlpreviewSettingsClassfNezobrazovat informace pro kontextov typ text/html*Don't show info for text/html content typeurlpreviewSettingsClass4Povolit na pYchoz zprvyEnable on incoming messagesurlpreviewSettingsClass2Povolit na odchoz zprvyEnable on outgoing messagesurlpreviewSettingsClass ObecnGeneralurlpreviewSettingsClass0`ablona nhledu obrzku:Image preview template:urlpreviewSettingsClassObrzkyImagesurlpreviewSettingsClass$`ablona informac:Info template:urlpreviewSettingsClasshMakra: %TYPE% - Content-Type %SIZE% - Content-Length5Macros: %TYPE% - Content-Type %SIZE% - Content-LengthurlpreviewSettingsClassvMakra: %URL% - URL obrzku %UID% - Vygenerovan uniktn ID5Macros: %URL% - Image URL %UID% - Generated unique IDurlpreviewSettingsClassXMaximln limit velikosti souboru (v bytech)Max file size limit (in bytes)urlpreviewSettingsClassNastavenSettingsurlpreviewSettingsClassqutim-0.2.0/languages/cs_CZ/binaries/nowlistening.qm0000644000175000017500000006077611270772612024163 0ustar euroelessareuroelessar֍[[qE\b ]gv]D>\GWabh]v__% {`!YX^] XǒeYH@^i4YjD[:ln.] J._` YXs E ƾ^ 'AP ysX W F=Z> P B 5\ T] Z s^R RW ZeZέ$[i`%artist - %title settingsUi10 settingsUi 127.0.0.1 settingsUi6600 settingsUi<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/plugin_logo.png" /></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; font-weight:600;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Now Listening qutIM Plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">v 0.6</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Autor:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: nayzak90@googlemail.com"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">nayzak90@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Autor modulu pro Winamp:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Rusanov Peter </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto: tazkrut@mail.ru"><span style=" font-family:'Sans Serif'; font-size:10pt; text-decoration: underline; color:#0000ff;">tazkrut@mail.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">(c) 2009</span></p></body></html>J

Now Listening qutIM Plugin

v 0.6

Author:

Ian 'NayZaK' Kazlauskas

nayzak90@googlemail.com

Winamp module author:

Rusanov Peter

tazkrut@mail.ru

(c) 2009

 settingsUi<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Pro ICQ X-status zprvu existuj nsledujc podmnky:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%artist - interpret</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%title - nzev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%tracknumber -  slo skladby</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%time - dlka skladby v minutch</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">%uri - pln cesta k souboru</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Pro Jabber Tune zprvu existuj nsledujc podmnky:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">artist - interpret</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">title - nzev</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">album - album</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">tracknumber -  slo skladby</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">length - dlka skladby v sekundch</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">uri - pln cesta k souboru</span></p></body></html> g

For ICQ X-status message adopted next terms:

%artist - artist

%title - title

%album - album

%tracknumber - track number

%time - track length in minutes

%uri - full path to file

For Jabber Tune message adopted next terms:

artist - artist

title - title

album - album

tracknumber - track number

length - track length in seconds

uri - full path to file

 settingsUiAIMP settingsUiO...About settingsUiAktivovan Activated settingsUi\Aktivovat, kdy~ X-status je "Poslouchm hudbu"/Activates when X-status is "Listening to music" settingsUi Amarok 1.4 settingsUiAmarok 2 settingsUi Audacious settingsUi@Zmnit sou asnou X-status zprvu Changes current X-status message settingsUi>Interval kontroly (v sekundch)Check period (in seconds) settingsUi,Aktuln re~im pluginuCurrent plugin mode settingsUiDeaktivovan Deactivated settingsUiPro ICQ  tyFor ICQ accounts settingsUiPro Jabber  tyFor Jabber accounts settingsUiForm settingsUiHostitelHostname settingsUiInformaceInfo settingsUi@Informace, kter budou zobrazenyInfo to be presented settingsUiBNyn poslouchm: %artist - %titleListening now: %artist - %title settingsUiMPD settingsUi Re~imMode settingsUi Music Player settingsUi HesloPassword settingsUiPort settingsUiQMMP settingsUi RadioButton settingsUi Rhythmbox settingsUi>Nastavit re~im pro vaechny  tySet mode for all accounts settingsUiNastavenSettings settingsUiSong Bird (Linux) settingsUiVLC settingsUiWinamp settingsUi*Maska X-status zprvyX-status message mask settingsUi6Nemte ICQ ani Jabber  ty.#You have no ICQ or Jabber accounts. settingsUiinterpret nzev artist title settingsUiQbackground-image: url(:/images/alpha.png); border-image: url(:/images/alpha.png); settingsUiqutim-0.2.0/languages/cs_CZ/binaries/formules.qm0000644000175000017500000000107211270772612023257 0ustar euroelessareuroelessarl)> Z*@.OZ N ^ <W ܝZH|T+t.^ Cd*QaO,= IJ ҩg > Z |E_ ? p t ^ y8Br.i)Provodce WizardPageChooseClientPageUlo~it historii Dump historyChooseOrDumpPageVImport historie z jednoho nebo vce kliento#Import history from one more clientChooseOrDumpPageProvodce WizardPageChooseOrDumpPage...ClientConfigPage`ifrovn: Encoding:ClientConfigPage Cesta k profilu:Path to profile:ClientConfigPageXOzna te  ty pro ka~d protokol na seznamu..Select accounts for each protocol in the list.ClientConfigPage(Ozna it Jabber  et.Select your Jabber account.ClientConfigPageProvodce WizardPageClientConfigPageBinrnBinaryDumpHistoryPageVyberte formt:Choose format:DumpHistoryPage.Stav ukldn historie:Dumping history state:DumpHistoryPageJSONDumpHistoryPage0Stav slu ovn historie:Merging history state:DumpHistoryPageProvodce WizardPageDumpHistoryPageVyberte klienta, ze kterho chcete importovat historii do qutIMu.8Choose client which history you want to import to qutIM. HistoryManager::ChooseClientPage KlientClient HistoryManager::ChooseClientPageJe mo~n vybrat jinho klienta pro import historie nebo ulo~it historii na disk.WIt is possible to choose another client for import history or dump history to the disk. HistoryManager::ChooseOrDumpPageCo dlat dl?What to do next? HistoryManager::ChooseOrDumpPageNastaven Configuration HistoryManager::ClientConfigPagePZadejte cestu pro adresY s profilem %1."Enter path of your %1 profile dir. HistoryManager::ClientConfigPageNZadejte cestu pro soubor s profilem %1.#Enter path of your %1 profile file. HistoryManager::ClientConfigPagePokud se kdovn historie lia od systmu historie, vyberte vhodn kdovn pro historii.bIf your history encoding differs from the system one, choose the appropriate encoding for history. HistoryManager::ClientConfigPageVyberte cestu Select path HistoryManager::ClientConfigPageSystmovSystem HistoryManager::ClientConfigPageUkldnDumpingHistoryManager::DumpHistoryPageDHistorie byla span importovna.&History has been succesfully imported.HistoryManager::DumpHistoryPage|Posledn krok. Kliknte 'Ulo~it' pro start ukldacho procesu.1Last step. Click 'Dump' to start dumping process.HistoryManager::DumpHistoryPageXSpojovn historie mo~e trvat nkolik minut.5Manager merges history, it make take several minutes.HistoryManager::DumpHistoryPage&Ulo~it&Dump$HistoryManager::HistoryManagerWindow Sprvce historieHistory manager$HistoryManager::HistoryManagerWindowP%n zprv bylo span na teno do pamti.5%n message(s) have been succesfully loaded to memory.!HistoryManager::ImportHistoryPage&Bylo pYijato %n ms.It has taken %n ms.!HistoryManager::ImportHistoryPageNa tnLoading!HistoryManager::ImportHistoryPageSprvce na te veakerou historii do pamti, mo~e to trvat nkolik minut.AManager loads all history to memory, it may take several minutes.!HistoryManager::ImportHistoryPage&Importovat historiiImport historyHistoryManagerPluginFormHistoryManagerWindowProvodce WizardPageImportHistoryPagequtim-0.2.0/languages/cs_CZ/binaries/protocolicon.qm0000644000175000017500000000071011226414071024124 0ustar euroelessareuroelessar i<Vchoz> PluginSettings"Zmnit ikonu  tuChange account iconPluginSettings*Zmnit ikonu kontaktuChange contact iconPluginSettingsJZvolte bal ek motivo ikon protokolo: Select protocol icon theme pack:PluginSettingsqutim-0.2.0/languages/cs_CZ/binaries/youtubedownload.qm0000644000175000017500000003112411270772612024650 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">YouTube download link qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">PYidejte odkazy pro stahovn klipo</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:saboteur@saboteur.mp"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Evgeny Soynov</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">`ablona:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler@co.ru"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">Alexander Kazarin</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2008-2009</span></p></body></html>l

YouTube download link qutIM plugin

svn version

Adds link for downloading clips

Author:

Evgeny Soynov

Template:

Alexander Kazarin

(c) 2008-2009

urlpreviewSettingsClassO...AbouturlpreviewSettingsClass4Povolit na pYchoz zprvyEnable on incoming messagesurlpreviewSettingsClass2Povolit na odchoz zprvyEnable on outgoing messagesurlpreviewSettingsClass ObecnGeneralurlpreviewSettingsClass$`ablona informac:Info template:urlpreviewSettingsClass6Makra: %URL% - adresy klipoMacros: %URL% - Clip addressurlpreviewSettingsClassNastavenSettingsurlpreviewSettingsClassqutim-0.2.0/languages/cs_CZ/binaries/massmessaging.qm0000644000175000017500000001436611245424440024271 0ustar euroelessareuroelessar'}'On&ʗO*0T/ yT ( 4 5 = RV T Cvi15Dialog

TextLabel

Dialog 6<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Poznmky:</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Lze pou~t tyto aablony:</p> <ul style="-qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{reciever} - Jmno pYjemce </li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{sender} - Jmno odeslatele (nzev profilu)</li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">{time} - Aktuln  as</li></ul> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"></p></body></html>!

Notes:

You can use the templates:

  • {reciever} - Name of the recipient
  • {sender} - Name of the sender (profile name)
  • {time} - Current time

DialogAkceActionsDialog.Interval (v sekundch):Interval (in seconds):DialogPolo~kyItemsDialog ZprvaMessageDialog$Hromadn odeslnMultiply SendingDialogOdeslatSendDialogPYeruaitStopDialog tyAccountsManager0Chyba: zprva je przdnError: message is emptyManager0Chyba: neznm  et : %1Error: unknown account : %1ManagerNeznmUnknownManager$Hromadn odeslnMultiply Sending MessagingAkceActionsMessagingDialog(Na st seznam pYtelLoad buddy listMessagingDialog8Na st vlastn seznam pYtelLoad custom buddy listMessagingDialogBHromadn odesln: vae dokon eno#Multiply sending: all jobs finishedMessagingDialog(Ulo~it seznam pYtelSave buddy listMessagingDialog,Odesln zprvy na %1Sending message to %1MessagingDialogbOdesln zprvy na %1 (%2/%3), zbvajc  as: %4/Sending message to %1 (%2/%3), time remains: %4MessagingDialog:Odesln zprvy na %1: %v/%mSending message to %1: %v/%mMessagingDialogqutim-0.2.0/languages/cs_CZ/binaries/jsonhistory.qm0000644000175000017500000000172111226414071024010 0ustar euroelessareuroelessar<br /> pae%1

is typingQObjectDZablokovan zprva od<br /> %1: %2!Blocked message from
%1: %2QObject*Zprva od %1:<br />%2Message from %1:
%2QObject<Systmov zprva od %1: <br />System message from %1:
QObjectqutim-0.2.0/languages/cs_CZ/binaries/irc.qm0000644000175000017500000002571211270772612022207 0ustar euroelessareuroelessarwbWiTI a1bc'R*P ;8%"F%xe0EjZt+{nrahF}0m!4^ _RZ OYUZ 2qk nZ # jOP&  N~ h>j   T%O I!\ I JV2 Ng R T V w; { {p R ee u0 # >  %  % ū) 7   A y   ! Y  ÕH M x M  Ap As+ Atb Au Av K# ʌs T T! Y"> 4W o; o; o; z Ĭ <K C u 7drR#R]Oj *ӘGd& i' 6667AddAccountFormClassPYidat  etAddAccountFormAddAccountFormClassPYezdvka:Nick:AddAccountFormClass Heslo: Password:AddAccountFormClassPort:AddAccountFormClassSkute n jmno: Real Name:AddAccountFormClassUlo~it heslo Save passwordAddAccountFormClassServer:AddAccountFormClassirc.freenode.netAddAccountFormClass&Konzola IRC serveruIRC Server ConsoleIrcConsoleClassPry Away ircAccountZabanovatBan ircAccountZabanovnoBanned ircAccountCTCP ircAccountZmnit tma Change topic ircAccount(Administrtor kanluChannel administrator ircAccount2Polovi n opertor kanluChannel half-operator ircAccountOpertor kanluChannel operator ircAccountVlastnk kanlu Channel owner ircAccountSeznam kanlo Channels List ircAccountKonzolaConsole ircAccount2Dt polovi nho opertora Give HalfOp ircAccountDt opertoraGive Op ircAccountDt hlas Give Voice ircAccountIRC opertor IRC operator ircAccountInformace Information ircAccount$Vstoupit do kanlu Join Channel ircAccountKick ircAccount*Vykopnout / zabanovat Kick / Ban ircAccountDovod vykopnut Kick reason ircAccountVykopnout s... Kick with... ircAccount Re~imMode ircAccount Re~imyModes ircAccountOznmit avatar Notify avatar ircAccountOffline ircAccountOnline ircAccount&Soukrom konverzace Private chat ircAccount4Vzt polovi nho opertora Take HalfOp ircAccountVzt opertoraTake Op ircAccountVzt hlas Take Voice ircAccountOdbanovatUnBan ircAccountHlasVoice ircAccountPokro ilAdvancedircAccountSettingsClassVk:Age:ircAccountSettingsClass.Alternativn pYezdvka:Alternate Nick:ircAccountSettingsClass Apple RomanircAccountSettingsClass Pou~tApplyircAccountSettingsClass>Automaticky pYihlsit po startuAutologin on startircAccountSettingsClassPAutomaticky poslat pYkazy po pYipojen: Autosend commands after connect:ircAccountSettingsClassURL avataru: Avatar URL:ircAccountSettingsClassBig5ircAccountSettingsClass Big5-HKSCSircAccountSettingsClass ZruaitCancelircAccountSettingsClassKdov strnka: Codepage:ircAccountSettingsClassEUC-JPircAccountSettingsClassEUC-KRircAccountSettingsClass }enskFemaleircAccountSettingsClass GB18030-0ircAccountSettingsClassPohlav:Gender:ircAccountSettingsClass ObecnGeneralircAccountSettingsClassIBM 850ircAccountSettingsClassIBM 866ircAccountSettingsClassIBM 874ircAccountSettingsClass$Nastaven IRC  tuIRC Account SettingsircAccountSettingsClass ISO 2022-JPircAccountSettingsClass ISO 8859-1ircAccountSettingsClass ISO 8859-10ircAccountSettingsClass ISO 8859-13ircAccountSettingsClass ISO 8859-14ircAccountSettingsClass ISO 8859-15ircAccountSettingsClass ISO 8859-16ircAccountSettingsClass ISO 8859-2ircAccountSettingsClass ISO 8859-3ircAccountSettingsClass ISO 8859-4ircAccountSettingsClass ISO 8859-5ircAccountSettingsClass ISO 8859-6ircAccountSettingsClass ISO 8859-7ircAccountSettingsClass ISO 8859-8ircAccountSettingsClass ISO 8859-9ircAccountSettingsClassRozpoznatIdentifyircAccountSettingsClass Iscii-BngircAccountSettingsClass Iscii-DevircAccountSettingsClass Iscii-GjrircAccountSettingsClass Iscii-KndircAccountSettingsClass Iscii-MlmircAccountSettingsClass Iscii-OriircAccountSettingsClass Iscii-PnjircAccountSettingsClass Iscii-TlgircAccountSettingsClass Iscii-TmlircAccountSettingsClass JIS X 0201ircAccountSettingsClass JIS X 0208ircAccountSettingsClassKOI8-RircAccountSettingsClassKOI8-UircAccountSettingsClassJazyky: Languages:ircAccountSettingsClassUmstnLocationircAccountSettingsClass Mu~skMaleircAccountSettingsClass MuleLao-1ircAccountSettingsClassPYezdvka:Nick:ircAccountSettingsClassOKircAccountSettingsClass Jin:Other:ircAccountSettingsClass st zprvy: Part message:ircAccountSettingsClassPort:ircAccountSettingsClassOdchoz zprva: Quit message:ircAccountSettingsClassROMAN8ircAccountSettingsClassSkute n jmno: Real Name:ircAccountSettingsClassServer:ircAccountSettingsClass Shift-JISircAccountSettingsClassTIS-620ircAccountSettingsClassTSCIIircAccountSettingsClassUTF-16ircAccountSettingsClassUTF-16BEircAccountSettingsClassUTF-16LEircAccountSettingsClassUTF-8ircAccountSettingsClassnespecifikovan UnspecifiedircAccountSettingsClassWINSAMI2ircAccountSettingsClass Windows-1250ircAccountSettingsClass Windows-1251ircAccountSettingsClass Windows-1252ircAccountSettingsClass Windows-1253ircAccountSettingsClass Windows-1254ircAccountSettingsClass Windows-1255ircAccountSettingsClass Windows-1256ircAccountSettingsClass Windows-1257ircAccountSettingsClass Windows-1258ircAccountSettingsClass(%1 nastavil re~im %2%1 has set mode %2 ircProtocol(%1 odpov od %2: %3%1 reply from %2: %3 ircProtocol%1 po~aduje %2%1 requests %2 ircProtocol<%1 po~aduje neznm kontakt %2%1 requests unknown command %2 ircProtocol PYipojovn k %1Connecting to %1 ircProtocolDZkouam alternativn pYezdvku: %1Trying alternate nick: %1 ircProtocolPokro ilAdvancedircSettingsClass HlavnMainircSettingsClassNastaven IRC ircSettingsircSettingsClass Kanl:Channel:joinChannelClass$Vstoupit do kanlu Join ChanneljoinChannelClass4Seznam kanlo na ten. (%1)Channels list loaded. (%1) listChannel8Zskvm seznam kanlo... %1Fetching channels list... %1 listChannel<Zskvm seznam kanlo... (%1)Fetching channels list... (%1) listChannelNOdesln po~adavku na seznam kanlo... Sending channels list request... listChannel

listChannelClass KanlChannellistChannelClassSeznam kanlo Channels ListlistChannelClass Filtrovat podle: Filter by:listChannelClass Po~dat o seznam Request listlistChannelClassTmaTopiclistChannelClassU~ivatelUserslistChannelClass textDialogtextDialogClassqutim-0.2.0/languages/cs_CZ/binaries/jabber.qm0000644000175000017500000016742211272760570022666 0ustar euroelessareuroelessarfJXCئ-^E/P{06Q6'!Z8'$4(R+v&6+DR0ђF1)tT3j57>HNHw9?bHw9@UHw9^*HI4IhIJ K)J+D J+QJ6D:J6GIJ6QJ6J6J6J |Kd_LbnLʘDfL(6M ТM +Ny%6NrNOJ1Ojza Oa6zS))6Te)T,T TcTC%VE!VEWizcW+6WdSY'bY+YbLZ LZ2[/D^%cn7 cn8i\Zdi#nvxy.q?^&05{EK1!n̈>UWRVx06(vŖFA$ $WC@yWu7]Ce;J.U )9[ ? :Am)7M~pOQUJX^EY2>Z@y]77m4hsC {|ej`z-vsMT0nhD! Or)lS"`APuEA3(F% MU_xBrzvn NfNTS6R^^J1i<N;ՙk+W4iY(M6o~^e6`7G+TIl XrYVa^on(rH%8;|8sq{9[d2y2ÌAMzAkj۝D%c#!{I\G}e EL'1P6o flrqJfytz'N}7}=]7|s~eT@bIIII?I@IBIRISI_+IgIIIFTكfS6fT) NWHG"77P _֓)̸,*'4qPhMw} OgFl:l:y$% N&hV.h&LSax).7*I{5-6L9(7jS97UEC8C HU\*^e0EXfnLAuq.zUl^Ar=DHy-3z G.Q M,3Tbl0XB|S1<פ M B#C -DI78DFjKXFdXG(hMS QZ~hD:m,*L,xLV%{N֋*'TdY;1+LZLG1ŽjKLVLZg9 uֳNv3@G4 \Y.Y.gsG6 G6%:nntwt]{}~w#D#$(+ <83@_\>AarvpZ{~~$=t~\7:t!H&>"t~!l]tG;NKahk+-*9t~#P26 (E52A6#8ee 8mCnFgUo_kW6 , D I 7;t ! -, K op wj X k -ӌ 4$v > >Г- C F 7<= L < eͲV f '2! fS gDEa gKԜ gU lJd o x . '2 Ԏm u2 %Q 5> vL / z :` > >C] >c  *L z 0 St$ t`; / S# 2u 2a  TTF 0 F  " / 0'2N ' )\ ] N Y npL 4, < ]o _Bl  ]> a ]>B . #p # ( -zd 0Ea NI5 Sm~ dN eZ4 ntW nt| "$ .! :w '3 ̩3j { R9_g 5d %)Sp < %%y Vj `' BH B B oB. 'lR { E* E !    (+ /4+ > RV0 ]#/ f gAY t_ ' 7 SYw Sg SO S z )#,0 H=K x* s (kd -U "B " O*\ qG ށ 6 #d !m '3  2}  &TK ;- M S* TRN( dtH 7= >÷ P] ua ~ V8 <P9=Qyj+nC+nz=xx=P Rd"4|i 0`i0ul^g.7?7>{nX'16bL4s@@]WG= B0!7z>LYMRk>(Rk>tXPjGZw4Xf%gi;kZkjm"^qtgt" .t6DICu/ov i8?|Ò&x/ i Autorizovat AuthorizeAcceptAuthDialogOdmtnoutDenyAcceptAuthDialogFormAcceptAuthDialogIgnorovatIgnoreAcceptAuthDialog<bez skupiny>  AddContact PYidatAdd AddContact PYidat u~ivateleAdd User AddContact ZruaitCancel AddContactSkupina:Group: AddContact Jabber ID: AddContact Jmno:Name: AddContact:Poslat po~adavek o autorizaciSend authorization request AddContact*Informace o u~ivateliUser information AddContactRuslan NigmatullinAuthorFormContactsRZobrazovat QIP xStatus v seznamu kontakto Show QIP xStatus in contact listContacts^Zobrazit text stavu kontaktu v seznamu kontakto(Show contact status text in contact listContactshZobrazit ikonu rozaYen  innosti v seznamu kontakto+Show extended activity icon in contact listContactsbZobrazit ikonu hlavn  innosti v seznamu kontakto'Show main activity icon in contact listContactsDZobrazit hlavn zdroj v oznmench#Show main resource in notificationsContactsPZobrazit ikonu nlady v seznamu kontaktoShow mood icon in contact listContactsRZobrazit ikonu pro neautorizovan kontaktShow not authorized iconContactsLZobrazit tune ikonu v seznamu kontaktoShow tune icon in contact listContacts ZruaitCancelDialogDialogDialogOkDialog cs-CZen JabberClientqutIM JabberClient Pry :Away:JabberSettingsNeruait:DND:JabberSettingsVchoz zdroj:Default resource:JabberSettings<Neposlat po~adavek na avataryDon't send request for avatarsJabberSettingsFormJabberSettings&PYipraven na pokec:Free for chat:JabberSettingsHNaslouchac port pro pYenos souboro:Listen port for filetransfer:JabberSettingsNepYtomen:NA:JabberSettingsOnline:JabberSettings2Priorita zvisl na stavuPriority depends on statusJabberSettings:Obnovit pYipojen po odpojenReconnect after disconnectJabberSettings(Automaticky vstoupit Auto joinJoinChatZlo~ky BookmarksJoinChatKonference ConferenceJoinChatH:mm:ssJoinChatHistorieHistoryJoinChatVstoupitJoinJoinChat>Vstoupit do chatovac mstnostiJoin groupchatJoinChat JmnoNameJoinChatPYezdvkaNickJoinChat HesloPasswordJoinChatPosledn ~dost Request last JoinChatRequest messages sinceJoinChat#Request messages since the datetimeJoinChat Ulo~itSaveJoinChat HledatSearchJoinChatNastavenSettingsJoinChat zprvmessagesJoinChat%1 LoginForm%1 LoginFormRegistrace Registration LoginForm$Muste zadat hesloYou must enter a password LoginForm.Muste zadat platn JIDYou must enter a valid jid LoginFormJID:LoginFormClass LoginFormLoginFormClass Heslo: Password:LoginFormClass,Registrovat tento  etRegister this accountLoginFormClassE-mailPersonalFormPersonal ObecnGeneralPersonalBydliatHomePersonalTelefonPhonePersonalZamstnnWorkPersonalJabberPluginVModul zalo~en na relizaci Jabber protokolu+Module-based realization of Jabber protocolPlugin>Modul zalo~en na XMPP relizaci Module-based realization of XMPPPluginXMPPPlugin%1QObject %1 dn%1 daysQObject%1 hodin%1 hoursQObject%1 minut %1 minutesQObject%1 sekunda %1 secondQObject%1 sekund %1 secondsQObject%1 roko%1 yearsQObject 1 den1 dayQObject1 hodina1 hourQObject1 minuta1 minuteQObject 1 rok1 yearQObject%1QObjectd<font size='2'><b>Autorizace:</b> <i>od</i></font>7Authorization: FromQObjecth<font size='2'><b>Autorizace:</b> <i>nen</i></font>7Authorization: NoneQObjectf<font size='2'><b>Autorizace:</b> <i>pro</i></font>5Authorization: ToQObjectj<font size='2'><b>Pravdpodobn klient:</b> %1</font>0Possible client: %1QObjectZ<font size='2'><b>Stavov text:</b> %1</font>,Status text: %1QObjectVUser went offline at: %1 (with message: %2)QObject<User went offline at: %1QObject#%1: %2QObject%1QObjectT<font size='2'><i>Poslouch:</i> %1</font>*Listening: %1QObject innostActivityQObject ObavyAfraidQObject*Vaechny soubory (*.*) All files (*)QObject~asAmazedQObjectZamilovanAmorousQObject ZlostAngryQObjectRoz lenAnnoyedQObjectStarostiAnxiousQObjectVzruaenArousedQObject HanbaAshamedQObjectNudaBoredQObject OdvahaBraveQObjectBezvtYCalmQObjectOpatrnCautiousQObjectZimaColdQObjectSebejist ConfidentQObject ZmatekConfusedQObjectZamyalen ContemplativeQObjectSpokojenost ContentedQObject MrzutCrankyQObject `lenCrazyQObject Tvor CreativeQObjectZvdavostCuriousQObjectDeprimovanDejectedQObjectDeprese DepressedQObjectRoz ilovn DisappointedQObjectZnechucen DisgustedQObjectZdaenDismayedQObjectRoztr~itost DistractedQObject B~n povinnosti Doing choresQObjectPijuDrinkingQObjectJmEatingQObject Trapas EmbarrassedQObjectZvistivEnviousQObjectRozjaYenostExcitedQObjectCvi en ExercisingQObject Flirt FlirtatiousQObjectFrustrace FrustratedQObject Vd nGratefulQObjectTruchlcGrievingQObjectP e o tloGroomingQObjectNevrlostGrumpyQObjectVinaGuiltyQObject `tstHappyQObjectna schozceHaving appointmentQObjectPln nadjeHopefulQObject HorkoHotQObject PokoraHumbledQObject Potupa HumiliatedQObjectHladHungryQObjectTo bolHurtQObjectVlm o i ImpressedQObject~asIn aweQObject LskaIn loveQObjectNe innInactiveQObjectRozhoY en IndignantQObject Zjem InterestedQObject&Pod vlivem alkoholu IntoxicatedQObjectNeporaziteln InvincibleQObject ZvistJealousQObjectJoin groupchat onQObjectOsamlostLonelyQObjectZtracenLostQObject`eastnLuckyQObject MnitMeanQObject NladaMoodQObjectRozladnostMoodyQObjectNervozitaNervousQObjectNeutrlnNeutralQObjectUra~enostOffendedQObjectOtevYt soubor Open FileQObjectPobouYenOutragedQObject HravPlayfulQObject HrdostProudQObjectUvolnnRelaxedQObjectodpo inekRelaxingQObject levaRelievedQObjectLitujc RemorsefulQObjectNedo kavRestlessQObject SmutekSadQObjectSarkasmus SarcasticQObjectSpokojen SatisfiedQObject V~nSeriousQObject V aokuShockedQObjectNesmlostShyQObjectNemocnSickQObject OspalSleepyQObjectSpontnn SpontaneousQObject StressStressedQObject SilnStrongQObjectPYekvapen SurprisedQObjectMluvenTalkingQObject Vd nThankfulQObject }zeHThirstyQObjectUnavenTiredQObjectCestuji TravelingQObject HudbaTuneQObjectNeur en UndefinedQObjectNeznmUnknownQObject SlabWeakQObjectPracujiWorkingQObject ObavyWorriedQObjectv lznch at the spaQObject istm si zubybrushing teethQObjectnkup potravinbuying groceriesQObjectuklzmcleaningQObjectprogramujicodingQObjectdoj~dm commutingQObject vaYmcookingQObjectcyklistikacyclingQObjecttancovndancingQObjectvoln denday offQObject dr~badoing maintenanceQObjectmyju ndobdoing the dishesQObjectperu prdlodoing the laundryQObject YdmdrivingQObjectrybaYenfishingQObjecthran hergamingQObjectna zahrdce gardeningQObjectv kadeYnictvgetting a haircutQObject venku going outQObjectvyvaeno hanging outQObjectpiju pivo having a beerQObject sva mhaving a snackQObject sndmhaving breakfastQObjectpiju kvu having coffeeQObjectve eYm having dinnerQObjectobdvm having lunchQObjectpiju  aj having teaQObjectschovvn sehidingQObjectturistikahikingQObject v autin a carQObjectna porad in a meetingQObject v relnm ~ivot in real lifeQObjectjoggingjoggingQObjectv autobusuon a busQObjectv letadle on a planeQObjectve vlaku on a trainQObjectna vlet on a tripQObjectna telefonu on the phoneQObjectna dovolen on vacationQObject"na video telefonuon video phoneQObject partypartyingQObjectsportovn hryplaying sportsQObjectmodlenprayingQObject  tenreadingQObjectnacvi ovn rehearsingQObject bhnrunningQObjectpochozkarunning an errandQObject(naplnovan dovolenscheduled holidayQObjectholm seshavingQObjectnakupovnshoppingQObjectly~ovnskiingQObjectspmsleepingQObject kouYmsmokingQObjectve spole nosti socializingQObjectstudujistudyingQObjectopalovn sunbathingQObjectplavnswimmingQObjectkoupu se taking a bathQObjectsprchuji setaking a showerQObjectpYemalmthinkingQObjectna prochzcewalkingQObjectvenku se psemwalking the dogQObjectsleduji TV watching TVQObjectsleduji filmwatching a movieQObjectvypracovn working outQObjectpaiwritingQObject Pou~tApply RoomConfig ZruaitCancel RoomConfigForm RoomConfigOk RoomConfigAdministrtoYiAdministratorsRoomParticipant Pou~tApplyRoomParticipantZabanovanBannedRoomParticipant ZruaitCancelRoomParticipantFormRoomParticipantJIDRoomParticipant lenovMembersRoomParticipantOkRoomParticipantVlastnciOwnersRoomParticipant DovodReasonRoomParticipant(Automaticky vstoupit Auto join SaveWidgetNzev zlo~ky:Bookmark name: SaveWidget ZruaitCancel SaveWidgetKonference: Conferene: SaveWidgetPYezdvka:Nick: SaveWidget Heslo: Password: SaveWidget Ulo~itSave SaveWidgetUlo~it zlo~kySave to bookmarks SaveWidgetVymazatClearSearch ZavYtCloseSearch Na stFetchSearchFormSearch HledatSearchSearchServer:Search`Napiate server a budou na tena vyhledvc pole.$Type server and fetch search fields.Search"Hledat konferenciSearch conferenceSearchConferenceHledat slu~buSearch service SearchService Hledat transportSearch transportSearchTransport.PYidat do seznamu proxyAdd to proxy listServiceBrowser"PYidat do rosteru Add to rosterServiceBrowser ZavYtCloseServiceBrowserSpustit pYkazExecute commandServiceBrowserJIDServiceBrowser>Vstoupit do chatovac mstnostiJoin conferenceServiceBrowser JmnoNameServiceBrowserRegistrovatRegisterServiceBrowser HledatSearchServiceBrowserServer:ServiceBrowserZobrazit VCard Show VCardServiceBrowserjServiceBrowserServiceBrowser AutorAuthorTask& VCardAvatarr%1&nbsp;(<font color='#808080'>chybn formt data</font>)8%1 (wrong date format) VCardBirthdayNarozeniny: Birthday: VCardBirthday Obec:City: VCardRecordSpole nost:Company: VCardRecord Zem:Country: VCardRecordOddlen: Department: VCardRecordPO Box: VCardRecordPS : Post code: VCardRecord zem:Region: VCardRecordFunkce:Role: VCardRecordStrnka:Site: VCardRecord Ulice:Street: VCardRecord Nzev:Title: VCardRecord

 XmlConsole

 XmlConsoleVymazatClear XmlConsole ZavYtClose XmlConsoleForm XmlConsoleXML vstup... XML Input... XmlConsole&ZavYt&Close XmlPromptOde&slat&Send XmlPromptXML vstup XML Input XmlPrompt ZruaitCancelactivityDialogClass VybratChooseactivityDialogClass(Vyberte vaai  innostChoose your activityactivityDialogClassCancelcustomStatusDialogClassVyberteChoosecustomStatusDialogClass(Vyberte vaai  innostChoose your moodcustomStatusDialogClass&PYidat nov kontaktAdd new contactjAccount,PYidat nov kontakt doAdd new contact onjAccountDoplHujc AdditionaljAccountPry AwayjAccountKonference ConferencesjAccountNeruaitDNDjAccountNajt u~ivatele Find usersjAccount$PYipraven na pokec Free for chatjAccount.Neviditeln pro vaechnyInvisible for alljAccountTNeviditeln pouze pro seznam neviditelnch!Invisible only for invisible listjAccount>Vstoupit do chatovac mstnostiJoin groupchatjAccountNepYtomenNAjAccountOfflinejAccountOnlinejAccount&OtevYt XML konzoliOpen XML consolejAccount$Nastaven soukromPrivacy statusjAccount Prohl~e slu~ebService browserjAccount Slu~byServicesjAccount Nastavit  innost Set activityjAccountNastavit nladuSet moodjAccount8Zobrazit/zmnit osobn vCardView/change personal vCardjAccount*Viditeln pro vaechnyVisible for alljAccountLViditeln pouze pro seznam viditelnchVisible only for visible listjAccount>Muste zadat heslo v nastaven.&You must enter a password in settings.jAccountvMuste zadat platn JID. Prosm znovu vytvoYte Jabber  et.?You must use a valid jid. Please, recreate your jabber account.jAccountUpravovn %1 Editing %1jAccountSettingsVarovnWarningjAccountSettings$Muste zadat hesloYou must enter a passwordjAccountSettings etAccountjAccountSettingsClassV~dyAlwaysjAccountSettingsClass Pou~tApplyjAccountSettingsClassOvYenAuthenticationjAccountSettingsClassBAutomatick pYipojen po spuatnAutoconnect at startjAccountSettingsClass ZruaitCanceljAccountSettingsClassFKomprimovat provoz (pokud je mo~no)Compress traffic (if possible)jAccountSettingsClassPYipojen ConnectionjAccountSettingsClassVchozDefaultjAccountSettingsClass$`ifrovan spojen:Encrypt connection:jAccountSettingsClassHTTPjAccountSettingsClassHostitel:Host:jAccountSettingsClassJID:jAccountSettingsClass<Udr~ovat pYedchoz stav relaceKeep previous session statusjAccountSettingsClass2Mstn skladovn zlo~ekLocal bookmark storagejAccountSettingsClassNRu n nastavit hostitele a port serveru!Manually set server host and portjAccountSettingsClass NikdyNeverjAccountSettingsClassnenNonejAccountSettingsClassOKjAccountSettingsClass Heslo: Password:jAccountSettingsClassPort:jAccountSettingsClassPriorita: Priority:jAccountSettingsClassProxyjAccountSettingsClassTyp proxy: Proxy type:jAccountSettingsClass Zdroj: Resource:jAccountSettingsClassSOCKS 5jAccountSettingsClassNNastavit prioritu v zvislosti na stavu$Set priority depending of the statusjAccountSettingsClassbTuto volbu pro servery, kter nepodporuj zlo~ky4Use this option for servers doesn't support bookmarkjAccountSettingsClass Jmno: User name:jAccountSettingsClass*Kdy~ bude k dispoziciWhen availablejAccountSettingsClassjAccountSettingsjAccountSettingsClass<bez skupiny>  jAddContact Slu~byServices jAddContact ZruaitCanceljAdhocKompletnCompletejAdhocDokon itFinishjAdhoc DalaNextjAdhocOkjAdhocPYedchozPreviousjAdhoc.%1 byla(a) zabanovn(a)%1 has been banned jConference(%1 byl(a) vyhozen(a)%1 has been kicked jConference,%1 opustil(a) mstnost%1 has left the room jConference0%1 nastavil tma na : %2%1 has set the subject to: %2 jConference4%1 se pYejmenoval(a) na %2%1 is now known as %2 jConference@%2 (%1) vstoupil(a) do mstnosti%2 (%1) has joined the room jConference6%2 vstoupil(a) do mstnosti%2 has joined the room jConferenceF%2 vstoupil(a) do mstnosti jako %1%2 has joined the room as %1 jConference%2 nyn je %1 %2 now is %1 jConferenceP%3 (%2) vstoupil(a) do mstnosti jako %1!%3 (%2) has joined the room as %1 jConference$%3 (%2) nyn je %1%3 (%2) now is %1 jConferenceP%3 vstoupil(a) do mstnosti jako %1 a %2#%3 has joined the room as %1 and %2 jConference$%3 nyn je %1 a %2%3 now is %1 and %2 jConferenceZ%4 (%3) vstoupil(a) do mstnosti jako %1 a %2(%4 (%3) has joined the room as %1 and %2 jConference.%4 (%3) nyn je %1 a %2%4 (%3) now is %1 and %2 jConferenceL<font size='2'><b>Vztah:</b> %1</font>,Affiliation: %1 jConference$JID: %1 jConferenceN<font size='2'><b>Funkce:</b> %1</font>%Role: %1 jConference4PYidat do seznamu kontaktoAdd to contact list jConferenceZabanovatBan jConference"Zabanovac zprva Ban message jConferenceKonflikt: Po~adovan pYezdvka v mstnosti je pou~ita nebo zaregistrovan jinm u~ivatelem.HConflict: Desired room nickname is in use or registered by another user. jConference2Koprovat JID do schrnkyCopy JID to clipboard jConferencedZakzno: PYstup zamtnut, u~ivatel je zabanovn.)Forbidden: Access denied, user is banned. jConference:Pozvat do chatovac mstnostiInvite to groupchat jConferencePPolo~ka nenalezena: Mstnost neexistuje.(Item not found: The room does not exist. jConferenceDVstoupit do chatovac mstnosti naJoin groupchat on jConferenceVykopnoutKick jConference"Vykopvac zprva Kick message jConferenceModertor Moderator jConference`NepYijateln: PYezdvky mstnosti jsou zamknuty.+Not acceptable: Room nicks are locked down. jConferenceVNepovoleno: VytvYen mstnost je omezeno.)Not allowed: Room creation is restricted. jConferenceHNen autorizovno: Vy~adovno heslo."Not authorized: Password required. jConference astnk Participant jConferencelVy~adovna registrace: U~ivatel nen na seznamu  leno.6Registration required: User is not on the member list. jConferenceJZnovu vstoupit do chatovac mstnostiRejoin to conference jConference&Nastaven mstnostiRoom configuration jConference.Nastaven mstnosti: %1Room configuration: %1 jConference& astnci mstnostiRoom participants jConference. astnci mstnosti: %1Room participants: %1 jConferenceUlo~it zlo~kySave to bookmarks jConferenceSlu~ba nen k dispozici: Byl dosa~en maximln po et u~ivatelo v mstnosti.>Service unavailable: Maximum number of users has been reached. jConferenceTma: %2The subject is: %2 jConference4Neznm chyba: Bez popisu.Unknown error: No description. jConferenceU~ivatel %1 vs zve do konference %2 s odovodnnm "%3" PYijmete pozvn?GUser %1 invite you to conference %2 with reason "%3" Accept invitation? jConferenceNvatvnkVisitor jConference"Byl jsi zabanovnYou have been banned jConference&Byl jsi zabanovn zYou have been banned from jConference Byl jsi vykopnutYou have been kicked jConference$Byl jsi vykopnut zYou have been kicked from jConferenceadministrtor administrator jConferencezabanovnbanned jConferencehostguest jConference lenmember jConferencemodertor moderator jConferencevlastnkowner jConference astnk participant jConferencenvatvnkvisitor jConferences odovodnnm: with reason: jConferencebez odovodnnwithout reason jConferencePYijmoutAcceptjFileTransferRequestOdmtnoutDeclinejFileTransferRequestNzev souboru: File name:jFileTransferRequest"Velikost souboru: File size:jFileTransferRequestFormjFileTransferRequestOd:From:jFileTransferRequestUlo~it soubor Save FilejFileTransferRequest ZruaitCanceljFileTransferWidget ZavYtClosejFileTransferWidgetHotovo...Done...jFileTransferWidgetHotovo:Done:jFileTransferWidgetVelikost: File size:jFileTransferWidget$PYenos souboru: %1File transfer: %1jFileTransferWidgetNzev souboru: Filename:jFileTransferWidgetFormjFileTransferWidgetPYijmn... Getting...jFileTransferWidgetUplynul  as: Last time:jFileTransferWidgetOtevYtOpenjFileTransferWidgetZbvajc  as:Remained time:jFileTransferWidgetOdesln... Sending...jFileTransferWidgetRychlost:Speed:jFileTransferWidget Stav:Status:jFileTransferWidget ekn... Waiting...jFileTransferWidget.Nov chatovac mstnostNew conference jJoinChat.Nov chatovac mstnostnew chat jJoinChatKontaktyContactsjLayerJabber ObecnJabber GeneraljLayer%2 <%1> jProtocol\Ve streamu nastala chyba. Stream bude uzavYen.3A stream error occured. The stream has been closed. jProtocol>Nastala vstupn/vstupn chyba.An I/O error occured. jProtocol8Nastala chyba parsovn XML.An XML parse error occurred. jProtocolOvYen selhalo. U~ivatelsk jmno nebo heslo je chybn, nebo  et neexistuje. Pou~ijte ClientBase::authError() k nalezen dovodu.yAuthentication failed. Username/password wrong or account does not exist. Use ClientBase::authError() to find the reason. jProtocol*Vy~adovna autorizaceAuthorization request jProtocol@Autorizace kontaktu byla zruaena$Contacts's authorization was removed jProtocolDOvYen HTTP/SOCKS5 proxy selhalo.(HTTP/SOCKS5 proxy authentication failed. jProtocol.JID: %1<br/>Ne inn: %2JID: %1
Idle: %2 jProtocolJID: %1<br/>Neznm StanzaError! Prosm oznamte vvojYom.<br/>Chyba: %2NJID: %1
It is unknown StanzaError! Please notify developers.
Error: %2 jProtocolJID: %1<br/>Po~adovan funkce nen implementovna u pYjemce nebo na serveru.PJID: %1
The feature requested is not implemented by the recipient or server. jProtocolJID: %1<br/>}dajc entita nem po~adovan oprvnn k proveden akce.bJID: %1
The requesting entity does not possess the required permissions to perform the action. jProtocolZVyjednvn/zahajovn komprese se nezdaYilo.,Negotiating/initializing compression failed. jProtocol0Nedostatek pamti. Uhoh.Out of memory. Uhoh. jProtocolDSelhalo vyYeaen hostname serveru.'Resolving the server's hostname failed. jProtocol&Odeslatel: %2 <%1>Sender: %2 <%1> jProtocolOdeslatel:  Senders:  jProtocol Slu~byServices jProtocolPYedmt: %1 Subject: %1 jProtocol~HTTP/SOCKS5 proxy vy~aduje nepodporovan ovYovac mechanizmus.=The HTTP/SOCKS5 proxy requires an unsupported auth mechanism. jProtocolFHTTP/SOCKS5 proxy vy~aduje ovYen..The HTTP/SOCKS5 proxy requires authentication. jProtocolNabzen ovYovac mechanizmus serverem nen podporovn nebo server nenabz ovYovac mechanizmus vobec.hThe auth mechanisms the server offers are not supported or the server offered no auth mechanisms at all. jProtocolxSpojen bylo odmtnuto ze strany serveru (na rovni soketu).?The connection was refused by the server (on the socket level). jProtocolNPYchoz verze streamu nen podporovna.The incoming stream's version is not supported jProtocolServer nenabz TLS, zatmco po~adavek byl nastaven nebo TLS nebyl dokon en.WThe server didn't offer TLS while it was set to be required or TLS was not compiled in. jProtocolCertifikt serveru nelze ovYit nebo TLS nebylo span dokon eno.bThe server's certificate could not be verified or the TLS handshake did not complete successfully. jProtocol8Stream byl serverem uzavYen.+The stream has been closed (by the server). jProtocoltU~ivatel (nebo vyaa roveH protokolu) po~dal o odpojen.;The user (or higher-level protocol) requested a disconnect. jProtocolFNeexistuje ~dn aktivn pYipojen.There is no active connection. jProtocolURL: %1 jProtocol^Neznm chyba. Je ~asn, ~e toto vidte... O_o3Unknown error. It is amazing that you see it... O_o jProtocol,NepYe tench zprv: %1Unreaded messages: %1 jProtocol&Byl jsi autorizovnYou were authorized jProtocol8Vaae autorizace byla zruaenaYour authorization was removed jProtocol cs-CZen jProtocol4vCard byla span ulo~enavCard is succesfully saved jProtocol<<h3>Informace o  innosti:</h3>

Activity info:

 jPubsubInfo8<h3>Informace o nlad:</h3>

Mood info:

 jPubsubInfo6<h3>Informace o hudb:</h3>

Tune info:

 jPubsubInfoInterpret: %1 Artist: %1 jPubsubInfoObecn: %1 General: %1 jPubsubInfoDlka: %1 Length: %1 jPubsubInfoJmno: %1Name: %1 jPubsubInfoHodnocen: %1 Rating: %1 jPubsubInfoZdroj: %1 Source: %1 jPubsubInfoUpYesnn: %1 Specific: %1 jPubsubInfoText: %1 jPubsubInfoNzev: %1 Title: %1 jPubsubInfoSkladba: %1 Track: %1 jPubsubInfo6Uri: <a href="%1">odkaz</a>Uri: link jPubsubInfo ZavYtClosejPubsubInfoClass Pubsub infojPubsubInfoClass4PYidat do seznamu kontaktoAdd to contact listjRoster<PYidat do seznamu ignorovanchAdd to ignore listjRoster>PYidat do seznamu neviditelnchAdd to invisible listjRoster:PYidat do seznamu viditelnchAdd to visible listjRoster(Po~dat o autorizaciAsk authorization fromjRoster4Po~dat o autorizaci od %1Ask authorization from %1jRosterAutorizace AuthorizationjRoster(Autorizovat kontakt?Authorize contact?jRoster ZruaitCanceljRosterLKontakty budou smazny. Jste si jisti?&Contact will be deleted. Are you sure?jRoster2Koprovat JID do schrnkyCopy JID to clipboardjRoster"Odstranit kontaktDelete contactjRosterBOdstranit ze seznamu ignorovanchDelete from ignore listjRosterDOdstranit ze seznamu neviditelnchDelete from invisible listjRoster@Odstranit ze seznamu viditelnchDelete from visible listjRoster(Odstranit s kontaktyDelete with contactsjRoster,Odstranit bez kontaktoDelete without contactsjRosterSpustit pYkazExecute commandjRosterSpustit pYkaz:Execute command:jRoster"Zjistit ne innostGet idlejRoster(Zjistil ne innost z:Get idle from:jRosterSkupina:Group:jRoster<Pozvat do chatovac mstnosti:Invite to conference:jRosterPYihlsitLog InjRosterOdhlsitLog OutjRosterPYesunout %1Move %1jRoster(PYesunout do skupiny Move to groupjRoster Jmno:Name:jRoster"PubSub informace: PubSub info:jRoster Dovod:Reason:jRosterRegistrovatRegisterjRoster"Zruait autorizaciRemove authorization fromjRoster4Odstranit autorizaci od %1Remove authorization from %1jRosterHOdstranit transport a jeho kontakty?"Remove transport and his contacts?jRoster&PYejmenovat kontaktRename contactjRoster"Poslat autorizaciSend authorization tojRosterPoslat soubor Send filejRoster"Poslat soubor do: Send file to:jRoster"Poslat zprvu do:Send message to:jRoster Slu~byServicesjRosterTransporty TransportsjRosterOdregistrovat UnregisterjRoster ChybaErrorjSearchJIDjSearch Jabber IDjSearchPYezdvkaNicknamejSearch HledatSearchjSearch4<br/><b>Mo~nosti:</b><br/>
Features:
jServiceBrowser4<br/><b>Identity:</b><br/>
Identities:
jServiceBrowserkategorie:  category: jServiceBrowser typ: type: jServiceBrowserVzdlen server nebo slu~ba jsou ur eny jako  st nebo cel JID pYjemce, nemohl bt kontaktovn v rozumnm mno~stv  asu.A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time.jServiceDiscoveryVzdlen server nebo slu~ba jsou ur eny jako  st nebo cel JID pYjemce, proto~e neexistuje.hA remote server or service specified as part or all of the JID of the intended recipient does not exist.jServiceDiscoveryPYstup nemo~e bt poskytnut, proto~e existuje zdroj nebo session se stejnm jmnem nebo adresou.fAccess cannot be granted because an existing resource or session exists with the same name or address.jServiceDiscovery\Nebylo nalezeno JID nebo po~adovan po~adavek.4The addressed JID or item requested cannot be found.jServiceDiscoveryPo~adovan funkce nen implementovna u pYjemce nebo na serveru a proto nemohou bt zpracovny.fThe feature requested is not implemented by the recipient or server and therefore cannot be processed.jServiceDiscovery>PYjemce je do asn nedostupn.2The intended recipient is temporarily unavailable.jServiceDiscoveryPo~adovan polo~ka nebyla zmnna od doby kdy byla naposledy po~adovna.?The item requested has not changed since it was last requested.jServiceDiscoverytPYjemce nebo server ji~ nelze kontaktovat na tto adrese.CThe recipient or server can no longer be contacted at this address.jServiceDiscovery~PYjemce nebo server neumo~Huje ~dnou entitu k proveden akce.HThe recipient or server does not allow any entity to perform the action.jServiceDiscoveryPYjemce nebo server pYesmrovv dotazy na tyto informace na jinou entitu, obvykle do asn.lThe recipient or server is redirecting requests for this information to another entity, usually temporarily.jServiceDiscoveryPYjemce nebo server chpe po~adavek, ale odmt jej zpracovat, proto~e nesplHuje kritria stanoven pro pYjemce nebo server.The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server.jServiceDiscoverypPYjemce nebo server pochopil dotaz, ale te ho ne ekal.UThe recipient or server understood the request but was not expecting it at this time.jServiceDiscoveryv}dajc entita nem po~adovan oprvnn k proveden akce.VThe requesting entity does not possess the required permissions to perform the action.jServiceDiscovery}dajc entita nen autorizovan pro pYstup k po~adovan slu~b, proto~e je vy~adovno pYihlaen.kThe requesting entity is not authorized to access the requested service because a subscription is required.jServiceDiscovery}dajc entita nen autorizovan pro pYstup k po~adovan slu~b, proto~e je po~adovna platba.dThe requesting entity is not authorized to access the requested service because payment is required.jServiceDiscovery}dajc entita nen autorizovan pro pYstup k po~adovan slu~b, proto~e je vy~adovna registrace.iThe requesting entity is not authorized to access the requested service because registration is required.jServiceDiscoveryjOdeslatel poslal poakozen nebo nezpracovateln XML.FThe sender has sent XML that is malformed or that cannot be processed.jServiceDiscoveryOdeslatel mus zajistit Ydn oprvnn, ne~ bude moci provdt akce, nebo poskytl ovYen impreoper.}The sender must provide proper credentials before being allowed to perform the action, or has provided impreoper credentials.jServiceDiscovery Vyslajc entita poskytla nebo oznmila XMPP adresu nebo hledisko, kter nebude dodr~ovat syntaxi definovan v adresovacm schmatu.The sending entity has provided or communicated an XMPP address or aspect thereof that does not adhere to the syntax defined in Addressing Scheme.jServiceDiscoveryServer nemohl zpracovat stanza z dovodu nesrozumitelnho nebo jinak nedefinovan vnitYn chyby serveru.vThe server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error.jServiceDiscoveryServer nebo pYjemce v sou asn dob neposkytuje po~adovan slu~by.IThe server or recipient does not currently provide the requested service.jServiceDiscoveryServer nebo pYjemce postrd systmov prostYedky nezbytn k ~dosti slu~by.TThe server or recipient lacks the system resources necessary to service the request.jServiceDiscoveryStanza adresa 'z' uveden pro pYipojen klient neplat pro stream.VThe stanza 'from' address specified by a connected client is not valid for the stream.jServiceDiscovery.Neznm chyba podmnky.The unknown error condition.jServiceDiscovery%1@%2 jSlotSignal.Neviditeln pro vaechnyInvisible for all jSlotSignalTNeviditeln pouze pro seznam neviditelnch!Invisible only for invisible list jSlotSignal*Viditeln pro vaechnyVisible for all jSlotSignalLViditeln pouze pro seznam viditelnchVisible only for visible list jSlotSignal AdresaAddress jTransportObecCity jTransport DatumDate jTransportE-Mail jTransport PrvnFirst jTransportPoslednLast jTransport RoznMisc jTransport JmnoName jTransportPYezdvkaNick jTransport HesloPassword jTransportTelefonPhone jTransportRegistrovatRegister jTransportSttState jTransportText jTransportURL jTransportPS Zip jTransportPYidat PO box Add PO boxjVCard"PYidat narozeniny Add birthdayjVCardPYidat obecAdd cityjVCardPYidat zemi Add countryjVCardPYidat popisAdd descriptionjVCard0PYidat domovskou strnku Add homepagejVCardPYidat jmnoAdd namejVCard PYidat pYezdvkuAdd nickjVCard.PYidat nzev organizaceAdd organization namejVCard,PYidat  st organizaceAdd organization unitjVCardPYidat PS  Add postcodejVCardPYidat zem Add regionjVCardPYidat funkciAdd rolejVCardPYidat ulici Add streetjVCardPYidat nzev Add titlejVCard ZavYtClosejVCard.Obrzek je pYlia velkImage size is too bigjVCardPObrzky (*.gif *.bmp *.jpg *.jpeg *.png)'Images (*.gif *.bmp *.jpg *.jpeg *.png)jVCardOtevYt soubor Open FilejVCard&Chyba pYi otevrn Open errorjVCardDetailyRequest detailsjVCard Ulo~itSavejVCard$Aktualizovat fotku Update photojVCarduserInformationjVCard ZruaitCanceltopicConfigDialogClass ZmnitChangetopicConfigDialogClassZmnit tma Change topictopicConfigDialogClassqutim-0.2.0/languages/cs_CZ/binaries/coder.qm0000644000175000017500000003174311227526156022531 0ustar euroelessareuroelessarn)E2-i2<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/images/img/logo32.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">qutIM Coder</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">v0.1</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Plugin, kter umo~Huje organizovat aifrovano konverzace</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> s jakmkoliv kontaktem v seznamu kontakto.</p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">VvojY aifrovacho algoritmu:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maksim 'Loz' Velesiuk</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:loz.accs@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">loz.accs@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">VvojY pluginu:</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Ian 'NayZaK' Kazlauskas</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:nayzak@googlemail.com"><span style=" text-decoration: underline; color:#0000ff;">nayzak@googlemail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">(A) 2009</span></p></body></html> k

qutIM Coder

v0.1

Plugin, that lets you to organize encrypted chats with any

contact from your contact list.

Encryption algorithms developer:

Maksim 'Loz' Velesiuk

loz.accs@gmail.com

Plugin developer:

Ian 'NayZaK' Kazlauskas

nayzak@googlemail.com

(с) 2009

HelpUIO...AboutHelpUINpovdaHelpHelpUIqrc:/htmls/help/help.htmlHelpUIОКHelpUIkontakt contact QutimCoder ji~ za ala has already begun QutimCoder, nebyla zatm zahjena have not been started yet QutimCoder:Zahjit aifrovanou konverzaciBegin encrypted chat QutimCoder:Ukon it aifrovanou konverzaciClose encrypted chat QutimCoder`ifrovn Encryption QutimCoder.`ifrovan konverzace s Enqrypted chat with  QutimCoderZUdlat tuto komunikaci jako trvale aifrovanou"Make this encrypted chat permanent QutimCoderbUdlat tuto komunikaci jako pravideln aifrovanou Make this encrypted chat regular QutimCoderPlugin, kter umo~n organizovat aifrovanou komunikaci se vaemi kontakty v seznamu kontakto.bPlugin, that lets you to organize encrypted chat sessions with any contact from your contact list. QutimCoderqutIM Coder Qutim Coder QutimCoderPJi~ mte trvale aifrovanou komunikaci s /You already have permanent encrypted chat with  QutimCoderJNemte stle aifrovanou komunikaci s -You don't have permanent encrypted chat with  QutimCoderBzeBaseSettingsCoding ZruaitCancelSettingsCodingZkontrolovatCheckSettingsCoding$Nastaven kdovnCoding SettingsSettingsCoding\Chyba! Tato kombinace faktoro nen k dispozici0Error! This factors combination is not availableSettingsCodingFaktoryFactorsSettingsCodingNpovdaHelpSettingsCoding roveHLevelSettingsCodingOKSettingsCodingROK! Tato kombinace faktoro je k dispozici)OK! This factors combination is availableSettingsCoding<NejdYve si pYe tte npovdu.Please, read Help first.SettingsCodingqutim-0.2.0/languages/cs_CZ/binaries/kde-integration.qm0000644000175000017500000001264311261560236024512 0ustar euroelessareuroelessar : s k z X{+ i ZavYtCloseKDENotificationLayer4OtevYt chatovac mstnost Open chatKDENotificationLayer$Kontrola pravopisu Spell checkerKdeSpellerLayerRozpoznat jazykAutodetect of languageKdeSpellerSettingsFormKdeSpellerSettingsVybrat slovnk:Select dictionary:KdeSpellerSettings,%1 m dnes narozeniny!%1 has birthday today!!QObject%1 pae %1 is typingQObject0Zablokovan zprva od %1Blocked message from %1QObject*Vlastn zprva pro %1Custom message for %1QObjectZprva od %1:Message from %1:QObjectOznamovn NotificationsQObject.Systmov zprva od %1:System message from %1:QObject <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/plugin-logo.png" /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Jednoduch qutIM plugin</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Autor: </span>Sidorov Aleksey</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Kontakty: </span><a href="mailto::sauron@citadelspb.com"><span style=" text-decoration: underline; color:#0000ff;">sauron@citadeslpb.com</span></a></p></body></html>

Simple qutIM plugin

Author: Sidorov Aleksey

Contacts: sauron@citadeslpb.com

plugmanSettingsO...AboutplugmanSettingsFormplugmanSettings*Instalovat ze souboruInstall from fileplugmanSettings,Instalovat z internetuInstall from internetplugmanSettings,Nainstalovan pluginy:Installed plugins:plugmanSettingsNastavenSettingsplugmanSettingsqutim-0.2.0/languages/cs_CZ/binaries/fmtune.qm0000644000175000017500000003157311266644017022734 0ustar euroelessareuroelessar h> h  h Zy - .2 M K F) \B \B A  G 2 0 s/ Ž Ž } n i8: iAM <.=/ Ki1 <nov> EditStationsPYidat stanici Add station EditStationsPYidat stream Add stream EditStations*Vaechny soubory (*.*)All files (*.*) EditStations"Odstranit staniciDelete station EditStations$Odstranit stanici?Delete station? EditStationsOstranit stream Delete stream EditStations"Odstranit stream?Delete stream? EditStationsDoloDown EditStationsUpravit stanice Edit stations EditStationsExport EditStations Export... EditStationsFMtune XML (*.ftx) EditStations FormtFormat EditStationsFormt:Format: EditStations Styl:Genre: EditStationsObrzek:Image: EditStationsImport EditStations Import... EditStations Jazyk: Language: EditStations Nzev:Name: EditStations Ulo~itSave EditStationsURL streamu: Stream URL: EditStationsURL EditStationsURL: EditStations NahoruUp EditStationsEkvalizr Equalizer Equalizer,Rychl pYidn staniceFast add stationFastAddStation Nzev:Name:FastAddStationURL streamu: Stream URL:FastAddStationstreamFastAddStationRychl najt: Fast find: ImportExportDokon itFinish ImportExportDatov tok:Bitrate:Info Obal:Cover:InfoInformace InformationInfo Rdio:Radio:InfoPsni ka:Song:InfoStream:Info as:Time:InfoDByla na tena nesprvn verze BASS.(An incorrect version of BASS was loaded. QMessageBox8Nelze inicializovat zaYzenCan't initialize device QMessageBox PauzaPause Recording RecordRecord RecordingNahrvn Recording RecordingStop Recording%1% fmtunePlugin0Koprovat nzev psni kyCopy song name fmtunePluginUpravit stanice Edit stations fmtunePluginEkvalizr Equalizer fmtunePlugin,Rychl pYidn staniceFast add station fmtunePluginInformace Information fmtunePluginZtlumitMute fmtunePluginVypnout rdio Radio off fmtunePluginZapnout rdioRadio on fmtunePluginNahrvn Recording fmtunePluginHlasitostVolume fmtunePlugin<vchoz> fmtuneSettings<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/fmtune_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">FMtune plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">v%1</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Lms</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:lms.cze7@gmail.com"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#0000ff;">lms.cze7@gmail.com</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:10pt; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; color:#000000;">(c) 2009</span></p></body></html>

FMtune plugin

v%1

Author:

Lms

lms.cze7@gmail.com

(c) 2009

fmtuneSettingsClassO...AboutfmtuneSettingsClassHAktivovat globln klvesov zkratky"Activate global keyboard shortcutsfmtuneSettingsClassZaYzenDevicesfmtuneSettingsClass ObecnGeneralfmtuneSettingsClass$Vstupn zaYzen:Output device:fmtuneSettingsClassPluginyPluginsfmtuneSettingsClassNastavenSettingsfmtuneSettingsClass"Klvesov zkratky ShortcutsfmtuneSettingsClass,Zapnout/vypnout rdio:Turn on/off radio:fmtuneSettingsClass*Hlasitost - zeslabit: Volume down:fmtuneSettingsClass(Hlasitost - ztlumit: Volume mute:fmtuneSettingsClass(Hlasitost - zeslit: Volume up:fmtuneSettingsClassqutim-0.2.0/languages/cs_CZ/binaries/gpgcrypt.qm0000644000175000017500000000176111236534563023272 0ustar euroelessareuroelessarz4 I  E| snit"Nastavit PGP kl  Set GPG KeyGPGCryptForm GPGSettingsNastavenSettings GPGSettingsVa kl : Your Key: GPGSettings&Zruait&Cancel Passphrase&OK&OK PassphraseOpenPGP hesloOpenPGP Passphrase PassphraseVaae heslo je potYebn pro pou~it OpenPGP ochrany. Zadejte heslo:VYour passphrase is needed to use OpenPGP security. Please enter your passphrase below: Passphrase"%1: OpenPGP heslo%1: OpenPGP Passphrase PassphraseDlg*Ozna it kl kontaktuSelect Contact KeysetKeyOzna it kl : Select Key:setKeyqutim-0.2.0/languages/cs_CZ/binaries/weather.qm0000644000175000017500000002136611227526156023074 0ustar euroelessareuroelessar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/weather_big.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Weather qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">v0.1.2 (<a href="http://deltaz.ru/node/65"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">Info</span></a>)</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Nikita Belov</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:null@deltaz.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">null@deltaz.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html>

Weather qutIM plugin

v0.1.2 (Info)

Author:

Nikita Belov

null@deltaz.ru

(c) 2008-2009

weatherSettingsClassO...AboutweatherSettingsClass PYidatAddweatherSettingsClassObceCitiesweatherSettingsClassOdstranit obec Delete cityweatherSettingsClass$Zadejte nzev obceEnter city nameweatherSettingsClass Obnovovac doba:Refresh period:weatherSettingsClass HledatSearchweatherSettingsClassNastavenSettingsweatherSettingsClassBZobrazit po as ve stavovm YdkuShow weather in the status rowweatherSettingsClassqutim-0.2.0/languages/cs_CZ/binaries/webhistory.qm0000644000175000017500000002416111227526156023630 0ustar euroelessareuroelessar$ s$XAn']C#vN&i'n<!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Web History plugin pro qutIM</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn verze</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Ukld historii na webov server</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Autor: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2009</span></p></body></html>

Web History plugin for qutIM

svn version

Store history on web-server

Author:

Alexander Kazarin

boiler@co.ru

(c) 2009

historySettingsClassO...AbouthistorySettingsClass^Zapnout oznamovn, kdy~ dostanete novou zprvu%Enable notification when get messageshistorySettingsClass&PYihlaaovac jmno:Login:historySettingsClass Heslo: Password:historySettingsClassNastavenSettingshistorySettingsClasslUkldat lokln v JSON souborech (JSON History plugin)1Store locally in JSON files (JSON History plugin)historySettingsClasslUkldat lokln v SQLite databzi (SQL History plugin)5Store locally in SQLite database (SQL History plugin)historySettingsClassURL:historySettingsClass6Ukldat zprvy z WebHistory$Store messages from WebHistory:
webhistoryPluginv JSON: %1<br/>in JSON: %1
webhistoryPlugin"v SQLite: %1<br/>in SQLite: %1
webhistoryPluginqutim-0.2.0/languages/cs_CZ/binaries/vkontakte.qm0000644000175000017500000000560011267047654023441 0ustar euroelessareuroelessar > ) j iFC  O <i c s EdditAccount Pou~tApply EdditAccount@Automaticky pYipojit po spuatnAutoconnect on start EdditAccount ZruaitCancel EdditAccountNKontrolovat aktualizace pYtel ka~dch: Check for friends updates every: EdditAccount@Kontrolovat nov zprvy ka~dch:Check for new messages every: EdditAccountUpravovn %1 Editing %1 EdditAccountVPovolit oznamovn aktualizac fotek pYtel*Enable friends photo updates notifications EdditAccountForm EdditAccount ObecnGeneral EdditAccountRVlo~it na oznmen o nov fotce celou URL/Insert fullsize URL on new photos notifications EdditAccountTVlo~it na oznmen o nov fotce nhled URL.Insert preview URL on new photos notifications EdditAccount6Udr~ovat pYipojen ka~dch:Keep-alive every: EdditAccountOK EdditAccount Heslo: Password: EdditAccount<Obnovit seznam pYtel ka~dch:Refresh friend list every: EdditAccountAktualizaceUpdates EdditAccount@Automaticky pYipojit po spuatnAutoconnect on start LoginFormE-mail: LoginFormForm LoginForm Heslo: Password: LoginFormb<font size='2'><b>Zprva stavu:</b>&nbsp;%1</font3Status message: %1U > ) u <$i0 Pou~tApply EdditAccount@Automaticky pYipojit po spuatnAutoconnect on start EdditAccountPry Away EdditAccountZaneprzdnnBusy EdditAccount ZruaitCancel EdditAccount:Nezobrazovat autoreply dialogDon't show autoreply dialog EdditAccountUpravovn %1 Editing %1 EdditAccountForm EdditAccount ObecnGeneral EdditAccountNe innIdle EdditAccountOK EdditAccountNa telefonu On the phone EdditAccountOnline EdditAccountNa obd Out to lunch EdditAccount Heslo: Password: EdditAccount StavyStatuses EdditAccountVrtm seWill be right back EdditAccount(Automaticky pYipojitAutoconnect on start LoginFormE-mail: LoginFormForm LoginForm Heslo: Password: LoginFormPry AwayMSNConnStatusBoxZaneprzdnnBusyMSNConnStatusBoxNe innIdleMSNConnStatusBoxNeviditeln InvisibleMSNConnStatusBoxOfflineMSNConnStatusBoxNa telefonu On the phoneMSNConnStatusBoxOnlineMSNConnStatusBoxNa obd Out to lunchMSNConnStatusBoxVrtm seWill be right backMSNConnStatusBoxBez skupin Without groupMSNContactListqutim-0.2.0/languages/cs_CZ/binaries/twitter.qm0000644000175000017500000000243111226414071023116 0ustar euroelessareuroelessar| :{ il(Automaticky pYipojitAutoconnect on start LoginFormForm LoginForm Heslo: Password: LoginForm"Jmno nebo email:Username or email: LoginForm0Chyba Twitter protokolu:Twitter protocol error: twApiWrap Popis: Description: twContactList"Po et oblbench:Favourites count: twContactListPYznivci Followers twContactList Po et pYznivco:Followers count: twContactListPYtelFriends twContactListPo et pYtel:Friends count: twContactList(Posledn text stavu:Last status text: twContactListUmstn: Location: twContactList Jmno:Name: twContactListPo et stavo:Statuses count: twContactListOfflinetwStatusObjectOnlinetwStatusObjectqutim-0.2.0/languages/cs_CZ/binaries/qt.qm0000644000175000017500000020770511246510757022065 0ustar euroelessareuroelessarPq[6V7CVfR@  M} gjGf%C &~N_)2oKNt]g*]hk5tFFG%Rn صǥ`n6t e;PxAPsPA%.wC-C^`ƨ1ƨȕҝzէ?ߺB<^%!$y~bE~bIoMn*+3//1:4~xAuD1GSGbHLAUPѧ6.SnyUkUUTf[[]k*E^n_pyeFiXi`qy;w2{}ulBvitt!.e.t3>1PvDYst't^$tFx059hUdgBwp hb!+bW,DJ2;6ZCU]D{KK8U|\}art|(^{|ם|}wZ4ϗZDdK<7f+׳/_|UERu %5Imni~ i9%ܓwҦ% 5kE=S=?r?uCtIL"XU D`fdgAhIM|QRc5z (( U 4 + x+ 9 팤 o qP  DE o=` 7uf =S `g `l btq cEV dh eX eEE ee f1U f* g5U gn k, rD". t m` / w. yr3 H HA *] s $BT   r` ̓ J JC M C N>o ̺Rk -DST ۷_ U)a  0Ė z+؄  X4  _ IL $ xHd u ./L 7F@ >Z >[ >\ >dP >lT >p > > ?t|ϕ DT" I. RVG RV S.! SG SF Y Y~ hۮLb p/ BiA  T2_ Tv Ts Ty i M Tu 0 ҂4  ~ g 9э tN a :bal ʜ-   +>0 0E# ;ɾ̱ K9 Pt| Pt? iE jӮw m9I uļ  U# ] ^w F Ut X D Fw t5{ t5 }Q  R,wTT)x5gT)*'*rI_aKOOt[ a.6nyG`vɅy$M~cb4A4FSkǗ:DB&PjYj} m~ 5 BlD$U\%49%4I%D HJdc!L$.%g32yC![C>bz=N?a Edr(rY֠4t2,vZ8dUi<html>ZaYzen na pYehrvn zvuku <b>%1</b> nefunguje.<br/>Vracm se k <b>%2</b>.</html>^The audio playback device %1 does not work.
Falling back to %2. AudioOutput<Vrtit se zpt k zaYzen '%1'Revert back to device '%1' AudioOutputZavYt panel Close Tab CloseButtonDostupnost AccessibilityPhonon::Komunikace CommunicationPhonon::HryGamesPhonon:: HudbaMusicPhonon::Oznamovn NotificationsPhonon::VideoPhonon::Varovn: Zkladna pro GStreamer pluginy pravdpodobn nen nainstalovna. Veaker audio a video podpora bude vypnuta~Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabledPhonon::Gstreamer::BackendVarovn: Balk gstreamer0.10-plugins-good pravdpodobn nen nainstalovn. Nkter funkce videa budou vypnuty.Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.Phonon::Gstreamer::Backend$Chybn typ zdroje.Invalid source type.Phonon::Gstreamer::MediaObjectHlasitost: %1% Volume: %1%Phonon::VolumeSlider*%1, %2 nen definovn%1, %2 not definedQ3Accel SmazatDelete Q3DataTableNeFalse Q3DataTable Vlo~itInsert Q3DataTableAnoTrue Q3DataTableAktualizovatUpdate Q3DataTable|%1 Soubor nebyl nalezen. pYekontrolujte cestu a jmno souboru.+%1 File not found. Check path and filename. Q3FileDialog&Smazat&Delete Q3FileDialog&Ne&No Q3FileDialog&OK Q3FileDialog&OtevYt&Open Q3FileDialog&PYejmenovat&Rename Q3FileDialog&Ulo~it&Save Q3FileDialog&NesetYdn &Unsorted Q3FileDialog&Ano&Yes Q3FileDialogP<qt>Skute n chcete smazat %1 "%2"?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialog*Vaechny soubory (*.*) All Files (*) Q3FileDialog*Vaechny soubory (*.*)All Files (*.*) Q3FileDialogAtributy Attributes Q3FileDialogZptBack Q3FileDialog ZruaitCancel Q3FileDialog>Koprovat nebo pYesunout souborCopy or Move a File Q3FileDialog*VytvoYit novou slo~kuCreate New Folder Q3FileDialog DatumDate Q3FileDialogOdstranit %1 Delete %1 Q3FileDialogDetailn pohled Detail View Q3FileDialogAdresYDir Q3FileDialogAdresYe Directories Q3FileDialogAdresY: Directory: Q3FileDialog ChybaError Q3FileDialog SouborFile Q3FileDialogNzev souboru: File &name: Q3FileDialogTyp souboru: File &type: Q3FileDialogNajt adresYFind Directory Q3FileDialog Inaccessible Q3FileDialogSeznam pohledo List View Q3FileDialogNhled: Look &in: Q3FileDialog NzevName Q3FileDialogNov slo~ka New Folder Q3FileDialogNov slo~ka %1 New Folder %1 Q3FileDialogNov slo~ka 1 New Folder 1 Q3FileDialog&O jeden adresY vaOne directory up Q3FileDialogOtevYtOpen Q3FileDialogOtevYtOpen  Q3FileDialog*Nhled obsahu souboruPreview File Contents Q3FileDialog4Nhled informac o souboruPreview File Info Q3FileDialogO&bnovitR&eload Q3FileDialogPouze ke  ten Read-only Q3FileDialog*Pro zpis i pro  ten Read-write Q3FileDialog st: %1Read: %1 Q3FileDialogUlo~it jakoSave As Q3FileDialogVyberte adresYSelect a Directory Q3FileDialog,Ukzat &skryt souboryShow &hidden files Q3FileDialogVelikostSize Q3FileDialog TYditSort Q3FileDialog,SetYdit podle &datumu Sort by &Date Q3FileDialog*SetYdit podle &jmna Sort by &Name Q3FileDialog2SetYdit podle &velikosti Sort by &Size Q3FileDialogSpecilnSpecial Q3FileDialog Odkaz na adresYSymlink to Directory Q3FileDialogOdkaz na souborSymlink to File Q3FileDialog0Odkaz na zvlatn souborSymlink to Special Q3FileDialogTypType Q3FileDialog Write-only Q3FileDialogZapsat: %1 Write: %1 Q3FileDialogadresY the directory Q3FileDialog souborthe file Q3FileDialog odkaz the symlink Q3FileDialog2Nelze vytvoYit adresY %1Could not create directory %1 Q3LocalFs Nelze otevYt %1Could not open %1 Q3LocalFs0Nelze  st z adresYe %1Could not read directory %1 Q3LocalFsLNelze odstranit soubor nebo adresY %1%Could not remove file or directory %1 Q3LocalFs4Nelze pYejmenovat %1 na %2Could not rename %1 to %2 Q3LocalFsNelze zapsat %1Could not write %1 Q3LocalFsUpravit... Customize... Q3MainWindowZarovnatLine up Q3MainWindow8Operace zastavena u~ivatelemOperation stopped by the userQ3NetworkProtocol ZruaitCancelQ3ProgressDialog Pou~tApply Q3TabDialog ZruaitCancel Q3TabDialogVchozDefaults Q3TabDialogNpovdaHelp Q3TabDialogOK Q3TabDialog&Koprovat&Copy Q3TextEditV&lo~it&Paste Q3TextEdit Zn&ovu&Redo Q3TextEdit &Zpt&Undo Q3TextEditVymazatClear Q3TextEditVyjmou&tCu&t Q3TextEditVybrat vae Select All Q3TextEdit ZavYtClose Q3TitleBarMaximalizovatMaximize Q3TitleBarMinimalizovatMinimize Q3TitleBarObnovit dolo Restore down Q3TitleBarObnovit nahoru Restore up Q3TitleBarVce...More... Q3ToolBar(neznm) (unknown) Q3UrlOperatorProtokol `%1' nepodporuje koprovn nebo pYesouvn souboro nebo adresYoIThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorfProtokol `%1' nepodporuje vytvYen novch adresYo;The protocol `%1' does not support creating new directories Q3UrlOperatorVProtokol `%1' nepodporuje zskvn souboro0The protocol `%1' does not support getting files Q3UrlOperatorTProtokol `%1' nepodporuje vypsn adresYo6The protocol `%1' does not support listing directories Q3UrlOperatorTProtokol `%1' nepodporuje zasln souboro0The protocol `%1' does not support putting files Q3UrlOperatortProtokol `%1' nepodporuje odstrann souboro nebo adresYo@The protocol `%1' does not support removing files or directories Q3UrlOperatorxProtokol `%1' nepodporuje pYejmenovn souboro nebo adresYo@The protocol `%1' does not support renaming files or directories Q3UrlOperator:Protokol `%1' nen podporovn"The protocol `%1' is not supported Q3UrlOperatorZ&ruait&CancelQ3WizardDo&kon it&FinishQ3WizardNpo&vda&HelpQ3Wizard&Dala >&Next >Q3Wizard< &Zpt< &BackQ3Wizard"Spojen odmtnutoConnection refusedQAbstractSocket< asov limit pYipojen vypraelConnection timed outQAbstractSocketPo ta nalezenHost not foundQAbstractSocketDOperace na soketu nen podporovna$Operation on socket is not supportedQAbstractSocket&Soket nen pYipojenSocket is not connectedQAbstractSocketFVyprael  asov limit operace soketuSocket operation timed outQAbstractSocket&Vybrat vae &Select AllQAbstractSpinBoxO krok &nahoru&Step upQAbstractSpinBoxO krok &dolo Step &downQAbstractSpinBoxAktivovatActivate QApplication>Aktivuje program v hlavnm okn#Activates the program's main window QApplicationZSpuatn '%1' vy~aduje Qt %2, nalezena Qt %3.,Executable '%1' requires Qt %2, found Qt %3. QApplicationDChyba Qt knihovna je nekompatibinIncompatible Qt Library Error QApplicationQT_LAYOUT_DIRECTION QApplicationZ&ruait&Cancel QAxSelectCOM &objekt: COM &Object: QAxSelectOK QAxSelect*Vyberte ActiveX prvekSelect ActiveX Control QAxSelectZaakrtnoutCheck QCheckBoxPYepnoutToggle QCheckBoxOdakrtnoutUncheck QCheckBox2PYid&at k vlastnm barvm&Add to Custom Colors QColorDialog&Zkladn barvy &Basic colors QColorDialog&Vlastn barvy&Custom colors QColorDialog&Zelen:&Green: QColorDialog &erven:&Red: QColorDialog &Sat:&Sat: QColorDialog &Hod:&Val: QColorDialogA&lfa kanl:A&lpha channel: QColorDialogMo&dr:Bl&ue: QColorDialogZabar&ven:Hu&e: QColorDialogZvolit barvu Select Color QColorDialog ZavYtClose QComboBoxNeFalse QComboBoxOtevYtOpen QComboBoxAnoTrue QComboBox,NepodaYilo se pYipojitUnable to connect QDB2DriverAM QDateTimeEditPM QDateTimeEditam QDateTimeEditpm QDateTimeEditQDialQDial SliderHandleQDial SpeedoMeterQDial HotovoDoneQDialogCo je toto? What's This?QDialogZ&ruait&CancelQDialogButtonBox&ZavYt&CloseQDialogButtonBox&Ne&NoQDialogButtonBox&OKQDialogButtonBox&Ulo~it&SaveQDialogButtonBox&Ano&YesQDialogButtonBoxPYeruaitAbortQDialogButtonBox Pou~tApplyQDialogButtonBox ZruaitCancelQDialogButtonBox ZavYtCloseQDialogButtonBox$ZavYt bez ulo~enClose without SavingQDialogButtonBoxOdmtnoutDiscardQDialogButtonBoxNeukldat Don't SaveQDialogButtonBoxNpovdaHelpQDialogButtonBoxIgnorovatIgnoreQDialogButtonBoxN&e vaem N&o to AllQDialogButtonBoxOKQDialogButtonBoxOtevYtOpenQDialogButtonBoxResetovatResetQDialogButtonBoxObnovit vchozRestore DefaultsQDialogButtonBoxOpakovatRetryQDialogButtonBox Ulo~itSaveQDialogButtonBoxUlo~it vaeSave AllQDialogButtonBoxAno &vaem Yes to &AllQDialogButtonBoxDatum zmny Date Modified QDirModelDruhKind QDirModel NzevName QDirModelVelikostSize QDirModelTypType QDirModel ZavYtClose QDockWidgetMnLessQDoubleSpinBoxVceMoreQDoubleSpinBox&OK&OK QErrorMessage6&Znovu zobrazit tuto zprvu&Show this message again QErrorMessageLadic hlaen:Debug Message: QErrorMessageFatln chyba: Fatal Error: QErrorMessageVarovn:Warning: QErrorMessage8Nelze vytvoYit %1 pro vstupCannot create %1 for outputQFile4Nelze otevYt %1 pro vstupCannot open %1 for inputQFile0Nelze otevYt pro vstupCannot open for outputQFile>Nelze odstranit zdrojov souborCannot remove source fileQFile,Clov soubor existujeDestination file existsQFileh%1 AdresY nenalezen. OvYte sprvn nzev adresYe.K%1 Directory not found. Please verify the correct directory name was given. QFileDialogd%1 Soubor nenalezen. OvYte sprvn nzev souboru.A%1 File not found. Please verify the correct file name was given. QFileDialog&Vyberte&Choose QFileDialog&Smazat&Delete QFileDialog&Nov slo~ka &New Folder QFileDialog&OtevYt&Open QFileDialogP&Yejmenovat&Rename QFileDialog&Ulo~it&Save QFileDialog&Vaechny soubory (*) All Files (*) QFileDialog*Vaechny soubory (*.*)All Files (*.*) QFileDialogZptBack QFileDialog0Nelze odstranit adresY.Could not delete directory. QFileDialog*VytvoYit novou slo~kuCreate New Folder QFileDialogDetailn pohled Detail View QFileDialogAdresYe Directories QFileDialogAdresY: Directory: QFileDialogJednotkaDrive QFileDialog SouborFile QFileDialogJm&no souboru: File &name: QFileDialogTyp souboro:Files of type: QFileDialogNajt adresYFind Directory QFileDialog VpYedForward QFileDialogSeznam pohledo List View QFileDialogNhled:Look in: QFileDialogTento po ta  My Computer QFileDialogNov slo~ka New Folder QFileDialogOtevYtOpen QFileDialogPosledn msta Recent Places QFileDialogOdstranitRemove QFileDialogUlo~it jakoSave As QFileDialogZobrazitShow  QFileDialog,Ukzat &skryt souboryShow &hidden files QFileDialogNeznmUnknown QFileDialog%1 GBQFileSystemModel %1 kB%1 KBQFileSystemModel%1 MBQFileSystemModel%1 TBQFileSystemModel%1 byto%1 bytesQFileSystemModelPo ta ComputerQFileSystemModelDatum zmny Date ModifiedQFileSystemModel(Chybn nzev souboruInvalid filenameQFileSystemModelDruhKindQFileSystemModelTento po ta  My ComputerQFileSystemModel NzevNameQFileSystemModelVelikostSizeQFileSystemModelTypTypeQFileSystemModel njakAny QFontDatabaseArabskArabic QFontDatabaseArmnskArmenian QFontDatabaseBenglskBengali QFontDatabase Tu nBold QFontDatabase AzbukaCyrillic QFontDatabaseDevanagari Devanagari QFontDatabaseGruznskGeorgian QFontDatabase XeckGreek QFontDatabaseGujaratiGujarati QFontDatabaseGurmukhiGurmukhi QFontDatabaseHebrejskHebrew QFontDatabaseKurzvaItalic QFontDatabaseJaponatinaJapanese QFontDatabaseKannadaKannada QFontDatabaseKhmrskKhmer QFontDatabaseKorejatinaKorean QFontDatabase LaoskLao QFontDatabaseLatinskLatin QFontDatabaseMalajsk Malayalam QFontDatabaseMyanmarMyanmar QFontDatabase OghamOgham QFontDatabase OriyaOriya QFontDatabase RunovRunic QFontDatabaseSinhalaSinhala QFontDatabase SyrskSyriac QFontDatabaseTamilskTamil QFontDatabase TeluguTelugu QFontDatabase ThaanaThaana QFontDatabaseThajskThai QFontDatabaseTibetskTibetan QFontDatabaseVietnamatina Vietnamese QFontDatabase &Psmo&Font QFontDialogVeliko&st&Size QFontDialog&Podtr~en &Underline QFontDialog EfektyEffects QFontDialogSt&yl psma Font st&yle QFontDialog UkzkaSample QFontDialogVybrat psmo Select Font QFontDialogPYea&krtnut Stri&keout QFontDialog4Selhala zmna adresYe: %1Changing directory failed: %1QFtp&PYipojen k po ta iConnected to hostQFtp.PYipojen k po ta i %1Connected to host %1QFtpBSelhalo pYipojen k po ta i: %1Connecting to host failed: %1QFtp Spojen ukon enoConnection closedQFtpFSpojen pro datov pYenos odmtnuto&Connection refused for data connectionQFtpBOdmtnuto pYipojen k po ta i %1Connection refused to host %1QFtpX asov limit pYipojen k po ta i vyprael %1Connection timed out to host %1QFtp.PYipojen k %1 ukon enoConnection to %1 closedQFtp<Selhalo vytvYen adresYe: %1Creating directory failed: %1QFtp6Selhalo sta~en souboru: %1Downloading file failed: %1QFtp$Po ta %1 nalezen Host %1 foundQFtp0Po ta %1 nebyl nalezenHost %1 not foundQFtpPo ta nalezen Host foundQFtp8Selhalo vypsn adresYe: %1Listing directory failed: %1QFtp,PYihlaen selhalo: %1Login failed: %1QFtpNepYipojen Not connectedQFtp>Selhalo odstrann adresYe: %1Removing directory failed: %1QFtp<Selhalo odstrann souboru: %1Removing file failed: %1QFtpNeznm chyba Unknown errorQFtp6Selhalo nahrn souboru: %1Uploading file failed: %1QFtpNeznm chyba Unknown error QHostInfoPo ta nalezenHost not foundQHostInfoAgent$Neznm typ adresyUnknown address typeQHostInfoAgentNeznm chyba Unknown errorQHostInfoAgent$Vy~adovno ovYenAuthentication requiredQHttp&PYipojen k po ta iConnected to hostQHttp.PYipojen k po ta i %1Connected to host %1QHttp Spojen ukon enoConnection closedQHttp"Spojen odmtnutoConnection refusedQHttp"Spojen odmtnuto!Connection refused (or timed out)QHttp.PYipojen k %1 ukon enoConnection to %1 closedQHttp&Data jsou poakozenaData corruptedQHttp*HTTP po~adavek selhalHTTP request failedQHttp$Po ta %1 nalezen Host %1 foundQHttp(Po ta %1 nenalezenHost %1 not foundQHttpPo ta nalezen Host foundQHttp0Po ta vy~aduje ovYenHost requires authenticationQHttp Chybn HTTP tloInvalid HTTP chunked bodyQHttp:Chybn hlavi ka HTTP odpovdiInvalid HTTP response headerQHttpFNenastaven ~dn server k pYipojenNo server set to connect toQHttp0Vy~adovno ovYen proxyProxy authentication requiredQHttp,Proxy vy~aduje ovYenProxy requires authenticationQHttpDotaz zruaenRequest abortedQHttpHServer neo ekvan ukon il pYipojen%Server closed connection unexpectedlyQHttp0Neznm ovYovac metodaUnknown authentication methodQHttpNeznm chyba Unknown errorQHttp:Neznm specifikace protokoluUnknown protocol specifiedQHttp&Chybn dlka obsahuWrong content lengthQHttp$Vy~adovno ovYenAuthentication requiredQHttpSocketEngine.Proxy odmtla pYipojenProxy denied connectionQHttpSocketEngine\Vyprael  asov limit pYipojen k proxy serveru!Proxy server connection timed outQHttpSocketEngine,Proxy server nenalezenProxy server not foundQHttpSocketEngine.Nelze spustit transakciCould not start transaction QIBaseDriver8Chyba pYi otevrn databzeError opening database QIBaseDriver*NepodaYilo najt poleCould not find array QIBaseResult<NepodaYilo se zskat data poleCould not get array data QIBaseResult.Nelze spustit transakciCould not start transaction QIBaseResult&Nelze vytvoYit BLOBUnable to create BLOB QIBaseResult$Nelze otevYt BLOBUnable to open BLOB QIBaseResultNelze  st BLOBUnable to read BLOB QIBaseResult"Nelze zapsat BLOBUnable to write BLOB QIBaseResult8Nen voln msto na zaYzenNo space left on device QIODeviceTNeexistuje ~dn takov soubor ani adresYNo such file or directory QIODevice PYstup zamtnutPermission denied QIODevice>PYlia mnoho otevYench souboroToo many open files QIODeviceNeznm chyba Unknown error QIODevice.Mac OS X vstupn metodaMac OS X input method QInputContext,Windows vstupn metodaWindows input method QInputContextXIM QInputContext$XIM vstupn metodaXIM input method QInputContext Zadejte hodnotu:Enter a value: QInputDialog8Nelze na st knihovna %1: %2Cannot load library %1: %2QLibraryDNelze vyYeait symbol "%1" v %2: %3$Cannot resolve symbol "%1" in %2: %3QLibrary:Nelze ukon it knihovna %1: %2Cannot unload library %1: %2QLibraryDSoubor '%1' nen platn Qt plugin.'The file '%1' is not a valid Qt plugin.QLibrary|Plugin '%1' pou~v nekompatibln Qt knihovny. (%2.%3.%4) [%5]=The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]QLibraryNeznm chyba Unknown errorQLibrary&Koprovat&Copy QLineEditV&lo~it&Paste QLineEdit Zn&ovu&Redo QLineEdit &Zpt&Undo QLineEditVyjmou&tCu&t QLineEditOdstranitDelete QLineEditVybrat vae Select All QLineEdit%1: Chyba nzvu%1: Name error QLocalServer(%1: Neznm chyba %2%1: Unknown error %2 QLocalServer&%1: Chyba pYipojen%1: Connection error QLocalSocket*%1: Spojen odmtnuto%1: Connection refused QLocalSocket8%1: Datagram je pYlia velk%1: Datagram too large QLocalSocket %1: Chybn nzev%1: Invalid name QLocalSocket(%1: Spojen ukon eno%1: Remote closed QLocalSocketN%1: Vyprael  asov limit operace soketu%1: Socket operation timed out QLocalSocket"%1: Neznm chyba%1: Unknown error QLocalSocket(%1: Neznm chyba %2%1: Unknown error %2 QLocalSocket>NepodaYilo se spustit transakciUnable to begin transaction QMYSQLDriver,NepodaYilo se pYipojitUnable to connect QMYSQLDriver@NepodaYilo se otevYt databzi 'Unable to open database ' QMYSQLDriverBNepodaYilo se vykonat dala dotazUnable to execute next query QMYSQLResult6NepodaYilo se vykonat dotazUnable to execute query QMYSQLResult2NepodaYilo se na st dataUnable to fetch data QMYSQLResultFNepodaYilo se ulo~it dala vsledekUnable to store next result QMYSQLResult:NepodaYilo se ulo~it vsledekUnable to store result QMYSQLResult(Bez nzvu) (Untitled)QMdiArea %1 - [%2] QMdiSubWindow&ZavYt&Close QMdiSubWindowPYes&unout&Move QMdiSubWindowObno&vit&Restore QMdiSubWindowVeliko&st&Size QMdiSubWindow- [%1] QMdiSubWindow ZavYtClose QMdiSubWindowNpovdaHelp QMdiSubWindowMa&ximalizovat Ma&ximize QMdiSubWindowMaximalizovatMaximize QMdiSubWindowNabdkaMenu QMdiSubWindowMi&nimalizovat Mi&nimize QMdiSubWindowMinimalizovatMinimize QMdiSubWindowObnovitRestore QMdiSubWindowObnovit dolo Restore Down QMdiSubWindowZarolovatShade QMdiSubWindowZos&tat navrchu Stay on &Top QMdiSubWindowVyrolovatUnshade QMdiSubWindow ZavYtCloseQMenuSpustitExecuteQMenuOtevYtOpenQMenu <h3>O Qt</h3><p>Tento program pou~v Qt verze %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p>^

About Qt

This program uses Qt version %1.

Qt is a C++ toolkit for cross-platform application development.

Qt provides single-source portability across MS Windows, Mac OS X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.

Qt is available under three different licensing options designed to accommodate the needs of our various users.

Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.

Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.

Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.

Please see www.qtsoftware.com/products/licensing for an overview of Qt licensing.

Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).

Qt is a Nokia product. See www.qtsoftware.com/qt for more information.

 QMessageBoxO QtAbout Qt QMessageBoxNpovdaHelp QMessageBox Skrt detaily...Hide Details... QMessageBoxOK QMessageBox&Zobrazit detaily...Show Details... QMessageBoxOzna it IM Select IMQMultiInputContext"Spojen odmtnutoConnection refusedQNativeSocketEngine< asov limit pYipojen vypraelConnection timed outQNativeSocketEngineChyba st Network errorQNativeSocketEngine PYstup zamtnutPermission deniedQNativeSocketEngineNeznm chyba Unknown errorQNativeSocketEngine,Chyba pYi otevrn %1Error opening %1QNetworkAccessCacheBackendDNelze otevYt %1: Cesta je adresY#Cannot open %1: Path is a directoryQNetworkAccessFileBackend4Chyba pYi otevrn %1: %2Error opening %1: %2QNetworkAccessFileBackend>Nelze otevYt %1: je to adresYCannot open %1: is a directoryQNetworkAccessFtpBackend4Chyba pYi stahovn %1: %2Error while downloading %1: %2QNetworkAccessFtpBackend4Chyba pYi nahrvn %1: %2Error while uploading %1: %2QNetworkAccessFtpBackendXPYihlaen do %1 selhalo: vy~adovno ovYen0Logging in to %1 failed: authentication requiredQNetworkAccessFtpBackend.Nenalezena vhodn proxyNo suitable proxy foundQNetworkAccessFtpBackend.Nenalezena vhodn proxyNo suitable proxy foundQNetworkAccessHttpBackendRChyba stahovn %1 - server odpovdl: %2)Error downloading %1 - server replied: %2 QNetworkReply0Protokol "%1" je neznmProtocol "%1" is unknown QNetworkReplyOperace zruaenaOperation canceledQNetworkReplyImpl>NepodaYilo se zahjit transakciUnable to begin transaction QOCIDriver2NezdaYila se inicializaceUnable to initialize QOCIDriver0NepodaYilo se pYihlaenUnable to logon QOCIDriver,NepodaYilo se pYipojitUnable to connect QODBCDriverNepodaYilo se pYipojit - Ovlada nepodporuje vaechny potYebn funkceCUnable to connect - Driver doesn't support all needed functionality QODBCDriver ZavYtCloseQObjectKonzolaConsoleQObjectPokra ovatContinueQObjectCtrl+FQObjectCtrl+F10QObjectCtrl+GQObjectLadc vstup Debug OutputQObject SmazatDeleteQObjectF10QObjectF11QObjectF3QObjectF5QObjectF9QObjectNajt &dala Find &NextQObject Najt &pYedchozFind &PreviousQObjectIDQObject Neplatn URI: %1Invalid URI: %1QObject roveHLevelQObject Xdek:Line:QObjectUmstnLocationQObject NzevNameQObjectNovNewQObject<Operace nen podporovna na %1Operation not supported on %1QObject HledatSearchQObject Shift+F11QObjectShift+F3QObjectShift+F5QObjectHodnotaValueQObjectZobrazitViewQObject>NepodaYilo se zahjit transakciCould not begin transaction QPSQLDriver,NepodaYilo se pYipojitUnable to connect QPSQLDriver8NepodaYilo se vytvoYit dotazUnable to create query QPSQLResult Vaka:Height:QPageSetupWidgetNa aYku LandscapeQPageSetupWidget OkrajeMarginsQPageSetupWidgetOrientace OrientationQPageSetupWidget"Velikost strnky: Page size:QPageSetupWidget PaprPaperQPageSetupWidgetZdroj papru: Paper source:QPageSetupWidgetNa vakuPortraitQPageSetupWidget `Yka:Width:QPageSetupWidget(Plugin nebyl na ten.The plugin was not loaded. QPluginLoaderNeznm chyba Unknown error QPluginLoaderOK QPrintDialogTiskPrint QPrintDialog`Hodonota 'Od' nemo~e bt vyaa jak hodnota 'Do'.7The 'From' value cannot be greater than the 'To' value. QPrintDialog%1%QPrintPreviewDialog ZavYtCloseQPrintPreviewDialog"Exportovat do PDF Export to PDFQPrintPreviewDialog0Exportovat do PostScriptExport to PostScriptQPrintPreviewDialogPrvn strnka First pageQPrintPreviewDialogKrajina LandscapeQPrintPreviewDialog Posledn strnka Last pageQPrintPreviewDialogDala strnka Next pageQPrintPreviewDialogNastaven tisku Page SetupQPrintPreviewDialog"Nastaven strnky Page setupQPrintPreviewDialogPortrtPortraitQPrintPreviewDialog"PYedchoz strnka Previous pageQPrintPreviewDialogTiskPrintQPrintPreviewDialogNhled tisku Print PreviewQPrintPreviewDialogPYibl~itZoom inQPrintPreviewDialogOddlitZoom outQPrintPreviewDialogPokro ilAdvancedQPrintPropertiesWidgetStrnkaPageQPrintPropertiesWidgetBarevnColorQPrintSettingsOutput Barva Color ModeQPrintSettingsOutput KopieCopiesQPrintSettingsOutputPo et kopi:Copies:QPrintSettingsOutput ernoble GrayscaleQPrintSettingsOutputNenNoneQPrintSettingsOutputMo~nostiOptionsQPrintSettingsOutput"Nastaven vstupuOutput SettingsQPrintSettingsOutputStrnky od Pages fromQPrintSettingsOutputVaechny Print allQPrintSettingsOutputRozsah tisku Print rangeQPrintSettingsOutput Vbr SelectionQPrintSettingsOutputdotoQPrintSettingsOutput&Nzev:&Name: QPrintWidget... QPrintWidgetUmstn: Location: QPrintWidget"Vstupn &soubor: Output &file: QPrintWidget&Vlastnosti P&roperties QPrintWidget NhledPreview QPrintWidgetTiskrnaPrinter QPrintWidgetTyp:Type: QPrintWidget,Nen definovn programNo program definedQProcess$Proces se zhroutilProcess crashedQProcess0Proces selhal pYi startuProcess failed to startQProcessHVyprael  asov limit operace procesuProcess operation timed outQProcess ZruaitCancelQProgressDialogOtevYtOpen QPushButtonZaakrtnoutCheck QRadioButton4apatn syntaxe znaku tYdybad char class syntaxQRegExpapatn syntaxebad lookahead syntaxQRegExp0apatn syntaxe opakovnbad repetition syntaxQRegExp6pou~vna nepovolen funkcedisabled feature usedQRegExp0chybn osmi kov hodnotainvalid octal valueQRegExpintern limitmet internal limitQRegExp2chybjc lev ohrani enmissing left delimQRegExp*nedoalo k ~dn chybno error occurredQRegExp&neo ekvan skon ilunexpected endQRegExp8Chyba pYi otevrn databzeError to open databaseQSQLite2Driver>NepodaYilo se zahjit transakciUnable to begin transactionQSQLite2Driver:NepodaYilo se na st vsledkyUnable to fetch resultsQSQLite2Result6Chyba pYi zavrn databzeError closing database QSQLiteDriver8Chyba pYi otevrn databzeError opening database QSQLiteDriver>NepodaYilo se zahjit transakciUnable to begin transaction QSQLiteDriverNen dotazNo query QSQLiteResult4NepodaYilo se na st YdekUnable to fetch row QSQLiteResult<img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Hledat zalomenJ Search wrappedQScriptDebuggerCodeFinderWidget.Rozliaovat mal a VELKCase SensitiveQScriptDebuggerCodeFinderWidget DalaNextQScriptDebuggerCodeFinderWidgetPYedchozPreviousQScriptDebuggerCodeFinderWidgetCel slova Whole wordsQScriptDebuggerCodeFinderWidget PozicePosition QScrollBar*%1: neplatn velikost%1: invalid size QSharedMemory(%1: pYstup zamtnut%1: permission denied QSharedMemory(%1: neznm chyba %2%1: unknown error %2 QSharedMemory+ QShortcutAlt QShortcut Caps Lock QShortcutCtrl QShortcut DeleteDel QShortcutDoloDown QShortcutEnd QShortcutEnter QShortcutEsc QShortcutF%1 QShortcutHome QShortcut InsertIns QShortcutSpustit (0) Launch (0) QShortcutSpustit (1) Launch (1) QShortcutSpustit (2) Launch (2) QShortcutSpustit (3) Launch (3) QShortcutSpustit (4) Launch (4) QShortcutSpustit (5) Launch (5) QShortcutSpustit (6) Launch (6) QShortcutSpustit (7) Launch (7) QShortcutSpustit (8) Launch (8) QShortcutSpustit (9) Launch (9) QShortcutSpustit (A) Launch (A) QShortcutSpustit (B) Launch (B) QShortcutSpustit (C) Launch (C) QShortcutSpustit (D) Launch (D) QShortcutSpustit (E) Launch (E) QShortcutSpustit (F) Launch (F) QShortcut VlevoLeft QShortcutNeNo QShortcutNum Lock QShortcut Page Down QShortcutPage Up QShortcutPgDown QShortcutPgUp QShortcut Print Screen QShortcut VpravoRight QShortcutShift QShortcutMezernkSpace QShortcutSysReq QShortcut NahoruUp QShortcutAnoYes QShortcut PozicePositionQSliderMnLessQSpinBoxVceMoreQSpinBox ZruaitCancelQSqlZruait pravy?Cancel your edits?QSqlPotvrditConfirmQSql SmazatDeleteQSqlSmazat zznam?Delete this record?QSql Vlo~itInsertQSqlNeNoQSqlUlo~it pravy? Save edits?QSqlAktualizovatUpdateQSqlAnoYesQSql&Chyba pYi  ten: %1Error while reading: %1 QSslSocket0Nelze zapisovat data: %1Unable to write data: %1 QSslSocket(%1: pYstup zamtnut%1: permission deniedQSystemSemaphore(%1: neznm chyba %2%1: unknown error %2QSystemSemaphore>NepodaYilo se otevYt pYipojenUnable to open connection QTDSDriver:NepodaYilo se pou~t databziUnable to use database QTDSDriverDOperace na soketu nen podporovna$Operation on socket is not supported QTcpServer&Koprovat&Copy QTextControl&Vlo~it&Paste QTextControl Zn&ovu&Redo QTextControl &Zpt&Undo QTextControl0Koprovat &adresu odkazuCopy &Link Location QTextControlVyjmou&tCu&t QTextControlOdstranitDelete QTextControlOzna it vae Select All QTextControlOtevYtOpen QToolButtonStisknoutPress QToolButton>Tato platforma nepodporuje IPv6#This platform does not support IPv6 QUdpSocket ZnovuRedo QUndoGroupZptUndo QUndoGroup<przdn> QUndoModel ZnovuRedo QUndoStackZptUndo QUndoStack$URL nelze zobrazitCannot show URL QWebFrame.Nelze zobrazit mimetypeCannot show mimetype QWebFrame"Soubor neexistujeFile does not exist QWebFrame(Po~adavek zablokovnRequest blocked QWebFrame Po~adavek zruaenRequest cancelled QWebFrame"%1 (%2x%3 pixelo)%1 (%2x%3 pixels)QWebPage%n souboro %n file(s)QWebPage$PYidat do slovnkuAdd To DictionaryQWebPage*Chybn HTTP po~adavekBad HTTP requestQWebPage Tu nBoldQWebPage$Kontrola pravopisuCheck SpellingQWebPageVyberte soubor Choose FileQWebPage8Vymazat posledn vyhledvnClear recent searchesQWebPageKoprovatCopyQWebPage"Koprovat obrzek Copy ImageQWebPageKoprovat odkaz Copy LinkQWebPageVyjmoutCutQWebPageVchozDefaultQWebPageSmr DirectionQWebPage PsmaFontsQWebPageZptGo BackQWebPage VpYed Go ForwardQWebPage4Skrt pravopis a gramatikuHide Spelling and GrammarQWebPageIgnorovatIgnoreQWebPageIgnorovat Ignore Grammar context menu itemIgnoreQWebPage"Vlo~it nov YdekInsert a new lineQWebPage(Vlo~it nov odstavecInsert a new paragraphQWebPageKurzvaItalicQWebPage&Nen ozna en souborNo file selectedQWebPage6Nejsou posledn vyhledvnNo recent searchesQWebPageOtevYt rm Open FrameQWebPageOtevYt obrzek Open ImageQWebPageOtevYt odkaz Open LinkQWebPage(OtevYt v novm oknOpen in New WindowQWebPage ObrysOutlineQWebPage Vlo~itPasteQWebPage(Posledn vyhledvnRecent searchesQWebPageZnovuna stReloadQWebPageResetovatResetQWebPageUlo~it obrzek Save ImageQWebPageUlo~it odkaz... Save Link...QWebPageVybrat vae Select allQWebPage.Vybrat nsledujc znakSelect to the next characterQWebPage0Vybrat nsledujc YdekSelect to the next lineQWebPage0Vybrat nsledujc slovoSelect to the next wordQWebPage*Vybrat pYedchoz znak Select to the previous characterQWebPage,Vybrat pYedchoz YdekSelect to the previous lineQWebPage,Vybrat pYedchoz slovoSelect to the previous wordQWebPage:Zobrazit pravopis a gramatikuShow Spelling and GrammarQWebPageStopQWebPageOdeslatSubmitQWebPageOdeslatQSubmit (input element) alt text for elements with no alt, title, or valueSubmitQWebPageSmr textuText DirectionQWebPagePodtr~en UnderlineQWebPageNeznmUnknownQWebPageCo je toto? What's This?QWhatsThisAction*QWidgetDo&kon it&FinishQWizardNpo&vda&HelpQWizard Dala&NextQWizard&Dala >&Next >QWizard< &Zpt< &BackQWizard ZruaitCancelQWizardPokra ovatContinueQWizard HotovoDoneQWizardZptGo BackQWizardNpovdaHelpQWizard %1 - [%2] QWorkspace&ZavYt&Close QWorkspacePYes&unout&Move QWorkspaceObno&vit&Restore QWorkspaceVeliko&st&Size QWorkspace&Vyrolovat&Unshade QWorkspace ZavYtClose QWorkspaceMa&ximalizovat Ma&ximize QWorkspaceMi&nimalizovat Mi&nimize QWorkspaceMinimalizovatMinimize QWorkspaceObnovit dolo Restore Down QWorkspaceZ&arolovatSh&ade QWorkspaceZos&tat navrchu Stay on &Top QWorkspacepYi  ten XML hlavi ky je o ekvna deklarace kdovn nebo standarduYencoding declaration or standalone declaration expected while reading the XML declarationQXmlLchyba v textu deklarace extern entity3error in the text declaration of an external entityQXmlJpYi parsovn komentYe doalo k chyb$error occurred while parsing commentQXmlDpYi parsovn obsahu doalo k chyb$error occurred while parsing contentQXmlfpYi parsovn definice typu dokumentu doalo k chyb5error occurred while parsing document type definitionQXmlBpYi parsovn prvku doalo k chyb$error occurred while parsing elementQXmlDpYi parsovn odkazu doalo k chyb&error occurred while parsing referenceQXml8chyba zapY inn u~ivatelemerror triggered by consumerQXmlreference na extern analyzovan obecn entity nejsou v DTD povoleny;external parsed general entity reference not allowed in DTDQXmlreference na extern analyzovan obecn entity nejsou v hodnot atributu povolenyGexternal parsed general entity reference not allowed in attribute valueQXmlRintern obecn entita nen v DTD povolena4internal general entity reference not allowed in DTDQXml<chybn jmno instrukce procesu'invalid name for processing instructionQXml(je o ekvno psmenoletter is expectedQXmlLvce ne~ jedna definice typu dokumentu&more than one document type definitionQXmlnedoalo k chybno error occurredQXml"rekurzivn entityrecursive entitiesQXmlnpYi  ten XML hlavi ky je o ekvna deklarace standarduAstandalone declaration expected while reading the XML declarationQXmlnesprvn tag tag mismatchQXml neo ekvan znakunexpected characterQXml2neo ekvan konec souboruunexpected end of fileQXmlfodkaz na neparsovanou entitu je ve apatnm kontextu*unparsed entity reference in wrong contextQXmlRpYi  ten XML hlavi ky je o ekvna verze2version expected while reading the XML declarationQXmlDapatn hodnota deklarace standardu&wrong value for standalone declarationQXml(, ale byl obdr~eno ' , but got ' QXmlStream8Nen podporovno kdovn %1Encoding %1 is unsupported QXmlStreamJe o ekvno Expected  QXmlStream"Chybn nzev XML.Invalid XML name. QXmlStreamBNeplatn atribut v deklaraci XML.%Invalid attribute in XML declaration. QXmlStream$Neplatn dokument.Invalid document. QXmlStreamNe ekan ' Unexpected ' QXmlStream<Den %1 je chybn pro msc %2.Day %1 is invalid for month %2. QtXmlPatterns4Vyprael  asov limit st.Network timeout. QtXmlPatterns.Chyba pYi parsovn: %1Parse error: %1 QtXmlPatterns4 as %1:%2:%3.%4 je chybn.Time %1:%2:%3.%4 is invalid. QtXmlPatterns2Neznm XSL-T atribut %1.Unknown XSL-T attribute %1. QtXmlPatternsprzdnempty QtXmlPatternspYv jedna exactly one QtXmlPatternsjedna nebo vce one or more QtXmlPatternsnula nebo vce zero or more QtXmlPatternsnula nebo jedna zero or one QtXmlPatternsZtlumenoMuted VolumeSliderHlasitost: %1% Volume: %1% VolumeSliderqutim-0.2.0/GPL0000644000175000017500000004313111236355476014677 0ustar euroelessareuroelessar GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qutim-0.2.0/solutions/0000755000175000017500000000000011273100754016353 5ustar euroelessareuroelessarqutim-0.2.0/solutions/qtcustomwidget.h0000644000175000017500000000245211236355476021626 0ustar euroelessareuroelessar/***************************************************************************** QtCustomWidget Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 QTCUSTOMWIDGET_H #define QTCUSTOMWIDGET_H #include QT_BEGIN_NAMESPACE class QEvent; struct QtCustomWidgetPrivate; class QtCustomWidget : public QObject { Q_OBJECT public: QtCustomWidget(QWidget *widget); virtual ~QtCustomWidget(); void start(const QString &config_path); void stop(); protected: virtual bool eventFilter(QObject *obj, QEvent *event); private: QtCustomWidgetPrivate *p; }; QT_END_NAMESPACE #endif // QTCUSTOMWIDGET_H qutim-0.2.0/solutions/qtcustomwidget.cpp0000644000175000017500000004053011236355476022160 0ustar euroelessareuroelessar/***************************************************************************** QtCustomWidget Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "qtcustomwidget_p.h" #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE struct QtCustomButtonPrivate { QtCustomButton::State state; QtCustomButtonGeometry geometry; QPixmap hover; QPixmap pressed; QPixmap normal; bool is_pressed; bool send_on_press; QtCustomButton::Action action; }; QtCustomButton::QtCustomButton(const QtCustomButtonGeometry &geometry, Action action, QWidget *parent) : QWidget(parent), p(new QtCustomButtonPrivate) { setMouseTracking(true); p->geometry = geometry; p->state = Normal; p->is_pressed = false; p->send_on_press = true; p->action = action; } const QtCustomButtonGeometry &QtCustomButton::getGeometry() { return p->geometry; } void QtCustomButton::setPixmaps(const QPixmap &normal, const QPixmap &hover) { p->normal = p->pressed = normal; p->hover = hover; } QtCustomButton::~QtCustomButton() { delete p; } void QtCustomButton::paintEvent(QPaintEvent *event) { QPainter painter(this); switch(p->state) { case Hover: painter.drawPixmap(event->rect(), p->hover, event->rect()); break; case Pressed: painter.drawPixmap(event->rect(), p->pressed, event->rect()); break; case Normal: painter.drawPixmap(event->rect(), p->normal, event->rect()); break; } } void QtCustomButton::leaveEvent(QEvent *event) { Q_UNUSED(event); setState(Normal); } void QtCustomButton::mouseMoveEvent(QMouseEvent *event) { if(rect().contains(event->pos())) setState(p->is_pressed ? Pressed : Hover); else setState(Normal); } void QtCustomButton::mousePressEvent(QMouseEvent *event) { if(event->button() != Qt::LeftButton) return; setState(Pressed); if(p->send_on_press) { switch(p->action) { case Minimize: parentWidget()->showMinimized(); break; case Close: parentWidget()->close(); break; } } else p->is_pressed = true; } void QtCustomButton::mouseReleaseEvent(QMouseEvent *event) { if(event->button() != Qt::LeftButton) return; if(p->is_pressed) { if(p->state == Pressed) { switch(p->action) { case Minimize: parentWidget()->showMinimized(); break; case Close: parentWidget()->close(); break; } } } p->is_pressed = false; if(rect().contains(event->pos())) setState(Hover); else setState(Normal); } void QtCustomButton::setState(State state) { if(p->state == state) return; p->state = state; update(); } class QtCustomWidgetPrivate { public: QtCustomWidgetPrivate(); QPointer widget; struct Margin { Margin() : l(0), r(0), t(0), b(0) {} int l; int r; int t; int b; } margin; enum PosType { PosNone = 0x00, PosLeft = 0x01, PosTop = 0x02, PosRight = 0x04, PosBottom = 0x08, PosCenter = 0x10, PosTopLeft = PosTop | PosLeft, PosTopRight = PosTop | PosRight, PosBottomLeft = PosBottom | PosLeft, PosBottomRight = PosBottom | PosRight }; enum MoveAction { ActionNone, ActionResize, ActionMove }; inline PosType getCursor(const QSize &size, const QPoint &pos); void paintEvent(QPaintEvent *event); void leaveEvent(QEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); void resizeEvent(QResizeEvent *event); void startMoveAction(const QRect &geom, const QPoint &pos, PosType type); void moveEvent(const QPoint &pos); void stopMoveAction(); inline QRect getGeometry(const QSize &size, const QtCustomButtonGeometry &geom); inline int getPosition(int margin, int right, QtCustomButtonGeometry::Type type); int left_resize_min; int left_resize_max; int top_resize_min; int top_resize_max; int right_resize_min; int right_resize_max; int bottom_resize_min; int bottom_resize_max; int margin_right; int margin_top; int margin_bottom; int margin_left; struct Borders { QPixmap left_top; QPixmap top; QPixmap right_top; QPixmap left; QPixmap right; QPixmap left_bottom; QPixmap bottom; QPixmap right_bottom; }; Borders borders; QColor background_color; MoveAction move_action; QRect geometry; QPoint point; PosType position_type; QtCustomButton *button_quit; QtCustomButton *button_min; Qt::WindowFlags flags; }; QtCustomWidgetPrivate::QtCustomWidgetPrivate() { left_resize_min = 0; left_resize_max = 3; top_resize_min = 0; top_resize_max = 3; right_resize_min = 0; right_resize_max = 3; bottom_resize_min = 0; bottom_resize_max = 3; button_min = 0; button_quit = 0; margin_right = 0; margin_top = 0; margin_bottom = 0; margin_left = 0; move_action = ActionNone; } QtCustomWidgetPrivate::PosType QtCustomWidgetPrivate::getCursor(const QSize &size, const QPoint &pos) { int cur = 0; cur |= pos.x() <= left_resize_max && pos.x() >= left_resize_min ? PosLeft : 0; cur |= pos.y() <= top_resize_max && pos.y() >= top_resize_min ? PosTop : 0; cur |= size.width()-pos.x() <= right_resize_max && size.width()-pos.x() >= right_resize_min ? PosRight : 0; cur |= size.height()-pos.y() <= bottom_resize_max && size.height()-pos.y() >= bottom_resize_min ? PosBottom : 0; return static_cast(cur); } void QtCustomWidgetPrivate::paintEvent(QPaintEvent *event) { QPainter painter(widget); int top = borders.left_top.height(); int bottom = borders.right_bottom.height(); int left_top_width = borders.left_top.width(); int right_top_width = borders.right_top.width(); int left_bottom_width = borders.left_bottom.width(); int right_bottom_width = borders.right_bottom.width(); int left_width = borders.left.width(); int right_width = borders.right.width(); painter.fillRect(left_width , top, widget->width() - left_width - right_width, widget->height() - top - bottom, background_color); painter.drawPixmap(0, 0, left_top_width,borders.left_top.height(), borders.left_top); painter.drawPixmap(left_top_width, 0, widget->width() - left_top_width - right_top_width, top, borders.top); painter.drawPixmap(widget->width() - right_top_width, 0, borders.right_top); painter.drawPixmap(0, top, left_width, widget->height() - top - bottom, borders.left); painter.drawPixmap(0, widget->height() - bottom, borders.left_bottom); painter.drawPixmap(left_bottom_width, widget->height() - bottom, widget->width() - left_bottom_width - right_bottom_width, bottom, borders.bottom); painter.drawPixmap(widget->width() - right_bottom_width, widget->height() - bottom, borders.right_bottom); painter.drawPixmap(widget->width() - right_width, top, right_width, widget->height() - top - bottom, borders.right); } void QtCustomWidgetPrivate::leaveEvent(QEvent *event) { widget->unsetCursor(); } void QtCustomWidgetPrivate::mouseMoveEvent(QMouseEvent *event) { PosType cursor; if(!widget->geometry().contains(event->globalPos())) cursor = PosNone; else cursor = getCursor(widget->size(), event->pos()); switch(cursor) { case PosTopLeft: case PosBottomRight: widget->setCursor(Qt::SizeFDiagCursor); break; case PosTopRight: case PosBottomLeft: widget->setCursor(Qt::SizeBDiagCursor); break; case PosLeft: case PosRight: widget->setCursor(Qt::SizeHorCursor); break; case PosTop: case PosBottom: widget->setCursor(Qt::SizeVerCursor); break; default: widget->unsetCursor(); } moveEvent(event->globalPos()); } void QtCustomWidgetPrivate::mousePressEvent(QMouseEvent *event) { if(event->button()!=Qt::LeftButton) return; startMoveAction(widget->geometry(), event->globalPos(), getCursor(widget->size(), event->pos())); } void QtCustomWidgetPrivate::mouseReleaseEvent(QMouseEvent *event) { if(event->button()!=Qt::LeftButton) return; stopMoveAction(); } void QtCustomWidgetPrivate::mouseDoubleClickEvent(QMouseEvent *event) { // TODO: May be maximize at double click Q_UNUSED(event); } void QtCustomWidgetPrivate::resizeEvent(QResizeEvent *event) { Q_UNUSED(event); button_quit->setGeometry(getGeometry(event->size(), button_quit->getGeometry())); button_min->setGeometry(getGeometry(event->size(), button_min->getGeometry())); } void QtCustomWidgetPrivate::startMoveAction(const QRect &geom, const QPoint &pos, QtCustomWidgetPrivate::PosType type) { if(move_action != ActionNone) return; geometry = geom; point = pos; position_type = type; if(type == PosNone) move_action = ActionMove; else move_action = ActionResize; } void QtCustomWidgetPrivate::moveEvent(const QPoint &pos) { if(move_action == ActionMove) { widget->move(geometry.topLeft()-point+pos); } else if(move_action == ActionResize) { QRect geom = geometry; if(position_type & PosLeft) geom.setLeft(geom.left()-point.x()+pos.x()); else if(position_type & PosRight) geom.setRight(geom.right()-point.x()+pos.x()); if(position_type & PosTop) geom.setTop(geom.top()-point.y()+pos.y()); else if(position_type & PosBottom) geom.setBottom(geom.bottom()-point.y()+pos.y()); widget->setGeometry(geom); } } void QtCustomWidgetPrivate::stopMoveAction() { move_action = ActionNone; } int QtCustomWidgetPrivate::getPosition(int margin, int right, QtCustomButtonGeometry::Type type) { switch(type) { case QtCustomButtonGeometry::LeftToCenter: return margin; case QtCustomButtonGeometry::Center: return right/2+margin; break; case QtCustomButtonGeometry::RightToCenter: return right-margin; break; }; return margin; } QRect QtCustomWidgetPrivate::getGeometry(const QSize &size, const QtCustomButtonGeometry &geom) { QPoint lt(getPosition(geom.left_m, size.width(), geom.left_t), getPosition(geom.top_m, size.height(), geom.top_t)); QPoint rb(getPosition(geom.right_m, size.width(), geom.right_t) - 1, getPosition(geom.bottom_m, size.height(), geom.bottom_t) - 1); return QRect(lt, rb); } QtCustomWidget::QtCustomWidget(QWidget *parent) : QObject(parent), p(new QtCustomWidgetPrivate) { Q_ASSERT_X(parent, "QtCustomWidget(QWidget *parent)", "Parent must be valid"); p->widget = QPointer(parent); p->background_color = parent->palette().color(QPalette::Window); p->widget->setMouseTracking(true); p->flags = parent->windowFlags(); } QtCustomWidget::~QtCustomWidget() { if(p->widget) stop(); delete p; } void QtCustomWidget::start(const QString &config_path) { stop(); QDir dir = config_path; if(!dir.cd("cl_border")) return; p->flags = p->widget->windowFlags(); #if (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) p->widget->setAttribute(Qt::WA_TranslucentBackground, true); p->widget->setMask(QApplication::desktop()->screenGeometry()); #endif p->widget->getContentsMargins(&p->margin_left, &p->margin_top, &p->margin_right, &p->margin_bottom); p->borders.left = QPixmap(dir.filePath("left")); p->borders.top = QPixmap(dir.filePath("up")); p->borders.right = QPixmap(dir.filePath("right")); p->borders.bottom = QPixmap(dir.filePath("down")); p->borders.left_top = QPixmap(dir.filePath("up_left")); p->borders.left_bottom = QPixmap(dir.filePath("down_left")); p->borders.right_top = QPixmap(dir.filePath("up_right")); p->borders.right_bottom = QPixmap(dir.filePath("down_right")); p->widget->setContentsMargins(p->borders.left.width(), p->borders.left_top.height(), p->borders.right.width(), p->borders.right_bottom.height()); p->widget->setWindowFlags(Qt::FramelessWindowHint); QSettings settings(dir.filePath("config.ini"), QSettings::defaultFormat()); settings.beginGroup("buttons"); // bool up_layout = settings.value("up", true).toBool(); int margin_down = settings.value("mdown", -1).toInt(); int margin_up = settings.value("mup", -1).toInt(); int margin_left = settings.value("mleft", -1).toInt(); int margin_right = settings.value("mright", -1).toInt(); int margin_width; int margin_height; QtCustomButtonGeometry geometry; if(margin_left < 0) { margin_width = margin_right; geometry.left_t = QtCustomButtonGeometry::RightToCenter; geometry.right_t = QtCustomButtonGeometry::RightToCenter; } else { margin_width = margin_left; geometry.left_t = QtCustomButtonGeometry::LeftToCenter; geometry.right_t = QtCustomButtonGeometry::LeftToCenter; } if(margin_down < 0) { margin_height = margin_up; geometry.bottom_t = QtCustomButtonGeometry::LeftToCenter; geometry.top_t = QtCustomButtonGeometry::LeftToCenter; } else { margin_height = margin_down; geometry.bottom_t = QtCustomButtonGeometry::RightToCenter; geometry.top_t = QtCustomButtonGeometry::RightToCenter; } QPixmap quit_normal(dir.filePath("close")); QPixmap quit_hover(dir.filePath("close_hover")); geometry.left_m = margin_width + quit_normal.width(); geometry.right_m = margin_width; geometry.bottom_m = margin_height + quit_normal.height(); geometry.top_m = margin_height; if(margin_left >= 0) qSwap(geometry.left_m, geometry.right_m); if(margin_down >= 0) qSwap(geometry.bottom_t, geometry.top_t); p->button_quit = new QtCustomButton(geometry, QtCustomButton::Close, p->widget); p->button_quit->setPixmaps(quit_normal, quit_hover); p->button_quit->setGeometry(p->getGeometry(p->widget->size(), p->button_quit->getGeometry())); QPixmap min_normal(dir.filePath("minimise")); QPixmap min_hover(dir.filePath("minimise_hover")); if(margin_left >= 0) qSwap(geometry.left_m, geometry.right_m); if(margin_down >= 0) qSwap(geometry.bottom_t, geometry.top_t); geometry.left_m += min_normal.width() + 1; geometry.right_m += quit_normal.width() + 1; if(margin_left >= 0) qSwap(geometry.left_m, geometry.right_m); if(margin_down >= 0) qSwap(geometry.bottom_t, geometry.top_t); p->button_min = new QtCustomButton(geometry, QtCustomButton::Minimize, p->widget); p->button_min->setPixmaps(min_normal, min_hover); p->button_min->setGeometry(p->getGeometry(p->widget->size(), p->button_min->getGeometry())); QList children = p->widget->findChildren(); foreach(QWidget *widget, children) widget->installEventFilter(this); settings.endGroup(); settings.beginGroup("window"); p->background_color.setNamedColor(settings.value("backcolor", p->background_color).toString()); p->widget->installEventFilter(this); } void QtCustomWidget::stop() { if(!p->button_min) return; #if (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) p->widget->setAttribute(Qt::WA_TranslucentBackground, false); p->widget->setAttribute(Qt::WA_NoSystemBackground, false); p->widget->clearMask(); #endif p->widget->removeEventFilter(this); p->borders = QtCustomWidgetPrivate::Borders(); p->widget->setContentsMargins(p->margin_left, p->margin_top, p->margin_right, p->margin_bottom); delete p->button_min; delete p->button_quit; p->button_min = 0; p->button_quit = 0; QList children = p->widget->findChildren(); foreach(QWidget *widget, children) widget->removeEventFilter(this); p->widget->setWindowFlags(p->flags); } bool QtCustomWidget::eventFilter(QObject *obj, QEvent *event) { if(obj != p->widget) { if(event->type() == QEvent::Enter) p->widget->unsetCursor(); return QObject::eventFilter(obj, event); } switch(event->type()) { case QEvent::Paint: p->paintEvent(static_cast(event)); return true; case QEvent::Leave: p->leaveEvent(event); return true; case QEvent::MouseMove: p->mouseMoveEvent(static_cast(event)); return true; case QEvent::MouseButtonPress: p->mousePressEvent(static_cast(event)); return true; case QEvent::MouseButtonRelease: p->mouseReleaseEvent(static_cast(event)); return true; // case QEvent::MouseButtonDblClick: // p->mouseDoubleClickEvent(static_cast(event)); // return true; case QEvent::Resize: p->resizeEvent(static_cast(event)); break; default: break; } return QObject::eventFilter(obj, event); } QT_END_NAMESPACE qutim-0.2.0/solutions/qtcustomwidget_p.h0000644000175000017500000000411611236355476022144 0ustar euroelessareuroelessar/***************************************************************************** QtCustomWidget Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 QTCUSTOMWIDGET_P_H #define QTCUSTOMWIDGET_P_H #include "qtcustomwidget.h" QT_BEGIN_NAMESPACE class QtCustomButtonPrivate; class QPixmap; struct QtCustomButtonGeometry { enum Type { LeftToCenter, Center, RightToCenter }; QtCustomButtonGeometry() : left_m(0), left_t(LeftToCenter), top_m(0), top_t(LeftToCenter), right_m(0), right_t(LeftToCenter), bottom_m(0), bottom_t(LeftToCenter) {} int left_m; Type left_t; int top_m; Type top_t; int right_m; Type right_t; int bottom_m; Type bottom_t; }; class QtCustomButton : public QWidget { Q_OBJECT public: enum State { Hover, Pressed, Normal }; enum Action { Minimize, Close }; QtCustomButton(const QtCustomButtonGeometry &geometry, Action action, QWidget *parent); const QtCustomButtonGeometry &getGeometry(); void setPixmaps(const QPixmap &normal, const QPixmap &hover); virtual ~QtCustomButton(); protected: virtual void paintEvent(QPaintEvent *event); virtual void leaveEvent(QEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event); void setState(State state); private: QtCustomButtonPrivate *p; }; QT_END_NAMESPACE #endif // QTCUSTOMWIDGET_P_H qutim-0.2.0/icons/0000755000175000017500000000000011273100754015427 5ustar euroelessareuroelessarqutim-0.2.0/icons/protocol/0000755000175000017500000000000011273100754017270 5ustar euroelessareuroelessarqutim-0.2.0/icons/protocol/aim.png0000644000175000017500000000127111236355476020561 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDC pHYs B(xtIME #-&9IDAT8ˍKHTa{uǙd^bA"q ZT&p3hѺMZ%*qc+E40viUTmqFGc"&;#3ъ:;@))Z#)pOz!ьf+$1s+}u3z7@RyсIi0N~$VDgF(& q YCH*t뱺b^4H-pE@-s| ]Z3:k RNM 0*#$ Tո`cAhjDH-Exj 3â 10 l$`yDeK2{*ECH 4ೞ`%B!1v$.' ӄ-%Xߩ.xbvʔ@H49vr2ݖ&1 ۶N7 X` ^KcL*0EޖKm.IKپ^÷iQוݧ.FxƧJF>Vsג^8VNG[ah @,J}hO!ogiõ iR ͊:IENDB`qutim-0.2.0/icons/protocol/mrim.png0000644000175000017500000000130611236355476020756 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<CIDAT8mkUϽOi)J!Ђ+Qqpn\4;&n\辋v!"V t!U#B)DNm4n8 j1VN"dtj#=s,3`jwWml0 ݟ-MN{E*%r`  ({0pXou+_턤i|ھqg.eسU5HqP,y._/>RQnlfDUP >X +Z;ɥ_PchCxb!BW{a[^>آ`'f ~yd~Tz~Y@(:[嫭*pc[Hq2g"~X. i/ANp{i%Xj4(b՞Ty mƘxx<y@IENDB`qutim-0.2.0/icons/protocol/msn.png0000644000175000017500000000144011236355476020606 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8RKTQ=޼7QdrS1o7mHqeC6.I޵qwQEd[w> 1lۦ0(Pľdc=V8ض0 #8xiQTf V׏htvz<!C r0hC1$!,n;Y=X+<$F:~,d 7?_OR:~~&N#jvm߻YU\V"2ys~,:[F.9\ٌ H*j5{<p2oDՇ&0UF䤐$Ñ-jn< 80*.}kk Mlx9-\z_,'XZIENDB`qutim-0.2.0/icons/protocol/vkontakte.png0000644000175000017500000000110611236355476022016 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8kAKZiBa / =GxU/yR RA4E[n̶[% }aߛ`|M);ϐ@ŝY0ɉT dqaai9Te`p (C]_U5J}j1F)CVAb WNrvO7XZFMÉ"w c #397CBF", ", c #4E6883", "< c #4A6988", "1 c #546A80", "2 c #61778D", "3 c #4776A5", "4 c #4877A6", "5 c #4477AB", "6 c #4278AD", "7 c #497BAC", "8 c #457CB4", "9 c #2774C1", "0 c #2A76C3", "q c #2D79C6", "w c #2E7CCA", "e c #317AC4", "r c #317ECC", "t c #7A8794", "y c #5F86AE", "u c #4481BF", "i c #4B84BC", "p c #5183B5", "a c #5E89B6", "s c #5889BA", "d c #6785A3", "f c #6D8AA7", "g c #6586A8", "h c #7E8EA0", "j c #6189B2", "k c #6B92BB", "l c #7895B3", "z c #7B9BBB", "x c #3E81C6", "c c #3280CF", "v c #3D84CB", "b c #3483D3", "n c #3A87D4", "m c #3C88D5", "M c #3787D8", "N c #3B8BDB", "B c #3D8EE0", "V c #3F91E3", "C c #4182C4", "Z c #4B86C2", "A c #4287CC", "S c #4589CE", "D c #4A8ACB", "F c #528BC5", "G c #518FCD", "H c #5E90C3", "J c #5591CD", "K c #5C93CB", "L c #448CD4", "P c #4B8DD0", "I c #4C93DB", "U c #5A98D7", "Y c #6092C4", "T c #6C98C6", "R c #6296CA", "E c #6599CD", "W c #6B9CCD", "Q c #759CC3", "! c #7A9FC5", "~ c #649CD4", "^ c #72A0CE", "/ c #73A2D2", "( c #7CA7D3", ") c #7DA9D5", "_ c #73A5D8", "` c #4293E5", "' c #4995E1", "] c #4296EA", "[ c #4498EB", "{ c #66A4E1", "} c #72A9E1", "| c #7EAFE0", " . c #8894A0", ".. c #909BA5", "X. c #889DB3", "o. c #809CB8", "O. c #9FA7AE", "+. c #95A4B3", "@. c #9DA7B1", "#. c #80A0C1", "$. c #88A7C6", "%. c #88ABCF", "&. c #9CAFC3", "*. c #92ADC8", "=. c #83ACD4", "-. c #8EB2D7", ";. c #89B4DF", ":. c #96B5D4", ">. c #91B6DA", ",. c #95B8DC", "<. c #9BBCDD", "1. c #ADB8C3", "2. c #A5B6C8", "3. c #AFBCCA", "4. c #B2BFCB", "5. c #AFBFD0", "6. c #97BBE1", "7. c #BBC4CD", "8. c #A5C1DD", "9. c #ABC4DC", "0. c #B6C3D1", "q. c #BDC7D1", "w. c #BFC9D3", "e. c #B5C9DE", "r. c #A5C3E1", "t. c #AFCBE7", "y. c #B2C9E1", "u. c #BBCEE1", "i. c #BCD2E8", "p. c #C5C6C8", "a. c #C6C8CB", "s. c #C9CBCD", "d. c #C3CBD4", "f. c #C8CFD6", "g. c #CBD0D5", "h. c #D1D4D7", "j. c #D3D6D9", "k. c #D7DADE", "l. c #DBDCDC", "z. c #C2D3E3", "x. c #CDDAE7", "c. c #C7D8E9", "v. c #D3DDE6", "b. c #DEDFE0", "n. c #D3DFEA", "m. c #DDE0E3", "M. c #D7E1EB", "N. c #DDE4EB", "B. c #E6E6E6", "V. c #E1E7EC", "C. c #E5E9ED", "Z. c #EBEDEF", "A. c #EEEFF0", "S. c #EFF0F0", "D. c #F3F3F2", "F. c #F8F7F7", "G. c #F9F8F7", "H. c #F7F8F8", "J. c #FCFBFB", "K. c None", /* pixels */ "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.Z.M.C.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D.A.c.=.J r.D.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.D.Z.z.=.P L ` { N.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.D.C.z.( P N ` [ [ ' t.D.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.D.Z.e.( S N ` ] ] ] ] ] } C.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.D.C.e./ D N ` ` ] ] ] ` ] ` ' i.D.K.K.K.K.K.K.K.", "K.K.K.K.K.K.D.C.e.W S m ` ] ` L D Y Y F L ` V | A.K.K.K.K.K.K.K.", "K.K.K.K.D.V.9.W v M ` ` ` L Q 0.V.S.A.C.f.$.D I c.K.K.K.K.K.K.K.", "K.K.D.N.9.E v m B ` ` B S &.Z.J.J.J.J.J.J.G.q.i ;.A.K.K.K.K.K.K.", "K.D.e.H v M N V B V N N ! D.J.J.J.H.H.J.J.J.J.2.J n.K.K.K.K.K.K.", "K.S.=.b N B B B B B N L 4.J.H.H.H.H.H.H.H.H.H.b.i ,.D.K.K.K.K.K.", "K.D.i.L N N N B N N N A 1.F.H.D.F.D.F.D.D.F.F.k.8 U N.K.K.K.K.K.", "K.K.Z._ M N N N N N M r f B.D.D.D.D.D.D.D.D.S.+.: m r.D.K.K.K.K.", "K.K.D.y.m M M M N M N b & t b.D.D.S.S.S.S.B.O.$ c m ~ C.K.K.K.K.", "K.K.K.C.~ M M M M M M D 8 o , ..a.Z.m.a.O.2 o ; M M m y.D.K.K.K.", "K.K.K.D.8.b M b M b T f.d.X.o .p.1 . X @ ; b n M b / C.K.K.K.", "K.K.K.K.N.J r b b v 4.z j f.l # t < @ = ; r b b b b M v i.D.K.K.", "K.K.K.K.D.>.r b r D w.7 ; ! 7.$ O % e b b c b b c b b c ) Z.K.K.", "K.K.K.K.K.x.D r r i d.5 ; u d.4 = r r c b r r b r c r w S x.K.K.", "K.K.K.K.K.S.=.w w C w.y 5 z 7.4 ; w r r r r r w w b r r q -.D.K.", "K.K.K.K.K.K.z.C w w *.3.d h.f.* ; w w w w w w w w w w w D 9.S.K.", "K.K.K.K.K.K.Z.^ 0 w C 4.d.j.b.g = q w w w w w w w w D >.n.A.K.K.", "K.K.K.K.K.K.D.e.e w e e s p k a ; 0 q q w w 0 w P ,.n.D.K.K.K.K.", "K.K.K.K.K.K.K.C.K 0 0 q q 0 0 0 0 q q q 0 e G <.M.D.K.K.K.K.K.K.", "K.K.K.K.K.K.K.D.5.; 0 0 0 q 0 0 0 0 0 q J <.M.D.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.N.F 9 0 0 0 0 0 0 q J 8.N.D.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.D.:.; 9 9 9 9 q J 9.V.D.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.v.u - - q E 9.C.D.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.D.%.: E y.C.D.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.N.z.C.D.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.D.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K." }; qutim-0.2.0/icons/tray_pics/0000755000175000017500000000000011273100754017424 5ustar euroelessareuroelessarqutim-0.2.0/icons/tray_pics/front.png0000644000175000017500000000546311236355476021306 0ustar euroelessareuroelessarPNG  IHDR{F pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FNIDATxڴ S&8VP1PQUGqVP@B45RkA̴r3>_Rۈ;gF{IENDB`qutim-0.2.0/icons/tray_pics/header.png0000644000175000017500000000110511236355476021373 0ustar euroelessareuroelessarPNG  IHDR 'sRGBPLTEEHHH&x'ګ7uuuW+F=CQKEgggHڡ:sQKp3ԋH0ߩ DݡՁ ܪ2ږ]%"uU՛_j⪀Lwy"U,7V4ƕݧ4F@kbN^)Ds2{~& H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڔ11Ǜ{ _ jS\.R)Rz? hΐTBڮ$jH`HlaF*ӝ@FV0[Vi5F_kȦɞ/,^QLJ_?BƯt2q Q& ,|ǣ>1& ܭIENDB`qutim-0.2.0/icons/tray_pics/chatbar.png0000644000175000017500000000173611236355476021561 0ustar euroelessareuroelessarPNG  IHDRs pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_F0IDATx\ȱ 0 |eEܿib1,`X?/Sf3)GIENDB`qutim-0.2.0/icons/icq/0000755000175000017500000000000011273100754016203 5ustar euroelessareuroelessarqutim-0.2.0/icons/icq/na.png0000644000175000017500000000166311236355476017331 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME1FU 23IDAT8moSu9=mGnSdf&&&(z!P"$fF#Dop1`/`tc [SѲRCNO{N8͞?^<¶mW?.Q\8)R-?+o ԗ/헄i`Ξ^"#.[gq3Ʀz) )%S)z:aap]cWdώnHl{]#ZƗ1z%Kh$mTR潕 ׻ge,E3L*`kIJiֶ{ɹ AQz '6^/J Ԧ*k2Du>cmQ_LU]+ fGGTljEby#oYx2l௮Ñq`t**y FhԤivy5 iDM䴫EoÔB'=zxսxu:#^`'my v?śF,73D:M쐍5U`hh7g`LJ8Oe\iOfEyÏ?ࡶuƃT&daq_1-!չ;j5v9ć8j<]5' t}ߺTʪ`8y`Y uj~eIENDB`qutim-0.2.0/icons/icq/dnd.png0000644000175000017500000000167311236355476017501 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME 6NJ;IDAT8moSeVncnH,+aq[9ј HJcq J8&pa01xaI@n$)*sv+iO{Dx{.~BJ9w흾9UU;BlJ;_d ?Љ=Pڹw{SU@ J4oUq^.z639 Ղ=:XF:lf1Ԫ*j3ӱrjiy; To[M5EѸ"%XP64= -= ਫpA*feЭ$D2E^ffTՐ,JJQŗ.4T \!ɤҢA}YZl j.іK r8 t1.K39@t;<(t_dxvR`T>q܍et<8ߊ7*vfuJ2q-O/m)م]]~eXh)Ãƾa4nO%p9#ZXx i!ӈ7zWUk&mјd`}dZ/Rᛯax^̱1t^V cea" m={a585 GMDȵ˷K?3,N ؈{qvoE qeax( <~K O;ͬևeo\H:aǩk8ʫo9[zoY0籦+\}"quM*@8]`8^gGg?IENDB`qutim-0.2.0/icons/icq/online.png0000644000175000017500000000155611236355476020220 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIMExIDAT8˝kuofv#&+ILD)!`>Z/K+ Z=V UHc\M[1nvvgA-?}Eً?T_IgCna?ÿ wK,o|vL Yy3&A\rRxv4/0ߟ׺7_=rX ٸRFKG$w *{ڍ;U k<v:nL>;Ԩ}>zW|v氲 C{ٵ]{/U(R>_9DW/_~V?uqO*?;o^~rXzlV=815mFo䊉s3iIٹfiiyIJ/SXQ?ċ8#t(2$iwHҏ7Z:o0uKGb&'gR:Cvc+qX?Q5ǖ)S C]+shog0=^+) X zH6^V~*tV'|"4-`d1LliN'JDZ*^Pe1YRQTAa@]e9lOڤ=` ^MswBa&7nn-TfOupc_®X)6:>놽[TډE)LifėIY~=A}'n8 \9 Ƌ1 )j>q2{ZZm_?2CKLjAGLΨ3r(2d_ゅpb9|/d^H z ;OQ(fsoL+oIENDB`qutim-0.2.0/icons/icq/offline.png0000644000175000017500000000154711236355476020356 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME/]nIDAT8˝ke;3;n6mmb&I"'H{"xċ/"JTv=$M Mfwgcߙ׃Zj#w_[`u8[OğY|>' O<:1i"),UOǡwD sW&(~iwa)KuZ|w2'$15"an=ҥE P[Cho-`m}k5H>``⾡:gJ #{PN!8IEQvT|ۂ|\@}+Miq ש5եDC|y b>,3*9*7opu 5bҫuөu vc7ӆEk]Kl!6:eg#QmxxІe!0)mfRQeG?h:!$XHGq`Zy ۦ867Rk0 k}&mcsuA*UkԹsZM*5iPR諘A!.0KsSfJ;^:}#,]&JVR 9SH޹\:_ N_M~ ~t/PiŻaL:KٻT§˛`pA gJ䕇(6$ggJzw!z IENDB`qutim-0.2.0/icons/icq/evil.png0000755000175000017500000000167111236355476017674 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME! }9IDAT8mk[GϽ7M5[Kj۵M7˖VEDe* E웠0dl:!!cL\7VA蚉uVYڸ&Hr\_m?~ҕWM8* 㣇C,P$#q@/_5'-. EKƵCԩa;j,/|J.Sd.m/'WViZôUJމg o)xzz(^qpZ/ȡxT t]^nظ` %iƀ^0,,StɽIENDB`qutim-0.2.0/icons/icq/athome.png0000755000175000017500000000156411236355476020213 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME@IDAT8˕Kh\e@Gfn33PVC[lj+B 7 (Q,RWթZw "UEE,$4i4T;Lv]4ZD>-'RȑrչwNZs'o9,vr o "`jz\zPfH}胁3c7 N/}o|_GCH槳VHC6[>?;PVq%@CUWc蝒 }LV hq3,_0V7eJRa=MMT_Rr7S+OW=Ņsi5-&+H>|9@Z8w)xx!\Jus^EV;K5_] _,lN*W NճmƝocÓ+7y簎F[#ұRP/ĉR[x|[={b/"Ogu^T4T fN!ђwqސITN~jZ5hHֵx-RR?2tQOU@tP-hp&2 t Q`yT/@yDL7x}=8C)?\ض]t3IENDB`qutim-0.2.0/icons/icq/connecting.png0000644000175000017500000000161311236355476021055 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME2.DFJ IDAT8}Mh\e?3sc&Imbڅm1iњilQEUBtӅ?X\;5((miEDĎVi4-3d:w;sE&VE|yy9J)O/O?uO[=ƘӨS-ٟ|aC ?Ozj6!)*ɽS ݐ Bo,^,Bg!Kg^2Ϥ*_MLLO?$IL&Di! M4.u-*>ű<MUc`k7˙۪]0{$fQze} h}\)Tp"~bFX%[q-_ٿ$ᥙ؋gSkd1}q;&ڲKߏH>fa&㩷o9-tK{~v*^ۿt27<;,Q]::\^1-펄HĠ޲74*fOC&{btF-qѤƭuX)5 =x-(N.D7DIUcĒ> CX z{ov;t(䪠>"3seT7K9+`1?x:R7-s !k;(쑄KכBe" %aaPI("\AZz5s%OmPB*R*EӤgדN`` qXXZ,oWm^wJg$Vl}IENDB`qutim-0.2.0/icons/icq/noauth.png0000644000175000017500000000153611236355476020230 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME9NIDAT8˝Kiǿy1CeUAw)1tZ[lWp{=xq{H. {g =˞Ax( ŎA2!Ld2L><+almmͷgT*8Z_|>/ }bDӴ !h4 Ii*/HdkyygbpvvL<`vv$\.#H LB4f+++?e2X}jB<0066d2 UUm6 ",ZNӰ, sQ!9c {Tj<l(t:,}V r J)-¶mxZJox/ƒۏXhRILLL,J[Gvv,ˈb;$}d]?\c BPJ4w1jrvw!f%MP{_$ nnnLu].*1W޽;0 ! C[b)H: À(0MsȲ UU!2t]VZR۶Lpߏ \mϲ,R  0a6\ё. e!?BTU-MMM!0ưoE!7A( '\giiiUQ?(i|P8Z7@IENDB`qutim-0.2.0/icons/icq/atwork.png0000755000175000017500000000136711236355476020246 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME-&,wIDAT8˕KHUQ}>uR" HL LML r5ibA5Q, rR JMd { U2 {ZK([O{ZkgBwS\Fq(@?ƱS!h{os9 ZMu]Y446cLNEC50V`4O) |^ LJMhg11Ǣ#w[:SYTsDb*•&%nra 4@JBإX+1B$m EE9 o^g&*f=) Ń7'{XYGT5b}IDehVB=x“w7Ve;:@'S ]^P6įe01;!##o2qėKW0s~s ]3ql8/Š.3^rwqVo/-b71a ҫ׷0@_Lq] POܦXkG] 1nIENDB`qutim-0.2.0/icons/icq/away.png0000644000175000017500000000147411236355476017674 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME IDAT8˝Ohw?7oMƢ)ډ-F7?LacEp0v '֊VP6E?֮utZ8ښD&y}σzy9}v8̨t33>%Ahg#MKiB+GWf-DE?yԟdnMÎ)_"͍OawNAǟPMh5}2NuO@j-0c׬|2~z{C=)3k| p2I>"e-پ@JfAN68笼C1*ʑRB)#g[ ~Ju+ug_RJ9l۞RFl'A?s&!vjcb舗7w_fUp.x1xkY(&^ =@+Ɓkgf*zsIENDB`qutim-0.2.0/icons/icq/ffc.png0000644000175000017500000000163411236355476017467 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME"0zIDAT8mMheffgt71tm~R&LOms (z{^*AEOz`x JKUMkk6K(q7٬ΌAszO/w{&[_߮bڕ.HW[U!$%˅Ɇ]? Gu⃳+QUo}3Al\fe1w$R3bno.@*woaՒ*nX:[hhZ<킾NOY/@ݍb/*EdL#nj{q5U{Ezp{WDpI`,x7N\fϸIENDB`qutim-0.2.0/icons/icq/depression.png0000755000175000017500000000167011236355476021107 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME2 U8IDAT8moTe9s9mgMiKH*bT@bpa0(lXi\hPktCpa j F-1ڤPCP[hKc efz9s977Dݼ<<(B&s?OFϾ L螮nU ffO/9M#G'E#:۫vstSghK $XWKٝHK}۶o,hT-^bŠbihw2f*'oDUvDj@N&Uf-Rq*b_E E SJMx,rM:COz J9xjb"p'Huڐ РPk0VvPz`\pFmKfoRpfɡ01@cc\<<MT,؜+u2N]v,A#t EuhsY3o&)|RJl H)S| V`~b[8&NCG2{rֻyI eSbϏʦ:N*"nE/1|6J[5:gad {~/:/WhChB$ JIKIH +Kj Fn}"uFM0,Bi Pd! t8{=\04pNr99Z˝u;],~ €j4shgoEQ(jP($G Ow>)d mo-z)fUđJcaltpsy+®?ZLT*yj0I&y2WnLwYTidۛrS\}09%E6ɏy᭠ C)YAdrne򫛲Se@!^_"*.O/ɬDd: 6do]J,J39O7iF\ eCQVl(IM9M<8MUgpž#*n:NZ/}I^a~|SŇ2J}|+\!HVxxXv5h֮b$ ֈ7wx~9HFƢi2Ȟ-AbPH#z]3߶!,Ot:qE+M3Hh Jiִc XݯUFNpH)iYm&D(R P#z$@ֱ?\cd& HщEm JkhZ`]זbjGG鑅Raܭ ![# ;??%-"途h+{Чͽ%ࣣ'*u>KIENDB`qutim-0.2.0/icons/.directory0000644000175000017500000000006711236355476017453 0ustar euroelessareuroelessar[Dolphin] ShowPreview=true Timestamp=2009,6,22,1,30,12 qutim-0.2.0/icons/qutim.icns0000644000175000017500000047242411236355476017475 0ustar euroelessareuroelessaricnsuis32 N^WH[ћ]L,wN+m y.H&42WƯG)QHL~A/7\䆏&Z/11O$i<)#38(sC:-625+#uCK=,3(DlZ8HL;|ڼЊ[]iŶÔTiȹZõɼuઋ歮|su~ydwfzefs|ŵrzw{tv{~wqk|roL}uomG2`yEC@e~̼מkgruhгᷲǞ黛¤ؙ߳ʴyNJǽȏȱϯҭtѷ̟|෗s8mk1?E:NU' vsY+>;5U-(il32 ? ҅ z%5244)%DK+45%y$4134($UB108^fZ,2@A?>?7,ο#3??=?3i`hEI;=<?.}(桕,>;=4MR&;89>(~%:?z+;8L9-&\]6<*187780wE[C5782If*77+fނo"#/758'(67$V@A!(7546,UU*6$y#!~0324'kҰ!7!6414*`aq@-%s!d2013/ =m3*˭t0/802, 2r1,+2)+.--.1*4o 7~0++,./(6n&+,.++-.&:6mHg-*f,-$>3 l#+),,"A| !"l#WQ - F| ! l Ѷ Mz  l  jwk!  Ԇ ܅ domnogdz婶~inoddomnogd魆boodcnmmngc橂ziocboldbᣀ_obacfߠ~rma[E|Xe՗{ŮUcѓy|xVɏx~tSpx厍z뷰vy}ᅂkg~LtLnnT}~̔GC[k\EY}ܛRGQcvywwUndQm~{u×mtəYwvrsftcz{wWf~}~|tPor͵a{|V~zr}@wyzvfw{zz{|xq~Ghm|ynlnqxxyz{vo~LJowwyzzxytmf=KPtmxvfwxrldHRLHWHiwuvwpkVFOUVHGWI~owokVFQUSRTGGUSM_nUFPTRTGFSTE،UEPSQSFۆ  Ĥ򲦪ãfҢã񰦪¡ʟ [ꮨкºĹȼڕܼٲ݂ݠہl߮ÈŀԲ}mq|uoٵ⸔mπͽᜈӂζҴρ̺¸̈́؎ߦˇϻϽDŽ˺ƿŤÁ9οǀƘ}ƽāe¾Ö긌¾긋ݰ鶊߯ l8mk  m^vs ]&*G031GWogP&77#OI fv nf `U0MGDA7it32<11Z679:<=?@ABBA?V11U679:<=?@ACCDCCA>11R679:<=?@ACCDDEDDB?d11M679:<>?@BCCDDEDCA>Ȃ11I679:<>?ABCCDDEDCB?z10D578:;=>@ABBCCDCB??ق00A578:;=>@ABBCCDCBA>00 ?578:<=?@ABCDCA?E00 ݃;679:<=?@ABCDCB@>00 ~75689;<>?@ABCB@>L00 {6568:;<>?@ABCBA?<00v4568:;=>?@ABBCB@>]00o4578:;=>?@ABBCBA?<00i4578:;=>?@ABBCBB@=n0/a35679:<=>?@AABA@>;ӂ//]35689;<=??@AABA@??@@AABA@=>߂//O45689;<>?@@AABA@?</.K34679:;=>??@@A :522,*+2249A@>??@@A?4,$FcvvvviI#,4?A@?=;...B34679:<=>??@@A8)&i̜k((7A@>>??@/ SX/?@?><9- <245789;<=>?@0pޖx /@?=;f- :24578:;<=>?@;*Pٚ [)8@@?><9ɂ- }624578:;<=>?@5#1@?>=:v-y3235689:;<=>>?0&3.?>=;:ۂ-t1235689:;==>>?2.Ԣ51?><9-m1235689:<==>>?9 Ǥ#7>=;A-f0134578:;<<==>)(><;8,_0134578:;<<==>/]l-=<9L, ^0134678:;<==>ը ;<:8, c/135689:;<<=3Zg1<:8X+ =13579:;<<=<&$;;97‚+b2579;<<=<۪;<:8o+258:;<;9#06::85҂+P68:;<;62?3;;97+58:;<:6-:3:8<+D79;<;97%59;;96+589:;:85 58::97D**;68:;:84& $48::985**~589:;:84-4 ?,47:;:86S*3689:973/! .369:9874)h579:974/'%٦ 4%/379::975a3689:9740+!U d *0479::9864͎U46898741,&k&+04789864u35789752.($nu#(-25798755ڍH4689 8640+&"Wޞ ^"&*/368986424678 7641-($!/ ;!$(,14678764<:4678 7530+($!^˘ c #'+/357865335678 7641.*&# j h"!#'+.24678764H335676531.+(%" ;ώʏC!#&*-135676542q2457;GLLKJA2,*'$" ,[ʳ], "$'*.13567653Y13567FiӦeE5(&$"! J !#&(+.135676541]1356Esc<(&$#"!  !#%'),.13456532j02456('%%$#"!!"ځ" !"$%')+.0234565422ՉJ0345Hߩ?('&&%%$m" !"#$%&()+-/023445420|/2345:iLAIQp9)(())&%΀ !#$&'')*+,./0234454316>1345F*^9-,-BiK/**++!g "%')+,,-./0123445420/1234OF-,,-.>^@*&]ߔ. "&(+,.//01122334320@302348i <-,,-/1C~^.+)+_)! !#&),.01234331/x/1334@^0,.023G<+*(!$&$##$&*-/1234320N-/123EO-++,.012:iL+)('&%$$%'),/0223210.d.023KJ,++,.0123Gi0*('&%%&(*,/122321/_$-0123KC,++,.0233==)(&&'(),-/1223210.̅#P.012 K@+**,-/12QF*(')+./011210.s##-/012 K@+**,-/12IK*()+.011210/2ބ##?.012 KB,**+-/12CR+)+-/0121/-#,./01KJ+*)*,./011:~S+*()+-.010/.7#4-/01BQ+*)*,./0109~S+*)*,./010.,#~,.001> s3*)*+-@O@08~S*))*,./010/-E#--/015i B*))*4i~D8~S*))*,./10/.,"k+-/0M^.(()DJ~H(*,-/0/.,g"+-./0?@)(-i մ=''(*,./0/.-V"V,./0 2^^7((C~1&'(*,./0/.-!*,-./BI1'0C~S$$%')+-./..K!E+-./2^^<-'?^S$$%&)+,./..P!*,../BiSSs =$$&(*,-./..U!4*,-.D ^:$%'(*,-.--X!)+--.1D s:%&(*+--.--]!-+,-./DsʄթN&'()+,-.--dō p)+,- 8G^~~^HAN''()*+,-,,q̏ (*+,-/6=?84-))Bi=)*+,,-,,.vӑ `)+,-,+4DQ@+*++,,-,,1zד (*+,-,++,-,,3܈!G(*+,+,++4 ')++,++7 9(*+,++; ()++,++@ -()*+**D{'(**+**H(()*+**Mc&()*)Q%'))*))VR&()*))a%')*))iɈ='()*))oΈ%&()(*s҈0&'()(-x׈%'()(/}܈)&'()(1m$&'('5#%&'('8V$&'('<$%''('AE%&'('F$%'('K 5$%&''&&Q#$%&&XN#$_Èֈmmmޯ߃mm۠vxxmm؜wz|~mm ՗wy}mm ϓwz}mmɍwz}mmŊwz}ςmmˆwz~mlwz}؂ll컁wz}ll~wz~ll~wz~lk{vz}kkxwz~kkww{~kjݢuwz}Ȃjjڟtwz}jjךtwz~ӂjjԕtvz}jjёtwz}ނjj ˎtwz~jj Ètwz~jisvy}iiswz} }mccQKNccj|iitwz}jQ7EcvvvvhH5OiÂihh{svz}uH%h̛k'Erhzsvz}]+RX(Z΂hxsvy}_pޖx\hvsvy}KPؚ ZGy؂hsswy}m"`hݟrsvy}_%2Xgٜpsvy}f-Ԣ5ag֘psvz}~Ǥ"vgӒpruy|JEfЎpsuy|]\lVf nqux|ըǂf osw{lYfdf wsx}B;ӂfu|(۪"ew~"/}~݂e~z1>sd}y,9sd턀~$zc~}/ '}cc|H B|~cc}{f4 >azc{{p8 1oz}˂c}{pV$٦ 3Oozz|rf;T c7er{{ڎ}~ui\2k1[ht}}zxnaV/mu/Palw{~ |rg\S.Vݞ ^/Q[fq{}z ~wmbXO2. ;/OWblv~~}} {si_VN:%]˘ b&:NV_is{{z}vne\TMH3!ig!1JNU]gpx}x}xqjbZSMIF4#:ώʏB#5EKPV^gow}zƋy}h^^\\cmle^XRNJGF>. +Zɳ]+!-=GJMRX_gov}{w}jhҦdU]c]XTPMKHGFA7I!%,7AFHJMQV[bjpw}~xҊzjsbXb^ZWSROMLI.=EEFGIJLORV[afmsy~{v|zhWb_\YYVUSN!ځ!:GIKLNPRTX\`fkqu{~|w߉zeߩXeba__^\;l!8KNQSUWZ]`dhlquy}~yv||hYbYTp^feeffZ$΀:MRVZ^`behknruy|~{y}y~h*]kpooahWhiijkԃ񀞉ݚ׾,9񀞉ݚ$؂񀞉ܙ> 2ܙk `܂ۘŸ4 >Ƀۘ±O Dڗò$٦ 3zˏڗƵWT cOؗȺFkEώٖ˿BmuB}ז ŵ@Vݞ ^A؀ԍؕ ʾG. ;C~؀ז ķ|V0]˘ b1W}ց،וȾ|tK(ig!Gv}ׂ֔{tqN,:ώʏB+Noxփ݋֒‹rqpn}wspaC%+Zɳ]+'?^rv|քNjՑhҦde{wtrpgSI'0=Rgpsv{ՅӐsbt~{xtA^mnprsvy}ԇʊ޾Ԏhp{!ځ!Xruwz|ԈǿҎߩqWl!Ux|ӊΉ׾ӌhfjXp$΀W|ӌžҌ-]hbWf=dҍǿԈѽҋ0bz]}\ޓ-H{Ґÿъh Ƌ}]*^(Jrѓƽه̽щ ]ρVtЀїЉ_ϵheНż߆ŽωqmсhПņ޸ψqШϠúΈ"qYpϢƾʅٹ·!qydΣﺾ͇ qϐQΥļτ񀒂ѹ͆qlͭ}Rͧƿ񀒂͆X̭}R̨ûՃ񀒃˹̅ s`ɪ}R˩ž񁒂綾̅h ~h}}R˩ڂ񁑃Ź˅h]wm}hʪ»ł񂑂ᵾ˅h Դ{˪ľ‚񂐃Ʌ ]]t }ʪýڂ񃐂ڵʅjt} Rʨ߃񃏂ȅ]]|] Rɥ񄏂ӵɅhRRs tɢ񄏂Ȇ ]yȟ񅏂͵ȅ s|ȝ񅎂겹džłsɄԩ \Ǜ񅎃ŵLJ v]}}]iy ]Ǚ񆎂㰹Ljǿ|hǗ񆍃ʼn{Xƕ񇍂ܱƊń Ɠ񇍃čƅŀŒ񈍂ձŕƃŒ񈌂ﲵî񉌂ͱī񉌂뮶ĩ񉋃DZæ¿񊋂段ä¿މ񊊃 񋊂߭ž񋊃񌊂׭񌊂𱲹񍊂Э񍉂񎉂ǭ񎉂笳񎈃񏈂⩲񏈃񐈂ڪ񐈃񑈂ѫ܉񑈂 މ񒇂ʪ񒇂񒇄񓇎t8mk@ HH -6=?HT Z` N 0!'-6?HWNZ?`! !'H-60?HHBW~9!E ] H!-?WQ90!K] E$*?W9u3NNPXD`ZT*NH??-]'! 9`NZTN?6-'*!H ] `ZQ"HQ?0!ic08e jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 x=^lq'I{onfn[X :.4R/wuF0 6@QY8; 2,_zda&9>Ial\'ԄhZ,Ow8DƆ^REz; 20w?kxN4újX$̲nG/1(UZnRxp `(u(RӘgRgb;gJkdƦ ݸ'ѻHO0o58َ4KNް7u0y*'T;e+͢7Tq4=t7_W+"px0"=Pdh4B5$#a~0?#Mvqd$)N",kdLj(>]KpkrL|㦤wgeⓕDXI 6`=%ʨ !ٺogʻO8]c776$Ʊ_e~f|N* $JZiTJ @ RD}vQn* GJ\Gӵ:̯B_1%8* 'Ω9sVu,qi~$:{Lh6 g$1͒a%M)tj9}< k+9677ܝS/l9A~ WmSS-<$~/,qeym?bs~gp@]v0k |C@eU.͛\ 7bޜ^rPEۑd RĈES_ăGġkٱDm :PlKg2X\ݦ^*&d@>r z[Hˆ/'7gW7@<,}~ToGWM&ԛHdub9ߤ O% _RIEAH^RHxU(6$9i͛\.9sW dKʂ|^UdՌ'[(G3oI0(6Vs/:x}a薵04HC)F{' Y?"K-Yg?hGgEG9? %(~q ʅXp .&15v/2<'ؓd媞YT/,qH8~7$6ԡ^T;:%xx0 C7kSn:ȭX\u怄$B"+ӠL>G`c V9eh[DQ#wa԰}(JFp$x ДoKnH lf?JG{A7Hly|۪\,k8tyBSV ؂NS^HތB\Aq;[B ܴ:QPq¡ٟ{Ƕ>Y:뻔h -j q!sln\]@UKfә"t?"G(iP0ސoͱò0qY+Tk>íR{9c,Э8Qv˞j$c`5|AS$UͩiRLvBkρZ:#BuyG3cEgzO75|$bBTӐ I~d4-]Ҩߑ{4A6ғ1v7Y}0dZooBg'WײSSj@q̗͏5vĹ bÉJ28 hV}Jp$p&IB8WI(7I=/2"UӁ̛Jk9ec!AX_M܀2!=HبZ3ט:WΛn›-1?La=4SL ΩHVc0@pR {Ƕ>Y:צ`#cE=^1đ TÒ!tK7Z+pq [\+ <"`N8wԖ><֏GWkVˀ(^|1v[< ou ꂑR1jKkܥZ#uT(A E|emG1kZ:#BAte1#KSPC`dj[^-ch} )u!jfE^yZHa &Q~/"?7~D":hZů#fYݎ2wo}W=eIk>1٬\mQpKח Гt&89hȀ @vTչBŖ~CXS1tL`"-nN @0EI;t'5zHmmƃI]/, 2\ᬶJ1H1 W4kDb쌕xDA)ķ?RX kx%|U5~,1A WZ5ACxv{yKkC;gnkoxr 'fvU֎ne{C|EL, Q]c"W6 JuuZ$t!@[/nXAe6Xa@ Z4hjGȣ Ŋ'1RzZ "* ChOV.-`dN*#f3h3W;K/U԰9GVnA߭޼ߐҪ"Y/RjMEBFQ5@4qe~I| nb?nCP?!+w^+Gx?/J8.V+ftrZ߻S+p]Ҍ Nan H)Kbc'~RYioy.exJE4=7tiqSbf"(,IKy6KP TD2zE[,Ϭ!?.t`R"65ۂ欪L[k1^ ZZO  ؗF V \C* NHpr T{KQ2Gofe9o1vXV ЋPrlUb*wS^jPIwJP U!m2͹v=˚ћC4NybﭤP&Dy4^Zg,Jpae60e#wx&s/_=K됧'&>? $h뛐WI@A4J'xKq Pt&SOKIRG[ N,ﵓV͢ ~ Kp%VF <Dd\zwlz7y5_AGpÃ'$~6砈Cz չݭ_i&R9ג\"Ķkz> h^b\ԇ֐_H=aWW_j/"U+7DU=3E0_}{1 4Ƕ-HDQUOhJF5w^QYBUQEwc_'f y%GTRw{TDhX [4+X(͞ ܓۯHD/a/h1j0NS NJ@{^O')D$SN|WH6,t^h,J+W,[ |_T#5PB(@ ']I// NEw2XR_-B#-VKKCTvg;ЧZ)߲ޟEZ%.?)';^ vCv%k+E'D.ؿp;-oi~`"n@+aZALZ~!Г=\WY&]jߏ1nM@zEε>jZԡtpRU67iĻ%5ؤp'-ʒa8y4M3U3lf >#=+9xb aQ?hcV]/Ԙ (u|Tppp,kH}Y۰$6Rc1rq1sr+ׁXdqLTb,t16`'V9|s;XLL0.]T(WF:Pbj|˯bGoDgGlRNAQ)CܷS{؂~ Wt VCѻc؇')O漩ͤƂ94<>m-NC(klGc嵹(?ckp:zK' łURDD6NHbťc NߚQl?*E >Ԇ2{8칯+0&uDX@/ t,p͏[g[h^ B6[]b:?Ѥew/  9#켶Թ:-izF6''$J?m"s4LI"kӎ&!<^\-Nj/Ѯ05Cy6^Ӏ'laJU_l+opc␗GA0K_抆in"8x>%q{6ٳc8\{:#rPMiXS&3gSi [y;O$"D#[B25=Lꍒ&csK<'렞wӹ*_lJKR?bZ%EE0:FZ\Gb\#nQܓބ{o:xZD=!9M#sNVe$1dژgx uRuK#IoL];:˂{n֡]1~_&\-OR ©1> .[tBa:,;" EUuR@{5tJ "T̄O]/-"3X|Хx9z!f#mqU BIى7dΘ5+խ~q4;ř+qpI yrlěkM☧_oe CJ B$:n͗w00jxPWl`@9뎒zLM/Qpkv!8<[X#[=LvK t+3l@?}l~meJ+2%u+FYo 04\t8m~0BqthuZRJjw1,kKաK V Q $` EI573{;U :G&ȬR<22hP?>7Hw߸G >'iַ.$krA@?硶jLͮ&~;?L y=%F&/dtKפ, oWo+g r.:\sT}gGUhrpf%z| F.s&y'}/o v/!jiyBC:?a7%3]]VJ<8Z|"x==qk6X16&!;4'’"Ǜ.bV #н\װ[\o:]x>^0dOdl۵@R΁&L\$>BqgC ]Y B2ͦ=~*izW$]bA7O}@7g?9ÝȠrc*h9HRvȇa(^&>Fx]:@V{s˱$kv˟緰 )wc|#מP@^E˿PJByE~6 ;BTIx{Jεgiu D&oI,,3:ʆ@yz8xve~< n/so&5YS؀0ё)vƓZf*}MsiJE9ii}}>J{[g''o3@Yb/ c_ThN-Q$Tþ*IuQAӻOtG@姮*wrB[uE#X*,:+T$s`F H3M_J!c CTp;rYlY>4t*0~) ^%RXOBT#(Z:.,'%V>ӅFmYVp /%*\1bA/!'ի=^[hhYE4,ٿZ0Nx.a6/B'R#s&Ϊ}iwLe% o,a"e+lv'kN%qe\Yߠo'7 OJc?t') lu Y7k BݼK6-xϪLTT$vV+h*{S4فty;uag|]w)^/q'jTOE;? UQ&vmr\@1@G5J̫IzKy n@'Ck䂣U& OE!WkEJo&M]5C;>,OW,h2n? 8Rk=(0[^NO@wWV=Dζt`U.=1zNXGq/6^mSEHsFhCN0O AcpYԧ$h3rn}{>ءZ𐛇T0Wq>נܾ 3/!c5 ˺Ws_4hR)2;ͽ@<^7l!gvv:\lC* )XGj˂97vR_r(p_nnje˿GJA|0hcsҰhqqkw"v%)d̓0V٭d o()%'~u(h!C+v*"Brӭ)W D>4Xf!. ${ycͣxOvŒnTaaleAlYHz\t8aUA yiؚKnҌ|29x _a-%6"+[KxW^wYȯc?]y\0%ee|3طw&m.M崪}i| A'%.e)~&4m$y8caqT?@"\~Ց#,hoM7 s_;ν}9U)K+}1J4/")9 CyKl@̫Taf CDHgFuq9u^<î~`Z># Qk ϴ)jpUУ'>/y;ZH G_ːBI(r@JT3+8%#pb,Chڢn"͖cd}UE*M=w~sy79D%V1Jn{ A 夞=aWR+W͢٨.^Ih>W)*C@M4\7δl {tCj[QݐjOgT (n ] IR.Bg6kBpCSaX&Xw)Dvlب3 _U#rIo)6~CjObK1/8aTȸ/5uV$fqqJ F\#=9VRNZǨ,P"ctB}TΘj^f2@G෌MT!™#DUK ܏eI;F*r$^*x)9'RZ@ƷqGSW+pǢ ʪZeI# .,jȀ(Tʃ_a\T p; 7 9u o@N5M_&h؞/#}t7wLB<ረbU7jY MƊmFsl/KAI|=e.%k$إxxx'Tk:^X s!!6ICqT`dRvO2Uy%aVZ؛{vSpV8TG}n9L2C0weU9]20lFh3|/: ]#A>ƢUg27|Ubcm 3S\#?Wn+' `ݯ<l]K{ XSm1[|厭gjWѱSl~|\epHiɑ .@B,U 6#F[3|"xV+C)J|o?@ ڠLi#0],b0'Ulx.Q}S #aT R4ƚ%~q) =.0i ]ᝰ.IwWDz_%9bC)oFhꪰ,~+ x:]gW;Ss>ʾOِyݢԩblEٙxtKr=IY(8I5Qs}l6@g$;YIr. gjg}@pM?Oz .le!}6N&E|VXdݯ.T*QZn5 ߶5mX'C ǵTmqbWoA.~<2SC4t{tNSfZ1^vµ@7|{2⠞7=*zT2 I9^:,`zXk).1Xw`*`*8q\E4GQgi AΌ٢u1~ަW MKc|Ce5ҳ!16[1?[&7Iי[YKOC `,| !qGk;Ak\ru0O3 C}ʞjp 4gI9ʇvѼbMkJL< hdF{V'uRƁZ)h{ Xm miԁ_5quy>%;g-e7sThSMUP݆DZ% kY9꼣P}Z?g{xr8f3?]Th%XK$f"FY$}Y٨-;| Z?FT.6jy2V; ƝӼ϶=FuZ]/ep_u5DV5gn?tP|YܔV#'jq5uCpXq 53Glt?1D0#90ו/"Մ 0 ¤礪*~x*x Gb@5ѝ*VySMܕu ڷ|~Wbwzt zVn6*~JūuL 3[_l&\v%tu^QV{%ŝh_ && s>ম8\hk^I9?%\,ڼR;<Ŵ*T6ROшۙJ伈~\Ո+%9&xZlRѿK\B]%JMAOLݴݜՀx6P i+]IoתNB#4RlJ#eFX"_꣦%vWR_7c HD?7#/A?bȎtAzж \C_хK^CD[yⵤj'UpEbD#P>q))fM@ISMr KTnK|Uu`\nNAmИ:?KSc7 oe8G7"i?;\>СuV>E~os0edID0z~+6íP[M$ܾ2_`M*nNС 6!O3?Uܟ:V5\P;GfZq(G:q B1%l_Oj s&xĤp2ebD[}uŖgq @,UcPjp7ܺSv!x$yb\(K6'̄YZG*Xqq@h l;KMi`+g<4] uC_Y9d Ч𣑋&Zzk ~\ cpV*PKV6Nӝ[#%6?CFQxjcST" 8)ObIPTwHy[Z A+]H7)xhCUD^ Ǣ&mW?C`(Y1c'w3^7?ϙbϔί%a/7ensϱEW9,pk .VUyGg&y`&4ޞb Le'L Ay|J&IJ\:f-fx$(O&*&wFd;x l77vsj6pjVHF0azu<{ɈTɱī6@`{eE}RiV:tY?_VT $N **5In|$14=^- %bKQBJ>IlTC"udLTdցEv~kQ>f- ]q^7=_(r9_̵kFV0`DIܿ MPx0!K ,K%L}ZPn\Vo3}wB5uT| 0Ƹ2ߪ.>@c,d}X&.C|ԸU,LnM枖Ĕ4g./٪_+,Y iPPq^h$:(ȣ$Y&{m 2|GqO 4"H]S}=Z HC]W;9Loᄃ䵝ǣF,[?W['+Y'##Ӟ8HXIp#JZ%dckf7n`բ(}RNh9:7 m/ VNr\Nbݕ_"v`S`% )W `Bb0K9I w}֌O99 ?IoO9:dNCE5@k=t]`y;aƢTQt' or9bG";:RLTqtI5+T-n?2;ygk@='Ke5$b7B6f˄f }+iVY P)aS~rfoWk;a.$g;4voT=o >YhDy@1!Γ~5]qCQz?{wGzC{ :ufkU&r7)~Fb6=]l+́ ϕq)x`  O'jяZd7Y/0GAAhQ~J]fRuu5(N]E`WTI/k; lut(Sy0cajSσyiBEhSr6[r–Ȭ#FȺşi*UlfNRPRH:$YX!<6씣)y=KSB#-,$RN1# 1![\u{Sksg*[od?&yD+;tmuEvG#Kzݿ(B(a!f2!/྘~̫ڿ@tl(gT o5Ԁɚ- qt@{!$PT%-]{Ycpe:@qK|W 4[}'  o'Xmln+i˥mHr)xpe陜LˏobܺnU.s;@u5_\Kδā;Du!d"馞?SsiK-c܀Jҡ/run씧yC7c an/gvQY+^̑>fÎt~%_=S[NJl3"c}ݾkA7p~YV]ݒ6iюGY H(~ɴ{v t(_z4Mv68 " ?4t9[.D؜3^PHu3MK 2g[CAF ė)g%y$ h_-nc&͢[:g0U|`SI|+ :F>F6C .`mkх B{;Τ_-z䢪-)uL:/A!HE`-Z9B-DuK|̫i5RT)D4;`39s3%(Ŷ ԶMK"e+"z@ǖtF(?1:uτFQt. i7SC=.3,=b:fn,}Z^UMv}ҫfn?c*v]jf=\!~a{rjk%/Y9oE_ (=#^}B=mW$l`IM= D㫐|/P7]AM8RhC2ޏЕ` hr U/h"6j#Jy dE/l z.m!pZvqncqtf'oGkG)Z]N\n/{e}YMbG2*bdvڂfvJ#jARngP3iKᶷ!z(P}*]٢Ek7$-LOʁ8\G:-[vj3]DŽʭ.Ym/GGcgNi,b.qkΉ?wàӥՈoի%@e @&"h%=ͮM-{ V[t46lv]'@ N%@ \ka-'v F =]6\H62zGS&P!-p,D`\oBŦS@_9!|ze>r2#1'?LaFNHM!$ Gzd#Jr:r0^T]^;N$cyptDI(Q"dՁ`G `F}[U\n|ީAHs3e-]ʼnmH9 Jfckhw/n.չꭷX>a|㧍B8@KsRb68 9^ut? V< ɼ1)$>@=ߦtze&b kOX&=ߦ}}/ ?];㗻oAIع5-(7`"tRM|\qvҚ N,x)F  ɁNxuKH<ׂ+ cU?慗0ݰNPn;`PBe2CWv@ QհÌ9^3ܱyŒ! di^]lׯd͛ V]B\2ν\ԋ8P8((e.^iނ '85o*b~=֜ #}^ߤmJ侸}8 ӻa'z|Ƭ1L[ם@Xgd)cZM>fԷ&3*xi+Ͳ4(X4&ӵN_ݣBaG)V$k',V!3rq;y/񓯗[Jf=AbZgOJW%,ĻZÌOijӧ*WlnBkMCŪܟeB2ABdYICN;LMn MPov7V؍ Ht=hoȤ*e# 3Rױv[)UCJ)$k$!8]E_:i>!nqT4TVɎ ^:/CY&|'el[5ԙ"x,is:[cT3{]V5tY&8RJнց03j9R~m S'y QnZ*CBsǣ>阈C2pU/`5ǟf\\e؊ϵLr.%Hrp;wFES?S=c0mfaN({}!A.vysnt5ֺ)[Ag=dIW=Se.U?_WS28n=k,x)) t EV,`i#V֠fO_桐1?D9%JtXېN[9L*?4)'Ε97rdxG*_nZΌ6;ȟORH "Q ^QK|r!r |찍ʜ|#rke><0vP\~snA;0jVa57̾ald[cpE%֦8B۝Oi0(jhuk``KJ ]$Ov/ dY$(R/@ `ި5PVx]S̸6  ≮.l3 oz~WB6 v I*&`m`A¸SrN77xEk-E5GB_$57p9zH"bWfdЩƤ_ (op?PJq+ΓBh EVeǘPpJW? >ƉpU)n=K \aT[IwjRzT~Q6=.60zq?hZ滮wGDkRk&"u eAP_NGCWUH! 4LtC!ًQ̆◛zsW1ztg/=vo&18Ch2]K(2\Ob V}a2 P-_ QO?yb!|xMHNc0vx!߽n2!leUt)I3>v<P|CE{ +Ϸ(S  \I^% Af S>.k``79mJhkkj {uf#\Ykcu[+PV6)vNTzծ 3)o1$<*dttƖiy#yv֚|$݇"Ҙ0iw, B'j%3~5 U&uQ^nRN{ w=CL=]</PZ=oyh;qϠ- Ӷ5:R]lS¬) `e?f*Mo(#qln“>DI4b~i_4 fHĵ~LE⾏Y!xc"B}iƨODy v7oBpu^©c$f9/>J$zL%]zc@ MVss c?%a,[?w  Q kDyňjXnFTfoW>N2<'a WYL7t5yc?_2zReAwo!@ (#2g÷'KV3 {(kp&Smц$;k=& &v-:qm]I_!yEVaV<\xcP2h'C嶌mUHsF#@5y'(?\kfhIP~:$1j |:fnxbN{dR-W, Cx&zxb_ƺ 0@&OKaO>)'*we/&jZBŊyM =U0($@u"*8SVz*̊ !~H&Ю9(c7nVV$Q .-EÅw1V{Hx&0Y!l?}~}G?!en@ {Dm!97$  iʌ\gs[s%кy1u;voU@ s{>0<'g2Ou=> nMp#*f]u?b}guϥp'ZJ $BeΉ܁uUr4E^sOl=ll XT473`T^Eg^ Z'ngjmONrub(0m07 21myt\ȅ셺]FO48kcMџ;xӟ q %r9J.)/̖Ѿ)xX%a'J :(lRB.6˫;& 1ܺ[\kLI7%Ea$$@1PPC.cMIml{mJBeW*zxS̮%%>ӵ>FS[k+~>ݍXkhv]7GJEHcK7a)^ 5uEUjXykZ\ӽI 0ȆsMthRA8TN4NԘ` ńݻa\R{I`wk01~9i(`2kjM&c2ϛ )UZR"dAQݹpwt+ | PcŬŠATq=(+-^|{0zhen%t{&cjz@2y!/ \SXje&TO3ɃvYQk6>8K@h"a1kZ_w`H:o0ΡsP^77换I=b}T) 众l wnyw6ӔX9䠜^qg_5$}1F,*&˖%)1d,<}c*jZŧn7|A/EDvttL9d잶(TtHcus1u%Xk[6sE0I$('@%OE"|;9'ݻlF̷  WvљcT7X2^-J3^b;鶹 ^ɵ!>ͦB#JCVmBfQaChu%Brz}6k5hpIC5ur b6G_/yz0ɩh*;:PHa@cUGLѶgO3P Wb 9&+9Z Ze dJzxA5!r=Ge?kFnhH ,d'^`SMpkBS^\Y+ 9c6L[~p09Btc Z p.bDXjcTM*eBRYݎ+)n<"v Xo)Hڱ K$`ٜuTv[`!`M}03pfWWX~ƙ([</B5WN;Q {p}2O`ٴ1}${N7_#a,ҧ:rY9p?dMx*/]zgmݘPc"H7}̦E-`Ip/ ,svmI0[- qFʵ{8l ތF= @{OBT~2Abwg LZ]?Vp )K7^EmP*ôUhis.fHKh/S{Ջ˼Јgڅ(?Eo,"Q%C:xcb;8RA8đ3䭒-l r}+5D̮pK3H\mr:.&S( Si~$ocu "#)ok.зWn^Idȿ}~#AX#}@*>oT~cہÖC>>fK04v- sw!_/5aN2F얨Yjա6rX{ hF~ː)쮅y) ȶN4:Z;Fy C #L|MB _99>%\=vddRXcc*{ЂfE(zˆ`C,K@rw֜o\CSMѽ©uB/jۏ ceB_ָ(L18 N[~ A> pH!Q5W oc@Q06%#)OgvR0SH<gGy]:!5#3MŋjqJ/#.E714̭b:k7lPD*uǶ%yWupC!Lq!UNe#/w\F/E"ǐp ;Ձ w-`ac>àOc|t4pm2S8ڟ;k@aw( ng-QƘ[ec2/~/]MغvoF4" -h8J&LUz;$ed#x-|bV{luOs6M!5+irOe2 ϻcgӬR#р[^' 1nGahpW{=YzLKq͋S! S_B4dn.G @V R_r/#Ux;;[^QЮ3uLMnbqdRUvsDz[)0@skN~ΝlmևѬH%=vݮ{`1VFw!0}?>sDz\T}L <;~=G@eNiAv[>(Kli=za3$Id)J6t<_8is?د:89za \IKsRwB:LXA! Gޡj mwz۠P[fY6jTV5—ĵZlB{"s-[l7g>#F8'?s3vNeL"Ã}Vy}98 uAJ2ۙ; {iQ !ެdP]g^)?vɑ81HXC6E PRf,f@^{ d5p~p~n,mrZ;hy %:K9QO+n$i͂o8 3)Kd0EZ6fhԈVU\O' A"П-!;SceaHOĄ1.A`Ud#qr0)'|JK(t_OlC!6E$ V!5DC? yoҊZc5,9"2o;S4~E@ޕRH+6x`y_~Y4[D3 韗m3tz=:g.Ifі:ޏ|Ekg̚ε"u! zSkbax- sף@'Fp)',3 &EdfE@ty|2E?'DcxH\=DTCNb[!ù/!s'x]!OImmmmm #- jWrNʎ#vů]QbK4 f~- .!~_,X$lLFcr' sȼJ~6./oTs-l*7/-5l(?WO/go*›cOKS028c`h&dz{+.Z\ 0#cۜIƯ7&/H_ٓ saJA=*n65mB~@9+s=Cp0zwd)R@]:h[cAMӚI DGeGb՜+7㪇7U7 9^mƞ܆( kBI /iz3'{b8ݻ pa!y} 36]r F-Q )V}$~W$5܈`xNHlC* RNTb "ͦl9瘊V &YNvrhvWv\gϞI$} $ [cTC9ZXzzP0JcknR;"kCCkv)vs$1ef_ф)@+Y?Obw_?ָq'\%e{J)CS F;R8Uz(8Mlu΍ @!t_ʗq/RQ3%^ #/`;}Ua% 7+l(+87b5USl2?}`C.9Gd(pN2& 12*𺏬$~; 3J`n0 rlo[(C5<%x0n*xo!+B?>J` D1i5ScM:B խ VX37aJRO&==394OY4r}{\Upc( )1fHut(G.1Gh67&SŔY@z7 ]qk_WV7I54i@I@bcy@6',f-=jP7Idni]aO㌋A|6).6{ףa^LIe8}~y WC]Tt~EýocH7`ρ{riE{4䍸pK,H 5q^d \P`9 0-oqS +X#JZa@:2uẘ%ֺl0{hE=5 գ˴+w;)\|*g_'qR`w:v'=hKZ7e _*93oiYI]:c|]ȫZf"7vPˮ/mĮRe+QCKЇ犖^ΉPRRM6v3oAX F 1AV,#aQ9'aӗsr|Poi'PW9m;o_N^lZcx&VYZLU Z 8&65:E|rk$d{?ۤ?5a"3ۀX+7Ba?:yz5*`|ve.u&Nh 䞐%, lMLcXр-B cT?-uAE&<O{ *|bZPݶ?jѩrQ2:}{9&)Y5h d^E7 e_;_ QȬ+2d'( nPIo߼WऺjvI륛['|]=X0a: C|ʫ 4p 7m7sx"{Om,ַqp\GƲ  F Kæ'_ợ JY5m 1]Hp!g :.rj6xrY$FyVzQ($} 5؇ =(Lm Ky;%J)79*xM$Ma]~.o-7PHMg45oLXҗʥk{d2[>%$M؎T3ǎ67 BmocTy{WO4[Rl$,J ߊN)F6 M[ @b2_竐l xdBw o'jxV+o??X?eя\}e207PKxph#!H੪>=&Z`\k˰(>I$z \/ck|8GE~Լ]8*70p޺c7KrIyKF+E.gǕa5vT`~B ~SqKE}\ʋSpG71Q-dy Rzœ>Qhf=lB"*?? kwk$;8I.1(QH`\Į]vןD ; MgCД*yȯ5[us:8ɔN/Ť9_jط>% -r{VX?P ׈eո[H4\Vw$‸ a'\O8t&U.߃N^vRՃ78P R8)f+ (háJ9f\ΣA6Q84ĵ٥)XiZ/-YsH&}=kN G+ًD;!̑+k&rN3(U4&-{6S0L24+t} sGb^5~ {_@(l ;R5)e -3 xDJ@KvJ$P0C9bA[;ƣ5'Ƈ4rL]xy<{$0Wۮ#$kMek>}jK/ܶPHӁa5e:Mϓ;"÷\HSl;-r7b"&;ÌB1L2}`QDt~ԍsSѐ 'ڌO7SSgFܴ <3ϔٙ&YW&ݎ#E v|rnO%2Bo @フfr H}B Z|3 SwtYˈ>[:M3  8CqRE&&KnWHOg_mYGe]H-eK\On2g?jCZDuNn؁ycLJ`C@v/h 0m`>C+vjqkB2 3/KF}{'03 Rϧj/ch,{ fY~s$-/;5_LI[PILsXnn8aH'׆KNV23ٺ E5Kò"o= \U:d5o-2ܹx#Ec|4tw`4MY9ULjQZVPR>[[ѵԘHjҟbྠX6rQ5yC=N4WM Uڊ3' o>dKZu((+'\R: 4ӎ T=letk;ef]R@wT> 'lW[NIw^9oy_h/s8$ ! =Z01l@n秇Um/"'u@ .2ϻjOhaφ*0h I/R)Xť0|`<$Jrl%.)BG<S{ً3oyR?21PP#!D̀>|@SSuXrB6s0CE^sBMq,W#1\ZR hS9KknG7bKjsҶy%^:R"tW*fK}Cis;L-mzY-c%cuŒ>Fe[2hr&*ɣݱ9[J \׼lUy#5uEC2.G`j|IH(SR}6B>RtSRs'un@_TKx_o;; ̸ f =3Cr8gnxA#?Cǻd=G; a |m!xYƉmߩ-8/9 37YdP,c$; ĬXw`U)`:jF DWqk6 7`}(M;2[6qy6?KBOjT*my֖znMka9,LUBkSEg2Tm9Dn}Ug56Jp0T*Ψ`7NHl#S"eO fZgA: N>UpgFIsWJ+/1=İw"oTaqbX]bI- uija%FM׆ֹxeao C`VjNԙ$At16vՁش'TB%9;g\ pZXl6F/ӦXlv&aWb@o ykM'H3 UaT.֞q?繃kd<4eyXOeTkH6I6I#>Ѽ@ ŀ6SF쒵ʶUuQ50 \foA].V טOfͩ帳֜UPa޹9-3@MPT#Y%nS4JGEΒO=9eU݇`GFmr1o OC?~Z4%#+<([a-2SM ټŎ#Z׷91mz[K/ӃT2p!^؆;4+pØl4Q0.81(5K25݅~M[~3-ceH$b.>.*]ȏ:h0 ҨVu&>u:i ^׊lv:)}#6Q+u+ h&:/d-noM5dxg-I|8֑4,lx, T>vZHKjk՘(Cx+#>Y9Gt00m0K76uyz-P}#NI)`>q &z<܌ b+5"a}d %6ps%̂ƗRj*.60J)%.tdyµK kjK05m;d%5i1aF0ΘyeUГ7Yt;2nWu44_N+A:Yl.i}K4*ag>b,kGCΰu``hn~*4CR!ƒVlq'yDz'btcZ/x XFgJBRaXoFn3G*dGŔ݉2=m%@IDT9i5 v9pa 1aw'N3V]eD>5}A QQnv+! gH:n5҇ib$Blw0l;R{RD/J;:vւ-dX=1KXܻS֍1OM&SRlRw -~I|n"ϱȳ%фZڥ ;qy Ξ5E}G];E/c`UNKj7R9O ATa4\GOC߸ NL ?NLțN[*6&׬`Q||`[x^-yfqNnE# .d6Dbq㏪Ġ91 T=ᥰb~DO~U@2=0>01km O}ϬQ&P\K7oGڝ҆SDj5@13uR ZTmI*zఔ!TrQЎkة2M8qqg"躪=\eX!V*?Hrv* Tž`@DA,Ar6' T4Q4]v8Ç5,Z'D`tn< hϝ +qӳ4l*b/?D\+ s1+(EwD`6: YkzH0ZbdjHӽMZNbEoKu9J~*hLqV:zĪZWiT ǒY㢫UN)!gHYg^$FttMLFn'rm)\n1cxRgB-KNl9c: <D7m ۖ'an5 T[t2XD'c ~_sc% Faus3M+k>JW{P&qA}"֜+ۢP '0󗚋z B_S}6>"^8 Z|Ai}Φ?ݩws09,HjWqNgn҈6T*Tah2&5DԔ-utqQU[P!$e*_5">uE~Ldnlb݆l!nޢNpd D:UT~Gs;Q70!#3}?T2]eb0 yUV8(D c. | !L4j^QQ\t {tym2y0zd eZdpXY1^ r!lN` +8!k ')c!=Mgw J&vS=*.5ɓѣʌl@tT޽JziLVx:-2,H=`{'_Y5Ag$/eh_K*ʛ$8[f;/X,i~GJ(e?:>Uel=4(>(!r Ëa͡<`q~)UW77O? yv4kЈmlB !7Kݵc9&On=_‚=\3ROK߉p: +# [EEi_:Dvr IcnVz_ܰǗRd;NKTYzƾ BJTlZ*o+h=,Vgl0r#}bğ?YaRLɪ{-Ҙa{Aʯi sRSZّXƽ$ I<ȷ)Q9KO~.Motу}dj_)DҌf`P>5h6V,ߟܵftc ʅ^*jmGv&Guz\Gj='3H=v 7NiNQ`8Ue:=DÈf/oQig$]b|gG!P.Ɏʪ%x!urR&G⩸~ : ͺ[{E(]Y!W`M&ԛHdub?ppC1 Z`ʙ$p ٺ#ߔH>H~p 7csr]@/yqW{Hh%}eKO[wX="_=ᧉ-bڸBS8̬ 'WlRp>nvj4Qf_Vן{/l$$$30w*:cFDQBS tkKj'K$b׌NђZꭷTI|q.I{h3]R>}"Q?9mfPEI@ ԦGzS_ksne^]\ґg?hGgEG9g'6pR?$|5”\ci#}4cSNg7RUS!!zp~RO,?Z#[d˼x\/3+} :svUV oZ'kN9wnoH"fi`s=b1ٙ.VL'} -3za*`JFp$x Дo!P1[Y‹2z5D,P~Q+T^ɼ="C߇ØWݳE=' D|EQ 8`(Փ%6[@6KNj.gaܡ_Ix߅Dٟ{Ƕ>Y:뻔hiP;.cD{)>-R4uPaxfm.z$~vE510%@!\պz#n ݣv_=iqZj}gM sOg)t?ǬBf%A_#0 Y:1+8!'#TKmU"7?x8T,ڴN *Hx0"wk`1C*zŪ>_)w"kjif~k"t&uKsWTCqѕ rLݡ,;/o/h\ge@aS?A4`8xSO5tc~W֣%{< ߩ6Y4B%-b1:FS죢zd^>;ׅs͟ڛ͏B T)ce{ϳfɒw4TЩ\GzgVй'o ڌX⎲FC?7~D":hZů#f wy/Ĥ^f;|1@yI F /VPS̕ߟσ5'IWU?>حE'UIJ+!-XvJ $UnN @0EI;hyu.wlW1 T&sTfr.mHڲd];CGVǏA5r544S dXSuy$iz5*QeA5yq8yFSLy'ܦY\ X= XJ0XSe=uZ E23!lLnQ@)ժ cY?l  V*aU(c[:_K^umzw궎#<giT<'ZKC*P>W`UxcX~$Ҽ!Pd3ugԦrTuoQjqPSwnݴUWU"m\ "mf?GRu͈1csaJqyV߅'S7+-S&FWV;S"B94PWga)~mNC^|@VDpHѐ<,ǂ#,iS .nZsxt )N.\Ms/85H&{WEwo]A3ٰZ]X׉_WXӔTE&IƑm& SVa2SGkrY2 M| ;U28 ~]6H@_>vuKg&eΜJU6NOC{G ~IQps~+ҭN #\@#M4|F3nOgb9-\'~k*"fGRc5c߾,] mjd%lz8 gKpg_(F w2t_y].o\? :.ABߧ*X.vzz3+B[bs!&2Ʋ!֫{FokAZ閊ѹ:[\Ʀ8t<s o69q#hAE;ufiqۡ@g {2Q?%W!(E@MJA #5/j b43. jRPN0p$RYrN5+[#>n6 ʪzOUPw ߧѩůA:u;m!rB#2REgwJ`6ǟ!)(Us0l ʤocIY¹p+ +X*2PN ]"Ow#|ϬTi0hb{ GԦjk3Gci`GYBRpH~#f 0+0B')F:цVARO=ʥf uU,RR`/#0_mGFG[u%Z[  2-![xӿ>^Grn8UXߓ+/ # lp湷uIֿt(>HxfeߓMa^{ ^uV؂b:N{JuVOIoLl.8u/\%*6c}Ccsgio1LA}t3FF^E´{v<ÏZ|780KʲWن]NHQ.I+ Xq.GJȡbf>øe|.;:/RӲ ٿ>z> >)kӎ&!<^\-Nj/Ѯ05Cy6_~Fas4d{w0o\1^nK:VV9J]}Yt(@@M:۸!лr0^K*FC`5ȴ;M&dP"!Qi%'vmCG+;tzyklb+ c ^5gm~r5x 眡:j?dN8򒓊1/*j E"P]Jfzx$][|P_]:ހ*䙥Qh{AӖ_YY#ŀamU 5>ۜnE`!x<9e[06wMlC{hn|AfKP̥zҞ;̷M,)~/eo%HgQgW:CyK Xs0і)s7a ;; _ =vKp@B9k8hYWX5wӎmG suc[L ҭgu(il| Yv-$׿N) SUoOE\ oo5tcYcqb׮6 gsN|QXY/,8 QYˊfʚq()UXl^v6*+Al dR@=-.v)[P.l^y.)!_s\A?^6w.o5A$/ozz Lfjv#/оfRЩY~SmJ[C`s'޳`(1o_OF/?@mc̬"( Ht\or뾐e f$t .OO/ӟX]D'!Rm# ba(Vz8p=S5Z/stņ9Q1]cת؇&' LRFdxY)(ļ@VfnT'Xe63>ZzH/w ד~t=h69wylEXZqґs6u¿,e[Ӿ喹8 iݢ\:*SEw{ չF4i54Knb2Vhcu?l1#c(UdeA Dd' U8+' 6S9˵_'Jp/|Bg N`auH<{}C4>9', OaheNbDjPo /Qx2χ"ƨ!3mǿȳEA`;}ك&BU̙6kh8v{k{DhrQ+P 78şuݺ;%;dzABA8}ݑzqz#fG)\JMIHQYyAEb[(Z>Qޛi Q oOR:W3bOWm;)1aQL7e$n"s~qn[t WHBzWI^&8ޫ"y\U;{iG*=̭DR͎yMtn$ LqVnukGu&2.cj|y\ ;i]H& eQ"~VGoiNͅV{s˰ "[\u28¡r>ik6{j٦nόg}|? 4 pu+*S;в$i¶IDOX}7F8Œ|kN{JUb"yE%҇O0 _a{aeAaKWI5{G'v&g3>3̀eLXiu޺)9ց(Є$\Ax~ eL mqk\((OL{4)-bˇp <;e0wucV_!Y"\п0W}/ғ|0\@U.M߀2їamsI2C{2Ty`&`?q$bUo)9Ky{P0GTkHY@l]gX.\}So@ny);(KDfslW[lp=r q/Tu0wKͧ%#hC}PdqdEl{đJKv@yc5 PuF|>lcr618Ml:9^,I256ۣY;nТ#a 0c"q iF }W2rd8?ruXȁ0d2a_f3MjXvۼU^2gRe#\ Lv~^`rpfT364Щ5cQًBr¬*Plnb;i}U>Av+e& 1[{F/?HqwJ.Оa55+9͐XxB* NgI܄xFOM&Sx *: ȢW~34rffV5M6ɰnp|Vlr-Wy$kɦA_i*mPkV+]DCA7&]⡒j6&0:E *^x+2AZ50Ga'񄑀T"u' gۙFdZ-uEQm B|DSV&㾒+qºg8 dZ-&cď+Ej5<KEl^N ~QMnT`+. C0p%23st9/D߱0@7?.B=B1@u;xdz.G#JaP?~e Hd.孹\o`N ʋ5 2pDbάR\xDQdz.Q8$_sd]}3ٸI?y݋%l&\unen.tՍz7m4/B{$Ȼ 42#B_Xp#g3"j9"xcu!1a~aekx*ci-N,ičXY2˼95#:}YrapZٚYdm EeHUF TaI zGtR.0f{# y LZS( 9e"Lr)^!ISM 9СtGEAr1 ^t"ZN/^9DC/@zlRIk qr|/ fH<8>f@P9waޞ?ge s+(5K8(*KTIyl0>S< %9re|%/7 Lir!HSsJ~[>$w- E~$y]k HT$ˠ#3f騂;KQ ^cm+&zlm^ARVV}Spot{-o{P},:FU BX~()!6o2/j9{XO&h /\[iÍvWp)N,UB"ÿ$.fP ^mv戓󖌌󸇹,?6뱊Q Y: 17jl HJJfH[ϰ$EW$ ;"1,$\X\x)⓳Aai[+V!c!t;Qyy3\w'TlR[@Gk]m_#hU^a΃ºF ت%'sǩj",BHzVw4e6߰koUv 7С&W`*$Wgx$$Qʄ Ivߟ2Z"ߋqEP$ͤRr ]iBk~'=/0Mˈj?=r+5V7}u=Gɥ;Dd b1W#K뿼`y싅C:lyNj~MgHc- ֕o[qe&͚}JY5JkӔՑ#'jq56Ԉ:ibִbBűG+~rϨe>-2WlͲ??B]).yGz-6S4ppnO],`YPT'麐da7XVW 7y*>ٔZmS(W7qusqY*gctWT[!UIhbj"/WH. 瑱2`( Қk}b>E)H x@P`GwƎUMLi}9aA$٣VZ!)DA5ӬJɭe#4\Emf^x6MsW+1UlU9 ,\'s dEs f2/ӶNm S%$V/HeI-r;ȳ_\"gioƱ=|iKS#"$q2ZvF)m̌r|1ps<^Cٳ9UhAhQshһn!@vڻN0!0Q|R tTt+dH:dT, O_A-&1XWKt©(d<:84=ŧ*ȪOQJuj&U^^,tQ܊Or^H]&c=(ɧ;"<T_} l^D}n_܅\v- Tf؀CN[:xUou9~pp4X5. #i΀ ppymXD/OxBP@a -H'fIOK'f6'jHJ|/,pDWL Rs]N$]K91Ҹ)3\:e9 $K)ؓȈ4k2NWB{ N €Lu,8EXHs&teK &4`@Da*LX {5 t)Iv4"{!)vnkM|fGhОr\^挶OZ='Dq.C)z,<:xw.~Sz+VU.^15P[(*b6ʂh SI@XKb(Z5 lsv[ &JKjʢFeJRI4py/Ϣ0ZQ^Tz$b16 CBɱ-l<cЍp(?iܓ̳=ԟiHЩ9s6+t'wPB1_6#*p MDX2c9itOh rUQ xv.(2R._Hu 2lf0#*`&9 b}i?$?~!ɥtz1ܦ--pt>O`Gu z#svRLB 2kRC fn"nMX69t]h ԸaBD ΦY,Z9PK%@q˂0#x|oRx {++s0sF;-HfTJևvpv.mJ60 bRxڨ/qhsS$T|U]o|}0#<̐|.0(*$ ȤGj!`QVKr2Wt™k.HULO )G)O `6)j8|j),~'^Xc<[;% ,n99iKto.Z>\JKZ+)l]5bt7+ڿD2.K`ڒ"!Q*"j$J M SY%;x&)EM/b$qw(Pp7 `:+4biMea3]b0s{lG둄0VȂ^rNԁM@e쌿q1?-߲/TD(pWbsN+`F*(^]ω`JY"|J`-uL_l6=v$ i"7h.=uZN*OhqOT_ sbzImfkVbD>h¸I#- _Ζ8y!e@WG6axˋ}5}v0HFsü;-ښ7vUsNefTБ$vYis.7wcvGСQJm0Rta̐Fs/.? ˬ7XGzYbMNA2sֿuk2bV6^ kZ;# W zOZn${} -[~}_tOlYfeZPŠvB;uVp <½֘$zIבӈK3$T =QΊzjdujCPlRKtBkV{s˰ְؑ_|"셴%&O"t#{1˨]AV0rPAKZ Z@2̓Œ xffsMh*egrp `u9-L7 H,m'Fǩڜ y6[[gwjxi^pyr }1eќvbA ()rˆgNE6~5?x^YӹNe澈g) z^ w H U]tGK;3/1!M } =zNeYSBхw@Lx^/4+$ݲ+~}ic[ކy##l].e_$'KGH{%_) {d3^i8SǟtST*') 9r@4a[avher"Ē[rB`̮/YGz"l ˆuQeXs1dW=n}qhO6wI!J+1nL={Q‚@8Gbldl/bQhk5O}ڝ+,|> )RAFǘ¥\ 8P z2R1= ǡda<@iKǗ/eеV*CU*&:^c_ 1 <%S-cŗ <,2+1 L \6/h4VW apG jER:QKx-XˑLdvKGRW.};]VX3 JԯH6<$ JЅwyq I`7asIZiKf[lw}8PmP+8]N;PN_ mjDBOԱѽ]; Imγ"S*u&z1| cWG5vu^ڐx%PVeQg$}0=5R@ ̚ !8l)x䨿IlzȌ)S5_ovC3C̦- {`:Rט׃>fNfPȑ%W 5 k\t%vŌŗ^ת])7 ?g +fD"Idk58'd!iwjɆz;|;[Xgnw'$)#U-*r*tSgz+Ej1ARvu%Q `܍*,olB-"wwftQVZBۮd+CfB4 G\X9 6[n\c_6_7nZ$ wJk~GA9g.HBgd /@=)% j}/VL%=Phf2х7tpPCi#DM0pOLt@^}sz1.=k[YծpO n?UG/ PO_magt0>L2;3 y]t*PE?OYd n 9uZ$12Sgm5]h<f9i }‚W]NY5`43a:2- cS2etdB9q d}#=j>;TO)tͳoҭsw5$3y:l}Р(0AZ+YimhNuǯX1Yܚ~`؀dCbaV`vNSp>P)i1qq o?\ƫ-2Hm)?,) c'I;M0viUFP\e@pW>OjҺ%cjoF58)xg@VA\f(?ѹ e2#L1?K8 l -tߌԗ=j߷qE! egr.koiNJnUT\2w23Y(̋Yr-$Tٯ:Ձ 3)΄‹8 -+",7>iEzt%4ԍ9=2lC\mՒvC3NJ "⅂[H2PU ut%alPBD<;WOOƫJM\5y.G#Q?i6Yͫ~v)qh'?_o:3B?6Af> G8L\  K8uӱ"0s`FFuKCP -F_FFs,7sHrZu:r t.Y-֔s>7#>EqY$N`O "g"`^3(Ec1\ `{.ր~ k}{ -hxgz2gnNK @٤kD[i4?Aռ+"F|f]< نG`}Őo%Uuݫ2Ty$c M:PV ^@‘ ؀m;-fWXM=+65"ǩ8Q Ie9hړz Zl*C1gTEҞub?뤗]$Q ME‰qq ʉ7Ѝ?%&&}w,b@e|b;ؖqP,#L8yXur`Z/Ť<۫^Sx /@OT׭nx4jP_P-2+G!J- m!K XPDDe;$j2f֩Tgh A.e@4p#Ea.Ey-!\u_ի`=zo2T(㰟>Zu (|'%'A=VX Fm7){bpr+bw_xNob,oUr[FQlc.p7O#V&.NFHA~P;H}䭹7[bf>d* ǘcj,=j.y3nRZbH餝#̾fYaTmHnVs+[\/zжo e>X )X$G ǻ1^4BŀTo :BPw;F7MQќ&ѝtLQPK#H|L'ʼS*d=q  tXvbaV&dT#5yCВI$I$I$I$I$A-`&_u8<s*'᪫<}KvnEz.wSQnWU3Lv[Բ݅/q׆{!&I ëedN?(lI>1BAk2v %x.ww2q$.$YVGϺ$8%ku3<ޏ`iXdLZ[p o>IR7~8}eȊߞYo_2Cms @X!9)} Y:.4{rA嘆][!M~bWV(F `&08 0i>C9ǭn|Ȼwo9y=̓(WN=\8]㵉 b!T0"vSX tt%orR\Oīyȵ (@#6ݭ T>ч'o|9< Л\U܆3ԁĜ<0VL:Q6%A(O;m4RU5P7nHIՙ/}0y:GDp]4 ^TpSW2yx~g1]fI~ nZ8&&Ng,bǠt?WfK^T)ۤrI7*el@b-%BmkD+K^{QaUs5~-By?9n\mROπ, 2\ Ny(iV;#Tᛘ4#7G`5^)bt,?fO- »q:h^TM"ו'U$.cQCHYq#V0\EPr{U1K?H%$ u))) 2]d,(փ_8(G^Oݢhr ÊEPJ.}hf&aH"zFNS^] -o*WB9Z"ꠉHPpU%9*+>n& HAq)]L5t<^x1q nk/Ȳ4U]mh49m?I6_BEjxnUy{bdǏ0cD/d4ȥ50=(`_PږDʸmӣ1Ɇu*01dnj*H ae.f2b^p0ۃ ĵ&}5tsJ*One(Fn_c^jˤUK/MbGP[ybAc'-qj#rC4?">x:} %xN`[eT..i%5ς69A+ʼn͚mi 95Lǵ(9pk5,@2oa>$pSf "(v)!03L!Zu}ZDa5:p,gQm™d5Z^mUwGn!,;Ĕ/Cj3%OmGˍ6k 7UĤCv.$R6orI1,el΋oP$˱ mV="lO/Mu|WODbnAOY w*'Xz bOHj;߉ 8g8 >B}AYt!()g:.!uʯ?gvB++~&`hλDljCͰ,Ol4]2Mjs0Rv)K48~ [b39aWY—!Bo_̬5Lo`|޲XhaރHo|ǝ{N.,K7lXO'T5{[/PjܥCf 9]>0u^`D;+"~p3=/d%TPY7 pi]mωf|'Lo}~ڸ!&B=7&Eleqk$h9pҢ}j̑xL/ sR{l\z޶Kpuc؜׺{E;<ĉ&Ɨw UԵ*wA-غ٘*aG<+?=x~&Bإq㮯W<|͍bHkS1ΩpmsDXkrא¡=8tx܌i8D8ͤD0 $;}4-l ,?z]ObxtEI`{%ӁU5U0‡CY(AesuC,/d+o*ы>L7^`CNݖcB DRddBac ´W:*ԸѝU1x,YS)FFpk˜2%RLi&h fU[T"Ӟå{EM"58YZ0gxSTFiku 5'H ~;bŏh }^$J ˯AC<n|R=S1uA6K {Z~3翻!R6'@DS@HMrBip3l Xn;݅*Ws(PXaGdOe3 M(9&@R6&a7x|L*?=Zk..e-EKe IOn^"XE8 |9R/sgdgt>fLzg'_%mxW:UQ@ig>҈w[FYD&l@wA{ƫYVF0R%+^%eH U3dORj_?3I-C\[ZߡbKׁLU/tR˸6:m]j4S@G-# dڝb9]15j!|Rfv Y$${ܶiAU!F(4Q cK:Gh8 @/kДmqg'?:nT^ Ѩ7mhr[oR؄3+1c.ٳe8E u|PȍPv#7R0?Y3Q<)V㨁EX[[L?'%HՌiQ,w,)WMs\f13CZB<}%\1O5~\d3*MȰ1,j*l0џZ35dӽ>f)q!{TgCdG*tz)-" K9񃃃D]sLHOq1U_+]Q %S MO9ܚK`jm* 0eȃgN=;e͐cO?|!M8C{]k Vb. a+ 3=ϢY}(hE\Utp+=3i[CzscD`a8gx!C/` qu8W:Q)bx95Y978(l*R6ɼ)3\[ \Ҿq#elqC$oT{<ߠ0x sS.St⏈cxx[.~FFSBیvU=*TL CP[4c]a2ؚ?1FFps#pHGna%`^AHc lcD]ܵ^zDێѷ 9vQأadD?f[9ɓ-k?rʭ) .QBF4ʀrubM+i)S.qP__r bmJtgK0KL#~hBBcg; L`E[B3*fga0Fy_y}Rc4!/glr pxrG9`K(b /0F 1s(a%OR}Y#[h da^mgOL3@䋴Rr`RHftF\qcB?[E.FS~/m@%f*.\J3 ʁAʗƺ}vpv296OUDν,g=4c)UB2mʁ&* .ѓGem)ȔzGo!#"XX9XeOMb>}Z`,/`c®AR;,~5+G4=0̎#P!NTlN7`&"ynYk{?c:0-39+iqK(Ilg & ZѬ7mqf^ Hx VM5 s3X+y׀A nR9k@x5 wH}vVB NvW(SwaTzT3>-BˣEq#^&&J&g]cCbNHjT\?-vkE:o9-_'t46 gR`sAΤ{fw$IfǤ1C`v˘ThgKY~(CHq/X;L=@A5$FW$[XI 1EDa3CՖh>^J˩eaKq; {47LR<cئ0qw$A;.qy@LC 'vPy?;}I"Mnqe/ {E’%/>~zwe&gu92v۪A Db@`i= g_>'@_aHqa ^NΊy f__U=J.kܘv7pym8isIF;/rCf$KKW198{D[Y<'韙R\ME"^Y OCSܿ۞NjvаvQN5\2b- jѯʗ#su XUZrGxiF;*ClDtR=*v3HP~z熿E;,K0*L;RFOLRyyEZ^ŴU5Z)!qlS2Eu{[):Jyc[.~k/ 25ŠiKZp:.dvV., Pc%PL`*N(T0s csCQ@fබO&A1J4څ*9|T߇cpz{>oRC"Qw*q>x)$,O.-1 LӾ4e>0{{`6${&WQޔe@(hs2ruBR+a]zyQ(dBstY+(y1;DeH(eD}/mD! @L`g䚬1s̹& @ ӵ@cw͒mcf DYHڻs7&gJ~@-Eӟ xh_Z4z`:<0e0 k1g?%Q{HH+q>Yz?U"\h3ʁiMOcۙ룣Ơ(c K x!i3S tL P4B1} Ca0$yف4t]Dj.;h#v#3Lj3 63Kvߗ;h)Ol*Nau(4^a/vc}Z4QH6DtrHsb;iS%6ާHSk:eEObNJIDu2La;̞$v`GÀö[ƴF45 e3uc?>^Qp9rs5J/l=ݢJ5E{y!3Z%g1h :' &goƽCѩFx@F146EјD_o7yϓ8l?BKqpY""8ؾb~YUk9nT2;rT]-CPz:'f@Q/? 9e&g#(8?m֬W]ِ.7 mu^Oqztn2 0CbjE&!wΒ^m'dm1d1^츌UbKS,-dξk'\zaI&MnUqHY0QmE%ω~rL kmgawP.RvQ5EG92rfUR7$ѽ -Π^ڽnH;cd#9 _]bQ$4q5gHQ3x+10˷h91il3FwBJד`r*G^y@N6n [\#:}_մP>jf(8>QN)è6Csw-ocA_AI!Vw%̓aMZ֜][IRk7gcm҄R^ZS6e  TXXC.nDP.~P^يx JK/)l< wᗐ0 bu9r8՝{z6Kld!CSf1m!HO+,(FQϊZ<[@eܹ?7Vzb`c,sC㳩N|bdz8P'Pݲ>S4:Ea|YkIp vo5Ԅ)c~RH3&a=ZuOt|K1k1a;3 E`YB)0XAnpg͵.I,\_uC-aMxfG+PД !F.wt'"0Ѩ\L6;%BORon+<9$'a  d)Gg4>:s\AP{2E *H9sna}9m47Q@:<$xI>Z!'10T?]+؏Q}`UmG)ɜ c̜2Y3"?K_.U::3dhY\.f?KId3vԝGp OHP :zCΘ~m0ش~ug'|t_^sr39au t7 'j3I?ۀ;: UU6D ]E?M/bmݍKouJPU8aaaѕ5Nm<]jTůͶD8:yf4WSզ!;NI0gNxQ; ܮwcW.bWs0V%n?|:lX.sݵ |ܡj33a#[X +g  p9“Ar_0 8ևѳT')f'T9YQsh{n /C OMM%Fn2f)j?l8͚LඉLno%>?-s|ƮSUR;&O"PKF~s?a&}qD!`5ZLP<7wNS@[##-x@1Uze`֏ 4ڶFUPzh: /Wo](AL54EM[6e_ya PV:yީUZ39`XQѾyhx ۾Jkl|עh,̢㄀yOFkCUzPy8PolMTÄkz襤9͆AU36w<+$GV֗qNj(bA K@MVnyJ̏RAܯ<JvM C?úV<h}koic1ys")$=ގsxञ 0X* n%4Ӽ#Pu}[w~bomձlWK_SnjӱC;k(̍iؙmeHVY`W {L}  adP ¨$Ztqg0PӨcOs[ӽ/-0 u2="%RssKn65nzJ0|%du66845%5 -n a/_QAeVdxzlw 39E1 9\3,wdIodt"pn@HۻqqЯu$y, BS04t.w ޴|"zrKq{ٟ>h[4Wl㲁 ِ 6+/0:e*K3^\jW@"Po/a+.&XW~khQHh^!Nre*GBWgo#4[NN7%or}0W`>w&y7)A;%=UQD JvLCLa䨴:g}F^ J!Lrbx`yד ;3R(q)Ụ̈́Rx@s2:f-|= ٷ-)cifc.̶ެT 'N{PR{̓/ћ 妼#af2JQ$gX"¬J#F{a}Z)5@9>J<0nF}Z3)9M:&a[Gw%qycW عˈEL7M-]dV9׸Aypv1c3A _ ۢ- ^)xEǯܕc0#4p"ֳK iK^l'nAt,[[cWpy&$URʏ^ӆzqm*̓Іތ/(:pv'>@u<$f8շrT<=PAZHV@#8f_%n18V+TJYGT'`}VX'YeeD>Ȕz;T8AG]FtD;LH|kaLm;>l7V:OE`b=X{beZ1\J6|>@r8+Pcŧ1ȩ/BWRzjqPAlpّ6yPEMT>t)] PQbU[.)0&eD÷8Z@C6dNxoM.â}gew ߇O\x*%Ϙ4'jꦉDZhQsr_"ICʹ,[3MtN9Fƃ>D,7SK%Ar*o 'Aiڑ{љyx"w)=A1v ohlFV7Ԯ?q˾4&ʴӒ8URF0qSǵJc]hyibiDb[^xN:ASJLWQ1p0ymtU"m4U $f6W">005TJн맱?ѿ, =5=7/26YOQxTUUʎ?$-N'c% [[~M@UXH6ҼY?t f_ t9TO$|uYKj{Z몖Yӟym2nI8gJP=p_㰢8>B0 2 GC=8o4WMzHdTC0!I:a _nA@lwr<{t zAKx ,WJѳfXin**=Ֆu D,Ӻyу5p˶Ko{%J)iCG˶D2{MX?#}_Bg ҵ!iv!z@`&JrUS_X}>@/yGB(uL  :K'jnoġc(p%LL1<3f-lǤQINz RX:gWN1 gw#0 csOpŗ/v9S9 ti69sOOl +ݛyva"fM8H oGF(1W pz0mKl5Q'^mq ~A<؏OK*E ܇ѵp]f GjR>YzQCWF 'rad!GDկ=B)\c[;_k0(5 QU8BC[!g&W`Bݲ.8F]o /| vnRTdunq i`S43G%$hdC7U:30fzΆepYg"Mx54ߋ;:Ύ5RL bt{U)aYǧwټnOw 4CݚLl?:"'o)L-dS!T|*fDDXĞSzvRZp\p]%$wD̗h'TjHxv|n1 2hgu:؜'R-8gp&e&(Wίw-lBb=;t2kC:#V YA;^k d\)UpK(ެlc.w@ѧPU`Olaһ=^h'A~q|-O afۍYt jauS2TjWplH62{1Ip瘥)2NL c~42xش!ty8g +'̦}(W6|p+7uw(~͇{^t(N e@)d1ZQ^YIOυwzU .bCeo<1JR`fÿ?o[aE>y)BiK"goƽ9(*a낏NN e~ÌeI1\{H}!&@X!|fX \F}=//J*_АepBG b% ƛ B:^4Υߜme *Ex۸@i7sЯu޸a_Ti-IlSE?O:5WʮH 箋eqP.ƛb& {{5Y?3xBJד,Tn4S0h c|/yM5&FJ`2f_}34-fCj  k:ЎN: [ohO[E출Ó.r*AdGt ybT ;W{`7!I R4?8)=;}C4_#9 c,3y6*~^L }Ÿ}5 qX=#35Vzgcn:C͋~&ޭGK`M7/EV&1 mXmjpE*,,FP~I9# LG86%-׶sPV?j: ,F4~EL@E XnYXU;ErE Z yAUŗK$I* R7nƿUL}guAp+ΐX+s,g5-]^@]&Bm*yz{z,T-!R+Q 88K5J{~z^B?!'gjĵ7J*|s0ز p?MǒKumE͡J-_+:)Ml[Ђ0,pM?(\lswZHXŢ9Ϝ `O * oqfD1Uf+k"廚?_$lJ%vLpr)1QvBUKlo,{}e쾏'wUSQWLk.$NIt%ޅ(kG4GeJx~-&HXdGt8t(9ǕD0W #TniPsF {ԕ0EWێ3/ž ?AY8XFfY\MVc:#/Dx:e fP?lC?i$3&BN+rr0Kku c 6Ek~ʍŭֈ y<z}=hׄA7s(6 |\J<ŜoD1A|8Cd#X0@Ræ!0 .޴?m_ c Bvw+(Ra$x!7C%jŽQc@E Ƙ#ൻo*BksnFhZa7A;ȡ>noB >^DWrۻ\h$"lhNW{ujhϒ1%*K4[N GuoGԎXTxUROF\.C--cRd#=K倛* nXe \NwL"F!5j|QjE43济}A8gke'Ey^/$~dJfJV`iR<:<95e_"he}j2Qz d }k\ai9'/X}İ5:qw M%;|u %/1,[L< T~~J=ʄ1FjKX&~9hQggן a//WX >?}F1B֌1W@PP&K5ߓ#-ji+9SMsW6sK0"?5 Z-[AtqB|}&{>#,J6FbW(P^@?~?.]]݀I7j/ytj$j r|Uz}_mC6tLKȲ <gd:bCKа/ĵ~P;iRډb5>g{zZ/oȅY Q?5kםM5Q'[]xD"&KzKEֈlT.b XAX:. Mja֏j&_ ,ܰE!ͱT9.͑i=JY* wD>m~K*츔~ts9 墜+HI,@g8=* YB+% ?(!BMⲋ|?בe|<ߜh3`8i)e+;GĈ )& W-nnԹmXǧo2"žh|$P1jj@ԯPC%gUʍwI0]\ڨ/}P3sx`Jw'=QXL.kvU"%SOC~]fJf F7*|m4[&Y vqN͜Q°|yF1RYIKši e$@]O` 3;>'&XBחrU9~9Q@Q> k.NajLS=I1xw\˸{h%jjV|L-_HCK m5l?d 4Z,PvSa^3aI}'f_ )㻘Off,A:>/.!"_ϪZR" Q"-5Pd7%D \[4]+drU Zl"ѓЧ.haYW(P\=>K?"ɒLAz tBRό`+j/=<TY[ʗ7G.D["ȱU2 )7@bTj.]F[QwTP0'#η^_FW&A!&DJ<ɰG'2%ͱ=rMC6cHkwgɕia2TI 7=8*.0f斣Rd ~Qy 9Smj»{f!邡iy /4ՉȪOh Y1̝!گ$15|(Wjx홫!5D군6Vͩ+}g=}4Q$ԡ\:>Ue(UΑ=Ͼ N` _PyKT,1NZprbwXxkA" .o/|`l  "%>B7Z;M2:(+79񰯋R )4c}`Lmh/6kF `ءS@6 Us{JXKe4WG0 LH(h琩F->2Y׮Dћicm7xXqJȿ$gI" g Xu75PY4}b8djJkQu~?Hohi[R9S/IE1?)@F߫) PKۑ-{VpR0 bH 3U>$wpVK^f"ͣw_RD֞u'qnJr7.V)&YCHKr1+O K-t [s:X="Px%αkkC)֝gs4#[*idR{I? Ӂ7 |D ;_T|P59 ~d "v F/@]nsΚ>|0ϠuDWVCPMĸ.㧐L|&c5lggODs(.j3vZ6WI ".6Qykf},,y8m3pAyS9_pO ,D`]cw"+siX"Q>d6JhqEq7~ U<4, NZdjz!LCky*VfsvCA9-&#xo? ?-BDW{V'S.pHH$8uxULx(, {I*q̿JDGz*iΎgQD .n}bWH7ru󡤮ę e˹S1D w5!]?cZ Eq5Xr O{NQYlIW +N8w2mdᚖahGԎ1$] +*fJ%xIθEEҭA|y }t op? Usn~p۶۩Winå}-5l }}wdiOK֫6}ۥ_n G$߷Do[[ߴkF3W{$pZ=x8y5;ͬqK!L=gAV A 6-#<~+྇qSv/ВiFD]wdM|0_x>+߱P HWBh;8ʫZlOg٤gOD.g@,:5.Ҿ-HBd|%}4:Qā*Llt_=(<ݲLZnVZK:XRASu݊IgGTUOhW͈.oےf]_Wk4̲Ps=<̹nUۥׁsy {j\'7F[TdKĵpmVC@V uG &)2$QAbsCqWÃ}i NV-BFMf~cT=17빱`!N N Fw[p\z\7al, iv/fkfJ:}{-t~WdzdXWPPHv*?5 J]l [W:IZPVn]'wONb.\,L[K=2Đ(mŏSH y;̈́-W-x.9((3MtD #f兀J)=@??YNGeF [қSBa[ ؊gl3cqyBu֜ ULQ;8S2W_7&76:G8lIȎ1K@)4ű_/Dv-~[bѥ,ξ [푸IW\k\AEUfPv|LcFµNOJK #* (1-з࿷ww7ʼnZ +0*t/~I$DË],7 ]V=pHs& k F s*idWid6\C E#3 NIG>` &W6 $t,f%Ţ+7TgŒ'vԇaY>귮ܳGPbi"Cb\ a5b<#b&hVXDJ~1^CT^3~p^`{z ϶!a߯&N>,bhrZq[I@.6^v.PQYԖ07Ql`ĭtU ,Yl<-GbT5[t$jW12gL ,[ -<h7H\Fq $)I}W0blKصA,'hEl`S!B I4뿛DU*Qxh2Tz1v蟝ae!5\c9rd~GIJjBQ.֌z3ٛF .Jj$>ֽtdb-`Ҟ̟:1\Q²[L\2v:ۿpGʪ PXz:8G50o> j%OzsO{[kHʥY[{YlCx>0i+Md%^*Z$Zw5V. !9v`0mq(3m[:q zX,xc~y@&jO+] BK0Tuvo |hXZY>cےW&qˊE47f q]$w_ He!vh(3@8 #L31C~&/f8;F/03~ " df|Uɢv\fż *5ExoiH˥+`rNd / |cԏѺ \gLq4. y۲BLwO^8^~΅1<ӧ dd (YϫUg}sw]YW,MׅVH-NZWvZ=Iן)u|$M.tiykɵZ}br*|Uf>}69o_a ê1hMZ_"hY:yV'_:^&~!HQ]` L=Nj5n2C0a25rAA#P`7iAy@'R۟JUo%!&c N֛ y;XEWBك}z}s{2[]5}es1gQ%?EPuGn5IXJ4g˟ز09Ӭ=`Zo%aLJ%/s>ҀQ; Vnp1Ja M8JNj\Hqz]Q]9{7 -.H@JL8{f%o}cVr^g `EYp;7گ5wh3"5_ ؽk0ɕZ8Mp(zWːS}1,*"gĬ E \ =YR5d#S.'U0 l1}|f~.~F z)еLZ,4*;hD0oQT&$`t ;T2ckkj?5VpOcn ʁ`,qw>ptip nb>Dd.f 5w[[/+4ht3N hpt3`in bASWxHZ+cMc.A'=L04cR_J1u?(Ja&&yvY[ @LK&j6a0>qjUm촢A~Ÿ&~4k>q$l5 ;W Ӹ\u'#r>F 6$/)IAo[ v*W|'?c!G;=Z0ǛBBjY}(3ÔLM3j[~jA@AH .ҋp Ѽ*ӮwSTt +^ʦ;-8.-mނKA5>).@0BC ŷ ⰸP5FTbr[tɭKԷXBT#, lp<5%-dG: ɴX϶Vh,I z# [h|{ hg ;vjL xqڎdt;`/ؼ*תּϜҀ`0hn̾6gn }'yb_ ?Ps|0P4ie\ zFI}N@ x}@!֣&#Nq"z(н9 ?Dp]aaE%1س ps5y'd8|nw #h#vkHM׺c/4Y? \R{E8br:2LFy?WUX@gbD_Iя85[t(u⚆@.cԲ+i(\Z"0P1d[jdxq *ВlL8FΠ8[?e*[PY0C 'aQU a!ϐ\R00lA%27ݣ!Qf'rHW_Unȱ [ "YIa/'Vc\/ٶ@bhSZ H6 Uo³2<,c&/g5 1BHk鍁T^, s3Ϯ,y_).W6jiv_q`Z" RB=3U5bBZ3t$&Y1tpL@/,)5n1|Y45޸{^/Bz1vڳWԈW]'c׉.}uRpyfBN "YZMi[.:J֬Z1(0|0,1]=/&s@rȇiL i8'$sDVж{J3evm ;#wr+JT |y=S!^X}ڽRsOD젔hPCJYXKHs3>TK^P~Qmʉ`7;1^0+W;4qW170ـXm+1Et1_>B@uH_Հ> [i2iIe;2Үԡ# x1%q6BpU!dh%;Mcm3gi|@ !jVl:&6>@ӯ 󌅑t ("QO=2|\a"[A. |x}'?rwẑ̄F\AV{U8ߪվ2p]͢uW!!c`>n laTGuϳPu˵'۸:9ў5SE=8gG*&BРorn)'ME}fmzG[89ig-L򟑮% -&rX/#+PK/2󡪴6O]H eZ?m=|#~X5:h&6/AHtuCBgHm+ٽ t뮑uzِPڕٍPg+H #h"oN5-ʛlҕ/~ԛs/nȀ#N@xX5uF0Qd jֳpJOz)} k  F:NFzX[1 ŽIIc>a/52 ytU||LM/R.zn]4 ~}YId 8FMDjem[0H,8,ZaL* zG/Da ExH+%v0s1#rhuCMDܪA{qՄ˼_gu)QecܗSɰRS*m??jC_">4R"x;$ax~ɻ`3^}%v7,]aQ\ܪe{=T)Ie\*C* _1'0s?n-n/f`kni/Ntx8'M7ըІ+ה/YCycӚ  (eB8 "+βUުOI't4Os&}/ҁS'VJ%ܬ`tZe'RS'tuePz kb'[c<;r!́W1V}3'm,͒zukmVi܏r A?ℳO8Yt$1U;aw?-/m9se#S~iwW_#ԡ#]l2 G94"툆 ͟xEV5I) N'O` {3 39C6x.LUCkKJQ}P\Yn0R*0E Na,9s2:FV?Sfq8 )h,8H^8e{c^`>%m.i/<7_ Vex؂yOdkt2,i#lȪPEYbZ3)u5:o~k4z v'“b|Ѝ0tc;w{V&tU0g ʐ]Yxf+ʧ5λ jLOmv9{KI"벆#bٝH|rX6_%v'Tab⁻eՐ"s[e zio0aU@ŕ#B\y`L r'AʶĮx]PJ.S˦:ńaퟫ^9(~zny1 5~3(ܫ9ad]ը>"-g@cۗ0˿9<ԇqs+txм yo:Lg?uaޡnvm!IƓģr閙>x{(_M7'@ݙX,[m/֩}Z=Z2ǯKy>3k;{46xB/F}mG;F}Pkhd:1lUhD| q+SҾ ׹p n;nudH՘0䵗(sί-hoK+ypmUKX:U7.<DžndG/yNBx 3>jg2mAGsK\Eo1ݟnoio/yͲ;9%|v==+OLky>$-Tuv ~$ 1IrڃQE{6(U wUL~jN l7c/`'bmE/H.MNnѶ/5s_è%ƿٗ yz;Eqs3@T# ױwiҘ͖mO [ouZ6u\Tþ4vr>-u:]SEo߬qD< [[v^z~#mty,vXƮ&u}W_I&PҧBٱVUYg*z^˓!bQȫq#=)L^?[1q#SIPvn.$AϒCWRb4YCAՄWý"n*J*YT7 ϐѐ1@;MGpJyɷ3|Bעg-$'2ǮqQ7l rUG$9 7wCç?G2  Ybas[{J/7H  ?ϗru܋,{Z)/ůyʕ%h4cLrumcV%Y6gL5)iR8In}jŲ2¨ICO GbXd6wq ֛ĨD:^e@Gf!&;X.Vn1|iqЋ戒WUq32mi0DZk{8@=Qz_t"5ݚX4;%7sFG ]Ww"՟ʠ4bzcJ5)?X-ĺp>.KOf}@,5 D'LO G]6OOr}wLw9֮TGSd&)+O"6mRG8BAfͶJ^꺉oǺXA)R!rGVc' [^ܴ,Q/K o҃պ(ȃeeqȀU=ixjB^[6I^Y[0]9SX"' ǂ`Jv.X3Z9]7ȴ$* VIsUB}<@%~d%% xq-[j0oLĘJ,G|@xAjt;NJZ(!!5xl斘fAйn6B[Fo9c4Fx?z W]nVE(A5iv '/O?Sز{,Reկ ONL ^ ^f}M- lC0lD "L9+%JPN;R̉S!UlG%DI5vD +-{)KY58]Us|=U/Mj`)1aa-+Sy:,y -,y@uI|㰳HSӑXTbԴ 5J%'J87vp {Ck& 9ϸ߯w|DW #.Xu񈾆-G?v4]H@|;1Z1kPpn&=hXCOCmbڠ0+?XX.lYAɕ;>?A8radz3SDX9acb8^$f(GxG0pHJŷ):ؼBN.]z rV#r{ qsxP8 $ i. c+V%L;Y2攘wYvu2Tv kUsKIoZ JMO  "At,=n-w'1Gql%sȆ'BM hAл#o-ƋcV 1Nq?ϔi:$VȖal9[]G$8aO*W4)fOV=# gN`jrQ^0-?fCyp|N_`&Uؗƪgֱ|{}:\{.LR!暩`~Ѕ^7۷"]x*>(F޵wF|6#$4:ȝMfk$?&Re#tUNY*{%`zk HɄ:\ʜsE]knݫ D"/P|Xnр-]^F &/TKe ,2Ǚy>֝`Hmԗ_Q5ݠ˪ký-~L PȇE.)uqN1iu&9h8ź&}9,:kAtlPpGoh6B3L2K2+W&TdE^To|)¯σW:^ca ;p_D3Æ) C  Kgj)zcH ΄`%g#,dEw{D> 6%ӽ3p̊g~7EۅĦYb"+?VlYf6|)۔Fiv+6< Yt5%^r[ M9 5>xkTCdm]2֞qicavXsz.w!#C!#\a+,_wj'btYkn=~֩tqdcȯxqlȮzXo $F 2>r`\zVs#؎Õx655~RT)ŭh@)Y)\yqMiByOX,<<\[聾,2J()+Z>6_QӘɶ߀0#cU~\,@/?Ykp7?q{,Vԩ;@ +AJxQ{ijr *u.@OVCm1:_ ^Uwb2IMۋ,zNAܐ2F)j3Y4uIn oD3 8w3HU&ٽYvP.c3a?  ,inw N;A,jDb2t^lC V$9Jso9.J2Wߣ3PVŶXn;m8c[$ї= 6_T͢ӁnV;d8(dP& t>_wtt*,׋\8U:B;?Dd~}w5D,Pvgw8 (r&nUԊ4&&3ޤYae\//~ӸK9nlMոoo'7M-HEV=XtB> 7ʏ=vMix1=" C1s`rʜU8[:3!1 cѢT hX*!`(du|@Agn*`_އ/$[#%fe2ڈ3RRPޜ PG9˵d(qa+=N7z疚fE3nׇ)pd&xQ= Tur–!3 FqEQi)^U[Co=șv80Vno RJx8R"PxbhWұ ]h>QQl]@52d!Í#N;߉+~aޕK즾iX-PBF[[я k2:sK`퍸 Rví4( zԆlDcBۊ1^sy7+R 8kNa;?V3=0{=W$$wa ?Ã᫂ o9 gOIA<Ļ3]!.e"D&4T>@mT /w1qF7s?! wHa%nժRϙ7L4;0*aZ& 'l֢uiKh*egaM.9j*}h]X;)^A[jKa9iX4 05TQ^JB1s¾c3uYNUJN}'|={ŵ_q-Aﯖ˾Olp"I6h#8U{›vO#Z`[2~߸;_ tຈET׻zaдsP8,mG E6q9f7Z dD @-% 4:8Ҽ3Xfpb>1! άt mr_FuYƐ96ہ,ߢ^x}0,UH4DR2R;O !xoڴ$>!fS (z7A'Y$vRҍ .:1{S5 PxrZm"u|V& 1EiDSD.og@^dBۣ)9Mm$YQnmyS;bٕtϓPY}yshCi{trP~DCJ*cZ*!1 jz*:Axv|c(jɱ@0tI)i7N|*FC'pxB59Q2x#kA0!VP9E\^Ш>!`#jlqSSκ]k>3gR0b X}Ӛ_K5v#=*䀻d[? fV궿VUUԟ?VծGog:Zހk uMP~bu߫t?V~N +_Ծ~Uz_?7+W_l$4vaRȄ"+Qd8P|<.rI!jŋ[~(>F3W{$pZ=x8ztqbL/okK1ܼ>V8KHNĠP;`;A|'5%9 k)4$#q^qZ c:&jl9rݸ2~E IӾf}dtN5on k}!wi>#զ4D~A±5-d$|/g|DJS@X#4E BL +[TbYL̓g{ѩ.Dͽg?@nh:I0֒ 51{/j1U nVL8ᅒ<ꅚ^Р RzTdX1+ ؿV9hTԝUW$5|lx}Ea #`+y:E%?:hbyug_BE^Dfb+93a$ l1.]¹@w_Cn3#HeH?!NħA͇f.?I7*$xB ČeĚrGc05'援e vfrs{4L]gk_(k r.-KIceF|J3,;dټD(DgJN⹕rwHoSbPTSIvO<rdS.b~giܬacIyT~/AグP=A~>]茒sTipWSÐy?4 r:pVfߗOյm]i|ǥ/s2[W͋_napDF.7=^̒@߉/*nuʘu¨,^ԫ?!YR."TqR>pE׼g[B<^%b#[KdCl->:\K2s5Ѡ>O#% [-Es@ y/G^𷩠vJ7ChBepŔH|@\Q7m>8_Y2Ň[^);Q~>1v4&E W&L>tN 䍵."{&Z"N5w#`;InĴ' ܕKQTtZ[SY pZTK5TTB'aZ \97)u-[ gR 1e¼@d9R>aZvtʪar1S,[ONMva;Tpg>0z {.6ѥ̲-Kf`Wim:%{]cp:C :DO M*L}ۀGK('y Ik^闺F=.H^ ^*^c(aFL ]wn/v 4w*^ l{l\#ST).3--Q-qh:B=2LMHE\دۏ}N3GێDW9$e|~8IBV3칔P4WZz9jWJ$dgP4ڷU *$= hZ$f7F* nf1 ,'b\̭m:eB#G/|_뒿";UYן2j(!ގ\T&U1"/g㣵*#ڞGYؾKc*4??d,o,`@R7E}R\^ZE6cGsK·B/(@y{[y?Bކ9$0L* O`nPl(X(1]zoF%lWّS7#B4λ * k;4l,#uW3'֫4n"];*dÔ)HM=3hrQZcMܠ3T@Hȵe&ј$#TC4zI~&W7kr>jQ3{@Gd'ׄ{ᙑG }hp^#K|i ^.ⅺ0}v902M#}PC٬%Tx@/si\Fa:Z_%X R%bj!}Cn.]jN =zځa{ۥ9XWt;¦PyI3֕ɉ,r:Ҷ6dfCu[M!.@LrOϨz_r0s~\ JPU[eMFgkw"]zJ:YZJHZ y!F'.B:"dY}*Mɧ'N]~[MNVVl!C~o'&g|-?8Tת 2<ڀ^2e%(qoJVVԺeDuI`M8qX70GܙYu 4U!5t R(F:4g9[QAls_Qs_hrk' S\ooα{m*m1N3`x_!:Q:/_&tsl.keNQ'_7ٟ EUc~W,B>`!jȬ,Ax<Ļ VPʢTw` ;@0~-l5vɊ|󵳎WӯqsTd-6eBqF5] bU##D?%AULeM:LEwEo1! 7в˳15[ TfE8M[$`$o,{ UW/;: k`? Kf?y[ nh 6$,A>0K)8Oi*ؿC8B1{}+N+[G`c5썦}8I~%,wpIn/T_le|ȋt#K'^ңU R_9*ᅝ(GTf cAs4;{ &Jg6 ;䞆򣒦~]ngh3}@cN\鷯ٝ|S fKԆl!2;O@* 6Re%H<c%Gl@][GVbSRev*QFWv=Õ1_0H1s{E! y#km \6͕F RAm0X)}!H',:bh"tDm,6@ՠJmH7sکmT3-ڳjwv(_g1HeSF[ꋯoι|/dLtrDdgBp'rU$UI\H?zه$\0Vˤ] VgJ}yHDJO}qoQ/`Jг[ tTHOkʭ` +P!e%pQhCeu2_mZ.r8 8HJO%$ȻtuCBgHm+ٽ t뮑u{NT77!ȭ k6T94`yd`zFW0>HCk&pLucBP{& ZYvZ5b%7V"T' A0!uXU(Eƒ0qQVIl&4nu ]`a`80yjM9&]Ï[=4#&!lVKaQZCà`AT%&:iaTȟPcXVPM\J&mܗ:&y*(a_to;HGry eIhGuJ\ ~Iw4[EBMT"ӛle\xbku3&9ZOѪoQa/Az.ӟ{0:RaH7;)~Wn:e%\GHC~Fm8B(1XEk箂ܻpVp76"Z#FuOú9D&pQ8!'0GD@=21ӛr̋R"*D;$S.9j G[q i4*P&S`I88f8/SQSɠIIO!k]뺪!N0L b1-+-&RxD60ɭQzu4^ JrSu4і$hti<v`9ǛH חo܊~LS<,]mk" Jv8Z KΧhYejK9dU鳮4=lٸsOh-Z:r\E//M9BTPC,):5_K@g2M~}d bCW66Lold[xmkM57t *0?xb*u9}Nt D\8cϽT"W*O)m  ?:39Zg Ϯ>M^v"Vhz䦣 E3l}w֚gjbqB;LCtP˭qS94c]>}=} *f>y`yhO{Mg5'쫐M^'.h5xJ&L_Wuփg7XnQZ"9=Z0C"XO&󱼶n :K 8Z@X+`gL˜uH"ZWCg60͍s8lVN%;Pa36P{J_MwdM(dg?yE.uZ!"³@6gLgS}fO*$sD>\HOo#AL~ `ASL$BCn"#1wUou{[ ~G>(59Y%}Q>8 Q'G%6[`HNDu V"Rq!LkrWkE:d0$t#4˚l7&+~|ε:‹{Xtc,Iȏ~YR|vkq¦w}@!J8]=(gK@ú3]vg#u ͏U3 "A~Ti;$ӿ8`R kAOrRUqBփAuOW|bp+$^0cz^ me7,9a95xԋiM柴A*üwsQΩ"u29\QhO}ܟo잧H2ǘX["(~%Y1:]:-7x$QΎ dT1myʧm#Ze)Q)kv2?µqFI3<3 nzclZws-)ql 4@Q&u@PSzV=ؾ:3<6}D郉o_^@K7|Dy cBꆎ JQ^fW8{ysNR?s{U&fw1{ߑJ̹rjBd4É˦VDm'<.ej)Mj2G&%0w2&B 6Qvq~6&ޮ,EW;v05#WI~v!fZ ?ӭ7.mginLmpgiYWVg4 C `?]駣ZMM{$w"LW@en&^eoe^C89KFLNAA;جc*5FqJáx2qdB˸W5x]K 퐒_C/O>)A~R9Z7OTb9Z#Y)ԺEfoI~j&^C 9˶WC'ʔCy!lwU ǖMhT$h5r-fL~XRٹHTqٸ2wdGe|$Dk_!RDMM`[-a=Nh5<Є xX'[`..f٤# y2Ni HTi ql\Yʫ'ej.]m =N״cI" Q+p;(b[^|db΢~f>)\YNp]oT&)} q($(rT1` رD1hGDF Mu4/d20)bC)~M[CGCؗҫr.l @g{`gۗ[/ŒfxO_d>8^pIۛ?茺o#N$B vh xfz}%7x[ٌa:(]0y~ppq˝bDtvq̎2Hc F6޹k)g#@\f7Y̐#HGueV }n2/,Cb&}k{& Q孛‡x;+ۈws2"~(1g3{):X6am݉IJ(i}`wgV7:{`:6?6b]Qov08nz5'RH~8S^eP~hD=pkЅ74Lcg .ID1uV.ZZu&2NW [1|(6#n:z%ZJ˯ުӆ832\!j|fν66=f3TғEd>!ZoX\ FR3_RrDT9cοHb/(gX c0>Ġ1Hz7?]UFM ^fhS.<Լi?]P݀L+XS]m/#smsJ}ЫoEan*\MoxQ`@d`,CL=TD[^tMv~jFD"[CMGN[_r8 揻J$_VR1#7c8EH/Ol$FMn)/WPMMZ\}w8ƹFZdLgdInYdZ>CP!GXC]\8?\@'>ŷ0Vb1RADzk:i1}6}Yd?KҤ$dde7 ;\}pP9 YiVL"\r]{}JayK6]_&{[fլ@-j];ڛVc$UYy)GK\dq ẛ鎞">MY~םgeY[3PNƟ- 2 ռY=TrXj> % G7ґy/'\QC_e{ 9=`?(  ba ;%29#-yd[ÃtpY$r+|ԛ5~]=&ʏm }]&7?j(fZD^O&kG%ûu#`o<05*guZp_˽tbȧE|=ϳjl~g^5`TB3h0"8#>s HV#jH].K8>86rXI2}ÓH>"&dqI/ SbIcH1o>WxqT:?ykY(ۼq$/ي,XSvָr(5)tqa)>߫WbAIur !*ivN:> XOgIjar6L/~[V?VLWNu87EV?V:m[+^?V~ ~U?Ի]jO49o/le4O[wЯ^w߾{r@Wh)N#+&*[ˈ5UhLph3d7&Rъp!Ƌ[~(>F3W{$pZ=x8y٭#Apa ulBS0-M6KD]Xu1[=77lzf%"F 1s$%Zp ek,AS:چKa7 #Y=! #ڛy"8ڏcÔ'90. _^ItM=3YlJ=bgM,iaPZ#k#":J*7Ty.l՗,rXKn[(>t7}5f@!(UV``z(sVJJgэ_GFy5ϲmY삟 dLiRQM]^-9}iQ Բqtnľ|(vd8tN 䍵."?Q0#|^:Jz35BƎ;p>}91s(_+# z%Qӯa}Ҵ5mX@ ̍x87sc>^ nwMTv[2>Q&P"Qι3y4XN[*i8Ry8~d "2-1KwEW;`][S`h9ioqϗ++cN;L~B9T`'n@x^ފADh#Qt-w9`CQ]Fyym]#aL|r=ˆ&VVz,ܖs{-O9$_b?ɚ _7o#mot1~I\3LopR]Ƴ`1+jJ82;^Pd=wרFe՛vCAДXBJLCM K &8kL5Zk8cBM oQD4~V{4Se>$0dKg %EޱqFԓJ_t$C5@4XY'}>G.JjcFkSMH3p ֍89X1_P~ֿ!ٓc@GG *HN+W[kbh:‰~AL\U6qdoŭw 40mx_.p1%T󱞔I33Ǎ /,Oa<AF3.'Y_Dӎ\j##g~Y2G*:1#,v)=բ oBphMѱ p[oGy`헏mpBsΫl/!=B̈}Sm1%]셃l$^R4VDw[+`\a[myg>Si_Army21W|?fSȌ>&KݾifF1>(L94fZG 6lRPĆD ]5(ʈE˫aυő(P5V Z,\WbꛚƝhI4zf8V$Me#Pk-%W_P1WJSežAC?cϋ#Bƾ1h#20FڤOxS^d-p2So)z ɳ+ghh4U, [cvHMܐN=ST | C m1ԧX|PXAlcɩWcjd)o#Y,#s:ECD\ANe04;&{ƌfY#I7uM[Wy`UxA`^B\͏G~Dw. D8 Y_d P*o`XZscN}F Sl։ÚVPc"9:D#IQsfxLހs}5%JŔj r-w#F4 =)=3%( %Y&V:if9j`M 8N AG O2MŠc`L|b1R P;iHJ$[j^V4a0kr;- ٴWHr>EX|4.^M^$G0jZzXwc 5 (O1Œj6#vѰ 1Jh׉%]kL~ *kͿ$owIm.)_LRNNL G3SߺbJ6bѨ D*pw)V'̈́cR1cR& lwLs߂>2Z y!F'.B:"dY}*Mɧ&4h?# AεVBӀ᠒4$W~$򕗏Tbis* D|rS2^Q"; n\V9zDgGUx^<1ݙ:kdκH60(-b/ YMɵFGre%&pN!It@s*WAf}cSP.O/_&tsl.5~$ҡ @yAa VCߖ#!ɬ,Ax<Ļ VPʢTw` ;@0~-l5vɊ|󵳎WӯqsqL緆ƚÿ[y :Ԁ0_IzZlRw40 QoԢLҁ1RV%þ0\y.V20]Xv3̇:Y@]#GMf7Yz!W2IխF}@sG}~S@A:$.AiN+8Xc濈߭5훾3{ n u~YNK|Fz˚HAӒ^#z!coֈ\{-#&d Xp7(4c%r[~sN}.fZ2Q."$f̫u{\q99Z2P윾fSLq3kB1 qw^w=5p5qi}x2)tS @UXy@GEHwЯ(Mg(0y)wR[T&=m`5l0WZϦI4_;ioٝ:S[88)[)uD]jp*2QF߸FQY R,ᑊ?G8`rXebD['4gEP^.97E~i6 ! tK ƳY`dXM#'2{[YqAT\绅|ͲT#,fdfX'-}Ў<)Z9PT˴c@M1DՆ]K&B8&/?+!e%pQh1@juCX.UAzHtuCBgp_4boq4BX^{=@QDZ@A<( Au€T1sY31|[ 4P1i;.3P{Wm{Ij#ɋH:elmX"JB {kHyiUz+ + Y8 ~RtnoІlè_8a{i| @,r|uqzVXWFR Nط_ˬՋ@Z4ԫ%B-6OzJTa%^n>SsA5#e ݂uٰ s>n|qPC7ʬdm4} d.^aѣtLF4j%Q[?Dhg:|պ̭Ʀ*N/[Vli+`)Uzitԥ)i! W,ƒJvFg^i`Hi/UZ 7Ŏ&&"ZK̾[0)Lk:<ٕzt ra}$^3ހco/=*4usқK<@ԛ9]?`tLSh!#*"̔$V#(m87_k1# $tsU1-P؞) dz[uE/ݧƬ r/\9ޞW&-gfwD,ci_D2.|"1-ZZ?yQjWj'p-P{ѠGADeXsKB=$}mb],z, wȘ+vcZY|z0E豰YBj8wn\T^+MwO B.-

䖚:w(N r}0G7\GX\tk}v/ _Y_y)J~a)lNZ3P@1.2p\}0fS PLa6]DZƃux*&0Gɧ>wYGTJz~<=^Pǽ9:N)c!65A=NQ5K)Jb_C9ieKYMyޑ?|3[dw626?·ج[AN]J0hf"V|p$['MZShc]ZcyvH׍C(T1x /FlU>Ea]jG'A93 mIP j(^L$T7i4pow7זpm1lWiZϠ1qL"c2Ma>+0'KsY$j'p\YY |1?GcXDS#+P-;g&[%?[dЁPP( *2՚v #`K( QpQ۩>IRtNWڔigګ5i~NWQ~Y6TyiNf{ܼ#:Ch`"6^@1-8AlDO3{I?m .n2.l 0"/)SI b1Ί`iHWYp|8ʀ`] ۯ"KuG=~㫧࡯4gX\jq'Zwx(ꝕlS$e"I9DXeB.. (}H"_$̨x{Í.얙~7jT rt|_Vsf0? Ck~!u~;2,`t~ӵm1ۿ", 7+ 9<2h{c]u;G(':/Ia5[eG_dd6>^ƨCʍN]lsvIH:DhֶcC2Iܓdy>ASEm< X^!DfbѶb&&5`CżmeG"Q% $>gbԞ>?&-@8xV5lT@NL-]Zc^qh)C-:=_e$,mx&y ual?C+kxT˜9v~]|3s+ i %Śyw0/(=N*gxO^?xȐ(E{"9w[2@mW&A2˻('VDz0,0ݜc7w8JXg`7qάr2*ʒ6g?}N8i1Hʬ^Y"N xiH,8c. ^^mG8)ꬻ^V@z~`x!]P%j!"5s ͚rx]@oE8(08enW%F=2C=?y$udr3-b9r?9BMIFwjZ~It#i.3bE,\NidJ3A{p3H\mSd1GKa{-M|OV*W~&-PSGJwnZ ."FʾZŕݏK .N"ETeɈS౒K<>;YYt =?lfD%!;8~À6 _ rppkt]J{߱_tH {y\x0MF:*!R<,T@G>v$B5c>obh^5 KyD߭HdO?Zr,םg gR<09#2,˦CG @?L H&-$zS*|NCXR#݉V.yx?A65=7ɢXU y&v|\Ťd2V66@&`>-)5ߖdӮ!KC^*UgH"wi˧baVl4Q?g ]!렕6/PܟhC,2ǘX[" adtZ]]Σ5+üS} w-r>GVN03_$wxqCC5c.QiGC KWu⅑Eűu}OERrCWT#lH+u^67d+ykR"d)D5Y&2&ᕄHބ f!5BS1}a|tRX8 /E%;^WLҩǣC4C_ޗaWԼ 6;:1{dT@{laγ" UM0g'ChC-_(a FWx;?_BҲڭuc)" B!#gf伬B6NfA!"_ MՁ4bl_#aftzke̙aoZ\ !Q'C'ʕEl,=xJn@^w8&d|[/ dѲc*dNy{~Z̫VV {eS7 ,#JP+o(k(E&ҔNwN* {潼ƹEP{?9 ѝBN\`h{,RZjf^./vWpUc3.ݖ=,CʶJ/"T,I.N)E6*03,$".Qt)\mF%yg0!2qO-f?te4*QNE[ڤ>l+1.&T=%cVWaAC8gL]Yj{r^ylZ"y%(uWՆ*ݺUS!,tisYpi O]f8uT*CY00'8s@}m㝧|Yت>Z:}!a/DW>'x} jձnWDvI8B[KĹe+•32&\A'pwG`cх6H,@vUQ/-tv ZY?x~ İc| c34[G(PcЦzR]w1Md#k?|x02N.|XQbs@鲘B~@U@fDPj'#7R ֈCp=!Ӝl[{k:@ٌ8v{"C\a|6\7 fzsYu?;d(Ti|9&Mzn3bK7fP}h+}D@ku/Q<jj*&Zfq<1r?H?`h sН+OՑgͿ11O1D#~i=wEu^IEvgkmp~y" NY`l%pu8'gېfEQY 2{ +,w i4E|'prT 0|'.c[!^7]?7YQ-+Zª,T/ݢو\(rj&EÎqfԐ/1}u+lLĒC ~@# S={Ku^Q6^[yK/|Vg%ξ=a|9(*'$=@-jiQ"u8g;i*P+*y.$ެI@ 'tϥnkE ]ft0/Uh/6hN{ |ʶ5h|M "r ~qݙCt &'l~=wK`5bX'%@Kz!6Lx9ZK&a["} |}+ͦXU'TF#NI4l1=+nXk ?n&r՗jeڜZ?}TNdy<38CH 8ax>c܋#{#ZN2)CT"OF!Yt]&g/#kZ68-kV4QmWw1[Y3:z(\QۻF߈I TGl-h =oP:qȆ`A¡^H)9]> _NܜN"eD4Z۞ӧ Atx_ ]P_m/~-6=nH\#\s*O€DXǯ7 ?oVfY{`@kS3Wr) *'嘔5v69YGFt7{mhS_t~ѯz_UM}Chz_PKw#o_Y~-i_ZlߴO E3 ϳsOY !jK #w"L{A5eZ km5rI0:&a}N8E`O+ԶgNxVaIh]emx`S; EQ2f}$YfEiuBX*ᐞv}ʿ$V 'Ѫ&`3\^&Ɵz褩#1M68ZI8w]%NN;wFWܤBV 5f&}'BD'8rب_aH!Պ̠qs7Mb|7L;I 88y^CKɻkBU虒N\>*+9 #H a ؽ|ЍĢLޑM3p ɺO -OM`D Tb_՗Sjd<܅e%|oM[@C2OSq^lZV4km+?d0ib> fGxT$ú{eT 4qy-}xq=EȴyEQH5!s# 1>%bŲz;![&~\&HpDu=qvP*`ݑr^/h ImCdp)KuhۋPA8ue7"h9$EF;$j'˯+_ei6[mjdԡJjW5$n 5}*(m*kXmkԍ4O C$~%j@Hu'oq/q\{?@1z._\"P 'Y톡|(Ec#ԏ\uIO&)i;w IΦPov pY`{kYw{Yݍ\!~k@`\-edVj6d&+VߙݝrPܫ'b"4F!X5\mi"9A+XwR\ 1Ym /& ɏrY2GlreSBݨ )Lq#lϖN>7rm;fng>YS82u('eT$ QDpOʅً[İYܣvm,#!fQ y>"([' ޭs srw&]5#Oɻx⦾o-F+=^[Y{R/ .Л]U\\M[OAuQkt*gi,>r? 6ɶ΁>騬,=|%Tkqr 4J='FDM}g1XIGټUd?)P9\u11Z7e1p[UD 9O`H;"də[Q>+RV(t v46cz-1brpJ7ok=K=P%ɬ0XU.nKuas3d͑նʞD0X=_{BƈTq9dS`M{Ǽ/8y#r;n}hMAK\-_O nFz ,"42D;9=Xr [']x)[֋QH$.C ϩfH On(I m(lUX41+{SY.}zRIRF2F>HSz "u5u$$,,45 r`Ϫ$1Nm^K+2_6՛>72I]מo;cY}px KE4</9@JoFXz6p %DNmev%W@ P)GՉ/!$ L}gzȟ9~P#GSԲ\M˖O=UX`2c OkIJ,:81?V(}4ا~˳ީ]7{f[pְ})_%Y47_2 ˛ila<ce{=m 8 +ƧnWd8[|MyEV*3-lulf!K Pi1oB]8SzC[DL" mUqpme{]+%X@c<hWHN폒(F^t$CE N$ӸljSczͥs'mMR;cک[wQS I,"yeڛ?iy 2]#9/b9Dw~ǽڛ$Je9(DA^;oq$ҟ}%uQZ,ɹ\@LmM"5m8ggj^j̀i a? |ssnGύZĦ=ZPq[G˜ĝQ F|:Fׯ1I.q^MH=\P2Ww <_ vNMF-#{i7ctYGsLV-/P\Lld{\?\,裥'!Gt䥏 M8&CĠc\VM@qH6o~]J@RQǐjsJljf;e;n'Mw< &myS\t!n9+a %${Eܜ^%:ɜʛIObUVq֚~)@hU|(5gaGE+H<7%>>E %eU"U_S5ete>0*s"bdu+z sY;LEVXd&kc 0YۥsqAB/*8"}NRD};s)Ncf H-ة ͤe)LRgӚ2tqvxx^ i;M~nsbJ3Tځ5Z HUY`tãeQS,5[.KIUj0b͊] v~S횧:..1% |Ԛhhck"ʹ4v -]C0ݜƴig5!b-1@\W ,K=D `{2Kݕ۠ē,XMgdn&qhL6{q" 4o*ז`VGN iSa?1m+o+76 Awgx?M Թ@51ZƐFgNb tP͉7;W5mYF06\du|$3EPNhhiuGWL6e֬ ||B#eN}(r{+9HmR{oV13Y&(1p5wc%}24^?$*M6? &'J*h_L;yK7+*2RE G=G=uVf"=u<[j,翚h>[x8Rix] y_l`S;wbF.^L~kGli<м*!!cQ&ՋJTxђ^b> qn0GKjG=Nf Xido;JukK܎ 8Vsǒ:-oXy L: y-c;QD9?;/5Z`S?G] A:+*:;%UIMq X8F{7LO9!4 .vJA|=NL #ɘ-,z~ϗ=E`^fژ~yrסȖ%';+2 GRֵ. UP5R.z>C$W.~<HP! K;@Qw]p{}SeicnV Bqutim-0.2.0/icons/qutim_64.png0000644000175000017500000001542311236355476017626 0ustar euroelessareuroelessarPNG  IHDR@@iq OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME3k(EIDATxy|Vՙǿ]ƾE@X7ʸa?юNtfZڎ:ł}X['"ʢb 1pɻ{{7 %A=<{ys C;_N)up0xxDJ/,H)_@)up'pRv.y %SH)MQ<Ӳs])鷚P 3&rG PJi`Tv+so5t&z0&L+P^`lRJҁ?ò4O "Dat3&ttsi̟QkR?|ePJk}ū{ۓ<6т " 4Mp2iLWA/I)9PJ} _+Z0z aVM7фNLk7Ef3IJ@)U ew~V4 [A 0<3I');x*t,RR/M,Y[ѬnŅ-.4v;B\SJ)?àR(߾7?[ah #B7A4ytgn#ɗHf #Œ y@a| 4M?8?k:2v]ĤA!ORT]5ZY|'v%ṾayThnN|M`}[R?.BSnn~ׅ{;ҜAp0Є 86-gpq`ra@)u^sJK{,Y-O0 yML^AW۩*DSБrؓHzऻ8sxjyv2)$.0';g;.nhb@!4CYVQ#Ξ:Zƌ;ޣo6:CV)D\92ꤔ'+I3wFth^ڬT?H~1m_ĉzd2ҥKVq" T'O1wB.8^JVPJ^%Ų7wђ1VM;s\͈0~yfλhqzRo?p2$4.Nq彝 a֭$-X?wܞʪtS `HIYyB6?J{ϾY5u@Ӱsks,:%_K.> ;3:FQTeG}}=O؎00y]EW*wdp[^5/&-`L>d*beK9۶m?X6vך6x fk@pI\\4DFJmw篫[9rFa@4-8݌=/'NWL,ld^R }+-*k\y ?FG{{^iûrmwpェNb4#c:Mq͹`R,jP)5&Zފ"Vuٹ'&NdT2x x)9qL*ze֮[Oz3%#1"%XEX 3R0^s$8«jߗR~/rEx撅H(ai~jjjp͛7 H88N:cqvq)^t)< U"D8fQpfA =X%j4B".!q/> ;tL*N'qmۏ.VNh3g$H 9i,\wbဉ-(,2a8?ς1x*VxJ$X6@Q5zHz$=E&OǀU`3U $yOSEܿQk)P!VA)o2mG^|b"X>PHŃ1 Hw]iЄlY~ P!\BmA'ũJxukh-8۫oѯBp7/s'JqM̯hz<ҡF(FxVa%F=E-ç'ŲUMY]F(f b`*tcP.&M:f6pld7PċMxkj8ult˿rhL*UI,cÆ \iB4ӆjFcE{/? ?P;2ʛ;RMb}1o-J:Fۖ ;/NIi) y&<3GEzfՑ;{Kt( ;5Z7e=wW%hJ"c= !@hB\ SpՌrFWz^<LJw@{R?ι"f~z\u\6fT0,^?}_'q$>{~藩:w̛^Π@ϋM|HJyػĔRel9iySEo_R¼ ̞WwwK)_XRj2c_mDXL3 2.-$Kx_dWJ3;iܳa4c=^и2PAa xLJӖѠɹSYB!e\xl9@/\])Z VMχcQy+8oZ 7K)_:e z8iKxN VIB+Ooeu3  شsW.\9iROIxW|_7OR1C";ww]YU6ѻ_u|c@D_۸ۖlFD2*Y՜4gW ,F1`L(~.޻m̴\}Rz{X %K @ xamgNd0IK| ,bd?aůƮ$w\J_#i?yIENDB`qutim-0.2.0/icons/jabber/0000755000175000017500000000000011273100754016654 5ustar euroelessareuroelessarqutim-0.2.0/icons/jabber/unknown.png0000644000175000017500000000133311236355476021075 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME";1z[IDAT8ˍOhAƿM4 HA[jE=WOZ)E"xT7f0}@@8pHRJ EH)a&q# -[5鑾*\u$Iض Br[˝;!v_/F{>?x߇GCۀ]@R{G {*E(CTXp,:0t_@ec ;gUY6\ZG ֙(tH$\m<'툧8G0+O>/rEܱ}'""wǻԜ@y{*cyPzPim/=$־hQo=iᎶqU(adu2]ՅI9.W0wv+f6'\2u12SǯSYl۔CI) >[{{0BM^gE`kS&HN-JOO_"Yϓ~ cZ gT31S]sb2ǻWsY_aZq*+H:6E864 M[o:;)Xx;<&7 ܻ5w#n fg cJW xIENDB`qutim-0.2.0/icons/jabber/dnd.png0000644000175000017500000000153611236355476020150 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIMEIDAT8}]Hi38iDiS LdAt!5M. ]TaE]A+[KҶ85j`6Tk48L~<]չ;s~9Roצe <_8l!}h'R ǽ pllOزȢ9Q\/aҞœmȜ[:(pg`z%q|tu'THϙ+HkS ֢pr 鉓K"} %+WGpnh9Z@tN`~ beUх@@Jǃ&pYҿWY_->=ťok~a,Q\Q52 nD{O|O DoGM ;~љ9GE&٫Q T}\nk@8롳w6Ր_T$$jaaTEĎѫZO;eS%pnAi8ӘwP#E["#D/)A&!Nu0V[RJIS8ҡGR 8Z vk7dlׇ 3|B(j%zKio/SIzpL<&d}]`0hD"C=YXWUiN0c1N*{vNE@j1 ]8::k(! IENDB`qutim-0.2.0/icons/jabber/online.png0000644000175000017500000000132311236355476020661 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIMEbSIDAT8ˍKQ{369&2H*$\(Q@ZD"ZDhբb'd 43ǽmTIgs9·0ưC@+'sYg*hgX5Hϻ[otm8蔟ŗ)>?nq" OC shxErdF,4du^Ǒ$P$ڔAÝV&J,6, Ȃc؇U *\0RR~ Xt¬B-Zb٤5Id0?󘔏I;R!No ^+UR)+#9\_ l4;,!{-{'70tʝ@o#GQjI Fd)7[j:t^qo4v-E۰jP 1 7s\{9_Hݧƫ*Kj_+OK2wcY¸wx tżc }NzV$;KLeT*Mė3[˟u 1f3:::ﻅG.tOm0IENDB`qutim-0.2.0/icons/jabber/invisible.png0000644000175000017500000000133011236355476021357 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME-;*?XIDAT8ˍMHTaZ%IeJ0L"jQu0)r-ZDhE%-DEPI":Nrq6)y%"'3p |`R쮭QX䩝('o0Gcha]y־'r;^)B]xfa*L'{!:4uN H1&=2uH+++X=(5tpxWB<>~tms󾃡 |,'_i֗~14NzGg{7^uwIDV%""tw_W7 ;~>u@sKIENDB`qutim-0.2.0/icons/jabber/offline.png0000644000175000017500000000137111236355476021022 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME!XjyIDAT8ˍKHQ7PFPaR$ضEP-ra )j--ZD H,0FkfjǙ0epr9> 5ܱMj"+݇{2m6dP,2У?#UB:s0NM=6(çEqq" s{-5E㧱k<'Cmo'}* 5]t}~2ڵYD cbXRtFLg:YP *}xD?c8ypmtL~#V *RCx'!Tk c8(G0no2rQSsY=щ<F2M-.gus_G'pLC#`!JK`tŪb}mT+ݒ͸ØYoj5Dk(+\Nw/-< oTp!nU7 6J<[fX?zrbC8_U.ihlخ[7,DYbI* !qP4L0 3z 8)0+3{L#">G{h?؋{-s^ `0tɝG~#7E.0@A]æsʍ2; jB.0G %T=PonQ آyd 8}* hl=r  gR]ZsG'||!ieKPT(>Y-R|#4P  qwfA0K |Ac-d'TLۍEr ~D~#()`D㩆fE oʅh3gSލ&s '뛂?XhTFӺ Xh=V6=ֽ647_Ky4]VcСhGh}K>z980`ԅgEϕsI {x2[duߧrSc-ZIܚE~Gokrbb"pC:I&R;<;xy`+O='H >cM]./H&<7窱 $!jFH?8P\oApDXmC%5 AAT%@~oE>W(a;c:F{ {kiv!U rݴ.%INJl,/ܾ)_f{;GwTloV/i[8簤t:1m)Q棵p_-MT-+-0 }E>,[Kɮ-TUvv6>v>sO0@k5)ѣ%7;|i&P*0 |}z?ہ5'эIENDB`qutim-0.2.0/icons/jabber/ffc.png0000644000175000017500000000147511236355476020143 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME]IDAT8}kg~m%oW ؖKejdiȐ:A,xҁ8<۹8:ND4q঩6ԚxH" %ּK$7ٷ=ꗡ> $Mb U?$w_.˞T-")T9"a:,/]Ȇ tJ8#zHTЌR]l:̭:f~,4KViN-f@10CWwċKt6ԭ40R5a 3@tCXLW jɂr fн=$^=gvkcC+gTcVvˌ.d\AoW 8.~շm_#[&++ZA|HG1 0 /!V%@S+:;ܾsVkq,,G8! #r#WfoM 0šZG>#;.?\P_V*n>.kt4{'?M m6(͹;t}:pW^'M~xx[c mS=D qz f0-d2;ze~K9c$Vt! P#-#S ŀQ  c2?˾BPEIENDB`qutim-0.2.0/icons/xstatus/0000755000175000017500000000000011273100754017142 5ustar euroelessareuroelessarqutim-0.2.0/icons/core/0000755000175000017500000000000011273100754016357 5ustar euroelessareuroelessarqutim-0.2.0/icons/core/note.png0000755000175000017500000000052611236355476020054 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8o0$ am)D;(.y~趛Iͼ8<Ͽ0Bqߗ $Ys I"G}B/&tYZ; h)e *VH$1w`+Ngj\ 粺rvP+!H*Hy.aa'IO#݀=|P=jE^x[%IENDB`qutim-0.2.0/icons/core/red.png0000644000175000017500000000070211236355476017652 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME !(nBIDAT8Փ?KBam-FCKsA4Q\9~ BaKҢA\DA24T8u,9JD$4OkJ C^Fpk|RQ8sc]\V(_U8k Fύ97 j;岖шL&锗Nl8pr~X' `3c@P.+!7|"g6_}$,5`{4h[-5>t{km >u.瘏Ǽy/ˇ=;:ܳcg^IENDB`qutim-0.2.0/icons/core/icq_xstatus29.png0000644000175000017500000000160111236355476021621 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  6cIDAT8mk\esg2ߙd&TpHi*&+Q(-\?s#EM#(jXibk*I&3;s}?\$`Ǐ=ߛT}PaFE#$:_7*_?衱|ӡ#%Ut$b3{u0THGo.-zkͷJ3{2_}L)R[Gg,ȕpz-'}}'(iZgitKJq$`!$ #c E5sF \m7pQRJ ) ~GC5Q`c/nTj#==9wıc-} bQJdcW++wTG_182@YN$BWg7x7εW_~|^eʳOV}BJu{eV\'+27_jnc_,]ʟ󹣇Nu6*U6V]Yr +yK$QdG\fu67k[w[A*ML>oH)v؟ Ϭءڋ.IENDB`qutim-0.2.0/icons/core/ignorelist.png0000755000175000017500000000135411236355476021266 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<~IDAT8˥]HQDž.t~UW]D]w2KTcМj(?^mkL:KMmLSdPDE`B{{/̢<Naͫ%PPB eFBWXTN!1 z /2vA%4n+ .Ģ *&C=Yl8kRۀq" b0ʮ37-ڂEύn (/bzV<6,y;>FNW`= xY0vhmElx]7[+`]{0/2<~hZ(@oV)>L;4q%5єule?=՟=,EfJc6n+|n2$Ƙ7̋\.ir;Xr;y,Ǵ&VO|27H>V9IENDB`qutim-0.2.0/icons/core/link.png0000644000175000017500000000057111236355476020041 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME  9p&(tEXtCommentCreated with GIMPWIDAT8c`Fh&9~ZW0ܗhXUXo?~3|.]k.GgN=7"W4<c ^Zb'LL0o_aڲ=^11ś02000%2~M-?1a·߿}eȜz?'w3ZH].sf 7#+nFb mEll.IENDB`qutim-0.2.0/icons/core/mainsettings.png0000755000175000017500000000073311236355476021614 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<mIDATxڕ]KA5v IBDx¢.QAyQfdFڅDх̆ g>s9sfu\.B-|>_4S ql|sVk&˲8R*VHN@6_w%C::f|ZPYH}Dyh4,Y ;d2xDR+R {;xG6V@ L&۶n\. L$h4Bժ H0Zε{xrde- VTtIENDB`qutim-0.2.0/icons/core/remove.png0000755000175000017500000000073611236355476020407 0ustar euroelessareuroelessarPNG  IHDRaIDATxڭ+CQǿΤE L]3ZC6l^\V-Bkk HٙK ;=*<9yΗJ#uﱪ)u]UOBmS#$ ;X/VP/aoyc_ 0h1 Ejv0]^4DzzAAuk8,b&*2d++Г~*yfM|@cq1 =?<7'41\{A&c @ (Qb(F"x(P߷+g G٬=: Jb3 W1r0IENDB`qutim-0.2.0/icons/core/icq_xstatus24.png0000644000175000017500000000125311236355476021617 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME D=IDAT8˝KHTQ3qCAdJE"MhXRѦMm6.)dXE  J:usOQS:p8|;3u> j\tF].OzܷMWWGߖh-n+81?p T! u"+sLИo=r_\}"Ok ?_43B.1Hi(i 4*o0c9 GS^ $3U~%HpL\:@HJ j7ذҀÑnF4;]s*eȃ2bB]E%bXSPx0۶rh>ܤfcsڌSǔɔɼ{' !hl#${`{[Vd/t Pej@Ӿ f:7Ժ<ɘ4^T7ACGmd8iP r0MCj؜tŕ>o>3*u:MspqJ­Cޡ!/d3'٤~IENDB`qutim-0.2.0/icons/core/icq_xstatus16.png0000644000175000017500000000121011236355476021611 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME .\,IDAT8˽kAǿ;M&jG"-zKыBZOWUQ0,"LA)?jӴb_>30# ԞD:TB4\}XiII=DSp8KE~8PXBڧRRvllҢrxvT)4Vuڰ=Ə 5.c P `X 3i&cŅ'C)ս0Dhw|NGiC5SqHv/TnUk-ux4MF˅6'RX_8g5|q]ޘkb&`@ NzU kmsn]g۷>!" ٹws>;-R)#u4<フw{'b~v^ti!;w2$j${}W_@iIqY$S ne*ڷK%ZSJk<pfft{\ԺNVc~O[V)(iHH $$qs{mO_ "b@;mdƟsHb0xQL11E k1wܝ`Uu=`n4iqRq3 7WxhMH䜜lVDY&`oHꗚ:j`*g0E=5@$3B Jaiq(㙰jf/^}!?IENDB`qutim-0.2.0/icons/core/icq_xstatus35.png0000644000175000017500000000151111236355476021616 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8mITWWC[]1]"B 1nDj,ząB"dl,.D\ 0$c+q7{.J|8$"X $̄hMNm"جi[R@X(LDw|盼NcY+O .^n2ʝٸ!; ^v"L8 5o'shYZQmz@VR4ED93bEV*Ĝ f3ٜSП,7 bA/B0DSsLmAc%o?m4?5EWu(yQh /p 6?F?r"k swǜ}I? >`yjgeNIENDB`qutim-0.2.0/icons/core/signin.png0000755000175000017500000000125311236355476020374 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<=IDAT8MhAߙk`C"I"/*AU*mك١E&MADEt>S8zVO޼)c>. Q51Qw&zgO/Dk00(nCȽ{[a~5鈴@bLQ= &$dY[AOXZloxz.Ҽ6?_h8|E7sJ*hIENDB`qutim-0.2.0/icons/core/icq_xstatus26.png0000644000175000017500000000110611236355476021616 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs&&%tIME  9p.IDAT8˕KkSQ}o&6 %R_!@"CRD;u$N Hю4M0`Mr(м8ڛب*{ťݘg-o|7'E=Z7UqzmU{Xlj"H[bK劷*X-YH&υł_hYZVRPн TdW)dJ͔k#y,K5Thn7uo-80jc<țqKAt(`(4_P(wc ^Gq07t fI]<ʓ9y ؃Um@&[!Wjz'K/2C, ('p3\?hhp=JUOi#tY/Tl`f ^kfk #0Q |>RIENDB`qutim-0.2.0/icons/core/moveuser.png0000755000175000017500000000124411236355476020752 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<6IDAT8KHTaFR^D hFh"[FBr6B+7(rEb>p-f)7",3x_3ԁ1|tSSRƣqwp5Xb55n=7W]4M|ȊNNF)m^@'u/Ե8dٝHA<?[OwVbIENDB`qutim-0.2.0/icons/core/colorpicker.png0000755000175000017500000000117311236355476021422 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org< IDAT8kQK214itNqZ*J*SڢE !XB7JmZ%+- ~t2&3Mڴⅻ;{xR)ۿ,_z+ܾ)c6f2?Y1 0qp`l% r&Zo*F|hR8S*]q;_r**+-:I!gt'9#vs0Bl]6;[ \w)c|Ұl'@bG IJj[xQ| :gDDC&x)H/9T`%X~ IFwte=HE%ZGYR}Í9QU?OLpzz] 纇:LRAU !}lEU}S^N;{g<$}?Bl# "B|DӇ?&"ۯʈ\[^x(24vDILbcˇ9"r~&@՘٨j>$ B1$LDRλ=|q{qIENDB`qutim-0.2.0/icons/core/message.png0000755000175000017500000000101011236355476020520 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIMEٻIDAT8œj@]94-mrv19b[>EHE%ŗ vg{\hIaݙfQ!1͞vǫfc/E y#J+ :8wSdo߿U]pZ󳋝Lޒx]'?bLEA@D#C:E9s/BH# ݼvA|qSJH5E7.)vᦋ,Aۅd&8w"ouC"v?S:Mi}=xvЏ,4x߾̌0!Q*Ae?Ͼn`mߗ0~f41b`3CZ; ߫d$}W V̐fPm&uX]y9?Ba0t yEDDTUJE j;ԃ:0@ j7yO"U.^6{7M&3$-.$'/ݢѾ/xyemvW?p8kZA#,-RT)E9"vE"bPHG= 11uXg}zr\UL, %(%Q{=c\~FU!IENDB`qutim-0.2.0/icons/core/auth.png0000755000175000017500000000077511236355476020056 0ustar euroelessareuroelessarPNG  IHDRaIDATxڥM(DQ{G3bĊ%͔- Xِ6 |D)YXM1ͼy{ 3Q8Ss==?;\85S9ml¯lNA)nlg;KAak[ *c<p:kA?Cfǖ3Gϯn)tj-41 ң7wJ6 Z=p?+f_,(WiEQf Z]( YZnF};Va9s"ʂ"e50> ^ 6@|XP$ W ܧs=(>,(Lϱd dO}{_un}0`W0R_8B'M/5 RYEyHL` ϒco_!6,2k?.ܠ}qP*W3IENDB`qutim-0.2.0/icons/core/blue.png0000644000175000017500000000074611236355476020037 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME %yfIDAT8Փ=oQEeҤ.2Ȃ"P{,\'  u$4IZe޼7,oWL99#{Ǧm*blj>~aF,Ԙ}y|>+|yKū2b}=ׅ>;9>o ߉:peM,/r~vDl*a5yQ\ i3FX;ũG5ޣ>Q;FYE@~_W9O(I/"a P"T R; j2kMOYXU)q: W8]f_6௝ p&VL.)C IENDB`qutim-0.2.0/icons/core/icq_xstatus3.png0000644000175000017500000000151211236355476021532 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME 4(sIDAT8ˍOuB 9#cl8HyĄewMh$㎚g8 QZ 7 3~qy_j^o,3"s,`B/҂F =mvˤ2DNOJoA@,\-a9;O3xNCwXPq1G9 lx45ؑvH2]p?6uO/| H@+"q ΣT9u1wFH+C}#<eF1>Q7[e>e@})̈yb:Vcmr;W Vh+Kܼ,0:𺯟,5|_8ysu x!p|Qz#l!l52 HuS .B64PivDm*l6dp.@G꯰^e{inlbJq֎<{DQWAݿYJeBk,Ԭ8Q|Xۈt#_, [p Aϡ"zb4SҴ.yԋEho6Ak06G$1Jd.Z/FΌHE=⨵_ۃ*i(K\.{"Y/l4@tjQV̔e:,||pVO "\?7/\IENDB`qutim-0.2.0/icons/core/add.png0000755000175000017500000000043011236355476017631 0ustar euroelessareuroelessarPNG  IHDRabKGD(ᗃO >Me[[ru}מpFicy9)v|Z%GۑpD"1zf*ҰxDx0Qb30>>nfW߲Ț#g<ضYL;nm<ea:~^zsBvbGNÊb xvGއ5YGC,$iJ`PXL7#N(ܵ_dX㱃f,| Ji%1T,noLa("hY@@R*.%3*'\.,35Vlb ߽[.L]O] {Bӽh场.ҩg_]ܵGl'F|L jûj!)VWĨ q" DJ-j'N姏U`&X{ԲR!;+wcC_zIENDB`qutim-0.2.0/icons/core/selall.png0000755000175000017500000000646711236355476020375 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FRIDATxtϋEf\DO`0 & 3yOݐ㒃xO1BDٝ0bW]>(KTwjq܃*IO"It*Do4NVgO|wjW{@@daU%!`J~]yih y»j&)Dh4qڞN\IENDB`qutim-0.2.0/icons/core/player_play.png0000755000175000017500000000122411236355476021424 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME $!٭^!IDAT8˝Kk<2$M&1ibZI0#JHRlgt'XB\H/r . BMXlJФ3M23.Ħb)wus9@wx`]: z`0,>0LDz/nZϵZMB4>7ԤʥOSL4-kuhpf.^x06 Îx""@0Sx}LQ*̝d t 6x=>褃bxuhEFo͎0,kf,BoZ;5e>Y& x' F4MRs=, aw"z=X0 lr {kNwvcP:#l'-N[p(bIJΫoy8<'ԻwCity(Gq p!0xjr ~+0c5곂R8܇^ٷ!yYxNB`&Y+*PV݅yg&_D*w{㔢q޺eg|6 ed ? =\fּCBk6(/N!e]ra|F*׊0412Rm<N صCGeE<,\=g} J#!L5CG]MyCy<vÐ9͒OwTek &-xXjMBCur>he1xb5F?6Ck]TVژǽgaLG[(X2^@aPDZ!} Y/޷PjZ@Bsq<0:&(f~R!u" `|f+EK;4g>4 55*#+%B$H%8CΪTTW VR4,fKQ8  K_|!G(C܇sCQꡰ-e8eǵq ݎSZLd2:-w~E|,,IENDB`qutim-0.2.0/icons/core/customfonts.png0000755000175000017500000000616211236355476021475 0ustar euroelessareuroelessarPNG  IHDRa pHYs  ~ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڬOagfw'6c.lMRr7w%(WAQ"-h9(mA9"v;c_wE⩷>OB// !rp6x#^#= ȬwkpK28,Y6_ m^~7闶8۸ւ먾i m q'xHuZ#q^EvF2+i]g-ur"Fp wp8JvӰxPu&{cmx똎qi'Ʒ5v$&V ⎱||76.'ȡ~^<C(AQC|BUK38LazjXhM`fWZv!'2ꫝ癩qz9őuIENDB`qutim-0.2.0/icons/core/emoticon.png0000755000175000017500000000160511236355476020723 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME;qIDAT8]O\e} -a(tK:`L `iVcl]`p㊕&mbB6M;PZhKe( NAf8.p<'y=C\@j%?1hOOAl 0#Ks8ru+ NT bCuHKpe똙 Gc|? LKDPF-IENDB`qutim-0.2.0/icons/core/pink.png0000644000175000017500000000075711236355476020053 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME 79?oIDAT8ՓnQ{㵽vl"ET)pay5GBJ"E聎8kv7"MSFG1&l * a7(}T;l殹 y2L~wP9^yy'JAomXd @U#_"+/lL?Nɳ<+0!d]+J%Dt, D {&W5Y ѕK@Ds̺ [Qkq^=Q-b>YfF\PkĨb[M,Xh}47ǻ{m[kV%>gҳ51ֳi7@ߨvWNN{lpcQIENDB`qutim-0.2.0/icons/core/statuses.png0000755000175000017500000000131511236355476020757 0ustar euroelessareuroelessarPNG  IHDRabKGDC pHYs B(xtIME  /u)ZIDAT8˭oQscM[2\vEPX`!la%! HD%DEӚNLkAH,/bJi"/3sV,1;ZEsSpZ8vKo[G-Cb 4ET }W(Pٲ ٰ|r@ UPmҏHV?1(>9! d Bj}Xk`<h~pb+@zP$3_F0׌Q3_Aszy]❇{ 3Al'2=֮G%J=.]q{ klf_o҇)IENDB`qutim-0.2.0/icons/core/apply.png0000755000175000017500000000103111236355476020224 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˽.Ca{8bnSBT')E)VCJ ǥj ZՆg/h…ݿk n^k[ꝿ2P6c=XH*G`?xԅ{77VԨپ%VHyqNtn[J2^53X,S-OƜoDXx2Oܵ r]L`}Z࿳TU(SiP/a:6͖,A` %S=[ b[a='LaW{xD[ u9J—BGqzfGN0os6"ffhZR".2H-[{(7h @`%E[IWu3e+ lGQ&' k|~M-!\U5ʎT1=LLF'쌰-i7/uucb"YZG}Jch˜BL1~`;ZD ,hnWnXfF5&@1.x~nK8(8=5gA{` "E<>0x&by^M屾jʥ S6F]pkzdl^{qj,p4c۰3&G$Ri:n9 ̝>7 T5V|oOP+3n[qlXdh %b 黼}+DDcu/fPA{5L$T}mY<2LҲ,=չ~[; o+YvQx"|?"Gnw9jIENDB`qutim-0.2.0/icons/core/general.png0000755000175000017500000000071011236355476020517 0ustar euroelessareuroelessarPNG  IHDRabKGDC pHYs B(xtIME./[ҁUIDAT8˥N@Es>I>HOnT 'iHa4FlM<3m$ƻh3zsTA&QN[?o 2{5EPǧFAcz dT*mOۭ10$A@A%%9q'F!oXTߢ X+ _VK MBא`Q/@5ւi^"g9ZG0 @@ Z'Bx͝P(4㊼ b @vCu$].+dR% (z_ uUfAxbJq r{A ONA򹤢7i'v̊"9r3jZ47 lSíkbbgeN]`eϐMmFMR6l xVM+)t/ OIENDB`qutim-0.2.0/icons/core/expanded.png0000755000175000017500000000665711236355476020712 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤOQϛ:mgP Rj?E$${7.+wjܩ &q.4$E6Pڙ7c;󞋒.s3 s\z}8s6hk@O͚aF]J)$$.EGw}ORDݿ}4U0:܃]zG'0<"1<ݢķ2(rmkH\M$VP!% BXq 0I&׊\DkB,xjkk^hiA4/AfakkBa[ "XDOlxeW±=*B,N 6bpcM@ 緁.  Jn-M84Erfv .x0Iha PLKMM +<ɘ0< qP@ 7/QGt&|͂MCG壵ǮW_ٺ /:CG)o2nϿCJ@NaSu=_Ǐu1U($M zzZJ)g2VJnDIENDB`qutim-0.2.0/icons/core/icq_xstatus0.png0000644000175000017500000000156011236355476021532 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME . 6IDAT8moTU?sG,tJm("61P"qTԸpʤX#j\a$A h V5J+}Z;;s9Ǎ6M|9](PZD7q<{]/{cr`dzb$UCS870n0~y_ ( Xk#]Ęten9QJ<3(CJgqvkpv [Y/vz`}-SJ9V:-!ɂ"s[XŠp!SxPWY?"NrT4 ,L_`NHl:C❫#pwC>2_dt@6+Pk*Q< %8p g܃3<}Ocj? B˟5"I&t&AΣXk|tcm\D\ @)uSmu;S[(þfcnj}!/ <ox?O\w/l`bGR^O@S^g1>h`عᒓjP= ^( b\+H̴wPcn*`$d[6nַ!vb N5NèY\ ?A薰>9>S Dj "j ԂWvZw#N{*ǔ=PCAGOXB !+峒neY|>Rn1Wx[0H3!bDs"q.34ne^|d\XŰrm"wfӎftpvvQ{IENDB`qutim-0.2.0/icons/core/privacylist.png0000755000175000017500000000125611236355476021461 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME 4A1=;IDAT8˕AHa}ݻr[#k-,/BE¨ A{СvCt%((+ЦA!xqS DZmv+]?k:s؈ "ݧ"&&.ݫr= ]5AV> P}T] [|䘜S01>8z}C:7KPYZ^f~a[p+E ]ܚ:2(g))jJJPrV(;+TVܲxP-1;eiPM0Kwց1FFM:c,;߄iѦlLv Ob`gn rU݁a( C R&q@ eY Ɨ0B fx`ϫ#MfDd{n'B||3yy2?@mp)\rf҃HDEչ˳s>?tD_I~`YÀNlGYc.9qe>RHNYc- ֤&^#$o`'c!!JI1џli0 L&#fsR0!k!ĉo(=3J4/b Z7Ё@[$a~a~՟< 'D4MD#B0M  ;ٺCUU"H pOW7B@H UUoQKK+"VbM0{9LRyG3 ø[`s+%ؼ 4P(`s"K1LD8F>9m92B/.{m$骖tqJb՚[TQn@xVWVmﵛ{rbA!Ϭy9<11U ;rR hʝw+Lz}8d%t:).vATں3vsxv+R-3>yV(jNCitj| .(̞DVl4XF9>=cVo{=4Y]Uw˳'' %/!>ZY?`K`]G+4 &рYW+]zmLU%Ql(_x)DѹPp S2T[C,?_GXXɮ6 @, v,!< `r_~k$~ӻW?WJa:ڠmq&Xu+|jF>ǘBu+IA4\6 ܻp'hu#~ԅ^Hq۲U_ \ ͖~;^1dn X׉:8~Gz  ىN2Vqd,zraY\x߈B6t-`EEO| PZxl( h '3_4Y\ny3sȁHGF OghB^[[[˞B&/Me_`FcVcH:1A=MffFh^ ~{PN}Zo,Zh(@'VA >qjxX@J@sq"8t{P8^AU3I;^Uf00HF08FmUjq40 TM,(SNRߡ/8IENDB`qutim-0.2.0/icons/core/save_all.png0000755000175000017500000000113111236355476020666 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME![2IDAT8˕=kTA33{]$E4i)mvvQ+:؈`Ȳ9]Fyx?<փ0}kxI.0dFN600|?&/&dFO Tw\̻^ ewA ;gKՃ !R)̿brBAy@iY%#BHSBpyiX`[AuoP}zxf9goi.Qch"w^|pއ%l9w}KX{vJɄDCf&9<!QJ̬LӦL\_JHIN >rmîmF{V00-G^SE޽0Wr2'ScRјeY edߖj&C``T*HMo{->n.Od!rgyg/On 3=.:w<.271؛AEtvAHBtF5.awKxdO4 k si&^DIPC jm#_b-u|K&V0*2%ݤXat˲eu g F\ ,gl&fWP[ aMD+mN,V&bހp䞧j)MņMzĉ|P4B5M5TZ4DThk&/}/Hh@[d޷=9%Z 3Ïo>W~7ߊ*qBfyxE |ͲQE&NgRg2{v[c ;֦[aHR,(ĥ\6J>iTw=6DrQcJK6 hDčآŃCro::毫<MqIʥ"3d"rIP\fU[,X6n0y}V34ݑApw־D$I v(x/7br]Hė4ʀ+m$yZ$QO&ژ LhbN80@D<ޙw2>s79(" q0ȭXt}rL&zee` DQJx+V5`rGArPpylxo#Eԉ} 6.@o{`rO^Z&`lZ[[[TCz ;fhOIENDB`qutim-0.2.0/icons/core/white.png0000644000175000017500000000074011236355476020222 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME H `IDAT8Փ=KAߝKrb')FB3BjAȟ R(XDD,ng""riR9,|ba)\.YQZhݮ+Ź~= #P)Xݸ 1rv1Y[ fV [M&f$X'8gXY6@C͂, uIβ7:1,B39>J}w6Fs55Ǎh,qxѮ-* חa-ޕ_pd,ĕfB)v_x@ǿPLriW|Y 444S019:Sc#~Nc045^9NjpIENDB`qutim-0.2.0/icons/core/ques.png0000644000175000017500000000143311236355476020057 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME S yIDAT8˝OkTg3s''N' 55A)26]H,.B!BW "RH>.tJDPpw$ZQG3NdE&n|l<<98}0 T1`kgO^-]مSseJ!Qf+g,=nb+7,? م|U)W(N5YQ' =Q1ַ&% O͝)WRΨ~G}ў̥,Tms/΍zc)C.^_(dt6GM{xgG.~ϗ=`rtf+CK1 g#9\mßCVP+)&wOF>ۉƊ[uX+{(O$#FtDB)"/?etzqXDQDxr!ngZtkofAG]fZn KX:F) j Ws;=#Xmj{F:Ív5=8w_BnJP`+m=lj3{Fͬ7;hq<kϹQQD;橶nY}5WӥO(2ch'ȼ~W^”t4*XFQBmC v(IENDB`qutim-0.2.0/icons/core/icq_xstatus11.png0000644000175000017500000000140011236355476021605 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs 􊲉tIME  {IDAT8uOHTQƿ{߼IhQRJQ9hLZ ZmEA-E4DTTm*B," 8y3of޿{Z؁|{Lj2eO,bҶ_?)zL|jo]MR`Z;w@R-/m~6RY < r5**{‘V?GZYݮzNK` >@*E F )g~n"4>N?p3n[&Ke/@dq4Iވ'<^S}NEJĴ!^;A VJ 4akT#co.€h q` J5pJWhl1vku0 U#aU+w"\-ϭЧ;|[TW D`HNa8qE [r$ΘdYM,C<+KL)r x$L,Oـ\65sƄ!=0```m(l&mCD `n/"-#C2G`132HbBBs Be3۪F2׵q[lZ<3mJxZoIENDB`qutim-0.2.0/icons/core/bookmarkstorage.png0000644000175000017500000000066511236355476022302 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME  'N0tEXtCommentCreated with GIMPWIDAT8͓1K1 nj .ΕDoտP(N.E pMwI7|O|1*`';?A5'5b"Dt(=k ֚8!5q;g PoZu U)TUn>gЫB*O+<ѡizfi*d6l@tŪ}'ō 5)Lksxr.Xӣ3;Eգ‘wkQڐx,UT׻_v-?F,QJTLG&@dT/OkeUr{ٖK5;uuNLɫ~{ɾ{b1(xZ6 CC!V1F'HP_'r:c7. WƆܕ?OV'ZnoNFUHij %= |&Sg.8؉EqFuv=굢&aٵ٪ƒ"X 7XU._S_Hҧ<!Բ\,եR/p "Iaq!(*EFT79h IENDB`qutim-0.2.0/icons/core/server.png0000644000175000017500000000071211236355476020407 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<GIDAT8J@ E()R*RȂއ|^z/B=^EHAlxJleߙ$IVaT]ڠ4WKimn}LOj߷Nڳ2=(\A?'9/{eL:묰q `?b˽YK?T:| u."bDD`I)yѰUc=!D(ZJ)].2Ǝ ۶5cJy|0Z"Q"fL8(1c؊E$(!Z6i88IENDB`qutim-0.2.0/icons/core/next.png0000755000175000017500000000124411236355476020063 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<6IDAT8KHTaFR^D hFh"[FBr6B+7(rEb>p-f)7",3x_3ԁ1|tSSRƣqwp5Xb55f HJ0IHf珂 1s.c\ HmY϶eC$}Pڳ[(zۦe.;D<~ eTi 0uD"[M0d;mΎ$kPMMğ\ ? bsVWA`d~" P2|W"9J8:u4utLXf$P`Ƥ?348__^ޞk9pV{V1PmӓER\"Hr k7J=_EڧfIENDB`qutim-0.2.0/icons/core/icq_xstatus14.png0000644000175000017500000000134511236355476021620 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME *]<wIDAT8ˍKay}5>D+hӪVID-Z$mR*3hQV jĉqlRg}q*0lr=GTֽb~4$<Pչáx@ŻO'cAa%*QB("&ؐj/O,򳭾7bP*QVR1Gdxʥ?ଭXA=Vh6ϋ? $WxAo3F< >`81Da]@F2:N)tTT,-#Y;\NSMMbD(J܃o{Pn0tNUe [w>f`̒ ZgH'/}z|f`#rg`-Wvpl|0o$F将D+MWG~G0`RBZ]`~Ƙ6b1c2ڿ X>Љ;V-䞟;زrNRjSZrfady-6'|aa+ĩOd-hw.Yw6JV:p\.gO8k{8 5KIENDB`qutim-0.2.0/icons/core/icq_xstatus1.png0000644000175000017500000000154111236355476021532 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME 9" GIDAT8}SKhSQ=ss_jhD mCT뇊Xv!A]PЍ Qԅ A.D,ZZѢAMm54%ZK޻B,f03 uG5lB3_V꘷ȥ7X#cdW{oQk JKv֜-nolp7{}sH3oSZ_xi~H](k>t[AVG:m;wm[qu\V'_x.epe"f T$O dž4@Asx疫M]x9%Yt `4@21$zf$q_=3_ ZNn('kwM۫j:> WEvbfxʟ7^un`ęWicēHⓂݦ*pj#wNiiOO]{cPiy_t3ܞyp'lr`fM|I@V)z|2H^w Bj;eKbJ1h&W1gJW**fL3Fu`)2A>b`faR&>DBLӖiJ9kx]}Y|${#e(FQI9XeX}m )?Dܞ\ʀR&F_HH,#} IIk;R)8J#Z̹kdIENDB`qutim-0.2.0/icons/core/mrim_tr.png0000644000175000017500000000130611236355476020552 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<CIDAT8mkUϽOi)J!Ђ+Qqpn\4;&n\辋v!"V t!U#B)DNm4zHxq>{ ]QTaD@>cq ; vS{.˞ %U<ہ^,jGn#:aJ (@ FnݾCaV)A-Gax8o]xBm YK"ac;Y+h8~fZؗ5g)&0#Ni@+7wQyaK'+WA)aFˍ1#yB?]7kաo[+̢! = V{3~z˭N}8\*)Nñkvq?g?@-rIENDB`qutim-0.2.0/icons/core/icq_xstatus27.png0000644000175000017500000000147411236355476021627 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs&&%tIME  7'Gـ2IDAT8ˍKhY^]q A|&uu1(YFT0]Q >Y80+7> s#Z 3QDP1:db$I]UT0-CRJ|Nwnێii wg=|@kW7UB۞x;~2i*S đcA"ORH8Fg39]}doq@ P뫙WR5URNf$ĕ dq0i(Ч7nH9򲥝[4"Q|6ohPw;0(m!N0e6S˒\fenvpP 'QO@+ɒK> %[Mֺ֯k'1&Aj2Źx .cm~GKa}7%ㄍjƱB؏b0Gh R 0]hz52l4j pATCHEJe"v Se9;(ٽj,AcϠۄy *I3arܯLDnZMRJl@iNs@k,rtk>]B䱿Op *uBNmDRl .9u!w럏%7q_ ɴsck娚뗤iݫ+_ #MeKJIENDB`qutim-0.2.0/icons/core/finduser.png0000644000175000017500000000160111236355476020716 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDC pHYs B(xtIME  $]XDIDAT8˅Mh\Us3sg2h84ehB+dUWJ 1jtµ4@bV"ܴ"´ߒORt~w9.j@ o>0{|BYucq~>}3W7cЀ0W|#g3ƘB%!ե|zSgiwq}@N1> ;s0BOBF顓qoikh JXPL*zuܥfH% Z&սƃ"m,K~x8.?:w%qkay|'rؗ}|͏23}@~Rqs\ v@ OvkI`R9ݩJyv-^ZIogE1kRX?dCZU닀9Htacc16x!ս41l0h%iP(d}fz#@01!'? F_=2: }=lv8a=D̙Pǟ~ز*ᦌ)ZeCF_xw#6N}lU/9}j56neoI2Gtc}==[n'.wr\瓸.|?0:#n!IENDB`qutim-0.2.0/icons/core/icq_xstatus32.png0000644000175000017500000000155211236355476021620 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  7/;IDAT8mk[e?{ɯiR;]k+++YF  DЋ9Tp"0I;pVocZfᶖ%Z s<%"tć~8RL\ 3皕N^uLN|`7(Z+ZJ{1h\^fW##PB Zx,X 6w?r^LN2=o(R7Vqנ;'Ѯ Om;Fzf./jB$+bxqrHDY xX wo۷opx_#6QΈN >C "-~|ҽ!mʁyP --`q`ծ:ޛIzmbwAPB*WZ fwlE4N'|ch,A ]ut$AMOD,6lEP7(!c1Z(S,@Dj`5z-@ҕ"Ioxݍ4ߜ2Ff6pMF6j!}#Kz 4M"]-$3" 5퇁#(rȎ,qi cEV.Q/;پ\ O'% jI mIC=R wk;syʟƞJLF (<:ƭA/%YsF=GP@-hSז #mWv1#P\\9,wx?IENDB`qutim-0.2.0/icons/core/gray.png0000644000175000017500000000100211236355476020034 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME ֒{IDAT8ՓMkSQsn i6ڕBt!M鮂%KBׅB6E*(dFԪ$|+n dq!fgFl[q5MJ`닽"ieP,n,7_C-pooןmN4XMB?;9>DMI\;w~.ݻ>{} '5X\3DՉ-Xia* mb!( QEE!p4=FƗr""Eh:D7&Z{Y\c'!8>|d65Gie-)qM_`tm~ӳͩҴqQB(/=OTBZsIENDB`qutim-0.2.0/icons/core/icq_xstatus18.png0000644000175000017500000000162211236355476021622 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs 􊲉tEXtSoftwarewww.inkscape.org<IDAT8Kh\ed4MtL4*iVEB"#ntaAA]mlmTKfdΝ.RНg}8p8ZkĜsX^S

b /an4sҗ:+<*D]C*E0 A?u_M۸_ƍZgdxpf ˒(E{LZ@ҞH B{,?~x|1(|͆dWXٸ_%sABJL^H2"N~;Bo63;DO(R^Z3_Z]+M+eVX ۘQW[!q85G3~F;Ϙ8u2#UmPiD)\joz3 [L8.BHdrivP([Z10Lo։0 VHuS7֋j'o݄IENDB`qutim-0.2.0/icons/core/key_enter.png0000755000175000017500000000125511236355476021074 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME 7:-IDAT8˥kTa|{7hXB 6#JA إ! ͚J1y5fs~3"/QǏsFH*etA:nt8_>5a/ 2^@OCQ+1lO#XZMQ`kޱ';#̱%`|h33nH HF'抻Y&YdH :" 3rL&[5 3qF ud;̶'%Cxp)~PKH}Ltl~,7p'|[@6!Pd[œӔx:YxA( Aw=ѽ<$Qw""_yY[uѩ:UDe<<*G_C`BjY0XYZe˽C~F=~ѳ3r",LZ5WZx`3:ڡK^|O.jDS]}~/rTۉNL6c gnmQM5CT6DMN v5<ѿ q-Ov;T˽Ghg#wiAv6Ўy^}EIl r⠤ iNe?(wO=޽=277)>&hl69=yR tfSp-flaΪl\L7~ A0BUyvs-}K;B1/nO.,lZ5á爢{. 6%M0rK*~5ctqA% &Kv]/?47E|PU"6o:rV#K+ oGֹtv~ \Z-Wmo!-IENDB`qutim-0.2.0/icons/core/loading.gif0000644000175000017500000000431011236355476020475 0ustar euroelessareuroelessarGIF89a8$$$|||rrr! NETSCAPE2.0!Created with ajaxload.info! ,8_I8ͻB(di(YCp,ϴRB+འ^QrL:iK@IVt}n/*;f$:-\y-]G~/! ,8lI8ͻB(di(YCp,ϴRB+འ^QrL:iK@IVt}nU$ـN쫛aogr0ulQR)"! ,8I8ͻB(di(YCp,@!%|@+]p;:kI%IE̪Vzӭ]Jb#N~fz>y{|Vuv2~-/:|yz)"! ,8I8ͻB(di(YCp,Da8~0_-G< ^puGI9+9USb=m-p,ƭqr2}v/i9{aycs.CjpP879`V<=)"! ,8I8ͻB(di(YCp atH EuA:_Ecn.OU*m 0+/KJIiX2nC縜mq]ioWb}Dxhwtpnsud6O.HmYzo\)"! ,8I8ͻB(di(YC@Fm}!`G~ Ee-9F]Wj>jЯ{~}m}#S%ЉvMxXY{|iyp-5m.}dwRkbxlnz6^5AB)"! ,8I8ͻB(di(YC!8L6!7j7h)cз<:P5N?l[U\ZXqݩ*^n2wCz4gmrQBcfHDLM~{Oso-qæwx)"! ,8I8ͻB(di(YF2@oEx6\шL.o-IuvXGJIW7^Fx[Gn$cih5vk7@mLMًkdGdqfPpE$|fmz8uaoG0^\WyP \…@PvӰ=`x*i{y8gu=ɹ~^:/~ $I;ۋ8H:8R?>ίy#Dg+Z$S{kE$k|mM )']KDO<Նj1Shkk0|mZT-ҕYꁒ9jT-@Q%WY\h1e>4dR޷ (BC11JI2+KLo[יsUg.Dxc9|Z-_kzrmZڑ (v`m E+et]/X޷˗tU^2Z2^FsA۝Oݷܳ+z^Fn5- jPZ.jEB {B" 0 BpU'S?IENDB`qutim-0.2.0/icons/core/mail_work.png0000644000175000017500000000136411236355476021071 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME18tIDAT8˥MHTa13BS AE )$hƔRV"- hRZXEQ#3683׹~_gy8yJ)S,}xCNhRB*B;8)8NLIJ,lBRSӺǑrs('cnhkgKe};pL;P oFvimIqAk0$_=h84@|^(=V秫Zޖg٧rcnhNOBhXfv ˌ# E]m}DۥXP 6vw6JcIENDB`qutim-0.2.0/icons/core/icq_xstatus40.png0000644000175000017500000000146611236355476021623 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  ݎIDAT8ukSA|Ŧi"i4F …W"ĕ .\J7nDADj1HVbմMf{ys]U0w]GBcl.uC4kyX(ogCpii mc2\X[/e͞9}2˰QH!a6f2X/:㯧n~|_|;8?iZ0D7}! s|mC]!.w|["*RjD<~ץgpb㠫';,)s2֝c@:͉`=σaE&_L; .8 C" RZ&[&1p! "B8R^ML? y4!b0aW:C3 cv8څ JP yw zS +PZhjBk qRH$#ܘCl[V\o;"Q8߼pz4Ge/ON,ny9;Wu!AD"x.8W6VV^+"L`L C c D6@<_5^^x VDx)9/eu) tQpY7%Fw:895}ܻ" ȇ=s{魢k7g'f U+֘_]ao$n!Vof&]ÉK%2`#z/lm}YM0y;Q Q9elL8=0pPUD"*A<@Lv*B$(>UQD U(2`=[oX twk c`dlonOQ5F"/h 78{#M]_-QNJH:ZZ厛~a~/vz5ݞ @^FZ(@*a]v:jMXSj CF4&&:QU48^q=MGGݷ8kP.MS+"FTMu֪^l$HH*'b1T6nrIENDB`qutim-0.2.0/icons/core/conference.png0000644000175000017500000000150611236355476021212 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDC pHYs B(xtIME  k{IDAT8}MhU3IKƎ !jdj2`q]Y ĭmUv ڀ q+-Z4Ai3b@Pzziû~'j1bKh[@DQd7o7齇w6n\M~MCxsQuL~ٱAa\%$~8q :v6+?s|<fӷ}z8X9H z>'I2- ^;@`@ ^o&e4ɳ4ԧJ8'+$0:Tw"IS0v)EOI4c![$@d@9g5FRlzZkʭ('(5 3\@F`lzT~tmY^|=ȗPc0ժohEY\%G{&OiSXC -ZZZ2/V[k,ӞiqN9Z$qZW̲|P*Ŷ׋=SIENDB`qutim-0.2.0/icons/core/backcolor.png0000755000175000017500000000151311236355476021043 0ustar euroelessareuroelessarPNG  IHDRaIDAT8MlTU}̴x3-4[J-66-4U1 `\AY40 8μ7ow.pՕrNr@Dx'[6HJ|&S#?ϰNz~G !#  R`r/?خ8 ,)[mK-O'̤Υf|o,{8wZ<"‘{; m]WWv6:u"îKZ0of^дjs?,ꢘc[)"SduTaV؃};75|Q(j#w_n9tUK kC0#q=oc`^9ZqN:9m U3)*07F AFеa.߀Sw$Sx`TaSJ+K'fcbk^{8s_^RiCV"a]Yw,9䏽}Ukm89-6=RR(n8|Q4ӳƔʙ4m36ʍ!V^g{iP9A@Ttkg/\d1`X yuYۏ$3H'S ł f O1EU07\!ig:5nhiTUU€ŋ < 0"$ Wo䊲 8W S̳S*\?SaTIENDB`qutim-0.2.0/icons/core/icq_xstatus22.png0000644000175000017500000000134611236355476021620 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  exIDAT8ˍ[MQkٳ9s2Ǹ-y!Dƭ$$/J9sxXk}k)\ϯŒXeSjMt[T+؆J7&'e 惎6nfY_C4Ul~rI5#kz>Х|| *;՞b_vY6$WNKqq5a$#'Έ`ʯdRL)<<Ҏ`t>W : c@;"H*X]$7 ~/-{Yi[kbɞaPQRP EwpĮoJphZe +u鳭+5."!O_͞#Q BVt ~f1uB}6 45 `eZ259N 0CI]vBMIENDB`qutim-0.2.0/icons/core/notification.png0000755000175000017500000000117311236355476021574 0ustar euroelessareuroelessarPNG  IHDRabKGDC pHYs B(xtIME8/IDAT8˝JcQsrcnM [AF}qa"; >X&4k-w*[x9/@Uf]ҾfY"'fɾ<"#Tbr9tjQ0=>&== =8@ '&bVazFGQjj5bheJ0|><>"_nqP<'"ގJ3'X5ľpaT*qyyIV9y8rc@C`rr2߿rykCX ͨIENDB`qutim-0.2.0/icons/core/phone_mobile.png0000644000175000017500000000060311236355476021540 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8MA E@D@BHD$4@@3.@AH. #ӊc,7ntl| >}vLJ#HqtvIdavt{-@$vCW0C;R}թ&4 k:DVjxsl^MшRRU$%.A3Ū$%j8A %{+GxZ6@՛~iL?MIENDB`qutim-0.2.0/icons/core/year.png0000755000175000017500000000113411236355476020043 0ustar euroelessareuroelessarPNG  IHDRabKGDC pHYs B(xtIME 2MIDAT8˕OkQ3o1 af! o .RH#*"L FPh&H_jUiV pj'ӒE1BgX=7^p\Uv\[fnTWf@h6u%wmǵRJ9޼}B8*R*)ez?<<`i9[[ߨjF?7^izd2Oo4I2dc+ R)opi|2eaYi" x]ױg](!87gx8_@)RjgAsdx8WgrAӿj;d.σ{w dWhp#I!@Zjqq!`UU mv~(y' ]omCΤ焦iVA<ԫL:ebk6o[/ '+"(w [;HPJW]׽9{T. c VE[΍Og4}dvAZJp@SKOLJC!h4eYd2T*V h%$r@6C\?-S1$IB ^w @s u=9<TḂ,@"@F~EƬ2 '$qJ?ofk0/cǑbX ~5e1XIENDB`qutim-0.2.0/icons/core/noavatar.png0000755000175000017500000000706011236355476020722 0ustar euroelessareuroelessarPNG  IHDR@@iq IDATx X3{_]nA"AMPnb5V15bKcjL/)jjӀ6_6ZMMVKLuA4H 23ߙeVK> ۯ89ssPOTW]Nw;=o k<#d3$_Zy"G!AR帚L}uc?F X D4F+c'k7$bDɟNQ 1= {n5;Yv`t{Y K2?<*Fج8>ӭګϭ<]}'+ߚ>O)u̷c"An765܎"dl8u悇C=ELAG^1vȲL j<&{j{ulƊn%Hw-&>hq yvx$-fe^t͜\~aG*051$ mY`uPpQ 5m`{ܼŸQ,>92VV љ̃I)ct4G\^ŏg?N:f8Oefu &{EEŧϭ(»߷}`C2$M>;&j/oLE|. !~AW_|)]j/|q=Q\>lI!v@L)|:LH3ӑFv %os SeWVV@ߠTh !֍$VM/|k%f:o E8?#'<~u-8ԵǦM8.&X=-^\û>ќb - n yj4 665M ˗a5.X,LS8V>y*?e֋IajAYo^yz]v:VPp[C:lITТ'*"FQuI|1p\ν ?2Ԯ(d7 g>1N#LGM$1fM\t7A1dE$@ |# @QE=;v-+`kZ@/RϟTkͳ-p9:ӎ pGٻ @}Tlh_QؐD ZLl\4JyN;/\!{X2Npr)>("ASN/p>O$K^eǙn 'YT2I3\%X[}ow ѹrs8vO@С3+׎ B;;/  2 Xh{p_`}LO1=yBayu6Nwzm8o>TM {<żMW)igwqt\<R? l<]>k?xxY/X xkg /\B\'4M8u0JΞf .l,;ǹLW g/`\!8:{=EHیK}{fg(Bm_5vrHױ~w#&:N+.13,j K O f{4Ll .c% F}y &.^y'%tڮi}"8uz:$/ k<<<,ɩ1J{z}ȏ$Go+UzDwEdڐJn{ H_Q+P֛BWx1u{)j04KSٕoKzn!aTBπ ` V 6K[Z[(lsɄ3 MrKw@xvJ.g=r''ĪBC!:J$;zdIvz)Yv ^\oix#kPOKFw.alTF\F .H$B{G/^YZE:)>YjιO') ]:? 6X`('oJ>4FaO9PpucwWV$|8<2dRPQh6ؓw]37s(H쩏 6CHfd%({GebD0B H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F4IDATxĒNAE&F6К' kI+ ƂR *%Vke_K P#" g!lpe›L137gQUXfFhZor;|rcK̏x"_w`zK}W%fݷⱪBbzR`}듭+,17:t{Z(wup%N`]]Y*eYPe/qo#;jwШU̧g2;{AMlX@LR/J~SIENDB`qutim-0.2.0/icons/core/icq_xstatus23.png0000644000175000017500000000135611236355476021622 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  eIDAT8}MoSG׾v ݘuU@"UH+"Rլ@B-h6J]T6T*{f0 $;:3sޑY}yVV=}?sKW8{v=\?l۝_{rlΟp]ǏKavο*(]{jBC88v)XXS1uJR091 SʾK0ʨ\9%aJj?;X~wZvx,lr\8opic(G5IENDB`qutim-0.2.0/icons/core/spring.png0000755000175000017500000000137311236355476020412 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8ukSAgX[6MG`)JtԅA|mJ;W;qhU\hT &m&޹DžKb}|g~3,l62z >F`AM`m@!} y`-L.wX;j|CjIUmu7p蜗ӲtiZ ja%-ZPۡ2S;7?C"˶Cd ߡl! j l6mL}_ր o 'HJ"9ni`a8H "uPailCJ_E(%*jK`` L@P"Fx-FmHvkDXOwֹ?\~߻l(ٞ4rV <]]ݬ^f~XoL_ϝG'}Ctvv195E%38LNNњL}T*RHau?-I|kinj<<ץmmxGqHtq,l9] Dk{ bjsq=WHR9P&,q7 thddrD\q cSRVO=zDv *"ZsWFDvZ{}@4XIENDB`qutim-0.2.0/icons/core/cancel.png0000755000175000017500000000111311236355476020325 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥kkAkH !)4^cƘ4eJKi(̇\ ĕή;OgV7U/ þϙ3`  Fe` ݇[:WnF{2 28dA2I>w&B;6Y$ ZŽ=DUemӁfZ/Rm Cz/ tB ̛NJ a;rd N,XX'>Kry88 x__Y7ͫʹZȋ ==tajD_RA#(Uxf84ݹ9n2$b'C{M9Hj9,=ݫ R,2Z˾u0(fԘycRݵt#]畸ݿIENDB`qutim-0.2.0/icons/core/icq_xstatus36.png0000644000175000017500000000161011236355476021617 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  +d&гIDAT8mMleniwKZ_OBb[m %ăx3rjTM<݋)((I &HJ Tvvv>D}K7uW?\!E)N!`5BuY!0IfZtqRX4?/" acR1RR{) ݤ7D)Pa(AǤ$ZS)~f{jO35Qό -^+ gٸZzi&lB1v0 tJ REd%f^}A.]Z[/cd5x~ ?8*'O/-L3)+M<Aui%+$IENDB`qutim-0.2.0/icons/core/icq_xstatus8.png0000644000175000017500000000137211236355476021543 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME 9\{IDAT8uMHTQwst"ҨE_h"(Z֢lѦV.ڵBѢv`&MZ6oq;F+<\x?=GGiUv!Y r+WB\z|vڽY^$ݿ͊Eۍ;;xdFs,ٶFaln/P Vj1E x@U 'wن@>_w݄Kyu$NfijPvUŅ5Ee;6~0,׹/ټ=6o3V?Et0F,/-yx0!O"^SyZk&3úӲ,L0K;t~ 0 R"Ē`So/:"Z$c`(.Ns5Cq.KMB~8pA$mpg,+:bwVգIENDB`qutim-0.2.0/icons/core/icq_xstatus9.png0000644000175000017500000000135511236355476021545 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs 􊲉tIME ()IDAT8mOoUUs{`;+HUCC@FLS%mQB wp!I&mJSM m^VJZkg;Od+ml5ad7B7?!wrG)`׍i3?Տ8-f 7 QDُp⪄^C 3-q =9!Jh4#9c;n8//ܹ/6:{AU1˸;J6䬸++VŇYnU]#gEUf<u!DB?0 9kLv4mc H P~ "bJU=m;D"E1dfwvjvw)ERJXLu)O6 eYBTNӴ]ܭ[}i+(~m.6GbS.L |8<^y\$qpH)rΟߦ߽p4)I" $[[[+wwLJ^ٻuBTյmOu\b{`IENDB`qutim-0.2.0/icons/core/deletetab.png0000755000175000017500000000065311236355476021041 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs B(xtIME +eD/8IDAT8˽*Qk=&( )<;L oLqAB%sa{uYGn8d:鶳,˩ZLzޟJZ-@RWT o/ q܃ h4 +XGHq!7+Ap p"[Y&%曜Jyz03$ Ip%$S q1+sf?(W32LF Y$22 :d?݃ 66wM`V|'kfsijNvIENDB`qutim-0.2.0/icons/core/show.png0000755000175000017500000000152611236355476020070 0ustar euroelessareuroelessarPNG  IHDRaIDAT8_he};svM\pH #XVC2nXaD!қ04&B B-t\`\Y;;i;?v1A+ev 0 R{Ūj ?;́Δ8G7;;x,I<4L Mwʦ#FD-`K4QC˅ݻRQU^IpIENDB`qutim-0.2.0/icons/core/defaultservice.png0000644000175000017500000000131711236355476022110 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<LIDAT8ki3;3K ؍.b#"b,\ϰm,!0+,+Dcm$/4z̝=gpS<33`|/\_{ W.pcؓaI.eeY|.idfffJ7{8ɒpi{V U=D uMUVE4C. m&SC)(ҙL 3CK?߆#d?.CYkDB@m*FC-X166Ǝo'h& GnjڝO'Mo'X_[?w9u${߬=c@D䧟/. ./t=M{-E"MyR*Ix4I5>EURKoJ}g@{tIha\q9GR E]lja,_hg0Ӵf9|wk'[[,$I]f;B83SBywˉ$b&; /-s1&a$ 8$h*̣#٬)r#^O:7jۊ8DfcAsO巖űÞ\ȱҩTxX,[`h QEy賉D,JgvwBCad֬HDesq)^lVZsҷϡiv \T 4ӝB 5ed|B1;aX QH RUHݥ+)u*Yc~⋥}A-0: @e˅ihV*/l0qnz9;IENDB`qutim-0.2.0/icons/core/deletetab2.png0000755000175000017500000000065311236355476021123 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs B(xtIME +eD/8IDAT8˽*Qk=&( )<;L oLqAB%sa{uYGn8d:鶳,˩ZLzޟJZ-@RWT o/ q܃ h4 +XGHq!7+Ap p"[Y&%曜Jyz03$ Ip%$S q1+sf?(W32LF Y$22 :d?݃ 66wM`V|'kfsijNvIENDB`qutim-0.2.0/icons/core/mail_home.png0000644000175000017500000000124211236355476021032 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME%"IDAT8˥KTaqFɏ>tƄPQh#($+AhSn \hDADEaQ4IH*Hbkis{Zi x7JD؏ )kC )JR ӴF- Ywô&IJ)2/ȭO؎M:=8S\q=ܒG:=two3P@97}F=d38!Cao)"s t=e zR >uJEEf iJݢ@>XG H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME3k(EIDATxy|Vՙǿ]ƾE@X7ʸa?юNtfZڎ:ł}X['"ʢb 1pɻ{{7 %A=<{ys C;_N)up0xxDJ/,H)_@)up'pRv.y %SH)MQ<Ӳs])鷚P 3&rG PJi`Tv+so5t&z0&L+P^`lRJҁ?ò4O "Dat3&ttsi̟QkR?|ePJk}ū{ۓ<6т " 4Mp2iLWA/I)9PJ} _+Z0z aVM7фNLk7Ef3IJ@)U ew~V4 [A 0<3I');x*t,RR/M,Y[ѬnŅ-.4v;B\SJ)?àR(߾7?[ah #B7A4ytgn#ɗHf #Œ y@a| 4M?8?k:2v]ĤA!ORT]5ZY|'v%ṾayThnN|M`}[R?.BSnn~ׅ{;ҜAp0Є 86-gpq`ra@)u^sJK{,Y-O0 yML^AW۩*DSБrؓHzऻ8sxjyv2)$.0';g;.nhb@!4CYVQ#Ξ:Zƌ;ޣo6:CV)D\92ꤔ'+I3wFth^ڬT?H~1m_ĉzd2ҥKVq" T'O1wB.8^JVPJ^%Ų7wђ1VM;s\͈0~yfλhqzRo?p2$4.Nq彝 a֭$-X?wܞʪtS `HIYyB6?J{ϾY5u@Ӱsks,:%_K.> ;3:FQTeG}}=O؎00y]EW*wdp[^5/&-`L>d*beK9۶m?X6vך6x fk@pI\\4DFJmw篫[9rFa@4-8݌=/'NWL,ld^R }+-*k\y ?FG{{^iûrmwpェNb4#c:Mq͹`R,jP)5&Zފ"Vuٹ'&NdT2x x)9qL*ze֮[Oz3%#1"%XEX 3R0^s$8«jߗR~/rEx撅H(ai~jjjp͛7 H88N:cqvq)^t)< U"D8fQpfA =X%j4B".!q/> ;tL*N'qmۏ.VNh3g$H 9i,\wbဉ-(,2a8?ς1x*VxJ$X6@Q5zHz$=E&OǀU`3U $yOSEܿQk)P!VA)o2mG^|b"X>PHŃ1 Hw]iЄlY~ P!\BmA'ũJxukh-8۫oѯBp7/s'JqM̯hz<ҡF(FxVa%F=E-ç'ŲUMY]F(f b`*tcP.&M:f6pld7PċMxkj8ult˿rhL*UI,cÆ \iB4ӆjFcE{/? ?P;2ʛ;RMb}1o-J:Fۖ ;/NIi) y&<3GEzfՑ;{Kt( ;5Z7e=wW%hJ"c= !@hB\ SpՌrFWz^<LJw@{R?ι"f~z\u\6fT0,^?}_'q$>{~藩:w̛^Π@ϋM|HJyػĔRel9iySEo_R¼ ̞WwwK)_XRj2c_mDXL3 2.-$Kx_dWJ3;iܳa4c=^и2PAa xLJӖѠɹSYB!e\xl9@/\])Z VMχcQy+8oZ 7K)_:e z8iKxN VIB+Ooeu3  شsW.\9iROIxW|_7OR1C";ww]YU6ѻ_u|c@D_۸ۖlFD2*Y՜4gW ,F1`L(~.޻m̴\}Rz{X %K @ xamgNd0IK| ,bd?aůƮ$w\J_#i?yIENDB`qutim-0.2.0/icons/core/aim_tr.png0000644000175000017500000000127111236355476020355 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDC pHYs B(xtIME #-&9IDAT8ˍKHTa{uǙd^bA"q ZT&p3hѺMZ%*qc+E40viUTmqFGc"&;#3ъ:;@))Z#)pOz!ьf+$1s+}u3z7@RyсIi0N~$VDgF(& q YCH*t뱺b^4H-pE@-s| ]Z3:k RNM 0*#$ Tո`cAhjDH-Exj 3â 10 l$`yDeK2{*ECH 4ೞ`%B!1v$.' ӄ-%Xߩ.xbvʔ@H49vr2ݖ&1 ۶N7 X` ^KcL*0EޖKm.IKپ^÷iQוݧ.FxƧJF>Vsג^8VNG[ah @,J}hO!ogiõ iR ͊:IENDB`qutim-0.2.0/icons/core/playsound.png0000755000175000017500000000064311236355476021125 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs B(xtIME 69$G0IDAT8c`0b,5g`Z@H3^2_  ھvzg&l3~# ,l*ÿ@&0000t7^:  Ld?xpa\xIt@V, ˳0000dZH2w |k'ӧ:5- 3U~^u~ne{O2s2ga```aȰf33;'k.[ɿzOg`a{p[wo^<}C>''L"b,* \axCWy9uo)JIENDB`qutim-0.2.0/icons/core/birthday.png0000755000175000017500000000124411236355476020713 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<6IDAT8˅SkRQzO%衿`oQA{ F3 !5jAmY ԥp]gC&OܼgWݽz7QCO{7mB>s>^&~HV.7{ ЪÈkѣ?w=#<9&B"418[gs8>SE3ش׷-L~C4P(V㣌I2FWdɢ Zg(C BmQcr90q L+J /eVaf](L@IEM5PAKA^E$)(C^BM7hOi!/e_aR !:hOi!/e _'p}=LwcVC%~Z27=q589aps$8m$iݙ?_tapIENDB`qutim-0.2.0/icons/core/xstatus.png0000755000175000017500000000304611236355476020622 0ustar euroelessareuroelessarPNG  IHDRw=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATHMl\W;wxfۉc !qdP"h%RDdɢ! R@V+JժJDZEM-$6-{2ubKv{"qhRYs~U\3UOx1wzyΎMdӧ!6\fǁ{,!=4+8qqO/.?؎+D#+lmv Q?];u?ᙯZ7!Uއq͝=)D+ `\.g6n:GscM}  >"k(BwM)D[uV@kZ˳6oYVi\Z†+]F+`KhT>3{} tӼ1gm轀|M<]J4h UDW Z*bK5k ^&M2~@DoWN]>BbEW.P>?CH"Yxe q-8@pYWmOv 㵜Xx扆qć@dV6CUb zݭ~ xJK;SBQvf=S\;;$bb Ƈpw~|E[|-©zkee%:@PCҦKU37Xc^񻾍?JXR]wδ9LNH9\ZZ UEDL.l:H{^ZT;5L̕\{d9p+@MB՟'|;Ԋ8"JTL( u&LwwCh?`@]DOP!Ch,Fbgȑ4 PU]/A`+%i'%stZǬ x- nO'D40JUİPUߎoOUu l+k/UeZTGQ]cLTDQFemO{䟧>BIENDB`qutim-0.2.0/icons/core/summer.png0000755000175000017500000000125211236355476020414 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME{<7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orglnIDAT8˵KQΫXFi4dDB)M… Ek"WAh,"veC:O j偳992Pvs6,Dp$4F\uh2Qŏt>Wù՟%kaeCimM*к~$~HcuK> Zcl}NgJ* ̎^T qTCu:I\'*1B m&󟑦qObUvgc8DuP?BaD(Y?Q,bldIP"%eTqpcoy1?Tah~Dcf0{!? X/U;e.,庭Mɫ(?>XXFcK8IS'RVxݳ.(ٹM@KԳY9Qw53L@ٮ=_ulIENDB`qutim-0.2.0/icons/core/message_accept.png0000644000175000017500000000132711236355476022047 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME$9!WIDAT8˥MHTa338:2ZjX ڴM $DֲЪE6m reBTU .Ѱtt{7w"xp8p~p^M)yLf~yWvŘ% D Lj&U}]=MsY,:0?,B8Ω. ZvlRtu"|Azu)}|Wu߫ Ozuwv $H)iOtPxe~Kyx/%k4nŧ;˖;^ꦪ4A+уUp@oqPәeӝ=yrE*tLPd p6ŭbm'IjD#`z{T=^OȪEt+уޜ>N,+{܊\?ʐ%ECx2-$ͧZmr0U|@<ǭTZ78j=X3C^mޡ$ }uh3bN[>ёvTen ijBF aD!}h(aLjv;l4̴ĮD LE-f_ӛAMzlQ)l#'kBMn5M~7 2 IENDB`qutim-0.2.0/icons/core/icq_xstatus25.png0000644000175000017500000000153711236355476021625 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs&&%tIME  IDAT8˅OoU{|BDն Cһ|;"p(eB%LĂ:y'Q(rRj.Ώef178AJRP8Z;0Cی%A$8 f3 abṳFy]' !N@DD5&8rVPߨw77~s 'qH`$@"Hib"X[[o7XFFROMmuv0RB۳Љ h5׵NӪ{+/Gc#Ng'(%!t?-ܿ{K8qyT*@2NaY AX|{GK*|ᓩKR&d2V:}w}jZ?_]-[Λq1[F=Ӕv`IENDB`qutim-0.2.0/icons/core/icq_xstatus4.png0000644000175000017500000000147411236355476021542 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME %$5IDAT8uMk\uN2ER*ѦŽBE)*;D~Qq#n&Z!JPXL% M1iLf&7s_ql9sDUy?.̟cU;ڶ^9}꭛OcNLL^y~zNUhX!KQ䟿}íVgf(&Dt7Nĉ^:H5"TqI@|bZsvqvoswD[ZeӍ?'G<. iǎRèD!HT 8d{<1Yŗ% n~-\5V[6 -O%Ҍ" kprq=h@'qEFh/mc1]m+ .пuT[$̠B}raʧߪWODƕ#koϑmޤ4@r{Ta堇 2Yɇ2ESl-+JkWHS"^no< МyPڠccfn f4_"fO`Ң6h`tw$q@mرec;k%hRvS/SuS$FQ"4@;-thz椸rbijIV65WGqi4 lw+Ωrox_ZHIENDB`qutim-0.2.0/icons/core/conftopic.png0000644000175000017500000000141411236355476021065 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڤ]HTApeWZ!&JAڋfBDa/aS"=JDi"EPn%miuݏν{[393wavi}ăÉA\ARB~!7X*mqd,CI5x)  kmѻ~ EJ5FU:>m ޡ5-JI>ډ\✓M:=o@р!bcM9F L$r f SE :!^J]i@t 1PHYj|ρj@(|Q)ˀ:d(V|w|*6Xr9azK(jVo#+93ַC R/Y@0DXgGDt9 4j"->Q%gދmכ}dM` D<Ƣ |yD'g9)kZj/mw4?/ Ņ>/\9^pyfg7abpXw|_(urmh!K, ecVl(5a,gLrpt^LemdZ-G Cv$"e$! rL%v2OPg!}ڔ1lFwh[]P-}IENDB`qutim-0.2.0/icons/core/work.png0000755000175000017500000000114311236355476020065 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME  9cHIDAT8˥KhaLM JƅE.4bfBp!T-RCBkAte@‰bW6IUiӗ DD:3nf1³{?'#Q X"M4QlRTlb4u#Q ZêEtFZdfx>XBr"2>06א:%Z,1`o %nFa~N(/;+tHRa %Nʿ4J'{( LA0: ԬN Gl6y75 irtI4Mk @ҾB0L8;77TIENDB`qutim-0.2.0/icons/core/deleteuser.png0000755000175000017500000000137711236355476021255 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥kHQm J¾*,D22/SP,IbJ C,6VݲY}Q䦨_g Bq?,[L ZP&M˶@-@̵E $8˺%5Q<ܦ܈4DvyUATPWBp3~UUK8$@dqr5Ÿ3?`E^ǨM)wOӤ[QP:tF(zjNW&kb{NTX&d7Py_Ԭ_V ѹ)>}!/ <ox?O\w/l`bGR^O@S^g1>h`عᒓjP= ^( b\+H̴wPcn*`$d[6nַ!vb N5NèY\ ?A薰>9>S Dj "j ԂWvZw#N{*ǔ=PCAGOXB !+峒neY|>Rn1Wx[0H3!bDs"q.34ne^|d\XŰrm"wfӎftpvvQ{IENDB`qutim-0.2.0/icons/core/icq_xstatus13.png0000644000175000017500000000162611236355476021621 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  Ч(IDAT8m]Le>o|("(Ql`C8uYj-ڪu<6ZY[GD9EJC f$_sߝc\k-'5 GO$[.ky+ptV~ZU_EkbAK3w^賃~>%mmnŢAv c0XX&._&mR'eWS۶щX.)MÚ\RDadd+ƟC*5 nY2wc5f8ZGɤ5G?9n-Ov7ydԀĔR1VX:.\z}\N,I27V82"j,F,i  Ɛ6C :cƆOKTϡpDp"pcsxA!kw|oz՘@єGUeG(a<7 \g1 OMN^-{xp]KKJJ*Y |-Z.ֆ B<5"-bׂʎy>Jqb=}v+_>%oj}޾LǥmuZ d kf~ꏹ[3wz:q]R< hAbWis:z1/]V:tWIENDB`qutim-0.2.0/icons/core/multiple.png0000755000175000017500000000630111236355476020737 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤNQ{gʴl\v:%i(5qc| ^wŊM@}KLh)CMg2@.D[ݓ7׮o36D@)PJ(6loo`ggs._Ea`:EKuccF#Z8pnS^__ze67U7~ ^CkRVM(qQMcH,[ݸF)M6!(w;B^ 71b2!">%4IP,KsPxqc8p,SV9sض|VˤR6eQVfZ^?jwkehzղ93 EAH°(A2 XL@KG-.>$R<DZ1- btt R:}L:Rĝ 4w=AIENDB`qutim-0.2.0/icons/core/icq_xstatus12.png0000644000175000017500000000134511236355476021616 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME ?lwIDAT8˥kW?_I&ɘXc TԽ(t)n۝U` B7M"t!Dm!:Q31{I,=ܻzs;.6vʹ۳L~6{[ߥi~~{fi85{ȸCX{,|#>kT{ \\{@UW͑n%/z4'GkʷJ详<_Io 3fc!:Pm4 b7VԆF(b,;[`f;/>~ÕF F0A1ei$""yݟֶVsݧ;fFj"eHCDLZS7cʆhEH4VVA,N_9f@_;8aeyZE~QYg bkYARZ9Ap8UB!ܰ2\%+lT왹tT/i0 `a=:{r% %B!IENDB`qutim-0.2.0/icons/core/antispam.png0000755000175000017500000000113311236355476020716 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME'-wIDAT8˕Ja;43JFC AJ0Hct"]t0 \teBEIVP>P\ \@I17ȴ;gsȀx݀/|zyxpG@uOHRZXXОRZ VC 0a/ zbwLIt8l,z>ϓ-e !v{^aR Z v "8=bc.| f̙\xrg\uݑ[Ra&#lח=8`^K=@Dn=|C>y' f"/t 4}IENDB`qutim-0.2.0/icons/core/password.png0000755000175000017500000000133211236355476020745 0ustar euroelessareuroelessarPNG  IHDRabKGDdg8 pHYs  tIME  ~tEXtCommentMenu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggGIDATxcd:Z5T ?]@SQV}Y-#a@jq|l8\˗ d YsؘY֮[Cs99A!ec8d>%̉KbdX^ZvW ?fXl\) xTRT.3AAQ ׁ\t2I+2u> ̀?e%O?b`fbff`g`;kdPRPci 4 x?0f AQN a'ƻw2prr21ps2oc@C0|O |c9]&)!3O2H)lƟS"##crqa+g & d;WlL2 7lb(ͳH6; * ] i&pX4 1ezIENDB`qutim-0.2.0/icons/core/conferenceuser.png0000644000175000017500000000121511236355476022106 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDAT8kSQǿޛgIhh PB O]DSu{Pp* lGg$""A!LXKI^A-Klp·s3#|\;ssm[.TOw PX`fbC+\>ոu@A;tp,ُTŐ| nݎNLB*wz^+Ш|hl*nji"Kgqe^N/g.8O1آQ عfJu#ŇFȇsx(|+\SAZh #FA̘:(q'"-#E#`[NDxXhEtҞ/>;K" h nf(7=ϫe[sVKN8I#[DklG[o_\HvJ+)B\nxjӨFm,Z[ac0鲮M8^4IENDB`qutim-0.2.0/icons/core/qutim.png0000644000175000017500000000625411236355476020247 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤAkA;)ې ]iAKA)zT?G z PłPԃШ؈Ҙ-4F7Tsx͛fTt\\W-rk/J Q^0!(R&`tk{($ڠ N9a^'AD8;0lOS9,:28'88-i{pbY~>/; VϻL5"3~0Qydh "T,k\eܕcx1SO!ˣWu 0wyfQ4>#l)x%BiЃ,;d;l8wy&IIu7m6.׾~99'6Յۗ.cܨV0uv:P.~@IENDB`qutim-0.2.0/icons/core/hideoffline.png0000644000175000017500000000146311236355476021361 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8MHTQޛq1#D 'VEP6B6nEP.[H*ZP\d+JDItǽﶰR]=xe1ź?ҐO$C~c߶APpk`s 3 ؟pvvc_ ..$\X .#Pk tN_;X.=c!pt|yn 6t|>D=ͽzB<=eNыX1m,!A0jb2S7:y0#wœˀIFJoB5~X5p;e؈=O |8qP aq/8[u 4Q쫬EsB(} %^ΝC宯hBع^x|*@m!ڶ҆D"bh"S[}޿|ۛ3aF7CHGGw5X5:,sIX#-e)#F"}vvX+anJ9CB^G'ESU<* ,ѽD!He?GB$\ox>݆3Z$ ?Po=5I8Vm]/! 9RA\P&%+:mܒf;YUE4mHd8m _%Um+Q*%%+늤Ԗ8R.3c6?TW7!/IENDB`qutim-0.2.0/icons/core/readaway.png0000755000175000017500000000575711236355476020717 0ustar euroelessareuroelessarPNG  IHDRa pHYs  ~ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F IDATxڌSA0 DA+7L\G%XgӦM&ђuƺ*(uzcD/eu] "0sJDiB@Q)J1"LDX? ,̪Ҽo= r*;W*#K}J%ҙ4KKr?=)t#=lnq;f!A4RRq8cb8GGX@B 0L"a k*h|%==1abI!1L6÷V@H߼}/Nsws 9ν@v@{oh@>"&l|~fO47-Q&G8uDEgz>Dж(xZŵӓH/LBk@=crk][ADL%x 'Shi>.tB7ی!)8 `W_uFfs0PXqQ+j @P PI}@ "ܿ]}hvdpF@~F24}k[ʈΎvaE$_1x%` 4V-{볩TJVU9v$+s˲؉xmSS]m4|/R170zi$uNW(\L&0A'Hd<0_VA#~ 8r%5<3[ (Ʌ@Md9`&7NDlɝeAN H1R)FPJs˲֚1~21RZb/KMIENDB`qutim-0.2.0/icons/core/green.png0000644000175000017500000000075211236355476020205 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME *3yOjIDAT8Փ?Kq?{18tA'NWB^`_.CM)*b#iMߟ Brp}9>;QU Cѷ[ŕ-Y0PRa@j7=x+Vdm$317ls oO9< vQtXْPv玲7Ik8G; ͇盼` %k.I;3s&J]!*2c4l oΆIx'.]!=<#56 TĮg=z JFr(ծ^)M#|!>bČ!:YgJŊe&ho6]񹝑P RC;k¾IENDB`qutim-0.2.0/icons/core/advanced.png0000755000175000017500000000111411236355476020646 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME q_ZtEXtCommentCreated with The GIMPd%nIDAT8œJQXNm%0Ţ@2:O(y!:\&8&-3(-vtbM7.zVs9?߅[FbT0nly FYe@Ocn,s='O&=ѣǭvo<6??OT*0b2u#6,p+035N>z7 yddU` 0DL6`23XߨaT̒IξK˧A@3p;꺈hGLN_8'hk/05S7k (LOB"+<DZ (c# ԩ!k` z(PY~g]Rkg'0,&BiOIENDB`qutim-0.2.0/icons/core/previous.png0000755000175000017500000000121711236355476020761 0ustar euroelessareuroelessarPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<!IDAT8OHqǿof~;RblB n["VLD"%t-z;$% n$W"KPl0wz{RJ7+[Z+a X&殅 e>LpA?XZ9nax۫"vgȣqrFeJ%ٟbevUh>Kv/ jI\6Fuw`>gfq?OX;MKAE ,>0di s֟\WhIKgfXTRsabAф˿+_2pW obj6`gd`ecc3÷w߹i3ځϏb`9#٭[Go涮ZiAv= /i&WyXkǚa@ÏoD޼pd * `fk . edx;WN!5yIENDB`qutim-0.2.0/icons/core/icq_tr.png0000644000175000017500000000163111236355476020363 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8ek\Us͝|j"qu!. BV"PpAtPh*hmԴNd2I3wf{y] ϣD'OBO1pWn+9gJy/z'k%A/q[W*Ssg/fm?ZLt㳿<|8@GBu^f8,N TOjRa*7x֙oQa&ax<‰ɈNSV_Ƨ+lpP3L2X5$03/>n8 j1VN"dtj#=s,3`jwWml0 ݟ-MN{E*%r`  ({0pXou+_턤i|ھqg.eسU5HqP,y._/>RQnlfDUP >X +Z;ɥ_PchCxb!BW{a[^>آ`'f ~yd~Tz~Y@(:[嫭*pc[Hq2g"~X. i/ANp{i%Xj4(b՞Ty mƘxx<y@IENDB`qutim-0.2.0/icons/core/icq_xstatus15.png0000644000175000017500000000140111236355476021612 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME $cIDAT8œKHTajzHY>衣!BP-_FmS+hѺUV",bLhQhe G0G̽soFڸ[96eckeemkҥ i3ekz>hj|< zzn#C8?^Qy6 B)8Hpo ++D#3_f<t`tfcch9! ӄš5B,B 2ԻRoESN>|=VuFQGaaX 0 Az <O¬Źe]]ZPwn\{?UUCQ i 5Q\xYiIj l B A(9A?]C[Uaoj5d*1B9Bq49 i'GvLӨAfq#Q@)"A3Xt3IvۋʣiέL`%93-q`鹹}OF68wJn1q&0M @QG} nL[ƹ)h2{d>ĤR B ]3%q+Sk/rRW @WWC/"8E\IENDB`qutim-0.2.0/icons/core/icq_xstatus20.png0000644000175000017500000000144711236355476021620 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME 5,^ IDAT8ˍ[hgw$`k5]k)≠є@AEh))^B+B-V^E ED ˤ&&Mӈ񄧚V!I;3;3b`W- ??P55`hg ONMmz1VNg VY/(60c\,UK"WChYY]"Hﭶ8bSom^ 9 4$Za2<*J"H;WJ{a&ƶdBղ,Ou|?ZEX1|ohvf \+uw? HtKL+djՍD*}2Lm"r7=q{ȼ0r@+}Ɔ8Q:~ލL@_:;yqsj#G_FUCiQTf V׏htvz<!C r0hC1$!,n;Y=X+<$F:~,d 7?_OR:~~&N#jvm߻YU\V"2ys~,:[F.9\ٌ H*j5{<p2oDՇ&0UF䤐$Ñ-jn< 80*.}kk Mlx9-\z_,'XZIENDB`qutim-0.2.0/icons/core/soundsett.png0000755000175000017500000000060111236355476021131 0ustar euroelessareuroelessarPNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT}1KBQގ$aM-AKkruƆ]+ A$POqCp (1{888:q(yE13W|KL L EL""bx1Euh:)m~%NKE^C84)E#iuQ`厇4u"3z4yIZHG%tf0aD'*&rn#mQ 'I$Y=37Q0`ܽIENDB`qutim-0.2.0/icons/core/icq_xstatus17.png0000644000175000017500000000114011236355476021614 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME -ߦ6IDAT8˅kTQsݻMHPDFl21"DABA-,4QIܼ6yDS3QUV` 8 l~?7`fiٽ Wz 3ّ]ɛx8q_jxv=2KjH{3Z g /Fwƹ~& `[`LX**ZwIf+yŚfmjFgƴ0}鯳gF (>tQ$_DRj~f_MϞ6PEbyZ"F\B7YohM;}ßظdr x2|47µ Y~|ɰnM+Ѐ= IB\E3| pֺ iRA@ a@z%:q>qbIENDB`qutim-0.2.0/icons/core/exit.png0000755000175000017500000000705211236355476020061 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FUIDATxtMLu?[[KVڵ0ZbP*P3a0z`b ^O1qLɦfd3F,LYW^ڧ/`J[h>= FM\|_\.^}e4Y;_;7+T.%/sO|a{ޚ?{nA"4 FGrk\9'zɓcTm}ק;]zj,+ip8t|fc_|9viff[S㧿9rX^# R.,potfןs(+jD{;AuE!ϓL&*d졭ă~@c:XZv3pxZ -^JSp*o, hP(>=$i㲯wW7hJ*nrsq|~ši94U۝*z:{B$ZZZZ)LdY $IR088SAQ(nz$W[e;YraXvx<,H}Jhjՠ4,5x2yaissMU9{fK/to ! ՙzm Gr5)666Vts`xcA4* Ǵ,<'zs>|F)Kbqz#/Ģ}fb*{"tvva52H8{9?7,*u}Pc,y,z0nۮcjض$  Y}9?hx._esiQTBu].L&%._Oz$=62ccO]'ś?x/t==P?"$}m!4~uX*IENDB`qutim-0.2.0/icons/core/phone_unknown.png0000644000175000017500000000130511236355476021770 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME"!EIDAT8}KQ}_mi?,,7*mA+C"HhѢ"۴i}V(.?F͙Ӣtgs99lWC@uCۅ̥X1\{%3}QA0 E`l  .D0Ģ.EE\EW$w[A%6/ }uj7|u+; ^Nэ2"+Xl+cS;1{0j96KLODyD€+cSAU5l!Wq뎐H6sӹz͓j: IX]fw>QOUz֦⠳jV$[,NHKW/|/yb9 *_D-ިGCt8H,Jib Q>Bli<&EKE)ui>{"%P"OE:xY1O?Ri |xSDZs6o/*<'cqrxXW8.%&aasKNViA"pߟLA\IENDB`qutim-0.2.0/icons/core/servicemessage.png0000755000175000017500000000077511236355476022122 0ustar euroelessareuroelessarPNG  IHDRaIDATxڥM(DQ{G3bĊ%͔- Xِ6 |D)YXM1ͼy{ 3Q8Ss==?;\85S9ml¯lNA)nlg;KAak[ *c<p:kA?Cfǖ3Gϯn)tj-41 ң7wJ6 Z=p?+f_,(WiEQf Z]( YZnF};Va9s"ʂ"e50> ^ 6@|XP$ W ܧs=(>,(Lϱd dO}{_un}0`W0R_8B'M/5 RYEyHL` ϒco_!6,2k?.ܠ}qP*W3IENDB`qutim-0.2.0/icons/core/icq_xstatus.png0000644000175000017500000000151011236355476021445 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME !@IlIDAT8mKh\uޙN$M\֩)b`]4"jJHBkV\{bf(.t -RjZ3${"Q;oq:#2<)'7׿r7Y>L4FV)q]w/ɡqn_jyދ{wE5(E)W\ve??̊4gv (B`9yQ ҍ]c^87'a34I ffc nc?_wH l EAYS3P:w;'IG[p;YTФπRDkk<e+{A@} S`-Rso pA9AOm^k-Z֘%\nb]8(%pi5M)>&q[B<(h|uonle,$)Z 5H>9kG7 4?k AЋ¯$,.g##("'Yy}k0ngi2* M +v͛y(R D6hADxp|n7ktǹQ>;ylQDJeTj5aȖFo9ܫ+Ӕ'w5HZ )4-iG;}}6nyx/Ck{IENDB`qutim-0.2.0/icons/core/gui.png0000755000175000017500000000154511236355476017675 0ustar euroelessareuroelessarPNG  IHDRa pHYs  tIME  ) 5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDATxmkHQ)D4ʔv1{1% Z- Շ dj_ #+ +d*H,r.QDrt8yxN]ٸwa ^gb\(y`shx/->*0 Xf}ooLBoZ- j/@A OrNœu,àAD6,0TՊ nj%EI$n1PIӔ(A4@͆H$wc)j5(Zh(h4b8bt:>Q4sY״Z-9Fwvn?K_,KIENDB`qutim-0.2.0/icons/core/filerequest.png0000755000175000017500000003747511236355476021454 0ustar euroelessareuroelessarPNG  IHDR>a IDATxypdGz|. 7P@&&5PFCcr8FH؍ j#ܑnؒlICHAvp8lݍqFUuG/C,9:jze&SJnm~''1<̿{}*A)@30W193i/hS[!$ħW  cL&!}?Zpmm@ opc~tLވ1L:[8W8Lڇy w'MJB*B JMşSیip"rߕRX[["ud> *B]K`;~w KT aߤ`}̳%gjEDh>#\c BjzuңXcn1*]iM!rkB“}E\D u4ʧ, !\'8WJpR*H%;_F4Eh3nQąRc{O\|0$nB S[5m]SpH!ݕE&?GD`B\M@;eg 8900d&NJ^o. ڔ6A h ԆӠ;icLBXҪ2 aTc}s\#?uvD!쑤5#ip>Z(mmk?6҇i`W\0P=ˉ&vı +{ݶs#'PHaqzIi"ý8KhJf|($AԯI- $(Eɖ29&JA*Ƹeo<ŊC( J/R>AS i<{~?*6VqobEZ JRIL.CPH=ä#-wm~;4w /( @qٙxY\<ˋ o~뷠0{1n{Tҥ5[{2D{"*:@ѓ1+NT \10 I}ivU9<ȃW y/&R4)C) ļ|+y7Iڛp `& 1`q~GW18Ї_}򫘘@_?Zz\6FyPƱۭi:5e\]M cS&}N NRJkSJL/Rp\z8կĉc Z o^+WK_UjUtw?ES+TH2L*f,q2tr8 8h ^cv4x"h_2;s===ZY]64 B%N7Sm H|q׍\P.Q%V&@ p[2X `c:!H3 =|7_n\3OBcHX^Z›/cm@\.8f.֚r"Z#h!kG "Ӓp4ħ4\~n7WW G6W5LNNڵ=C  `pI|'ןzW>_q*^kqJ#J#S<zN?5"M5l&'"͠򆱁17todD529ΙO\§}^  inm+Q*c |_<{]Gxoy~*cO3 "N#N8*pi}elmmCxB|\6t&ma`!ZAh"l mia=Lέ%P:R4pp4kg:>`R*Զɇ8}QLk_xa(011efƍxT7附Rv^@Kbڗh-;339# rD(4t T|V)oCJVՏqiL \zB)>ܸ~Fp^?0 }{;ﳼ7>R+սop#2}Sً PR4atCk̃si bghr ӟ|޾^ @*zkW?3i_KǍ7Poq)pz Z+PJ!J#JSfZnwy7'Ю"fD`6!5Q  nר}mg51{:.^6~j NC+hOh9L&T*mÌgUz#bcw,}242=qqTl`%`իۈŋB>z A6+,/-'c llLkQhltF%}.6Te:Jf©=(27r1> 㷲Vcg W70;>rykX80{}\ 4ͅG VOZ w[k$dKg+!Ԕ&~>PR`Mx=~#וCЃ.ds9RZ _kD&f wR1$PQ@9 Pg H⿼Y.aE_!QpU<5BJ:_ɓ: T*%,-,C2}BB)0C*Ez;iD{ķ޾BVǍx,.\!/W*8qϽca!bwp {d源Nkϟ{zxMgoJ]E 0Xdz{?* OphRfQ0=M/$fFRVkxc(133CJCG`a~RWk0&~(pYd]源vS}H"z` ɴ/]! @|Jd)>>*I& Y%j%,Ο%%9y=q,cyy Br889r.tuu#!!msn7ak`+ۡ)jw;{lGqgmR̴#BQ JȑXZX@T4Ehm~C&ExXFU [1DY`}Qiy6tNL HT$ pR'j s3xc Ν?!({ "*cyi 8fm~Gb;jw%Ǵk"X4m0AiTӸus CCac6+%\}}}Pgϝ ǎs &UҲko?ׅnC\.gi~!Jce}\Fc[N=CB*bw\AJ13N: V{{ًapVuEo_Afxc,Ξ=)8QcA!! %&Df:4u~w]lTT5\@.׽-v<(==?>4wOLLӒbr4>7rkΥLgr.x4 &,ξ|B GCtuXY^_ScuMYOt~=,.ʗ0L,桻NZ8>aNcX^Z Gc'?.ًq=+uU(Hi b`̃׏,*z e$21 ȡH= &7:133^> )%N<\6V z{U.ceyo.6u{̌͘'(BHۯfqEuzf1ƭSAv_QR1P:.&'bl`qF2((zddEViSnBf3 kιf9s0?P@qBR |Ƶk3xY(%qI,/,`~nB/硫+0hbyis Cspσo$s/$E0KΖ@eXRJ=ɶ-+)pIMs*Fv[b"1H:fhrR8*R)KL0*Wy9 (]z{CXDOO76j )9u+ 1?ds ,/-O@Hl+) Cp7/Ѱw\ƘC2 aǎV !"F/Dhr+ᷝn+.9]hfP%IODv\elMv1VRhI=N1?FQ|!K/)NS!}!diʴF> kNbZ9+G*_]@BFsl>yD@c# I)s52t0Я== {H`T^ h%(xfR Ja~LN1::j-Z& 4~4_2~`ueo%%|wjۻӳ%;nTP:U#QhiaGP\|V[Q?9o`z7: twzkAp:IAwK"^4F`%>LLZsm f E|מĿz//?e"nCe\~]G;fbr攪1&b*h8<("\рޝ._1&M Lor`hPHfm;Q)3xIIz,$@JB bbl#C籲fɉQ4FGpͷpYHbue3PJ{!d7o>P \sxT:{$Ț$Nj}r43wKe,?jL)86B rגJe"$ڄ.-?edь3Kxb]v}\ɭ:t ]ZNs;\COO/!ByasT*U|(pbuy R gΜ֒*6,/a8_yfFw>kp3l-`gl_pՋHy^hE'tdpS [@blon:ĐGVoQ " &|t'7%G}>tuPl3gNSPձzIDAT&N?~㘙-L:V %ucm&2 -4u;SMYۜCWW~/d2qSiEh/܁Z[ki502:B&D@~=T=DF{\;$l u[X< =u4-lllX/,.h`mu׮N\ԑ9Buk KKk-B)t:\.kMhȮ'[ϡ .r+vszKsױqk=z㈚~ 5 a31 (D/bCW.6.,8rd%t{ ED; Z֤R %=.1L|:% ׋M%&nڝssshu-X[]_1J͈H( ׾ ĈAnv% O2H;T/t=O15.9t4l՜IS'[@;IT AJDLI{o"zܿCGDٺ-l6ޞ".НރJ1tQf]|GDoکZ=gq ǔF#wWxرpw2cew>20>2<'1:ZDK!Bܺu O<_XX҉Ph7DyjbnS7iPEIxkwlT61F߄#O*}hxA)M͢)p*v$ŴiCXq~jR)Jr=a+Uׄ2yz=mD4.g h;E;5-d\ǂch~``=tFg״%9[S8zI%]%&%Nm؊t[OEs ؎0uMq_B ܿcb|;RơÇNU7P٬8ٗ$hSВC9W5LT& `[$ 2@ѴmNburF``x_W L.1.]Kʑ0O@qts4MLLNr NA) ՕK|@W1m,CKI#Uʤ"(Tᮃ9cuOňLuUJ)/ 2FC $pr/STR,x**⏎FKsFr)[XY_PΘ^49kL@,\bl ^.a]SY0f gtIebv)]1_g[{#DWH7%.,Ը'&-4 ݝ41VWVf5"[i׵(@9%lB@ZaI珈:qg$ен ](Ѣ\.DtqӒsl/F\%_F* 9GqA+kw}岖|[[XYYAZ 5pSj=uch-C0rIInZۈj?FZԸ–5nVcSsGxzH-伧(}d'X99FpAG-&&oCJPZ߬TohӟTHd$#RgPm`$aۙ$B!p7d$)31f?0TfUi#M@`qm(C8vt #7t{b䎒?*hR*J0<2Vw]m(hZϐsh!tJt'nhG@jY[@.du1 Q4' #@zx"faƱÇ0REV kOyUj +(K(9G.t*D46=*b&a$Bp#c7pN ZчT﫶q]4Q͹GDlMY?zV&J@l!f+X__ @6)cvKv\C̭XI!9}I"@&V|"p+!|.@Tt2hf icRQ( ) _ѡ^n_\6![[5.֭u #,rhu䢇ڙxۤZ<ϋ,S$I$c !YIzN *N!P'Ҭ"R6BR~ V8WsKs3J8V=ǎ8:B>5ԛM "*Qְ5 1f˸\|]##)}.VRLm7s$Pj٣j(CF5"7VbrU0Xp. 24fK ~c]Pʼn|x~ ) B,//֭uP}dYѴB a_(@ Z6z% ua1Vla;/@Dӄ#3 ?#b"3f@k ((o>ŐR)xF8qA^}UʼDoOIR) C)iMZ{}z"Md 7I A-ob"VԒU<$;xסvMDSH_}oaߕ& ǘN!4tV% wFGcm_IKm{{z U\xE\.g?Y›I-:2"LMsaö'@0 q 6v3}.$.C"hшHa*-Q<C/g: c:~(Ns  ӎ$xGOOam}C/J!eVL9lI)j}:GR#UJQSl6c1R,DD$iBx;z2~`4}nn92NgPULiH"f@%%pc6oq4#%l`!N1fIꉀ:e"#%'0BvHEFDJ?Xp5q h (SY'``)yh6/=t Hi8 }c/ZM%!‚ |!*^*nmT@-͂A׿ KJ#& !ovtQ&`I% [(B2=uȒш.DQX")e/fu*ժzܥLV}l66s!>s ;_ڭu5ߪձMO'!VWWKud2rez_aqiyTOOX[ӡF*Eݹe+i8wf:TV 2oՊ;)I'!`\&v|yD|Dߙo-0D@C#]]ݨժ$|;bMLLLcch$gpjK9'_4?U\_Ri)Xqo;kK "FZu/`<`&]&xHyY%>z90gY\cy (zC@6Oj5{o905-Zf^3O:N{ ՝oݞB"Xy.uMPJ-i$b z9"^,Ld4Y6WA̡/;h4PcX\p>c宫ZK QK2Pn+!jBJwds[[[905Jry`}=ǟ|]?t _(!D7q«(=[{QأmGAhSX=@es3Pr0!N!;0$D .#G,`gQBSl/K'-\cV˄ш"vgg*9tPjqaazdbbqSSVťB!IWfJ7ӯA'>{90]:a(˺6ʴA2(J6 I%gif>;nRn%;3Ѧ0Pxy"-j'f;2&~;N-.,McG9TX]YG^b磧 !$n܅W00FuklLRf1ۺS*7rhI240:w GE8CQ#%@kɸ b> [ih#Byc w??tPzqaaOML'#`dk_q\z@`qi>B Xys.f9Oqo:@0lp%99Go]Hn^|2CHч{?^2sтDh-.\%zzzT* ;PfIN++zl~_Ƿ67shPzqa~O-Fȣbxd33xqpj }}(Jit Ɇ"*^>{+<]]9-̙qۨ-ͥ:%8:g$FNukvBW]𲍊wMٍ lF;l պ q->nu;lpp[htԚMY:>4u(0?>?ZI3byeLMM!B@^CTX]CTk5任NTo6g'ꏵ*)* ü)˓q[EݎQ ;AusIFL^?:c=BޚE}(AF6rŘIf===Z0sAZT^x@1ء}G_|g=?GFRxWfggطoz=P6J>;y,/,z?|e~a(JBJ%la(RԘemj R վXm0 (ͮ P(lc8 Oc x2&M7ᄉ`aa!O{\pc0G2i?B0 cLS9ܽ.G瀎usn)ã>I?"cfSߜ])RʓR2)%g11w/25JQ}RJEQo]G(J2ch4~~HRتV}VadhO06>kWqd2YZ2naiyQ=> x&i_Ol6, A>Yzd2}i,J.# p*ύaiS6N">ww6vş6 3~iwF@DSf5 h4xbA(CLi. UfBVea( P#l6fz*;vI!waBÓ&q人 &~ũCR^>GߺM[?xE/}13cs:cMće㙏;$&}p'a#:"'W9}.^.TJ ` 1&=StJquӡcz*Nȑ#,Ͷ#KLv ~o%!w 'Ll,w6ih3߸uL]FUoVBwuCKλh4[rX^^V98u܍s˗/V,q599&''ctO;#N혥N3$?v$1gqJAu.Qwz./wkpجVT.[䈁qupȑϵ#nGȑ#@t;UoV2uC07۷6}wIIôc>+k7(ztːRZZZN;{/!͖ >C_ =`&t&IjI' ]{N Dj"' NTI&K>϶UW(޾Nyy>W ___!>=#}Oa6/tb%׎@kH\# cvs&hKP&* fsZH99&zZ9*׽t;ͷHe;!nҟܟt}.ؿ|e:Vi1jBk&"oS/oo'S;]'yNۻkg}oލQvڟ4;t(g;. h  ĈlIn؉:n۝;ev&yl;,Ş'3'Z"vN m>]kR۰θm»_~WYBIENDB`qutim-0.2.0/icons/core/icq_xstatus7.png0000644000175000017500000000113511236355476021537 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  bIDAT8˕Ka3+JIEmڹh-5DT^e# jq3A(δz[Y3sΙ9;{NU?P}NUZerm57dI<:jMxv߽3pὣ? $E\of@nfت:qWu0OlRAT@u 71ps0Px/m: L<|u?~ mUe~qahc}s"B=K"8!5T'y;Ĩnt6p5⍽:;~2~I)Q8_TGP4'ΌzjleF=ͩż}QS;YA=u❂zvR80zJnFblyޡ?21oD+JwADJm:r Wrks-"FN=ɵ H9,-/}x!V/!0npgQu; /G<ǜ8IENDB`qutim-0.2.0/icons/core/orange.png0000644000175000017500000000070211236355476020353 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME 0BIDAT8ՓJQEBde7BPGG?hBK.ROHN<3>w0h 8ʄ,BDa+uBw !ugb#r6&$ {7~cIENDB`qutim-0.2.0/icons/core/collapsed.png0000755000175000017500000000663311236355476021062 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤk\e;ޛf رā4ihAmR% nf.*H*BEL+jiElJ静vnJ⮿<<5O 1>$P ydީ (Ttoe7,f脡&s;R~矙+* D?n^}VZ91rzL^f6^-NZk08dW/UA-._" $I תCv0kGϠ}4`) XZdiqC) "NS>#ɉn?Smd>il#܇1m%_qrv)ٶ*# K!? 2@vai1)T῁Qp;tcsgmsѧ9eL\wZXU<,r*4ա-{t:RF-Yb^7_dE.^}KE@6JC}+q^AXP[%ܺuC0b `K˥& >)_Z$}SD1EU){H꩐S@{+u|1o1Y=BP䳝blfw"ō89}B)j Y%L~)y` R÷-D]KiZnoEI~xK˝%HgN%fLm|wՁEbxd:!*BCHE^{oGtt97e9!m~d.oybӠ@)NXH!H6@LrU+9iwҭiհ"&1ڿLJ\Wct<"14&nyG>Me\ tPbJUc;0ʘEp-djc4*jΙ9Ԝ? z*ya n@3xmgI({5?G  =6LIJH!mMh:ZAZQz4cn5}%L.46)܃!Ӡp9?A@ӻt!`pl71IENDB`qutim-0.2.0/icons/core/icq_xstatus30.png0000644000175000017500000000076211236355476021620 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  },IDAT8˥OQ}3̬f#(e1$VP5T?FB#֊v]v FFo^99O^’0x<3s?\OiFlp"|;8d0lDdlIW@y΍F"ew;7V@|3F`S$<, ZhBV;ZW I8{z|7 ϛMOOĪ`@~tD?($Mj5 w>SRnygT9mnċ7E~xpzuK'cqM){n.hD᜺+;O`D\+V}e`Rf=RRIPFѵ)tql^U >vmXIENDB`qutim-0.2.0/icons/core/edituser.png0000755000175000017500000000150111236355476020725 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥},`GOjmi^bHsaY:qEC^#6/KKr\5vɽ$t1޷lF[|g_v(%ɩ3NMܺ,%N$&:PͶ"稼u#,5>/@;*P[L@~ʰ(# UP;R*@Z(W'ЇSM" :$^} ɬd:osn8&axfHA. rt.!0sRr~q᭻Q(iAF7nAܥ6r1LHtsl'Uba:g_ x83d =?p豶h,"rK}4=kfZ/C]CH\qڈ?9X{GW<3;?ߟg*e_f;H٫kH ;LtқN +dIPۮQmwJF~#s 85X^JuDP*Jx ژgu-G<%L[) }۶MKK,|u]ʕ2vU?̳YpQJC[m(,,c N1.ZP}Mkwm})il̮fs H [O7]nhUD@ Pj/ekXBhmRUkT*7KxtW)"S*W;;ڶ}1v~RBs4F IENDB`qutim-0.2.0/icons/core/command.png0000644000175000017500000000066611236355476020527 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<3IDAT8NPszzńC'#ƍI|͸ nC4Jq޶纨)Fszux,x4EbUKuGZlE筒p.3B~ P T*I/Nc T>lA 1 ӣ `'*+!4Vl9LK1k{z._cp"džnEɣ̮n:? r  r0'NHNS1M6>~H\ i餋]STʿsxBk@Άsr"ty'ɺ70,N@V zP>F?yIENDB`qutim-0.2.0/icons/core/chat.png0000755000175000017500000000131611236355476020024 0ustar euroelessareuroelessarPNG  IHDRsO/sRGBbKGD pHYs B(xtIME #NIDAT(υKKa4iRB.Z4P Kئ]H-"A[BL3!lH:>O G 89RU106 T뉡FupeǶ^K- Y .Fݘn;ygޛzPt7:s%8o{/;Z!JZeiu߶HʼulG0^n/yFADIk+`ay8t`׹RtsmnQȱ#\S i+PyQ\o>9 "peec:4kM?h#iA$"۔t^_ B豿7,28n-/\A(TN0m߷him%1!AcˬnԂhTљ6Ƕ?2gKEA{űIT0^N\3Y׶ږu?[3iFE ! ab6EYlH%8vʇ}9?\ED+ kɨMTj~qpU5J>؂"x<17jirzIENDB`qutim-0.2.0/icons/core/player_volume.png0000755000175000017500000000137111236355476021771 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME yIDAT8˥;hA@#T-j0 biM@TJIr`P, )FGD()_))1{X,j~;DsRz )VamKKگ US%g/uژwȁ=;Gk;rϖ .M)u-ѯ;sOWU-a)_Ӗձ.p,-05`uC*m.'c-wi'y[)Й"JhT0% O`DYf vE0=`|"b \Ai'%RPqIi4e|4ey ,=Ͻ [ |CKBə˘QFs3@-)XO!pي~ػV5Պj;|7v0 ⡩'Ɯu:innAL&uX.=WsQ'7zP@'^XDHf^}}J T&#Aa>`Ǣ"b,jd1)@)B`Y}k1&#"Ժ):?#s*)/y b q0.mӋIENDB`qutim-0.2.0/icons/core/typing.png0000755000175000017500000000130211236355476020412 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME )$ ZBIDAT8˕;kA33n5 B$( Z bXR`aiaIQ*^R0Eh̚ݙs,5@}W̌ޫo#Onz>}ehKїTE ^|A\v3G{b|mՕE[Qs\[ ff1Vw55H 3CVDI6`bp'M Y;0(8P1Lb8{Aps7R;O$砬t?d((`)!]hT^:ellA=0āGeT^4s6?t.OrS>0[gNT`hr > "bG l9*DG 1b<GDD:;;/-+ckHf{6T .ßYwSK26zQ۲C!2bV|D9gFCCj 333SSoQbIENDB`qutim-0.2.0/icons/core/contactinfo.png0000755000175000017500000000144011236355476021412 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME +2PIDAT8uMhTWsguZC"P]PA\QAcW4ԶVEZ)-tƕ-u!(€.$;sE}7sN:/Wl:hϝoxrV}V} q"Xg㻣_'Qw7Ul(mT8tEnN;w))aEXh޹:icnбcMq @{O׍h$4Qdtg$ɇ48}ܟvUU>x~7z?j}|=zW;c -.R VBu=nG 0Vk@XYa.QTVGa ^gb\(y`shx/->*0 Xf}ooLBoZ- j/@A OrNœu,àAD6,0T`}ĻJg))1d6|JLG[MR(lZ"A^i7$g|8`Qveތ0[dEF?{R>^魭POؐ'hӤJ_V?B.[K 兀A!M p''od 2[l2mi 3i]>.}jc V~VL m _ճz'L/BEi |Kޙ[u\ØV \Q@Aݣ]Lw4[Ͱ/4Wf-c>;uv$'7DnG zj{ IY *03H78, Aipu!D%& [nZ;ϯki<2̭湵 ޢPt46ER009XO!gb!Pt7uuu)&5(k@c63¼ɔ, rƃvHvO|En5g@~IENDB`qutim-0.2.0/icons/core/icq_xstatus37.png0000644000175000017500000000152311236355476021623 0ustar euroelessareuroelessarPNG  IHDRasRGB pHYs B(xtIME  $78IDAT8uMh\eG{:1ӎiXR"Tt.DwBnE7ݺQDpQ(ŕJIPkS .4MNf&3s$=óU*i5Y12Qkn_;/Kr޸|)NmȤ+V3kkʢ^O`uIs?{<\IG@ed{['$e'BuWEb3X kǠ=4^^,UY UΞ-ϤbM4lqrSND&=OI(IFkZ Q8V\gjf: LJ66=F}g*o|E,!wDsѢs#Ψ` TDL6hdž[S<~&Cxˆ 8+&ƸIR|i츍6`TB\y>[?E4jlq 8h7ZW7aI$Kon7$ }4'zC.Mݺ=E1ç P TK[^Pcy5]Q1i^ }D7U fHZ% TYT/j;rE1nmU9yb4nIX]Uʿ, o{ʱ NoŒs9GKݶ},U/p'IENDB`qutim-0.2.0/icons/core/checkstat.png0000755000175000017500000000171311236355476021057 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME 5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDAT8}ku?^$K U:4፡VERZ]WNQkeiݜvYӱf!fm1Mem^/嗯z.s99  NRx&p\}yl|{4ѽsNNnπ3CK[KQ0{>v?85F>~@Jϗ~deeu8148N"$᤹ZQ(P56w`y'pE Gw~d-Yi:.W+r iQG1l[ :ԗ0\|s=(X83Wrշ<:ugix<=fó>Dh4zmɳR.wgNMo'h=`IENDB`qutim-0.2.0/icons/core/add_user.png0000755000175000017500000000135211236355476020673 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<|IDAT8˥HSQ폒"[!BbQbԄ4ۖMh(3e͖:l-|[3CWsd!P!4ԅ+DAЅ=s ?yUQ'6HwB/fBȞˈUoH)&<+cC'a(~)=ȭZW`B"<\9Af kf].~;^1իǐ <'#_ć{M *0gE|7F|q o?9"wXfKPAcAvL;1?JPؙ?BJ0 Q5V -2r,Ox"5< E=},:= I/>pO:6%9ɃGP^{F ! KU. ȚOZ %;@"DV @Sg&~sЯ ZF h&yaW{\Ȅ/|9~R?ѹ g.jQf:ӑ/F.Pk?FFPIENDB`qutim-0.2.0/icons/core/image.png0000755000175000017500000000137411236355476020173 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGDza3 pHYs B(xtIME:"}|IDAT8˕Kh]U$i+i@[# Pu\iN;+ÀlDEH,ELGК&7{r{/ $t /}8_$-,NgxZ[Y/z==77K+dsdSP}2ŷw]!;G~Q30OjƉEהϽɹ vY7*QR&%1n0q#GGroJ amAJ˪B1~% zś_C@[!gX=`dRH>׽ {7.{ rݻ bo; *撙EжCa뾮aUUŲRU!hYLm}1RэF`P"D(IENDB`qutim-0.2.0/icons/core/msn_tr.png0000644000175000017500000000144011236355476020402 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8RKTQ=޼7QdrS1o7mHqeC6.I޵qwQEd[w> 1lۦ0(Pľdc=V8ض0 #8x>y[8/p} \_$nSP;g69݂b*2 Y+o,zٛXXo3czv;HzGQ}fA3iJSqou}v_!mI'%Ar`յ:Q 3K P1Ja!IiTba8H1Y~ Tc4 ^Tb)jֿ(EnHO Ea4A-Nբ^O G,M1 ›B>Q^VISs3Yv H@wx;h@D:Jc۴?bV/y$ȣGຄЭ #yR!Fێ(zwV8E\:¤Knb2[ae;lo_g/K%p8ƀu] ns)/IENDB`qutim-0.2.0/icons/core/changedetails.png0000755000175000017500000000110011236355476021667 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME 7);RHIDATxcd0G0@JI`؃b@GWkXLSc wX10h- ҧw2 HNLcU'. _$v0A'axxx5Á5.(/bx-z9Þ6}IG\pﮭeF1Ν; ?~k/~j Al;b72px]90X{_]Ӱ ϰ$O!]  v#|qI\Ҽj*ώ02|`' C$DMMM;;;n\  0,4#з |1.HKd8r΄3HŐ 13WvCםIENDB`qutim-0.2.0/icons/core/contactlist.png0000755000175000017500000000061011236355476021430 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME  )TIDAT8˭J@Ir('[ "&xYZ X0!i|_@tD] #xjv YNaEi(əy@D&`6PZk$)5%"z.NA#Aba`Vs_3c,2mj [klvy|!Iմy;v "߮a?A7`c^nk?Bg}TЙD# "RD1yER*6MJ3K_Ut8F~IENDB`qutim-0.2.0/icons/qutim.png0000644000175000017500000000625411236355476017317 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤAkA;)ې ]iAKA)zT?G z PłPԃШ؈Ҙ-4F7Tsx͛fTt\\W-rk/J Q^0!(R&`tk{($ڠ N9a^'AD8;0lOS9,:28'88-i{pbY~>/; VϻL5"3~0Qydh "T,k\eܕcx1SO!ˣWu 0wyfQ4>#l)x%BiЃ,;d;l8wy&IIu7m6.׾~99'6Յۗ.cܨV0uv:P.~@IENDB`qutim-0.2.0/icons/irc/0000755000175000017500000000000011273100754016204 5ustar euroelessareuroelessarqutim-0.2.0/icons/irc/online.png0000644000175000017500000000101311236355476020205 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME 3:JsIDAT8˥JQs3iZ SnjwpSu@\\*t#;_@ҷhW33{Tow?.;U^gvֺgzCy%=ӼFk!4"kT |wjώ]hw[o R:׵ȯl[@%HK!ȭay:A2jUW'=˼ E} !:ΪKQU֣=3M b^uѴEU_W&<"*utϲxaH*g;4p1Bݤ?0ͧɛe?LR;Y}9&#;vO/ml3޷i2K{i-mIENDB`qutim-0.2.0/icons/irc/offline.png0000644000175000017500000000073511236355476020355 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME _~]IDAT8˥AO@F&F7 [ OŻ z7&_jtA  M t=H "s}f&e/ -Rx/`-uO=p{hC-ϫww=5eB|=AfW*@F[W*B@>yEDCedfEMUISg&:7 ,&՜j QW*Q[FXJN,ҎX(7Y6ROխ"FJ7S͸2ECL(}^5>pZTl~'?iTEU4$:zlNv[x\jtaړRW.˱[t.d_ > Dė3"RǶKmCޤ_Uk=HG:¶^dW'7R=Go)0JzVNb۸{,&bƃD6X#:tYg5t S,J+n+D76^|&\,暴UBQd>di5@,yLD T0GCڷ#1صdbZi7IqF4Ƀ6RyDSL!JC;93UfŌwዓ3?%c'52L,6ݙ~^eIlfU5P2IENDB`qutim-0.2.0/icons/icq_protocol.png0000644000175000017500000000154311236355476020651 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME 6&NIDAT8˥Ohu?פĄi 64cl; @2AYana2w*ҬE:Κ#$m%MK;J^| ^ =O7ŝwXf{j򼭗ș:}[(77ys aqKFI}77˧΢ -5{a\2U9+BE׫-ŵ-QuLKjj?ko7هǿsXo/l?GK56t9a&'W>]9X*y"y] kI%mM{~hoҫQRw;hg( ?ى+F]9Ė-ƎM!ľhD cvF  p1u}QiR,o&j8eʮԬR]i"'粧t:OQVWy]Հ ʂ{ۻ*]9%_PsfyG`4 >fQظl63ۇr<@kX38 -WIENDB`qutim-0.2.0/icons/typing.png0000644000175000017500000000155511236355476017471 0ustar euroelessareuroelessarPNG  IHDRabKGD pHYs  tIME 7 pIDATxڥOHy_21N3:5%CՑBzݛCefE9/.T/JRZնԃ$D鈽(#(3Tts8{ji-{w}x=gA-//w E;< wyJ%d2 '/񲥥W}}}E˲R,A>G:477L&TcRnRa-J$IԔ=00,===<I b~~kkk( f(++!!`Ye%L&o=_\\͡ fQ__VPJo8s}H$^]][]]  #i\]]˲PSS^<O `ll H$!a4Mض QYYF%8 qvvUUa(EQ~3n,#⏚yBFiLӄi4MXY:nmm Zlll_^4FJ)lۆrPUTSd2(k>uPb$Io(gYq:NNNppp $a)H ^pu]WQOoVVVl.pP(TȲnoooоk xpSi\IENDB`qutim-0.2.0/icons/clients/0000755000175000017500000000000011273100754017070 5ustar euroelessareuroelessarqutim-0.2.0/icons/clients/webicq.png0000644000175000017500000000121611236355476021064 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIMEGIDAT8uMHTaN؏z!21 "$1 "-Z,hע"Ume#4EeaMdeZ^Qjz,>s{O (TK/2qщ Q?9KQ(Ot׺ Kk:_)(/iimܹ,s{C_]K3jotOrL}ګ؀\Z(ֈI$DԘP\g^d L Eg$޺KClxђ{"/*y +X2AfH|5K.li+@cLf|H.CU`w>Ѫplዾ)Śq ?wC=_Īzǥxm}Lfx2vWW=hV F|k7pOa#/Dߏ.جo3oWޡ94`c+E ?Ϙ^$ Sj,l2OL$gIENDB`qutim-0.2.0/icons/clients/unknown.png0000644000175000017500000000105111244127573021300 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME (WIDAT8˽@O6j0,K|beXVO`RBH/Mа$F2A]{jvDz3 w1D"^ǁdBeid&iFR!K|2 mcGFInjx5j~qNn <#hn@u,zŀ0 q~N(1 BD BG}0( J2dY$I`!JTU{Zsض ˲>7q4$IE1Af 0^?OAv-|pH`0o9'0te~? 0IENDB`qutim-0.2.0/icons/clients/sim.png0000644000175000017500000000134611236355476020406 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs B(xtIME,ifIDAT8uOHa?o?-5j3D@)u)c)Xny!,$! +.jhSIcvPk\^x>{Je p_5jB&mg{2:FfB1Ģ"(pa/@oe]hȌ fb 3&_<Ee:N]ud,'ĜObH ͍~=tN" Zyg=bdp\tu3a)R9Fr\PNIo -eak߰X,\.TU ^ĚϚ0:`# Gf M<L'A5JbSF7b͑gk,"9SDf").>XAP5 ɄPִKɰ-O7[9:P`XP$௒CJ(EJe K !غWئ$Zlˊu(nsɸTaۍ{~ PެvjIENDB`qutim-0.2.0/icons/clients/pidgin.png0000644000175000017500000000137511236355476021072 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYsKKutIME)se'&ܻMp2 &6j`eH tD w!NBڹm} o#.~b -!#3Q}T纆޾ӦȪ \X`\ !H7#1>gwR=D5]osdn}uX$ *Fq9.&-Dԩ~9z|c\kkݡ?x5"#0beh<+uᰄ}rsWٱsx7\:@NTȁ;uHHT'T胃geow͞jh_dr t|8wx|y ( NMM,npuY co恅NE7ًIENDB`qutim-0.2.0/icons/clients/bot.png0000644000175000017500000000202511236355476020375 0ustar euroelessareuroelessarPNG  IHDR(-SsRGBPLTETy"ʩ{%fơkcE5k gdD/qc,tbiy]oLBx 2`ؽ{Cҵqdj +bb=qhş}ŒŜdnϦu׵i*۽̞9l QJɳۼmK*\tRNS@fbKGDH pHYs  tIME-bQIDATc` $X8 \ P>~A! R2MRz*05% $L FBfRF6F0TDFxyhUXFDBxYB& _?IENDB`qutim-0.2.0/icons/clients/mdc.png0000644000175000017500000000161711244127573020354 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<1IDATxDoUƿzwkXrBX (RPDER#G)&!!()HHvgwsowtq;sO[:/ImO~o fEl]X={L0c@HZQ|y͎oVUe F;aD~c={"or< 389WhuC(̶Lm9Z8y`E@~ v'l!m?0% 6hb#K~n5\TpvٴB `ӿ.%B}$Iygsn!2nщM`#T@#^߿k$: "mHu9? %p>{3oao'H#N;A;](1"[i[ mL&'q!}M>]RdOj8J$h,7Xeϊ2~|}sU~pwce]VZb@SY$΁Q̸af?j0bэq KہO3Qq6`9vr~B3IENDB`qutim-0.2.0/icons/clients/slick.png0000644000175000017500000000153711236355476020725 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME 7JoIDAT8˅mhSw&K$5::6%N,֡)8AAuXO JT1n(CXhUЭ5MZF$_:&s~--`6w_ٹɞ/tsTU$JMfy [PG(|^qIZ$"lglmੂr5w#8'B 2O8΅݊u۾}SK?%&@4YkFSX0JW} |ƵiW'$i} ! fz} 61^{u8`V9Ld|huW;) X~mQ\ H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxt[Ha֌3f:.,:a4*) :)E$"..$mTt!jt v!w}<<):㪓HO"kč騱y7^Vbg\uR(7SGB4}Q=> 'vT%pHB 1kmAz'{*SyS|AGZAZ{Sj*z f$#af4)2JVցR&]J'RAܱ!ldXn]8d\rMrX6$ұ22&\qet_̀1郩{2W6~/ʥkjm#2 (tJ,|QM H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤS!0\4@"F*dP'Iemed%8.uqPL&ngoxZPEӺec0x.*~ xI|hf1vpٟ@$pepFKGECNQEW }H#٥b ʙ0th3aTa1ƈ-yZуJGNwLϟx| ;Lc}%ikŇ$)HEJR*2Кϳ<U%IENDB`qutim-0.2.0/icons/clients/icq2001.png0000644000175000017500000000111111236355476020663 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME-oIDAT8˵ka徨C/GzJ7uKqP8VLH'7:B?@Dдhh)% R;$>&VLJ)z==[nUa#d -,瞃uK{ʸnzb<7)(5 ^Һb N}TfQc!O&^S|^ p3{<&f&N#_IԘ5|EN$L *"^m7Ul\|k}Q[ﻰjIq,27 O Z$:͑0(IENDB`qutim-0.2.0/icons/clients/inlux.png0000644000175000017500000000143011236355476020747 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME!1"IDAT8ˍ[HSƿfmns6m:5 "a2&s>(FD=TAXER 4(ЉL]De9=]HsQ'pB_.ʙ|R}-T'ό-1)C\xo=^ύrpDBM ݢE8+lbx='6]>=P0Jv1AOL^H&f=I)yv1žtST{Z_%@K}fYq{hJY,lin)84McCBEmjVff:;:܃oMMMu&J vpAg\ƭIDAT8˕]HQuәe[VJ#(]卅}@wEE`4K+,J"bfb M̦Ssv{s 礪x^^#~itGȩndOSP"@4xNz"nOq`[;d~FG @ibr:|SN4a,j`pXŧ+ TԈjxAvf?F#邤:FNׁ>:?Ĩe< .Pe +"q舎Q 4i$3}@蹕Ͻ^> S'q~ 42RiGFi`uR$l>6Bf q8i."fmo'ȉ.\M*Be*{U\8ŋ29mnc{?Uƻ4lDG1$i !0br0(s6u>RZH1ZZPx,wsʆ"|Xdf'iDfs"%a-n=%eԊ+f.tGЧq<:xL8{u>pzȢAwz0!' d$zcZֆx*%tEXtcreate-date2008-05-17T22:13:07+00:00%tEXtmodify-date2007-11-12T14:27:24+00:00[IENDB`qutim-0.2.0/icons/clients/icq4lite.png0000644000175000017500000000572011236355476021334 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤS@Db+~'~BTVGs 6q}N s$.,7U)ta v`rW$}k,;m8H7p'(]ئ-r uYfg&- ~g` (m7Z?29 "B^.-y^.-\rx%'f (]Xz4W*gB5IENDB`qutim-0.2.0/icons/clients/qipsymb.png0000644000175000017500000000101011236355476021266 0ustar euroelessareuroelessarPNG  IHDR1_sRGBbKGD pHYs  tIME #ctEXtCommentCreated with GIMPWcIDAT8˽s@ NG!BQSvH~64Ӷ19 :\k9o/])u 3eq9_Υ蹱T"}7NUxw *YrN5EJ8ռ/UG7t7y6hkr,MQ\ק*Re7U|RaIIENDB`qutim-0.2.0/icons/clients/implus.png0000644000175000017500000000647711236355476021141 0ustar euroelessareuroelessarPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs+tIME0;qIDAT8˥KHTa1Lj8Nv7"YBZH`% I$  ZU!|:3sTy?<4Mv"BPUU" Y`z5MQؔhk:9M$ aҥܽN i' (;djjq9!b/%4=>4M<OJW9m x"uǗ+둲vn^^jIGE3V3}PGĦ>g=etѩt/OBXXXJt}:.h'De}?4l")e3"@sc!}AОy;Ӹ݋s R8R= V|XcFk둕uDž >nZh\2Iݖ ~IIKBw8<ڿR7$lF2[w1;Ϋ<@ 0HY]mU(?@Lz3HNZ$dGy!-sg݂9)U[vXeЖ/}e}3/^`IPU5 xl(]~Lcl=< 2fi6P n5`V,55Mek@ Jth[kNX2$[IENDB`qutim-0.2.0/icons/clients/imgate.png0000644000175000017500000000145611236355476021066 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME ,5ޯIDAT8˥oSg# A"HLPo@,E,!BP!RUVTjoB$Rl $1}%J)*C9Ǐ˖l Z.ײ\OFYmpzZdP8 t]GV%r-_lѾ~8ws==PwA" la=xNJGq̀<{z{V(#%&h,0ɶt)^2gnڣG/K ׅj7tb233ӯKYѨεitDB:R [q݇O\p]yvMH OWm5YX(X=գw> C)5 JRRh y9bi-)zF u˸~VW~dwfr_u^cdRggG ntMwR~@7%N{GIF#8ZLM)^#Hxp(Hi0;bi\WdqBѮV{~ѹɓY>_-b>aw{5^8z܇8 _y+ő#g_ZZqTt.Qm000_D&IENDB`qutim-0.2.0/icons/clients/centericq.png0000644000175000017500000000055211236355476021571 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIMEqC7IDAT8˥10EG H[85 8Z_W+$]VJ@PH!XG3#;ļ#6@3PG^Rڜ(m}pSx |=`81I iD!qfxvw!ߜ@,JhѢmoB[h [ar1 gƪ?1JJiwIQ8ۃsHhChDw!__h1DT+vIENDB`qutim-0.2.0/icons/clients/qipinf.png0000755000175000017500000000124511236355476021105 0ustar euroelessareuroelessarPNG  IHDRhlIDATxڍS]HSa~>ԋAB,DKjVa%uy!4 -ZML+Ű!vllhj3EYFass-Yuw֎[[ss~yyU52U2)HmCS//#D}KL~η3[0d9[X,t !F$BP)SF@@^VZ =B*OFSM5(S X}]Y80w[ ?qBYH%B!? WE|s=@&xspy7W0LǺb\%d PՇ}ɕlAZZ*<tݽp:py-ө/y1FG7F~N! 0>9ʁ*$%%”Q& |>*8g=N^D{`vf1 >E'@ЩYď`_ʋO:1a D;Q* q+<6̫ZgD#V8pЯBE9naqeH`cZgvokqDv 3XjYfBף!Ԕe9. &`|b@H2cL R ta\=FJ0UIENDB`qutim-0.2.0/icons/clients/agile.png0000644000175000017500000000166511236355476020703 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME tEXtCommentCreated with GIMPWIDAT8˥O[sZNiRV)EFkq%kK5B̦^N/̶01Ŀ@0i; & qa523Xc=_^̮|7\=/x\E54P*|0ɿlvdXlfwykL/L@4%YzZMY^s09b_ߙu}ܹ'hntf)c-hͩ5(#$Puh&Z.M)"BPx$Ir?۔v=;j<(iq8[) l*+~$ \]]%!@zC@j c/ t7&zŋo. ^;TXP%D^1G.:(Qi}Ĉi?"8-?y$ύ*M|Sdr-ߤP$;΅XMrG4Y.|`ZѴ*NdYT*(ʙGz{_.,DdMu$Ia`qcJ첤R;uu9EX,իÿ|'5Ȉebbb4ʒf h ]>#IENDB`qutim-0.2.0/icons/clients/meebo.png0000644000175000017500000000113611236355476020702 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME.(hPIDAT8˕MHQgfl̴M@MA-BZ-"ZG*6AjSbH_ЦBj_Pd.LZa,ˏQ|pir2 gP5'm'| {d%#p1 -bam:-0 dw[kySȢYMk*W >UShUĂjF J1 dݮvxϔ ;e^Gav39;.V um^7EMPKMDMN|wGދE戨Cz ŀxmsRЍX̞!>N!4avH cI'p|!N #$<PҘ(K2!F=/\ T|FFD}~@z[G[7: ̚=ŽVpVbu_iO?mIENDB`qutim-0.2.0/icons/clients/qip.png0000644000175000017500000000111511236355476020401 0ustar euroelessareuroelessarPNG  IHDRabKGDԂ pHYsHHFk> vpAg\ƭvIDAT8˕RKQ\4pc.A4!" "-54>@820hj%r([%߆ǝe_{}>!)4lnBOBWN.˚~ӟ`7%&:]@X l,{VCTmM`Y"8C]Ά! 2!t~E5vqQ]&j(L(ۑSu$ˮ`F}jHě.|DϏ7ƋNFWD:ߢiB=wַ[X^ Ҋu^:Y@8F.8ܸ~CE,'.~ooCu OZ$ X $ݳyw%tEXtcreate-date2008-05-17T22:13:07+00:00%tEXtmodify-date2007-11-12T14:27:24+00:00[IENDB`qutim-0.2.0/icons/clients/rnq.png0000644000175000017500000000142111236355476020410 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME 5BIDAT8ˍKhUd$F(.\HŪx+ Y)(AM(XEE,]bhSq2\xysNFCzBqfŨǓ3ShaHX1IJR BR+w5F̾p]!7g+EW{I+~̔(oSL6BwPnf#Bu$j8KE!4QD6Š|܄Tn4Boj~m峳&{4%Q8.gZ.b MPV|Mas'%>OPO"Pp7XI 6 /'Tٌ/[Z4=ZB*o5d ` A2t?|cZ W:Ks9@f㎾:mqkHe}Ϗ~yA MnQc}M{zcn)ZsdDAiꦷmjmnV nܹXsq^$+Ѝiwm_2Řvp~e JÚo0CɬM8ԁC;IENDB`qutim-0.2.0/icons/clients/anastasia.png0000644000175000017500000000050011236355476021551 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME 0]IDAT8˥ 0 E b'`GrbN@B`qfqRH/X;"oFtOjG[]7لVv/iXUv1*ß$3U-vC_fL]ys"uJkb+C(V^=IENDB`qutim-0.2.0/icons/clients/icq2go.png0000644000175000017500000000571211236355476021003 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤS!00">'4/T CRY[Y 6p0;I.$ "HU֛qU> R~  }1?ă6$kH6\Dy<4tDN*J3MٮəHv4wJ#܅$Y,L_5k!]Y3"Br޴uE]z27gJZb']7Bg|?ڑIENDB`qutim-0.2.0/icons/clients/yapp.png0000644000175000017500000000135411236355476020566 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME,h&^lIDAT8ˍIHa?38 ZR`F`ڸtnѢ'0QBy ֥:t]`P2MiN˸|#| C gcFrHͱK-,4F'0\Ul;ȼ|MJĖ|Xb懈HCno@A=-jdn`qȮ7#l_[1{uuדGG-Xur }@ue d km#6;ß3v`A3{ ]!AFJ%ѢҧY|Yk(++MO6v OD_Z%`Z}nKϞc.-rxfsuH_0f$K"~Z_?67e IvSư+8`M H;О|@0‚R tR,i`5`+n7R.BXzJ)!@I p. kQT@3GC~y!Ep;m+pAd*Ӳ[Y?mGAZ̈5#%3_oRBDx4EIENDB`qutim-0.2.0/icons/clients/icq60.png0000644000175000017500000000576311236355476020547 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤ!r0E<F# XS*a + A c)4M?ڕvWD۶ 2YӜmXYwwV1İ2}ey}HDBW#/nC1 yc#'WryBP|O#%%D9Ḭ-HҒ}UZ.j٪R?m|5{:Kdei=Xwb= Oe|~ qQA?LJ7'=Y~}YIENDB`qutim-0.2.0/icons/clients/k8qutim.png0000644000175000017500000000575611236355476021231 0ustar euroelessareuroelessarPNG  IHDR(-S 9iCCPPhotoshop ICC profilexڝwTTϽwz0R޻{^Ea`(34!ED"HPĀP$VDT$(1ET,oF֋oZ/K<Qt`)LVF_{ͅ!r_zXp3NY|9,8%K.ϊ,f%f(Aˉ9a >,٩<9SbL!GĈ 3,F0+7T3IlpX"61"H _qW,d ėrIKst.ښAdp&+g]RәY2EE44432PuoJEzg`̉j- -b8o׿M]9La.+-%Mȧg3YះuAxEK i<:ŹPcu*@~(  ]o0 ~y*s7g%9%(3H*@C`-pn VH@ A1 jPA3hA'8΃Kn`Lg` a!2D!H҇ dAP B Byf*z: @]h ~L CUp΅ p%;56< ?" GxG iE>&2 oQEGlQP UFFuzQ7QcYG4G۠t]nB/o'Я1 xb"1I>Lf3bX} *QYvGĩp( &q x)&gsF|7:~@&h!$&B%pH$D.q#xx8F|K!\H$!i.%L";r3EHK-AFCbH$^RSIrdd 3Rx)-))zR#RsiSiT#Wd2Z2n2l2d)EBaQ6S))T UEMSPgeedɆfȞ!4--VJ;N g%K-sɵݖ{'OwO%)P_RRۥEK/+))U<د8䡔TtAiF쨜\|FyZbU)W9.Kw+YUEUOUjꂚZZZCu:C=^\G}VCEO#OE&^WOs^K[+\kV֔vv[]n>z^^u}XROm`m3h01$:fь|:kG23hbabhrT4ߴw3=3Y-s.q_vǂbgբ⃥%߲rJ*֪jAe0JOY6rvvtXLǎl&I']$NϝM.6.\ι"En2nnn[g=,=t٪E2}4\j5loDŽǞ~q=''Z^utv&vvEv >mяN9-{ LOgsΝK?7s>xOL n\x }N}g/]>uɫ,u[dS@u]7ot.<30tKn]p;;SwSyoEV"n$p@, g2Nq} V<%D EnG:64_#9]R},oyz{3GHodK$Qyα?O֌M輷Y+ OLmvb l=LCctt6傒фH|p~.4-4ePpu]gG1}NllZ_bu cKͲR(ֆ}sEx1M/|Cϧ1\* ~5-k{юFoEws6EWѺ{YIYm.=Ecp@HxjrKl{z5%*'b BDW=n%ѬɁ y .#:ImeɃwbJXP%v&e yɼR5a+LC]X}UR nK7IENDB`qutim-0.2.0/icons/clients/icq2003pro.png0000644000175000017500000000565011236355476021422 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤ E` Њ%2rLV{6"b8ŏ+QUrwCLYSШ*λTK qnZo)kLf']FF{ t :_[+=Tua>!̳.xV"-HM㾼f!xmsMڍ WT Le9J?#&WxkdeIENDB`qutim-0.2.0/icons/clients/naticq.png0000644000175000017500000000100011236355476021060 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  ~tIME3>~IDAT8˕Kq?wVTPHOʡȸq+"ig9lphLZ 5i>/gy$qhZ%y%~KQ̩ifB!B I. ۶T*,//Iy)KYI꨷nVSDV:n/ɿϏ:Yr1L`&|B|?${rz,$# 0'7fbTr$ v|o=c74v?} ` x_uLpr|M)A<G!zX,ˤit]Dz,&677F ̞<=9?P(^VP(חg4M@U՟m( F#jmM C sIENDB`qutim-0.2.0/icons/clients/icq50.png0000644000175000017500000000570311236355476020540 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڜS+ }dsHdld+TYdPqTt0 Z`g+Yg/7дatC;Hñ޺IRl((i &Q7;š|&po&iE? (VG)kmtJ'P[Ήh)ՁuS\,-7[t龺γ쟿dqaIENDB`qutim-0.2.0/icons/clients/di_chat.png0000644000175000017500000000053211236355476021205 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME7 *IDAT8˝ 0DR*@CKtJ(`r1 -+yk $Q"!Ί$i )",%5YW$a5 m{""SI6@9lX Mk?R~U@)+ "%\b$l2ޟ@ҏj۹(x<Y 4Sį=P]7{I~WAA,OIENDB`qutim-0.2.0/icons/clients/kxicq.png0000644000175000017500000000565711236355476020746 0ustar euroelessareuroelessarPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs+tIME 7"=^IDAT8˥͍@ DǝpaZB2ppX-DBF ́8ZēFxJU!!&ЋP*3rLu b@~9>n 1Ɨ7+uNțac?1_+V^jםU|%$>JUi]}ݔVjEO)żS)IENDB`qutim-0.2.0/icons/clients/miranda.png0000644000175000017500000000626111236355476021232 0ustar euroelessareuroelessarPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs+IDAT8͒kSQ?&6N.EG tq h1CbRAEX CR]E -BjJ^vz}8DY{΁/u]wwwk;5Ǜf0W);I+<_ e @LTs{LPuc{N6e'NTsqv*߱-G>U_C"pWE˅uoEU"\DkYkף(,"{"` Rz EQckm3$1DD&0$"غB!jdr" ЦAthhDZ濉&IENDB`qutim-0.2.0/icons/clients/sticq.png0000644000175000017500000000673211236355476020745 0ustar euroelessareuroelessarPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs+tIME59] IDAT8uIhqƿY2Y$MkZRPE -UAAAA H(j=(\PQD[FZM&ml4If23.w}}(?-?6/NQxs !‘=_ڰd ;G ڵ?}هw6!`3o(#7̌ aAVS|vMkׄ:W_&'@۶|y7sGFj CQ-ǽ& EvZɉ=vUܿU״![ I9,I?z E LS4F-pYh4qT2mf[@2daprP4D,].BHBM.l24 ܖHTb#\H9P:::OpU##9%y[Nx#(Qm-xLJEͤ7=ˈyPТe| _oQ#vfSYPUcI_ωӞ%^~6ʻ̍IfM,WJ G!G;]a%f_N_5P~eA8*n bYA`ʎқ!'ȸ xS;=LN*=SŠb3Mx3B -( b-4>7 @{/1!Y똯HIENDB`qutim-0.2.0/icons/clients/micq.png0000644000175000017500000000134711236355476020550 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME5&FugIDAT8˝OHq?}bZ"Hc84)rL=těz D  DIEɜJLdʰ1kiZ=/ZF?~DٹUa~@hwBQv^,J)v/5ZEkcN|*s,Juv-9RI{S/zt]0\O{S/#]lu]GN5OTVp,v@%Vh*"嚷{$# HPGI^?Ad@I1P* *CG \GgR󠖎AuldC2{4ibhPcCm-u*;H<)CbV"7e\&H<)kGfxȬ I$H<)H4;$ѐĬĬH4$2瑵 DL1r'wk Sw|v `hi!?Zb@IENDB`qutim-0.2.0/icons/clients/smaper.png0000644000175000017500000000701211236355476021101 0ustar euroelessareuroelessarPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME$7U7. ]-+jvT5eH4ft6#('(Xzc޷^=ȳ}#;%hlw J7S ,Hxj%^Aω5O>L!S 4[kqdr{|quFsC!wip(2kML֝H\ {-Ӿϟu|mm3C'iiW_I$E⣡$,`l2e>;%/OX,;=Mo#1,$KdltiGQ$6 {wT[`f~5N45UyF1I648Uǹ˳m- !#~`+oNs!9̉ꔘ]rDŽe;l<Gn5Gn'Na)Ou 9UIENDB`qutim-0.2.0/icons/clients/glicq.png0000644000175000017500000000167211236355476020717 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME ItEXtCommentCreated with GIMPWIDAT8oTUy{N36ZDUk%1BbعrNuq # ƍ&"1j(E-8ѹs=~/4:9.xa9{-It\y(! Ѧ@9MV9@85xdVRLfi;EBУ$@MsSS^wI~ߔl G>f|G:wB㨍"tʈjĻHvvc.Hdf1䔾$Qt[Kxo}:o3Hg\e}w3UOOW>I~>ЦS\8Gkb `.)(!5s#ָ$(* `dN z_A3?KܞZ] Pe_be d5ǏC >_g)|Wn5NASJ HPt?&/ 7'&تxf8#d`=CEZB<EkqP^p^di DGT!U- ]#t=>_Per#8Ǯ;rY[<"lLy aBkӫ\?q!4@۾&ځIENDB`qutim-0.2.0/icons/clients/icq2003.png0000644000175000017500000000133311236355476020673 0ustar euroelessareuroelessarPNG  IHDRabKGDԂ pHYsHHFk> vpAg\ƭIDAT8˝OHa?X,5g@"Ia`FP ڡ@ AK;-K-rv"͌aFdv&J||y}^^ACxY.jx7GAXجQppSʕwLTG V(K[[S{{Fho4iĐ@.'%4= vXw1PTmdD(>ۦЅRl=׋w + a G6yugq^sRqTwq42Z_5kXZ ,ٖHSvškx}1= ׏f-Lo~XDW/*l TUhW[寜@&Ab?z@KQJ_NP6`~3sU)Adg BHZy8iA- |ϡ{Cr}'=  T%tEXtcreate-date2008-05-17T22:13:07+00:00%tEXtmodify-date2007-11-12T14:27:22+00:008fIENDB`qutim-0.2.0/icons/clients/corepager.png0000644000175000017500000000067211236355476021566 0ustar euroelessareuroelessarPNG  IHDRtRNSn pHYs  ZIDATxJ` bM#/66G77'#Ho`wA7EBWŤ:7qqb8q^񡍄Uss.H͛s#Rμd: 0&H]YG@Jkcwrxd[M׎DAGD׫CV. Ӌ5Cio0>?ur7ozI3@FNdqC((WS-a2Jص.EI-Cд;,g^ݬ-K/'ƾ͇֕u~QߛH!HWŸ$>?qpmIENDB`qutim-0.2.0/icons/clients/vmicq.png0000644000175000017500000000171411236355476020734 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME:LIDAT8}Lu808m̤4s+H$5-(9æV*[k #Wk͍5Ø4u&O@tw~^/lqC"%78ĵ5ϕX7%RBŎiJ\ eTm_p-8rBIt\Ql2L_CNiohL$ G8,F^>o0 wCxH,X=Jy6ps"/.lXj:R0{ro̻vÄԚs^Y3=9j)c`n%n|\{%bk Ux *ľ3-p U֓Ilg_2QIE\Jqy1Z͠tp";`٠,%H5->Jk|;^DC:FoG:,D>.ZMihx?yi.M?߅,BմePM,*MY6M8s2:8t /` YɠP"A "]-d?"t_!w",`ZȁOGyĔ8n Yռkf]S .hx B>xy84IENDB`qutim-0.2.0/icons/clients/gaim.png0000644000175000017500000000125511236355476020532 0ustar euroelessareuroelessarPNG  IHDRabKGDԂ pHYsHHFk> vpAg\ƭIDAT8ˍKha5bV=D  2JU;o~3Qwcs>N\RP?,L#07ep!uˠ kĭǹuI?17Q@McFGCrx_qnO]K2ub0Lά̞&j|5">{t[ܚwUf"E\s)l^t<-6p!ޖCR Yib*u$"DG|<`)@]tDB $P(ANzɮfh:e¿5Jhػo%uvWQQ2ַ:|c#m8f^XSI߿b|+j{杶'ˁlaw7g% >%tEXtcreate-date2008-05-17T22:13:07+00:00%tEXtmodify-date2007-11-12T14:27:22+00:008fIENDB`qutim-0.2.0/icons/clients/mchat.png0000755000175000017500000000135411236355476020714 0ustar euroelessareuroelessarPNG  IHDRhIDATxڝS]HQmjXbXIm=X YaPЃAZPQ$>RQTT*FEfZƪӪ33sw6|;Cb$飤YIHi4Xd^*L3E:k젨1*DQ`}@=uvBZ<~2Td u/I,v@r:b$< :h ؚE|iK4M+:`mj g x7\Ol a'Uo9TU,H2:kzM'9fO_鈈68B_?ttJAY3V["o"ۜ[IF'";-Wܴv-ȳ tq~5_ꥍ幈H "DWg0PIP]0 EQ 2+ïEΨ15U$#ʘex} 7e$bϪddL:(Ր`AYc^8! (X*`2p4pm4Jp &l( 8pǍ6i#|8O0HBkϧY#ϡ+Ԋ)&1{p)LL${BQz Ls~|Z 7!A9TS>Ca+j 8 \Fon7KUOkKL6IENDB`qutim-0.2.0/icons/clients/digsby.png0000644000175000017500000000146511236355476021101 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME 1C2pIDAT8ˍRKSq~~ONNLNL1?JAQM!EEѽF@axauSzUDn fsLvvίeB\Ui(?NrlɳSDBɏ {73j"Wc6W5"@%bM߾@(P8_2/6Y $Vs@WE׬8r9W咩(+ȝϰCv ,4ں:hh7o߂b$I;L"QG~Q0*JK[ u|.WR Ke%ڬb^2Ncrۺ?T@ZSoO'ɘ fe"XIQ Bc*Q0k J;|(Pf@ ۙJ4VQ0*F^`ʿG('<#eB,E 2ؤ|s6FY yi  W霡UT(%`k*)y@PJtV0:nr! f5EF+P=+2[>w.iO&:(D\IENDB`qutim-0.2.0/icons/clients/licq.png0000644000175000017500000000570011236355476020544 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤ=0 .LMh/c0q8D8 mh0Hy-;T6{hB&"5u˞pFsfyR;&z`m?1)oS#IENDB`qutim-0.2.0/icons/clients/qutim.png0000644000175000017500000000625411236355476020760 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤAkA;)ې ]iAKA)zT?G z PłPԃШ؈Ҙ-4F7Tsx͛fTt\\W-rk/J Q^0!(R&`tk{($ڠ N9a^'AD8;0lOS9,:28'88-i{pbY~>/; VϻL5"3~0Qydh "T,k\eܕcx1SO!ˣWu 0wyfQ4>#l)x%BiЃ,;d;l8wy&IIu7m6.׾~99'6Յۗ.cܨV0uv:P.~@IENDB`qutim-0.2.0/icons/clients/icq.png0000644000175000017500000000566511236355476020402 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤ 0D,2 0tB!\G\Ιsֿۺ1'BCUs=z9b0rVPx.R HmFxYJuh$-! pLU^Z9XD $1'au-`S%[1e^2&IENDB`qutim-0.2.0/icons/clients/pigeon.png0000644000175000017500000000162311236355476021075 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  ~tIME "_:IDAT8˕MH#wƟL$Xu"IV봛CR!~ :`M@< E0"{W,(+&Xb\uiAH*6!:'3M3MFԉTʶNϫr4Gm2l_9he2 THOQTq}}}Eaa'C2pttB |{zz?_'+++|TU˲B2,noo+))L ttt Rhn>GpvvVV[[MӘF6E" p8jNi``U>?kjjppp9B( x0---PU[[[hnnz\)Y<8444Sv}b@0(y5rEK9A1TTTR/(f8>>XV\^^Neeep89ΧMMM0|>Tv|>ugg'|>`2@4QTTe d2tl60 ,F#(B&p850EeeDHD...H2$,`0H˲?4=o~TM&gii$IDE yd2={1Y5a>-//iX]]˻oz=UUUo6oa.TybIENDB`qutim-0.2.0/icons/clients/jimm.png0000644000175000017500000000106511236355476020550 0ustar euroelessareuroelessarPNG  IHDRhIDATxڕR=ha~KPpP(Pv8*4 "֡i;TNȠI>BKCEqh$Ÿ8d)JY/}29'1%ԉ- D8@3xb.VھI fkf6soqG~ͷ97)Eg ywd9x?95 ^Ҽd*v}\8f2`]svO0?)Wr9WxQMM1ۙE ECkMx $~%Ny󞉓vHJ!'o|y}@E1]ڰ 1:?Jl&⥠:@RM + yn'{{ٶ}وOM[ܞ /q!٧}iQa"ZT\WVWE-_a?ngj+Ʈ ;=U`,D Cb3@p쿇15r`zUIENDB`qutim-0.2.0/icons/clients/icq6.png0000644000175000017500000000162311236355476020456 0ustar euroelessareuroelessarPNG  IHDRabKGDԂ pHYsHHFk> vpAg\ƭIDAT8˅]Hq;}sp %E(/QDJ`f QU]UEQX 墬,YÏ.Zdus89߁UfhK+IvG j{kvS^R os`=``mVB(uR@ހSeD"-R|>!Wh?ۏEå&`l]61FT\+ ;ϸ["&_.D+t,NSꔽ 5`XƎ =`]m5aSr|FG{}.)z -VZB--X^k"&vi9^]Ic||!L!XG`X X vpAg\ƭIDAT8˥AHa/2" GX ֥ BP2I;xOjJ f P,O,dP/raZ^u)^S:LG,&%{@y $׻{kH$TSNTqtvyZ.;_SSv3N25a&G"^0Sr]%g ^`ht,L?P5=7ɺHh=o%tEXtcreate-date2008-05-17T22:13:07+00:00%tEXtmodify-date2007-11-12T14:27:22+00:008fIENDB`qutim-0.2.0/icons/clients/qippda.png0000644000175000017500000000563011236355476021074 0ustar euroelessareuroelessarPNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤ1 E)=%G )SqH "QafavsV8Oaǣ*kvt$1(+SUBs|~.[T\I>t 8[=xseW_Oa}2,c %m vpAg\ƭ1IDAT8]]lSusӎnu ‚@n.0^L&KCH&BBq3H4Đ@m!9b0u 3]۵vYs^hy?16<|vu@ u;t>b]@{wdz\_2uDC?`z/e)}}f4U5z$XhWBTp5wHr6Q_*8TM|~nܝ dVu73u>Nv[W?.M `3T?dwv|ּ'Vy쒢PbR]#Ca{ܘꪬ}!z>EZ7xwp! הK40XTO 2@8F{]D('+1&P4ée e~A={QIvvXR@Ga; 9<Bk@ '"`hC  C>ʱ"2-DL% ƼPƲI\Hdd,.b~Mk͋2=y@0aU[{EߍcFv D*0Uk&/}1OoP~)g⮭9yqZ>?eLo5pxƀ@ ԣh#NwυoIzB TtgW]mbQ֣~p3&?SadOi:K΍m6:xwd9mYeg(ZER7Vz!_HA%tEXtcreate-date2008-05-17T22:13:07+00:00%tEXtmodify-date2007-11-12T14:27:24+00:00[IENDB`qutim-0.2.0/icons/clients/adiumX.png0000644000175000017500000000142711236355476021045 0ustar euroelessareuroelessarPNG  IHDRhIDATxڝYlao:3SAKj-i]Hm $Ҥ\X"RKj@c`,Lۙ9蕓||O 7K/SkudA$=i4Pe=F@֡d96yw$K?=t {U/jκPۖ-5ÐG5˩OD 1L9:&n%~ sdm765п~>|j CkRIM捽?%\JbjNa np.Bygt['Ⱦ\V&7n'rDlM(Tš ճ`VDEۃ0i F*HmLOGk*'n._fbupaI槾бC}z`1[ip|[&+KɁxzL4'h@w"'/ a?j`IENDB`qutim-0.2.0/icons/clients/icq_mac.png0000644000175000017500000000674011236355476021215 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxlS]Q~|3;;viWkd.֮DؤEH!wH)~J٢P ?kVIJ;ٰ3;fwf|;縘&<^}GL7 j)%`<B)ZN>{}ER?RR655\yP$@ \H$*fڱ~mCW|!bY)`ss;XpZp^֘̾䅻\.m-' !$(иmӪu5!B EOTK<{wG Lؒ֯w!. 4ݦU kUaC38t&"-?3Y:ukV.Id,dr KB5lTYQm}Jh&HJ '5` u:HF4ʚ-KX\B384Cp:)%cB&2q B (!& rfeu˿Ii%~RgrzPUH4Rg{ۣ@--yD6Y]C$׿ YQA2 DŽOO7Ҵv5A&8M2Gh~Gy~kC"]]o#_Ut_gNćߡ#឴R +9k7UvHa.NڀkUvvIENDB`qutim-0.2.0/icons/clients/trillian.png0000644000175000017500000000677311236355476021445 0ustar euroelessareuroelessarPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs+tIME5;#-IDAT8uO[e}ߝtPZ u6 Pۮfcj2f+? O+cbLLXi$@dh6 eі2ӖҾ7lD"A* ^y<_qP<ݽp#9:wpBNS>V Np\fVYέ9D" {1,0EA|8;cŲ,IbnJ<2noccFyh{d B*`Ԫ]-0x+h)h3FN3\I; 0g`UYksS zh(Yz?`0/sJ*u%9BL "5փW_p?fz7M`KbLUUhۯ]+jt˒BӠ@;UGCg'uJB)ٳm[0!D[vL۽$y{ f59:?9~[k 7<@Vv6us(p_cG&Jz Ŧb|H&|0Mpl.{m\`XU,mbY<\c)z{{AgikFp8{k/ cװۋu9sS*lxݧZ&ݡp cQJV5 $I$I4c|ޞ.IENDB`qutim-0.2.0/icons/clients/mip.png0000755000175000017500000000043211236355476020401 0ustar euroelessareuroelessarPNG  IHDRhIDATxcdF$ #Dg98S\/\DjAi s7#\ 2iiE1`F[h12u&Vg@h rp82,D,c o}b@YS,l( MO]Q}OЀ)n,g(G-p@jj] ,@gZ, euIENDB`qutim-0.2.0/icons/clients/icql4.png0000644000175000017500000000132111236355476020623 0ustar euroelessareuroelessarPNG  IHDRabKGDԂ pHYsHHFk> vpAg\ƭIDAT8˥AHq?HZ-$;E AthF%wJ8v褰)X `$]ˠmfM8t3qa{=A4&/,4&:3P <aK~FqsyXAO߭>3 rqx!0sF%F;38'Y&lmn! V߯@#fKfSS 6)K¾ 44a9f2]!"BNR@D *9d BhMyv7יt|!fxЈB9ڡ5**n &IHTwЁڡr{7I$g>ϐ1e+X+%J(' K(=Ng[+s20 TC= H>l'P@(gcWM<Ϥ;::In9;^MGgӍWhdg,.9niހx6u9qQ!_`oq־%tEXtcreate-date2008-05-17T22:13:07+00:00%tEXtmodify-date2007-11-12T14:27:22+00:008fIENDB`qutim-0.2.0/AUTHORS0000644000175000017500000000051711273076304015372 0ustar euroelessareuroelessarqutIM: cute crossplatform Instant Messenger =========================================== Developers: ----------- Rustam Chakin - Project founder, main developer Ruslan Nigmatullin - Project leader, main developer Nikita Belov - Developer Denis Daschenko - Developer Artists: -------- Georgy Surkov - Icons Yusuke Kamiyamane - Icons qutim-0.2.0/plugins/0000755000175000017500000000000011273106770016001 5ustar euroelessareuroelessarqutim-0.2.0/plugins/yandexnarod/0000755000175000017500000000000011273101756020314 5ustar euroelessareuroelessarqutim-0.2.0/plugins/yandexnarod/yandexnarodmanage.h0000644000175000017500000000360011217427145024152 0ustar euroelessareuroelessar/* yandexnarodManage Copyright (c) 2009 by Alexander Kazarin *************************************************************************** * * * 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 YANDEXNARODMANAGE_H #define YANDEXNARODMANAGE_H #include #include #include #include "ui_yandexnarodmanage.h" #include "yandexnarodnetman.h" #include "uploaddialog.h" class yandexnarodManage : public QWidget, public Ui::yandexnarodManageClass { Q_OBJECT public: yandexnarodManage(QString); ~yandexnarodManage(); private: QString m_profile_name; yandexnarodNetMan *netman; yandexnarodNetMan *upnetman; uploadDialog* uploadwidget; QStringList cooks; QList fileicons; QHash fileiconstyles; void netmanPrepare(); struct FileItem { QString fileicon; QString fileid; QString filename; QString fileurl; }; QList fileitems; public slots: void setCookies(QStringList incooks) { cooks = incooks; } private slots: void setCooks(QStringList /*incooks*/) { /*if (incooks.count()>0) { cooks = incooks; emit cookies(incooks); }*/ } void newFileItem(FileItem); void on_btnDelete_clicked(); void on_btnClipboard_clicked(); void on_listWidget_pressed(QModelIndex index); void on_btnReload_clicked(); void on_btnUpload_clicked(); void removeUploadWidget(); void netmanFinished(); signals: void cookies(QStringList); }; #endif qutim-0.2.0/plugins/yandexnarod/yandexnarodsettings.cpp0000644000175000017500000000376711215655425025135 0ustar euroelessareuroelessar/* yandexnarodPluginSettings Copyright (c) 2009 by Alexander Kazarin *************************************************************************** * * * 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 "yandexnarodsettings.h" yandexnarodSettings::yandexnarodSettings(QString profile_name) { ui.setupUi(this); m_profile_name = profile_name; ui.labelStatus->setText(NULL); ui.labelAbout->setText(ui.labelAbout->text().replace("%VERSION%", VERSION)); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); ui.editLogin->setText(settings.value("auth/login").toString()); ui.editPasswd->setText(settings.value("auth/passwd").toString()); if (settings.value("main/msgtemplate").isValid()) { ui.textTpl->setText(settings.value("main/msgtemplate").toString()); } else { ui.textTpl->setText("File sent: %N (%S bytes)\n%U"); } connect(ui.btnTest, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui.btnTest, SIGNAL(clicked()), this, SIGNAL(testclick())); } yandexnarodSettings::~yandexnarodSettings() { } void yandexnarodSettings::saveSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); settings.setValue("auth/login", ui.editLogin->text()); settings.setValue("auth/passwd", ui.editPasswd->text()); settings.setValue("main/msgtemplate", ui.textTpl->toPlainText()); } void yandexnarodSettings::setStatus(QString str) { ui.labelStatus->setText(str); } qutim-0.2.0/plugins/yandexnarod/requestauthdialog.h0000644000175000017500000000260511217427145024223 0ustar euroelessareuroelessar/* requestAuthDialog Copyright (c) 2008 by Alexander Kazarin *************************************************************************** * * * 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 REQUESTAUTHDIALOG_H #define REQUESTAUTHDIALOG_H #include "ui_requestauthdialog.h" class requestAuthDialog : public QDialog { Q_OBJECT; public: requestAuthDialog(QWidget *parent = 0); ~requestAuthDialog(); void setLogin(QString login) { ui.editLogin->setText(login); ui.editPasswd->setFocus(); } void setPasswd(QString passwd) { ui.editPasswd->setText(passwd); ui.editPasswd->setFocus(); } QString getLogin() { return ui.editLogin->text(); } QString getPasswd() { return ui.editPasswd->text(); } bool getRemember() { return ui.cbRemember->isChecked(); } QString getCode() { return ui.editCaptcha->text(); } void setCaptcha(QString); private: Ui::requestAuthDialogClass ui; }; #endif qutim-0.2.0/plugins/yandexnarod/uploaddialog.cpp0000644000175000017500000000366611217427145023500 0ustar euroelessareuroelessar/* uploadDialog Copyright (c) 2008-2009 by Alexander Kazarin *************************************************************************** * * * 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 #include "uploaddialog.h" uploadDialog::uploadDialog( ) { ui.setupUi(this); utime.start(); connect(ui.btnUploadCancel, SIGNAL(clicked()), this, SIGNAL(canceled())); connect(ui.btnUploadCancel, SIGNAL(clicked()), this, SLOT(close())); qutim_sdk_0_2::SystemsCity::PluginSystem()->centerizeWidget(this); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); } uploadDialog::~uploadDialog() { } void uploadDialog::start() { ui.progressBar->setValue(0); utime.start(); } void uploadDialog::progress(qint64 cBytes, qint64 totalBytes) { ui.labelStatus->setText("Uploading..."); ui.labelProgress->setText("Progress: "+QString::number(cBytes)+" / "+QString::number(totalBytes)); ui.progressBar->setMaximum(totalBytes); ui.progressBar->setValue(cBytes); setWindowTitle("[" + ui.progressBar->text() + "] - Uploading..."); QTime etime(0,0,0); etime = etime.addMSecs(utime.elapsed()); ui.labelETime->setText("Elapsed time: " + etime.toString("hh:mm:ss") ); float speed_kbsec = (cBytes / (utime.elapsed()/1000))/1024; if (speed_kbsec>0) ui.labelSpeed->setText("Speed: "+QString::number(speed_kbsec)+" kb/sec"); if (cBytes == totalBytes) ui.labelStatus->setText("Upload complete."); } qutim-0.2.0/plugins/yandexnarod/yandexnarod.cpp0000644000175000017500000001157211216477015023343 0ustar euroelessareuroelessar/* yandexnarodPlugin Copyright (c) 2008-2009 by Alexander Kazarin *************************************************************************** * * * 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 "yandexnarod.h" #include "requestauthdialog.h" bool yandexnarodPlugin::init(PluginSystemInterface *plugin_system) { qRegisterMetaType("TreeModelItem"); PluginInterface::init(plugin_system); m_plugin_icon = new QIcon(":/icons/yandexnarodplugin.png"); m_plugin_system = plugin_system; msgtemplate = "File sent: %N (%S bytes)\n%U"; return true; } void yandexnarodPlugin::processEvent(Event &event) { if (event.id == event_id) { event_item = *(TreeModelItem*)(event.args.at(0)); } } QWidget *yandexnarodPlugin::settingsWidget() { settingswidget = new yandexnarodSettings(m_profile_name); connect(settingswidget, SIGNAL(testclick()), this, SLOT(on_btnTest_clicked())); return settingswidget; } void yandexnarodPlugin::setProfileName(const QString &profile_name) { m_profile_name = profile_name; QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); if (settings.value("main/msgtemplate").isValid()) { msgtemplate = settings.value("main/msgtemplate").toString(); } QAction* sendaction = new QAction(QIcon(":/icons/yandexnarodplugin.png"), tr("Send file via Yandex.Narod"), this); connect(sendaction, SIGNAL(triggered()), this, SLOT(actionStart())); m_plugin_system->registerContactMenuAction(sendaction); event_id = m_plugin_system->registerEventHandler("Core/ContactList/ContactContext", this); QAction *manageaction = new QAction(QIcon(":/icons/yandexnarodplugin.png"), tr("Manage Yandex.Narod files"), this); m_plugin_system->registerMainMenuAction(manageaction); connect(manageaction, SIGNAL(triggered()), this, SLOT(manage_clicked())); manageDialog=0; } void yandexnarodPlugin::removeSettingsWidget() { delete settingsWidget(); } void yandexnarodPlugin::saveSettings() { settingswidget->saveSettings(); } void yandexnarodPlugin::manage_clicked() { manageDialog = new yandexnarodManage(m_profile_name); manageDialog->show(); } void yandexnarodPlugin::on_btnTest_clicked() { testnetman = new yandexnarodNetMan(settingswidget, m_profile_name); connect(testnetman, SIGNAL(statusText(QString)), settingswidget, SLOT(setStatus(QString))); connect(testnetman, SIGNAL(finished()), this , SLOT(on_TestFinished())); testnetman->startAuthTest(settingswidget->getLogin(), settingswidget->getPasswd()); } void yandexnarodPlugin::on_TestFinished() { delete testnetman; } void yandexnarodPlugin::actionStart() { if (!event_item.m_item_name.isEmpty()) { qDebug()<<"Event item name"<show(); QString filepath = QFileDialog::getOpenFileName(uploadwidget, tr("Choose file for ")+event_item.m_item_name, settings.value("main/lastdir").toString()); if (filepath.length()>0) { fi.setFile(filepath); settings.setValue("main/lastdir", fi.dir().path()); netman = new yandexnarodNetMan(uploadwidget, m_profile_name); connect(netman, SIGNAL(statusText(QString)), uploadwidget, SLOT(setStatus(QString))); connect(netman, SIGNAL(statusFileName(QString)), uploadwidget, SLOT(setFilename(QString))); connect(netman, SIGNAL(transferProgress(qint64,qint64)), uploadwidget, SLOT(progress(qint64,qint64))); connect(netman, SIGNAL(uploadFileURL(QString)), this, SLOT(onFileURL(QString))); connect(netman, SIGNAL(uploadFinished()), uploadwidget, SLOT(setDone())); netman->startUploadFile(filepath); } else { delete uploadwidget; uploadwidget=0; } authtest=false; } } void yandexnarodPlugin::onFileURL(QString url) { if (!event_item.m_item_name.isEmpty()) { QString sendmsg = msgtemplate; sendmsg.replace("%N", fi.fileName()); sendmsg.replace("%U", url); sendmsg.replace("%S", QString::number(fi.size())); uploadwidget->setStatus(tr("File sent")); uploadwidget->close(); m_plugin_system->sendCustomMessage(event_item, sendmsg); event_item = TreeModelItem(); } } Q_EXPORT_PLUGIN2(yandexnarodPlugin,yandexnarodPlugin); qutim-0.2.0/plugins/yandexnarod/COPYING0000644000175000017500000000036511273101713021344 0ustar euroelessareuroelessarCopyright (c) 2008-2009 by qutim.org team (see file AUTHORS). qutIM Yandex.Narod plugin source code is licensed under GNU GPL v2 or any later release. Full text of GNU GPLv2 license is included in the archive, you can find it in the ./GPL file. qutim-0.2.0/plugins/yandexnarod/uploaddialog.ui0000644000175000017500000000545611167411047023330 0ustar euroelessareuroelessar uploadDialogClass 0 0 250 195 600 195 Uploading... :/icons/yandexnarodplugin.png:/icons/yandexnarodplugin.png Upload started. Qt::AlignCenter File: Qt::PlainText Progress: Elapsed time: Speed: 0 Qt::Horizontal 40 20 Cancel Qt::Horizontal 40 20 qutim-0.2.0/plugins/yandexnarod/yandexnarod.qrc0000644000175000017500000000062111167414724023342 0ustar euroelessareuroelessar icons/yandexnarodlogo.png icons/yandexnarodplugin.png icons/yandexnarod-icons-files.png icons/upload.png icons/clipboard.png icons/close.png icons/delete.png icons/reload.png qutim-0.2.0/plugins/yandexnarod/yandexnarodnetman.h0000644000175000017500000000407311215655425024213 0ustar euroelessareuroelessar/* yandexnarodNetMan Copyright (c) 2009 by Alexander Kazarin *************************************************************************** * * * 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 YANDEXNARODNETMAN_H #define YANDEXNARODNETMAN_H #include #include #include class QNetworkAccessManager; class QNetworkRequest; class QNetworkReply; class yandexnarodNetMan : public QObject { Q_OBJECT public: yandexnarodNetMan(QObject *parent, QString); ~yandexnarodNetMan(); void setFilepath (QString arg) { filepath = arg; } void startAuthTest(QString, QString); void startGetFilelist(); void startDelFiles(QStringList); void startUploadFile(QString); private: QString m_profile_name; void netmanDo(); QString narodCaptchaKey; QString action; QString page; QNetworkAccessManager *netman; QNetworkRequest netreq; int nstep; int filesnum; QString purl; QStringList fileids; QString filepath; QString lastdir; QFileInfo fi; void loadSettings(); void loadCookies(); void saveCookies(); QString narodLogin; QString narodPasswd; int auth_flag; struct FileItem { QString fileicon; QString fileid; QString filename; QString fileurl; }; private slots: void netrpFinished(QNetworkReply*); // void netmanTransferProgress(qint64, qint64); signals: void statusText(QString); void statusFileName(QString); void progressMax(int); void progressValue(int); void newFileItem(FileItem); void uploadFileURL(QString); void transferProgress(qint64, qint64); void uploadFinished(); void finished(); }; #endif // YANDEXNARODNETMAN_H qutim-0.2.0/plugins/yandexnarod/requestauthdialog.cpp0000644000175000017500000000241211217427145024552 0ustar euroelessareuroelessar/* requestAuthDialog Copyright (c) 2008-2009 by Alexander Kazarin *************************************************************************** * * * 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 #include "requestauthdialog.h" requestAuthDialog::requestAuthDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); ui.frameCaptcha->hide(); this->setFixedHeight(180); this->setMaximumHeight(180); qutim_sdk_0_2::SystemsCity::PluginSystem()->centerizeWidget(this); } requestAuthDialog::~requestAuthDialog() { } void requestAuthDialog::setCaptcha(QString imgurl) { this->setFixedHeight(305); this->setMaximumHeight(305); ui.frameCaptcha->show(); ui.webCaptcha->setHtml(""); ui.labelCaptcha->show(); } qutim-0.2.0/plugins/yandexnarod/yandexnarodnetman.cpp0000644000175000017500000002603711215655425024552 0ustar euroelessareuroelessar/* yandexnarodNetMan Copyright (c) 2008-2009 by Alexander Kazarin *************************************************************************** * * * 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 "yandexnarodnetman.h" #include "requestauthdialog.h" yandexnarodNetMan::yandexnarodNetMan(QObject *parent, QString profile_name) : m_profile_name(profile_name), QObject(parent) { netman = new QNetworkAccessManager(); connect(netman, SIGNAL(finished(QNetworkReply*)), this, SLOT(netrpFinished(QNetworkReply*))); loadSettings(); loadCookies(); auth_flag=0; } yandexnarodNetMan::~yandexnarodNetMan() { //qDebug()<<"yandexnarodNetMan terminated"; } void yandexnarodNetMan::startAuthTest(QString login, QString passwd) { narodLogin = login; narodPasswd = passwd; action = "auth_test"; netmanDo(); } void yandexnarodNetMan::startGetFilelist() { action = "get_filelist"; filesnum=0; fileids.clear(); // loadCookies(); netmanDo(); } void yandexnarodNetMan::startDelFiles(QStringList delfileids) { action = "del_files"; fileids = delfileids; // loadCookies(); netmanDo(); } void yandexnarodNetMan::startUploadFile(QString filearg) { filepath = filearg; action = "upload"; nstep=1; // loadCookies(); netmanDo(); } void yandexnarodNetMan::loadSettings() { netreq.setRawHeader("Cache-Control", "no-cache"); netreq.setRawHeader("Accept", "*/*"); netreq.setRawHeader("User-Agent", "qutIM/0.2 (U; YB/4.2.0; MRA/5.5; en)"); } void yandexnarodNetMan::loadCookies() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); settings.beginGroup("cookies"); QNetworkCookieJar *netcookjar = new QNetworkCookieJar(); foreach (QString cookname, settings.allKeys()) { QString cookvalue = settings.value(cookname).toString(); QNetworkCookie *netcook = new QNetworkCookie(); netcook->setName(cookname.toAscii()); netcook->setValue(cookvalue.toAscii()); netcook->setDomain(".yandex.ru"); netcook->setPath("/"); } netman->setCookieJar(netcookjar); } void yandexnarodNetMan::saveCookies() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); settings.remove("cookies"); settings.beginGroup("cookies"); QNetworkCookieJar *netcookjar = netman->cookieJar(); foreach (QNetworkCookie netcook, netcookjar->cookiesForUrl(QUrl("http://narod.yandex.ru"))) { QString cookname = netcook.name(); QString cookvalue = netcook.value(); settings.setValue(cookname, cookvalue); } } void yandexnarodNetMan::netmanDo() { QStringList cooks; QNetworkCookieJar *netcookjar = netman->cookieJar(); foreach (QNetworkCookie netcook, netcookjar->cookiesForUrl(QUrl("http://narod.yandex.ru"))) { cooks.append(netcook.name()+"="+netcook.value()); } if (cooks.isEmpty() && netreq.url().toString() != "http://passport.yandex.ru/passport?mode=auth") { emit statusText(tr("Authorizing...")); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); narodLogin = settings.value("auth/login").toString(); narodPasswd = settings.value("auth/passwd").toString(); QByteArray post = "login=" + narodLogin.toLatin1() + "&passwd=" + narodPasswd.toLatin1(); //qDebug()<<"SEND AUTH"; if (narodLogin.isEmpty() || narodPasswd.isEmpty() || narodCaptchaKey.length()>0) { requestAuthDialog authdialog; authdialog.setLogin(narodLogin); authdialog.setPasswd(narodPasswd); if (narodCaptchaKey.length()>0) { authdialog.setCaptcha("http://passport.yandex.ru/digits?idkey="+narodCaptchaKey); } if (authdialog.exec()) { narodLogin = authdialog.getLogin(); narodPasswd = authdialog.getPasswd(); if (authdialog.getRemember()) { settings.setValue("auth/login", narodLogin); settings.setValue("auth/passwd", narodPasswd); } post = "login=" + narodLogin.toLatin1() + "&passwd=" + narodPasswd.toLatin1(); } else { post.clear(); } if (!post.isEmpty() && narodCaptchaKey.length()>0) { post += "&idkey="+narodCaptchaKey.toLatin1()+"&code="+authdialog.getCode(); } } if (!post.isEmpty()) { netreq.setUrl(QUrl("http://passport.yandex.ru/passport?mode=auth")); netman->post(netreq, post); } else { emit statusText(tr("Canceled")); emit finished(); } } else { //qDebug()<<"SEND Action request"<get(netreq); } else if (action=="del_files") { emit progressMax(1); emit progressValue(0); emit statusText(tr("Deleting files...")); QByteArray postData; postData.append("action=delete"); foreach (QString fileid, fileids) postData.append("&fid="+fileid); netreq.setUrl(QUrl("http://narod.yandex.ru/disk/all/")); netman->post(netreq, postData); } else if (action=="upload") { if (nstep==1) { netreq.setUrl(QUrl("http://narod.yandex.ru/disk/getstorage/")); emit statusText(tr("Getting storage...")); netman->get(netreq); } else if (nstep==2) { QRegExp rx("\"url\":\"(\\S+)\".+\"hash\":\"(\\S+)\".+\"purl\":\"(\\S+)\""); if (rx.indexIn(page)>-1) { purl = rx.cap(3) + "?tid=" + rx.cap(2); netreq.setUrl(QUrl(rx.cap(1) + "?tid=" + rx.cap(2))); emit statusText("Opening file..."); QString boundary = "AaB03x"; QFile file(filepath); fi.setFile(file); if (filepath.isEmpty()) { emit statusText(tr("Canceled")); } else if (fi.size()==0) { emit statusText(tr("File size is null")); } else if (file.open(QIODevice::ReadOnly)) { lastdir = fi.dir().path(); QString fName = fi.fileName(); emit statusText(tr("Starting upload...")); QByteArray mpData; mpData.append("--" + boundary + "\r\n"); mpData.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + fName.toUtf8() + "\"\r\n"); mpData.append("Content-Transfer-Encoding: binary\r\n"); mpData.append("\r\n"); mpData.append(file.readAll()); mpData.append("\r\n--" + boundary + "--\r\n"); file.close(); netreq.setRawHeader("Content-Type", "multipart/form-data, boundary=" + boundary.toLatin1()); netreq.setRawHeader("Content-Length", QString::number(mpData.length()).toLatin1()); for (int i=0; ipost(netreq, mpData); connect(netrp, SIGNAL(uploadProgress(qint64, qint64)), this, SIGNAL(transferProgress(qint64, qint64))); } else { emit statusText(tr("Can't read file")); emit finished(); } } else { emit statusText(tr("Can't get storage")); emit finished(); } } else if (nstep==3) { emit statusText(tr("Verifying...")); netreq.setUrl(QUrl(purl)); netman->get(netreq); } } } } void yandexnarodNetMan::netrpFinished( QNetworkReply* reply ) { page = reply->readAll(); //qDebug()<<"PAGE"<rawHeader("Set-Cookie"); if (!replycookstr.isEmpty()) { QNetworkCookieJar *netcookjar = netman->cookieJar(); foreach (QNetworkCookie netcook, netcookjar->cookiesForUrl(QUrl("http://narod.yandex.ru"))) { //qDebug()<<"Cookie"<url().toString()=="http://passport.yandex.ru/passport?mode=auth") { QRegExp rx("0) { QRegExp rx1(""); if (rx1.indexIn(page)>0) { //qDebug()<<"Confirmation send"; QByteArray post = "idkey="+rx1.cap(1).toAscii()+"&no=no"; netman->post(netreq, post); stop=true; } } else { rx.setPattern("0) { emit statusText(tr("Authorization captcha request")); narodCaptchaKey = rx.cap(1); netreq.setUrl(QUrl("http://narod.yandex.ru")); //hack netmanDo(); stop=true; } else { auth_flag = -1; } } } } else auth_flag = 1; } } } if (!stop && reply->url().toString()=="http://passport.yandex.ru/passport?mode=auth") { if (auth_flag>0) { netmanDo(); stop=true; } else auth_flag = -1; } if (!stop && auth_flag < 0) { emit statusText(tr("Authorization failed")); } if (!stop && auth_flag>-1) { if (action == "auth_test") { netmanDo(); } else if (action == "get_filelist") { page.replace("", ""); QRegExp rxfn("\\((\\d+)\\)"); if (rxfn.indexIn(page)>-1) { filesnum=rxfn.cap(1).toInt(); emit progressMax(filesnum); } int cpos=0; QRegExp rx("class=\"\\S+icon\\s(\\S+)\"[^<]+([^<]+)"); cpos = rx.indexIn(page); while (cpos>0) { FileItem fileitem; fileitem.filename = QString::fromUtf8(rx.cap(4).toLatin1()); fileitem.fileid = rx.cap(2); fileitem.fileurl = rx.cap(3); fileitem.fileicon = rx.cap(1); emit newFileItem(fileitem); fileids.append(rx.cap(2)); emit progressValue(fileids.count()); cpos = rx.indexIn(page, cpos+1); } QRegExp rxnp("0 && rxnp.capturedTexts()[1].length()) { netreq.setUrl(QUrl("http://narod.yandex.ru"+rxnp.cap(1))); netman->get(netreq); } else { emit statusText(QString(tr("Filelist downloaded\n(%1 files)")).arg(QString::number(filesnum))); emit finished(); } } else if (action=="del_files") { emit statusText(tr("File(s) deleted")); emit progressValue(1); emit finished(); } else if (action=="upload") { if (nstep==1 || nstep==2) { nstep++; netmanDo(); } else if (nstep==3) { emit finished(); QRegExp rx("\"status\":\\s*\"done\".+\"fid\":\\s*\"(\\d+)\"\\,\\s*\"hash\":\\s*\"(\\S+)\"\\,\\s*\"name\":\\s*\"(\\S+)\""); if (rx.indexIn(page)>0) { emit statusText(tr("Uploaded successfully")); QString url = "http://narod.ru/disk/"+rx.cap(2)+"/"+rx.cap(3)+".html"; emit uploadFileURL(url); emit uploadFinished(); } else { qDebug()<<"page"< Copyright (C) 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; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qutim-0.2.0/plugins/yandexnarod/README0000644000175000017500000000010611167415204021167 0ustar euroelessareuroelessarAll instructions you can find on qutIM forum: http://qutim.org/forum/ qutim-0.2.0/plugins/yandexnarod/icons/0000755000175000017500000000000011273101540021416 5ustar euroelessareuroelessarqutim-0.2.0/plugins/yandexnarod/icons/clipboard.png0000644000175000017500000000135711167414724024106 0ustar euroelessareuroelessarPNG  IHDRaIDATx}oHSQƟnnN#K7"UDDL+%%K} DҗL_JIAIi"43欭qL0ڽn^!ZsFsnK$6^Fbn\.<~A;.Ry& ,qUoa4(w]G8#Ip_B"VQQV\evϭlRЄϋKHHhJ@#{"-'zfIpANbʂ BAc`cǯ 3 ^')YXV8J_B$ A 9`z? б:4V+Wxl ?6T'Q I 6mG/Df!nzTޡi6 ~U0t3%a--eTD 8 MJ-˿%RffXƅrtX 8wwwh$e! eY%8}9$*B2 5hQ2#)Z+'`0(Xa4;ڃKϺpĹZ' |>z%Leٰ*Ws?Հ)\ٓ[g\>@)M# 4Ԁ,JGas0mN>X=t^] ~? Ks_hw\~ < 6NtIENDB`qutim-0.2.0/plugins/yandexnarod/icons/yandexnarodplugin.png0000644000175000017500000000042411167411047025667 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME   dIDAT8c`l߅ _#ǥ _=Jeb4E+$ГOޞ0|Hf\0!L4cs*Z xY*7!)H0(h0_0…hDWDl`r"@HHZIENDB`qutim-0.2.0/plugins/yandexnarod/icons/yandexnarodlogo.png0000644000175000017500000000265111167411047025335 0ustar euroelessareuroelessarPNG  IHDR%(NgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEWWWrrr]]]ccc ZBKKK000 ۠'''NNNޢ999ϗ~~~xϴ{{{b<,B0v333K7ɓ̱xxx666---rS̕EEE퍍0#PC#HHH՛`FlllOI:***fffy$F>(```\N)nmiii???^\X2&60!$<0v^+%đ v4uuukrq1JIGwL}r\! H5ZVHnS tBBBƐy,`xUkfY׏q rDphR؞@7v@ZZZ<<<{ooo} ^TTTa[IL9{Z3-ID4$$$LdOtRNS {IDATxtw0m4iiҦ2l]V^y+yӷIc%obYߓdp8OɐփTH^ >~VZ (OU\hT*x;-,IT9)jH9G[zxx|M\3ITU.\FbPI۩ \쭶_4v">a(1°L+˚ȥ)ZsH$zm3!aN΂TU2rw_N_8P~ҏ  %$ʼnl!@6a$%^i<^ryZUqy'_7DE pX < pQkzV.~Wa bLz1ꁺEJL8pc^ @v 4}b}nUMMW.QXJ- T*p-wu=?i諟X$bNEkX`{hIID@D&"GA؉9&ꐀ;Ȗd{苷>ol-mjZ R0m_cԬS(ڃu:Oh`!ާ% ^>z8/vqwn *X`݉c(cva3Hx6cxU%'dKZչľD[7P)-ZƩ^,@ :e$FM H/ /beWRRWEWuArwNq_#e83_%,(nV1ƘxfY&-0 0ْ; [ָ9*>{@pXW @*` ^}ii&~P`ž>?\ZgݕjmJƮ>Gh\^ /8P#G`C0/d+]Ϊ+P,hJmhG+r̀@@^ O*%vtX_ At++K B~tS#'kjIRd k0`63jpe|kӕ% ,Y[9wUV`[ Xp`P %{۞Aˠ2Xuεn/9jԶIHq$@Á2Tpd2?  gVZ).6WVA!(X F$F`KZiU@1 ^C96BFloZ*a 'k6$ᆈ99b0fϳ_˲Vog;:T_]nG[9^&Vx8 n^ I 4y*;.RK Ehu N;@@j+g @7CacePF)@zZq4q5-q;;~b?([ iIENDB`qutim-0.2.0/plugins/yandexnarod/icons/delete.png0000644000175000017500000000105011167414724023377 0ustar euroelessareuroelessarPNG  IHDRaIDATxڍMHTQt䢨 rSh"*Ȝ2ZF& X,"*ZaTИ:h_ӳywUyw{9V-mRY2hvk6ơJopw;pŅ3Zl߅[Z%OσOL_[ a/n%hi?D7cKc|kH5c >~%6q&=eyDb.`{x}]Vf!%:9 >'JEnET1>p1\o+NS&^R`MxSRH@ybɮ @r G`$0&J $RI6EQ:y%3PHUXo.6lS>~r  )YcY: R4ɬ]/ƥ0=@`L;Zo s0b`X8IENDB`qutim-0.2.0/plugins/yandexnarod/icons/reload.png0000644000175000017500000000160711167414724023413 0ustar euroelessareuroelessarPNG  IHDRaNIDATxekhWwfdMUj%CKSj4ho?0m!"J_Z|ɦƖmQ7&ĝG̺3wz3\9w.n.ї10ϏŤLzgn3Y^ʵ)ByZ `4l%athKFbOkc)c$xR@o F&+dx}E7HklbJᡳK%Zz3ݟ.d̒I@+`U'pfayQ2axZ6 M:_WRr@-xkZ B8`7c'XHq wwDOaĎ 5%۰tIGpE݂pastc8jǀ#D}hȉ4yn+|?湷\~bVb"`!Z"K ;a)ցp>tO<hьELPJ{dE wRS>QXx; ʟMcoJS䮾)Lfqu7N3w59&֣/w^) -4]]r񄀁`m3n:luTL8S9+pja ӲCwm$xg+ $9j |\j .GHd UR_+L{l ")HQ/騟_Ց}B11P晕 L8[^?4+hdtYPη~Q+~ܨQM/j̾hSFBΗroxjIENDB`qutim-0.2.0/plugins/yandexnarod/icons/upload.png0000644000175000017500000000144311167414724023427 0ustar euroelessareuroelessarPNG  IHDRasRGBbKGD pHYs  tIME  $nIDAT8uKhY@{~"&MΨ(!\L k .u+qBE\QIИQR"p߽aŀ@kIWYkِkө!Z7uP tzVױ²ե$5!@ C8umT @-gږ|U=6B 䮋m%CGd,ɩ3lkk2o]skvr3+k~pUKd,ɛo*gWQLWi t-lg#-9I.loўr If7 b]`I z =^y,!w4I*K"́ŗ>q2 0Gi|Tб"&I4crIwLdkZUu]&e\UoǩOȪwW-wQ 05a9vu[33+iA ôBJdP8UP/ |MI-Vt*TJuLs9eR.aWj,ax;SF@w6sǬt k{IENDB`qutim-0.2.0/plugins/yandexnarod/icons/close.png0000644000175000017500000000124711167414724023252 0ustar euroelessareuroelessarPNG  IHDRanIDATxڥ]HQ>ml5(I *E9FEiLR(an/Z,JִXnDÒeIwmw:.<;ys(Qłn*'Q`RΕ4@woy547?F2Zmc9 б`K=KV*'I80/`o> xg4ojiqxߟudyļZfSb8)^afŢƥH>_:X W8tldi$ ɤ(7omD>*.4w84"H {B]Q yandexnarodSettingsClass 0 0 404 380 Settings 0 Settings QLayout::SetMinimumSize 170 0 0 Password 0 0 QLineEdit::Password Login Test Authorization status Qt::LinksAccessibleByMouse Qt::Horizontal 68 20 <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Verdana'; font-size:8pt;"></p></body></html> Send file template 16777215 17 %N - file name; %U - file URL; %S - file size About <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Tahoma'; font-size:10pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/icons/yandexnarodlogo.png" /></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Yandex.Narod qutIM plugin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">svn version</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">File exchange via </span><a href="http://narod.yandex.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0057ae;">Yandex.Narod</span></a><span style=" font-family:'Bitstream Vera Sans';"> service</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans';"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-weight:600;">Author: </span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans';">Alexander Kazarin</span></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:boiler.co.ru"><span style=" font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#0000ff;">boiler@co.ru</span></a></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; text-decoration: underline; color:#000000;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; color:#000000;">(c) 2008-2009</span></p></body></html> true testclick() qutim-0.2.0/plugins/yandexnarod/AUTHORS0000644000175000017500000000023111273101753021355 0ustar euroelessareuroelessarqutIM: cute crossplatform Instant Messenger Yandex.Narod plugin =========================================== Developers: ----------- Alexander Kazarin qutim-0.2.0/plugins/yandexnarod/yandexnarodmanage.cpp0000644000175000017500000001340611217427145024512 0ustar euroelessareuroelessar/* yandexnarodManage Copyright (c) 2009 by Alexander Kazarin *************************************************************************** * * * 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 #include "yandexnarodmanage.h" yandexnarodManage::yandexnarodManage(QString profile_name) { m_profile_name = profile_name; setupUi(this); this->setWindowTitle(tr("Yandex.Narod file manager")); this->setWindowIcon(QIcon(":/icons/yandexnarodplugin.png")); frameProgress->hide(); frameFileActions->hide(); listWidget->clear(); netman = new yandexnarodNetMan(this, m_profile_name); connect(netman, SIGNAL(statusText(QString)), labelStatus, SLOT(setText(QString))); connect(netman, SIGNAL(progressMax(int)), progressBar, SLOT(setMaximum(int))); connect(netman, SIGNAL(progressValue(int)), progressBar, SLOT(setValue(int))); connect(netman, SIGNAL(newFileItem(FileItem)), this, SLOT(newFileItem(FileItem))); connect(netman, SIGNAL(finished()), this, SLOT(netmanFinished())); QPixmap iconimage(":/icons/yandexnarod-icons-files.png"); for (int i=0; i<(iconimage.width()/16); i++) { QIcon icon(iconimage.copy((i*16),0,16,16)); fileicons.append(icon); } fileiconstyles["b-icon-music"] = 0; fileiconstyles["b-icon-video"] = 1; fileiconstyles["b-icon-arc"] = 2; fileiconstyles["b-icon-doc"] = 3; fileiconstyles["b-icon-soft"] = 4; fileiconstyles["b-icon-unknown"] = 5; fileiconstyles["b-icon-picture"] = 14; uploadwidget=0; QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+profile_name, "plugin_yandexnarod"); if (settings.value("manager/width").isValid() && settings.value("manager/height").isValid()) { this->resize(settings.value("manager/width").toInt(), settings.value("manager/height").toInt()); } if (settings.value("manager/left").isValid() && settings.value("manager/top").isValid()) { move(settings.value("manager/left").toInt(), settings.value("manager/top").toInt()); } else { qutim_sdk_0_2::SystemsCity::PluginSystem()->centerizeWidget(this); } setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); } yandexnarodManage::~yandexnarodManage() { delete netman; QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); settings.setValue("manager/left", this->geometry().left()); settings.setValue("manager/top", this->geometry().top()); settings.setValue("manager/width", this->geometry().width()); settings.setValue("manager/height", this->geometry().height()); } void yandexnarodManage::newFileItem(FileItem fileitem) { int iconnum = 5; QString fileiconname = fileitem.fileicon.replace("-old", ""); if (fileiconstyles.contains(fileiconname)) iconnum = fileiconstyles[fileiconname]; QListWidgetItem *listitem = new QListWidgetItem(fileicons[iconnum], fileitem.filename); listWidget->addItem(listitem); fileitems.append(fileitem); } void yandexnarodManage::netmanPrepare() { progressBar->setValue(0); frameProgress->show(); labelStatus->clear(); frameFileActions->hide(); btnReload->setEnabled(false); } void yandexnarodManage::netmanFinished() { btnReload->setEnabled(true); } void yandexnarodManage::on_btnReload_clicked() { listWidget->clear(); fileitems.clear(); netmanPrepare(); netman->startGetFilelist(); } void yandexnarodManage::on_btnDelete_clicked() { progressBar->setMaximum(1); netmanPrepare(); QStringList delfileids; for (int i=0; icount(); i++) { if (listWidget->item(i)->isSelected()) { listWidget->item(i)->setIcon(fileicons[15]); delfileids.append(fileitems[i].fileid); } } netman->startDelFiles(delfileids); } void yandexnarodManage::on_listWidget_pressed(QModelIndex) { if (progressBar->value()==progressBar->maximum()) frameProgress->hide(); if (frameFileActions->isHidden()) frameFileActions->show(); } void yandexnarodManage::on_btnClipboard_clicked() { QString text; for (int i=0; icount(); i++) { if (listWidget->item(i)->isSelected()) { text += fileitems[i].fileurl+"\n"; } } QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(text); } void yandexnarodManage::on_btnUpload_clicked() { uploadwidget = new uploadDialog(); connect(uploadwidget, SIGNAL(canceled()), this, SLOT(removeUploadWidget())); uploadwidget->show(); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "plugin_yandexnarod"); QString filepath = QFileDialog::getOpenFileName(uploadwidget, tr("Choose file"), settings.value("main/lastdir").toString()); if (filepath.length()>0) { QFileInfo fi(filepath); settings.setValue("main/lastdir", fi.dir().path()); upnetman = new yandexnarodNetMan(uploadwidget, m_profile_name); connect(upnetman, SIGNAL(statusText(QString)), uploadwidget, SLOT(setStatus(QString))); connect(upnetman, SIGNAL(statusFileName(QString)), uploadwidget, SLOT(setFilename(QString))); connect(upnetman, SIGNAL(transferProgress(qint64,qint64)), uploadwidget, SLOT(progress(qint64,qint64))); connect(upnetman, SIGNAL(uploadFinished()), uploadwidget, SLOT(setDone())); connect(upnetman, SIGNAL(finished()), this, SLOT(netmanFinished())); upnetman->startUploadFile(filepath); } else { delete uploadwidget; uploadwidget=0; } } void yandexnarodManage::removeUploadWidget() { } qutim-0.2.0/plugins/yandexnarod/requestauthdialog.ui0000644000175000017500000001210011215655425024402 0ustar euroelessareuroelessar requestAuthDialogClass 0 0 235 303 128 0 320 15400 Authorization :/icons/yandexnarodplugin.png:/icons/yandexnarodplugin.png Login: 0 0 Password: 0 0 QLineEdit::Password Remember QFrame::NoFrame QFrame::Raised 0 Captcha: about:blank 0 0 Qt::Horizontal 40 20 QDialogButtonBox::Cancel|QDialogButtonBox::Ok Qt::Horizontal 40 20 QWebView QWidget

QtWebKit/QWebView
buttonBox accepted() requestAuthDialogClass accept() 118 281 118 152 buttonBox rejected() requestAuthDialogClass reject() 118 281 118 152 qutim-0.2.0/plugins/yandexnarod/yandexnarodsettings.h0000644000175000017500000000244411215655425024571 0ustar euroelessareuroelessar/* yandexnarodSettings Copyright (c) 2009 by Alexander Kazarin *************************************************************************** * * * 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. * * * *************************************************************************** */ #define VERSION "0.1.4" #ifndef YANDEXNARODSETTINGS_H #define YANDEXNARODSETTINGS_H #include "ui_yandexnarodsettings.h" #include class yandexnarodSettings : public QWidget { Q_OBJECT; public: yandexnarodSettings(QString); ~yandexnarodSettings(); QString getLogin() { return ui.editLogin->text(); } QString getPasswd() { return ui.editPasswd->text(); } void btnTest_enabled(bool b) { ui.btnTest->setEnabled(b); } public slots: void setStatus(QString str); void saveSettings(); private: Ui::yandexnarodSettingsClass ui; QString m_profile_name; signals: void testclick(); }; #endif qutim-0.2.0/plugins/yandexnarod/yandexnarodmanage.ui0000644000175000017500000002230511215731147024341 0ustar euroelessareuroelessar yandexnarodManageClass 0 0 502 292 502 284 Form 0 QLayout::SetNoConstraint 0 160 16777215 QFrame::NoFrame QFrame::Raised 0 0 160 81 QFrame::NoFrame QFrame::Raised Get Filelist :/icons/reload.png:/icons/reload.png Upload File :/icons/upload.png:/icons/upload.png 0 98 16777215 100 QFrame::NoFrame QFrame::Plain 0 QLayout::SetNoConstraint 0 Actions: 200 50 Clipboard :/icons/clipboard.png:/icons/clipboard.png false 200 27 Delete File :/icons/delete.png:/icons/delete.png Qt::Vertical 20 5 0 80 16777215 50 QFrame::NoFrame QFrame::Plain 0 line1 line2 true 24 160 40 QFrame::NoFrame QFrame::Raised 0 0 Close :/icons/close.png:/icons/close.png 331 0 QFrame::NoFrame QFrame::Raised 9 Files list: QFrame::Box QAbstractItemView::ExtendedSelection New Item btnExit clicked() yandexnarodManageClass close() 79 458 321 241 qutim-0.2.0/plugins/yandexnarod/uploaddialog.h0000644000175000017500000000240711217427145023135 0ustar euroelessareuroelessar/* uploadDialog Copyright (c) 2008 by Alexander Kazarin *************************************************************************** * * * 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 UPLOADDIALOG_H #define UPLOADDIALOG_H #include #include "ui_uploaddialog.h" class uploadDialog : public QWidget { Q_OBJECT; public: uploadDialog(); ~uploadDialog(); void start(); private: Ui::uploadDialogClass ui; QTime utime; signals: void canceled(); public slots: void progress(qint64, qint64); void setStatus(QString str) { ui.labelStatus->setText(str); } void setFilename(QString str) { ui.labelFile->setText("File: "+str); this->setWindowTitle(tr("Uploading")+" - "+str); } void setDone() { ui.btnUploadCancel->setText(tr("Done")); } }; #endif qutim-0.2.0/plugins/yandexnarod/yandexnarod.pro0000644000175000017500000000117311177032470023353 0ustar euroelessareuroelessarTARGET = yandexnarod HEADERS += yandexnarod.h \ requestauthdialog.h \ uploaddialog.h \ yandexnarodsettings.h \ yandexnarodmanage.h \ yandexnarodnetman.h SOURCES += yandexnarod.cpp \ requestauthdialog.cpp \ uploaddialog.cpp \ yandexnarodsettings.cpp \ yandexnarodmanage.cpp \ yandexnarodnetman.cpp INCLUDEPATH += ../../include /usr/include CONFIG += qt \ plugin QT += core \ gui \ network \ webkit TEMPLATE = lib RESOURCES += yandexnarod.qrc FORMS += requestauthdialog.ui \ uploaddialog.ui \ yandexnarodsettings.ui \ yandexnarodmanage.ui TRANSLATIONS += yandexnarod_ru.ts qutim-0.2.0/plugins/yandexnarod/yandexnarod.h0000644000175000017500000000435711216477015023013 0ustar euroelessareuroelessar/* yandexnarodPlugin Copyright (c) 2008-2009 by Alexander Kazarin *************************************************************************** * * * 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 YANDEXNARODPLUGIN_H #define YANDEXNARODPLUGIN_H #include "qutim/plugininterface.h" #include #include #include #include "yandexnarodmanage.h" #include "yandexnarodsettings.h" #include "uploaddialog.h" using namespace qutim_sdk_0_2; class yandexnarodPlugin : public QObject, SimplePluginInterface, EventHandler { Q_OBJECT Q_INTERFACES(qutim_sdk_0_2::PluginInterface) public: virtual bool init(PluginSystemInterface *plugin_system); virtual void release() {} virtual void processEvent(Event &event); virtual QWidget *settingsWidget(); virtual void setProfileName(const QString &profile_name); virtual QString name() { return "Yandex.Narod"; } virtual QString description() { return "Send files via Yandex.Narod filehosting service"; } virtual QString type() { return "other"; } virtual QIcon *icon() { return m_plugin_icon; } virtual void saveSettings(); private: QIcon *m_plugin_icon; PluginSystemInterface *m_plugin_system; QString m_profile_name; QString m_account_name; TreeModelItem event_item; quint16 event_id; uploadDialog* uploadwidget; yandexnarodSettings *settingswidget; yandexnarodManage* manageDialog; yandexnarodNetMan *netman; yandexnarodNetMan *testnetman; QString msgtemplate; QString purl; QTime time; QFileInfo fi; QStringList cooks; bool authtest; private slots: void manage_clicked(); void on_btnTest_clicked(); void on_TestFinished(); void actionStart(); void setCooks(QStringList cs) { cooks = cs; } void onFileURL(QString); virtual void removeSettingsWidget(); }; #endif qutim-0.2.0/plugins/histman/0000755000175000017500000000000011273101056017434 5ustar euroelessareuroelessarqutim-0.2.0/plugins/histman/src/0000755000175000017500000000000011273101056020223 5ustar euroelessareuroelessarqutim-0.2.0/plugins/histman/src/historymanagerwindow.h0000644000175000017500000000543311273062067024675 0ustar euroelessareuroelessar/* HistoryManagerWindow Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 HISTORYMANAGERWINDOW_H #define HISTORYMANAGERWINDOW_H #include #include #include #include #include "clients/qutim.h" #include "include/qutim/historymanager.h" namespace HistoryManager { class HistoryManagerWindow : public QWizard, public DataBaseInterface { Q_OBJECT Q_DISABLE_COPY(HistoryManagerWindow) public: enum State { ChooseClient, ConfigClient, ImportHistory, ChooseOrDump, PreviewHistory, ExportHistory }; explicit HistoryManagerWindow(QWidget *parent = 0); virtual ~HistoryManagerWindow(); virtual void appendMessage(const Message &message); virtual void setProtocol(const QString &protocol); virtual void setAccount(const QString &account); virtual void setContact(const QString &contact); virtual void setMaxValue(int max); virtual void setValue(int value); virtual ConfigWidget createAccountWidget(const QString &protocol); inline void setCurrentClient(HistoryImporter *client) { m_current_client = client; } inline HistoryImporter *getCurrentClient() const { return m_current_client; } inline qutim *getQutIM() const { return m_qutim; } inline quint64 getMessageNum() const { return m_message_num; } void saveMessages(char format); QString finishStr() { if(m_finish.isEmpty()) m_finish = buttonText(QWizard::FinishButton); return m_finish; } QString nextStr() { if(m_next.isEmpty()) m_next = buttonText(QWizard::NextButton); return m_next; } QString dumpStr() { return m_dump; } void setCharset(const QByteArray &charset) { m_charset = charset; } QByteArray charset() const { return m_charset; } protected: virtual void changeEvent(QEvent *e); signals: void maxValueChanged(int value); void valueChanged(int value); void saveMaxValueChanged(int value); void saveValueChanged(int value); private: QHash m_protocols; Protocol *m_protocol; Account *m_account; Contact *m_contact; quint64 m_message_num; HistoryImporter *m_current_client; qutim *m_qutim; QString m_finish; QString m_next; QString m_dump; QByteArray m_charset; bool m_is_dumping; }; } #endif // HISTORYMANAGERWINDOW_H qutim-0.2.0/plugins/histman/src/clientconfigpage.h0000644000175000017500000000331511273062067023707 0ustar euroelessareuroelessar/* ClientConfigPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 CLIENTCONFIGPAGE_H #define CLIENTCONFIGPAGE_H #include #include "historymanagerwindow.h" namespace Ui { class ClientConfigPage; } namespace HistoryManager { class ClientConfigPage : public QWizardPage { Q_OBJECT Q_DISABLE_COPY(ClientConfigPage) public: explicit ClientConfigPage(HistoryManagerWindow *parent = 0); virtual ~ClientConfigPage(); static QString getAppropriatePath(const QString &path); static QString getAppropriateFilePath(const QString &filename); protected: virtual void changeEvent(QEvent *e); virtual void initializePage(); virtual void cleanupPage(); virtual bool validatePage(); virtual bool isComplete() const; virtual int nextId() const; protected slots: void on_browseButton_clicked(); void onTextChanged(const QString &filename); private: Ui::ClientConfigPage *m_ui; bool m_valid; HistoryManagerWindow *m_parent; QPixmap m_valid_pixmap; QPixmap m_invalid_pixmap; QList m_config_list; }; } #endif // CLIENTCONFIGPAGE_H qutim-0.2.0/plugins/histman/src/chooseordumppage.h0000644000175000017500000000255111273062067023753 0ustar euroelessareuroelessar/* ChooseOrDumpPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 CHOOSEORDUMPPAGE_H #define CHOOSEORDUMPPAGE_H #include #include "historymanagerwindow.h" namespace Ui { class ChooseOrDumpPage; } namespace HistoryManager { class ChooseOrDumpPage : public QWizardPage { Q_OBJECT Q_DISABLE_COPY(ChooseOrDumpPage) public: explicit ChooseOrDumpPage(HistoryManagerWindow *parent = 0); virtual ~ChooseOrDumpPage(); protected: virtual void changeEvent(QEvent *e); virtual void initializePage(); virtual void cleanupPage(); virtual bool validatePage(); virtual int nextId() const; private: Ui::ChooseOrDumpPage *m_ui; HistoryManagerWindow *m_parent; }; } #endif // CHOOSEORDUMPPAGE_H qutim-0.2.0/plugins/histman/src/importhistorypage.cpp0000644000175000017500000000620111273062067024527 0ustar euroelessareuroelessar/* ImportHistoryPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "importhistorypage.h" #include "clientconfigpage.h" #include "ui_importhistorypage.h" #include #include namespace HistoryManager { ImportHistoryPageHepler::ImportHistoryPageHepler(ImportHistoryPage *parent) : QThread(parent) { m_parent = parent; m_time = 0; } void ImportHistoryPageHepler::run() { QTime t; t.start(); m_parent->m_parent->getCurrentClient()->loadMessages(m_path); m_time = t.elapsed(); } ImportHistoryPage::ImportHistoryPage(HistoryManagerWindow *parent) : QWizardPage(parent), m_ui(new Ui::ImportHistoryPage) { m_parent = parent; m_ui->setupUi(this); setTitle(tr("Loading")); connect(m_parent, SIGNAL(maxValueChanged(int)), m_ui->progressBar, SLOT(setMaximum(int))); connect(m_parent, SIGNAL(valueChanged(int)), m_ui->progressBar, SLOT(setValue(int))); m_helper = new ImportHistoryPageHepler(this); connect(m_helper, SIGNAL(finished()), this, SLOT(completed())); setCommitPage(true); setButtonText(QWizard::CommitButton, m_parent->nextStr()); } ImportHistoryPage::~ImportHistoryPage() { delete m_ui; } void ImportHistoryPage::initializePage() { m_completed = false; setSubTitle(tr("Manager loads all history to memory, it may take several minutes.")); m_parent->getCurrentClient()->setCharset(m_parent->charset()); m_helper->setPath(ClientConfigPage::getAppropriateFilePath(field("historypath").toString())); m_ui->progressBar->setValue(0); QTimer::singleShot(100, m_helper, SLOT(start())); m_parent->button(QWizard::BackButton)->setEnabled(false); m_parent->button(QWizard::CancelButton)->setEnabled(false); } void ImportHistoryPage::cleanupPage() { m_completed = false; } bool ImportHistoryPage::isComplete() const { return m_completed; } int ImportHistoryPage::nextId() const { return HistoryManagerWindow::ChooseOrDump; } void ImportHistoryPage::completed() { setSubTitle(tr("%n message(s) have been succesfully loaded to memory.", 0, m_parent->getMessageNum()) + " " + tr("It has taken %n ms.", 0, m_helper->getTime())); m_completed = true; m_ui->progressBar->setValue(m_ui->progressBar->maximum()); m_parent->button(QWizard::BackButton)->setEnabled(true); m_parent->button(QWizard::CancelButton)->setEnabled(true); emit completeChanged(); } void ImportHistoryPage::changeEvent(QEvent *e) { QWizardPage::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } } qutim-0.2.0/plugins/histman/src/chooseordumppage.cpp0000644000175000017500000000361611273062067024311 0ustar euroelessareuroelessar/* ChooseOrDumpPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "chooseordumppage.h" #include "ui_chooseordumppage.h" namespace HistoryManager { ChooseOrDumpPage::ChooseOrDumpPage(HistoryManagerWindow *parent) : QWizardPage(parent), m_ui(new Ui::ChooseOrDumpPage) { m_ui->setupUi(this); m_parent = parent; setTitle(tr("What to do next?", "Dump history or choose next client")); setSubTitle(tr("It is possible to choose another client for import history or dump history to the disk.")); } ChooseOrDumpPage::~ChooseOrDumpPage() { delete m_ui; } void ChooseOrDumpPage::initializePage() { m_ui->dumpRadioButton->setChecked(true); } void ChooseOrDumpPage::cleanupPage() { m_ui->dumpRadioButton->setChecked(true); } bool ChooseOrDumpPage::validatePage() { if(nextId() == HistoryManagerWindow::ChooseClient) { m_parent->restart(); return false; } return true; } int ChooseOrDumpPage::nextId() const { return m_ui->dumpRadioButton->isChecked() ? HistoryManagerWindow::ExportHistory : HistoryManagerWindow::ChooseClient; } void ChooseOrDumpPage::changeEvent(QEvent *e) { QWizardPage::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } } qutim-0.2.0/plugins/histman/src/chooseclientpage.h0000644000175000017500000000304511273062067023722 0ustar euroelessareuroelessar/* ChooseClientPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 CHOOSECLIENTPAGE_H #define CHOOSECLIENTPAGE_H #include #include #include "historymanagerwindow.h" namespace Ui { class ChooseClientPage; } namespace HistoryManager { class ChooseClientPage : public QWizardPage { Q_OBJECT Q_DISABLE_COPY(ChooseClientPage) public: explicit ChooseClientPage(HistoryManagerWindow *parent = 0); virtual ~ChooseClientPage(); protected: virtual void changeEvent(QEvent *e); virtual void initializePage(); virtual void cleanupPage(); virtual bool isComplete() const; virtual int nextId() const; protected slots: void clientChanged(QListWidgetItem *current = 0, QListWidgetItem *previous = 0); private: Ui::ChooseClientPage *m_ui; HistoryManagerWindow *m_parent; bool m_valid; QList m_clients_list; }; } #endif // CHOOSECLIENTPAGE_H qutim-0.2.0/plugins/histman/src/chooseordumppage.ui0000644000175000017500000000162311273062067024140 0ustar euroelessareuroelessar ChooseOrDumpPage 0 0 400 300 WizardPage Import history from one more client Dump history true qutim-0.2.0/plugins/histman/src/importhistorypage.ui0000644000175000017500000000121111273062067024356 0ustar euroelessareuroelessar ImportHistoryPage 0 0 400 300 WizardPage 24 qutim-0.2.0/plugins/histman/src/dumphistorypage.cpp0000644000175000017500000001074211273062067024167 0ustar euroelessareuroelessar/* DumpHistoryPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "dumphistorypage.h" #include "ui_dumphistorypage.h" #include #include namespace HistoryManager { static QString profile_path; DumpHistoryPageHelper::DumpHistoryPageHelper(DumpHistoryPage *parent) : QThread(parent) { m_parent = parent; } void DumpHistoryPageHelper::run() { if(m_parent->m_state == DumpHistoryPage::LoadingHistory) { m_parent->m_parent->getQutIM()->loadMessages(profile_path); } else if(m_parent->m_state == DumpHistoryPage::SavingHistory) { m_parent->m_parent->saveMessages(m_parent->m_format); } } DumpHistoryPage::DumpHistoryPage(HistoryManagerWindow *parent) : QWizardPage(parent), m_ui(new Ui::DumpHistoryPage) { m_ui->setupUi(this); m_parent = parent; setFinalPage(true); m_state = PreInit; profile_path = qutim_sdk_0_2::SystemsCity::PluginSystem()->getProfilePath(); connect(m_parent, SIGNAL(maxValueChanged(int)), m_ui->mergeProgressBar, SLOT(setMaximum(int))); connect(m_parent, SIGNAL(valueChanged(int)), m_ui->mergeProgressBar, SLOT(setValue(int))); connect(m_parent, SIGNAL(saveMaxValueChanged(int)), m_ui->dumpProgressBar, SLOT(setMaximum(int))); connect(m_parent, SIGNAL(saveValueChanged(int)), m_ui->dumpProgressBar, SLOT(setValue(int))); m_format = 0; m_helper = new DumpHistoryPageHelper(this); connect(m_helper, SIGNAL(finished()), this, SLOT(completed())); setTitle(tr("Dumping")); Q_REGISTER_EVENT(event_exports, EventExporters); qutim_sdk_0_2::Event(event_exports, 1, &m_clients_list).send(); m_ui->label_3->hide(); m_ui->binaryRadioButton->hide(); m_ui->jsonRadioButton->hide(); } DumpHistoryPage::~DumpHistoryPage() { delete m_ui; } void DumpHistoryPage::initializePage() { m_state = PreInit; QFileInfoList files; int num = 0; m_ui->mergeProgressBar->setValue(0); m_ui->dumpProgressBar->setValue(0); m_ui->binaryRadioButton->setEnabled(true); m_ui->jsonRadioButton->setEnabled(true); // if(m_parent->getQutIM()->guessJson(profile_path, files, num)) // { m_ui->jsonRadioButton->setChecked(true); m_ui->binaryRadioButton->setChecked(false); // } // else // { // m_ui->binaryRadioButton->setChecked(true); // m_ui->jsonRadioButton->setChecked(false); // } setButtonText(QWizard::FinishButton, m_parent->dumpStr()); setSubTitle(tr("Last step. Click 'Dump' to start dumping process."));//tr("Choose appropriate format of history, binary is default qutIM format nowadays.")); } void DumpHistoryPage::cleanupPage() { } bool DumpHistoryPage::isComplete() const { return m_state == Finished || m_state == PreInit; } bool DumpHistoryPage::validatePage() { if(m_state == Finished) return true; setSubTitle(tr("Manager merges history, it make take several minutes.")); setButtonText(QWizard::FinishButton, m_parent->finishStr()); m_ui->binaryRadioButton->setEnabled(false); m_ui->jsonRadioButton->setEnabled(false); m_state = LoadingHistory; m_format = m_ui->jsonRadioButton->isChecked() ? 'j' : 'b'; emit completeChanged(); m_parent->button(QWizard::BackButton)->setEnabled(false); m_parent->button(QWizard::CancelButton)->setEnabled(false); QTimer::singleShot(100, m_helper, SLOT(start())); return false; } int DumpHistoryPage::nextId() const { return -1; } void DumpHistoryPage::completed() { if(m_state == LoadingHistory) { m_state = SavingHistory; QTimer::singleShot(100, m_helper, SLOT(start())); } else if(m_state == SavingHistory) { setSubTitle(tr("History has been succesfully imported.")); m_state = Finished; m_parent->button(QWizard::BackButton)->setEnabled(true); m_parent->button(QWizard::CancelButton)->setEnabled(true); emit completeChanged(); } } void DumpHistoryPage::changeEvent(QEvent *e) { QWizardPage::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } } qutim-0.2.0/plugins/histman/src/dumphistorypage.ui0000644000175000017500000000313611273062067024021 0ustar euroelessareuroelessar DumpHistoryPage 0 0 400 300 WizardPage Choose format: JSON Binary Merging history state: 24 Dumping history state: 24 qutim-0.2.0/plugins/histman/src/historymanagerwindow.ui0000644000175000017500000000063611273062067025063 0ustar euroelessareuroelessar HistoryManagerWindow 0 0 400 300 Form qutim-0.2.0/plugins/histman/src/historymanagerplugin.h0000644000175000017500000000325711273062067024666 0ustar euroelessareuroelessar/* HistoryManagerPlugin Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 historymanagerplugin_H #define historymanagerplugin_H #include using namespace qutim_sdk_0_2; class HistoryManagerPlugin : public QObject, SimplePluginInterface { Q_OBJECT Q_INTERFACES(qutim_sdk_0_2::PluginInterface) public: virtual bool init(PluginSystemInterface *plugin_system); virtual void release() {} virtual QString name() { return "History Manager"; } virtual QString description() { return "qutIM History Manager\nAutor: Nigmatullin Ruslan"; } virtual QString type() { return "history"; } virtual QIcon *icon() { return &m_plugin_icon; } virtual void setProfileName(const QString &profile_name); virtual void processEvent(PluginEvent &){} virtual QWidget *settingsWidget(); virtual void removeSettingsWidget(); virtual void saveSettings(); public slots: void createWidget(); private: QIcon m_plugin_icon; QString m_profile_name; QPointer m_widget; PluginSystemInterface *m_plugin_system; QAction *m_action; }; #endif qutim-0.2.0/plugins/histman/src/historymanagerplugin.cpp0000644000175000017500000000377311273062067025224 0ustar euroelessareuroelessar/* HistoryManagerPlugin Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "historymanagerplugin.h" #include "historymanagerwindow.h" #include #include bool HistoryManagerPlugin::init(PluginSystemInterface *plugin_system) { PluginInterface::init(plugin_system); m_plugin_system = plugin_system; m_action = new QAction("Import history", this); connect(m_action, SIGNAL(triggered()), this, SLOT(createWidget())); m_plugin_system->registerMainMenuAction(m_action); m_widget=0; return true; } void HistoryManagerPlugin::setProfileName(const QString &profile_name) { m_plugin_icon = Icon("history"); m_profile_name = profile_name; m_action->setIcon(m_plugin_icon); m_action->setText(tr("Import history")); } QWidget *HistoryManagerPlugin::settingsWidget() { //m_widget = new HistoryManagerWidget(m_profile_name, m_plugin_system); return new QWidget();//m_widget; } void HistoryManagerPlugin::removeSettingsWidget() { //delete m_widget; //m_widget=0; } void HistoryManagerPlugin::saveSettings() { } void HistoryManagerPlugin::createWidget() { if(!m_widget) { m_widget = new HistoryManager::HistoryManagerWindow(); m_widget->show(); } // m_widget = new HistoryManagerWidget(m_profile_name, m_plugin_system); // m_widget->show(); // connect(m_widget, SIGNAL(destroyed()), this, SLOT(killWidget())); } Q_EXPORT_PLUGIN2(historymanager, HistoryManagerPlugin); qutim-0.2.0/plugins/histman/src/k8json.h0000644000175000017500000000377511273062067021634 0ustar euroelessareuroelessar/* K8JSON Copyright (c) 2009 by Ketmar // Avalon Group *************************************************************************** * * * 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 K8JSON_H #define K8JSON_H //#define K8JSON_INCLUDE_GENERATOR #include #include #include #include #include #ifdef K8JSON_INCLUDE_GENERATOR # include #endif namespace K8JSON { /* * quote string to JSON-friendly format, add '"' */ QString quote (const QString &str); /* * skip blanks and comments * return ptr to first non-blank char or 0 on error * 'maxLen' will be changed */ const uchar *skipBlanks (const uchar *s, int *maxLength); /* * skip one record * the 'record' is either one full field ( field: val) * or one list/object. * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *skipRec (const uchar *s, int *maxLength); /* * parse one simple record (f-v pair) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseSimple (QString &fname, QVariant &fvalue, const uchar *s, int *maxLength); /* * parse one record (list or object) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseRec (QVariant &res, const uchar *s, int *maxLength); #ifdef K8JSON_INCLUDE_GENERATOR bool generate (QByteArray &res, const QVariant &val, int indent=0); #endif } #endif qutim-0.2.0/plugins/histman/src/importhistorypage.h0000644000175000017500000000353711273062067024205 0ustar euroelessareuroelessar/* ImportHistoryPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 IMPORTHISTORYPAGE_H #define IMPORTHISTORYPAGE_H #include #include "historymanagerwindow.h" #include namespace Ui { class ImportHistoryPage; } namespace HistoryManager { class ImportHistoryPage; class ImportHistoryPageHepler : public QThread { Q_OBJECT public: ImportHistoryPageHepler(ImportHistoryPage *parent); virtual void run(); inline void setPath(const QString &path) { m_path = path; } inline int getTime() { return m_time; } private: ImportHistoryPage *m_parent; QString m_path; int m_time; }; class ImportHistoryPage : public QWizardPage { Q_OBJECT Q_DISABLE_COPY(ImportHistoryPage) public: explicit ImportHistoryPage(HistoryManagerWindow *parent = 0); virtual ~ImportHistoryPage(); protected: virtual void changeEvent(QEvent *e); virtual void initializePage(); virtual void cleanupPage(); virtual bool isComplete() const; virtual int nextId() const; public slots: void completed(); private: friend class ImportHistoryPageHepler; ImportHistoryPageHepler *m_helper; HistoryManagerWindow *m_parent; Ui::ImportHistoryPage *m_ui; bool m_completed; }; } #endif // IMPORTHISTORYPAGE_H qutim-0.2.0/plugins/histman/src/clientconfigpage.cpp0000644000175000017500000001403011273062067024236 0ustar euroelessareuroelessar/* ClientConfigPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "clientconfigpage.h" #include "ui_clientconfigpage.h" #include #include #include namespace HistoryManager { ClientConfigPage::ClientConfigPage(HistoryManagerWindow *parent) : QWizardPage(parent), m_ui(new Ui::ClientConfigPage) { m_ui->setupUi(this); m_parent = parent; registerField("historypath", m_ui->filenameEdit); QList codecs = QTextCodec::availableCodecs(); qSort(codecs); QTextCodec *locale_codec = QTextCodec::codecForLocale(); foreach(const QByteArray &codec, codecs) { QString codec_str = QString::fromLatin1(codec); if(codec_str.startsWith("windows")) codec_str[0] = 'W'; else if(codec_str == "System") codec_str = tr("System"); m_ui->codepageBox->addItem(codec_str, codec); } m_ui->codepageBox->setCurrentIndex(m_ui->codepageBox->findData(locale_codec ? locale_codec->name() : "UTF-8")); connect(m_ui->filenameEdit, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged(QString))); setTitle(tr("Configuration")); setCommitPage(true); setButtonText(QWizard::CommitButton, m_parent->nextStr()); } ClientConfigPage::~ClientConfigPage() { delete m_ui; } void ClientConfigPage::initializePage() { m_valid = false; if(m_valid_pixmap.isNull()) { m_valid_pixmap = qutim_sdk_0_2::Icon("apply").pixmap(16); m_invalid_pixmap = qutim_sdk_0_2::Icon("cancel").pixmap(16); } m_ui->validIcon->setPixmap(m_invalid_pixmap); QString subtitle; if(m_parent->getCurrentClient()->chooseFile()) subtitle = tr("Enter path of your %1 profile file."); else subtitle = tr("Enter path of your %1 profile dir."); subtitle.replace("%1", m_parent->getCurrentClient()->name()); if(m_parent->getCurrentClient()->needCharset()) { subtitle += " "; subtitle += tr("If your history encoding differs from the system one, choose the appropriate encoding for history."); m_ui->label_2->show(); m_ui->codepageBox->show(); } else { m_ui->label_2->hide(); m_ui->codepageBox->hide(); } QString client_specific = m_parent->getCurrentClient()->additionalInfo(); if(!client_specific.isEmpty()) { subtitle += " "; subtitle += client_specific; } setSubTitle(subtitle); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+qutim_sdk_0_2::SystemsCity::ProfileName(), "hmsettings"); settings.beginGroup("importpath"); m_ui->filenameEdit->setText(settings.value(m_parent->getCurrentClient()->name()).toString()); settings.endGroup(); settings.beginGroup("charset"); m_ui->codepageBox->setCurrentIndex(m_ui->codepageBox->findData(settings.value(m_parent->getCurrentClient()->name(), "System"))); settings.endGroup(); onTextChanged(m_ui->filenameEdit->text()); m_config_list = m_parent->getCurrentClient()->config(); for(int i = 0; i < m_config_list.size(); i++) { m_ui->formLayout->setWidget(i + 2, QFormLayout::LabelRole, m_config_list[i].first); m_ui->formLayout->setWidget(i + 2, QFormLayout::FieldRole, m_config_list[i].second); } } void ClientConfigPage::cleanupPage() { m_valid = false; foreach(ConfigWidget config, m_config_list) { delete config.first; delete config.second; } m_config_list.clear(); } bool ClientConfigPage::validatePage() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+qutim_sdk_0_2::SystemsCity::ProfileName(), "hmsettings"); settings.beginGroup("importpath"); settings.setValue(m_parent->getCurrentClient()->name(), m_ui->filenameEdit->text()); settings.endGroup(); QByteArray charset = m_ui->codepageBox->itemData(m_ui->codepageBox->currentIndex()).toByteArray(); settings.beginGroup("charset"); settings.setValue(m_parent->getCurrentClient()->name(), charset); settings.endGroup(); m_parent->setCharset(charset); m_parent->getCurrentClient()->useConfig(); return true; } bool ClientConfigPage::isComplete() const { return m_valid; } int ClientConfigPage::nextId() const { return HistoryManagerWindow::ImportHistory; } QString ClientConfigPage::getAppropriateFilePath(const QString &filename_) { if(filename_.startsWith("~/")) { QString filename = QDir::homePath(); filename += QDir::separator(); filename += filename_.mid(2); return filename; } else return filename_; } QString ClientConfigPage::getAppropriatePath(const QString &path_) { QString path = getAppropriateFilePath(path_); path.replace("\\", "/"); while(!path.isEmpty() && !QFileInfo(path).isDir()) { int size = path.lastIndexOf("/"); path.truncate(size); } return path.isEmpty() ? QDir::homePath() : path; } void ClientConfigPage::on_browseButton_clicked() { QString path; if(m_parent->getCurrentClient()->chooseFile()) path = QFileDialog::getOpenFileName(this, tr("Select path"), getAppropriatePath(m_ui->filenameEdit->text())); else path = QFileDialog::getExistingDirectory(this, tr("Select path"), getAppropriatePath(m_ui->filenameEdit->text())); if (!path.isEmpty()) m_ui->filenameEdit->setText(path); } void ClientConfigPage::onTextChanged(const QString &filename) { m_valid = m_parent->getCurrentClient()->validate(getAppropriateFilePath(filename)); m_ui->validIcon->setPixmap(m_valid ? m_valid_pixmap : m_invalid_pixmap); emit completeChanged(); } void ClientConfigPage::changeEvent(QEvent *e) { QWizardPage::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } } qutim-0.2.0/plugins/histman/src/historymanagerwindow.cpp0000644000175000017500000001706411273062067025233 0ustar euroelessareuroelessar/* HistoryManagerWindow Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "historymanagerwindow.h" #include "chooseclientpage.h" #include "clientconfigpage.h" #include "importhistorypage.h" #include "dumphistorypage.h" #include "chooseordumppage.h" #include #include #include #include namespace HistoryManager { int inline compare_datetime_helper(const QDateTime &dt1, const QDateTime &dt2) { QDateTime dtu1 = dt1.toUTC(); QDateTime dtu2 = dt2.toUTC(); QDate d1 = dtu1.date(); QDate d2 = dtu2.date(); if(d1 == d2) return dtu2.time().secsTo(dtu1.time()); else return d2.daysTo(d1); } bool compare_message_helper(const Message &msg1, const Message &msg2) { int cmp_d = compare_datetime_helper(msg1.time, msg2.time); if(!cmp_d) { int cmp_m = msg1.text.compare(msg2.text); if(!cmp_m) return msg1.in && !msg2.in; else return cmp_m < 0; } else return cmp_d < 0; } HistoryManagerWindow::HistoryManagerWindow(QWidget *parent) : QWizard(parent) { m_protocol = 0; m_account = 0; m_contact = 0; m_current_client = 0; m_message_num = 0; m_qutim = new qutim(); setPixmap(WatermarkPixmap, QPixmap(":/pictures/wizard.png")); #ifndef Q_WS_MAC setWizardStyle(ModernStyle); #endif setWindowTitle(tr("History manager")); setWindowIcon(qutim_sdk_0_2::Icon("history")); setPage(ChooseClient, new ChooseClientPage(this)); setPage(ConfigClient, new ClientConfigPage(this)); setPage(ImportHistory, new ImportHistoryPage(this)); setPage(ChooseOrDump, new ChooseOrDumpPage(this)); setPage(ExportHistory, new DumpHistoryPage(this)); // qutim_sdk_0_2::SystemsCity::PluginSystem()->centerizeWidget(this); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); m_dump = tr("&Dump"); m_is_dumping = false; } HistoryManagerWindow::~HistoryManagerWindow() { } void HistoryManagerWindow::appendMessage(const Message &message) { m_is_dumping = false; Q_ASSERT(m_contact); QDate date = message.time.date(); qint64 month_id = date.year() * 100 + date.month(); Month &month = m_contact->operator [](month_id); int position = qLowerBound(month.begin(), month.end(), message, compare_message_helper) - month.begin(); if(month.size() != position && month[position].time == message.time && month[position].in == message.in && month[position].text == message.text) return; m_message_num++; month.insert(position, message); } void HistoryManagerWindow::setProtocol(const QString &protocol) { m_is_dumping = false; m_protocol = &m_protocols.operator [](protocol); } void HistoryManagerWindow::setAccount(const QString &account) { m_is_dumping = false; Q_ASSERT(m_protocol); m_account = &m_protocol->operator [](account); } void HistoryManagerWindow::setContact(const QString &contact) { m_is_dumping = false; Q_ASSERT(m_account); m_contact = &m_account->operator [](contact); } void HistoryManagerWindow::setMaxValue(int max) { if(m_is_dumping) emit saveMaxValueChanged(max); else emit maxValueChanged(max); } void HistoryManagerWindow::setValue(int value) { if(m_is_dumping) emit saveValueChanged(value); else emit valueChanged(value); } ConfigWidget HistoryManagerWindow::createAccountWidget(const QString &protocol) { QLabel *label = new QLabel; QString html = qutim_sdk_0_2::SystemsCity::IconManager()->getIconPath(protocol.toLower(), qutim_sdk_0_2::IconInfo::Protocol); if(html.isEmpty()) html = protocol; else { QString tmp = Qt::escape(protocol); tmp += " "; html = tmp; } label->setText(html); QComboBox *combo = new QComboBox; combo->setEditable(true); QList accounts = qutim_sdk_0_2::SystemsCity::PluginSystem()->getItemChildren(); foreach(const qutim_sdk_0_2::TreeModelItem &account, accounts) { if(account.m_protocol_name == protocol) combo->addItem(account.m_account_name, account.m_account_name); } return ConfigWidget(label, combo); } QString quoteByFormat(const QString &text, char format) { if(format == 'j') return qutim::quote(text); else if(format == 'b') return QLatin1String(text.toUtf8().toHex()); return text; } void HistoryManagerWindow::saveMessages(char format) { if(format != 'b' && format != 'j') return; int total_count = 0; int num = 0; foreach(const Protocol &protocol, m_protocols) foreach(const Account &account, protocol) foreach(const Contact &contact, account) total_count += contact.size(); emit saveMaxValueChanged(total_count); QString profile_path = qutim_sdk_0_2::SystemsCity::PluginSystem()->getProfilePath(); QDir dir(profile_path + QDir::separator() + "history"); if(!dir.exists()) QDir(profile_path).mkpath(profile_path); QHash::const_iterator protocol = m_protocols.constBegin(); for(; protocol != m_protocols.constEnd(); protocol++) { QHash::const_iterator account = protocol.value().constBegin(); for(; account != protocol.value().constEnd(); account++) { QString account_path = protocol.key(); account_path += "."; account_path += quoteByFormat(account.key(), format); if(!dir.exists(account_path)) dir.mkdir(account_path); QDir account_dir = dir.filePath(account_path); QHash::const_iterator contact = account.value().constBegin(); for(; contact != account.value().constEnd(); contact++) { QMap::const_iterator month = contact.value().constBegin(); for(; month != contact.value().constEnd(); month++) { emit saveValueChanged(++num); QString filename = quoteByFormat(contact.key(), format); filename += "."; filename += QString::number(month.key()); if(format == 'j') filename += ".json"; else filename += ".log"; QFile file(account_dir.filePath(filename)); if(format == 'j') { if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) continue; file.write("[\n"); bool first = true; foreach(const Message &message, month.value()) { if(first) first = false; else file.write(",\n"); file.write(" {\n \"datetime\": \""); file.write(message.time.toString(Qt::ISODate).toLatin1()); file.write("\",\n \"type\": "); file.write(QString::number(message.type).toLatin1()); file.write(",\n \"in\": "); file.write(message.in ? "true" : "false"); file.write(",\n \"text\": "); file.write(K8JSON::quote(message.text).toUtf8()); file.write("\n }"); } file.write("\n]"); } else if(format == 'b') { if(!file.open(QIODevice::WriteOnly)) continue; QDataStream out(&file); foreach(const Message &msg, month.value()) out << msg.time << msg.type << msg.in << msg.text; } } } } } } void HistoryManagerWindow::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: setWindowTitle(tr("History manager")); break; default: break; } } } qutim-0.2.0/plugins/histman/src/chooseclientpage.ui0000644000175000017500000000104311273062067024104 0ustar euroelessareuroelessar ChooseClientPage 0 0 400 300 WizardPage qutim-0.2.0/plugins/histman/src/dumphistorypage.h0000644000175000017500000000352411273062067023634 0ustar euroelessareuroelessar/* DumpHistoryPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 DUMPHISTORYPAGE_H #define DUMPHISTORYPAGE_H #include #include #include "historymanagerwindow.h" namespace Ui { class DumpHistoryPage; } namespace HistoryManager { class DumpHistoryPage; class DumpHistoryPageHelper : public QThread { public: DumpHistoryPageHelper(DumpHistoryPage *parent); virtual void run(); private: DumpHistoryPage *m_parent; }; class DumpHistoryPage : public QWizardPage { Q_OBJECT Q_DISABLE_COPY(DumpHistoryPage) public: enum State { PreInit, LoadingHistory, SavingHistory, Finished }; explicit DumpHistoryPage(HistoryManagerWindow *parent = 0); virtual ~DumpHistoryPage(); protected: virtual void changeEvent(QEvent *e); virtual void initializePage(); virtual void cleanupPage(); virtual bool isComplete() const; virtual bool validatePage(); virtual int nextId() const; protected slots: void completed(); private: Ui::DumpHistoryPage *m_ui; HistoryManagerWindow *m_parent; State m_state; char m_format; friend class DumpHistoryPageHelper; DumpHistoryPageHelper *m_helper; QList m_clients_list; }; } #endif // DUMPHISTORYPAGE_H qutim-0.2.0/plugins/histman/src/chooseclientpage.cpp0000644000175000017500000000753511273062067024265 0ustar euroelessareuroelessar/* ChooseClientPage Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "chooseclientpage.h" #include "ui_chooseclientpage.h" #include "clients/qip.h" #include "clients/qutim.h" #include "clients/kopete.h" #include "clients/pidgin.h" #include "clients/sim.h" // #include "clients/jimm.h" #include "clients/qippda.h" #include "clients/qipinfium.h" #include "clients/licq.h" #include "clients/andrq.h" #include "clients/psi.h" #include "clients/gajim.h" #include "clients/miranda.h" #include namespace HistoryManager { ChooseClientPage::ChooseClientPage(HistoryManagerWindow *parent) : QWizardPage(parent), m_ui(new Ui::ChooseClientPage) { m_ui->setupUi(this); m_parent = parent; setTitle(tr("Client")); setSubTitle(tr("Choose client which history you want to import to qutIM.")); Q_REGISTER_EVENT(event_imports, EventImporters); qutim_sdk_0_2::Event(event_imports, 1, &m_clients_list).send(); // ui.clientBox->addItem(Icon("jimm", IconInfo::Client), "Jimm", (qptrdiff)new jimm()); m_clients_list << m_parent->getQutIM() << new kopete << new qip << new pidgin << new qipinfium << new andrq << new pidgin << new sim << new qippda << new licq << new psi << new gajim << new miranda; QMap clients; foreach(HistoryImporter *client, m_clients_list) clients.insert(client->name().toLower(), client); foreach(HistoryImporter *client, clients) { client->setDataBase(m_parent); QListWidgetItem *item = new QListWidgetItem(client->icon(), client->name(), m_ui->listWidget); item->setData(Qt::UserRole, (qptrdiff)client); } connect(m_ui->listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(clientChanged(QListWidgetItem*,QListWidgetItem*))); // connect(m_ui->checkBox, SIGNAL(clicked()), this, SLOT(clientChanged())); // m_ui->checkBox->setDisabled(true); } ChooseClientPage::~ChooseClientPage() { delete m_ui; qDeleteAll(m_clients_list); m_clients_list.clear(); } void ChooseClientPage::initializePage() { m_parent->setCurrentClient(0); m_ui->listWidget->setCurrentIndex(QModelIndex()); // bool first = m_parent->getMessageNum() < 1; // m_ui->checkBox->setEnabled(!first); // m_ui->checkBox->setChecked(!first); // m_ui->listWidget->setEnabled(first); m_valid = false; // !first; } void ChooseClientPage::cleanupPage() { m_valid = false; } bool ChooseClientPage::isComplete() const { return m_valid; } int ChooseClientPage::nextId() const { if(m_parent->getCurrentClient()) return HistoryManagerWindow::ConfigClient; else return HistoryManagerWindow::ExportHistory; } void ChooseClientPage::clientChanged(QListWidgetItem *current, QListWidgetItem *) { if(/*m_ui->checkBox->isChecked() || */!current) { m_valid = false; //m_ui->checkBox->isEnabled() && m_ui->checkBox->isChecked(); m_parent->setCurrentClient(0); } else { m_parent->setCurrentClient((HistoryImporter *)current->data(Qt::UserRole).value()); m_valid = true; } emit completeChanged(); } void ChooseClientPage::changeEvent(QEvent *e) { QWizardPage::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } } qutim-0.2.0/plugins/histman/src/clientconfigpage.ui0000644000175000017500000000263111273062067024075 0ustar euroelessareuroelessar ClientConfigPage 0 0 496 300 WizardPage Path to profile: ... Encoding: qutim-0.2.0/plugins/histman/src/k8json.cpp0000644000175000017500000005607211273062067022165 0ustar euroelessareuroelessar/* K8JSON Copyright (c) 2009 by Ketmar // Avalon Group *************************************************************************** * * * 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. * * * *************************************************************************** */ #ifdef K8JSON_INCLUDE_GENERATOR # include #endif #include "k8json.h" namespace K8JSON { static const quint8 utf8Length[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x00-0x0f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x10-0x1f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x20-0x2f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x30-0x3f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x40-0x4f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x50-0x5f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x60-0x6f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x70-0x7f 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0x80-0x8f 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0x90-0x9f 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0xa0-0xaf 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, //0xb0-0xbf 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xc0-0xcf c0-c1: overlong encoding: start of a 2-byte sequence, but code point <= 127 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xd0-0xdf 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, //0xe0-0xef 4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,8 //0xf0-0xff }; QString quote (const QString &str) { int len = str.length(), c; QString res('"'); res.reserve(len+128); for (int f = 0; f < len; f++) { QChar ch(str[f]); ushort uc = ch.unicode(); if (uc < 32) { // control char switch (uc) { case '\b': res += "\\b"; break; case '\f': res += "\\f"; break; case '\n': res += "\\n"; break; case '\r': res += "\\r"; break; case '\t': res += "\\t"; break; default: res += "\\u"; for (c = 4; c > 0; c--) { ushort n = (uc>>12)&0x0f; n += '0'+(n>9?7:0); res += (uchar)n; } break; } } else { // normal char switch (uc) { case '"': res += "\\\""; break; case '\\': res += "\\\\"; break; default: res += ch; break; } } } res += '"'; return res; } /* * skip blanks and comments * return ptr to first non-blank char or 0 on error * 'maxLen' will be changed */ const uchar *skipBlanks (const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 0) return 0; while (maxLen > 0) { // skip blanks uchar ch = *s++; maxLen--; if (ch <= ' ') continue; // skip comments if (ch == '/') { if (maxLen < 2) return 0; switch (*s) { case '/': while (maxLen > 0) { s++; maxLen--; if (s[-1] == '\n') break; if (maxLen < 1) return 0; } break; case '*': s++; maxLen--; // skip '*' while (maxLen > 0) { s++; maxLen--; if (s[-1] == '*' && s[0] == '/') { s++; maxLen--; // skip '/' break; } if (maxLen < 2) return 0; } break; default: return 0; // error } continue; } // it must be a token s--; maxLen++; break; } // done *maxLength = maxLen; return s; } //FIXME: table? static inline bool isValidIdChar (const uchar ch) { return ( ch == '$' || ch == '_' || ch >= 128 || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') ); } /* * skip one record * the 'record' is either one full field ( field: val) * or one list/object. * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *skipRec (const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 0) return 0; int fieldNameSeen = 0; while (maxLen > 0) { // skip blanks if (!(s = skipBlanks(s, &maxLen))) return 0; if (!maxLen) break; uchar qch, ch = *s++; maxLen--; // fieldNameSeen<1: no field name was seen // fieldNameSeen=1: waiting for ':' // fieldNameSeen=2: field name was seen, ':' was seen too, waiting for value // fieldNameSeen=3: everything was seen, waiting for terminator if (ch == ':') { if (fieldNameSeen != 1) return 0; // wtf? fieldNameSeen++; continue; } // it must be a token, skip it bool again = false; switch (ch) { case '{': case '[': if (fieldNameSeen == 1) return 0; // waiting for delimiter; error fieldNameSeen = 3; // recursive skip qch = (ch=='{' ? '}' : ']'); // end char for (;;) { if (!(s = skipRec(s, &maxLen))) return 0; if (maxLen < 1) return 0; // no closing char ch = *s++; maxLen--; if (ch == ',') continue; // skip next field/value pair if (ch == qch) break; // end of the list or object return 0; // error! } break; case ']': case '}': case ',': // terminator if (fieldNameSeen != 3) return 0; // incomplete field s--; maxLen++; // back to this char break; case '"': case '\x27': // string if (fieldNameSeen == 1 || fieldNameSeen > 2) return 0; // no delimiter fieldNameSeen++; qch = ch; while (*s && maxLen > 0) { ch = *s++; maxLen--; if (ch == qch) { s--; maxLen++; break; } if (ch != '\\') continue; if (maxLen < 2) return 0; // char and quote ch = *s++; maxLen--; switch (ch) { case 'u': if (maxLen < 5) return 0; if (s[0] == qch || s[0] == '\\' || s[1] == qch || s[1] == '\\') return 0; s += 2; maxLen -= 2; // fallthru case 'x': if (maxLen < 3) return 0; if (s[0] == qch || s[0] == '\\' || s[1] == qch || s[1] == '\\') return 0; s += 2; maxLen -= 2; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': if (maxLen < 4) return 0; if (s[0] == qch || s[0] == '\\' || s[1] == qch || s[1] == '\\' || s[2] == qch || s[2] == '\\') return 0; s += 3; maxLen -= 3; break; default: ; // escaped char already skiped } } if (maxLen < 1 || *s != qch) return 0; // error s++; maxLen--; // skip quote again = true; break; default: // we can check for punctuation here, but i'm too lazy to do it if (fieldNameSeen == 1 || fieldNameSeen > 2) return 0; // no delimiter fieldNameSeen++; if (isValidIdChar(ch)) { // good token, skip it again = true; // just a token, skip it and go on // check for valid utf8? while (*s && maxLen > 0) { ch = *s++; maxLen--; if (ch != '.' && !isValidIdChar(ch)) { s--; maxLen++; break; } } } else return 0; // error } if (!again) break; } if (fieldNameSeen != 3) return 0; // skip blanks if (!(s = skipBlanks(s, &maxLen))) return 0; // done *maxLength = maxLen; return s; } /* * parse json-quoted string. a little relaxed parsing, it allows "'"-quoted strings, * whereas json standard does not. also \x and \nnn are allowed. * return position after the string or 0 * 's' should point to the quote char on entry */ static const uchar *parseString (QString &str, const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 2) return 0; uchar ch = 0, qch = *s++; maxLen--; if (qch != '"' && qch != '\x27') return 0; // calc string length and check string for correctness int strLen = 0, tmpLen = maxLen; const uchar *tmpS = s; while (tmpLen > 0) { ch = *tmpS++; tmpLen--; strLen++; if (ch == qch) break; if (ch != '\\') { // ascii or utf-8 quint8 t = utf8Length[ch]; if (t&0x08) return 0; // invalid utf-8 sequence if (t) { // utf-8 if (tmpLen < t) return 0; // invalid utf-8 sequence while (--t) { quint8 b = *tmpS++; tmpLen--; if (utf8Length[b] != 9) return 0; // invalid utf-8 sequence } } continue; } // escape sequence ch = *tmpS++; tmpLen--; //!strLen++; if (tmpLen < 2) return 0; int hlen = 0; switch (ch) { case 'u': hlen = 4; case 'x': if (!hlen) hlen = 2; if (tmpLen < hlen+1) return 0; while (hlen-- > 0) { ch = *tmpS++; tmpLen--; if (ch >= 'a') ch -= 32; if (!(ch >= '0' && ch <= '9') && !(ch >= 'A' && ch <= 'F')) return 0; } hlen = 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': // octal char if (tmpLen < 3) return 0; for (hlen = 2; hlen > 0; hlen--) { ch = *tmpS++; tmpLen--; if (ch < '0' || ch > '7') return 0; } break; case '"': case '\x27': ch = 0; break; default: ; // one escaped char; will be checked later } } if (ch != qch) return 0; // no terminating quote // str.reserve(str.length()+strLen+1); ch = 0; //fprintf(stderr, "\n"); while (maxLen > 0) { ch = *s++; maxLen--; //fprintf(stderr, "[%c] %i\n", ch, maxLen); if (ch == qch) break; if (ch != '\\') { // ascii or utf-8 quint8 t = utf8Length[ch]; if (!t) str.append(ch); // ascii else { // utf-8 int u = 0; s--; maxLen++; while (t--) { quint8 b = *s++; maxLen--; u = (u<<6)+(b&0x3f); } if (u > 0x10ffff) u &= 0xffff; if ((u >= 0xd800 && u <= 0xdfff) || // utf16/utf32 surrogates (u >= 0xfdd0 && u <= 0xfdef) || // just for fun (u >= 0xfffe && u <= 0xffff)) continue; // bad unicode, skip it QChar zch(u); str.append(zch); } continue; } ch = *s++; maxLen--; // at least one char left here int uu = 0; int escCLen = 0; switch (ch) { case 'u': // unicode char, 4 hex digits //fprintf(stderr, "escape U\n"); escCLen = 4; // fallthru case 'x': { // ascii char, 2 hex digits if (!escCLen) { //fprintf(stderr, "escape X\n"); escCLen = 2; } //fprintf(stderr, "escape #%i\n", escCLen); while (escCLen-- > 0) { ch = *s++; maxLen--; if (ch >= 'a') ch -= 32; uu = uu*16+ch-'0'; if (ch >= 'A'/* && ch <= 'F'*/) uu -= 7; } //fprintf(stderr, " code: %04x\n", uu); if (uu > 0x10ffff) uu &= 0xffff; if ((uu >= 0xd800 && uu <= 0xdfff) || // utf16/utf32 surrogates (uu >= 0xfdd0 && uu <= 0xfdef) || // just for fun (uu >= 0xfffe && uu <= 0xffff)) uu = -1; // bad unicode, skip it if (uu >= 0) { QChar zch(uu); str.append(zch); } } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': { // octal char //fprintf(stderr, "escape O\n"); s--; maxLen++; uu = 0; for (int f = 3; f > 0; f--) { ch = *s++; maxLen--; uu = uu*8+ch-'0'; } QChar zch(uu); str.append(zch); } break; case '\\': str.append('\\'); break; case '/': str.append('/'); break; case 'b': str.append('\b'); break; case 'f': str.append('\f'); break; case 'n': str.append('\n'); break; case 'r': str.append('\r'); break; case 't': str.append('\t'); break; case '"': case '\x27': str.append(ch); /*ch = 0;*/ break; default: // non-standard! if (ch != '\t' && ch != '\r' && ch != '\n') { //fprintf(stderr, "escape BAD [%c]\n", ch); return 0; // all other chars are BAD } str.append(ch); } } //fprintf(stderr, "[%c] [%c]\n", ch, qch); if (ch != qch) return 0; *maxLength = maxLen; return s; } /* * parse identifier */ static const uchar *parseId (QString &str, const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 1) return 0; uchar ch = 0; // calc string length and check string for correctness int strLen = 0, tmpLen = maxLen; const uchar *tmpS = s; while (tmpLen > 0) { ch = *tmpS++; tmpLen--; if (!isValidIdChar(ch)) { if (!strLen) return 0; break; } strLen++; // ascii or utf-8 quint8 t = utf8Length[ch]; if (t&0x08) return 0; // invalid utf-8 sequence if (t) { // utf-8 if (tmpLen < t) return 0; // invalid utf-8 sequence while (--t) { quint8 b = *tmpS++; tmpLen--; if (utf8Length[b] != 9) return 0; // invalid utf-8 sequence } } continue; } /* str = "true"; while (isValidIdChar(*s)) { s++; (*maxLength)--; } return s; */ // str.reserve(str.length()+strLen+1); ch = 0; while (maxLen > 0) { ch = *s++; maxLen--; if (!isValidIdChar(ch)) { s--; maxLen++; break; } // ascii or utf-8 quint8 t = utf8Length[ch]; if (!t) str.append(ch); // ascii else { // utf-8 int u = 0; s--; maxLen++; while (t--) { quint8 ch = *s++; maxLen--; u = (u<<6)+(ch&0x3f); } if (u > 0x10ffff) u &= 0xffff; if ((u >= 0xd800 && u <= 0xdfff) || // utf16/utf32 surrogates (u >= 0xfdd0 && u <= 0xfdef) || // just for fun (u >= 0xfffe && u <= 0xffff)) continue; // bad unicode, skip it QChar zch(u); str.append(zch); } continue; } *maxLength = maxLen; return s; } /* * parse number */ static const uchar *parseNumber (QVariant &num, const uchar *s, int *maxLength) { if (!s) return 0; int maxLen = *maxLength; if (maxLen < 1) return 0; uchar ch = *s++; maxLen--; // check for negative number bool negative = false, fr = false; if (ch == '-') { if (maxLen < 1) return 0; ch = *s++; maxLen--; negative = true; } if (ch < '0' || ch > '9') return 0; // invalid integer part double fnum = 0.0; // parse integer part while (ch >= '0' && ch <= '9') { ch -= '0'; fnum = fnum*10+ch; if (!maxLen) goto done; ch = *s++; maxLen--; } // check for fractional part if (ch == '.') { // parse fractional part if (maxLen < 1) return 0; ch = *s++; maxLen--; double frac = 0.1; fr = true; if (ch < '0' || ch > '9') return 0; // invalid fractional part while (ch >= '0' && ch <= '9') { ch -= '0'; fnum += frac*ch; if (!maxLen) goto done; frac /= 10; ch = *s++; maxLen--; } } // check for exp part if (ch == 'e' || ch == 'E') { if (maxLen < 1) return 0; // check for exp sign bool expNeg = false; ch = *s++; maxLen--; if (ch == '+' || ch == '-') { if (maxLen < 1) return 0; expNeg = (ch == '-'); ch = *s++; maxLen--; } // check for exp digits if (ch < '0' || ch > '9') return 0; // invalid exp quint32 exp = 0; // 64? %-) while (ch >= '0' && ch <= '9') { exp = exp*10+ch-'0'; if (!maxLen) { s++; maxLen--; break; } ch = *s++; maxLen--; } while (exp--) { if (expNeg) fnum /= 10; else fnum *= 10; } if (expNeg && !fr) { if (fnum > 2147483647.0 || ((qint64)fnum)*1.0 != fnum) fr = true; } } s--; maxLen++; done: if (!fr && fnum > 2147483647.0) fr = true; if (negative) fnum = -fnum; if (fr) num = fnum; else num = (qint32)fnum; *maxLength = maxLen; return s; } static const QString sTrue("true"); static const QString sFalse("false"); static const QString sNull("null"); /* * parse one simple record (f-v pair) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseSimple (QString &fname, QVariant &fvalue, const uchar *s, int *maxLength) { if (!s) return 0; //int maxLen = *maxLength; fname.clear(); fvalue.clear(); if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 1) return 0; uchar ch = *s; // field name if (isValidIdChar(ch)) { // id if (!(s = parseId(fname, s, maxLength))) return 0; } else if (ch == '"' || ch == '\x27') { // string if (!(s = parseString(fname, s, maxLength))) return 0; //if (fname.isEmpty()) return 0; } // ':' if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 2 || *s != ':') return 0; s++; (*maxLength)--; // field value if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 1) return 0; ch = *s; if (ch == '-' || (ch >= '0' && ch <= '9')) { // number if (!(s = parseNumber(fvalue, s, maxLength))) return 0; } else if (isValidIdChar(ch)) { // identifier (true/false/null) QString tmp; //s--; (*maxLength)++; //while (isValidIdChar(*s)) { s++; (*maxLength)--; } //tmp = "true"; if (!(s = parseId(tmp, s, maxLength))) return 0; if (tmp == sTrue) fvalue = true; else if (tmp == sFalse) fvalue = false; else if (tmp != sNull) return 0; // invalid id } else if (ch == '"' || ch == '\x27') { // string QString tmp; if (!(s = parseString(tmp, s, maxLength))) return 0; fvalue = tmp; } else if (ch == '{' || ch == '[') { // object or list if (!(s = parseRec(fvalue, s, maxLength))) return 0; } else return 0; // unknown if (!(s = skipBlanks(s, maxLength))) return 0; return s; } /* * parse one record (list or object) * return ptr to the first non-blank char after the record (or 0) * 'maxLen' will be changed */ const uchar *parseRec (QVariant &res, const uchar *s, int *maxLength) { if (!s) return 0; //int maxLen = *maxLength; res.clear(); if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength < 1) return 0; QString str; QVariant val; // field name or list/object start uchar ch = *s; switch (ch) { case '{': { // object if (*maxLength < 2) return 0; s++; (*maxLength)--; QVariantMap obj; for (;;) { str.clear(); if (!(s = parseSimple(str, val, s, maxLength))) return 0; obj[str] = val; if (*maxLength > 0) { ch = *s++; (*maxLength)--; if (ch == ',') continue; // next field/value pair if (ch == '}') break; // end of the object } // error s = 0; break; } res = obj; return s; } // it will never comes here case '[': { // list if (*maxLength < 2) return 0; s++; (*maxLength)--; QVariantList lst; for (;;) { if (!(s = skipBlanks(s, maxLength))) return 0; if (*maxLength > 0) { // value bool err = false; ch = *s; if (ch == '[' || ch == '{') { // list/object const uchar *tmp = s; if (!(s = parseRec(val, s, maxLength))) { QString st(QByteArray((const char *)tmp, 64)); err = true; } else lst << val; } else if (isValidIdChar(ch)) { // identifier str.clear(); if (!(s = parseId(str, s, maxLength))) { err = true; } else { if (str == sTrue) lst << true; else if (str == sFalse) lst << false; else if (str == sNull) lst << QVariant(); else { err = true; } } } else if (ch == '"' || ch == '\x27') { // string str.clear(); if (!(s = parseString(str, s, maxLength))) { err = true; } else lst << str; } else if (ch == '-' || (ch >= '0' && ch <= '9')) { // number if (!(s = parseNumber(val, s, maxLength))) { err = true; } else lst << val; } else { err = true; } // if (!err) { if ((s = skipBlanks(s, maxLength))) { if (*maxLength > 0) { ch = *s++; (*maxLength)--; if (ch == ',') continue; // next value if (ch == ']') break; // end of the list } } } } // error s = 0; break; } res = lst; return s; } // it will never comes here } if (!(s = parseSimple(str, val, s, maxLength))) return 0; QVariantMap obj; obj[str] = val; res = obj; return s; } #ifdef K8JSON_INCLUDE_GENERATOR bool generate (QByteArray &res, const QVariant &val, int indent) { switch (val.type()) { case QVariant::Invalid: res += "null"; break; case QVariant::Bool: res += (val.toBool() ? "true" : "false"); break; case QVariant::Char: res += quote(QString(val.toChar())).toUtf8(); break; case QVariant::Double: res += QString::number(val.toDouble()).toAscii(); break; //CHECKME: is '.' always '.'? case QVariant::Int: res += QString::number(val.toInt()).toAscii(); break; case QVariant::String: res += quote(val.toString()).toUtf8(); break; case QVariant::UInt: res += QString::number(val.toUInt()).toAscii(); break; case QVariant::ULongLong: res += QString::number(val.toULongLong()).toAscii(); break; case QVariant::Map: { //for (int c = indent; c > 0; c--) res += ' '; res += "{"; indent++; bool comma = false; QVariantMap m(val.toMap()); QVariantMap::const_iterator i; for (i = m.constBegin(); i != m.constEnd(); ++i) { if (comma) res += ",\n"; else { res += '\n'; comma = true; } for (int c = indent; c > 0; c--) res += ' '; res += quote(i.key()).toUtf8(); res += ": "; if (!generate(res, i.value(), indent)) return false; } indent--; if (comma) { res += '\n'; for (int c = indent; c > 0; c--) res += ' '; } res += '}'; indent--; } break; case QVariant::List: { //for (int c = indent; c > 0; c--) res += ' '; res += "["; indent++; bool comma = false; QVariantList m(val.toList()); foreach (const QVariant &v, m) { if (comma) res += ",\n"; else { res += '\n'; comma = true; } for (int c = indent; c > 0; c--) res += ' '; if (!generate(res, v, indent)) return false; } indent--; if (comma) { res += '\n'; for (int c = indent; c > 0; c--) res += ' '; } res += ']'; indent--; } break; case QVariant::StringList: { //for (int c = indent; c > 0; c--) res += ' '; res += "["; indent++; bool comma = false; QStringList m(val.toStringList()); foreach (const QString &v, m) { if (comma) res += ",\n"; else { res += '\n'; comma = true; } for (int c = indent; c > 0; c--) res += ' '; res += quote(v).toUtf8(); } indent--; if (comma) { res += '\n'; for (int c = indent; c > 0; c--) res += ' '; } res += ']'; indent--; } break; default: return false; } return true; } #endif } qutim-0.2.0/plugins/histman/COPYING0000644000175000017500000000037111273062067020500 0ustar euroelessareuroelessarCopyright (c) 2008-2009 by qutim.org team (see file AUTHORS). qutIM history manager plugin source code is licensed under GNU GPL v2 or any later release. Full text of GNU GPLv2 license is included in the archive, you can find it in the ./GPL file. qutim-0.2.0/plugins/histman/histman.pro0000644000175000017500000000252711273062067021637 0ustar euroelessareuroelessarTEMPLATE = lib CONFIG += qt \ plugin INCLUDEPATH += ../../include /usr/include TARGET = histman QT += core \ gui \ xml \ sql HEADERS += clients/miranda.h \ clients/licq.h \ clients/andrq.h \ clients/qipinfium.h \ clients/qippda.h \ clients/sim.h \ clients/pidgin.h \ clients/kopete.h \ clients/qip.h \ clients/qutim.h \ src/historymanagerplugin.h \ src/k8json.h \ include/qutim/historymanager.h \ src/historymanagerwindow.h \ src/chooseclientpage.h \ src/clientconfigpage.h \ src/importhistorypage.h \ src/dumphistorypage.h \ src/chooseordumppage.h \ clients/psi.h \ clients/gajim.h SOURCES += clients/miranda.cpp \ clients/licq.cpp \ clients/andrq.cpp \ clients/qipinfium.cpp \ clients/qippda.cpp \ clients/sim.cpp \ clients/pidgin.cpp \ clients/kopete.cpp \ clients/qutim.cpp \ clients/qip.cpp \ src/historymanagerplugin.cpp \ src/k8json.cpp \ src/historymanagerwindow.cpp \ src/chooseclientpage.cpp \ src/clientconfigpage.cpp \ src/importhistorypage.cpp \ src/dumphistorypage.cpp \ src/chooseordumppage.cpp \ clients/psi.cpp \ clients/gajim.cpp FORMS += src/chooseclientpage.ui \ src/clientconfigpage.ui \ src/importhistorypage.ui \ src/dumphistorypage.ui \ src/chooseordumppage.ui qutim-0.2.0/plugins/histman/GPL0000644000175000017500000004313111273062067020013 0ustar euroelessareuroelessar GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qutim-0.2.0/plugins/histman/AUTHORS0000644000175000017500000000023411273062067020513 0ustar euroelessareuroelessarqutIM: cute crossplatform Instant Messenger History manager plugin =========================================== Developers: ----------- Ruslan Nigmatullin qutim-0.2.0/plugins/histman/include/0000755000175000017500000000000011273101056021057 5ustar euroelessareuroelessarqutim-0.2.0/plugins/histman/include/qutim/0000755000175000017500000000000011273101056022216 5ustar euroelessareuroelessarqutim-0.2.0/plugins/histman/include/qutim/historymanager.h0000644000175000017500000000601411273062067025434 0ustar euroelessareuroelessar#ifndef HISTORYMANAGER_H #define HISTORYMANAGER_H #include #include #include #include #include class QWidget; namespace HistoryManager { const char * const EventImporters = "Plugin/HistoryManager/HistoryImporter"; const char * const EventExporters = "Plugin/HistoryManager/HistoryExporter"; struct Message { QDateTime time; QString text; qint8 type; bool in; }; typedef QList Month; typedef QMap Contact; typedef QHash Account; typedef QHash Protocol; typedef QPair ConfigWidget; class DataBaseInterface { protected: virtual ~DataBaseInterface() {} public: virtual void appendMessage(const Message &message) = 0; virtual void setProtocol(const QString &protocol) = 0; virtual void setAccount(const QString &account) = 0; virtual void setContact(const QString &contact) = 0; virtual void setMaxValue(int max) = 0; virtual void setValue(int value) = 0; virtual ConfigWidget createAccountWidget(const QString &protocol) = 0; }; class HistoryImporter { public: virtual ~HistoryImporter() {} inline void setDataBase(DataBaseInterface *data_base) { m_data_base = data_base; } inline void setCharset(const QByteArray &charset) { m_charset = charset; } virtual void loadMessages(const QString &path) = 0; virtual bool validate(const QString &path) = 0; virtual QString name() = 0; virtual QIcon icon() = 0; virtual QList config() { return QList(); } virtual bool useConfig() { return true; } virtual bool needCharset() { return false; } virtual QString additionalInfo() { return QString(); } virtual bool chooseFile() { return false; } protected: inline void appendMessage(const Message &message) { m_data_base->appendMessage(message); } inline void setProtocol(const QString &protocol) { m_data_base->setProtocol(protocol); } inline void setAccount(const QString &account) { m_data_base->setAccount(account); } inline void setContact(const QString &contact) { m_data_base->setContact(contact); } inline void setMaxValue(int max) { m_data_base->setMaxValue(max); } inline void setValue(int value) { m_data_base->setValue(value); } inline ConfigWidget createAccountWidget(const QString &protocol) Q_REQUIRED_RESULT { return m_data_base->createAccountWidget(protocol); } inline QByteArray charset() { return m_charset; } private: friend class DataBaseInterface; DataBaseInterface *m_data_base; QByteArray m_charset; }; class HistoryExporter { public: virtual ~HistoryExporter() {} virtual void writeMessages(const QHash &data) = 0; virtual QString name() = 0; virtual QIcon icon() = 0; private: friend class DataBaseInterface; DataBaseInterface *m_data_base; }; } Q_DECLARE_INTERFACE(HistoryManager::HistoryImporter, "org.qutim.HistoryManager.HistoryImporter") Q_DECLARE_INTERFACE(HistoryManager::HistoryExporter, "org.qutim.HistoryManager.HistoryExporter") #endif // HISTORYMANAGER_H qutim-0.2.0/plugins/histman/main.cpp0000644000175000017500000000247211273062067021101 0ustar euroelessareuroelessar/* * main.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "qimhm.h" /*#include "dbh.h" #include "clients/qip.h" #include "clients/qutim.h"*/ #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QString lang = QLocale::system().name().toLower(); //lang.truncate(2); QString tran="translation/qimhm_" + lang; QTranslator qtTranslator; qtTranslator.load(tran); a.installTranslator(&qtTranslator); //dbh *data = new dbh("/home/euroelessar/dev/qIMhm/test/history/"); //qip(data).load("/mnt/sdb1/exe/qip_old/Users/3485140/History/"); //qutim(data).load("/home/euroelessar/.config/qutim/ICQ.3485140/history/"); /* for (int i = 0; i < data->uins.size(); ++i) { qWarning("================================================"); qWarning(qPrintable("uin: "+data->uins[i].uin)); for (int j = 0; j < data->uins[i].msgs.size(); ++j) { qWarning(qPrintable(data->uins[i].msgs[j].getXmlString())); } }*/ //data->save(); HistoryManagerWidget w; w.show(); return a.exec(); } qutim-0.2.0/plugins/histman/clients/0000755000175000017500000000000011273101056021075 5ustar euroelessareuroelessarqutim-0.2.0/plugins/histman/clients/licq.h0000644000175000017500000000131011273062067022201 0ustar euroelessareuroelessar/* * licq.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 LICQ_H_ #define LICQ_H_ #include "include/qutim/historymanager.h" namespace HistoryManager { class licq : public HistoryImporter { public: licq(); virtual ~licq(); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); virtual bool needCharset() { return true; } }; } #endif /*LICQ_H_*/ qutim-0.2.0/plugins/histman/clients/sim.cpp0000644000175000017500000001346511273062067022412 0ustar euroelessareuroelessar/* * sim.cpp * * Copyright (C) 2008-2009 Nigmatullin Ruslan * * 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 "sim.h" #include #include #include #include #include #include namespace HistoryManager { // Message flags: const unsigned MESSAGE_RECEIVED = 0x00000001; const unsigned MESSAGE_RICHTEXT = 0x00000002; const unsigned MESSAGE_SECURE = 0x00000004; const unsigned MESSAGE_URGENT = 0x00000008; const unsigned MESSAGE_LIST = 0x00000010; const unsigned MESSAGE_NOVIEW = 0x00000020; const unsigned MESSAGE_SAVEMASK = 0x0000FFFF; const unsigned MESSAGE_TRANSLIT = 0x00010000; const unsigned MESSAGE_1ST_PART = 0x00020000; const unsigned MESSAGE_NOHISTORY = 0x00040000; const unsigned MESSAGE_LAST = 0x00080000; const unsigned MESSAGE_MULTIPLY = 0x00100000; const unsigned MESSAGE_FORWARD = 0x00200000; const unsigned MESSAGE_INSERT = 0x00400000; const unsigned MESSAGE_OPEN = 0x00800000; const unsigned MESSAGE_NORAISE = 0x01000000; const unsigned MESSAGE_TEMP = 0x10000000; sim::sim() { } sim::~sim() { } void sim::loadMessages(const QString &path) { // ~/.kde4/share/apps/sim/CoolProfile/history/ICQ.my_uin.its_uin QDir dir = path; static QStringList filters = QStringList() << "Jabber.*" << "ICQ.*" << "AIM.*" << "Yahoo.*" << "MSN.*"; QStringList profiles = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); int num = 0; foreach(const QString &profile_name, profiles) { QString profile_path = dir.filePath(profile_name); profile_path += QDir::separator(); profile_path += "history"; QDir profile_dir = profile_path; QStringList files = profile_dir.entryList(filters, QDir::Files|QDir::NoDotAndDotDot); num += files.size(); } setMaxValue(num); num = 0; foreach(const QString &profile_name, profiles) { QString profile_path = dir.filePath(profile_name); profile_path += QDir::separator(); profile_path += "history"; QDir profile_dir = profile_path; QStringList files = profile_dir.entryList(filters, QDir::Files|QDir::NoDotAndDotDot, QDir::Name); foreach(const QString &contact_path, files) { QString protocol = contact_path.section(".", 0, 0); QString acccount; QString contact; if(protocol == "ICQ" || protocol == "AIM") { acccount = contact_path.section(".", 1, 1); contact = contact_path.section(".", 2, 2); } else { QString tmp_string = contact_path.section(".", 1); if(tmp_string.endsWith(".removed")) tmp_string.chop(8); acccount = tmp_string.section("+", 0, 0); contact = tmp_string.section("+", 1); } setProtocol(protocol); setAccount(acccount); setContact(contact); setValue(++num); QFile file(profile_dir.filePath(contact_path)); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream inc(&file); inc.setAutoDetectUnicode(false); inc.setCodec("Latin-1"); //inc.setCodec(defCharset); QHash message_data; QString type; QStringList lines = inc.readAll().remove('\r').split("\n"); QString line; QTextCodec* icqCodec = QTextCodec::codecForName(charset()); QTextCodec* defCodec = QTextCodec::codecForName(charset()); QString icqCharset=""; //msg=icqCodec->makeDecoder()->toUnicode(QTextCodec::codecForName(defCharset)->makeEncoder()->fromUnicode(msg)); for(int i=0;i 0; if(message_data.contains("Text")) message.text = QString::fromUtf8(message_data.value("Text").toLatin1()); else message.text = ((type=="Message")?defCodec:icqCodec)->toUnicode(message_data.value("ServerText").toLatin1()); message.text.chop(1); message.text.remove(0, 1); message.text = message.text.remove("\\x0d").replace("\\n", "\n"); if (!(flags & MESSAGE_RICHTEXT)) message.text = Qt::escape(message.text).replace("\n","
"); appendMessage(message); } type=line.mid(1,line.length()-2); message_data.clear(); } else message_data.insert(line.section('=',0,0),line.section('=',1)); } } } } } bool sim::validate(const QString &path) { QDir dir = path; static QStringList filters = QStringList() << "Jabber.*" << "ICQ.*" << "AIM.*" << "Yahoo.*" << "MSN.*"; QStringList profiles = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(const QString &profile_name, profiles) { QString profile_path = dir.filePath(profile_name); profile_path += QDir::separator(); profile_path += "history"; QDir profile_dir = profile_path; QStringList files = profile_dir.entryList(filters, QDir::Files|QDir::NoDotAndDotDot); if(!files.isEmpty()) return true; } return false; } QString sim::name() { return "SIM"; } QIcon sim::icon() { return qutim_sdk_0_2::Icon("sim", qutim_sdk_0_2::IconInfo::Client); } } qutim-0.2.0/plugins/histman/clients/kopete.h0000644000175000017500000000153511273062067022551 0ustar euroelessareuroelessar/* * kopete.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 KOPETE_H_ #define KOPETE_H_ #include "include/qutim/historymanager.h" namespace HistoryManager { class kopete : public HistoryImporter { public: kopete(); virtual ~kopete(); bool validate(const QString &kopete_id, const QString &id); QString guessFromList(const QString &kopete_id, const QStringList &list); QString guessID(const QString &kopete_id); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); }; } #endif /*KOPETE_H_*/ qutim-0.2.0/plugins/histman/clients/kopete.cpp0000644000175000017500000001176011273062067023105 0ustar euroelessareuroelessar/* * kopete.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "kopete.h" #include #include #include using namespace qutim_sdk_0_2; namespace HistoryManager { kopete::kopete() { } kopete::~kopete() { } bool kopete::validate(const QString &kopete_id, const QString &id) { if(kopete_id.size() == id.size()) { // FIXME: It's too slow static const QRegExp regexp("[./~?*]"); QString tmp_id = id; if(tmp_id.replace(regexp, "-") == kopete_id) return true; } return false; } QString kopete::guessFromList(const QString &kopete_id, const QStringList &list) { for(int i = 0; i < list.size(); i++) { if(validate(kopete_id, list[i])) return list[i]; } return QString(); } inline void kopete_id_helper(QHash &hash, const QString &id) { static const QRegExp regexp("[./~?*]"); if(id.contains(regexp)) { QString tmp_id = id; hash.insert(tmp_id.replace(regexp, "-"), id); } } QString kopete::guessID(const QString &kopete_id) { static PluginSystemInterface *ps = SystemsCity::PluginSystem(); static QHash hash; if(hash.isEmpty()) { QList accounts = ps->getItemChildren(); foreach(const TreeModelItem &account, accounts) { kopete_id_helper(hash, account.m_protocol_name); kopete_id_helper(hash, account.m_account_name); QList groups = ps->getItemChildren(account); foreach(const TreeModelItem &group, groups) { QList contacts = ps->getItemChildren(group); foreach(const TreeModelItem &contact, contacts) kopete_id_helper(hash, contact.m_item_name); } } } return hash.value(kopete_id, kopete_id); } void kopete::loadMessages(const QString &path) { QDir dir = path; if(!dir.cd("logs")) return; int num=0; QStringList protocol_dirs = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(QString protocol, protocol_dirs) { QDir protocol_dir(dir.filePath(protocol)); QStringList account_dirs = protocol_dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(QString account, account_dirs) { QDir dir(protocol_dir.filePath(account)); QStringList files = dir.entryList(QDir::Files|QDir::NoDotAndDotDot); num+=files.size(); } } setMaxValue(num); num = 0; foreach(QString protocol_name, protocol_dirs) { QDir protocol_dir(dir.filePath(protocol_name)); QStringList account_dirs = protocol_dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); QString protocol = protocol_name.remove("Protocol"); setProtocol(guessID(protocol)); foreach(QString account, account_dirs) { QFileInfoList files = QDir(protocol_dir.filePath(account)).entryInfoList(QDir::Files|QDir::NoDotAndDotDot); setAccount(guessID(account)); for(int i=0;i"); message.in = msg.attribute("in") == "1"; appendMessage(message); msg = msg.nextSiblingElement("msg"); } } } } } } } } // ~/.kde/share/apps/kopete/ bool kopete::validate(const QString &path) { QDir dir = path; if(!dir.cd("logs")) return false; QStringList protocol_dirs = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(const QString &protocol, protocol_dirs) { QDir protocol_dir = dir.filePath(protocol); QStringList account_dirs = protocol_dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); static QStringList filter = QStringList() << "*.xml"; foreach(const QString &account, account_dirs) { if(!QDir(protocol_dir.filePath(account)).entryList(filter, QDir::Files).isEmpty()) return true; } } return false; } QString kopete::name() { return "Kopete"; } QIcon kopete::icon() { return Icon("kopete", IconInfo::Client); } } qutim-0.2.0/plugins/histman/clients/qutim.cpp0000644000175000017500000002105111273062067022747 0ustar euroelessareuroelessar/* qutIM Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "qutim.h" #include "QDir" #include #include #include #include namespace HistoryManager { qutim::qutim() { } qutim::~qutim() { } bool qutim::guessXml(const QString &path, QFileInfoList &files, int &num) { QDir dir = path; if(!dir.cd("history")) return false; files = dir.entryInfoList(QStringList() << "*.*.xml", QDir::Readable | QDir::Files); num += files.size(); return !files.isEmpty(); } bool qutim::guessBin(const QString &path, QFileInfoList &files, int &num) { QDir dir = path; if(!dir.cd("history")) return false; static const QStringList filter = QStringList() << "*.*.log"; QFileInfoList accounts = dir.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot); foreach(const QFileInfo &info, accounts) { QStringList logs = QDir(info.absoluteFilePath()).entryList(filter, QDir::Files); if(!logs.isEmpty()) { num += logs.size(); files << info; } } return !files.isEmpty(); } bool qutim::guessJson(const QString &path, QFileInfoList &files, int &num) { QDir dir = path; if(!dir.cd("history")) return false; static const QStringList filter = QStringList() << "*.*.json"; QFileInfoList accounts = dir.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot); foreach(const QFileInfo &info, accounts) { QStringList logs = QDir(info.absoluteFilePath()).entryList(filter, QDir::Files); if(!logs.isEmpty()) { num += logs.size(); files << info; } } return !files.isEmpty(); } void qutim::loadXml(const QFileInfoList &files) { QDir tmp_dir = files.first().absoluteDir(); tmp_dir.cdUp(); QString account = tmp_dir.dirName().section(".", 1); setProtocol("ICQ"); setAccount(account); for(int i=0;i> msg.time >> msg.type >>msg.in >> msg.text; appendMessage(msg); } } } } } } QString qutim::quote(const QString &str) { const static bool true_chars[128] = {// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 3 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 4 */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 5 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, /* 6 */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 7 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0 }; QString result; result.reserve(str.size() * 5); // the worst variant const QChar *s = str.data(); while(!s->isNull()) { if(s->unicode() < 0xff && true_chars[s->unicode()]) result += *s; else { result += '%'; if(s->unicode() < 0x1000) result += '0'; if(s->unicode() < 0x100) result += '0'; if(s->unicode() < 0x10) result += '0'; result += QString::number(s->unicode(), 16); } s++; } return result; } QString qutim::unquote(const QString &str) { QString result; bool ok = false; result.reserve(str.size()); // the worst variant const QChar *s = str.data(); while(!s->isNull()) { if(s->unicode() == L'%') { result += QChar(QString(++s, 4).toUShort(&ok, 16)); s += 3; } else result += *s; s++; } return result; } void qutim::loadJson(const QFileInfoList &acc_files) { foreach(const QFileInfo &info, acc_files) { QString protocol = info.fileName().section(".",0,0); QString account = unquote(info.fileName().section(".",1)); setProtocol(protocol); setAccount(account); QDir dir(info.absoluteFilePath()); QFileInfoList files = dir.entryInfoList(QDir::Readable | QDir::Files | QDir::NoDotAndDotDot,QDir::Name); for(int i=0;i lists(3); if(guessXml(path, lists[0], num)) types |= Xml; if(guessBin(path, lists[1], num)) types |= Bin; if(guessJson(path, lists[2], num)) types |= Json; setMaxValue(num); m_value = 0; if(types & Xml) loadXml(lists[0]); if(types & Bin) loadBin(lists[1]); if(types & Json) loadJson(lists[2]); } bool qutim::validate(const QString &path) { int num = 0; Types types; QVector lists(3); return guessXml(path, lists[0], num) || guessBin(path, lists[1], num) || guessJson(path, lists[2], num); } QString qutim::name() { return "qutIM"; } QIcon qutim::icon() { return qutim_sdk_0_2::Icon("qutim", qutim_sdk_0_2::IconInfo::Client); } QString qutimExporter::name() { return "qutIM (Json)"; } void qutimExporter::writeMessages(const QHash &data) { } } qutim-0.2.0/plugins/histman/clients/miranda.h0000644000175000017500000001375711273062067022706 0ustar euroelessareuroelessar/* Miranda Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 MIRANDA_H_ #define MIRANDA_H_ #include "include/qutim/historymanager.h" namespace HistoryManager { namespace Miranda { typedef quint32 DWORD; typedef quint16 WORD; typedef quint8 BYTE; typedef quint16 WCHAR; typedef qint8 TCHAR; // TODO: Validate database by signatures static const char *DBHEADER_SIGNATURE = "Miranda ICQ DB"; struct DBHeader { BYTE signature[16]; // 'Miranda ICQ DB',0,26 DWORD version; //as 4 bytes, ie 1.2.3.10=0x0102030a //this version is 0x00000700 DWORD ofsFileEnd; //offset of the end of the database - place to write //new structures DWORD slackSpace; //a counter of the number of bytes that have been //wasted so far due to deleting structures and/or //re-making them at the end. We should compact when //this gets above a threshold DWORD contactCount; //number of contacts in the chain,excluding the user DWORD ofsFirstContact; //offset to first struct DBContact in the chain DWORD ofsUser; //offset to struct DBContact representing the user DWORD ofsFirstModuleName; //offset to first struct DBModuleName in the chain }; static const DWORD DBCONTACT_SIGNATURE = 0x43DECADEu; struct DBContact { DWORD signature; DWORD ofsNext; //offset to the next contact in the chain. zero if //this is the 'user' contact or the last contact //in the chain DWORD ofsFirstSettings; //offset to the first DBContactSettings in the //chain for this contact. DWORD eventCount; //number of events in the chain for this contact DWORD ofsFirstEvent,ofsLastEvent; //offsets to the first and last DBEvent in //the chain for this contact DWORD ofsFirstUnreadEvent; //offset to the first (chronological) unread event //in the chain, 0 if all are read DWORD timestampFirstUnread; //timestamp of the event at ofsFirstUnreadEvent }; enum DBEF { DBEF_FIRST = 1, //this is the first event in the chain; //internal only: *do not* use this flag DBEF_SENT = 2, //this event was sent by the user. If not set this //event was received. DBEF_READ = 4, //event has been read by the user. It does not need //to be processed any more except for history. DBEF_RTL = 8, //event contains the right-to-left aligned text DBEF_UTF = 16 //event contains a text in utf-8 }; enum EVENTTYPE { EVENTTYPE_MESSAGE = 0, EVENTTYPE_URL = 1, EVENTTYPE_CONTACTS = 2, //v0.1.2.2+ EVENTTYPE_ADDED = 1000, //v0.1.1.0+: these used to be module- EVENTTYPE_AUTHREQUEST = 1001, //specific codes, hence the module- EVENTTYPE_FILE = 1002, //specific limit has been raised to 2000 }; static const DWORD DBEVENT_SIGNATURE = 0x45DECADEu; struct DBEvent { DWORD signature; DWORD ofsPrev,ofsNext; //offset to the previous and next events in the //chain. Chain is sorted chronologically DWORD ofsModuleName; //offset to a DBModuleName struct of the name of //the owner of this event DWORD timestamp; //seconds since 00:00:00 01/01/1970 DWORD flags; //see m_database.h, db/event/add WORD eventType; //module-defined event type DWORD cbBlob; //number of bytes in the blob QByteArray blob; //the blob. module-defined formatting }; static const DWORD DBMODULENAME_SIGNATURE = 0x4DDECADEu; struct DBModuleName { DWORD signature; DWORD ofsNext; //offset to the next module name in the chain BYTE cbName; //number of characters in this module name QByteArray name; //name, no nul terminator }; static const DWORD DBCONTACTSETTINGS_SIGNATURE = 0x53DECADEu; struct DBContactSettings { DWORD signature; DWORD ofsNext; //offset to the next contactsettings in the chain DWORD ofsModuleName; //offset to the DBModuleName of the owner of these //settings DWORD cbBlob; //size of the blob in bytes. May be larger than the //actual size for reducing the number of moves //required using granularity in resizing QByteArray blob; //the blob. a back-to-back sequence of DBSetting //structs, the last has cbName=0 }; //DBVARIANT: used by db/contact/getsetting and db/contact/writesetting enum DBVT { DBVT_DELETED = 0, //this setting just got deleted, no other values are valid DBVT_BYTE = 1, //bVal and cVal are valid DBVT_WORD = 2, //wVal and sVal are valid DBVT_DWORD = 4, //dVal and lVal are valid DBVT_ASCIIZ = 255, //pszVal is valid DBVT_BLOB = 254, //cpbVal and pbVal are valid DBVT_UTF8 = 253, //pszVal is valid DBVT_WCHAR = 252, //pszVal is valid DBVT_TCHAR = DBVT_WCHAR }; static const DWORD DBVTF_VARIABLELENGTH = 0x80; static const DWORD DBVTF_DENYUNICODE = 0x10000; typedef struct { BYTE type; union { BYTE bVal; char cVal; WORD wVal; short sVal; DWORD dVal; long lVal; struct { union { char *pszVal; TCHAR *ptszVal; WCHAR *pwszVal; }; WORD cchVal; //only used for db/contact/getsettingstatic }; struct { WORD cpbVal; BYTE *pbVal; }; }; } DBVARIANT; class miranda : public HistoryImporter { public: miranda(); virtual ~miranda(); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); virtual bool needCharset() { return true; } virtual bool chooseFile() { return true; } }; } typedef Miranda::miranda miranda; } #endif /*MIRANDA_H_*/ qutim-0.2.0/plugins/histman/clients/qippda.cpp0000644000175000017500000000656711273062067023105 0ustar euroelessareuroelessar/* * qippda.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "qippda.h" #include "qipinfium.h" #include #include #include #include namespace HistoryManager { qippda::qippda() { } qippda::~qippda() { } void qippda::loadMessages(const QString &path) { QDir dir = path; if(!dir.cd("History")) return; QHash protocols; protocols[QLatin1String("icq")] = QLatin1String("ICQ"); protocols[QLatin1String("jabber")] = QLatin1String("Jabber"); protocols[QLatin1String("mra")] = QLatin1String("MRIM"); QStringList filters = QStringList() << QLatin1String("*.qhf") << QLatin1String("*.ahf"); QFileInfoList files = dir.entryInfoList(filters, QDir::Files); setMaxValue(files.size()); for(int i = 0; i < files.size(); i++) { setValue(i + 1); QString protocol = files[i].fileName().section("_",0,0); while(!protocol.isEmpty() && protocol.at(protocol.length() - 1).isDigit()) protocol.chop(1); // Old qip pda has only ICQ support and files are named like 1_myuin_hisuin if(protocol.isEmpty()) protocol = QLatin1String("ICQ"); else { protocol = protocols[protocol.toLower()]; if(protocol.isEmpty()) { qWarning("Unknown protocol: \"%s\"", qPrintable(files[i].fileName())); continue; } } setProtocol(protocol); QString account = files[i].fileName().section("_",1,1); setAccount(account); QFile file(files[i].absoluteFilePath()); if(file.open(QFile::ReadOnly)) { QByteArray bytearray = file.readAll(); const uchar *data = (const uchar *)bytearray.constData(); const uchar *end = data + bytearray.size(); if(memcmp(data, "QHF", 3)) continue; uchar version = data[3]; data += 44; QString uin = qipinfium::getString(data, qipinfium::getUInt16(data)); QString name = qipinfium::getString(data, qipinfium::getUInt16(data)); setContact(uin); // continue; while(data < end) { quint16 type = qipinfium::getUInt16(data); quint32 index = qipinfium::getUInt32(data); data += 2; const uchar *next = data + index; if(type == 1) { Message message; message.type = 1; data += 10; message.time = QDateTime::fromTime_t(qipinfium::getUInt32(data)); message.time.setTimeSpec(Qt::LocalTime); if(version == 1) message.time = message.time.toUTC().addDays(2); else message.time = message.time.toUTC(); data += 4; message.in = qipinfium::getUInt8(data) == 0; data += 4; int mes_len = version == 3 ? qipinfium::getUInt32(data) : qipinfium::getUInt16(data); QString text = qipinfium::getString(data, mes_len, version > 1); message.text = Qt::escape(text).replace("\n", "
"); appendMessage(message); } else data = next; } } } } bool qippda::validate(const QString &path) { QDir dir = path; if(!dir.cd("History")) return false; QStringList files = dir.entryList(QStringList() << "*.qhf" << "*.ahf", QDir::Files); return !files.isEmpty(); } QString qippda::name() { return "QIP PDA"; } QIcon qippda::icon() { return qutim_sdk_0_2::Icon("qippda", qutim_sdk_0_2::IconInfo::Client); } } qutim-0.2.0/plugins/histman/clients/jimm.cpp0000644000175000017500000000412111273062067022543 0ustar euroelessareuroelessar/* * jimm.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "jimm.h" #include #include #include #include #include #include #include "dbh.h" jimm::jimm() { } jimm::~jimm() { } void jimm::load(QString path,DataBase *data,QByteArray /*defCharset*/,QString /*nickName*/,QProgressBar *bar) { QDir dir(path); QFileInfoList files = dir.entryInfoList(QDir::Files|QDir::NoDotAndDotDot); QString account = "jimm uin"; bar->setMaximum(files.size()); for(int i=0;isetValue(i); if(files[i].fileName().toLower().compare("_srvlog.txt")!=0&&files[i].fileName().toLower().compare("_botlog.txt")!=0) { QFile file(files[i].absoluteFilePath()); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { DataBase::Message message; message.type=1; QTextStream in(&file); in.setAutoDetectUnicode(false); in.setCodec("cp1251"); QString uin = files[i].fileName(); uin=uin.remove(0,uin.lastIndexOf("_")+1); uin.truncate(uin.size()-4); message.in=true; bool first=true; bool point=false; QStringList all = in.readAll().split("\n"); foreach(QString line, all) { if(line.compare("------------------------------------>>>-")==0||line.compare("------------------------------------<<<-")==0) { if(!first) { message.msg.truncate(message.msg.size()-2); data->append("ICQ",account,uin,message); } else first=false; if(line[38]=='<') message.in=true; else message.in=false; point=true; message.msg=""; } else if(point) { message.date = QDateTime().fromString(line.section(' ',-2),"(dd.MM.yyyy hh:mm:ss):").toTime_t(); point=false; } else message.msg+=line+"\n"; } } } } } qutim-0.2.0/plugins/histman/clients/psi.h0000644000175000017500000000233711273062067022056 0ustar euroelessareuroelessar/* Psi Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 PSI_H #define PSI_H #include "include/qutim/historymanager.h" namespace HistoryManager { class psi : public HistoryImporter { public: psi(); QString decode(const QString &jid); QString logdecode(const QString &str); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); virtual QList config(); virtual bool useConfig(); virtual QString additionalInfo(); private: ConfigWidget m_config; QString m_account; }; } #endif // PSI_H qutim-0.2.0/plugins/histman/clients/gajim.h0000644000175000017500000000224011273062067022343 0ustar euroelessareuroelessar/* Gajim Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 GAJIM_H #define GAJIM_H #include "include/qutim/historymanager.h" namespace HistoryManager { class gajim : public HistoryImporter { public: gajim(); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); virtual QList config(); virtual bool useConfig(); virtual QString additionalInfo(); private: ConfigWidget m_config; QString m_account; }; } #endif // GAJIM_H qutim-0.2.0/plugins/histman/clients/miranda.cpp0000644000175000017500000002237611273062067023236 0ustar euroelessareuroelessar/* Miranda Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "miranda.h" #include #include #include #include #include namespace HistoryManager { namespace Miranda { miranda::miranda() { } miranda::~miranda() { } inline DWORD ReadDWord(const BYTE * &data) { DWORD a = *(data++); a += (*(data++) << 8); a += (*(data++) << 16); a += (*(data++) << 24); return a; } inline WORD ReadWord(const BYTE * &data) { WORD a = *(data++); a += (*(data++) << 8); return a; } inline BYTE ReadByte(const BYTE * &data) { return *(data++); } inline QByteArray ReadByteArray(const BYTE * &data) { WORD lenth = ReadWord(data); QByteArray result((const char *)data, lenth); data += lenth; return result; } static void ReadDBHeader(DBHeader *header, const BYTE *data) { for(int i = 0; i < 16; i++) header->signature[i] = ReadByte(data); header->version = ReadDWord(data); header->ofsFileEnd = ReadDWord(data); header->slackSpace = ReadDWord(data); header->contactCount = ReadDWord(data); header->ofsFirstContact = ReadDWord(data); header->ofsUser = ReadDWord(data); header->ofsFirstModuleName = ReadDWord(data); } static void ReadDBContact(DBContact *contact, const BYTE *data) { contact->signature = ReadDWord(data); contact->ofsNext = ReadDWord(data); contact->ofsFirstSettings = ReadDWord(data); contact->eventCount = ReadDWord(data); contact->ofsFirstEvent = ReadDWord(data); contact->ofsLastEvent = ReadDWord(data); contact->ofsFirstUnreadEvent = ReadDWord(data); contact->timestampFirstUnread = ReadDWord(data); } static void ReadDBEvent(DBEvent *event, const BYTE *data) { event->signature = ReadDWord(data); event->ofsPrev = ReadDWord(data); event->ofsNext = ReadDWord(data); event->ofsModuleName = ReadDWord(data); event->timestamp = ReadDWord(data); event->flags = ReadDWord(data); event->eventType = ReadWord(data); event->cbBlob = ReadDWord(data); event->blob = QByteArray((const char *)data, event->cbBlob); } static void ReadDBModuleName(DBModuleName *module_name, const BYTE *data) { module_name->signature = ReadDWord(data); module_name->ofsNext = ReadDWord(data); module_name->cbName = ReadByte(data); module_name->name = QByteArray((const char *)data, module_name->cbName); module_name->name.append((char)0); } static void ReadDBContactSettings(DBContactSettings *contact_settings, const BYTE *data) { contact_settings->signature = ReadDWord(data); contact_settings->ofsNext = ReadDWord(data); contact_settings->ofsModuleName = ReadDWord(data); contact_settings->cbBlob = ReadDWord(data); contact_settings->blob = QByteArray((const char *)data, contact_settings->cbBlob); } static QVariant GetVariant(const BYTE * &data, QTextDecoder *decoder) { BYTE type = ReadByte(data); switch(type) { case DBVT_DELETED: return QVariant(); case DBVT_BYTE: return ReadByte(data); case DBVT_WORD: return ReadWord(data); case DBVT_DWORD: return ReadDWord(data); case DBVT_ASCIIZ: return decoder->toUnicode(ReadByteArray(data)); case DBVT_UTF8: return QString::fromUtf8(ReadByteArray(data)); case DBVT_WCHAR: { WORD length = ReadWord(data); WCHAR *array = (WCHAR *)qMalloc(length * sizeof(WORD)); for(int i = 0; i < length; i++) array[i] = ReadWord(data); QString result = QString::fromUtf16(array, length); qFree(array); return result; } case DBVT_BLOB: return ReadByteArray(data); default: return QVariant(); } } static QHash GetSettings(const DBContact &contact, const QByteArray &module, const BYTE *data, QTextDecoder *decoder) { DBContactSettings contact_settings; DWORD offset = contact.ofsFirstSettings; QHash result; while(offset) { ReadDBContactSettings(&contact_settings, data + offset); DBModuleName module_name; ReadDBModuleName(&module_name, data + contact_settings.ofsModuleName); if(QLatin1String(module_name.name) == QLatin1String(module)) { const BYTE *data = (const BYTE *)contact_settings.blob.constData(); while(true) { BYTE length = ReadByte(data); QByteArray key = QByteArray((const char *)data, length); data += length; if(key.isEmpty()) break; QVariant value = GetVariant(data, decoder); if(!value.isNull()) result.insert(QString::fromLatin1(key, key.size()).toLower(), value); } } offset = contact_settings.ofsNext; } return result; } static bool IsSupported(const QByteArray &protocol) { if(protocol.startsWith("JABBER") || protocol.startsWith("ICQ") || protocol.startsWith("MSN") || protocol.startsWith("AIM") || protocol.startsWith("GG") || protocol.startsWith("IRC") || protocol.startsWith("YAHOO")) return true; return false; } static QString Miranda2qutIM(const QByteArray &protocol) { if(protocol.startsWith("JABBER")) return "Jabber"; if(protocol.startsWith("ICQ")) return "ICQ"; if(protocol.startsWith("MSN")) return "MSN"; if(protocol.startsWith("AIM")) return "AIM"; if(protocol.startsWith("GG")) return "Gadu-Gadu"; if(protocol.startsWith("IRC")) return "IRC"; if(protocol.startsWith("YAHOO")) return "Yahoo"; return QString(); } static QString GetID(const QHash &settings, const QByteArray &protocol) { if(protocol.startsWith("JABBER")) return settings.value("jid").toString(); if(protocol.startsWith("ICQ")) return settings.value("uin").toString(); if(protocol.startsWith("MSN")) return settings.value("e-mail").toString(); if(protocol.startsWith("AIM")) return settings.value("sn").toString(); if(protocol.startsWith("GG")) return settings.value("uin").toString(); if(protocol.startsWith("IRC")) return settings.value("nick").toString(); if(protocol.startsWith("YAHOO")) return settings.value("yahoo_id").toString(); return QString(); } void miranda::loadMessages(const QString &path) { QFileInfo info(path); if(!info.exists() || !info.isFile()) return; QFile file(path); if(!file.open(QIODevice::ReadOnly)) return; QTextDecoder *decoder = QTextCodec::codecForName(charset())->makeDecoder(); QByteArray bytes; const BYTE *data_begin = (BYTE *)file.map(0, file.size()); if(!data_begin) { bytes = file.readAll(); data_begin = (BYTE *)bytes.constData(); } DBHeader header; const BYTE *data = data_begin; ReadDBHeader(&header, data); if(QLatin1String((const char *)header.signature) != QLatin1String(DBHEADER_SIGNATURE)) return; setMaxValue(header.contactCount); int offset = header.ofsFirstContact; DBContact contact; DBContact user; ReadDBContact(&user, data + header.ofsUser); int num = 0; while(offset) { ReadDBContact(&contact, data + offset); setValue(++num); if(contact.ofsFirstEvent) { QHash protocol_settings = GetSettings(contact, "Protocol", data, decoder); QByteArray protocol = protocol_settings.value("p").toByteArray(); if(IsSupported(protocol)) { setProtocol(Miranda2qutIM(protocol)); QHash contact_settings = GetSettings(contact, protocol, data, decoder); QHash account_settings = GetSettings(user, protocol, data, decoder); setAccount(GetID(account_settings, protocol)); setContact(GetID(contact_settings, protocol)); DBEvent event; offset = contact.ofsFirstEvent; while(offset) { ReadDBEvent(&event, data + offset); offset = event.ofsNext; if(event.eventType != EVENTTYPE_MESSAGE) continue; Message message; message.type = 1; message.in = !(event.flags & DBEF_SENT); message.time = QDateTime::fromTime_t(event.timestamp); message.text = (event.flags & DBEF_UTF) ? QString::fromUtf8(event.blob) : decoder->toUnicode(event.blob); message.text = Qt::escape(message.text).replace("\n", "
"); appendMessage(message); } } else { QHash contact_settings = GetSettings(contact, protocol, data, decoder); qWarning() << "Unknown protocol:" << protocol << contact_settings.keys(); } } offset = contact.ofsNext; } } bool miranda::validate(const QString &path) { QFileInfo info(path); if(info.exists() && info.isFile()) { QFile file(path); if(!file.open(QIODevice::ReadOnly)) return false; QByteArray bytes; const BYTE *data_begin = (BYTE *)file.map(0, file.size()); if(!data_begin) { bytes = file.read(sizeof(DBHeader)*2); data_begin = (BYTE *)bytes.constData(); } DBHeader header; const BYTE *data = data_begin; ReadDBHeader(&header, data); if(QLatin1String((const char *)header.signature) != QLatin1String(DBHEADER_SIGNATURE)) return false; return true; } return false; } QString miranda::name() { return "Miranda IM"; } QIcon miranda::icon() { return qutim_sdk_0_2::Icon("miranda", qutim_sdk_0_2::IconInfo::Client); } } } qutim-0.2.0/plugins/histman/clients/pidgin.cpp0000644000175000017500000001276311273062067023074 0ustar euroelessareuroelessar/* * pidgin.cpp * * Copyright (C) 2008-2009 Nigmatullin Ruslan * * 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 "pidgin.h" #include #include #include #include namespace HistoryManager { pidgin::pidgin() { } pidgin::~pidgin() { } void pidgin::loadMessages(const QString &path) { QDir root = path; if(!root.cd("logs")) return; int num = 0; QStringList protocol_dirs = root.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(QString protocol, protocol_dirs) { QDir protocol_dir(root.filePath(protocol)); QStringList account_dirs = protocol_dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(QString account, account_dirs) { QDir dir(protocol_dir.filePath(account)); QStringList contacts = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); foreach(const QString &contact, contacts) { QDir contact_dir(dir.filePath(contact)); QFileInfoList files = contact_dir.entryInfoList(QStringList() << "*.html", QDir::Files|QDir::NoDotAndDotDot); num += files.size(); } } } setMaxValue(num); num = 0; const QStringList stamps = QStringList() << "(hh:mm:ss)(16:35:00) EuroElessar:
gergr
mes=true; if(lines[i].startsWith("")) message.in=false; else if(lines[i].startsWith("")) message.in=true; else mes=false; if(mes) { QDateTime date; QString date_string = lines[i].section(">",2,2); for(int j=0;j")+6); message.text.chop(5); if(message.text.contains("")) message.text = message.text.remove("").remove(""); appendMessage(message); } } } } } } } } bool pidgin::validate(const QString &path) { QDir root = path; if(!root.cd("logs")) return false; QStringList protocol_dirs = root.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(QString protocol, protocol_dirs) { QDir protocol_dir(root.filePath(protocol)); QStringList account_dirs = protocol_dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); foreach(QString account, account_dirs) { QDir dir(protocol_dir.filePath(account)); QStringList contacts = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); foreach(const QString &contact, contacts) { QDir contact_dir(dir.filePath(contact)); QFileInfoList files = contact_dir.entryInfoList(QStringList() << "*.html", QDir::Files|QDir::NoDotAndDotDot); if(!files.isEmpty()) return true; } } } return false; } QString pidgin::name() { return "Pidgin"; } QIcon pidgin::icon() { return qutim_sdk_0_2::Icon("pidgin", qutim_sdk_0_2::IconInfo::Client); } } qutim-0.2.0/plugins/histman/clients/qippda.h0000644000175000017500000000125111273062067022533 0ustar euroelessareuroelessar/* * qippda.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 QIPPDA_H_ #define QIPPDA_H_ #include "include/qutim/historymanager.h" namespace HistoryManager { class qippda : public HistoryImporter { public: qippda(); virtual ~qippda(); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); }; } #endif /*QIPPDA_H_*/ qutim-0.2.0/plugins/histman/clients/gajim.cpp0000644000175000017500000000507511273062067022707 0ustar euroelessareuroelessar/* Gajim Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "gajim.h" #include #include #include #include #include #include namespace HistoryManager { gajim::gajim() { } void gajim::loadMessages(const QString &path) { QDir dir = path; QFileInfo info(dir.filePath("logs.db")); if(!info.exists()) return; QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(info.absoluteFilePath()); if(!db.open()) return; setProtocol("Jabber"); setAccount(m_account); QSqlQuery jid_query("SELECT jid_id, jid FROM jids", db); setMaxValue(jid_query.size()); int num = 0; while(jid_query.next()) { QString jid_id = jid_query.value(0).toString(); QString jid = jid_query.value(1).toString(); setContact(jid); static QString query_str = "SELECT time, message, kind FROM logs " "WHERE jid_id = %1 AND (kind = 4 OR kind = 6) " "ORDER BY time ASC"; QSqlQuery query(query_str.arg(jid_id), db); while(query.next()) { Message message; message.type = 1; message.time = QDateTime::fromTime_t(query.value(0).toInt()); message.in = query.value(2).toInt() == 4; message.text = Qt::escape(query.value(1).toString()).replace("\n", "
"); appendMessage(message); } setValue(++num); } } bool gajim::validate(const QString &path) { QDir dir = path; QFileInfo info(dir.filePath("logs.db")); return info.exists(); } QString gajim::name() { return "Gajim"; } QIcon gajim::icon() { return qutim_sdk_0_2::Icon("gajim", qutim_sdk_0_2::IconInfo::Client); } QList gajim::config() { return QList() << (m_config = createAccountWidget("Jabber")); } bool gajim::useConfig() { m_account = m_config.second->property("currentText").toString(); return true; } QString gajim::additionalInfo() { return QCoreApplication::translate("ClientConfigPage", "Select your Jabber account."); } } qutim-0.2.0/plugins/histman/clients/jimm.h0000644000175000017500000000117211273062067022213 0ustar euroelessareuroelessar/* * jimm.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 JIMM_H_ #define JIMM_H_ #include #include #include "interfaces.h" #include "dbh.h" class jimm : public ClientInterface { public: jimm(); virtual ~jimm(); void load(QString path,DataBase *data,QByteArray defCharset,QString nickName,QProgressBar *bar); }; #endif /*JIMM_H_*/ qutim-0.2.0/plugins/histman/clients/andrq.h0000644000175000017500000000156511273062067022372 0ustar euroelessareuroelessar/* * andrq.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 ANDRQ_H_ #define ANDRQ_H_ #include #include #include #include "include/qutim/historymanager.h" namespace HistoryManager { class andrq : public HistoryImporter { public: andrq(); virtual ~andrq(); static QString getString(QDataStream &in, int key); static bool isValidUtf8(const QByteArray &array); static QDateTime getDateTime(QDataStream &in); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); }; } #endif /*ANDRQ_H_*/ qutim-0.2.0/plugins/histman/clients/sim.h0000644000175000017500000000130111273062067022041 0ustar euroelessareuroelessar/* * sim.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 SIM_H_ #define SIM_H_ #include "include/qutim/historymanager.h" namespace HistoryManager { class sim : public HistoryImporter { public: sim(); virtual ~sim(); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); virtual bool needCharset() { return true; } }; } #endif /*SIM_H_*/ qutim-0.2.0/plugins/histman/clients/qip.h0000644000175000017500000000122411273062067022046 0ustar euroelessareuroelessar/* * qip.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 QIP_H_ #define QIP_H_ #include "include/qutim/historymanager.h" namespace HistoryManager { class qip : public HistoryImporter { public: qip(); virtual ~qip(); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); }; } #endif /*QIP_H_*/ qutim-0.2.0/plugins/histman/clients/qutim.h0000644000175000017500000000343011273062067022415 0ustar euroelessareuroelessar/* qutIM Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 QUTIM_H_ #define QUTIM_H_ #include #include #include "include/qutim/historymanager.h" #include "src/k8json.h" namespace HistoryManager { class qutim : public HistoryImporter { public: enum Type { Xml = 0x01, Bin = 0x02, Json = 0x04 }; Q_DECLARE_FLAGS(Types, Type); qutim(); virtual ~qutim(); bool guessXml(const QString &path, QFileInfoList &files, int &num); bool guessBin(const QString &path, QFileInfoList &files, int &num); bool guessJson(const QString &path, QFileInfoList &files, int &num); void loadXml(const QFileInfoList &files); void loadBin(const QFileInfoList &files); static QString quote(const QString &str); static QString unquote(const QString &str); void loadJson(const QFileInfoList &files); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); private: int m_value; }; class qutimExporter : public qutim, public HistoryExporter { public: virtual QString name(); virtual void writeMessages(const QHash &data); }; } #endif /*QUTIM_H_*/ qutim-0.2.0/plugins/histman/clients/psi.cpp0000644000175000017500000000744011273062067022411 0ustar euroelessareuroelessar/* Psi Copyright (c) 2009 by Nigmatullin Ruslan *************************************************************************** * * * 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 "psi.h" #include #include #include #include #include namespace HistoryManager { psi::psi() { } QString psi::decode(const QString &jid) { QString jid2; int n; for(n = 0; n < (int)jid.length(); ++n) { if(jid.at(n) == '%' && (jid.length() - n - 1) >= 2) { QString str = jid.mid(n+1,2); bool ok; char c = str.toInt(&ok, 16); if(!ok) continue; QChar a(c); jid2.append(a); n += 2; } else { jid2.append(jid.at(n)); } } // search for the _at_ backwards, just in case for(n = (int)jid2.length(); n >= 3; --n) { if(jid2.mid(n, 4) == "_at_") { jid2.replace(n, 4, "@"); break; } } return jid2; } QString psi::logdecode(const QString &str) { QString ret; for(int n = 0; n < str.length(); ++n) { if(str.at(n) == '\\') { ++n; if(n >= str.length()) break; if(str.at(n) == 'n') ret.append('\n'); if(str.at(n) == 'p') ret.append('|'); if(str.at(n) == '\\') ret.append('\\'); } else { ret.append(str.at(n)); } } return ret; } void psi::loadMessages(const QString &path) { QDir dir = path; if(!dir.cd("history")) return; QFileInfoList files = dir.entryInfoList(QStringList() << "*.history", QDir::Files); setProtocol("Jabber"); setAccount(m_account); setMaxValue(files.size()); for(int i = 0; i < files.size(); i++) { setValue(i + 1); QString contact = files[i].fileName(); contact.chop(4); contact = decode(contact); setContact(contact); QFile file(files[i].absoluteFilePath()); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) continue; QTextStream in(&file); while(!in.atEnd()) { static const QChar c('|'); QString line = in.readLine(); if(line.isEmpty()) continue; // |2008-07-13T15:27:57|5|from|N3--|Цитата #397796|http://bash.org.ru/quote/397796|Цитата #397796|xxx: cool text Message message; message.time = QDateTime::fromString(line.section(c, 1, 1), Qt::ISODate); message.in = line.section(c, 3, 3) == "from"; message.type = 1; message.text = line.mid(line.lastIndexOf(c) + 1); int psi_type = line.section(c, 2, 2).toInt(); if(psi_type == 2 || psi_type == 3 || psi_type == 6 || psi_type == 7 || psi_type == 8 || message.text.isEmpty()) continue; message.text = Qt::escape(logdecode(message.text)).replace("\n", "
"); appendMessage(message); } } } bool psi::validate(const QString &path) { QDir dir = path; if(!dir.cd("history")) return false; QStringList files = dir.entryList(QStringList() << "*.history", QDir::Files); return !files.isEmpty(); } QString psi::name() { return "Psi"; } QIcon psi::icon() { return qutim_sdk_0_2::Icon("psi", qutim_sdk_0_2::IconInfo::Client); } QList psi::config() { return QList() << (m_config = createAccountWidget("Jabber")); } bool psi::useConfig() { m_account = m_config.second->property("currentText").toString(); return true; } QString psi::additionalInfo() { return QCoreApplication::translate("ClientConfigPage", "Select your Jabber account."); } } qutim-0.2.0/plugins/histman/clients/qip.cpp0000644000175000017500000000464611273062067022414 0ustar euroelessareuroelessar/* * qip.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "qip.h" #include #include #include #include #include namespace HistoryManager { qip::qip() { } qip::~qip() { } void qip::loadMessages(const QString &path) { QDir dir = path; QString account = dir.dirName(); if(!dir.cd("History")) return; setProtocol("ICQ"); setAccount(account); QStringList files = dir.entryList(QStringList() << "*.txt", QDir::Files); setMaxValue(files.size()); for(int i = 0; i < files.size(); i++) { setValue(i + 1); if(files[i] == "_srvlog.txt" || files[i] == "_botlog.txt" || files[i].startsWith(".")) continue; QFile file(dir.filePath(files[i])); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { Message message; message.type = 1; QTextStream in(&file); in.setAutoDetectUnicode(false); in.setCodec("cp1251"); QString uin = files[i]; uin.chop(4); setContact(uin); message.in = true; QDateTime date; QString from; QString msg; bool first = true; bool point = false; while(!in.atEnd()) { QString line = in.readLine(); if(line == "-------------------------------------->-" || line == "--------------------------------------<-") { if(!first) { message.text.chop(10); appendMessage(message); } else first=false; if(line[38] == '<') message.in = true; else message.in = false; point = true; message.text.clear(); } else if(point) { if(account.isEmpty()) account = line.section(' ',0,-3); message.time = QDateTime().fromString(line.section(' ',-2),"(hh:mm:ss d/MM/yyyy)"); point=false; } else { message.text += Qt::escape(line); message.text += "
"; } } } } } bool qip::validate(const QString &path) { QDir dir = path; if(!dir.cd("History")) return false; QStringList files = dir.entryList(QStringList() << "*.txt", QDir::Files); return !files.isEmpty(); } QString qip::name() { return "QIP 2005"; } QIcon qip::icon() { return qutim_sdk_0_2::Icon("qip", qutim_sdk_0_2::IconInfo::Client); } } qutim-0.2.0/plugins/histman/clients/qipinfium.h0000644000175000017500000000214111273062067023255 0ustar euroelessareuroelessar/* * qipinfium.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 QIPINFIUM_H_ #define QIPINFIUM_H_ #include #include "include/qutim/historymanager.h" namespace HistoryManager { class qipinfium : public HistoryImporter { public: qipinfium(); virtual ~qipinfium(); static quint8 getUInt8(const uchar * &data); static quint16 getUInt16(const uchar * &data); static quint32 getUInt32(const uchar * &data); static QString getString(const uchar * &data, int len, bool crypt = false); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); virtual QList config(); virtual bool useConfig(); virtual QString additionalInfo(); private: QList m_config_list; QHash m_accounts; }; } #endif /*QIPINFIUM_H_*/ qutim-0.2.0/plugins/histman/clients/andrq.cpp0000644000175000017500000000716211273062067022724 0ustar euroelessareuroelessar/* * andrq.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "andrq.h" #include #include namespace HistoryManager { andrq::andrq() { } andrq::~andrq() { } QString andrq::getString(QDataStream &in, int key) { qint32 len; in >> len; char *data = (char *)qMalloc(len); in.readRawData(data, len); int dh = 0, dl = 0; int temp = key; dl |= temp & 0x000000FF; temp >>= 20; dh |= temp & 0x000000FF; /* if (!ans) return false;*/ int ah = 184; //10111000b; for (int i = 0; i < len; ++i) { int al = uchar(data[i]); al ^= ah; al=(al%32)*8+al/32; //циклический сдвиг al на 3 бита влево al ^= dh; al -= dl; data[i] = char(al); ah=(ah%8)*32+ah/8; //циклический сдвиг ah вправо на 3 бита } static QTextCodec *ansii_codec = QTextCodec::codecForName("cp1251"); static QTextCodec *utf8_codec = QTextCodec::codecForName("utf-8"); QTextCodec *codec = isValidUtf8(QByteArray::fromRawData(data, len)) ? utf8_codec : ansii_codec; QString result = codec->toUnicode(data, len); qFree(data); return result; } bool andrq::isValidUtf8(const QByteArray &array) { int i = 0; unsigned int c; unsigned int n = 0, r = 0; unsigned char x; while (i < array.size()) { x = array[i]; c = x; i ++; for (n = 0; (c & 0x80) == 0x80; c <<= 1) n ++; if (r > 0) { if (n == 1) { r --; } else { return false; } } else if (n == 1) { return false; } else if (n != 0) { r = n - 1; } } if (r > 0) { return false; } return true; } QDateTime andrq::getDateTime(QDataStream &in) { static QDateTime zerodate; if(zerodate.isNull()) { QDate date(1899, 12, 30); QTime time(0, 0, 0, 0); zerodate.setDate(date); zerodate.setTime(time); } double time; in >> time; int day = (int)time; int sec = (int)((time-day)*86400); return zerodate.addDays(day).addSecs(sec); } void andrq::loadMessages(const QString &path) { QDir dir = path; QString account = dir.dirName(); if(!dir.cd("history")) return; setProtocol("ICQ"); setAccount(account); QFileInfoList files = dir.entryInfoList(QDir::Files); setMaxValue(files.size()); for(int i = 0; i < files.size(); i++) { setValue(i + 1); QString uin = files[i].fileName(); QFile file(files[i].absoluteFilePath()); if(!file.open(QFile::ReadOnly)) continue; setContact(uin); QDataStream in(&file); in.setByteOrder(QDataStream::LittleEndian); Message message; message.type=1; while(!in.atEnd()) { qint32 type; in >> type; switch(type) { case -1: { quint8 kind; qint32 who; in >> kind >> who; QString from = QString::number(who); message.in = from == uin; message.time = getDateTime(in); qint32 tmp; in >> tmp; in.skipRawData(tmp); message.text = Qt::escape(getString(in, who)).replace("\n", "
"); if(kind==1) appendMessage(message); break; } case -2: { qint32 tmp; in >> tmp; in.skipRawData(tmp); break; } case -3: in.skipRawData(5); break; default: break; } } } } bool andrq::validate(const QString &path) { QDir dir = path; if(!dir.cd("history")) return false; QStringList files = dir.entryList(QDir::Files); return !files.isEmpty(); } QString andrq::name() { return "&RQ"; } QIcon andrq::icon() { return qutim_sdk_0_2::Icon("rnq", qutim_sdk_0_2::IconInfo::Client); } } qutim-0.2.0/plugins/histman/clients/pidgin.h0000644000175000017500000000132611273062067022532 0ustar euroelessareuroelessar/* * pidgin.h * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 PIDGIN_H_ #define PIDGIN_H_ #include "include/qutim/historymanager.h" namespace HistoryManager { class pidgin : public HistoryImporter { public: pidgin(); virtual ~pidgin(); virtual void loadMessages(const QString &path); virtual bool validate(const QString &path); virtual QString name(); virtual QIcon icon(); virtual bool needCharset() { return true; } }; } #endif /*PIDGIN_H_*/ qutim-0.2.0/plugins/histman/clients/licq.cpp0000644000175000017500000000434611273062067022550 0ustar euroelessareuroelessar/* * licq.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "licq.h" #include #include #include #include #include #include namespace HistoryManager { licq::licq() { } licq::~licq() { } void licq::loadMessages(const QString &path) { QDir dir = path; QSettings settings(dir.filePath("owner.Licq"), QSettings::IniFormat); QString account = settings.value("Uin").toString(); if(!dir.cd("history")) return; setProtocol("ICQ"); setAccount(account); QFileInfoList files = dir.entryInfoList(QDir::Files|QDir::NoDotAndDotDot); setMaxValue(files.size()); for(int i=0;i"; } message.text.chop(5); appendMessage(message); } } } bool licq::validate(const QString &path) { QDir dir = path; if(!dir.cd("history")) return false; QStringList files = dir.entryList(QDir::Files|QDir::NoDotAndDotDot); return !files.isEmpty(); } QString licq::name() { return "Licq"; } QIcon licq::icon() { return qutim_sdk_0_2::Icon("licq", qutim_sdk_0_2::IconInfo::Client); } } qutim-0.2.0/plugins/histman/clients/qipinfium.cpp0000644000175000017500000001060111273062067023610 0ustar euroelessareuroelessar/* * qipinfium.cpp * * Copyright (C) 2008 Nigmatullin Ruslan * * 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 "qipinfium.h" #include #include #include namespace HistoryManager { qipinfium::qipinfium() { } qipinfium::~qipinfium() { } quint8 qipinfium::getUInt8(const uchar * &data) { return *(data++); } quint16 qipinfium::getUInt16(const uchar * &data) { quint16 a = (*(data++) << 8); a += *(data++); return a; } quint32 qipinfium::getUInt32(const uchar * &data) { quint32 a = (*(data++) << 24); a += (*(data++) << 16); a += (*(data++) << 8); a += *(data++); return a; } QString qipinfium::getString(const uchar * &data, int len, bool crypt) { QByteArray str((const char *)data, len); if(crypt) { for(int i = 0; i < len; i++) { str[i] = str[i] + i + 1; str[i] = 255 - str[i]; } } data += len; return QString::fromUtf8(str.constData()/*, len*/); // qip can write zero bytes to end of file } void qipinfium::loadMessages(const QString &path) { QDir dir = path; if(!dir.cd("History")) return; QHash protocols; protocols[QLatin1String("icq")] = QLatin1String("ICQ"); protocols[QLatin1String("jabber")] = QLatin1String("Jabber"); protocols[QLatin1String("mra")] = QLatin1String("MRIM"); QStringList filters; foreach(QString format,protocols.keys()) filters << (format + QLatin1String("*.qhf")) << (format + QLatin1String("*.ahf")); QFileInfoList files = dir.entryInfoList(filters, QDir::Files); setMaxValue(files.size()); for(int i = 0; i < files.size(); i++) { setValue(i + 1); QString protocol = files[i].fileName().section("_",0,0); while(!protocol.isEmpty() && protocol.at(protocol.length() - 1).isDigit()) protocol.chop(1); protocol = protocols[protocol.toLower()]; if(protocol.isEmpty()) { qWarning("Unknown protocol: \"%s\"", qPrintable(files[i].fileName())); continue; } setProtocol(protocol); setAccount(m_accounts.value(protocol)); QFile file(files[i].absoluteFilePath()); if(file.open(QFile::ReadOnly)) { QByteArray bytearray = file.readAll(); const uchar *data = (const uchar *)bytearray.constData(); const uchar *end = data + bytearray.size(); if(memcmp(data, "QHF", 3)) continue; uchar version = data[3]; data += 44; QString uin = getString(data, getUInt16(data)); QString name = getString(data, getUInt16(data)); setContact(uin); while(data < end) { quint16 type = getUInt16(data); quint32 index = getUInt32(data); data += 2; if(type == 1) { Message message; message.type = 1; data += 10; message.time = QDateTime::fromTime_t(getUInt32(data)); message.time.setTimeSpec(Qt::LocalTime); if(version == 1) message.time = message.time.toUTC().addDays(2); else message.time = message.time.toUTC(); data += 4; message.in = getUInt8(data) == 0; data += 4; int mes_len = version == 3 ? getUInt32(data) : getUInt16(data); QString text = getString(data, mes_len, version > 1); message.text = Qt::escape(text).replace("\n", "
"); appendMessage(message); } else data += index; } } } } bool qipinfium::validate(const QString &path) { QDir dir = path; if(!dir.cd("History")) return false; QStringList files = dir.entryList(QStringList() << "*.qhf" << "*.ahf", QDir::Files); return !files.isEmpty(); } QString qipinfium::name() { return "QIP Infium"; } QIcon qipinfium::icon() { return qutim_sdk_0_2::Icon("qipinf", qutim_sdk_0_2::IconInfo::Client); } QList qipinfium::config() { return m_config_list = QList() << createAccountWidget("ICQ") << createAccountWidget("Jabber") << createAccountWidget("MRIM"); } bool qipinfium::useConfig() { m_accounts.insert("ICQ", m_config_list[0].second->property("currentText").toString()); m_accounts.insert("Jabber", m_config_list[1].second->property("currentText").toString()); m_accounts.insert("MRIM", m_config_list[2].second->property("currentText").toString()); return true; } QString qipinfium::additionalInfo() { return QCoreApplication::translate("ClientConfigPage", "Select accounts for each protocol in the list."); } } qutim-0.2.0/plugins/icq/0000755000175000017500000000000011273101010016533 5ustar euroelessareuroelessarqutim-0.2.0/plugins/icq/treebuddyitem.cpp0000644000175000017500000012572411273054317022141 0ustar euroelessareuroelessar/* treeBuddyItem Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include "tlv.h" #include "buffer.h" #include "treebuddyitem.h" treeBuddyItem::treeBuddyItem(const QString &pUin, const QString &profile_name) : parentUin(pUin) ,m_profile_name(profile_name) , m_icq_plugin_system(IcqPluginSystem::instance()) { avatarMd5Hash.clear(); // setIcon(0, (statusIconClass::getInstance()->*statusIconMethod)()); // setText(3,QString::number(12)); status = contactOffline; isOffline = true; groupID = 0; messageIcon = false; UTF8 = false; m_channel_two_support = false; statusChanged = true; underline = true; notAutho = false; birth = false; authorizeMe = false; icqLite = false; m_xstatus_already_readed = false; externalIP = 0; internalIP = 0; onlineTime = 0; signonTime = 0; lastonlineTime = 0; regTime = 0; idleSinceTime = 0; clientId = "-"; fileTransferSupport = false; xStatusPresent = false; m_visible_contact = false; m_invisible_contact = false; m_ignore_contact = false; m_xstatus_changed = false; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); iconPath = settings.fileName().section('/', 0, -2) + "/icqicons/"; } treeBuddyItem::~treeBuddyItem() { } void treeBuddyItem::setBuddyUin(const QString &text) { buddyUin = text; buddyName = text; // updateBuddyText(); } void treeBuddyItem::checkForXStatus() { QList capList = capabilitiesList; if ( capList.contains(QByteArray::fromHex("01d8d7eeac3b492aa58dd3d877e66b92"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(0); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(0))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(0))); } else if ( capList.contains(QByteArray::fromHex("5a581ea1e580430ca06f612298b7e4c7"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(1); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(1))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(1))); }else if ( capList.contains(QByteArray::fromHex("83c9b78e77e74378b2c5fb6cfcc35bec"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(2); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(2))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(2))); }else if ( capList.contains(QByteArray::fromHex("e601e41c33734bd1bc06811d6c323d81"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(3); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(3))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(3))); }else if ( capList.contains(QByteArray::fromHex("8c50dbae81ed4786acca16cc3213c7b7"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(4); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(4))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(4))); }else if ( capList.contains(QByteArray::fromHex("3fb0bd36af3b4a609eefcf190f6a5a7f"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(5); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(5))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(5))); }else if ( capList.contains(QByteArray::fromHex("f8e8d7b282c4414290f810c6ce0a89a6"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(6); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(6))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(6))); }else if ( capList.contains(QByteArray::fromHex("80537de2a4674a76b3546dfd075f5ec6"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(7); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(7))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(7))); }else if ( capList.contains(QByteArray::fromHex("f18ab52edc57491d99dc6444502457af"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(8); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(8))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(8))); }else if ( capList.contains(QByteArray::fromHex("1b78ae31fa0b4d3893d1997eeeafb218"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(9); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(9))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(9))); }else if ( capList.contains(QByteArray::fromHex("61bee0dd8bdd475d8dee5f4baacf19a7"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(10); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(10))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(10))); }else if ( capList.contains(QByteArray::fromHex("488e14898aca4a0882aa77ce7a165208"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(11); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(11))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(11))); }else if ( capList.contains(QByteArray::fromHex("107a9a1812324da4b6cd0879db780f09"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(12); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(12))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(12))); }else if ( capList.contains(QByteArray::fromHex("6f4930984f7c4affa27634a03bceaea7"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(13); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(13))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(13))); }else if ( capList.contains(QByteArray::fromHex("1292e5501b644f66b206b29af378e48d"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(14); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(14))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(14))); }else if ( capList.contains(QByteArray::fromHex("d4a611d08f014ec09223c5b6bec6ccf0"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(15); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(15))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(15))); }else if ( capList.contains(QByteArray::fromHex("609d52f8a29a49a6b2a02524c5e9d260"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(16); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(16))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(16))); }else if ( capList.contains(QByteArray::fromHex("63627337a03f49ff80e5f709cde0a4ee"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(17); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(17))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(17))); }else if ( capList.contains(QByteArray::fromHex("1f7a4071bf3b4e60bc324c5787b04cf1"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(18); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(18))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(18))); }else if ( capList.contains(QByteArray::fromHex("785e8c4840d34c65886f04cf3f3f43df"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(19); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(19))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(19))); }else if ( capList.contains(QByteArray::fromHex("a6ed557e6bf744d4a5d4d2e7d95ce81f"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(20); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(20))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(20))); }else if ( capList.contains(QByteArray::fromHex("12d07e3ef885489e8e97a72a6551e58d"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(21); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(21))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(21))); }else if ( capList.contains(QByteArray::fromHex("ba74db3e9e24434b87b62f6b8dfee50f"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(22); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(22))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(22))); }else if ( capList.contains(QByteArray::fromHex("634f6bd8add24aa1aab9115bc26d05a1"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(23); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(23))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(23))); }else if ( capList.contains(QByteArray::fromHex("2ce0e4e57c6443709c3a7a1ce878a7dc"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(24); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(24))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(24))); }else if ( capList.contains(QByteArray::fromHex("101117c9a3b040f981ac49e159fbd5d4"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(25); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(25))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(25))); }else if ( capList.contains(QByteArray::fromHex("160c60bbdd4443f39140050f00e6c009"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(26); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(26))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(26))); }else if ( capList.contains(QByteArray::fromHex("6443c6af22604517b58cd7df8e290352"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(27); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(27))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(27))); }else if ( capList.contains(QByteArray::fromHex("16f5b76fa9d240358cc5c084703c98fa"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(28); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(28))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(28))); }else if ( capList.contains(QByteArray::fromHex("631436ff3f8a40d0a5cb7b66e051b364"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(29); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(29))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(29))); }else if ( capList.contains(QByteArray::fromHex("b70867f538254327a1ffcf4cc1939797"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(30); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(30))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(30))); }else if ( capList.contains(QByteArray::fromHex("ddcf0ea971954048a9c6413206d6f280"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(31); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(31))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(31))); }else if ( capList.contains(QByteArray::fromHex("d4e2b0ba334e4fa598d0117dbf4d3cc8"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(32); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(32))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(32))); }else if ( capList.contains(QByteArray::fromHex("0072d9084ad143dd91996f026966026f"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(33); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(33))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(33))); }else if ( capList.contains(QByteArray::fromHex("e601e41c33734bd1bc06811d6c323d82"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(34); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(34))); }else if ( capList.contains(QByteArray::fromHex("3FB0BD36AF3B4A609EEFCF190F6A5A7E"))) { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(35); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(35))); } else { xStatusPresent = false; xStatusIcon.clear(); setContactXStatus(QIcon()); clearRow(1); //xStatusCaption.clear(); //xStatusMessage.clear(); //xStatusMsg.clear(); // waitingForAuth(authorizeMe); } if ( !xStatusPresent && !xStatusMessage.isEmpty()) { QString stat = xStatusMessage; if ( stat == "icqmood23") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(0); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(0))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(0))); }else if ( stat == "icqmood1") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(1); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(1))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(1))); }else if ( stat == "icqmood2") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(2); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(2))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(2))); }else if ( stat == "icqmood3") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(3); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(3))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(3))); }else if ( stat == "icqmood4") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(4); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(4))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(4))); }else if ( stat == "icqmood5") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(5); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(5))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(5))); }else if ( stat == "icqmood6") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(6); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(6))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(6))); }else if ( stat == "icqmood7") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(7); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(7))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(7))); }else if ( stat == "icqmood8") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(8); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(8))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(8))); }else if ( stat == "icqmood9") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(9); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(9))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(9))); }else if ( stat == "icqmood10") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(10); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(10))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(10))); }else if ( stat == "icqmood11") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(11); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(11))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(11))); }else if ( stat == "icqmood12") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(12); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(12))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(12))); }else if ( stat == "icqmood13") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(13); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(13))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(13))); }else if ( stat == "icqmood14") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(14); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(14))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(14))); }else if ( stat == "icqmood15") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(15); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(15))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(15))); }else if ( stat == "icqmood16") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(16); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(16))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(16))); }else if ( stat == "icqmood17") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(18); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(18))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(18))); }else if ( stat == "icqmood18") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(19); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(19))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(19))); }else if ( stat == "icqmood19") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(20); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(20))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(20))); }else if ( stat == "icqmood20") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(21); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(21))); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(21))); }else if ( stat == "icqmood21") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(22); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(22))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(22))); }else if ( stat == "icqmood22") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(23); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(23))); // setIcon(1, QIcon(statusIconClass::getInstance()->xstatusList.at(23))); }else if ( stat == "icqmood33") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(34); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(34))); }else if ( stat == "icqmood32") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(35); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(35))); }else if ( stat == "icqmood60") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(36); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(36))); }else if ( stat == "icqmood61") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(37); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(37))); }else if ( stat == "icqmood62") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(38); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(38))); }else if ( stat == "icqmood63") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(39); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(39))); }else if ( stat == "icqmood64") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(40); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(40))); }else if ( stat == "icqmood65") { xStatusPresent = true; xStatusIcon = statusIconClass::getInstance()->xstatusList.at(41); setContactXStatus(QIcon(statusIconClass::getInstance()->xstatusList.at(41))); } else { xStatusIcon.clear(); setContactXStatus(QIcon()); clearRow(1); xStatusCaption.clear(); xStatusMessage.clear(); xStatusMsg.clear(); } } if ( m_xstatus_already_readed ) setXstatusText(); } void treeBuddyItem::readData(icqBuffer *socket, quint16 length) { notAutho = false; for ( ;length > 0; ) { tlv tmpTlv; tmpTlv.readData(socket); takeTlv(tmpTlv); length -= tmpTlv.getLength(); } updateBuddyText(); } void treeBuddyItem::takeTlv(tlv &newTlv) { QString tmpBuddyName; switch(newTlv.getTlvType()) { case 0x0131: tmpBuddyName = QString::fromUtf8(newTlv.getTlvData()); if ( tmpBuddyName != buddyUin) { buddyName = tmpBuddyName; updateBuddyText(); } break; case 0x0066: notAutho = true; updateBuddyText(); break; default: break; } } void treeBuddyItem::updateBuddyText() { // setText(1,buddyName); // QFont tmpFont = font(1); // if ( underline ) // { //// tmpFont.setUnderline(notAutho); // if(notAutho) // setCustomIcon(QIcon(":/icons/icq/auth.png"), 5); // } else { // setCustomIcon(QIcon(), 5); // } // if ( birth ) // { // if ( birthDay == QDate::currentDate() ) //// tmpFont.setWeight(QFont::Bold); // setCustomIcon(QIcon(":/icons/icq/auth.png"), 3); // } else { //// tmpFont.setWeight(QFont::Normal); // setCustomIcon(QIcon(), 3); // } // // setFont(1, tmpFont); setBirthdayIcon(); } void treeBuddyItem::oncoming(icqBuffer *socket, quint16 length) { m_xstatus_already_readed = false; m_xstatus_changed = false; socket->read(2); length -= 4; quint16 arraySize = byteArrayToInt16(socket->read(2)); for ( int i = 0; i < arraySize; i++ ) { tlv tmpTlv; tmpTlv.readData(socket); takeOncomingTlv(tmpTlv); length -= tmpTlv.getLength(); } if ( status == contactOffline ) { QByteArray tmp; tmp.append(0x10); tmp.append((char)0x00); tmp.append((char)0x00); tmp.append((char)0x00); changeStatus(tmp); } if ( length ) socket->read(length); } void treeBuddyItem::takeOncomingTlv(tlv &newTlv) { switch(newTlv.getTlvType()) { case 0x0006: changeStatus(newTlv.getTlvData()); break; case 0x0004: setIdleSinceTime(newTlv.getTlvLength(), newTlv.getTlvData()); break; case 0x000d: setCapabilities(newTlv.getTlvData()); break; case 0x001d: readAvailableMessTlv(newTlv.getTlvData()); break; case 0x000a: setExtIp(newTlv.getTlvData()); break; case 0x000c: setIntIp(newTlv.getTlvData()); break; case 0x000f: setOnlTime(newTlv.getTlvData()); break; case 0x0003: setSignOn(newTlv.getTlvData()); break; case 0x0005: setregTime(newTlv.getTlvData()); break; case 0x0019: readShortCap(newTlv.getTlvLength(), newTlv.getTlvData()); break; default: break; } } quint16 treeBuddyItem::byteArrayToInt16(const QByteArray &array) const { bool ok; return array.toHex().toUInt(&ok,16); } void treeBuddyItem::changeStatus(const QByteArray &userStatus) { if ( userStatus.size() == 4 ) { QString status_name; isOffline = false; quint16 userstatus = static_cast(userStatus.at(2) * 0x100 + userStatus.at(3)); quint16 userFlags = static_cast(userStatus.at(0) * 0x100 + userStatus.at(1)); if ( userFlags & 0x0008 ) { birthDay = QDate::currentDate(); setBirthdayIcon(); } else { birthDay = QDate::currentDate().addMonths(2); setBirthdayIcon(); } contactStatus tmpStatus = status; idleSinceTime = 0; switch (userstatus) { case 0x0000: statusIconMethod = &statusIconClass::getOnlineIcon; status = contactOnline; status_name = "online"; break; case 0x0001: statusIconMethod = &statusIconClass::getAwayIcon; status = contactAway; idleSinceTime = QDateTime::currentDateTime().toTime_t(); status_name = "away"; break; case 0x0002: case 0x0013: statusIconMethod = &statusIconClass::getDoNotDisturbIcon; status = contactDnd; status_name = "dnd"; break; case 0x0004: case 0x0005: statusIconMethod = &statusIconClass::getNotAvailableIcon; status = contactNa; idleSinceTime = QDateTime::currentDateTime().toTime_t(); status_name = "na"; break; case 0x0010: case 0x0011: statusIconMethod = &statusIconClass::getOccupiedIcon; status = contactOccupied; status_name = "occupied"; break; case 0x0020: statusIconMethod = &statusIconClass::getFreeForChatIcon; status = contactFfc; status_name = "ffc"; break; case 0x0100: statusIconMethod = &statusIconClass::getInvisibleIcon; status = contactInvisible; status_name = "invisible"; break; case 0x2001: statusIconMethod = &statusIconClass::getLunchIcon; status = contactLunch; status_name = "lunch"; break; case 0x3000: statusIconMethod = &statusIconClass::getEvilIcon; status = contactEvil; status_name = "evil"; break; case 0x4000: statusIconMethod = &statusIconClass::getDepressionIcon; status = contactDepression; status_name = "depression"; break; case 0x5000: statusIconMethod = &statusIconClass::getAtHomeIcon; status = contactAtHome; status_name = "athome"; break; case 0x6000: statusIconMethod = &statusIconClass::getAtWorkIcon; status = contactAtWork; status_name = "atwork"; break; default: statusIconMethod = &statusIconClass::getOnlineIcon; status = contactOnline; status_name = "online"; } if ( status != tmpStatus ) { // setIcon(0, (statusIconClass::getInstance()->*statusIconMethod)()); // setText(3, QString::number(status)); setContactStatus((statusIconClass::getInstance()->*statusIconMethod)(), status_name, status); statusChanged = true; } else statusChanged = false; } setLastOnl(); } void treeBuddyItem::buddyOffline() { statusIconMethod = &statusIconClass::getOfflineIcon; // setIcon(0, (statusIconClass::getInstance()->*statusIconMethod)()); isOffline = true; status = contactOffline; // setText(3,QString::number(contactOffline)); setContactStatus(statusIconClass::getInstance()->getOfflineIcon(), "offline", 1000); setContactXStatus(QIcon()); xStatusCaption.clear(); xStatusMsg.clear(); xStatusMessage.clear(); xStatusIcon.clear(); clearRow(1); // waitingForAuth(authorizeMe); xStatusPresent = false; setLastOnl(); } void treeBuddyItem::readMessage() { // par->readMessageStack(); } void treeBuddyItem::setCapabilities(QByteArray capList) { capabilitiesList.clear(); int size = capList.length() / 16; for ( int i = 0; i < size; i++) { QByteArray capability = capList.right(16); capabilitiesList.append(capability); if (isUtf8Cap(capability)) { UTF8 = true; } if ( capability == QByteArray::fromHex("094613434c7f11d18222444553540000")) fileTransferSupport = true; if ( capability == QByteArray::fromHex("178c2d9bdaa545bb8ddbf3bdbd53a10a")) icqLite = true; capList = capList.left(capList.length() - 16); } } bool treeBuddyItem::isUtf8Cap(const QByteArray &utf8Cap) { bool ok; if ( utf8Cap.left(4).toHex().toUInt(&ok,16) == 0x0946134e ) { return true; } else return false; } bool treeBuddyItem::operator< ( const QTreeWidgetItem & other ) const { // // int column = treeWidget()->model()->headerData(0,Qt::Horizontal).toInt(); // if ( isOffline ) // { // QString myText = text(1).toUpper(); // QString otherText = other.text(1).toUpper(); // return myText < otherText; // } // else // { // if ( column == 3 ) // { // int myNumber = text(3).toInt(); // int otherNumber = other.text(3).toInt(); // return myNumber < otherNumber; // } else{ // QString myText = text(1).toUpper(); // QString otherText = other.text(1).toUpper(); // return myText < otherText; // } // } // TO-DO: Implement return false; } quint8 treeBuddyItem::byteArrayToInt8(const QByteArray &array) const { bool ok; return array.toHex().toUInt(&ok,16); } void treeBuddyItem::readAvailableMessTlv(QByteArray avTlv) { xStatusMessage.clear(); for ( ;avTlv.size(); ) { quint16 id = byteArrayToInt16(avTlv.left(2)); avTlv = avTlv.right(avTlv.size() - 2); picFlags = byteArrayToInt8(avTlv.left(1)); avTlv = avTlv.right(avTlv.size() - 1); quint8 length = byteArrayToInt8(avTlv.left(1)); avTlv = avTlv.right(avTlv.size() - 1); if ( id == 0x0002 && picFlags == 0x04 && length > 0 ) { avTlv = avTlv.right(avTlv.size() - 2); length -= 2; if ( avTlv.size() >= length ) { QString tmp_xstatus = QString::fromUtf8(avTlv.left(length)); if ( tmp_xstatus != xStatusCaption ) { xStatusMsg.clear(); xStatusCaption = tmp_xstatus; m_xstatus_changed = true; m_xstatus_already_readed = true; } } } else if ( id != 2 && id != 0x000e && length == 16 ) { avatarMd5Hash = avTlv.left(length); } if ( id == 0x000e ) { xStatusMessage = avTlv.left(length); } avTlv = avTlv.right(avTlv.size() - length); } } void treeBuddyItem::waitingForAuth(bool wait) { authorizeMe = wait; if ( wait ) { // TO-DO: Will be changed in future //setIcon(1, QIcon(":/icons/icq/auth.png")); // setIcon(1, statusIconClass::getInstance()->getConnectingIcon()); setCustomIcon(QIcon(":/icons/icq/auth.png"), 5); } else { // setIcon(1, QIcon()); setCustomIcon(QIcon(), 5); authMessage.clear(); } } QString treeBuddyItem::statToStr(contactStatus st) { switch(st){ case contactOnline: return statusIconClass::getInstance()->getStatusPath("online", "icq"); case contactFfc: return statusIconClass::getInstance()->getStatusPath("ffc", "icq"); case contactAway: return statusIconClass::getInstance()->getStatusPath("away", "icq"); case contactLunch: return statusIconClass::getInstance()->getStatusPath("lunch", "icq"); case contactAtWork: return statusIconClass::getInstance()->getStatusPath("atwork", "icq"); case contactAtHome: return statusIconClass::getInstance()->getStatusPath("athome", "icq"); case contactEvil: return statusIconClass::getInstance()->getStatusPath("evil", "icq"); case contactDepression: return statusIconClass::getInstance()->getStatusPath("depression", "icq"); case contactNa: return statusIconClass::getInstance()->getStatusPath("na", "icq"); case contactOccupied: return statusIconClass::getInstance()->getStatusPath("occupied", "icq"); case contactDnd: return statusIconClass::getInstance()->getStatusPath("dnd", "icq"); case contactInvisible: return statusIconClass::getInstance()->getStatusPath("invisible", "icq"); case contactOffline: return statusIconClass::getInstance()->getStatusPath("offline", "icq"); default: return ""; } } QString treeBuddyItem::createToolTip() { QString customToolTip; QString st = statToStr(status); customToolTip.append("
"); customToolTip.append(" " + Qt::escape(buddyName) + " (" + buddyUin + ")
"); if ( status != contactOffline ){ if ( !xStatusIcon.isEmpty() && (!xStatusCaption.isEmpty() || !xStatusMsg.isEmpty()) ) { customToolTip.append(" "); if ( !xStatusCaption.isEmpty()) customToolTip.append("" + Qt::escape(xStatusCaption).replace("\n","
") +"
"); if ( !xStatusMsg.isEmpty()) customToolTip.append(Qt::escape(xStatusMsg)); customToolTip.append("
"); // setTextToRow(" " + xStatusCaption + " - " + xStatusMsg , 2); } } if ( externalIP ) { customToolTip.append(QObject::tr("External ip: %1.%2.%3.%4
").arg(externalIP / 0x1000000).arg( externalIP % 0x1000000 / 0x10000).arg( externalIP % 0x10000 / 0x100).arg(externalIP % 0x100)); } if ( internalIP ) { customToolTip.append(QObject::tr("Internal ip: %1.%2.%3.%4
").arg(internalIP / 0x1000000).arg( internalIP % 0x1000000 / 0x10000).arg( internalIP % 0x10000 / 0x100).arg(internalIP % 0x100)); } if ( status != contactOffline ) { QDateTime time = QDateTime::currentDateTime(); time = time.addSecs(-onlineTime); time = time.toUTC(); customToolTip.append(QObject::tr("Online time: %1d %2h %3m %4s
").arg(time.date().day() - 1).arg( time.time().hour()).arg(time.time().minute()).arg(time.time().second())); time.setTime_t(signonTime); customToolTip.append(QObject::tr("Signed on: %1
").arg(time.toLocalTime().toString("hh:mm:ss dd/MM/yyyy"))); if ( idleSinceTime ) { time.setTime_t(idleSinceTime); if (status == contactAway) customToolTip.append(QObject::tr("Away since: %1
").arg(time.toLocalTime().toString("hh:mm:ss dd/MM/yyyy"))); else if (status == contactNa) customToolTip.append(QObject::tr("N/A since: %1
").arg(time.toLocalTime().toString("hh:mm:ss dd/MM/yyyy"))); } time.setTime_t(regTime); customToolTip.append(QObject::tr("Reg. date: %1
").arg(time.toString("hh:mm:ss dd/MM/yyyy"))); customToolTip.append(QObject::tr("Possible client: %1
").arg(clientId)); } else if(lastonlineTime !=0) { QDateTime time; // time = time.toUTC(); time.setTime_t(lastonlineTime); customToolTip.append(QObject::tr("Last Online: %1").arg(time.toString("hh:mm:ss dd/MM/yyyy"))); } customToolTip.append("
"); if ( avatarMd5Hash.length() == 16 ) { QString avatarPath = iconPath + avatarMd5Hash.toHex(); if ( QFile::exists(avatarPath)) customToolTip.append(""); } customToolTip.append("
"); return customToolTip; } quint32 treeBuddyItem::convertToInt32(const QByteArray &array) const { bool ok; return array.toHex().toULong(&ok,16); } void treeBuddyItem::setExtIp(const QByteArray &array) { externalIP = convertToInt32(array); } void treeBuddyItem::setIntIp(const QByteArray &array) { internalIP = convertToInt32(array.left(4)); userPort = convertToInt32(array.left(8).right(4)); protocolVersion = (quint8)array.at(10); Cookie = convertToInt32(array.left(15).right(4)); lastInfoUpdate = convertToInt32(array.left(27).right(4)); lastExtStatusInfoUpdate = convertToInt32(array.left(31).right(4)); lastExtInfoUpdate = convertToInt32(array.left(35).right(4)); } void treeBuddyItem::setOnlTime(const QByteArray &array) { onlineTime = QDateTime::currentDateTime().toTime_t() - convertToInt32(array); } void treeBuddyItem::setLastOnl() { QDateTime curr_time = QDateTime::currentDateTime(); lastonlineTime = curr_time.toTime_t(); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+parentUin, "contactlist"); settings.beginGroup(buddyUin); settings.setValue("lastonline", lastonlineTime); } void treeBuddyItem::setSignOn(const QByteArray &array) { signonTime = convertToInt32(array); } void treeBuddyItem::setregTime(const QByteArray &array) { regTime = convertToInt32(array); } void treeBuddyItem::readShortCap(quint16 length, const QByteArray &array) { shortCaps.clear(); m_channel_two_support = false; fileTransferSupport = false; for(;length; length -= 2) { quint16 cap = byteArrayToInt16(array.left(length).right(2)); shortCaps.append(cap); if ( cap == 0x134e) UTF8 = true; else if (cap == 0x1343) fileTransferSupport = true; // icqLite = (cap == 0x1343); else if ( cap == 0x1349 ) m_channel_two_support = true; } } void treeBuddyItem::setIdleSinceTime(quint16 length, const QByteArray &array) { if (length == 2) { QDateTime curr_time = QDateTime::currentDateTime(); curr_time = curr_time.addSecs((-60) * convertToInt32(array)); idleSinceTime = curr_time.toTime_t(); } else { idleSinceTime = 0; } } void treeBuddyItem::setContactStatus(const QIcon &status_icon, const QString &status_name, int mass) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = parentUin; contact_item.m_item_name = buddyUin; contact_item.m_parent_name = groupID?QString::number(groupID):""; contact_item.m_item_type = 0; m_icq_plugin_system.setContactItemStatus(contact_item, status_icon, status_name, mass); setLastOnl(); } void treeBuddyItem::setContactXStatus(const QIcon &xstatus_icon) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = parentUin; contact_item.m_item_name = buddyUin; contact_item.m_parent_name = groupID?QString::number(groupID):""; contact_item.m_item_type = 0; if ( m_show_xstatus_icon ) m_icq_plugin_system.setContactItemIcon(contact_item, xstatus_icon, 4); else m_icq_plugin_system.setContactItemIcon(contact_item, QIcon(), 4); } void treeBuddyItem::setCustomIcon(const QIcon &icon, int position) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = parentUin; contact_item.m_item_name = buddyUin; contact_item.m_parent_name = groupID?QString::number(groupID):""; contact_item.m_item_type = 0; m_icq_plugin_system.setContactItemIcon(contact_item, icon, position); } void treeBuddyItem::setNotAuthorizated(bool authflag) { notAutho = authflag; if(notAutho && m_show_auth_icon ) setCustomIcon(IcqPluginSystem::instance().getIcon("auth"), 8); else setCustomIcon(QIcon(), 8); } void treeBuddyItem::setAvatarHash(const QByteArray &hash) { avatarMd5Hash = hash; QString avatarPath = iconPath + avatarMd5Hash.toHex(); if ( QFile::exists(avatarPath)) setCustomIcon(QIcon(avatarPath),1); else setCustomIcon(QIcon(),1); } void treeBuddyItem::setClientIcon(const QIcon &client_icon) { setCustomIcon(client_icon, 12); } void treeBuddyItem::setTextToRow(const QString &text, int position) { if(!text.isEmpty()) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = parentUin; contact_item.m_item_name = buddyUin; contact_item.m_parent_name = groupID?QString::number(groupID):""; contact_item.m_item_type = 0; QList text_list; text_list.append(text); m_icq_plugin_system.setContactItemRow(contact_item, text_list, position); } else clearRow(1); } void treeBuddyItem::clearRow(int position) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = parentUin; contact_item.m_item_name = buddyUin; contact_item.m_parent_name = groupID?QString::number(groupID):""; contact_item.m_item_type = 0; QList list; m_icq_plugin_system.setContactItemRow(contact_item, list, position); } void treeBuddyItem::setBirthdayIcon() { if ( birthDay == QDate::currentDate() && m_show_birthday_icon ) setCustomIcon(IcqPluginSystem::instance().getIcon("birthday"),3); else setCustomIcon(QIcon(),3); } void treeBuddyItem::setName(const QString &n) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = parentUin; contact_item.m_item_name = buddyUin; contact_item.m_parent_name = groupID?QString::number(groupID):""; contact_item.m_item_type = 0; buddyName = n; m_icq_plugin_system.setContactItemName(contact_item, buddyName); } void treeBuddyItem::updateIcons() { setContactXStatus(QIcon(xStatusIcon)); setBirthdayIcon(); if(notAutho && m_show_auth_icon) setCustomIcon(IcqPluginSystem::instance().getIcon("auth"), 8); else setCustomIcon(QIcon(), 8); if (m_show_vis_icon && m_visible_contact ) { setCustomIcon(m_icq_plugin_system.getIcon("visible"),5); } else { setCustomIcon(QIcon(),5); } if (m_show_invis_icon && m_invisible_contact ) { setCustomIcon(m_icq_plugin_system.getIcon("privacy"),6); } else { setCustomIcon(QIcon(),6); } if (m_show_ignore_icon && m_ignore_contact ) { setCustomIcon(m_icq_plugin_system.getIcon("ignorelist"),7); } else { setCustomIcon(QIcon(),7); } setXstatusText(); } void treeBuddyItem::setXstatusText() { if ( m_show_xstatus_text ) { // if ( status != contactOffline ){ if ( !xStatusIcon.trimmed().isEmpty() && (!xStatusCaption.trimmed().isEmpty() || !xStatusMsg.trimmed().isEmpty()) ) { QString tmp_xstatus; if ( !xStatusCaption.trimmed().isEmpty()) { tmp_xstatus.append(xStatusCaption); if ( !xStatusMsg.trimmed().isEmpty() ) tmp_xstatus.append(" - "); } if ( !xStatusMsg.trimmed().isEmpty()) tmp_xstatus.append(xStatusMsg); setTextToRow(" " + tmp_xstatus.replace("\n", " "), 1); } else clearRow(1); // } // else // clearRow(1); } else clearRow(1); } void treeBuddyItem::setXstatusCaptionAndMessage(const QString &caption, const QString &message) { m_xstatus_changed = false; if ( ( !caption.trimmed().isEmpty() || !message.trimmed().isEmpty() ) && ( caption != xStatusCaption || message != xStatusMsg ) ) { xStatusCaption = caption; xStatusMsg = message; m_xstatus_changed = true; m_xstatus_already_readed = true; } } qutim-0.2.0/plugins/icq/passworddialog.h0000644000175000017500000000257511273054317021760 0ustar euroelessareuroelessar/* passwordDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 PASSWORDDIALOG_H #define PASSWORDDIALOG_H #include #include #include #include "ui_passworddialog.h" class passwordDialog : public QDialog { Q_OBJECT public: passwordDialog(QWidget *parent = 0); ~passwordDialog(); void rellocateDialogToCenter(QWidget *widget); QString getPass() { return password; } bool getSavePass() { return savePassword; } void setTitle(const QString&); private slots: void okEnable(const QString &); void savePass(int flag) { savePassword = flag; } private: Ui::passwordDialogClass ui; void resetSettings(); QString password; bool savePassword; }; #endif // PASSWORDDIALOG_H qutim-0.2.0/plugins/icq/snacchannel.h0000644000175000017500000000641511273054317021210 0ustar euroelessareuroelessar/* snacChannel Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 SNACCHANNEL_H_ #define SNACCHANNEL_H_ #include #include "quticqglobals.h" class QTcpSocket; class QHostAddress; class icqBuffer; class snacChannel : public QObject { Q_OBJECT public: snacChannel(QTcpSocket *, icqBuffer *,quint16, const QString &, const QString &profile_name, QObject *parent = 0); ~snacChannel(); void sendIdent(const quint16 &); void readData(const quint16); void md5Login(const QString &, const QString &, const quint16 &); void incFlap(); void setStatus(accountStatus s) { status = s; } void changeStatus(accountStatus); quint32 snacReqId; quint16 reqSeq; quint16 flapSequence; void resendCapabilities(); void sendOnlyCapabilities(); void setConnectBOS(bool bos) { m_connect_bos=bos; resetReqSnaqId(); } signals: void incFlapSeq(); void incReqSeq(); void rereadSocket(); void sendAuthKey(const QByteArray &); void systemMessage(const QString &); void userMessage(const QString &); void sendBosServer(const QHostAddress &); void sendBosPort(const quint16 &); void sendCookie(const QByteArray); void connected(); void getList(bool); void oncomingBuddy(const QString &, quint16); void offlineBuddy(const QString &, quint16); void getMessage(quint16); void getOfflineMessage(quint16 length); void readMetaData(quint16, bool); void getTypingNotif(quint16); void readSSTserver(quint16); void blockRateLimit(); void getStatusCheck(quint16); void getModifyItemFromServer(quint16); void youWereAdded(quint16); void getUploadIconData(quint16); void getAwayMessage(quint16); void getAuthorizationRequest(quint16); void authorizationAcceptedAnswer(quint16); void getMessageAck(quint16); void clearPrivacyLists(); private slots: quint32 returnSnacReqId(); void resetReqSnaqId() { snacReqId = 0x00000000; } void incReq() { reqSeq++;} private: void getMetaData(bool); void getServerLoginReply(quint16 &); void readAuthKey(quint16 &); void errorMessage(const quint16); void getServicesList(quint16 &); void clientRatesRequest(); void serverRateLimitInfo(quint16 &); void getContactList(quint16 &,bool); void getOncomingBuddy(quint16 &); void getOfflineBuddy(quint16 &); QByteArray convertToByteArray(const quint8 &); QByteArray convertToByteArray(const quint16 &); QByteArray convertToByteArray(const quint32 &); quint16 convertToInt16(const QByteArray &); quint8 convertToInt8(const QByteArray &); quint32 convertToInt32(const QByteArray &); QString icqUin; QTcpSocket *tcpSocket; icqBuffer *socket; accountStatus status; QString m_profile_name; bool m_connect_bos; }; #endif /*SNACCHANNEL_H_*/ qutim-0.2.0/plugins/icq/clientIdentification.h0000644000175000017500000000324311273054317023057 0ustar euroelessareuroelessar/* clientIdentification Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 CLIENTIDENTIFICATION_H_ #define CLIENTIDENTIFICATION_H_ #include "tlv.h" // extern const quint16 sequences[]; // extern const quint32 sequences_num; class clientIdentification { public: clientIdentification(const QString &uin, const QString &profile_name); ~clientIdentification(); void setProcolVersion(const QByteArray &protocol) { protocolVersion = protocol; } void setScreenName(const QString &account) { screenName.setData(account); } void setPassword(const QString &); void setClientName(const QString &client) { clientName.setData(client); } void sendPacket(QTcpSocket *); private: QByteArray flapLength(); QByteArray getSeqNumber() const; QByteArray getBytePacket() const; QByteArray protocolVersion; tlv screenName; tlv password; tlv clientName; tlv clientID; tlv clientMajor; tlv clientMinor; tlv clientLesser; tlv clientBuild; tlv distributionNumber; tlv clientLanguage; tlv clientCountry; }; #endif /*CLIENTIDENTIFICATION_H_*/ qutim-0.2.0/plugins/icq/privacylistwindow.h0000644000175000017500000000312611273054317022530 0ustar euroelessareuroelessar/* privacyListWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 PRIVACYLISTWINDOW_H #define PRIVACYLISTWINDOW_H #include #include "ui_privacylistwindow.h" class privacyListWindow : public QWidget { Q_OBJECT public: privacyListWindow(const QString &, const QString &profile_name, QWidget *parent = 0); ~privacyListWindow(); void rellocateDialogToCenter(QWidget *widget); void createLists(); void setOnline(bool); private slots: void on_visibleTreeWidget_itemClicked(QTreeWidgetItem * , int ); void on_invisibleTreeWidget_itemClicked(QTreeWidgetItem * , int ); void on_ignoreTreeWidget_itemClicked(QTreeWidgetItem * , int ); signals: void openInfo(const QString &, const QString &, const QString &, const QString &); void deleteFromPrivacyList(const QString &, int); private: Ui::privacyListWindowClass ui; QPoint desktopCenter(); QString accountUin; QString m_profile_name; }; #endif // PRIVACYLISTWINDOW_H qutim-0.2.0/plugins/icq/settings/0000755000175000017500000000000011273101010020373 5ustar euroelessareuroelessarqutim-0.2.0/plugins/icq/settings/contactsettings.cpp0000644000175000017500000000570511273054317024343 0ustar euroelessareuroelessar/* ContactSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "contactsettings.h" #include ContactSettings::ContactSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_profile_name(profile_name) { ui.setupUi(this); changed = false; loadSettings(); connect( ui.xstatusBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.birthBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.authBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.visBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.invisBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.ignoreBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.xstatusTextBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); } ContactSettings::~ContactSettings() { } void ContactSettings::loadSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.beginGroup("contacts"); ui.xstatusBox->setChecked(settings.value("xstaticon", true).toBool()); ui.birthBox->setChecked(settings.value("birthicon", true).toBool()); ui.authBox->setChecked(settings.value("authicon", true).toBool()); ui.visBox->setChecked(settings.value("visicon", true).toBool()); ui.invisBox->setChecked(settings.value("invisicon", true).toBool()); ui.ignoreBox->setChecked(settings.value("ignoreicon", true).toBool()); ui.xstatusTextBox->setChecked(settings.value("xstattext", true).toBool()); settings.endGroup(); } void ContactSettings::saveSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.beginGroup("contacts"); settings.setValue("xstaticon", ui.xstatusBox->isChecked()); settings.setValue("birthicon", ui.birthBox->isChecked()); settings.setValue("authicon", ui.authBox->isChecked()); settings.setValue("visicon", ui.visBox->isChecked()); settings.setValue("invisicon", ui.invisBox->isChecked()); settings.setValue("ignoreicon", ui.ignoreBox->isChecked()); settings.setValue("xstattext", ui.xstatusTextBox->isChecked()); settings.endGroup(); if ( changed ) emit settingsSaved(); changed = false; } qutim-0.2.0/plugins/icq/settings/icqsettings.ui0000644000175000017500000003561111273054317023316 0ustar euroelessareuroelessar icqSettingsClass 0 0 652 426 icqSettings 0 0 :/icons/crystal_project/settings.png:/icons/crystal_project/settings.png Main 4 Don't send requests for avatarts Reconnect after disconnect Client ID: qutIM ICQ 6 ICQ 5.1 ICQ 5 ICQ Lite 4 ICQ 2003b Pro ICQ 2002/2003a Mac ICQ QIP 2005 QIP Infium - Protocol version: false 1 1000 Qt::Horizontal 558 20 QFrame::NoFrame Client capability list: 32 32 32 Qt::Vertical 620 356 :/icons/crystal_project/advanced.png:/icons/crystal_project/advanced.png Advanced 4 Account button and tray icon 4 Show main status icon Show custom status icon Show last choosen Codepage: (note that online messages use utf-8 in most cases) 47 Apple Roman Big5 Big5-HKSCS EUC-JP EUC-KR GB18030-0 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 ISO 8859-16 Iscii-Bng Iscii-Dev Iscii-Gjr Iscii-Knd Iscii-Mlm Iscii-Ori Iscii-Pnj Iscii-Tlg Iscii-Tml JIS X 0201 JIS X 0208 KOI8-R KOI8-U MuleLao-1 ROMAN8 Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 WINSAMI2 Qt::Vertical 20 155 qutim-0.2.0/plugins/icq/settings/icqsettings.h0000644000175000017500000000246411273054317023130 0ustar euroelessareuroelessar/* icqSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ICQSETTINGS_H #define ICQSETTINGS_H #include #include #include "ui_icqsettings.h" class icqSettings : public QWidget { Q_OBJECT public: icqSettings(const QString &profile_name, QWidget *parent = 0); ~icqSettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } void clientIndexChanged(int); signals: void settingsChanged(); void settingsSaved(); private: Ui::icqSettingsClass ui; bool changed; QString m_profile_name; }; #endif // ICQSETTINGS_H qutim-0.2.0/plugins/icq/settings/networksettings.cpp0000644000175000017500000001205611273054317024376 0ustar euroelessareuroelessar/* networkSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "networksettings.h" networkSettings::networkSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_profile_name(profile_name) { ui.setupUi(this); changed = false; connect( ui.typeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(proxyTypeChanged(int))); loadSettings(); connect (ui.hostEdit, SIGNAL(textChanged(const QString&)), this, SLOT(widgetStateChanged())); connect (ui.portBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.keepAliveBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.secureBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.typeBox , SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.proxyHostEdit, SIGNAL(textChanged(const QString&)), this, SLOT(widgetStateChanged())); connect (ui.proxyPortBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.authBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.userNameEdit , SIGNAL(textChanged(const QString&)), this, SLOT(widgetStateChanged())); connect (ui.userPasswordEdit , SIGNAL(textChanged(const QString&)), this, SLOT(widgetStateChanged())); connect( ui.useProxyBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.listenPortBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); } networkSettings::~networkSettings() { } void networkSettings::loadSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); ui.secureBox->setChecked(settings.value("connection/md5", true).toBool()); ui.hostEdit->setText(settings.value("connection/host", "login.icq.com").toString()); ui.portBox->setValue(settings.value("connection/port", 5190).toInt()); ui.typeBox->setCurrentIndex(settings.value("proxy/proxyType", 0).toInt()); ui.proxyHostEdit->setText(settings.value("proxy/host", "").toString()); ui.proxyPortBox->setValue(settings.value("proxy/port", 1).toInt()); ui.authBox->setChecked(settings.value("proxy/auth", false).toBool()); if ( ui.authBox->isChecked() ) { ui.userNameEdit->setEnabled(true); ui.userPasswordEdit->setEnabled(true); } ui.userNameEdit->setText(settings.value("proxy/user", "").toString()); ui.userPasswordEdit->setText(settings.value("proxy/pass", "").toString()); ui.keepAliveBox->setChecked(settings.value("connection/alive", true).toBool()); ui.useProxyBox->setChecked(settings.value("connection/useproxy", false).toBool()); ui.listenPortBox->setValue(settings.value("connection/listen", 5191).toUInt()); } void networkSettings::saveSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.setValue("connection/md5", ui.secureBox->isChecked()); if ( ui.hostEdit->text().trimmed() != "" ) settings.setValue("connection/host", ui.hostEdit->text()); else settings.remove("connection/host"); settings.setValue("connection/port", ui.portBox->value()); settings.setValue("proxy/proxyType", ui.typeBox->currentIndex()); if ( ui.proxyHostEdit->isEnabled() && ui.proxyHostEdit->text().trimmed() != "" ) settings.setValue("proxy/host", ui.proxyHostEdit->text()); else settings.remove("proxy/host"); if ( ui.proxyPortBox->isEnabled() ) settings.setValue("proxy/port", ui.proxyPortBox->value()); else settings.remove("proxy/port"); if ( ui.authBox->isChecked() ) { settings.setValue("proxy/auth", true); settings.setValue("proxy/user", ui.userNameEdit->text()); settings.setValue("proxy/pass", ui.userPasswordEdit->text()); } else { settings.remove("proxy/auth"); settings.remove("proxy/user"); settings.remove("proxy/pass"); } settings.setValue("connection/alive", ui.keepAliveBox->isChecked()); settings.setValue("connection/useproxy", ui.useProxyBox->isChecked()); settings.setValue("connection/listen", ui.listenPortBox->value()); if ( changed ) emit settingsSaved(); changed = false; } void networkSettings::proxyTypeChanged(int index) { if ( index ) { ui.proxyHostEdit->setEnabled(true); ui.proxyPortBox->setEnabled(true); ui.authBox->setEnabled(true); } else { ui.proxyHostEdit->setEnabled(false); ui.proxyPortBox->setEnabled(false); ui.authBox->setEnabled(false); ui.authBox->setChecked(false); } } qutim-0.2.0/plugins/icq/settings/networksettings.h0000644000175000017500000000252311273054317024041 0ustar euroelessareuroelessar/* networkSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 NETWORKSETTINGS_H #define NETWORKSETTINGS_H #include #include #include "ui_networksettings.h" class networkSettings : public QWidget { Q_OBJECT public: networkSettings(const QString &profile_name, QWidget *parent = 0); ~networkSettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } void proxyTypeChanged( int ); signals: void settingsChanged(); void settingsSaved(); private: Ui::networkSettingsClass ui; bool changed; QString m_profile_name; }; #endif // NETWORKSETTINGS_H qutim-0.2.0/plugins/icq/settings/contactsettings.ui0000644000175000017500000000564511273054317024201 0ustar euroelessareuroelessar ContactSettingsClass 0 0 664 583 ContactSettings 0 QFrame::StyledPanel QFrame::Raised 4 Show contact xStatus icon Show birthday/happy icon Show not authorized icon Show "visible" icon if contact in visible list Show "invisible" icon if contact in invisible list Show "ignore" icon if contact in ignore list Show contact's xStatus text in contact list Qt::Vertical 20 388 qutim-0.2.0/plugins/icq/settings/statussettings.cpp0000644000175000017500000002124611273054317024231 0ustar euroelessareuroelessar/* statusSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "statussettings.h" statusSettings::statusSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_profile_name(profile_name) { ui.setupUi(this); changed = false; currentStatusIndex = 0; loadSettings(); connect (ui.webawareBox , SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.contactToolTip , SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.notifyBox , SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.customStatusBox , SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect (ui.messageWinBox , SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); // connect (ui.statusBox , SIGNAL(currentIndexChanged ( int )), // this, SLOT(widgetStateChanged())); connect (ui.statusBox , SIGNAL(currentIndexChanged ( int )), this, SLOT(statusEditChanged(int))); connect (ui.statusEdit , SIGNAL(textChanged ()), this, SLOT(widgetStateChanged())); } statusSettings::~statusSettings() { } void statusSettings::loadSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.beginGroup("statuses"); ui.webawareBox->setChecked(settings.value("webaware", false).toBool()); ui.contactToolTip->setChecked(settings.value("xstattool", true).toBool()); ui.customStatusBox->setChecked(settings.value("customstat", true).toBool()); ui.notifyBox->setChecked(settings.value("notify", true).toBool()); settings.endGroup(); settings.beginGroup("autoreply"); awayDontShow = settings.value("awaydshow", false).toBool(); awayMessage = settings.value("awaymsg","").toString(); lunchDontShow = settings.value("lunchdshow", false).toBool(); lunchMessage = settings.value("lunchmsg","").toString(); evilDontShow = settings.value("evildshow", false).toBool(); evilMessage = settings.value("evilmsg","").toString(); depressionDontShow = settings.value("depressiondshow", false).toBool(); depressionMessage = settings.value("depressionmsg","").toString(); atHomeDontShow = settings.value("athomedshow", false).toBool(); atHomeMessage = settings.value("athomemsg","").toString(); atWorkDontShow = settings.value("atworkdshow", false).toBool(); atWorkMessage = settings.value("atworkmsg","").toString(); naDontShow = settings.value("nadshow", false).toBool(); naMessage = settings.value("namsg","").toString(); occupiedDontShow = settings.value("occupieddshow", false).toBool(); occupiedMessage = settings.value("occupiedmsg","").toString(); dndDontShow = settings.value("dnddshow", false).toBool(); dndMessage = settings.value("dndmsg","").toString(); settings.endGroup(); ui.messageWinBox->setChecked(awayDontShow); ui.statusEdit->setPlainText(awayMessage); } void statusSettings::saveSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.beginGroup("statuses"); settings.setValue("webaware", ui.webawareBox->isChecked()); settings.setValue("xstattool", ui.contactToolTip->isChecked()); settings.setValue("customstat", ui.customStatusBox->isChecked()); settings.setValue("notify", ui.notifyBox->isChecked()); settings.endGroup(); switch( currentStatusIndex ) { case 0: awayDontShow = ui.messageWinBox->isChecked(); awayMessage = ui.statusEdit->toPlainText(); break; case 1: lunchDontShow = ui.messageWinBox->isChecked(); lunchMessage = ui.statusEdit->toPlainText(); break; case 2: evilDontShow = ui.messageWinBox->isChecked(); evilMessage = ui.statusEdit->toPlainText(); break; case 3: depressionDontShow = ui.messageWinBox->isChecked(); depressionMessage = ui.statusEdit->toPlainText(); break; case 4: atHomeDontShow = ui.messageWinBox->isChecked(); atHomeMessage = ui.statusEdit->toPlainText(); break; case 5: atWorkDontShow = ui.messageWinBox->isChecked(); atWorkMessage = ui.statusEdit->toPlainText(); break; case 6: naDontShow = ui.messageWinBox->isChecked(); naMessage = ui.statusEdit->toPlainText(); break; case 7: occupiedDontShow = ui.messageWinBox->isChecked(); occupiedMessage = ui.statusEdit->toPlainText(); break; case 8: dndDontShow = ui.messageWinBox->isChecked(); dndMessage = ui.statusEdit->toPlainText(); break; default: awayDontShow = ui.messageWinBox->isChecked(); awayMessage = ui.statusEdit->toPlainText(); } settings.beginGroup("autoreply"); settings.setValue("awaydshow", awayDontShow ); settings.setValue("awaymsg", awayMessage.left(1000)); settings.setValue("lunchdshow", lunchDontShow ); settings.setValue("lunchmsg", lunchMessage.left(1000)); settings.setValue("evildshow", evilDontShow ); settings.setValue("evilmsg", evilMessage.left(1000)); settings.setValue("depressiondshow", depressionDontShow ); settings.setValue("depressionmsg", depressionMessage.left(1000)); settings.setValue("athomedshow", atHomeDontShow ); settings.setValue("athomemsg", atHomeMessage.left(1000)); settings.setValue("atworkdshow", atWorkDontShow ); settings.setValue("atworkmsg", atWorkMessage.left(1000)); settings.setValue("nadshow", naDontShow ); settings.setValue("namsg", naMessage.left(1000)); settings.setValue("occupieddshow", occupiedDontShow ); settings.setValue("occupiedmsg", occupiedMessage.left(1000)); settings.setValue("dnddshow", dndDontShow ); settings.setValue("dndmsg", dndMessage.left(1000)); settings.endGroup(); if ( changed ) emit settingsSaved(); changed = false; } void statusSettings::statusEditChanged(int index) { switch( currentStatusIndex ) { case 0: awayDontShow = ui.messageWinBox->isChecked(); awayMessage = ui.statusEdit->toPlainText(); break; case 1: lunchDontShow = ui.messageWinBox->isChecked(); lunchMessage = ui.statusEdit->toPlainText(); break; case 2: evilDontShow = ui.messageWinBox->isChecked(); evilMessage = ui.statusEdit->toPlainText(); break; case 3: depressionDontShow = ui.messageWinBox->isChecked(); depressionMessage = ui.statusEdit->toPlainText(); break; case 4: atHomeDontShow = ui.messageWinBox->isChecked(); atHomeMessage = ui.statusEdit->toPlainText(); break; case 5: atWorkDontShow = ui.messageWinBox->isChecked(); atWorkMessage = ui.statusEdit->toPlainText(); break; case 6: naDontShow = ui.messageWinBox->isChecked(); naMessage = ui.statusEdit->toPlainText(); break; case 7: occupiedDontShow = ui.messageWinBox->isChecked(); occupiedMessage = ui.statusEdit->toPlainText(); break; case 8: dndDontShow = ui.messageWinBox->isChecked(); dndMessage = ui.statusEdit->toPlainText(); break; default: awayDontShow = ui.messageWinBox->isChecked(); awayMessage = ui.statusEdit->toPlainText(); } switch( index ) { case 0: ui.messageWinBox->setChecked(awayDontShow); ui.statusEdit->setPlainText(awayMessage); break; case 1: ui.messageWinBox->setChecked(lunchDontShow); ui.statusEdit->setPlainText(lunchMessage); break; case 2: ui.messageWinBox->setChecked(evilDontShow); ui.statusEdit->setPlainText(evilMessage); break; case 3: ui.messageWinBox->setChecked(depressionDontShow); ui.statusEdit->setPlainText(depressionMessage); break; case 4: ui.messageWinBox->setChecked(atHomeDontShow); ui.statusEdit->setPlainText(atHomeMessage); break; case 5: ui.messageWinBox->setChecked(atWorkDontShow); ui.statusEdit->setPlainText(atWorkMessage); break; case 6: ui.messageWinBox->setChecked(naDontShow); ui.statusEdit->setPlainText(naMessage); break; case 7: ui.messageWinBox->setChecked(occupiedDontShow); ui.statusEdit->setPlainText(occupiedMessage); break; case 8: ui.messageWinBox->setChecked(dndDontShow); ui.statusEdit->setPlainText(dndMessage); break; default: ui.messageWinBox->setChecked(awayDontShow); ui.statusEdit->setPlainText(awayMessage); } currentStatusIndex = index; } qutim-0.2.0/plugins/icq/settings/contactsettings.h0000644000175000017500000000243211273054317024002 0ustar euroelessareuroelessar/* ContactSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 CONTACTSETTINGS_H #define CONTACTSETTINGS_H #include #include "ui_contactsettings.h" class ContactSettings : public QWidget { Q_OBJECT public: ContactSettings(const QString &profile_name, QWidget *parent = 0); ~ContactSettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } signals: void settingsChanged(); void settingsSaved(); private: Ui::ContactSettingsClass ui; bool changed; QString m_profile_name; }; #endif // CONTACTSETTINGS_H qutim-0.2.0/plugins/icq/settings/.directory0000644000175000017500000000010511273054317022415 0ustar euroelessareuroelessar[Dolphin] Timestamp=2008,10,9,14,56,34 [Settings] ShowDotFiles=true qutim-0.2.0/plugins/icq/settings/statussettings.ui0000644000175000017500000000776711273054317024100 0ustar euroelessareuroelessar statusSettingsClass 0 0 532 472 statusSettings 0 QFrame::StyledPanel QFrame::Raised 4 Allow other to view my status from the Web Add additional statuses to status menu Ask for xStauses automatically Notify about reading your status 0 0 Away Lunch Evil Depression At home At work N/A Occupied DND 0 0 Don't show autoreply dialog QTextEdit::NoWrap false qutim-0.2.0/plugins/icq/settings/networksettings.ui0000644000175000017500000002622411273054317024233 0ustar euroelessareuroelessar networkSettingsClass 0 0 456 426 networkSettings 0 0 :/icons/crystal_project/connection.png:/icons/crystal_project/connection.png Connection 4 Server 4 150 0 login.icq.com 1 65535 5190 Port: Host: Qt::Horizontal 40 20 Keep connection alive Secure login Proxy connection 0 Listen port for file transfer: 0 0 1024 65535 5191 Qt::Horizontal 40 20 Qt::Vertical 360 181 :/icons/crystal_project/proxy.png:/icons/crystal_project/proxy.png Proxy 4 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Type: 140 0 None HTTP SOCKS 5 Host: false Port: false 1 65535 Qt::Horizontal 40 20 false Authentication Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter User name: Password: false false QLineEdit::Password Qt::Vertical 20 40 authBox clicked(bool) userNameEdit setEnabled(bool) 110 177 132 205 authBox clicked(bool) userPasswordEdit setEnabled(bool) 75 178 168 237 qutim-0.2.0/plugins/icq/settings/statussettings.h0000644000175000017500000000343411273054317023675 0ustar euroelessareuroelessar/* statusSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 STATUSSETTINGS_H #define STATUSSETTINGS_H #include #include "ui_statussettings.h" class statusSettings : public QWidget { Q_OBJECT public: statusSettings(const QString &profile_name,QWidget *parent = 0); ~statusSettings(); void loadSettings(); void saveSettings(); private slots: void widgetStateChanged() { changed = true; emit settingsChanged(); } void statusEditChanged(int); signals: void settingsChanged(); void settingsSaved(); private: Ui::statusSettingsClass ui; bool changed; bool awayDontShow; bool lunchDontShow; bool evilDontShow; bool depressionDontShow; bool atHomeDontShow; bool atWorkDontShow; bool naDontShow; bool occupiedDontShow; bool dndDontShow; QString awayMessage; QString lunchMessage; QString evilMessage; QString depressionMessage; QString atHomeMessage; QString atWorkMessage; QString naMessage; QString occupiedMessage; QString dndMessage; int currentStatusIndex; QString m_profile_name; }; #endif // STATUSSETTINGS_H qutim-0.2.0/plugins/icq/settings/icqsettings.cpp0000644000175000017500000001156511273054317023465 0ustar euroelessareuroelessar/* icqSettings Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "icqsettings.h" #include "../icqpluginsystem.h" icqSettings::icqSettings(const QString &profile_name, QWidget *parent) : QWidget(parent), m_profile_name(profile_name) { ui.setupUi(this); changed = false; QRegExp rx("[ABCDEFabcdef0123456789]{32,32}"); QValidator *validator = new QRegExpValidator(rx, this); ui.capEdit1->setValidator(validator); ui.capEdit2->setValidator(validator); ui.capEdit3->setValidator(validator); loadSettings(); connect( ui.avatarBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.reconnectBox, SIGNAL(stateChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.clientComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.clientComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(clientIndexChanged(int))); connect( ui.codepageBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.protocolNumBox, SIGNAL(valueChanged(int)), this, SLOT(widgetStateChanged())); connect( ui.capEdit1, SIGNAL(textEdited ( const QString & )), this, SLOT(widgetStateChanged())); connect( ui.capEdit2, SIGNAL(textEdited ( const QString & )), this, SLOT(widgetStateChanged())); connect( ui.capEdit3, SIGNAL(textEdited ( const QString & )), this, SLOT(widgetStateChanged())); connect(ui.mainIconRadio,SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(ui.xIconRadio,SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); connect(ui.lastIconRadio,SIGNAL(toggled(bool)), this, SLOT(widgetStateChanged())); ui.tabWidget->setTabIcon(0, IcqPluginSystem::instance().getIcon("settings")); ui.tabWidget->setTabIcon(1, IcqPluginSystem::instance().getIcon("advanced")); } icqSettings::~icqSettings() { } void icqSettings::loadSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); ui.avatarBox->setChecked(settings.value("connection/disavatars", false).toBool()); ui.reconnectBox->setChecked(settings.value("connection/reconnect", true).toBool()); settings.beginGroup("clientid"); ui.clientComboBox->setCurrentIndex(settings.value("index", 0).toUInt()); ui.protocolNumBox->setValue(settings.value("protocol", 1).toUInt()); ui.capEdit1->setText(settings.value("cap1").toString()); ui.capEdit2->setText(settings.value("cap2").toString()); ui.capEdit3->setText(settings.value("cap3").toString()); settings.endGroup(); int codepageIndex = ui.codepageBox->findText(settings.value("general/codepage", "Windows-1251").toString()); if (codepageIndex > -1 ) ui.codepageBox->setCurrentIndex(codepageIndex); else ui.codepageBox->setCurrentIndex(47); int index = settings.value("main/staticon", 0).toInt(); switch(index) { case 0: ui.mainIconRadio->setChecked(true); break; case 1: ui.xIconRadio->setChecked(true); break; case 2: ui.lastIconRadio->setChecked(true); break; default: ui.mainIconRadio->setChecked(true); } } void icqSettings::saveSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.setValue("connection/disavatars", ui.avatarBox->isChecked()); settings.setValue("connection/reconnect", ui.reconnectBox->isChecked()); if ( ui.mainIconRadio->isChecked()) settings.setValue("main/staticon", 0); else if ( ui.xIconRadio->isChecked()) settings.setValue("main/staticon", 1); else if ( ui.lastIconRadio->isChecked()) settings.setValue("main/staticon", 2); settings.beginGroup("clientid"); settings.setValue("index", ui.clientComboBox->currentIndex()); settings.setValue("protocol", ui.protocolNumBox->value()); settings.setValue("cap1", ui.capEdit1->text()); settings.setValue("cap2", ui.capEdit2->text()); settings.setValue("cap3", ui.capEdit3->text()); settings.endGroup(); settings.setValue("general/codepage", ui.codepageBox->currentText()); if ( changed ) emit settingsSaved(); changed = false; } void icqSettings::clientIndexChanged(int index) { if ( index == ui.clientComboBox->count() - 1) ui.protocolNumBox->setEnabled(true); else ui.protocolNumBox->setEnabled(false); } qutim-0.2.0/plugins/icq/notewidget.cpp0000644000175000017500000000344711273054317021441 0ustar euroelessareuroelessar/* noteWidget Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "notewidget.h" noteWidget::noteWidget(const QString &mu, const QString &cu, const QString &name, const QString &profile_name, QWidget *parent) : QWidget(parent) , contactUin(cu) , mineUin(mu) , m_profile_name(profile_name) { ui.setupUi(this); setFixedSize(size()); move(desktopCenter()); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); setWindowTitle(name); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+mineUin, "contactlist"); ui.noteEdit->setPlainText(settings.value(contactUin + "/note", "").toString()); } noteWidget::~noteWidget() { } QPoint noteWidget::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void noteWidget::on_okButton_clicked() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+mineUin, "contactlist"); settings.setValue(contactUin + "/note", ui.noteEdit->toPlainText()); close(); } qutim-0.2.0/plugins/icq/multiplesending.ui0000644000175000017500000000652511273054317022326 0ustar euroelessareuroelessar multipleSendingClass 0 0 471 391 multipleSending 4 Qt::Horizontal false 1 0 0 0 170 0 170 0 10 true true 1 Send :/icons/crystal_project/message.png:/icons/crystal_project/message.png false Stop :/icons/crystal_project/stop.png:/icons/crystal_project/stop.png Qt::Horizontal 40 20 0 false qutim-0.2.0/plugins/icq/addbuddydialog.ui0000644000175000017500000000664411273054317022065 0ustar euroelessareuroelessar addBuddyDialogClass 0 0 227 104 0 104 addBuddyDialog 4 Local name: 0 22 16777215 22 50 Group: 0 22 16777215 22 Qt::Horizontal 121 26 0 25 16777215 25 Add :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Qt::Vertical 20 0 addButton clicked() addBuddyDialogClass accept() 159 83 84 78 qutim-0.2.0/plugins/icq/plugineventeater.cpp0000644000175000017500000001004611273054317022642 0ustar euroelessareuroelessar#include "plugineventeater.h" #include "icqlayer.h" using namespace qutim_sdk_0_2; PluginEventEater::PluginEventEater() : m_event_set_status(0xffff), m_event_restore_status(0xffff), m_event_set_xstatus(0xffff), m_event_restore_xstatus(0xffff) { } PluginEventEater::~PluginEventEater() { } void PluginEventEater::getEvent(const QList &event) { if ( event.count() ) { MessageToProtocolEventType type = *(MessageToProtocolEventType*)event.at(0); switch(type) { case SetStatus: setStatus(event); break; case RestoreStatus: restoreStatus(event); break; default:; } } } void PluginEventEater::processEvent(Event &ev) { if(ev.id == 0xffff) return; if(!(ev.id == m_event_set_status || ev.id == m_event_set_xstatus || ev.id == m_event_restore_status || ev.id == m_event_restore_xstatus) || ev.size() == 0) return; if(ev.id == m_event_set_status && ev.id < 3) return; if(ev.id == m_event_set_xstatus && ev.id < 4) return; QStringList &account_list = ev.at(0); if(account_list.empty()) { foreach(icqAccount *account, m_icq_list) { if(ev.id == m_event_set_status) account->setStatusFromPlugin(ev.at(1), ev.at(2)); else if(ev.id == m_event_set_xstatus) account->setXstatusFromPlugin(ev.at(1), ev.at(2), ev.at(3)); else if(ev.id == m_event_restore_status) account->restoreStatusFromPlugin(); else if(ev.id == m_event_restore_xstatus) account->restoreXstatusFromPlugin(); } } else { foreach(const QString &account_uin, account_list) { icqAccount *account = m_icq_list.value(account_uin, 0); if(account) { if(ev.id == m_event_set_status) account->setStatusFromPlugin(ev.at(1), ev.at(2)); else if(ev.id == m_event_set_xstatus) account->setXstatusFromPlugin(ev.at(1), ev.at(2), ev.at(3)); else if(ev.id == m_event_restore_status) account->restoreStatusFromPlugin(); else if(ev.id == m_event_restore_xstatus) account->restoreXstatusFromPlugin(); } } } } void PluginEventEater::setAccountList(const QHash &account_list ) { m_icq_list = account_list; if(m_event_set_status == 0xffff) { m_event_set_status = IcqPluginSystem::instance().registerEventHandler("ICQ/Account/Status/Set", this); m_event_restore_status = IcqPluginSystem::instance().registerEventHandler("ICQ/Account/Status/Restore", this); m_event_set_xstatus = IcqPluginSystem::instance().registerEventHandler("ICQ/Account/XStatus/Set", this); m_event_restore_xstatus = IcqPluginSystem::instance().registerEventHandler("ICQ/Account/XStatus/Restore", this); } } void PluginEventEater::setStatus(const QList &event) { if ( event.count() > 3) { QStringList account_list = *(QStringList*)event.at(1); if ( !account_list.count() ) { foreach (icqAccount *account, m_icq_list) { account->setStatusFromPlugin(*(accountStatus*)event.at(2), *(QString*)event.at(3)); if ( event.count() > 6) { account->setXstatusFromPlugin(*(int*)event.at(4), *(QString*)event.at(5), *(QString*)event.at(6)); } } } else{ foreach( QString account, account_list) { icqAccount *paccount = m_icq_list.value(account); if ( paccount ) { paccount->setStatusFromPlugin(*(accountStatus*)event.at(2), *(QString*)event.at(3)); if ( event.count() > 6) { paccount->setXstatusFromPlugin(*(int*)event.at(4), *(QString*)event.at(5), *(QString*)event.at(6)); } } } } } } void PluginEventEater::restoreStatus(const QList &event) { if ( event.count() > 3) { QStringList account_list = *(QStringList*)event.at(1); if ( !account_list.count() ) { foreach (icqAccount *account, m_icq_list) { account->restoreStatusFromPlugin(); account->restoreXstatusFromPlugin(); } } else{ foreach( QString account, account_list) { icqAccount *paccount = m_icq_list.value(account); if ( paccount ) { paccount->restoreStatusFromPlugin(); paccount->restoreXstatusFromPlugin(); } } } } } qutim-0.2.0/plugins/icq/icqpluginsystem.h0000644000175000017500000000557411273054317022200 0ustar euroelessareuroelessar#ifndef PLUGINSYSTEM_H_ #define PLUGINSYSTEM_H_ #include "icqlayer.h" //struct TreeModelItem //{ // QString m_protocol_name; // QString m_account_name; // QString m_item_name; // QString m_parent_name; // quint8 m_item_type; // 0 - buddy; 1 - group; 2 - account item; //}; class IcqPluginSystem { public: IcqPluginSystem(); ~IcqPluginSystem(); static IcqPluginSystem &instance(); void setIcqLayer(IcqLayer *icq_layer) { m_parent_layer = icq_layer; } void updateStatusIcons(); //Function for adding item to contact list bool addItemToContactList(TreeModelItem Item, QString name=QString()); //Function for removing item from contact list bool removeItemFromContactList(TreeModelItem Item); //Function for moving item in contact list bool moveItemInContactList(TreeModelItem OldItem, TreeModelItem NewItem); //Function for renaming contact bool setContactItemName(TreeModelItem Item, QString name); //Function for adding icon to contact (1,2 - left side; 3...12 - right side) bool setContactItemIcon(TreeModelItem Item, QIcon icon, int position); //Function for adding text row below contact ( 1..3) bool setContactItemRow(TreeModelItem Item, QList row, int position); //Function for settings contact status, text - status name for adium icons packs, //mass status mass, 1000 - offline, 999-offline separator, -1 - online separator bool setContactItemStatus(TreeModelItem Item, QIcon icon, QString text, int mass); bool setStatusMessage(QString &status_message, bool &dshow); void addMessageFromContact(const TreeModelItem &item, const QString &message, const QDateTime &message_date); void addServiceMessage(const TreeModelItem &item, const QString &message); void addImage(const TreeModelItem &item, const QByteArray &image_raw); void contactTyping(const TreeModelItem &item, bool typing); void messageDelievered(const TreeModelItem &item, int position); bool checkForMessageValidation(const TreeModelItem &item, const QString &message, int message_type, bool special_status); QString getIconFileName(const QString & icon_name); QIcon getIcon(const QString & icon_name); QString getStatusIconFileName(const QString & icon_name, const QString & default_path); QIcon getStatusIcon(const QString & icon_name, const QString & default_path); void setAccountIsOnline(const TreeModelItem &Item, bool online); void createChat(const TreeModelItem &item); void notifyAboutBirthDay(const TreeModelItem &item); void systemNotifiacation(const TreeModelItem &item, const QString &message); void customNotifiacation(const TreeModelItem &item, const QString &message); void getQutimVersion(quint8 &major, quint8 &minor, quint8 &secminor, quint16 &svn); quint16 registerEventHandler(const QString &event_id, EventHandler *handler=0); void removeEventHandler(quint16 id, EventHandler *handler); bool sendEvent(Event &event); private: IcqLayer *m_parent_layer; }; #endif /*PLUGINSYSTEM_H_*/ qutim-0.2.0/plugins/icq/requestauthdialog.h0000644000175000017500000000214611273054317022462 0ustar euroelessareuroelessar/* requestAuthDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 REQUESTAUTHDIALOG_H #define REQUESTAUTHDIALOG_H #include #include "ui_requestauthdialog.h" class requestAuthDialog : public QDialog { Q_OBJECT public: requestAuthDialog(QWidget *parent = 0); ~requestAuthDialog(); QString getMessage(){return ui.textEdit->toPlainText();} private: Ui::requestAuthDialogClass ui; QPoint desktopCenter(); }; #endif // REQUESTAUTHDIALOG_H qutim-0.2.0/plugins/icq/icqlayer.cpp0000644000175000017500000003446711273054317021107 0ustar euroelessareuroelessar/* IcqLayer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "icqlayer.h" #include "addaccountform.h" #include "icqaccount.h" #include "contactlist.h" #include "plugineventeater.h" #include #include #include #include #include static PluginEventEater *icqPluginEventEater = 0; bool IcqLayer::init(PluginSystemInterface *plugin_system) { ProtocolInterface::init(plugin_system); m_plugin_system = plugin_system; m_login_widget = 0; m_general_icq_item = 0; m_general_icq_settings = 0; m_network_item = 0; m_network_settings = 0; m_status_item = 0; m_status_settings = 0; m_contact_settings = 0; m_contact_item = 0; m_protocol_icon = new QIcon(":/icons/icqprotocol.png"); IcqPluginSystem::instance().setIcqLayer(this); qsrand(QDateTime::currentDateTime().toTime_t()); if(!icqPluginEventEater) icqPluginEventEater = new PluginEventEater; return true; } void IcqLayer::release() { if(icqPluginEventEater) { delete icqPluginEventEater; icqPluginEventEater = 0; } delete m_login_widget; removeProtocolSettings(); foreach(icqAccount *account, m_icq_list) { account->getProtocol()->getContactListClass()->appExiting(); account->saveAccountSettings(); killAccount(account->getIcquin(), false); } } QString IcqLayer::name() { return "ICQ"; } QString IcqLayer::description() { return "ICQ protocol realization by Rustam Chakin"; } QIcon *IcqLayer::icon() { return m_protocol_icon; } void IcqLayer::setProfileName(const QString &profile_name) { m_profile_name = profile_name; } //IcqLayer &IcqLayer::instance() //{ // static IcqLayer il; // return il; //} void IcqLayer::removeAccount(const QString &account_name) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QStringList accounts = settings.value("accounts/list").toStringList(); accounts.removeAll(account_name); accounts.sort(); settings.setValue("accounts/list", accounts); killAccount(account_name, true); QSettings dir_settings_path(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); QDir account_dir(dir_settings_path.fileName()); account_dir.cdUp(); //delete profile directory if( account_dir.exists() ) removeProfileDir(account_dir.path()); } QWidget *IcqLayer::loginWidget() { if ( !m_login_widget ) m_login_widget = new AddAccountForm; return m_login_widget; } void IcqLayer::removeLoginWidget() { delete m_login_widget; m_login_widget = 0; } void IcqLayer::applySettingsPressed() { if ( m_general_icq_settings ) { m_general_icq_settings->saveSettings(); } if ( m_network_settings ) { m_network_settings->saveSettings(); } if ( m_status_settings ) { m_status_settings->saveSettings(); } if ( m_contact_settings ) { m_contact_settings->saveSettings(); } } QList IcqLayer::getAccountList() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QList accounts_list; QStringList accounts = settings.value("accounts/list").toStringList(); foreach(QString account_name, accounts) { AccountStructure info_account; info_account.protocol_icon = *m_protocol_icon; info_account.protocol_name = "ICQ"; info_account.account_name = account_name; accounts_list.append(info_account); } return accounts_list; } QList IcqLayer::getAccountStatusMenu() { QList accounts_menu_list; foreach(icqAccount *account, m_icq_list) { accounts_menu_list.append(account->getAccountMenu()); } return accounts_menu_list; } void IcqLayer::addAccountButtonsToLayout(QHBoxLayout *account_button_layout) { m_account_buttons_layout = account_button_layout; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QStringList accountList = settings.value("accounts/list").toStringList(); foreach( QString account_from_list, accountList) { addAccount(account_from_list); } } void IcqLayer::addAccount(const QString &account_name) { icqAccount *account = new icqAccount(account_name, m_profile_name); account->createAccountButton(m_account_buttons_layout); m_icq_list.insert(account_name, account); account->autoconnecting(); if(icqPluginEventEater) icqPluginEventEater->setAccountList(m_icq_list); } void IcqLayer::saveLoginDataFromLoginWidget() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QStringList accounts = settings.value("accounts/list").toStringList(); QString account_name = m_login_widget->getName(); QString account_password = m_login_widget->getPass(); if( !accounts.contains(account_name) ) { accounts<getSavePass()); addAccount(account_name); } } QList IcqLayer::getSettingsList() { QList settings_list; if ( !m_general_icq_item ) { m_general_icq_item = new QTreeWidgetItem; m_general_icq_item->setText(0, QObject::tr("ICQ General")); m_general_icq_item->setIcon(0, m_plugin_system->getIcon("additional")); } if ( !m_general_icq_settings ) { m_general_icq_settings = new icqSettings(m_profile_name); } SettingsStructure tmp_struc; tmp_struc.settings_item = m_general_icq_item; tmp_struc.settings_widget = m_general_icq_settings; settings_list.append(tmp_struc); /*if ( !m_network_item ) { m_network_item = new QTreeWidgetItem; m_network_item->setText(0, QObject::tr("Network")); m_network_item->setIcon(0, m_plugin_system->getIcon("network")); } if ( !m_network_settings ) { m_network_settings = new networkSettings(m_profile_name); } tmp_struc.settings_item = m_network_item; tmp_struc.settings_widget = m_network_settings; settings_list.append(tmp_struc); */ if ( !m_status_item ) { m_status_item = new QTreeWidgetItem; m_status_item->setText(0, QObject::tr("Statuses")); m_status_item->setIcon(0, m_plugin_system->getIcon("statuses")); } if ( !m_status_settings ) { m_status_settings = new statusSettings(m_profile_name); } tmp_struc.settings_item = m_status_item; tmp_struc.settings_widget = m_status_settings; settings_list.append(tmp_struc); if ( !m_contact_item ) { m_contact_item = new QTreeWidgetItem; m_contact_item->setText(0, QObject::tr("Contacts")); m_contact_item->setIcon(0, m_plugin_system->getIcon("contact_sett")); } if ( !m_contact_settings ) { m_contact_settings = new ContactSettings(m_profile_name); } tmp_struc.settings_item = m_contact_item; tmp_struc.settings_widget = m_contact_settings; settings_list.append(tmp_struc); foreach( icqAccount *account, m_icq_list) { QObject::connect(m_general_icq_settings, SIGNAL(settingsSaved()), account, SLOT(generalSettingsChanged())); QObject::connect(m_general_icq_settings, SIGNAL(settingsSaved()), account->getProtocol()->getContactListClass(), SLOT(msgSettingsChanged())); QObject::connect(m_network_settings, SIGNAL(settingsSaved()), account, SLOT(networkSettingsChanged())); QObject::connect(m_status_settings, SIGNAL(settingsSaved()), account->getProtocol()->getContactListClass(), SLOT(statusSettingsChanged())); QObject::connect(m_contact_settings, SIGNAL(settingsSaved()), account->getProtocol()->getContactListClass(), SLOT(contactSettingsChanged())); } return settings_list; } void IcqLayer::removeProtocolSettings() { delete m_general_icq_item; delete m_general_icq_settings; m_general_icq_item = 0; m_general_icq_settings = 0; //delete m_network_item; //delete m_network_settings; //m_network_item = 0; //m_network_settings = 0; delete m_status_item; delete m_status_settings; m_status_item = 0; m_status_settings = 0; delete m_contact_item; delete m_contact_settings; m_contact_item = 0; m_contact_settings = 0; } void IcqLayer::removeProfileDir(const QString &path) { //recursively delete all files in directory QFileInfo fileInfo(path); if( fileInfo.isDir() ) { QDir dir( path ); QFileInfoList fileList = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot); for (int i = 0; i < fileList.count(); i++) removeProfileDir(fileList.at(i).absoluteFilePath()); dir.rmdir(path); } else { QFile::remove(path); } } void IcqLayer::killAccount(const QString &account_name, bool deleting_account) { icqAccount *delete_account = m_icq_list.value(account_name); if ( deleting_account ) { delete_account->deleteingAccount = deleting_account; delete_account->removeContactList(); m_icq_list.remove(account_name); delete delete_account; } } QList IcqLayer::getAccountStatuses() { //QList accounts_list; m_status_list.clear(); foreach(icqAccount *account, m_icq_list) { if ( account ) { AccountStructure info_account; info_account.protocol_icon = account->getCurrentIcon(); info_account.protocol_name = "ICQ"; info_account.account_name = account->getIcquin(); //accounts_list.append(info_account); m_status_list.append(info_account); } } return m_status_list; //return accounts_list; } void IcqLayer::setAutoAway() { foreach( icqAccount *account, m_icq_list) { account->getProtocol()->setAutoAway(); } } void IcqLayer::setStatusAfterAutoAway() { foreach( icqAccount *account, m_icq_list) { account->getProtocol()->setStatusAfterAutoAway(); } } void IcqLayer::itemActivated(const QString &account_name, const QString &contact_name) { if ( m_icq_list.contains(account_name) ) { m_icq_list.value(account_name)->getProtocol()->getContactListClass()->itemActivated(contact_name); } } void IcqLayer::itemContextMenu(const QList &action_list, const QString &account_name, const QString &contact_name, int item_type, const QPoint &menu_point) { if ( m_icq_list.contains(account_name) ) { m_icq_list.value(account_name)->getProtocol()->getContactListClass()->showItemContextMenu(action_list, contact_name, item_type, menu_point); } } void IcqLayer::sendMessageTo(const QString &account_name, const QString &contact_name, int item_type, const QString& message, int message_icon_position) { if ( m_icq_list.contains(account_name) ) { m_icq_list.value(account_name)->getProtocol()->getContactListClass()->sendMessageTo(contact_name, message, message_icon_position); } } QStringList IcqLayer::getAdditionalInfoAboutContact(const QString &account_name, const QString &item_name, int item_type ) const { if ( m_icq_list.contains(account_name) ) { return m_icq_list.value(account_name)->getProtocol()->getContactListClass()->getAdditionalInfoAboutContact(item_name, item_type); } return QStringList(); } void IcqLayer::showContactInformation(const QString &account_name, const QString &item_name, int item_type ) { if ( m_icq_list.contains(account_name) ) { return m_icq_list.value(account_name)->getProtocol()->getContactListClass()->openInfoWindow(item_name); } } void IcqLayer::sendImageTo(const QString &account_name, const QString &item_name, int item_type, const QByteArray &image_raw ) { if ( m_icq_list.contains(account_name) ) { return m_icq_list.value(account_name)->getProtocol()->getContactListClass()->sendImageTo(item_name, image_raw); } } void IcqLayer::sendFileTo(const QString &account_name, const QString &item_name, int item_type, const QStringList &file_names) { if ( m_icq_list.contains(account_name) ) { m_icq_list.value(account_name)->getProtocol()->getContactListClass()->sendFileTo(item_name, file_names); } } void IcqLayer::sendTypingNotification(const QString &account_name, const QString &item_name, int item_type, int notification_type) { if ( m_icq_list.contains(account_name) ) { m_icq_list.value(account_name)->getProtocol()->getContactListClass()->sendTypingNotifications(item_name, notification_type); } } void IcqLayer::moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item) { if ( m_icq_list.contains(old_item.m_account_name) ) { m_icq_list.value(old_item.m_account_name)->getProtocol() ->getContactListClass()->moveItemSignalFromCL(old_item, new_item); } } void IcqLayer::deleteItemSignalFromCL(const QString &account_name, const QString &item_name, int type) { if ( m_icq_list.contains(account_name) ) { m_icq_list.value(account_name)->getProtocol()->getContactListClass()->deleteItemSignalFromCL(item_name, type); } } QString IcqLayer::getItemToolTip(const QString &account_name, const QString &contact_name) { if ( m_icq_list.contains(account_name) ) { return m_icq_list.value(account_name)->getProtocol()->getContactListClass()->getItemToolTip(contact_name); } return contact_name; } void IcqLayer::chatWindowOpened(const QString &account_name, const QString &item_name) { if ( m_icq_list.contains(account_name) ) { m_icq_list.value(account_name)->getProtocol()->getContactListClass()->chatWindowOpened(item_name, true); } } void IcqLayer::getMessageFromPlugins(const QList &event) { if(icqPluginEventEater) icqPluginEventEater->getEvent(event); } void IcqLayer::editAccount(const QString &account) { if ( m_icq_list.contains(account) ) { m_icq_list.value(account)->editAccountSettings(); } } Q_EXPORT_PLUGIN2(icqlayer, IcqLayer); qutim-0.2.0/plugins/icq/userinformation.cpp0000644000175000017500000025773111273054317022523 0ustar euroelessareuroelessar/* userInformation Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "userinformation.h" #include "icqpluginsystem.h" #include "buddycaps.h" #include userInformation::userInformation(const QString &profile_name,bool owner, bool fromList, const QString &uin, const QString &mineUin, QWidget *parent) : QWidget(parent) , contactUin(uin) , ownUin(mineUin) , m_profile_name(profile_name) { IcqPluginSystem &ips = IcqPluginSystem::instance(); ui.setupUi(this); // setFixedSize(size()); move(desktopCenter()); setWindowTitle(tr("%1 contact information").arg(uin)); setWindowIcon(ips.getIcon("contactinfo")); pictureChanged= false; ui.maritalComboBox->setVisible(false); ui.label_7->setVisible(false); ui.pictureLabel->setText(QString (""); if (mineUin == uin) owner = true; if ( owner ) ui.uinEdit->setText(mineUin); else ui.uinEdit->setText(uin); ui.countryComboBox->insertItems(0, getCountryList()); ui.origCountryComboBox->insertItems(0, getCountryList()); ui.workCountryComboBox->insertItems(0, getCountryList()); ui.langComboBox1->insertItems(0, getLangList()); ui.langComboBox2->insertItems(0, getLangList()); ui.langComboBox3->insertItems(0, getLangList()); ui.occupationComboBox->insertItems(0, QStringList() << QString() << QApplication::translate("searchUserClass", "Academic", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Administrative", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Art/Entertainment", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "College Student", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Computers", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Community & Social", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Education", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Engineering", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Financial Services", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Government", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "High School Student", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Home", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "ICQ - Providing Help", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Law", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Managerial", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Manufacturing", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Medical/Health", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Military", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Non-Goverment Organisation", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Professional", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Retail", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Retired", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Science & Research", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Sports", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Technical", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "University student", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Web building", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Other services", 0, QApplication::UnicodeUTF8) ); ui.interestsComboBox1->insertItems(0, getInterestList()); ui.interestsComboBox2->insertItems(0, getInterestList()); ui.interestsComboBox3->insertItems(0, getInterestList()); ui.interestsComboBox4->insertItems(0, getInterestList()); if ( !owner ) { ui.authBox->setVisible(false); ui.additionalLabel->resize(ui.additionalLabel->width(),364); ui.birthDateEdit->setVisible(false); ui.birthDateEdit->setEnabled(false); ui.birthBox->setVisible(false); ui.addButton->setVisible(false); ui.removeButton->setVisible(false); if ( !fromList) { ui.saveButton->setVisible(false); ui.requestButton->setEnabled(false); } ui.nickEdit->setReadOnly(true); ui.firstEdit->setReadOnly(true); ui.lastEdit->setReadOnly(true); ui.emailEdit->setReadOnly(true); ui.publishBox->setVisible(false); ui.countryComboBox->setEditable(true); ui.countryComboBox->lineEdit()->setReadOnly(true); ui.countryComboBox->installEventFilter(this); // ui.countryComboBox->setEnabled(false); ui.cityEdit->setReadOnly(true); ui.stateEdit->setReadOnly(true); ui.zipEdit->setReadOnly(true); ui.phoneEdit->setReadOnly(true); ui.faxEdit->setReadOnly(true); ui.cellularEdit->setReadOnly(true); ui.streeEdit->setReadOnly(true); ui.origCountryComboBox->setEditable(true); ui.origCountryComboBox->lineEdit()->setReadOnly(true); ui.origCountryComboBox->installEventFilter(this); // ui.origCountryComboBox->setEnabled(false); ui.origCityEdit->setReadOnly(true); ui.origStateEdit->setReadOnly(true); ui.workCountryComboBox->setEditable(true); ui.workCountryComboBox->lineEdit()->setReadOnly(true); ui.workCountryComboBox->installEventFilter(this); // ui.workCountryComboBox->setEnabled(false); ui.workCityEdit->setReadOnly(true); ui.workStateEdit->setReadOnly(true); ui.workZipEdit->setReadOnly(true); ui.workPhoneEdit->setReadOnly(true); ui.workFaxEdit->setReadOnly(true); ui.workStreetEdit->setReadOnly(true); ui.compNameEdit->setReadOnly(true); ui.divDeptEdit->setReadOnly(true); ui.positionEdit->setReadOnly(true); ui.webSiteEdit->setReadOnly(true); ui.occupationComboBox->setEditable(true); ui.occupationComboBox->lineEdit()->setReadOnly(true); ui.occupationComboBox->installEventFilter(this); // ui.occupationComboBox->setEnabled(false); ui.genderComboBox->setEditable(true); ui.genderComboBox->lineEdit()->setReadOnly(true); ui.genderComboBox->installEventFilter(this); // ui.genderComboBox->setEnabled(false); ui.homePageEdit->setReadOnly(true); ui.langComboBox1->setEditable(true); ui.langComboBox1->lineEdit()->setReadOnly(true); ui.langComboBox1->installEventFilter(this); // ui.langComboBox1->setEnabled(false); ui.langComboBox2->setEditable(true); ui.langComboBox2->lineEdit()->setReadOnly(true); ui.langComboBox2->installEventFilter(this); // ui.langComboBox2->setEnabled(false); ui.langComboBox3->setEditable(true); ui.langComboBox3->lineEdit()->setReadOnly(true); ui.langComboBox3->installEventFilter(this); // ui.langComboBox3->setEnabled(false); ui.interestsComboBox1->setEditable(true); ui.interestsComboBox1->lineEdit()->setReadOnly(true); ui.interestsComboBox1->installEventFilter(this); // ui.interestsComboBox1->setEnabled(false); ui.interestsComboBox2->setEditable(true); ui.interestsComboBox2->lineEdit()->setReadOnly(true); ui.interestsComboBox2->installEventFilter(this); // ui.interestsComboBox2->setEnabled(false); ui.interestsComboBox3->setEditable(true); ui.interestsComboBox3->lineEdit()->setReadOnly(true); ui.interestsComboBox3->installEventFilter(this); // ui.interestsComboBox3->setEnabled(false); ui.interestsComboBox4->setEditable(true); ui.interestsComboBox4->lineEdit()->setReadOnly(true); ui.interestsComboBox4->installEventFilter(this); // ui.interestsComboBox4->setEnabled(false); ui.interestsEdit1->setReadOnly(true); ui.interestsEdit2->setReadOnly(true); ui.interestsEdit3->setReadOnly(true); ui.interestsEdit4->setReadOnly(true); ui.aboutEdit->setReadOnly(true); ui.infoListWidget->setCurrentRow(0); if ( fromList ) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+ownUin, "contactlist"); contacts.beginGroup(uin); setNick(contacts.value("nick", "").toString()); setFirst(contacts.value("firstname", "").toString()); setLast(contacts.value("lastname", "").toString()); setEmail(contacts.value("email", "").toString()); setHomeCity(contacts.value("hcity", "").toString()); setHomeState(contacts.value("hstate", "").toString()); setHomePhone(contacts.value("hphone", "").toString()); setHomeFax(contacts.value("hfax", "").toString()); setHomeAddress(contacts.value("haddress", "").toString()); setCell(contacts.value("cell", "").toString()); setHomeZip(contacts.value("hzip", "").toString()); ui.countryComboBox->setCurrentIndex(contacts.value("country", 0).toUInt()); int age = contacts.value("age", 0).toUInt(); if ( age ) setAge(age); setGender(contacts.value("gender", 0).toUInt()); setHomePage(contacts.value("hpage", "").toString()); quint16 year = contacts.value("birthyear", 0).toUInt(); quint8 month = contacts.value("birthmonth", 0).toUInt(); quint8 day = contacts.value("birthday", 0).toUInt(); if ( year && month && day) { ui.birthDateEdit->setVisible(true); setBirthDay(year, month,day); } setLang(1,contacts.value("lang1", 0).toUInt()); setLang(2,contacts.value("lang2", 0).toUInt()); setLang(3,contacts.value("lang3", 0).toUInt()); setOriginalCity(contacts.value("ocity", "").toString()); setOriginalState(contacts.value("ostate", "").toString()); ui.origCountryComboBox->setCurrentIndex(contacts.value("ocountry", 0).toUInt()); setWorkCity(contacts.value("wcity", "").toString()); setWorkState(contacts.value("wstate", "").toString()); setWorkPhone(contacts.value("wphone", "").toString()); setWorkFax(contacts.value("wfax", "").toString()); setWorkAddress(contacts.value("waddress", "").toString()); setWorkZip(contacts.value("wzip", "").toString()); ui.workCountryComboBox->setCurrentIndex(contacts.value("wcountry", 0).toUInt()); setWorkCompany(contacts.value("company", "").toString()); setWorkDepartment(contacts.value("department", "").toString()); setWorkPosition(contacts.value("wposition", "").toString()); ui.occupationComboBox->setCurrentIndex(contacts.value("occupation", 0).toUInt()); setWorkWebPage(contacts.value("wpage", "").toString()); setInterests(contacts.value("inter1", "").toString(), contacts.value("incode1", "").toUInt(), 1); setInterests(contacts.value("inter2", "").toString(), contacts.value("incode2", "").toUInt(), 2); setInterests(contacts.value("inter3", "").toString(), contacts.value("incode3", "").toUInt(), 3); setInterests(contacts.value("inter4", "").toString(), contacts.value("incode4", "").toUInt(), 4); setAboutInfo(contacts.value("about", "").toString()); QByteArray hash = contacts.value("iconhash").toByteArray(); if ( !hash.isEmpty() ) { QString avatarPath = checkForAvatar(contacts.fileName().section('/', 0, -3), hash); if ( !avatarPath.isEmpty() ) { QSize picSize = getPictureSize(avatarPath); ui.pictureLabel->setText(tr("").arg(avatarPath).arg(picSize.height()).arg(picSize.width())); } } contacts.endGroup(); makeSummary(); } } if ( owner ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+ownUin, "accountsettings"); QByteArray hash = settings.value("main/iconhash").toByteArray(); if ( !hash.isEmpty() ) { QString avatarPath = checkForAvatar(settings.fileName().section('/', 0, -3), hash); if ( !avatarPath.isEmpty() ) { QSize picSize = getPictureSize(avatarPath); ui.pictureLabel->setText(tr("").arg(avatarPath).arg(picSize.height()).arg(picSize.width())); } } ui.label->setVisible(false); ui.ageEdit->setVisible(false); } ui.saveButton->setIcon(Icon("save_all")); ui.closeButton->setIcon(Icon("cancel")); ui.addButton->setIcon(Icon("add")); ui.removeButton->setIcon(Icon("remove")); ui.infoListWidget->item(0)->setIcon(Icon("summary")); ui.infoListWidget->item(1)->setIcon(Icon("general")); ui.infoListWidget->item(2)->setIcon(Icon("home")); ui.infoListWidget->item(3)->setIcon(Icon("work")); ui.infoListWidget->item(4)->setIcon(Icon("personal")); ui.infoListWidget->item(5)->setIcon(Icon("about")); ui.infoListWidget->item(6)->setIcon(Icon("additional")); ui.requestButton->setIcon(Icon("request")); } userInformation::~userInformation() { } void userInformation::rellocateDialogToCenter(QWidget *widget) { QDesktopWidget &desktop = *QApplication::desktop(); // Get current screen num int curScreen = desktop.screenNumber(widget); // Get available geometry of the screen QRect screenGeom = desktop.availableGeometry(curScreen); // Let's calculate point to move dialog QPoint moveTo(screenGeom.left(), screenGeom.top()); moveTo.setX(moveTo.x() + screenGeom.width() / 2); moveTo.setY(moveTo.y() + screenGeom.height() / 2); moveTo.setX(moveTo.x() - this->size().width() / 2); moveTo.setY(moveTo.y() - this->size().height() / 2); this->move(moveTo); } void userInformation::setCountry(quint16 code) { ui.countryComboBox->setCurrentIndex(getIndexFromCountryCode(code)); } int userInformation::getIndexFromCountryCode(quint16 code) { int countryCode = 0; switch(code ) { case 93: countryCode = 1; break; case 355: countryCode = 2; break; case 213: countryCode = 3; break; case 684: countryCode = 4; break; case 376: countryCode = 5; break; case 244: countryCode = 6; break; case 101: countryCode = 7; break; case 102: countryCode = 8; break; case 1021: countryCode = 9; break; case 5902: countryCode = 10; break; case 54: countryCode = 11; break; case 374: countryCode = 12; break; case 297: countryCode = 13; break; case 247: countryCode = 14; break; case 61: countryCode = 15; break; case 43: countryCode = 16; break; case 994: countryCode = 17; break; case 103: countryCode = 18; break; case 973: countryCode = 19; break; case 880: countryCode = 20; break; case 104: countryCode = 21; break; case 120: countryCode = 22; break; case 375: countryCode = 23; break; case 32: countryCode = 24; break; case 501: countryCode = 25; break; case 229: countryCode = 26; break; case 105: countryCode = 27; break; case 975: countryCode = 28; break; case 591: countryCode = 29; break; case 267: countryCode = 30; break; case 55: countryCode = 31; break; case 673: countryCode = 32; break; case 359: countryCode = 33; break; case 226: countryCode = 34; break; case 257: countryCode = 35; break; case 855: countryCode = 36; break; case 237: countryCode = 37; break; case 107: countryCode = 38; break; case 178: countryCode = 39; break; case 108: countryCode = 40; break; case 235: countryCode = 41; break; case 56: countryCode = 42; break; case 86: countryCode = 43; break; case 672: countryCode = 44; break; case 57: countryCode = 45; break; case 2691: countryCode = 46; break; case 682: countryCode = 47; break; case 506: countryCode = 48; break; case 385: countryCode = 49; break; case 53: countryCode = 50; break; case 357: countryCode = 51; break; case 42: countryCode = 52; break; case 45: countryCode = 53; break; case 246: countryCode = 54; break; case 253: countryCode = 55; break; case 109: countryCode = 56; break; case 110: countryCode = 57; break; case 593: countryCode = 58; break; case 20: countryCode = 59; break; case 503: countryCode = 60; break; case 291: countryCode = 61; break; case 372: countryCode = 62; break; case 251: countryCode = 63; break; case 298: countryCode = 64; break; case 500: countryCode = 65; break; case 679: countryCode = 66; break; case 358: countryCode = 67; break; case 33: countryCode = 68; break; case 5901: countryCode = 69; break; case 594: countryCode = 70; break; case 689: countryCode = 71; break; case 241: countryCode = 72; break; case 220: countryCode = 73; break; case 995: countryCode = 74; break; case 49: countryCode = 75; break; case 233: countryCode = 76; break; case 350: countryCode = 77; break; case 30: countryCode = 78; break; case 299: countryCode = 79; break; case 111: countryCode = 80; break; case 590: countryCode = 81; break; case 502: countryCode = 82; break; case 224: countryCode = 83; break; case 245: countryCode = 84; break; case 592: countryCode = 85; break; case 509: countryCode = 86; break; case 504: countryCode = 87; break; case 852: countryCode = 88; break; case 36: countryCode = 89; break; case 354: countryCode = 90; break; case 91: countryCode = 91; break; case 62: countryCode = 92; break; case 964: countryCode = 93; break; case 353: countryCode = 94; break; case 972: countryCode = 95; break; case 39: countryCode = 96; break; case 112: countryCode = 97; break; case 81: countryCode = 98; break; case 962: countryCode = 99; break; case 705: countryCode = 100; break; case 254: countryCode = 101; break; case 686: countryCode = 102; break; case 850: countryCode = 103; break; case 82: countryCode = 104; break; case 965: countryCode = 105; break; case 706: countryCode = 106; break; case 856: countryCode = 107; break; case 371: countryCode = 108; break; case 961: countryCode = 109; break; case 266: countryCode = 110; break; case 231: countryCode = 111; break; case 4101: countryCode = 112; break; case 370: countryCode = 113; break; case 352: countryCode = 114; break; case 853: countryCode = 115; break; case 261: countryCode = 116; break; case 265: countryCode = 117; break; case 60: countryCode = 118; break; case 960: countryCode = 119; break; case 223: countryCode = 120; break; case 356: countryCode = 121; break; case 692: countryCode = 122; break; case 596: countryCode = 123; break; case 222: countryCode = 124; break; case 230: countryCode = 125; break; case 269: countryCode = 126; break; case 52: countryCode = 127; break; case 373: countryCode = 128; break; case 377: countryCode = 129; break; case 976: countryCode = 130; break; case 113: countryCode = 131; break; case 212: countryCode = 132; break; case 258: countryCode = 133; break; case 95: countryCode = 134; break; case 264: countryCode = 135; break; case 674: countryCode = 136; break; case 977: countryCode = 137; break; case 31: countryCode = 138; break; case 114: countryCode = 139; break; case 687: countryCode = 140; break; case 64: countryCode = 141; break; case 505: countryCode = 142; break; case 227: countryCode = 143; break; case 234: countryCode = 144; break; case 683: countryCode = 145; break; case 6722: countryCode = 146; break; case 47: countryCode = 147; break; case 968: countryCode = 148; break; case 92: countryCode = 149; break; case 680: countryCode = 150; break; case 507: countryCode = 151; break; case 675: countryCode = 152; break; case 595: countryCode = 153; break; case 51: countryCode = 154; break; case 63: countryCode = 155; break; case 48: countryCode = 156; break; case 351: countryCode = 157; break; case 121: countryCode = 158; break; case 974: countryCode = 159; break; case 262: countryCode = 160; break; case 40: countryCode = 161; break; case 6701: countryCode = 162; break; case 7: countryCode = 163; break; case 250: countryCode = 164; break; case 122: countryCode = 165; break; case 670: countryCode = 166; break; case 378: countryCode = 167; break; case 966: countryCode = 168; break; case 442: countryCode = 169; break; case 221: countryCode = 170; break; case 248: countryCode = 171; break; case 232: countryCode = 172; break; case 65: countryCode = 173; break; case 4201: countryCode = 174; break; case 386: countryCode = 175; break; case 677: countryCode = 176; break; case 252: countryCode = 177; break; case 27: countryCode = 178; break; case 34: countryCode = 179; break; case 94: countryCode = 180; break; case 290: countryCode = 181; break; case 115: countryCode = 182; break; case 249: countryCode = 183; break; case 597: countryCode = 184; break; case 268: countryCode = 185; break; case 46: countryCode = 186; break; case 41: countryCode = 187; break; case 963: countryCode = 188; break; case 886: countryCode = 189; break; case 708: countryCode = 190; break; case 255: countryCode = 191; break; case 66: countryCode = 192; break; case 6702: countryCode = 193; break; case 228: countryCode = 194; break; case 690: countryCode = 195; break; case 676: countryCode = 196; break; case 216: countryCode = 197; break; case 90: countryCode = 198; break; case 709: countryCode = 199; break; case 688: countryCode = 200; break; case 256: countryCode = 201; break; case 380: countryCode = 202; break; case 44: countryCode = 203; break; case 598: countryCode = 204; break; case 1: countryCode = 205; break; case 711: countryCode = 206; break; case 678: countryCode = 207; break; case 379: countryCode = 208; break; case 58: countryCode = 209; break; case 84: countryCode = 210; break; case 441: countryCode = 211; break; case 685: countryCode = 212; break; case 967: countryCode = 213; break; case 381: countryCode = 214; break; case 382: countryCode = 215; break; case 3811: countryCode = 216; break; case 260: countryCode = 217; break; case 263: countryCode = 218; break; } return countryCode; } void userInformation::setBirthDay(quint16 year, quint8 month, quint8 day) { if ( contactUin != ownUin) { if ( year && month && day) { ui.birthDateEdit->setDate(QDate(year, month, day)); ui.birthDateEdit->setVisible(true); ui.birthDateEdit->setEnabled(false); } else { ui.birthDateEdit->setEnabled(false); ui.birthDateEdit->setVisible(false); } } else { if ( year && month && day) { ui.birthDateEdit->setDate(QDate(year, month, day)); ui.birthDateEdit->setVisible(true); ui.birthDateEdit->setEnabled(true); ui.birthBox->setChecked(true); } } } void userInformation::setLang(quint8 lang, quint8 code) { if ( lang == 1) ui.langComboBox1->setCurrentIndex(code); if ( lang == 2) ui.langComboBox2->setCurrentIndex(code); if ( lang == 3) ui.langComboBox3->setCurrentIndex(code); } void userInformation::setOriginalCountry(quint16 code) { ui.origCountryComboBox->setCurrentIndex(getIndexFromCountryCode(code)); } void userInformation::setWorkCountry(quint16 code) { ui.workCountryComboBox->setCurrentIndex(getIndexFromCountryCode(code)); } void userInformation::setWorkOccupation(quint16 code) { if ( code == 99) ui.occupationComboBox->setCurrentIndex(28); else ui.occupationComboBox->setCurrentIndex(code); } void userInformation::setInterests(const QString &keyWords, quint16 code, quint8 num) { if ( num == 1 ) { ui.interestsComboBox1->setCurrentIndex(code - 99); ui.interestsEdit1->setText(keyWords); } if ( num == 2 ) { ui.interestsComboBox2->setCurrentIndex(code - 99); ui.interestsEdit2->setText(keyWords); } if ( num == 3 ) { ui.interestsComboBox3->setCurrentIndex(code - 99); ui.interestsEdit3->setText(keyWords); } if ( num == 4 ) { ui.interestsComboBox4->setCurrentIndex(code - 99); ui.interestsEdit4->setText(keyWords); } } QPoint userInformation::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } QString userInformation::checkForAvatar(const QString &path, const QString &hash) { if ( QFile::exists(path + "/icqicons/" + hash) ) return (path + "/icqicons/" + hash); else return QString(""); } void userInformation::on_saveButton_clicked() { if ( contactUin != ownUin) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+ownUin, "contactlist"); contacts.beginGroup(contactUin); contacts.setValue("nick", ui.nickEdit->text()); contacts.setValue("firstname", ui.firstEdit->text()); contacts.setValue("lastname", ui.lastEdit->text()); contacts.setValue("email", ui.emailEdit->text()); contacts.setValue("hcity", ui.cityEdit->text()); contacts.setValue("hstate", ui.stateEdit->text()); contacts.setValue("hphone", ui.phoneEdit->text()); contacts.setValue("hfax", ui.faxEdit->text()); contacts.setValue("haddress", ui.streeEdit->text()); contacts.setValue("cell", ui.cellularEdit->text()); contacts.setValue("hzip", ui.zipEdit->text()); contacts.setValue("country", ui.countryComboBox->currentIndex()); contacts.setValue("age", ui.ageEdit->text().toUInt()); contacts.setValue("gender", ui.genderComboBox->currentIndex()); contacts.setValue("hpage", ui.homePageEdit->text()); if ( ui.birthDateEdit->isVisible() ) { contacts.setValue("birthyear", ui.birthDateEdit->date().year()); contacts.setValue("birthmonth", ui.birthDateEdit->date().month()); contacts.setValue("birthday", ui.birthDateEdit->date().day()); } contacts.setValue("lang1", ui.langComboBox1->currentIndex()); contacts.setValue("lang2", ui.langComboBox2->currentIndex()); contacts.setValue("lang3", ui.langComboBox3->currentIndex()); contacts.setValue("ocity", ui.origCityEdit->text()); contacts.setValue("ostate", ui.origStateEdit->text()); contacts.setValue("ocountry", ui.origCountryComboBox->currentIndex()); contacts.setValue("wcity", ui.workCityEdit->text()); contacts.setValue("wstate", ui.workStateEdit->text()); contacts.setValue("wphone", ui.workPhoneEdit->text()); contacts.setValue("wfax", ui.workFaxEdit->text()); contacts.setValue("waddress", ui.workStreetEdit->text()); contacts.setValue("wzip", ui.workZipEdit->text()); contacts.setValue("wcountry", ui.workCountryComboBox->currentIndex()); contacts.setValue("company", ui.compNameEdit->text()); contacts.setValue("department", ui.divDeptEdit->text()); contacts.setValue("wposition", ui.positionEdit->text()); contacts.setValue("occupation", ui.occupationComboBox->currentIndex()); contacts.setValue("wpage", ui.webSiteEdit->text()); contacts.setValue("inter1", ui.interestsEdit1->text()); contacts.setValue("incode1", ui.interestsComboBox1->currentIndex() + 99); contacts.setValue("inter2", ui.interestsEdit2->text()); contacts.setValue("incode2", ui.interestsComboBox2->currentIndex() + 99); contacts.setValue("inter3", ui.interestsEdit3->text()); contacts.setValue("incode3", ui.interestsComboBox3->currentIndex() + 99); contacts.setValue("inter4", ui.interestsEdit4->text()); contacts.setValue("incode4", ui.interestsComboBox4->currentIndex() + 99); contacts.setValue("about", ui.aboutEdit->toPlainText()); contacts.endGroup(); } else { emit saveOwnerInfo(pictureChanged, picturePath); pictureChanged = false; } } void userInformation::on_requestButton_clicked() { ui.requestButton->setEnabled(false); emit requestUserInfo(contactUin); } void userInformation::makeSummary() { QString summaryText; if ( !ui.nickEdit->text().isEmpty() ) summaryText.append(tr("Nick name: %1
").arg(Qt::escape(ui.nickEdit->text()))); if ( !ui.firstEdit->text().isEmpty() ) summaryText.append(tr("First name: %1
").arg(Qt::escape(ui.firstEdit->text()))); if ( !ui.lastEdit->text().isEmpty() ) summaryText.append(tr("Last name: %1
").arg(Qt::escape(ui.lastEdit->text()))); if ( ui.countryComboBox->currentIndex() || !ui.cityEdit->text().isEmpty() ) { summaryText.append(tr("Home: %1 %2
").arg(ui.countryComboBox->currentText()).arg(Qt::escape(ui.cityEdit->text()))); } if ( ui.genderComboBox->currentIndex() ) summaryText.append(tr("Gender: %1
").arg(ui.genderComboBox->currentText())); if ( !ui.ageEdit->text().isEmpty() ) summaryText.append(tr("Age: %1
").arg(ui.ageEdit->text())); if ( ui.birthDateEdit->isEnabled() ) summaryText.append(tr("Birth date: %1
").arg(ui.birthDateEdit->date().toString())); if (ui.langComboBox1->currentIndex() || ui.langComboBox2->currentIndex() || ui.langComboBox3->currentIndex() ) summaryText.append(tr("Spoken languages: %1 %2 %3
").arg(ui.langComboBox1->currentText()).arg(ui.langComboBox2->currentText()).arg(ui.langComboBox3->currentText())); ui.summaryLabel->setText(summaryText); } QSize userInformation::getPictureSize(const QString &path) { QPixmap pic; QSize size; pic.load(path); size.setHeight(pic.height()); size.setWidth(pic.width()); if ( pic.height() >= pic.width() ) { if (pic.height() > 64) { size.setHeight(64); size.setWidth( pic.width() / (pic.height() / 64.0)); } } else { if (pic.width() > 64) { size.setWidth(64); size.setHeight( pic.height() / (pic.width() / 64.0)); } } return size; } void userInformation::setAuth(quint8 auth, quint8 webaware, quint8 publishEMail) { if ( !auth ) ui.requiredButton->setChecked(true); else ui.allButton->setChecked(true); if (webaware) ui.webBox->setChecked(true); else ui.webBox->setChecked(false); ui.publishBox->setChecked(publishEMail); } quint16 userInformation::getCountryCodeFromIndex(int index) { quint16 countryCode = 0; switch(index ) { case 1: countryCode = 93; break; case 2: countryCode = 355; break; case 3: countryCode = 213; break; case 4: countryCode = 684; break; case 5: countryCode = 376; break; case 6: countryCode = 244; break; case 7: countryCode = 101; break; case 8: countryCode = 102; break; case 9: countryCode = 1021; break; case 10: countryCode = 5902; break; case 11: countryCode = 54; break; case 12: countryCode = 374; break; case 13: countryCode = 297; break; case 14: countryCode = 247; break; case 15: countryCode = 61; break; case 16: countryCode = 43; break; case 17: countryCode = 994; break; case 18: countryCode = 103; break; case 19: countryCode = 973; break; case 20: countryCode = 880; break; case 21: countryCode = 104; break; case 22: countryCode = 120; break; case 23: countryCode = 375; break; case 24: countryCode = 32; break; case 25: countryCode = 501; break; case 26: countryCode = 229; break; case 27: countryCode = 105; break; case 28: countryCode = 975; break; case 29: countryCode = 591; break; case 30: countryCode = 267; break; case 31: countryCode = 55; break; case 32: countryCode = 673; break; case 33: countryCode = 359; break; case 34: countryCode = 226; break; case 35: countryCode = 257; break; case 36: countryCode = 855; break; case 37: countryCode = 237; break; case 38: countryCode = 107; break; case 39: countryCode = 178; break; case 40: countryCode = 108; break; case 41: countryCode = 235; break; case 42: countryCode = 56; break; case 43: countryCode = 86; break; case 44: countryCode = 672; break; case 45: countryCode = 57; break; case 46: countryCode = 2691; break; case 47: countryCode = 682; break; case 48: countryCode = 506; break; case 49: countryCode = 385; break; case 50: countryCode = 53; break; case 51: countryCode = 357; break; case 52: countryCode = 42; break; case 53: countryCode = 45; break; case 54: countryCode = 246; break; case 55: countryCode = 253; break; case 56: countryCode = 109; break; case 57: countryCode = 110; break; case 58: countryCode = 593; break; case 59: countryCode = 20; break; case 60: countryCode = 503; break; case 61: countryCode = 291; break; case 62: countryCode = 372; break; case 63: countryCode = 251; break; case 64: countryCode = 298; break; case 65: countryCode = 500; break; case 66: countryCode = 679; break; case 67: countryCode = 358; break; case 68: countryCode = 33; break; case 69: countryCode = 5901; break; case 70: countryCode = 594; break; case 71: countryCode = 689; break; case 72: countryCode = 241; break; case 73: countryCode = 220; break; case 74: countryCode = 995; break; case 75: countryCode = 49; break; case 76: countryCode = 233; break; case 77: countryCode = 350; break; case 78: countryCode = 30; break; case 79: countryCode = 299; break; case 80: countryCode = 111; break; case 81: countryCode = 590; break; case 82: countryCode = 502; break; case 83: countryCode = 224; break; case 84: countryCode = 245; break; case 85: countryCode = 592; break; case 86: countryCode = 509; break; case 87: countryCode = 504; break; case 88: countryCode = 852; break; case 89: countryCode = 36; break; case 90: countryCode = 354; break; case 91: countryCode = 91; break; case 92: countryCode = 62; break; case 93: countryCode = 964; break; case 94: countryCode = 353; break; case 95: countryCode = 972; break; case 96: countryCode = 39; break; case 97: countryCode = 112; break; case 98: countryCode = 81; break; case 99: countryCode = 962; break; case 100: countryCode = 705; break; case 101: countryCode = 254; break; case 102: countryCode = 686; break; case 103: countryCode = 850; break; case 104: countryCode = 82; break; case 105: countryCode = 965; break; case 106: countryCode = 706; break; case 107: countryCode = 856; break; case 108: countryCode = 371; break; case 109: countryCode = 961; break; case 110: countryCode = 266; break; case 111: countryCode = 231; break; case 112: countryCode = 4101; break; case 113: countryCode = 370; break; case 114: countryCode = 352; break; case 115: countryCode = 853; break; case 116: countryCode = 261; break; case 117: countryCode = 265; break; case 118: countryCode = 60; break; case 119: countryCode = 960; break; case 120: countryCode = 223; break; case 121: countryCode = 356; break; case 122: countryCode = 692; break; case 123: countryCode = 596; break; case 124: countryCode = 222; break; case 125: countryCode = 230; break; case 126: countryCode = 269; break; case 127: countryCode = 52; break; case 128: countryCode = 373; break; case 129: countryCode = 377; break; case 130: countryCode = 976; break; case 131: countryCode = 113; break; case 132: countryCode = 212; break; case 133: countryCode = 258; break; case 134: countryCode = 95; break; case 135: countryCode = 264; break; case 136: countryCode = 674; break; case 137: countryCode = 977; break; case 138: countryCode = 31; break; case 139: countryCode = 114; break; case 140: countryCode = 687; break; case 141: countryCode = 64; break; case 142: countryCode = 505; break; case 143: countryCode = 227; break; case 144: countryCode = 234; break; case 145: countryCode = 683; break; case 146: countryCode = 6722; break; case 147: countryCode = 47; break; case 148: countryCode = 968; break; case 149: countryCode = 92; break; case 150: countryCode = 680; break; case 151: countryCode = 507; break; case 152: countryCode = 675; break; case 153: countryCode = 595; break; case 154: countryCode = 51; break; case 155: countryCode = 63; break; case 156: countryCode = 48; break; case 157: countryCode = 351; break; case 158: countryCode = 121; break; case 159: countryCode = 974; break; case 160: countryCode = 262; break; case 161: countryCode = 40; break; case 162: countryCode = 6701; break; case 163: countryCode = 7; break; case 164: countryCode = 250; break; case 165: countryCode = 122; break; case 166: countryCode = 670; break; case 167: countryCode = 378; break; case 168: countryCode = 966; break; case 169: countryCode = 442; break; case 170: countryCode = 221; break; case 171: countryCode = 248; break; case 172: countryCode = 232; break; case 173: countryCode = 65; break; case 174: countryCode = 4201; break; case 175: countryCode = 386; break; case 176: countryCode = 677; break; case 177: countryCode = 252; break; case 178: countryCode = 27; break; case 179: countryCode = 34; break; case 180: countryCode = 94; break; case 181: countryCode = 290; break; case 182: countryCode = 115; break; case 183: countryCode = 249; break; case 184: countryCode = 597; break; case 185: countryCode = 268; break; case 186: countryCode = 46; break; case 187: countryCode = 41; break; case 188: countryCode = 963; break; case 189: countryCode = 886; break; case 190: countryCode = 708; break; case 191: countryCode = 255; break; case 192: countryCode = 66; break; case 193: countryCode = 6702; break; case 194: countryCode = 228; break; case 195: countryCode = 690; break; case 196: countryCode = 676; break; case 197: countryCode = 216; break; case 198: countryCode = 90; break; case 199: countryCode = 709; break; case 200: countryCode = 688; break; case 201: countryCode = 256; break; case 202: countryCode = 380; break; case 203: countryCode = 44; break; case 204: countryCode = 598; break; case 205: countryCode = 1; break; case 206: countryCode = 711; break; case 207: countryCode = 678; break; case 208: countryCode = 379; break; case 209: countryCode = 58; break; case 210: countryCode = 84; break; case 211: countryCode = 441; break; case 212: countryCode = 685; break; case 213: countryCode = 967; break; case 214: countryCode = 381; break; case 215: countryCode = 382; break; case 216: countryCode = 3811; break; case 217: countryCode = 260; break; case 218: countryCode = 263; break; } return countryCode; } quint16 userInformation::getOccupation() { quint16 occupationCode = 0; if ( int index = ui.occupationComboBox->currentIndex() ) { if ( index == 28) occupationCode = 99; else occupationCode = index; } else occupationCode = 0; return occupationCode; } quint16 userInformation::getInterests(int index) { quint16 interestsCode = 0; if ( index == 1 ) if ( int index = ui.interestsComboBox1->currentIndex() ) { interestsCode = index + 99; } if ( index == 2 ) if ( int index = ui.interestsComboBox2->currentIndex() ) { interestsCode = index + 99; } if ( index == 3 ) if ( int index = ui.interestsComboBox3->currentIndex() ) { interestsCode = index + 99; } if ( index == 4 ) if ( int index = ui.interestsComboBox4->currentIndex() ) { interestsCode = index + 99; } return interestsCode; } QString userInformation::getInterestString(int index) { if ( index == 1 ) return ui.interestsEdit1->text(); if ( index == 2 ) return ui.interestsEdit2->text(); if ( index == 3 ) return ui.interestsEdit3->text(); if ( index == 4 ) return ui.interestsEdit4->text(); return QString(); } quint8 userInformation::getAuth() { if ( ui.requiredButton->isChecked() ) return 1; if( ui.allButton->isChecked()) return 0; return 0; } void userInformation::on_addButton_clicked() { // QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), // "", // tr("Images (*.gif *.bmp *.jpg *.jpeg *.png)")); QFileDialog dialog(0,tr("Open File"),"",tr("Images (*.gif *.bmp *.jpg *.jpeg *.png)")); dialog.setAttribute(Qt::WA_QuitOnClose, false); QStringList fileList; if ( dialog.exec()) fileList = dialog.selectedFiles(); if ( fileList.count()) { QString fileName = fileList.at(0); if ( !fileName.isEmpty()) { QFile iconFile(fileName); // if (iconFile.open(QIODevice::ReadOnly)) // { if ( iconFile.size() > (6 * 1024)) { QMessageBox::warning(this, tr("Open error"), tr("Image size is too big")); } else { QSize picSize = getPictureSize(fileName); ui.pictureLabel->setText(tr("").arg(fileName).arg(picSize.height()).arg(picSize.width())); pictureChanged = true; picturePath = fileName; } // } } } } void userInformation::on_removeButton_clicked() { pictureChanged = true; picturePath.clear(); ui.pictureLabel->clear(); } QStringList userInformation::getCountryList() { return QStringList() << QString() << QApplication::translate("searchUserClass", "Afghanistan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Albania", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Algeria", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "American Samoa", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Andorra", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Angola", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Anguilla", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Antigua", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Antigua & Barbuda", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Antilles", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Argentina", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Armenia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Aruba", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "AscensionIsland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Australia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Austria", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Azerbaijan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bahamas", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bahrain", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bangladesh", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Barbados", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Barbuda", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Belarus", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Belgium", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Belize", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Benin", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bermuda", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bhutan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bolivia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Botswana", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Brazil", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Brunei", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bulgaria", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Burkina Faso", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Burundi", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Cambodia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Cameroon", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Canada", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Canary Islands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Cayman Islands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Chad", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Chile, Rep. of", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "China", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Christmas Island", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Colombia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Comoros", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "CookIslands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Costa Rica", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Croatia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Cuba", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Cyprus", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Czech Rep.", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Denmark", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Diego Garcia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Djibouti", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Dominica", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Dominican Rep.", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Ecuador", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Egypt", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "El Salvador", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Eritrea", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Estonia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Ethiopia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Faeroe Islands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Falkland Islands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Fiji", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Finland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "France", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "FrenchAntilles", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "French Guiana", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "French Polynesia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Gabon", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Gambia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Georgia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Germany", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Ghana", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Gibraltar", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Greece", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Greenland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Grenada", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Guadeloupe", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Guatemala", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Guinea", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Guinea-Bissau", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Guyana", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Haiti", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Honduras", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Hong Kong", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Hungary", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Iceland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "India", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Indonesia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Iraq", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Ireland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Israel", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Italy", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Jamaica", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Japan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Jordan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Kazakhstan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Kenya", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Kiribati", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Korea, North", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Korea, South", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Kuwait", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Kyrgyzstan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Laos", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Latvia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Lebanon", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Lesotho", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Liberia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Liechtenstein", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Lithuania", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Luxembourg", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Macau", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Madagascar", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Malawi", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Malaysia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Maldives", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mali", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Malta", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Marshall Islands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Martinique", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mauritania", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mauritius", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "MayotteIsland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mexico", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Moldova, Rep. of", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Monaco", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mongolia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Montserrat", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Morocco", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mozambique", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Myanmar", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Namibia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Nauru", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Nepal", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Netherlands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Nevis", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "NewCaledonia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "New Zealand", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Nicaragua", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Niger", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Nigeria", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Niue", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Norfolk Island", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Norway", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Oman", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Pakistan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Palau", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Panama", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Papua New Guinea", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Paraguay", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Peru", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Philippines", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Poland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Portugal", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Puerto Rico", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Qatar", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Reunion Island", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Romania", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Rota Island", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Russia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Rwanda", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Saint Lucia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Saipan Island", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "San Marino", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Saudi Arabia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Scotland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Senegal", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Seychelles", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Sierra Leone", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Singapore", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Slovakia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Slovenia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Solomon Islands", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Somalia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "SouthAfrica", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Spain", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Sri Lanka", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "St. Helena", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "St. Kitts", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Sudan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Suriname", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Swaziland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Sweden", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Switzerland", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Syrian ArabRep.", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Taiwan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tajikistan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tanzania", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Thailand", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tinian Island", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Togo", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tokelau", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tonga", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tunisia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Turkey", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Turkmenistan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tuvalu", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Uganda", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Ukraine", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "United Kingdom", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Uruguay", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "USA", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Uzbekistan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Vanuatu", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Vatican City", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Venezuela", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Vietnam", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Wales", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Western Samoa", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Yemen", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Yugoslavia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Yugoslavia - Montenegro", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Yugoslavia - Serbia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Zambia", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Zimbabwe", 0, QApplication::UnicodeUTF8); } QStringList userInformation::getLangList() { return QStringList() << QString() << QApplication::translate("searchUserClass", "Arabic", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bhojpuri", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Bulgarian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Burmese", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Cantonese", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Catalan", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Chinese", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Croatian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Czech", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Danish", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Dutch", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "English", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Esperanto", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Estonian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Farsi", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Finnish", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "French", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Gaelic", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "German", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Greek", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Hebrew", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Hindi", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Hungarian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Icelandic", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Indonesian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Italian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Japanese", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Khmer", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Korean", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Lao", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Latvian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Lithuanian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Malay", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Norwegian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Polish", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Portuguese", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Romanian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Russian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Serbian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Slovak", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Slovenian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Somali", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Spanish", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Swahili", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Swedish", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tagalog", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Tatar", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Thai", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Turkish", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Ukrainian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Urdu", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Vietnamese", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Yiddish", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Yoruba", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Afrikaans", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Persian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Albanian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Armenian", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Kyrgyz", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Maltese", 0, QApplication::UnicodeUTF8); } QStringList userInformation::getInterestList() { return QStringList() << QString() << QApplication::translate("searchUserClass", "Art", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Cars", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Celebrity Fans", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Collections", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Computers", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Culture & Literature", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Fitness", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Games", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Hobbies", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "ICQ - Providing Help", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Internet", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Lifestyle", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Movies/TV", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Music", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Outdoor Activities", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Parenting", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Pets/Animals", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Religion", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Science/Technology", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Skills", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Sports", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Web Design", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Nature and Environment", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "News & Media", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Government", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Business & Economy", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mystics", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Travel", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Astronomy", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Space", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Clothing", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Parties", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Women", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Social science", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "60's", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "70's", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "80's", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "50's", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Finance and corporate", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Entertainment", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Consumer electronics", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Retail stores", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Health and beauty", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Media", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Household products", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Mail order catalog", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Business services", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Audio and visual", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Sporting and athletic", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Publishing", 0, QApplication::UnicodeUTF8) << QApplication::translate("searchUserClass", "Home automation", 0, QApplication::UnicodeUTF8); } bool userInformation::eventFilter( QObject * o, QEvent * e ) { if ( (QWidget*)o != this && (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonDblClick || e->type() == QEvent::MouseButtonRelease || e->type() == QEvent::KeyPress|| e->type() == QEvent::KeyRelease || e->type() == QEvent::Wheel)) { e->ignore(); return true; } return false; } QString icq_fromCaps(const QByteArray &caps) { if(!memcmp(caps.constData(), ICQ_CAPABILITY_SRVxRELAY, 0x10)) return "SRVxRELAY"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_SHORTCAPS, 0x10)) return "SHORTCAPS"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMVOICE, 0x10)) return "AIMVOICE"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMSENDFILE, 0x10)) return "AIMSENDFILE"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_DIRECT, 0x10)) return "DIRECT"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMIMAGE, 0x10)) return "AIMIMAGE"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMICON, 0x10)) return "AIMICON"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIM_STOCKS, 0x10)) return "AIM_STOCKS"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMGETFILE, 0x10)) return "AIMGETFILE"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIM_GAMES, 0x10)) return "AIM_GAMES"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_BUDDY_LIST, 0x10)) return "BUDDY_LIST"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AVATAR, 0x10)) return "AVATAR"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIM_SUPPORT, 0x10)) return "AIM_SUPPORT"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_UTF8, 0x10)) return "UTF8"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_RTFxMSGS, 0x10)) return "RTFxMSGS"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_TYPING, 0x10)) return "TYPING"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMxINTER, 0x10)) return "AIMxINTER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICHAT, 0x10)) return "ICHAT"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_XTRAZ, 0x10)) return "XTRAZ"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_BART, 0x10)) return "BART"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_LICQxVER, 0x10)) return "LICQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_SIMxVER, 0x10)) return "SIMxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QUTIMxVER, 0x10)) return "QUTIMxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_K8QUTIMxVER, 0x10)) return "K8QUTIMxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_SIMOLDxVER, 0x10)) return "SIMOLDxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_KOPETExVER, 0x10)) return "KOPETExVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MICQxVER, 0x10)) return "MICQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MIRANDAxVER, 0x10)) return "MIRANDAxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MIRMOBxVER, 0x10)) return "MIRMOBxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MIMPACKxVER, 0x10)) return "MIMPACKxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICQJS7xVER, 0x10)) return "ICQJS7xVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICQJPxVER, 0x10)) return "ICQJPxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICQJS7SxVER, 0x10)) return "ICQJS7SxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICQJS7OxVER, 0x10)) return "ICQJS7OxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICQJSINxVER, 0x10)) return "ICQJSINxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICQJENxVER, 0x10)) return "ICQJENxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMOSCARxVER, 0x10)) return "AIMOSCARxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_TRILLIANxVER, 0x10)) return "TRILLIANxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_TRILCRPTxVER, 0x10)) return "TRILCRPTxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_CLIMMxVER, 0x10)) return "CLIMMxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ANDRQxVER, 0x10)) return "ANDRQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_RANDQxVER, 0x10)) return "RANDQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MCHATxVER, 0x10)) return "MCHATxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_JIMMxVER, 0x10)) return "JIMMxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_COREPGRxVER, 0x10)) return "COREPGRxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_DICHATxVER, 0x10)) return "DICHATxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_NAIMxVER, 0x10)) return "NAIMxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ANSTxVER, 0x10)) return "ANSTxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QIPxVER, 0x10)) return "QIPxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QIPPDAxVER, 0x10)) return "QIPPDAxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QIPMOBxVER, 0x10)) return "QIPMOBxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QIPINFxVER, 0x10)) return "QIPINFxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QIPPLUGINS, 0x10)) return "QIPPLUGINS"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QIP1, 0x10)) return "QIP1"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_QIPSYMBxVER, 0x10)) return "QIPSYMBxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_VMICQxVER, 0x10)) return "VMICQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_SMAPERxVER, 0x10)) return "SMAPERxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IMPLUXxVER, 0x10)) return "IMPLUXxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_YAPPxVER, 0x10)) return "YAPPxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IM2xVER, 0x10)) return "IM2xVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MACICQxVER, 0x10)) return "MACICQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IS2001, 0x10)) return "IS2001"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IS2002, 0x10)) return "IS2002"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_COMM20012, 0x10)) return "COMM20012"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_STRICQxVER, 0x10)) return "STRICQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ICQLITExVER, 0x10)) return "ICQLITExVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMCHAT, 0x10)) return "AIMCHAT"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_PIGEONxVER, 0x10)) return "PIGEONxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_RAMBLER, 0x10)) return "RAMBLER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_ABV, 0x10)) return "ABV"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_NETVIGATOR, 0x10)) return "NETVIGATOR"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_TZERS, 0x10)) return "TZERS"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_HTMLMSGS, 0x10)) return "HTMLMSGS"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_LIVEVIDEO, 0x10)) return "LIVEVIDEO"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_SIMPLITE, 0x10)) return "SIMPLITE"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_SIMPPRO, 0x10)) return "SIMPPRO"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IMSECURE, 0x10)) return "IMSECURE"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MSGTYPE2, 0x10)) return "MSGTYPE2"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMICQ, 0x10)) return "AIMICQ"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMAUDIO, 0x10)) return "AIMAUDIO"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_PALMJICQ, 0x10)) return "PALMJICQ"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_INLUXMSGR, 0x10)) return "INLUXMSGR"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_MIPCLIENT, 0x10)) return "MIPCLIENT"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IMADERING, 0x10)) return "IMADERING"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_NATICQxVER, 0x10)) return "NATICQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_WEBICQPRO, 0x10)) return "WEBICQPRO"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_BAYANICQxVER, 0x10)) return "BAYANICQxVER"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMADDINGS, 0x10)) return "AIMADDINGS"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMCONTSEND, 0x10)) return "AIMCONTSEND"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMUNK2, 0x10)) return "AIMUNK2"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_AIMSNDBDDLST, 0x10)) return "AIMSNDBDDLST"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IMSECKEY1, 0x10)) return "IMSECKEY1"; if(!memcmp(caps.constData(), ICQ_CAPABILITY_IMSECKEY2, 0x10)) return "IMSECKEY2"; return caps.toHex(); } QString icq_fromShortCaps(quint16 caps) { switch(caps) { case 0x1341: return "AIMVOICE"; case 0x1343: return "SENDFILE"; case 0x1344: return "DIRECT"; case 0x1345: return "AIMIMAGE"; case 0x1346: return "BUDDYCON"; case 0x1347: return "AIMSTOCKS"; case 0x1348: return "GETFILE"; case 0x1349: return "RELAY"; case 0x134a: return "GAMES"; case 0x134b: return "AIMBUDDYLIST"; case 0x134c: return "AVATAR"; case 0x134d: return "AIMSUPPORT"; case 0x134e: return "UTF"; default: return "0x" + QString::number(caps, 16); } } void userInformation::setAdditional(quint32 externalIP,quint32 internalIP,quint32 onlineTime,quint32 signonTime,quint32 regTime, quint32 idleSinceTime, contactStatus status, const QString &clientId, const QList &capList, const QList &shortCaps, quint32 lastInfoUpdate, quint32 lastExtStatusInfoUpdate, quint32 lastExtInfoUpdate, bool online, quint8 protocol, quint32 userPort, quint32 Cookie) { QString customToolTip; if ( externalIP ) { customToolTip.append(QObject::tr("External ip: %1.%2.%3.%4
").arg(externalIP / 0x1000000).arg( externalIP % 0x1000000 / 0x10000).arg( externalIP % 0x10000 / 0x100).arg(externalIP % 0x100)); } if ( internalIP ) { customToolTip.append(QObject::tr("Internal ip: %1.%2.%3.%4
").arg(internalIP / 0x1000000).arg( internalIP % 0x1000000 / 0x10000).arg( internalIP % 0x10000 / 0x100).arg(internalIP % 0x100)); } if ( online ) { QDateTime time = QDateTime::currentDateTime(); time = time.addSecs(-onlineTime); time = time.toUTC(); customToolTip.append(QObject::tr("Online time: %1d %2h %3m %4s
").arg(time.date().day() - 1).arg( time.time().hour()).arg(time.time().minute()).arg(time.time().second())); time.setTime_t(signonTime); customToolTip.append(QObject::tr("Signed on: %1
").arg(time.toLocalTime().toString())); ui.lastLoginEdit->setText(time.toLocalTime().toString()); time.setTime_t(regTime); if ( idleSinceTime ) { time.setTime_t(idleSinceTime); if (status == contactAway) customToolTip.append(QObject::tr("Away since: %1
").arg(time.toLocalTime().toString())); else if (status == contactNa) customToolTip.append(QObject::tr("N/A since: %1
").arg(time.toLocalTime().toString())); } customToolTip.append(QObject::tr("Reg. date: %1
").arg(time.toString())); ui.registrationEdit->setText(time.toString()); customToolTip.append(QObject::tr("Possible client: %1
").arg(clientId)); customToolTip.append(tr("Protocol version: %1
").arg(protocol)); customToolTip.append(tr("[Capabilities]
")); for ( int i = 0; i < capList.count(); i++) { customToolTip.append(icq_fromCaps(capList.at(i)) + "
"); } if (shortCaps.count()) { customToolTip.append(tr("[Short capabilities]
")); for ( int i = 0; i < shortCaps.count(); i++) { customToolTip.append(icq_fromShortCaps(shortCaps.at(i)) + "
"); } } if (lastInfoUpdate | lastExtStatusInfoUpdate | lastExtInfoUpdate | userPort |Cookie) { customToolTip.append(tr("[Direct connection extra info]
")); customToolTip.append("lastInfoUpdate: 0x" + QString::number(lastInfoUpdate, 16) + "
"); customToolTip.append("lastExtStatusInfoUpdate: 0x" + QString::number(lastExtStatusInfoUpdate, 16) + "
"); customToolTip.append("lastExtInfoUpdate: 0x" + QString::number(lastExtInfoUpdate, 16) + "
"); customToolTip.append("User Port: " + QString::number(userPort, 10) + "
"); customToolTip.append("Cookie: " + QString::number(Cookie, 10) + "
"); } } ui.additionalLabel->setText(customToolTip); } qutim-0.2.0/plugins/icq/icqaccount.cpp0000644000175000017500000010250011273054317021407 0ustar euroelessareuroelessar/* icqAccount Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include "oscarprotocol.h" #include "customstatusdialog.h" #include "contactlist.h" #include "icqaccount.h" #include "filetransfer.h" icqAccount::icqAccount(QString string, const QString &profile_name, QObject *parent) : QObject(parent) , icqUin(string) , m_profile_name(profile_name) , m_icq_plugin_system(IcqPluginSystem::instance()) { currentTrayStatus = false; statusTrayMenuExist = false; deleteingAccount = false; menuExist = false; firsTrayMessageIsShown = false; positionInStack = 1; currentXstatus = 0; statusIconIndex = 0; iAmConnected = false; thisIcqProtocol = new oscarProtocol(icqUin, m_profile_name, this); connect(thisIcqProtocol, SIGNAL(statusChanged(accountStatus)), this, SLOT(setStatusIcon(accountStatus))); connect(thisIcqProtocol, SIGNAL(statusChanged(accountStatus)), this, SLOT(onOscarStatusChanged(accountStatus))); connect(thisIcqProtocol, SIGNAL(accountConnected(bool)), this, SLOT(accountConnected(bool))); connect(thisIcqProtocol, SIGNAL(systemMessage(const QString &)), this, SLOT(systemMessage(const QString &))); connect(thisIcqProtocol, SIGNAL(userMessage(const QString &, const QString &, const QString &, userMessageType, bool)), this, SLOT(userMessage(const QString &, const QString &, const QString &, userMessageType, bool))); connect(thisIcqProtocol, SIGNAL(getNewMessage()), this, SIGNAL(getNewMessage())); connect(thisIcqProtocol, SIGNAL(readAllMessages()), this, SIGNAL(readAllMessages())); connect(thisIcqProtocol->getContactListClass(), SIGNAL(updateStatusMenu(bool)), this, SLOT(updateStatusMenu(bool))); connect(this, SIGNAL(updateTranslation()), thisIcqProtocol, SIGNAL(updateTranslation())); // connect(this, SIGNAL(soundSettingsChanged()), // getProtocol()->getContactListClass(), // SIGNAL(soundSettingsUpdated())); createIcons(); createStatusMenu(); chooseStatus = new QAction(currentIcon, icqUin, this); chooseStatus->setCheckable(true); connect ( chooseStatus, SIGNAL(triggered()), this, SLOT(emitChangeStatus())); loadAccountSettings(); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); configPath = settings.fileName().section('/', 0, -2); createMenuAccount(); // plugins = new pluginSystem(icqUin, this); // thisIcqProtocol->getContactListClass()->plugins = plugins; // createContacts(); m_restore_xstatus_num = -10; m_restore_status = restoreAccount; m_edit_dialog_opened = false; } icqAccount::~icqAccount() { // delete thisIcqProtocol; delete accountLineButton; delete privacyStatus; delete m_account_additional_menu; delete statusMenu; // delete m_account_menu; } void icqAccount::createAccountButton(QHBoxLayout *boxLayout) { accountLineButton = new accountButton; #if defined(Q_OS_MAC) boxLayout->addWidget(accountLineButton, 0, Qt::AlignLeft); #else boxLayout->addWidget(accountLineButton, 0, Qt::AlignRight); #endif // boxLayout->addWidget(accountLineButton, 0, index); accountLineButton->setToolTip(icqUin); accountLineButton->setIcon(currentIcon); accountLineButton->setPopupMode(QToolButton::InstantPopup); accountLineButton->setMenu(statusMenu); } //void icqAccount::createMenuAccount(QMenu *menu, QAction *before) //{ // accountAction = menu->insertMenu(before, statusMenu); // menuExist = true; //} void icqAccount::createMenuAccount() { // m_account_menu = new QMenu(icqUin); // m_account_menu->setIcon(currentIcon); // m_account_menu->addMenu(statusMenu); menuExist = true; } void icqAccount::removeMenuAccount(QMenu *menu) { menuExist = false; menu->removeAction(accountAction); } void icqAccount::removeAccountButton() { delete accountLineButton; } void icqAccount::createIcons() { /*onlineIcon = new QIcon(statusIconClass::getInstance()->getOnlineIcon()); offlineIcon = new QIcon(statusIconClass::getInstance()->getOfflineIcon()); ffcIcon = new QIcon(statusIconClass::getInstance()->getFreeForChatIcon()); awayIcon = new QIcon(statusIconClass::getInstance()->getAwayIcon()); naIcon = new QIcon(statusIconClass::getInstance()->getNotAvailableIcon()); occupiedIcon = new QIcon(statusIconClass::getInstance()->getOccupiedIcon()); dndIcon = new QIcon(statusIconClass::getInstance()->getDoNotDisturbIcon()); invisibleIcon = new QIcon(statusIconClass::getInstance()->getInvisibleIcon()); connectingIcon = new QIcon(statusIconClass::getInstance()->getConnectingIcon()); currentIcon = new QIcon(statusIconClass::getInstance()->getOfflineIcon()); currentIconPath = statusIconClass::getInstance()->getIconFactory()->getOfflinePath(); lunchIcon = new QIcon(statusIconClass::getInstance()->getLunchIcon()); evilIcon = new QIcon(statusIconClass::getInstance()->getEvilIcon()); depressionIcon = new QIcon(statusIconClass::getInstance()->getDepressionIcon()); atHomeIcon = new QIcon(statusIconClass::getInstance()->getAtHomeIcon()); atWorkIcon = new QIcon(statusIconClass::getInstance()->getAtWorkIcon()); */ currentIcon = m_icq_plugin_system.getStatusIcon("offline", "icq"); currentIconPath = m_icq_plugin_system.getStatusIconFileName("offline", "icq"); } void icqAccount::createStatusMenu() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); showCustomStatus = settings.value("statuses/customstat",true).toBool(); onlineAction = new QAction(m_icq_plugin_system.getStatusIcon("online", "icq"), tr("Online"), this); connect(onlineAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(onlineAction); offlineAction = new QAction(m_icq_plugin_system.getStatusIcon("offline", "icq"), tr("Offline"), this); connect(offlineAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(offlineAction); ffcAction = new QAction(m_icq_plugin_system.getStatusIcon("ffc", "icq"), tr("Free for chat"), this); connect(ffcAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(ffcAction); awayAction = new QAction(m_icq_plugin_system.getStatusIcon("away", "icq"), tr("Away"), this); connect(awayAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(awayAction); naAction = new QAction(m_icq_plugin_system.getStatusIcon("na", "icq"), tr("NA"), this); connect(naAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(naAction); occupiedAction = new QAction(m_icq_plugin_system.getStatusIcon("occupied", "icq"), tr("Occupied"), this); connect(occupiedAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(occupiedAction); dndAction = new QAction(m_icq_plugin_system.getStatusIcon("dnd", "icq"), tr("DND"), this); connect(dndAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(dndAction); invisibleAction = new QAction(m_icq_plugin_system.getStatusIcon("invisible", "icq"), tr("Invisible"), this); connect(invisibleAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(invisibleAction); lunchAction = new QAction(m_icq_plugin_system.getStatusIcon("lunch", "icq"), tr("Lunch"), this); connect(lunchAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(lunchAction); evilAction = new QAction(m_icq_plugin_system.getStatusIcon("evil", "icq"), tr("Evil"), this); connect(evilAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(evilAction); depressionAction = new QAction(m_icq_plugin_system.getStatusIcon("depression", "icq"), tr("Depression"), this); connect(depressionAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(depressionAction); atHomeAction = new QAction(m_icq_plugin_system.getStatusIcon("athome", "icq"), tr("At Home"), this); connect(atHomeAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(atHomeAction); atWorkAction = new QAction(m_icq_plugin_system.getStatusIcon("atwork", "icq"), tr("At Work"), this); connect(atWorkAction, SIGNAL(triggered()), this, SLOT(setStatus())); statusMenuActions.push_back(atWorkAction); // Set all of status actions as unchecked QVectorIterator iterator(statusMenuActions); while (iterator.hasNext()) { iterator.next()->setCheckable(true); } customStatus = new QAction(tr("Custom status"), this); connect(customStatus, SIGNAL(triggered()), this, SLOT(customStatusTriggered())); statusMenu = new QMenu; privacyStatus = new QMenu(tr("Privacy status")); privacyStatus->setIcon(IcqPluginSystem::instance().getIcon("privacy")); privacyGroup = new QActionGroup(this); visibleForAll = new QAction(tr("Visible for all"), this); visibleForAll->setCheckable(true); privacyGroup->addAction(visibleForAll); connect(visibleForAll, SIGNAL(triggered()), this, SLOT(setVisibleForAll())); visibleForVis = new QAction(tr("Visible only for visible list"), this); visibleForVis->setCheckable(true); privacyGroup->addAction(visibleForVis); connect(visibleForVis, SIGNAL(triggered()), this, SLOT(setVisibleForVis())); notVisibleForInv = new QAction(tr("Invisible only for invisible list"), this); notVisibleForInv->setCheckable(true); privacyGroup->addAction(notVisibleForInv); connect(notVisibleForInv, SIGNAL(triggered()), this, SLOT(setNotVisibleForInv())); visibleForContact = new QAction(tr("Visible only for contact list"), this); visibleForContact->setCheckable(true); privacyGroup->addAction(visibleForContact); connect(visibleForContact, SIGNAL(triggered()), this, SLOT(setVisibleForContact())); invisibleForAll = new QAction(tr("Invisible for all"), this); invisibleForAll->setCheckable(true); privacyGroup->addAction(invisibleForAll); connect(invisibleForAll, SIGNAL(triggered()), this, SLOT(setInvisibleForAll())); privacyStatus->addAction(visibleForAll); privacyStatus->addAction(visibleForVis); privacyStatus->addAction(notVisibleForInv); privacyStatus->addAction(visibleForContact); privacyStatus->addAction(invisibleForAll); statusMenu->setTitle(icqUin); statusMenu->setIcon(currentIcon); statusMenu->addAction(onlineAction); statusMenu->addAction(ffcAction); statusMenu->addAction(awayAction); statusMenu->addAction(lunchAction); statusMenu->addAction(evilAction); statusMenu->addAction(depressionAction); statusMenu->addAction(atHomeAction); statusMenu->addAction(atWorkAction); statusMenu->addAction(naAction); statusMenu->addAction(occupiedAction); statusMenu->addAction(dndAction); statusMenu->addAction(invisibleAction); statusMenu->addSeparator(); statusMenu->addAction(customStatus); statusMenu->addSeparator(); statusMenu->addMenu(privacyStatus); m_account_additional_menu = new QMenu(tr("Additional")); statusMenu->addMenu(m_account_additional_menu); thisIcqProtocol->getContactListClass()->initializaMenus(m_account_additional_menu); statusMenu->addAction(offlineAction); updateStatusMenu(showCustomStatus); quint32 privacy = account_settings.value("statuses/privacy", 4).toUInt(); switch( privacy ) { case 1: visibleForAll->setChecked(true); break; case 2: visibleForVis->setChecked(true); break; case 3: notVisibleForInv->setChecked(true); break; case 4: visibleForContact->setChecked(true); break; case 5: invisibleForAll->setChecked(true); break; default: visibleForContact->setChecked(true); } } void icqAccount::setStatusIcon(accountStatus status) { switch (status) { case online: currentIcon = m_icq_plugin_system.getStatusIcon("online", "icq"); currentIconPath = m_icq_plugin_system.getStatusIconFileName("offline", "icq"); break; case ffc: currentIcon = m_icq_plugin_system.getStatusIcon("ffc", "icq"); currentIconPath = m_icq_plugin_system.getStatusIconFileName("ffc", "icq"); break; case away: currentIcon = m_icq_plugin_system.getStatusIcon("away", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("away", "icq"); break; case na: currentIcon = m_icq_plugin_system.getStatusIcon("na", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("na", "icq"); break; case occupied: currentIcon = m_icq_plugin_system.getStatusIcon("occupied", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("occupied", "icq"); break; case dnd: currentIcon = m_icq_plugin_system.getStatusIcon("dnd", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("dnd", "icq"); break; case invisible: currentIcon = m_icq_plugin_system.getStatusIcon("invisible", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("invisible", "icq"); break; case offline: currentIcon = m_icq_plugin_system.getStatusIcon("offline", "icq"); currentIconPath = m_icq_plugin_system.getStatusIconFileName("offline", "icq"); iAmConnected = false; // emit playSoundEvent(SoundEvent::Disconnected, getStatus()); break; case connecting: currentIcon = m_icq_plugin_system.getStatusIcon("connecting", "icq"); currentIconPath = m_icq_plugin_system.getStatusIconFileName("connecting", "icq"); break; case lunch: currentIcon = m_icq_plugin_system.getStatusIcon("lunch", "icq"); currentIconPath = m_icq_plugin_system.getStatusIconFileName("lunch", "icq"); break; case evil: currentIcon = m_icq_plugin_system.getStatusIcon("evil", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("evil", "icq"); break; case depression: currentIcon = m_icq_plugin_system.getStatusIcon("depression", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("depression", "icq"); break; case athome: currentIcon = m_icq_plugin_system.getStatusIcon("athome", "icq"); currentIconPath = m_icq_plugin_system.getStatusIconFileName("athome", "icq"); break; case atwork: currentIcon = m_icq_plugin_system.getStatusIcon("atwork", "icq");; currentIconPath = m_icq_plugin_system.getStatusIconFileName("atwork", "icq"); break; default: break; } if ( statusIconIndex != 1) { updateIconStatus(); emit updateTrayToolTip(); } else { if ( !currentXstatus || status==offline) { updateIconStatus(); emit updateTrayToolTip(); } else if (iAmConnected){ currentIconPath = statusIconClass::getInstance()->xstatusList.at(currentXstatus - 1); currentIcon = QIcon(currentIconPath); updateIconStatus(); emit updateTrayToolTip(); } } } void icqAccount::onOscarStatusChanged(accountStatus status) { // Set all of status actions as unchecked QVectorIterator iterator(statusMenuActions); while (iterator.hasNext()) { iterator.next()->setChecked(false); } if (status == offline) { offlineAction->setChecked(true); } else if (status == online) { onlineAction->setChecked(true); } else if (status == ffc) { ffcAction->setChecked(true); } else if (status == away) { awayAction->setChecked(true); } else if (status == na) { naAction->setChecked(true); } else if (status == occupied) { occupiedAction->setChecked(true); } else if (status == dnd) { dndAction->setChecked(true); } else if (status == invisible) { invisibleAction->setChecked(true); } else if (status == lunch) { lunchAction->setChecked(true); } else if (status == evil) { evilAction->setChecked(true); } else if (status == depression) { depressionAction->setChecked(true); } else if (status == athome) { atHomeAction->setChecked(true); } else if (status == atwork) { atWorkAction->setChecked(true); } } void icqAccount::setStatus() // shold not be used directly!!! // use statusAction->trigger() if you have to // call setStatus() slot { // default status accountStatus status = online; // Getting triggered action QAction *act = qobject_cast(sender()); // Set all of status actions as unchecked QVectorIterator iterator(statusMenuActions); while (iterator.hasNext()) { iterator.next()->setChecked(false); } // Set button checked //act->setChecked(true); // setting status if (act == offlineAction)status = offline; else if (act == ffcAction) status = ffc; else if (act == awayAction) status = away; else if (act == naAction) status = na; else if (act == occupiedAction) status = occupied; else if (act == dndAction) status = dnd; else if (act == invisibleAction) status = invisible; else if (act == lunchAction) status = lunch; else if (act == evilAction) status = evil; else if (act == depressionAction) status = depression; else if (act == atHomeAction) status = athome; else if (act == atWorkAction) status = atwork; m_restore_status = status; // Saving settings routine if ((status != online) && (status != offline) && (status != ffc) && (status != invisible)) { QString sName(StatusNames[static_cast(status)]); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin , "accountsettings"); m_restore_status_text = account_settings.value("autoreply/" + sName + "msg", "").toString(); if (!settings.value("autoreply/" + sName + "dshow", false).toBool()) { // statusDialog sDialog (m_iconManager); QString status_message = account_settings.value("autoreply/" + sName + "msg", "").toString(); // sDialog.setStatusMessage(account_settings.value("autoreply/" + sName // + "msg", "").toString()); IcqPluginSystem &ips = IcqPluginSystem::instance(); // if ( sDialog.exec() ) bool do_not_show = false; if ( ips.setStatusMessage(status_message, do_not_show) ) { // bool do_not_show = sDialog.dontShow; settings.setValue("autoreply/" + sName + "dshow", do_not_show); if( do_not_show ) { settings.setValue("autoreply/" + sName // + "msg", sDialog.statusMessage.left(1000)); + "msg", status_message.left(1000)); } account_settings.setValue("autoreply/" + sName // + "msg", sDialog.statusMessage.left(1000)); + "msg", status_message.left(1000)); thisIcqProtocol->setStatus(status); } } else thisIcqProtocol->setStatus(status); } // Disconnecting else { if (status == offline) thisIcqProtocol->userDisconnected = true; // Apply new status thisIcqProtocol->setStatus(status); } } void icqAccount::setStatusFromPlugin(accountStatus status, const QString &status_text) { if ( status > -1) { if ((status != online) && (status != offline) && (status != ffc) && (status != invisible)) { QString sName(StatusNames[static_cast(status)]); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin , "accountsettings"); if ( m_restore_status == restoreAccount ) m_restore_status_text = account_settings.value("autoreply/" + sName + "msg", "").toString(); account_settings.setValue("autoreply/" + sName + "msg", status_text.left(1000)); thisIcqProtocol->setStatus(status); } // Disconnecting else { if (status == offline) thisIcqProtocol->userDisconnected = true; // Apply new status thisIcqProtocol->setStatus(status); } if ( m_restore_status == restoreAccount ) m_restore_status = thisIcqProtocol->getStatus(); } else { QString sName(StatusNames[static_cast(m_restore_status)]); QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin , "accountsettings"); m_restore_status_text = account_settings.value("autoreply/" + sName + "msg", "").toString(); account_settings.setValue("autoreply/" + sName + "msg", status_text.left(1000)); } } void icqAccount::restoreStatusFromPlugin() { setStatusFromPlugin(m_restore_status, m_restore_status_text); m_restore_status = restoreAccount; } void icqAccount::updateIconStatus() { accountLineButton->setIcon(currentIcon); // if ( menuExist ) // accountAction->setIcon(currentIcon); statusMenu->setIcon(currentIcon); if ( statusTrayMenuExist) chooseStatus->setIcon(currentIcon); if ( currentTrayStatus ) emit statusChanged(currentIcon); IcqPluginSystem &ips = IcqPluginSystem::instance(); ips.updateStatusIcons(); } void icqAccount::createTrayMenuStatus(QMenu *menu) { menu->addAction(chooseStatus); chooseStatus->setIcon(currentIcon); statusTrayMenuExist = true; } void icqAccount::removeTrayMenuStatus(QMenu *menu) { menu->removeAction(chooseStatus); statusTrayMenuExist = false; } void icqAccount::emitChangeStatus() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "qutimsettings"); settings.setValue("systray/current", icqUin); emit changeStatusInTrayMenu(icqUin); } void icqAccount::loadAccountSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); autoConnect = account_settings.value("connection/auto", true).toBool(); statusIconIndex = settings.value("main/staticon", 0).toInt(); thisIcqProtocol->reconnectOnDisc = settings.value("connection/reconnect", true).toBool(); thisIcqProtocol->getContactListClass()->fileTransferObject->setListenPort(account_settings.value("connection/listen", 5191).toUInt()); settings.beginGroup("clientid"); clientIndex = settings.value("index", 0).toUInt(); protocolVersion = settings.value("protocol", 1).toUInt(); clientCap1 = settings.value("cap1").toString(); clientCap2 = settings.value("cap2").toString(); clientCap3 = settings.value("cap3").toString(); settings.endGroup(); networkSettingsChanged(); currentXstatus = account_settings.value("xstatus/index", 0).toInt(); if ( currentXstatus ) { customStatus->setIcon(QIcon(statusIconClass::getInstance()->xstatusList.at(currentXstatus - 1))); }else customStatus->setIcon(QIcon()); } void icqAccount::saveAccountSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); if (getStatus() != offline) { settings.setValue("connection/currstatus", getStatus()); } else { settings.remove("connection/currstatus"); } } void icqAccount::autoconnecting() { if ( autoConnect ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); if ( account_settings.value("connection/statonexit", true).toBool() ) thisIcqProtocol->setStatus(static_cast(account_settings.value("connection/currstatus", 0).toInt())); else thisIcqProtocol->setStatus(online); } } void icqAccount::createContacts() { } void icqAccount::systemMessage(const QString &message) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = icqUin; contact_item.m_item_type = 2; IcqPluginSystem::instance().systemNotifiacation(contact_item, message); } void icqAccount::userMessage(const QString &fromUin, const QString &from, const QString &message, userMessageType type, bool fromList) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = fromUin; contact_item.m_item_type = 0; if ( type == readNotification ) { IcqPluginSystem::instance().customNotifiacation(contact_item, tr("is reading your away message")); } else if ( type == xstatusReadNotification ) { IcqPluginSystem::instance().customNotifiacation(contact_item, tr("is reading your x-status message")); } else if ( type == customMessage ) { IcqPluginSystem::instance().customNotifiacation(contact_item, message); } } void icqAccount::removeContactList() { thisIcqProtocol->removeContactList(); } void icqAccount::readMessageStack() { thisIcqProtocol->readreadMessageStack(); } void icqAccount::networkSettingsChanged() { QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); thisIcqProtocol->sendKeepAlive(account_settings.value("connection/alive", true).toBool()); thisIcqProtocol->getContactListClass()->fileTransferObject->setListenPort(account_settings.value("connection/listen", 5191).toUInt()); } void icqAccount::updateStatusMenu(bool f) { showCustomStatus = f; lunchAction->setVisible(f); evilAction->setVisible(f); depressionAction->setVisible(f); atHomeAction->setVisible(f); atWorkAction->setVisible(f); } void icqAccount::setVisibleForAll() { thisIcqProtocol->getContactListClass()->changePrivacy(1); } void icqAccount::setVisibleForVis() { thisIcqProtocol->getContactListClass()->changePrivacy(2); } void icqAccount::setNotVisibleForInv() { thisIcqProtocol->getContactListClass()->changePrivacy(3); } void icqAccount::setVisibleForContact() { thisIcqProtocol->getContactListClass()->changePrivacy(4); } void icqAccount::setInvisibleForAll() { thisIcqProtocol->getContactListClass()->changePrivacy(5); } void icqAccount::deleteTrayWindow(QObject *obj) { } QString icqAccount::getIconPathForUin(const QString &uin) const { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QString hashName = settings.value((uin + "/iconhash"), "").toByteArray(); if ( !hashName.isEmpty( ) ) return (configPath + "/icqicons/" + hashName); else return QString(""); } void icqAccount::generalSettingsChanged() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); thisIcqProtocol->getContactListClass()->setAvatarDisabled(settings.value("connection/disavatars", false).toBool()); thisIcqProtocol->reconnectOnDisc = settings.value("connection/reconnect", true).toBool(); int statindex = settings.value("main/staticon", 0).toInt(); if ( statusIconIndex != statindex ) { statusIconIndex = statindex; if ( statusIconIndex != 1) { updateIconStatus(); emit updateTrayToolTip(); } else { if ( !currentXstatus) updateIconStatus(); emit updateTrayToolTip(); } if (currentXstatus ) { if ( statusIconIndex == 2 || statusIconIndex == 1) { currentIconPath = statusIconClass::getInstance()->xstatusList.at(currentXstatus - 1); currentIcon = QIcon(currentIconPath); updateIconStatus(); emit updateTrayToolTip(); } else setStatusIcon(getStatus()); } else { setStatusIcon(getStatus()); } } settings.beginGroup("clientid"); unsigned newClientIndex = settings.value("index", 0).toUInt(); unsigned newProtocolVersion = settings.value("protocol", 1).toUInt(); QString newClientCap1 = settings.value("cap1").toString(); QString newClientCap2 = settings.value("cap2").toString(); QString newClientCap3 = settings.value("cap3").toString(); settings.endGroup(); if (checkClientIdentification(newClientIndex, newProtocolVersion, newClientCap1, newClientCap2, newClientCap3)) thisIcqProtocol->resendCapabilities(); } bool icqAccount::checkClientIdentification(unsigned index, unsigned pVersion, const QString &cap1, const QString &cap2, const QString &cap3) { bool changed = false; changed = (index == clientIndex ? changed : true); changed = (pVersion == protocolVersion ? changed : true); changed = (cap1 == clientCap1 ? changed : true); changed = (cap2 == clientCap2 ? changed : true); changed = (cap3 == clientCap3 ? changed : true); clientIndex = index; protocolVersion = pVersion; clientCap1 = cap1; clientCap2 = cap2; clientCap3 = cap3; return changed; } void icqAccount::customStatusTriggered() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); settings.beginGroup("xstatus"); customStatusDialog dialog (icqUin, m_profile_name); QPoint point = accountLineButton->mapToGlobal(QPoint(0,0)); dialog.move(point.x() - dialog.width(), point.y() - dialog.height()); dialog.setStatuses(settings.value("index", 0).toInt(), statusIconClass::getInstance()->xstatusList); settings.endGroup(); if ( dialog.exec() ) { currentXstatus = dialog.status; if ( currentXstatus ) { customStatus->setIcon(QIcon(statusIconClass::getInstance()->xstatusList.at(currentXstatus - 1))); } else customStatus->setIcon(QIcon()); thisIcqProtocol->sendOnlyCapabilities(); if (currentXstatus ) { if ( statusIconIndex == 2 || statusIconIndex == 1) { currentIconPath = statusIconClass::getInstance()->xstatusList.at(currentXstatus - 1); currentIcon = QIcon(currentIconPath); updateIconStatus(); emit updateTrayToolTip(); } else setStatusIcon(getStatus()); } else { setStatusIcon(getStatus()); } } } void icqAccount::onUpdateTranslation() { onlineAction->setText(tr("Online")); offlineAction->setText(tr("Offline")); ffcAction->setText(tr("Free for chat")); awayAction->setText(tr("Away")); naAction->setText(tr("NA")); occupiedAction->setText(tr("Occupied")); dndAction->setText(tr("DND")); invisibleAction->setText(tr("Invisible")); lunchAction->setText(tr("Lunch")); evilAction->setText(tr("Evil")); depressionAction->setText(tr("Depression")); atHomeAction->setText(tr("At Home")); atWorkAction->setText(tr("At Work")); customStatus->setText(tr("Custom status")); privacyStatus->setTitle(tr("Privacy status")); visibleForAll->setText(tr("Visible for all")); visibleForVis->setText(tr("Visible only for visible list")); notVisibleForInv->setText(tr("Invisible only for invisible list")); visibleForContact->setText(tr("Visible only for contact list")); invisibleForAll->setText(tr("Invisible for all")); emit updateTranslation(); } void icqAccount::onReloadGeneralSettings() { // Update status icons for status menu onlineAction->setIcon(statusIconClass::getInstance()->getOnlineIcon()); offlineAction->setIcon(statusIconClass::getInstance()->getOfflineIcon()); ffcAction->setIcon(statusIconClass::getInstance()->getFreeForChatIcon()); awayAction->setIcon(statusIconClass::getInstance()->getAwayIcon()); naAction->setIcon(statusIconClass::getInstance()->getNotAvailableIcon()); occupiedAction->setIcon(statusIconClass::getInstance()->getOccupiedIcon()); dndAction->setIcon(statusIconClass::getInstance()->getDoNotDisturbIcon()); invisibleAction->setIcon(statusIconClass::getInstance()->getInvisibleIcon()); lunchAction->setIcon(statusIconClass::getInstance()->getLunchIcon()); evilAction->setIcon(statusIconClass::getInstance()->getEvilIcon()); depressionAction->setIcon(statusIconClass::getInstance()->getDepressionIcon()); atHomeAction->setIcon(statusIconClass::getInstance()->getAtHomeIcon()); atWorkAction->setIcon(statusIconClass::getInstance()->getAtWorkIcon()); accountLineButton->setIcon(currentIcon); //Update current icon setStatusIcon(getStatus()); // Update button with status menu thisIcqProtocol->onReloadGeneralSettings(); } void icqAccount::setChooseStatusCheck(bool check) { chooseStatus->setChecked(check); } void icqAccount::setXstatusFromPlugin(int status, const QString &status_title, QString &status_text) { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); if ( m_restore_xstatus_num == -10 ) { m_restore_xstatus_num = settings.value("xstatus/index",0).toInt(); m_restore_xstatus_title = settings.value("xstatus/caption", "").toString(); m_restore_xstatus_text = settings.value("xstatus/message", "").toString(); } if ( status > -1) { settings.setValue("xstatus/index", status); settings.setValue("xstatus"+ QString::number(status - 1) + "/caption", status_title); settings.setValue("xstatus"+ QString::number(status - 1) + "/message", status_text); } settings.setValue("xstatus/caption", status_title); settings.setValue("xstatus/message", status_text); thisIcqProtocol->sendOnlyCapabilities(); } void icqAccount::restoreXstatusFromPlugin() { setXstatusFromPlugin(m_restore_xstatus_num, m_restore_xstatus_title, m_restore_xstatus_text); m_restore_xstatus_num = -10; } void icqAccount::editAccountSettings() { if ( !m_edit_dialog_opened ) { AccountEditDialog *m_edit_dialog = new AccountEditDialog(icqUin, m_profile_name, thisIcqProtocol->getContactListClass()); connect(m_edit_dialog, SIGNAL(destroyed(QObject*)), this, SLOT(editAccountSettingsClosed(QObject*))); m_edit_dialog->show(); m_edit_dialog_opened = true; } } void icqAccount::editAccountSettingsClosed(QObject*) { m_edit_dialog_opened = false; networkSettingsChanged(); } qutim-0.2.0/plugins/icq/clientidentify.cpp0000755000175000017500000017214611273054317022310 0ustar euroelessareuroelessar/* clientIdentify Copyright (c) 2008 by Alexey Ignatiev *************************************************************************** * * * 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 #include "treebuddyitem.h" #include "buddycaps.h" #include "clientidentify.h" #include #include // snprintf //============================================================================= clientIdentify::clientIdentify() : client_caps(), client_shorts() { } //============================================================================= clientIdentify::~clientIdentify() { } //============================================================================= void clientIdentify::addContactClientId(treeBuddyItem *buddy) { client_caps = buddy->capabilitiesList; client_shorts = buddy->shortCaps; client_proto = buddy->protocolVersion; lastInfo = buddy->lastInfoUpdate; lastExtInfo = buddy->lastExtInfoUpdate; lastExtStatusInfo = buddy->lastExtStatusInfoUpdate; buddy->clientId = ""; capsize = 0x10 * client_caps.size(); capsbuf = (char *)malloc(sizeof(char) * (capsize + 1)); for (int i = 0; i < client_caps.size(); ++i) { memcpy(capsbuf + i * 0x10, (const char *)client_caps[i], 0x10); } capsbuf[capsize] = '\0'; // There may be some x-statuses info here.. remove all of them. removeXstatus(); if ( !identify_by_Caps(buddy) ) { // Can't determine a buddy's client version using its capabilities. if ( !identify_by_ProtoVersion(buddy) ) { // Can't determine a buddy's client using its protocol version. if ( !identify_by_DCInfo(buddy) ) { // Can't determine a buddy's client even using direct connection info. // Well.. this is bad, I'm a loser.. :( buddy->clientId = "-"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); buddy->updateBuddyText(); } } } free(capsbuf); } //============================================================================= void clientIdentify::removeXstatus() { client_caps.removeAll(QByteArray::fromHex("01d8d7eeac3b492aa58dd3d877e66b92")); client_caps.removeAll(QByteArray::fromHex("5a581ea1e580430ca06f612298b7e4c7")); client_caps.removeAll(QByteArray::fromHex("83c9b78e77e74378b2c5fb6cfcc35bec")); client_caps.removeAll(QByteArray::fromHex("e601e41c33734bd1bc06811d6c323d81")); client_caps.removeAll(QByteArray::fromHex("8c50dbae81ed4786acca16cc3213c7b7")); client_caps.removeAll(QByteArray::fromHex("3fb0bd36af3b4a609eefcf190f6a5a7f")); client_caps.removeAll(QByteArray::fromHex("f8e8d7b282c4414290f810c6ce0a89a6")); client_caps.removeAll(QByteArray::fromHex("80537de2a4674a76b3546dfd075f5ec6")); client_caps.removeAll(QByteArray::fromHex("f18ab52edc57491d99dc6444502457af")); client_caps.removeAll(QByteArray::fromHex("1b78ae31fa0b4d3893d1997eeeafb218")); client_caps.removeAll(QByteArray::fromHex("61bee0dd8bdd475d8dee5f4baacf19a7")); client_caps.removeAll(QByteArray::fromHex("488e14898aca4a0882aa77ce7a165208")); client_caps.removeAll(QByteArray::fromHex("107a9a1812324da4b6cd0879db780f09")); client_caps.removeAll(QByteArray::fromHex("6f4930984f7c4affa27634a03bceaea7")); client_caps.removeAll(QByteArray::fromHex("1292e5501b644f66b206b29af378e48d")); client_caps.removeAll(QByteArray::fromHex("d4a611d08f014ec09223c5b6bec6ccf0")); client_caps.removeAll(QByteArray::fromHex("609d52f8a29a49a6b2a02524c5e9d260")); client_caps.removeAll(QByteArray::fromHex("63627337a03f49ff80e5f709cde0a4ee")); client_caps.removeAll(QByteArray::fromHex("1f7a4071bf3b4e60bc324c5787b04cf1")); client_caps.removeAll(QByteArray::fromHex("785e8c4840d34c65886f04cf3f3f43df")); client_caps.removeAll(QByteArray::fromHex("a6ed557e6bf744d4a5d4d2e7d95ce81f")); client_caps.removeAll(QByteArray::fromHex("12d07e3ef885489e8e97a72a6551e58d")); client_caps.removeAll(QByteArray::fromHex("ba74db3e9e24434b87b62f6b8dfee50f")); client_caps.removeAll(QByteArray::fromHex("634f6bd8add24aa1aab9115bc26d05a1")); client_caps.removeAll(QByteArray::fromHex("2ce0e4e57c6443709c3a7a1ce878a7dc")); client_caps.removeAll(QByteArray::fromHex("101117c9a3b040f981ac49e159fbd5d4")); client_caps.removeAll(QByteArray::fromHex("160c60bbdd4443f39140050f00e6c009")); client_caps.removeAll(QByteArray::fromHex("6443c6af22604517b58cd7df8e290352")); client_caps.removeAll(QByteArray::fromHex("16f5b76fa9d240358cc5c084703c98fa")); client_caps.removeAll(QByteArray::fromHex("631436ff3f8a40d0a5cb7b66e051b364")); client_caps.removeAll(QByteArray::fromHex("b70867f538254327a1ffcf4cc1939797")); client_caps.removeAll(QByteArray::fromHex("ddcf0ea971954048a9c6413206d6f280")); client_caps.removeAll(QByteArray::fromHex("d4e2b0ba334e4fa598d0117dbf4d3cc8")); client_caps.removeAll(QByteArray::fromHex("0072d9084ad143dd91996f026966026f")); } //============================================================================= bool clientIdentify::identify_by_DCInfo(treeBuddyItem *buddy) { char extra[256] = { 0 }; if ((lastInfo & 0xff000000) == 0x7d000000) { unsigned long ver = lastInfo & 0xffff; snprintf(extra, sizeof(extra) - 1, "%lu.%lu", ver / 1000, (ver / 10) % 100); if(ver % 10) { sprintf(extra, "%s.%lu", extra, ver % 10); } buddy->clientId = "Licq v" + QString(extra); if ((lastInfo & 0x00ff0000) == 0x00800000) buddy->clientId += "/SSL"; buddy->setClientIcon(Icon("licq", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0xffffffff) { if (lastExtStatusInfo == 0xffffffff) { buddy->clientId = "Gaim"; buddy->setClientIcon(Icon("gaim", IconInfo::Client)); buddy->updateBuddyText(); } else if ((!lastExtStatusInfo) && (client_proto == 7)) { buddy->clientId = "WebICQ"; buddy->setClientIcon(Icon("webicq", IconInfo::Client)); buddy->updateBuddyText(); } else if ((!lastExtStatusInfo) && (lastExtInfo == 0x3b7248ed)) { buddy->clientId = "Spam Bot"; buddy->setClientIcon(Icon("bot", IconInfo::Client)); buddy->updateBuddyText(); } else { unsigned ver1 = (lastExtStatusInfo >> 0x18) & 0xFF; unsigned ver2 = (lastExtStatusInfo >> 0x10) & 0xFF; unsigned ver3 = (lastExtStatusInfo >> 0x08) & 0xFF; unsigned ver4 = lastExtStatusInfo & 0xFF; if(ver1 & 0x80) { snprintf(extra, sizeof(extra) - 1, "Miranda IM (ICQ 0.%hu.%hu.%hu alpha)", ver2, ver3, ver4); } else { snprintf(extra, sizeof(extra) - 1, "Miranda IM (ICQ %hu.%hu.%hu.%hu)", ver1, ver2, ver3, ver4); } buddy->clientId = QString(extra); if (lastExtInfo == 0x5AFEC0DE) buddy->clientId += " (SecureIM)"; else if ((lastExtInfo >> 0x18) == 0x80) buddy->clientId += " (Unicode)"; buddy->setClientIcon(Icon("miranda", IconInfo::Client)); buddy->updateBuddyText(); } } else if (lastInfo == 0x7fffffff) { unsigned ver1 = (lastExtStatusInfo >> 0x18) & 0xFF; unsigned ver2 = (lastExtStatusInfo >> 0x10) & 0xFF; unsigned ver3 = (lastExtStatusInfo >> 0x08) & 0xFF; unsigned ver4 = lastExtStatusInfo & 0xFF; if(ver1 & 0x80) { snprintf(extra, sizeof(extra) - 1, "Miranda IM (ICQ 0.%hu.%hu.%hu alpha)", ver2, ver3, ver4); } else { snprintf(extra, sizeof(extra) - 1, "Miranda IM (ICQ %hu.%hu.%hu.%hu)", ver1, ver2, ver3, ver4); } buddy->clientId = QString(extra); if (lastExtInfo == 0x5AFEC0DE) buddy->clientId += " (SecureIM)"; else if ((lastExtInfo >> 0x18) == 0x80) buddy->clientId += " (Unicode)"; buddy->setClientIcon(Icon("miranda", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0x3b75ac09) { buddy->clientId = "Trillian"; buddy->setClientIcon(Icon("trillian", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0xffffff42) { buddy->clientId = "mICQ"; buddy->setClientIcon(Icon("micq", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0xffffff8f) { buddy->clientId = "StrICQ"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0xffffff7f) { buddy->clientId = "&RQ"; buddy->setClientIcon(Icon("RQ", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0xffffffab) { buddy->clientId = "YSM"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0xffffffbe) { unsigned ver1 = (lastExtStatusInfo >> 0x18) & 0xff; unsigned ver2 = (lastExtStatusInfo >> 0x10) & 0xff; unsigned ver3 = (lastExtStatusInfo >> 0x08) & 0xff; snprintf(extra, sizeof(extra) - 1, "Alicq %d.%d.%d", ver1, ver2, ver3); buddy->clientId = QString(extra); buddy->setClientIcon(Icon("unknown", IconInfo::Client)); buddy->updateBuddyText(); } else if (lastInfo == 0x04031980) { buddy->clientId = "vICQ"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); buddy->updateBuddyText(); } else if ((lastInfo == 0x3aa773ee) && (lastExtStatusInfo == 0x3aa66380)) { buddy->clientId = "libicq2000"; buddy->setClientIcon(Icon("icq2000", IconInfo::Client)); if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_RTFxMSGS, 0x10)) { buddy->clientId = "Centericq"; buddy->setClientIcon(Icon("centericq", IconInfo::Client)); } else if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_UTF8, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_UTF)) { buddy->clientId += " (Unicode)"; } buddy->updateBuddyText(); } else if ((lastInfo == 0x3ba8dbaf) && (client_proto == 2)) { buddy->clientId = "stICQ"; buddy->setClientIcon(Icon("sticq", IconInfo::Client)); buddy->updateBuddyText(); } else if ((lastInfo == 0xfffffffe) && (lastExtInfo == 0xfffffffe)) { buddy->clientId = "Jimm"; buddy->setClientIcon(Icon("jimm", IconInfo::Client)); buddy->updateBuddyText(); } else if ((lastInfo == 0x3ff19beb) && (lastExtInfo == 0x3ff19beb)) { buddy->clientId = "IM2"; buddy->setClientIcon(Icon("im2", IconInfo::Client)); buddy->updateBuddyText(); } else if ((lastInfo == 0xddddeeff) && (!lastExtStatusInfo) && (!lastExtInfo)) { buddy->clientId = "SmartICQ"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); buddy->updateBuddyText(); } else if (((lastInfo & 0xfffffff0) == 0x494d2b00) && (!lastExtStatusInfo) && (!lastExtInfo)) { buddy->clientId = "IM+"; buddy->setClientIcon(Icon("implus", IconInfo::Client)); buddy->updateBuddyText(); } else if ((lastInfo == 0x3b4c4c0c) && (!lastExtStatusInfo) && (lastExtInfo == 0x3b7248ed)) { buddy->clientId = "KXicq2"; buddy->setClientIcon(Icon("kxicq", IconInfo::Client)); buddy->updateBuddyText(); } else if ((lastInfo == 0xfffff666)/* && (!lastExtInfo)*/) { snprintf(extra, sizeof(extra) - 1, "R&Q %u", (unsigned)lastExtStatusInfo); buddy->clientId = QString(extra); buddy->setClientIcon(Icon("rnq", IconInfo::Client)); buddy->updateBuddyText(); } else if ((lastInfo == 0x66666666) && (lastExtInfo == 0x66666666)) { buddy->clientId = "D[i]Chat"; buddy->setClientIcon(Icon("di_chat", IconInfo::Client)); buddy->updateBuddyText(); if (lastExtStatusInfo == 0x10000) buddy->clientId += " v.0.1a"; else if (lastExtStatusInfo == 0x22) buddy->clientId += " v.0.2b"; } else if ((lastInfo == 0x44F523B0) && (lastExtStatusInfo == 0x44F523A6) && (lastExtInfo == 0x44F523A6) && (client_proto == 8)) { buddy->clientId = "Virus"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); buddy->updateBuddyText(); } if ( buddy->clientId.compare("") ) return true; else return false; } //============================================================================= bool clientIdentify::identify_by_Caps(treeBuddyItem *buddy) { char *tmp = 0; QIcon icon; if ((tmp = identify_qutIM())) { icon = Icon("qutim", IconInfo::Client); } else if ((tmp = identify_k8qutIM())) { icon = Icon("k8qutim", IconInfo::Client); } else if ((tmp = identify_Miranda())) { icon = Icon("miranda", IconInfo::Client); } else if ((tmp = identify_Qip())) { icon = Icon("qip", IconInfo::Client); } else if ((tmp = identify_QipInfium())) { icon = Icon("qipinf", IconInfo::Client); } else if ((tmp = identify_QipPDA())) { icon = Icon("qippda", IconInfo::Client); } else if ((tmp = identify_QipMobile())) { icon = Icon("qipsymb", IconInfo::Client); } else if ((tmp = identify_SimRnQ())) { icon = Icon("rnq", IconInfo::Client); } else if ((tmp = identify_Sim())) { icon = Icon("sim", IconInfo::Client); } else if ((tmp = identify_Licq())) { icon = Icon("licq", IconInfo::Client); } else if ((tmp = identify_Kopete())) { icon = Icon("kopete", IconInfo::Client); } else if ((tmp = identify_Micq())) { icon = Icon("micq", IconInfo::Client); } else if ((tmp = identify_LibGaim())) { if ( !strcmp(tmp, "Pidgin/AdiumX") ) icon = Icon("pidgin", IconInfo::Client); else if ( !strcmp(tmp, "Meebo") ) icon = Icon("meebo", IconInfo::Client); else icon = Icon("gaim", IconInfo::Client); } else if ((tmp = identify_Jimm())) { icon = Icon("jimm", IconInfo::Client); } else if ((tmp = identify_Mip())) { icon = Icon("mip", IconInfo::Client); } else if ((tmp = identify_Trillian())) { icon = Icon("trillian", IconInfo::Client); } else if ((tmp = identify_Climm())) { icon = Icon("unknown", IconInfo::Client); } else if ((tmp = identify_Im2())) { icon = Icon("im2", IconInfo::Client); } else if ((tmp = identify_AndRQ())) { icon = Icon("RQ", IconInfo::Client); } else if ((tmp = identify_RandQ())) { icon = Icon("rnq", IconInfo::Client); } else if ((tmp = identify_Imadering())) { icon = Icon("unknown", IconInfo::Client); } else if ((tmp = identify_Mchat())) { icon = Icon("mchat", IconInfo::Client); } else if ((tmp = identify_CorePager())) { icon = Icon("corepager", IconInfo::Client); } else if ((tmp = identify_DiChat())) { icon = Icon("di_chat", IconInfo::Client); } else if ((tmp = identify_Macicq())) { icon = Icon("icq_mac", IconInfo::Client); } else if ((tmp = identify_Anastasia())) { icon = Icon("anastasia", IconInfo::Client); } else if ((tmp = identify_Jicq())) { icon = Icon("jicq", IconInfo::Client); } else if ((tmp = identify_Inlux())) { icon = Icon("inlux", IconInfo::Client); } else if ((tmp = identify_Vmicq())) { icon = Icon("vmicq", IconInfo::Client); } else if ((tmp = identify_Smaper())) { icon = Icon("smaper", IconInfo::Client); } else if ((tmp = identify_Yapp())) { icon = Icon("yapp", IconInfo::Client); } else if ((tmp = identify_Pigeon())) { icon = Icon("pigeon", IconInfo::Client); } else if ((tmp = identify_NatIcq())) { icon = Icon("naticq", IconInfo::Client); } else if ((tmp = identify_WebIcqPro())) { icon = Icon("webicq", IconInfo::Client); } else if ((tmp = identify_BayanIcq())) { icon = Icon("bayanicq", IconInfo::Client); } if (tmp != 0) { buddy->clientId = QTextCodec::codecForName("CP1251")->makeDecoder()->toUnicode(tmp); buddy->setClientIcon(icon); buddy->updateBuddyText(); free(tmp); return true; } return false; } //============================================================================= bool clientIdentify::identify_by_ProtoVersion(treeBuddyItem *buddy) { bool bRTF = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_RTFxMSGS, 0x10); bool bTYPING = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_TYPING, 0x10); bool bAIMCHAT = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMCHAT, 0x10); bool bXTRAZ = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_XTRAZ, 0x10); bool bUTF8 = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_UTF8, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_UTF); bool bSENDFILE = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMSENDFILE, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_SENDFILE); bool bDIRECT = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_DIRECT, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_DIRECT); bool bAIMICON = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMICON, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_BUDDYCON); bool bGETFILE = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMGETFILE, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_GETFILE); bool bSRVRELAY = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_SRVxRELAY, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_RELAY); bool bAVATAR = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AVATAR, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_AVATAR); int capsnum = client_caps.size() + client_shorts.size(); // VERSION = 0 if (client_proto == 0) { if (!lastInfo && !lastExtStatusInfo && !lastExtInfo && !(buddy->userPort) && !(buddy->Cookie)) { if (bTYPING && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IS2001, 0x10)) && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IS2002, 0x10)) && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_COMM20012, 0x10))) { buddy->clientId = "Spam Bot"; buddy->setClientIcon(Icon("bot", IconInfo::Client)); } else if (bAIMICON) { if ((bTYPING && bXTRAZ && bSRVRELAY && bUTF8) || (bUTF8 && (capsnum == 2)) || (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQLITExVER, 0x10) && bXTRAZ)) { buddy->clientId = "PyICQ-t Jabber Transport"; buddy->setClientIcon(Icon("pyicq", IconInfo::Client)); } else if (bUTF8 && bSRVRELAY && bSENDFILE && (MatchShortCaps(client_shorts, ICQ_SHORTCAP_AIMBUDDYLIST)) && (MatchShortCaps(client_shorts, 0x0002))) { buddy->clientId = "Digsby"; buddy->setClientIcon(Icon("digsby", IconInfo::Client)); } } else if (bAIMCHAT) { if (bSENDFILE) { if (capsnum == 2) { buddy->clientId = "Easy Message"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } else if (bAIMICON && MatchShortCaps(client_shorts, ICQ_SHORTCAP_AIMIMAGE)) { buddy->clientId = "AIM"; buddy->setClientIcon(Icon("aim", IconInfo::Client)); } } else if (bUTF8 && (capsnum == 2)) { buddy->clientId = "BeejiveIM"; buddy->setClientIcon(Icon("beejive", IconInfo::Client)); } } else if (bUTF8 && bSRVRELAY && bDIRECT) { if ((bTYPING && (capsnum == 4)) || (bAIMICON && bAVATAR && (capsnum = 5))) { buddy->clientId = "Agile Messenger"; buddy->setClientIcon(Icon("agile", IconInfo::Client)); } else if (bSENDFILE && bGETFILE) { buddy->clientId = "Slick"; buddy->setClientIcon(Icon("slick", IconInfo::Client)); } } else if(bDIRECT && bRTF && bTYPING && bUTF8) { buddy->clientId = "GlICQ"; buddy->setClientIcon(Icon("glicq", IconInfo::Client)); } } } // VERSION = 7 else if (client_proto == 7) { if (bRTF) { if (bSRVRELAY && bDIRECT && (lastInfo == 0x3aa773ee) && (lastExtStatusInfo == 0x3aa66380) && (lastExtInfo == 0x3a877a42)) { buddy->clientId = "centerim"; buddy->setClientIcon(Icon("centericq", IconInfo::Client)); } else { buddy->clientId = "GnomeICU"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } } else if (bSRVRELAY) { if (!lastInfo && !lastExtStatusInfo && !lastExtInfo) { buddy->clientId = "&RQ"; buddy->setClientIcon(Icon("RQ", IconInfo::Client)); } else { buddy->clientId = "ICQ 2000"; buddy->setClientIcon(Icon("icq2000", IconInfo::Client)); } } else if (bUTF8) { if (bTYPING) buddy->clientId = "Icq2Go! (Java)"; else buddy->clientId = "Icq2Go! (Flash)"; buddy->setClientIcon(Icon("icq2go", IconInfo::Client)); } } // VERSION = 8 else if (client_proto == 8) { if (bXTRAZ) { if (bDIRECT && bUTF8 && bSRVRELAY && bAVATAR) { buddy->clientId = "IM Gate"; buddy->setClientIcon(Icon("imgate", IconInfo::Client)); } else if ((MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IMSECKEY1, 0x06)) && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IMSECKEY2, 0x06))) { client_proto = 9; return identify_by_ProtoVersion(buddy); } } else if ((MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_COMM20012, 0x10)) || (bSRVRELAY)) { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IS2001, 0x10)) { if (!lastInfo && !lastExtStatusInfo && !lastExtInfo) { if (bRTF) { buddy->clientId = "TICQClient"; // possibly also older GnomeICU buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } else { buddy->clientId = "ICQ for Pocket PC"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } } else { buddy->clientId = "ICQ 2001"; buddy->setClientIcon(Icon("icq2001", IconInfo::Client)); } } else if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IS2002, 0x10)) { buddy->clientId = "ICQ 2002"; buddy->setClientIcon(Icon("icq", IconInfo::Client)); } else if (bSRVRELAY && bUTF8 && bRTF && (!MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJS7xVER, 0x04)) && (!MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJSINxVER, 0x04))) { if (!lastInfo && !lastExtStatusInfo && !lastExtInfo) { if (!(buddy->userPort)) { buddy->clientId = "GnomeICU 0.99.5+"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } else { buddy->clientId = "IC@"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } } else { buddy->clientId = "ICQ 2002/2003a"; buddy->setClientIcon(Icon("icq", IconInfo::Client)); } } else if (bSRVRELAY && bUTF8 && bTYPING) { if (!lastInfo && !lastExtStatusInfo && !lastExtInfo) { buddy->clientId = "PreludeICQ"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } } } } // VERSION = 9 else if (client_proto == 9) { if (bXTRAZ) { if (bSENDFILE) { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_TZERS, 0x10)) { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_HTMLMSGS, 0x10)) { if (bRTF) { buddy->clientId = "MDC"; buddy->setClientIcon(Icon("mdc", IconInfo::Client)); } else { buddy->clientId = "ICQ 6"; buddy->setClientIcon(Icon("icq60", IconInfo::Client)); } } else { buddy->clientId = "ICQ 5.1"; buddy->setClientIcon(Icon("icq51", IconInfo::Client)); } } else { buddy->clientId = "ICQ 5"; buddy->setClientIcon(Icon("icq50", IconInfo::Client)); } if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_RAMBLER, 0x10)) buddy->clientId += " (Rambler)"; else if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ABV, 0x10)) buddy->clientId += " (Abv)"; else if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_NETVIGATOR, 0x10)) buddy->clientId += " (Netvigator)"; } else if (!bDIRECT) { if (bRTF) { buddy->clientId = "QNext"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } else if(MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_TZERS, 0x10)) { buddy->clientId = "Mail.Ru Agent"; buddy->setClientIcon(Icon("mrim", IconInfo::Protocol)); } else { buddy->clientId = "PyICQ-t Jabber Transport"; buddy->setClientIcon(Icon("pyicq", IconInfo::Client)); } } else { buddy->clientId = "ICQ Lite v4"; buddy->setClientIcon(Icon("icq4lite", IconInfo::Client)); } } else if(bUTF8 && bSENDFILE && bAIMICON && bAIMCHAT && MatchShortCaps(client_shorts, ICQ_SHORTCAP_AIMBUDDYLIST)) { buddy->clientId = "ICQ Lite"; buddy->setClientIcon(Icon("icq4lite", IconInfo::Client)); } else if (!bDIRECT && bUTF8 && !bRTF) { buddy->clientId = "PyICQ-t Jabber Transport"; buddy->setClientIcon(Icon("pyicq", IconInfo::Client)); } } // VERSION = 10 else if (client_proto == 0xA) { if (bRTF && bUTF8 && bTYPING && bDIRECT && bSRVRELAY) { buddy->clientId = "ICQ 2003b Pro"; buddy->setClientIcon(Icon("icq2003pro", IconInfo::Client)); } else if (!bRTF && !bUTF8) { buddy->clientId = "QNext"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } else if (!bRTF && bUTF8 && !lastInfo && !lastExtStatusInfo && !lastExtInfo) { buddy->clientId = "NanoICQ"; buddy->setClientIcon(Icon("unknown", IconInfo::Client)); } } if ( buddy->clientId.compare("") ) { buddy->updateBuddyText(); return true; } return false; } //============================================================================= char *clientIdentify::MatchBuddyCaps( char *buf, unsigned bufsize, const char *cap, unsigned short capsize ) { while (bufsize > 0) { if (!memcmp(buf, cap, capsize)) { // the capability is found return (char *)buf; } else { buf += 0x10; bufsize -= 0x10; } } // there is not such a capability. return 0; } //============================================================================= bool clientIdentify::MatchShortCaps( const QList &buf, const quint16 &cap ) { if (buf.contains(cap)) { return true; } else return false; } QString icq_systemID2String(quint8 type, quint32 id) { QString str; quint8 VER_NT_WORKSTATION = 0x01; switch(type) { case 'm': if(id) { quint8 major, minor, bugfix; major = (id >> 24) & 0xff; minor = (id >> 16) & 0xff; bugfix = (id >> 8) & 0xff; str = QString("MacOS X %1.%2.%3").arg(QString::number(major), QString::number(minor), QString::number(bugfix)); } else str += "MacOS X"; break; case 'c': str += "Windows CE"; break; case 'l': str += "Linux"; break; case 's': str += "Symbian"; break; case 'u': str += "*nix"; break; case 'w': { str = "Windows"; quint16 version = (id >> 16) & 0xffff; quint8 product = (id >> 8) & 0xff; quint8 winflag = id & 0xff; switch(version) { case 0x0500: str += " 2000"; break; case 0x0501: str += " XP"; if(winflag & 0x01) str += " Home Edition"; else str += " Professional"; break; case 0x0502: if(winflag & 0x02) str += " Home Server"; else str += " Server 200"; break; case 0x0600: if(product == VER_NT_WORKSTATION) { str += " Vista"; if(winflag & 0x01) str += " Home"; } else str += " Server 2008"; break; case 0x0601: if(product == VER_NT_WORKSTATION) str += " 7"; else str += " Server 2008 R2"; break; default: str += " NT "; str += QString::number(version >> 8); str += "."; str += QString::number(version & 0xff); case 0x0000: break; } break; } default: str = "Unknown"; } return str; } //============================================================================= char *clientIdentify::identify_qutIM() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_QUTIMxVER, strlen(ICQ_CAPABILITY_QUTIMxVER)))) { char *res = (char *)malloc(sizeof(char) * 256); char *verStr = capID + 5; if (verStr[1] == 46) { // old qutim id int ver1 = verStr[0] - 48; int ver2 = verStr[2] - 48; snprintf(res, 255, "qutIM v%u.%u", ver1, ver2); } else { // new qutim id quint8 type = verStr[0]; quint32 ver = qFromBigEndian((uchar *)verStr + 6); QByteArray os = icq_systemID2String(type, ver).toAscii(); os.prepend('('); os.append (')'); /*char os[13] = { 0 }; switch (verStr[0]) { case 'l': strcpy(os, "(Linux)"); break; case 'w': strcpy(os, "(Windows)"); break; case 'm': strcpy(os, "(MacOS)"); break; case 'u': default: strcpy(os, "(Unknown OS)"); break; }*/ int ver1 = verStr[1]; int ver2 = verStr[2]; int ver3 = verStr[3]; unsigned char svn1 = verStr[4]; unsigned char svn2 = verStr[5]; if (ver1 == 0x42) { snprintf(res, 255, "oldk8 v%i.%i (%u) %s", ver2, ver3, (unsigned int)((svn1 << 0x08) | svn2), os.constData()); } else { if (svn1 | svn2) { sprintf(res, "qutIM v%i.%i.%i svn%u %s", ver1, ver2, ver3, (unsigned int)((svn1 << 0x08) | svn2), os.constData()); } else { snprintf(res, 255, "qutIM v%i.%i.%i %s", ver1, ver2, ver3, os.constData()); } } } return res; } return 0; } //============================================================================= char *clientIdentify::identify_k8qutIM() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_K8QUTIMxVER, strlen(ICQ_CAPABILITY_K8QUTIMxVER)))) { char *res = (char *)malloc(sizeof(char) * 256); char *verStr = capID + 7; char os[10] = { 0 }; if (verStr[0] == 'l') strcpy(os, ""); else snprintf(os, 8, " (%c)", verStr[0]); verStr += 2; int ver0 = verStr[0]; int ver1 = verStr[1]; int ver2 = verStr[2]; unsigned char rel0 = verStr[3]; unsigned char rel1 = verStr[4]; snprintf(res, 255, "k8qutIM v%i.%i.%i.%u", ver0, ver1, ver2, (unsigned int)((rel0 << 8) | rel1)); strcat(res, os); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Miranda() { char *capID; char tmpVer[256] = { 0 }; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJSINxVER, 0x04)) || (capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJS7xVER, 0x04)) || (capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJPxVER, 0x04)) || (capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJENxVER, 0x04))) { unsigned mver0 = capID[0x4] & 0xff; unsigned mver1 = capID[0x5] & 0xff; unsigned mver2 = capID[0x6] & 0xff; unsigned mver3 = capID[0x7] & 0xff; unsigned iver0 = capID[0x8] & 0xff; unsigned iver1 = capID[0x9] & 0xff; unsigned iver2 = capID[0xa] & 0xff; unsigned iver3 = capID[0xb] & 0xff; unsigned secure = capID[0xc] & 0xff; unsigned ModVer = capID[0x3] & 0xff; char *res = (char *)malloc(sizeof(char) * 256); unsigned Unicode = (lastExtInfo >> 24) & 0xff; if ((mver1 < 20) && (iver1 < 20)) { strcpy(res, "Miranda IM "); if (mver0 == 0x80) { if (mver2 == 0x00) { snprintf(tmpVer, sizeof(tmpVer) - 1, "0.%u alpha build #%u", mver1, mver3); } else { snprintf(tmpVer, sizeof(tmpVer) - 1, "0.%u.%u alpha build #%u", mver1, mver2, mver3); } strcat(res, tmpVer); } else { if (mver2 == 0x00) { snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u", mver0, mver1); } else { snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u", mver0, mver1, mver2); } strcat(res, tmpVer); if ((mver3 != 0x00) && (mver3 != 0x64)) { snprintf(tmpVer, sizeof(tmpVer) - 1, " alpha build #%u", mver3); strcat(res, tmpVer); } } if ((Unicode == 0x80) || (lastInfo == 0x7fffffff)) strcat(res, " Unicode"); if (ModVer == 'p') strcat(res, " (ICQ Plus"); else if (capID[0x0] == 's') strcat(res, " (ICQ S!N"); else if (capID[0x0] == 'e') strcat(res, " (ICQ eternity/PlusPlus++"); else if (ModVer == 'j') strcat(res, " (ICQ S7 & SSS"); if (iver0 == 0x80) { snprintf(tmpVer, sizeof(tmpVer) - 1, " 0.%u.%u.%u alpha)", iver1, iver2, iver3); strcat(res, tmpVer); } else { snprintf(tmpVer, sizeof(tmpVer) - 1, " %u.%u.%u.%u)", iver0, iver1, iver2, iver3); strcat(res, tmpVer); } if (((secure != 0) && (secure != 20)) || (lastExtInfo == 0x5AFEC0DE)) strcat(res, " (SecureIM)"); else if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJS7SxVER, 0x10)) strcpy(res, "Miranda IM (ICQ SSS & S7)(SecureIM)"); else if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJS7OxVER, 0x10)) strcpy(res, "Miranda IM (ICQ SSS & S7)"); } return res; } else if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_MIRANDAxVER, 0x08))) { unsigned mver0 = capID[0x8] & 0xff; unsigned mver1 = capID[0x9] & 0xff; unsigned mver2 = capID[0xA] & 0xff; unsigned mver3 = capID[0xB] & 0xff; unsigned iver0 = capID[0xC] & 0xff; unsigned iver1 = capID[0xD] & 0xff; unsigned iver2 = capID[0xE] & 0xff; unsigned iver3 = capID[0xF] & 0xff; char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "Miranda IM "); if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_MIRMOBxVER, 0x0d)) strcat(res, "Mobile "); if (mver0 == 0x80) { if (mver2 == 0x00) { snprintf(tmpVer, sizeof(tmpVer) - 1, "0.%u alpha build #%u", mver1, mver3); } else { snprintf(tmpVer, sizeof(tmpVer), "0.%u.%u preview #%u", mver1, mver2, mver3); } strcat(res, tmpVer); } else { if (mver2 == 0x00) { snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u", mver0, mver1); } else { snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u", mver0, mver1, mver2); } strcat(res, tmpVer); if ((mver3 != 0x00) && (mver3 != 0x64)) { snprintf(tmpVer, sizeof(tmpVer) - 1, " alpha build #%u", mver3); strcat(res, tmpVer); } } if ((lastInfo == 0x7fffffff) || ((unsigned)((lastExtInfo >> 24) & 0xFF) == 0x80)) strcat(res, " Unicode"); strcat(res, " (ICQ "); if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJS7OxVER, 0x10) || MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJS7SxVER, 0x10)) { strcat(res, " S7 & SSS (old)"); } else { switch (iver0) { case 0x81: strcat(res, " BM"); break; case 0x88: strcat(res, " eternity (old)"); default: break; } } switch (iver2) { case 0x58: strcat(res, " eternity/PlusPlus++ Mod"); break; default: break; } strcat(res, " "); switch (iver0) { case 0x88: case 0x81: case 0x80: snprintf(tmpVer, sizeof(tmpVer) - 1, "0.%u.%u.%u alpha)", iver1, iver2, iver3); break; default: snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u.%u)", iver0, iver1, iver2, iver3); break; } strcat(res, tmpVer); if ((lastExtInfo == 0x5AFEC0DE) || MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ICQJS7SxVER, 0x10)) strcat(res, " (SecureIM)"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Qip() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_QIPxVER, 0x0e))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; if (lastExtInfo == 0x0F) strcpy(tmpVer, "2005"); else { strncpy(tmpVer, capID + 11, 5); tmpVer[5] = '\0'; } snprintf(res, 255, "QIP %s", tmpVer); if ((lastExtStatusInfo == 0x0000000e) && (lastExtInfo == 0x0000000f)) { snprintf(tmpVer, sizeof(tmpVer) - 1, " (Build %u%u%u%u)", lastInfo >> 0x18, (lastInfo >> 0x10) & 0xFF, (lastInfo >> 0x08) & 0xFF, lastInfo & 0xFF); strcat(res, tmpVer); } return res; } return 0; } //============================================================================= char *clientIdentify::identify_QipInfium() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_QIPINFxVER, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strcpy(res, "QIP Infium"); if (lastInfo) { snprintf(tmpVer, sizeof(tmpVer) - 1, " (Build %u)", lastInfo); strcat(res, tmpVer); } if (lastExtStatusInfo == 0x0000000B) strcat(res, " Beta"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_QipPDA() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_QIPPDAxVER, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "QIP PDA (Windows)"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_QipMobile() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_QIPMOBxVER, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "QIP Mobile (Java)"); return res; } else if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_QIPSYMBxVER, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "QIP Mobile (Symbian)"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Sim() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_SIMxVER, strlen(ICQ_CAPABILITY_SIMxVER)))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; char *verStr = capID + 12; unsigned ver1 = verStr[0]; unsigned ver2 = verStr[1]; unsigned ver3 = verStr[2]; unsigned ver4 = verStr[3] & 0x0f; if (ver4) { snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u.%u", ver1, ver2, ver3, ver4); } else if (ver3) { snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u", ver1, ver2, ver3); } else { snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u", ver1, ver2); } if (verStr[3] & 0x80) strcat(tmpVer,"/Win32"); else if (verStr[3] & 0x40) strcat(tmpVer,"/MacOS X"); snprintf(res, 255, "SIM v%s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_SimRnQ() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_SIMxVER, strlen(ICQ_CAPABILITY_SIMxVER)))) { char *verStr = capID + 12; if (verStr[0] || verStr[1] || verStr[2] || (verStr[3] & 0x0f)) return 0; } else { capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_SIMxVER, 10); if ( !capID ) return 0; } char *res = (char *)malloc(sizeof(char) * 256); snprintf(res, 255, "R&Q-masked (SIM)"); return res; } //============================================================================= char *clientIdentify::identify_Licq() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_LICQxVER, strlen(ICQ_CAPABILITY_LICQxVER)))) { char *res = (char *)malloc(sizeof(char) * 256); char *verStr = capID + 12; unsigned ver1 = verStr[0]; unsigned ver2 = verStr[1]%100; unsigned ver3 = verStr[2]; snprintf(res, 255, "Licq v%u.%u.%u", ver1, ver2, ver3); if (verStr[3] == 1) strcat(res, "/SSL"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Kopete() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_KOPETExVER, strlen(ICQ_CAPABILITY_KOPETExVER)))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; char *verStr = capID + 12; unsigned ver1 = verStr[0]; unsigned ver2 = verStr[1]; unsigned ver3 = verStr[2]*100; ver3 += verStr[3]; snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u", ver1, ver2, ver3); snprintf(res, 255, "Kopete v%s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Micq() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_MICQxVER, 0x0c))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; char *verStr = capID + 12; unsigned ver1 = verStr[0]; unsigned ver2 = verStr[1]; unsigned ver3 = verStr[2]; unsigned ver4 = verStr[3]; snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u.%u", ver1, ver2, ver3, ver4); if ((ver1 & 0x80) == 0x80) strcat(tmpVer, " alpha"); snprintf(res, 255, "mICQ v%s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_LibGaim() { int newver = 0; if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMCHAT, 0x10)) { newver = 1; if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_TYPING, 0x10)) { newver = 2; } } if ((MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMSENDFILE, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_SENDFILE)) && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMIMAGE, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_AIMIMAGE)) && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMICON, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_BUDDYCON)) && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_UTF8, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_UTF)) && ((client_caps.size() + client_shorts.size()) == (4 + newver))) { char *res = (char *)malloc(sizeof(char) * 256); if (newver >= 1) { strcpy(res, "Pidgin/AdiumX"); } else { strcpy(res, "Gaim/AdiumX"); } return res; } else if ((newver >= 1) && (client_proto == 0)) { if ((MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMICON, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_BUDDYCON)) && (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_UTF8, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_UTF))) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "Meebo"); return res; } } return 0; } //============================================================================= char *clientIdentify::identify_Jimm() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_JIMMxVER, 0x5))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 0x5, 11); snprintf(res, 255, "Jimm %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Mip() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_MIPCLIENT, 0xC))) { char *res = (char *)malloc(sizeof(char) * 256); //char tmpVer[256]; //strncpy(tmpVer, capID + 0x4, 12); //snprintf(res, 255, "MIP %s", tmpVer); unsigned ver1 = capID[0xC]; unsigned ver2 = capID[0xD]; unsigned ver3 = capID[0xE]; unsigned ver4 = capID[0xF]; if (ver1 < 30) { snprintf(res, 255, "MIP %u.%u.%u.%u", ver1, ver2, ver3, ver4); } else { char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 0xb, 5); snprintf(res, 255, "MIP %s", tmpVer); } return res; } else if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_MIPCLIENT, 0x4))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 0x4, 12); snprintf(res, 255, "MIP %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Trillian() { if ((MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_TRILLIANxVER, 0x10)) || (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_TRILCRPTxVER, 0x10))) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "Trillian"); if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_RTFxMSGS, 0x10)) { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_AIMSENDFILE, 0x10) || MatchShortCaps(client_shorts, ICQ_SHORTCAP_SENDFILE)) { strcat(res, " Astra"); } else { strcat(res, " v3"); } } return res; } return 0; } //============================================================================= char *clientIdentify::identify_Climm() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_CLIMMxVER, 0x0C))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; unsigned ver1 = capID[0xC]; unsigned ver2 = capID[0xD]; unsigned ver3 = capID[0xE]; unsigned ver4 = capID[0xF]; snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u.%u", ver1, ver2, ver3, ver4); snprintf(res, 255, "climm %s", tmpVer); if ((ver1 & 0x80) == 0x80) strcat(res, " alpha"); if (lastExtInfo == 0x02000020) strcat(res, "/Win32"); else if (lastExtInfo == 0x03000800) strcat(res, "/MacOS X"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Im2() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IM2xVER, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "IM2"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_AndRQ() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ANDRQxVER, 0x09))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; unsigned ver1 = capID[0xC]; unsigned ver2 = capID[0xB]; unsigned ver3 = capID[0xA]; unsigned ver4 = capID[9]; snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u.%u", ver1, ver2, ver3, ver4); snprintf(res, 255, "&RQ %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_RandQ() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_RANDQxVER, 0x09))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; unsigned ver1 = capID[0xC]; unsigned ver2 = capID[0xB]; unsigned ver3 = capID[0xA]; unsigned ver4 = capID[9]; snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u.%u", ver1, ver2, ver3, ver4); snprintf(res, 255, "R&Q %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Imadering() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_IMADERING, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "IMadering"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Mchat() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_MCHATxVER, 0xA))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 0xA, 6); snprintf(res, 255, "mChat %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_CorePager() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_COREPGRxVER, 0xA))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strcpy(res, "CORE Pager"); if ((lastExtStatusInfo == 0x0FFFF0011) && (lastExtInfo == 0x1100FFFF) && (lastInfo >> 0x18)) { snprintf(tmpVer, sizeof(tmpVer) - 1, " %u.%u", lastInfo >> 0x18, (lastInfo >> 0x10) & 0xFF); if ((lastInfo & 0xFF) == 0x0B) strcat(tmpVer, " Beta"); strcat(res, tmpVer); } return res; } return 0; } //============================================================================= char *clientIdentify::identify_DiChat() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_DICHATxVER, 0x9))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 8, 8); snprintf(res, 255, "D[i]Chat %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Macicq() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_MACICQxVER, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "ICQ for Mac"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Anastasia() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_ANSTxVER, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "Anastasia"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Jicq() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_PALMJICQ, 0xc))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; unsigned ver1 = capID[0xC]; unsigned ver2 = capID[0xD]; unsigned ver3 = capID[0xE]; unsigned ver4 = capID[0xF]; snprintf(tmpVer, sizeof(tmpVer) - 1, "%u.%u.%u.%u", ver1, ver2, ver3, ver4); snprintf(res, 255, "JICQ %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Inlux() { if (MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_INLUXMSGR, 0x10)) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "Inlux Messenger"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Vmicq() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_VMICQxVER, 0x5))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 5, 11); snprintf(res, 255, "VmICQ %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Smaper() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_SMAPERxVER, 0x7))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 6, 10); snprintf(res, 255, "SmapeR %s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Yapp() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_YAPPxVER, 0x4))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 8, 5); snprintf(res, 255, "Yapp! v%s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_Pigeon() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_PIGEONxVER, 0x7))) { char *res = (char *)malloc(sizeof(char) * 256); strcpy(res, "Pigeon"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_NatIcq() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_NATICQxVER, 0x6))) { char *res = (char *)malloc(sizeof(char) * 256); char rev[256] = { 0 }; strncpy(rev, capID + 0xc, 4); snprintf(res, 255, "NatICQ Siemens (revision %s)", rev); return res; } return 0; } //============================================================================= char *clientIdentify::identify_WebIcqPro() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_WEBICQPRO, 0x9))) { char *res = (char *)malloc(sizeof(char) * 256); unsigned ver1 = capID[0xA]; unsigned ver2 = capID[0xB]; unsigned ver3 = capID[0xC]; snprintf(res, 255, "WebIcqPro %u.%u.%u", ver1, ver2, ver3); if (capID[0xF] == 'b') strcat(res, "b"); return res; } return 0; } //============================================================================= char *clientIdentify::identify_BayanIcq() { char *capID; if ((capID = MatchBuddyCaps(capsbuf, capsize, ICQ_CAPABILITY_BAYANICQxVER, 0x8))) { char *res = (char *)malloc(sizeof(char) * 256); char tmpVer[256] = { 0 }; strncpy(tmpVer, capID + 8, 8); snprintf(res, 255, "bayanICQ v%s", tmpVer); return res; } return 0; } //============================================================================= char *clientIdentify::identify_MailAgent() { // char *capID; // char[] ICQ_CAPABILITY_MAILAGENT = {} return 0; } qutim-0.2.0/plugins/icq/COPYING0000644000175000017500000000035411273071676017620 0ustar euroelessareuroelessarCopyright (c) 2008-2009 by qutim.org team (see file AUTHORS). qutIM ICQ plugin source code is licensed under GNU GPL v2 or any later release. Full text of GNU GPLv2 license is included in the archive, you can find it in the ./GPL file. qutim-0.2.0/plugins/icq/addbuddydialog.cpp0000644000175000017500000000436611273054317022231 0ustar euroelessareuroelessar/* addBuddyDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "addbuddydialog.h" #include "icqpluginsystem.h" #include addBuddyDialog::addBuddyDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); setWindowIcon(IcqPluginSystem::instance().getIcon("add_user.png")); setFixedSize(size()); setAttribute(Qt::WA_QuitOnClose, false); move(desktopCenter()); ui.addButton->setIcon(qutim_sdk_0_2::Icon("apply")); } addBuddyDialog::~addBuddyDialog() { } void addBuddyDialog::rellocateDialogToCenter(QWidget *widget) { QDesktopWidget &desktop = *QApplication::desktop(); // Get current screen num int curScreen = desktop.screenNumber(widget); // Get available geometry of the screen QRect screenGeom = desktop.availableGeometry(curScreen); // Let's calculate point to move dialog QPoint moveTo(screenGeom.left(), screenGeom.top()); moveTo.setX(moveTo.x() + screenGeom.width() / 2); moveTo.setY(moveTo.y() + screenGeom.height() / 2); moveTo.setX(moveTo.x() - this->size().width() / 2); moveTo.setY(moveTo.y() - this->size().height() / 2); this->move(moveTo); } QPoint addBuddyDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void addBuddyDialog::setContactData(const QString &name, const QStringList &groups) { ui.nickEdit->setText(name); ui.groupList->addItems(groups); } void addBuddyDialog::setMoveData(const QStringList &groups) { ui.groupList->addItems(groups); ui.nickEdit->setEnabled(false); ui.addButton->setText(tr("Move")); } qutim-0.2.0/plugins/icq/addrenamedialog.ui0000644000175000017500000000472311273054317022221 0ustar euroelessareuroelessar addRenameDialogClass 0 0 246 90 addRenameDialog 4 Name: 40 Qt::Horizontal 121 0 false OK :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Return true Qt::Vertical 20 40 pushButton clicked() addRenameDialogClass accept() 210 57 153 69 qutim-0.2.0/plugins/icq/buddycaps.h0000755000175000017500000005477411273054317020727 0ustar euroelessareuroelessar/* Capabilities Copyright (c) 2008 by Alexey Ignatiev *************************************************************************** * * * 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 CAPABILITIES_H_ #define CAPABILITIES_H_ const char ICQ_CAPABILITY_SRVxRELAY[] = { 0x09, 0x46, 0x13, 0x49, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_SHORTCAPS[] = { 0x09, 0x46, 0x00, 0x00, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMVOICE[] = { 0x09, 0x46, 0x13, 0x41, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMSENDFILE[] = { 0x09, 0x46, 0x13, 0x43, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_DIRECT[] = { 0x09, 0x46, 0x13, 0x44, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMIMAGE[] = { 0x09, 0x46, 0x13, 0x45, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMICON[] = { 0x09, 0x46, 0x13, 0x46, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIM_STOCKS[] = { 0x09, 0x46, 0x13, 0x47, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMGETFILE[] = { 0x09, 0x46, 0x13, 0x48, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIM_GAMES[] = { 0x09, 0x46, 0x13, 0x4A, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_BUDDY_LIST[] = { 0x09, 0x46, 0x13, 0x4B, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AVATAR[] = { 0x09, 0x46, 0x13, 0x4C, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIM_SUPPORT[] = { 0x09, 0x46, 0x13, 0x4D, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_UTF8[] = { 0x09, 0x46, 0x13, 0x4E, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_RTFxMSGS[] = { 0x97, 0xB1, 0x27, 0x51, 0x24, 0x3C, 0x43, 0x34, 0xAD, 0x22, 0xD6, 0xAB, 0xF7, 0x3F, 0x14, 0x92 }; const char ICQ_CAPABILITY_TYPING[] = { 0x56, 0x3F, 0xC8, 0x09, 0x0B, 0x6F, 0x41, 0xBD, 0x9F, 0x79, 0x42, 0x26, 0x09, 0xDF, 0xA2, 0xF3 }; const char ICQ_CAPABILITY_AIMxINTER[] = { 0x09, 0x46, 0x13, 0x4D, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_ICHAT[] = { 0x09, 0x46, 0x00, 0x00, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_XTRAZ[] = { 0x1A, 0x09, 0x3C, 0x6C, 0xD7, 0xFD, 0x4E, 0xC5, 0x9D, 0x51, 0xA6, 0x47, 0x4E, 0x34, 0xF5, 0xA0 }; const char ICQ_CAPABILITY_BART[] = { 0x09, 0x46, 0x13, 0x46, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_LICQxVER[] = { 'L', 'i', 'c', 'q', ' ', 'c', 'l', 'i', 'e', 'n', 't', ' ', 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_SIMxVER[] = { 'S', 'I', 'M', ' ', 'c', 'l', 'i', 'e', 'n', 't', ' ', ' ', 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_QUTIMxVER[] = { 'q', 'u', 't', 'i', 'm', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_K8QUTIMxVER[] = { 'k', '8', 'q', 'u', 't', 'I', 'M', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_SIMOLDxVER[] = { 0x97, 0xb1, 0x27, 0x51, 0x24, 0x3c, 0x43, 0x34, 0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x00 }; const char ICQ_CAPABILITY_KOPETExVER[] = { 'K', 'o', 'p', 'e', 't', 'e', ' ', 'I', 'C', 'Q', ' ', ' ', 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_MICQxVER[] = { 'm', 'I', 'C', 'Q', ' ', 0xA9, ' ', 'R', '.', 'K', '.', ' ', 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_MIRANDAxVER[] = { 'M', 'i', 'r', 'a', 'n', 'd', 'a', 'M', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_MIRMOBxVER[] = { 'M', 'i', 'r', 'a', 'n', 'd', 'a', 'M', 'o', 'b', 'i', 'l', 'e', 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_MIMPACKxVER[] = { 'M', 'I', 'M', '/', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_ICQJS7xVER[] = { 'i', 'c', 'q', 'j', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_ICQJPxVER[] = { 'i', 'c', 'q', 'p', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_ICQJS7SxVER[] = { 'i', 'c', 'q', 'j', 0x00, 'S', 'e', 'c', 'u', 'r', 'e', 0x00, 'I', 'M', 0x00, 0x00 }; const char ICQ_CAPABILITY_ICQJS7OxVER[] = { 0x69, 0x63, 0x71, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_ICQJSINxVER[] = { 's', 'i', 'n', 'j', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_ICQJENxVER[] = { 'e', 'n', 'q', 'j', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMOSCARxVER[]= { 'M', 'i', 'r', 'a', 'n', 'd', 'a', 'A', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_TRILLIANxVER[]= { 0x97, 0xb1, 0x27, 0x51, 0x24, 0x3c, 0x43, 0x34, 0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x09 }; const char ICQ_CAPABILITY_TRILCRPTxVER[]= { 0xf2, 0xe7, 0xc7, 0xf4, 0xfe, 0xad, 0x4d, 0xfb, 0xb2, 0x35, 0x36, 0x79, 0x8b, 0xdf, 0x00, 0x00 }; const char ICQ_CAPABILITY_CLIMMxVER[] = { 'c', 'l', 'i', 'm', 'm', 0xA9, ' ', 'R', '.', 'K', '.', ' ', 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_ANDRQxVER[] = { '&', 'R', 'Q', 'i', 'n', 's', 'i', 'd', 'e', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_RANDQxVER[] = { 'R', '&', 'Q', 'i', 'n', 's', 'i', 'd', 'e', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_MCHATxVER[] = { 'm', 'C', 'h', 'a', 't', ' ', 'i', 'c', 'q', ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_JIMMxVER[] = { 'J', 'i', 'm', 'm', ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_COREPGRxVER[] = { 'C', 'O', 'R', 'E', ' ', 'P', 'a', 'g', 'e', 'r', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_DICHATxVER[] = { 'D', '[', 'i', ']', 'C', 'h', 'a', 't', ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_NAIMxVER[] = { 0xFF, 0xFF, 0xFF, 0xFF, 'n', 'a', 'i', 'm', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_ANSTxVER[] = { 0x44, 0xE5, 0xBF, 0xCE, 0xB0, 0x96, 0xE5, 0x47, 0xBD, 0x65, 0xEF, 0xD6, 0xA3, 0x7E, 0x36, 0x02 }; const char ICQ_CAPABILITY_QIPxVER[] = { 0x56, 0x3F, 0xC8, 0x09, 0x0B, 0x6F, 0x41, 'Q', 'I', 'P', ' ', '2', '0', '0', '5', 'a' }; const char ICQ_CAPABILITY_QIPPDAxVER[] = { 0x56, 0x3F, 0xC8, 0x09, 0x0B, 0x6F, 0x41, 'Q', 'I', 'P', ' ', ' ', ' ', ' ', ' ', '!' }; const char ICQ_CAPABILITY_QIPMOBxVER[] = { 0x56, 0x3F, 0xC8, 0x09, 0x0B, 0x6F, 0x41, 'Q', 'I', 'P', ' ', ' ', ' ', ' ', ' ', '"' }; const char ICQ_CAPABILITY_QIPINFxVER[] = { 0x7C, 0x73, 0x75, 0x02, 0xC3, 0xBE, 0x4F, 0x3E, 0xA6, 0x9F, 0x01, 0x53, 0x13, 0x43, 0x1E, 0x1A }; const char ICQ_CAPABILITY_QIPPLUGINS[] = { 0x7c, 0x53, 0x3f, 0xfa, 0x68, 0x00, 0x4f, 0x21, 0xbc, 0xfb, 0xc7, 0xd2, 0x43, 0x9a, 0xad, 0x31 }; const char ICQ_CAPABILITY_QIP1[] = { 0xd3, 0xd4, 0x53, 0x19, 0x8b, 0x32, 0x40, 0x3b, 0xac, 0xc7, 0xd1, 0xa9, 0xe2, 0xb5, 0x81, 0x3e }; const char ICQ_CAPABILITY_QIPSYMBxVER[] = { 0x51, 0xad, 0xd1, 0x90, 0x72, 0x04, 0x47, 0x3d, 0xa1, 0xa1, 0x49, 0xf4, 0xa3, 0x97, 0xa4, 0x1f }; const char ICQ_CAPABILITY_VMICQxVER[] = { 0x56, 0x6d, 0x49, 0x43, 0x51, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_SMAPERxVER[] = { 'S', 'm', 'a', 'p', 'e', 'r', ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_IMPLUXxVER[] = { 0x8e, 0xcd, 0x90, 0xe7, 0x4f, 0x18, 0x28, 0xf8, 0x02, 0xec, 0xd6, 0x18, 0xa4, 0xe9, 0xde, 0x68 }; const char ICQ_CAPABILITY_YAPPxVER[] = { 0x59, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_IM2xVER[] = { 0x74, 0xED, 0xC3, 0x36, 0x44, 0xDF, 0x48, 0x5B, 0x8B, 0x1C, 0x67, 0x1A, 0x1F, 0x86, 0x09, 0x9F }; const char ICQ_CAPABILITY_MACICQxVER[] = { 0xdd, 0x16, 0xf2, 0x02, 0x84, 0xe6, 0x11, 0xd4, 0x90, 0xdb, 0x00, 0x10, 0x4b, 0x9b, 0x4b, 0x7d }; const char ICQ_CAPABILITY_IS2001[] = { 0x2e, 0x7a, 0x64, 0x75, 0xfa, 0xdf, 0x4d, 0xc8, 0x88, 0x6f, 0xea, 0x35, 0x95, 0xfd, 0xb6, 0xdf }; const char ICQ_CAPABILITY_IS2002[] = { 0x10, 0xcf, 0x40, 0xd1, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_COMM20012[] = { 0xa0, 0xe9, 0x3f, 0x37, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_STRICQxVER[] = { 0xa0, 0xe9, 0x3f, 0x37, 0x4f, 0xe9, 0xd3, 0x11, 0xbc, 0xd2, 0x00, 0x04, 0xac, 0x96, 0xdd, 0x96 }; const char ICQ_CAPABILITY_ICQLITExVER[] = { 0x17, 0x8C, 0x2D, 0x9B, 0xDA, 0xA5, 0x45, 0xBB, 0x8D, 0xDB, 0xF3, 0xBD, 0xBD, 0x53, 0xA1, 0x0A }; const char ICQ_CAPABILITY_AIMCHAT[] = { 0x74, 0x8F, 0x24, 0x20, 0x62, 0x87, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_PIGEONxVER[] = { 'P', 'I', 'G', 'E', 'O', 'N', '!', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; const char ICQ_CAPABILITY_RAMBLER[] = { 0x7E, 0x11, 0xB7, 0x78, 0xA3, 0x53, 0x49, 0x26, 0xA8, 0x02, 0x44, 0x73, 0x52, 0x08, 0xC4, 0x2A }; const char ICQ_CAPABILITY_ABV[] = { 0x00, 0xE7, 0xE0, 0xDF, 0xA9, 0xD0, 0x4F, 0xe1, 0x91, 0x62, 0xC8, 0x90, 0x9A, 0x13, 0x2A, 0x1B }; const char ICQ_CAPABILITY_NETVIGATOR[] = { 0x4C, 0x6B, 0x90, 0xA3, 0x3D, 0x2D, 0x48, 0x0E, 0x89, 0xD6, 0x2E, 0x4B, 0x2C, 0x10, 0xD9, 0x9F }; const char ICQ_CAPABILITY_TZERS[] = { 0xb2, 0xec, 0x8f, 0x16, 0x7c, 0x6f, 0x45, 0x1b, 0xbd, 0x79, 0xdc, 0x58, 0x49, 0x78, 0x88, 0xb9 }; const char ICQ_CAPABILITY_HTMLMSGS[] = { 0x01, 0x38, 0xca, 0x7b, 0x76, 0x9a, 0x49, 0x15, 0x88, 0xf2, 0x13, 0xfc, 0x00, 0x97, 0x9e, 0xa8 }; const char ICQ_CAPABILITY_LIVEVIDEO[] = { 0x09, 0x46, 0x01, 0x01, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_SIMPLITE[] = { 0x53, 0x49, 0x4D, 0x50, 0x53, 0x49, 0x4D, 0x50, 0x53, 0x49, 0x4D, 0x50, 0x53, 0x49, 0x4D, 0x50 }; const char ICQ_CAPABILITY_SIMPPRO[] = { 0x53, 0x49, 0x4D, 0x50, 0x5F, 0x50, 0x52, 0x4F, 0x53, 0x49, 0x4D, 0x50, 0x5F, 0x50, 0x52, 0x4F }; const char ICQ_CAPABILITY_IMSECURE[] = { 'I', 'M', 's', 'e', 'c', 'u', 'r', 'e', 'C', 'p', 'h', 'r', 0x00, 0x00, 0x06, 0x01 }; const char ICQ_CAPABILITY_MSGTYPE2[] = { 0x09, 0x49, 0x13, 0x49, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMICQ[] = { 0x09, 0x46, 0x13, 0x4D, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMAUDIO[] = { 0x09, 0x46, 0x01, 0x04, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_PALMJICQ[] = { 'J', 'I', 'C', 'Q', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_INLUXMSGR[] = { 0xA7, 0xE4, 0x0A, 0x96, 0xB3, 0xA0, 0x47, 0x9A, 0xB8, 0x45, 0xC9, 0xE4, 0x67, 0xC5, 0x6B, 0x1F }; const char ICQ_CAPABILITY_MIPCLIENT[] = { 0x4D, 0x49, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_IMADERING[] = { 'I', 'M', 'a', 'd', 'e', 'r', 'i', 'n', 'g', ' ', 'C', 'l', 'i', 'e', 'n', 't' }; const char ICQ_CAPABILITY_NATICQxVER[] = { 'N', 'a', 't', 'I', 'C', 'Q', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_WEBICQPRO[] = { 'W', 'e', 'b', 'I', 'c', 'q', 'P', 'r', 'o', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_BAYANICQxVER[]= { 'b', 'a', 'y', 'a', 'n', 'I', 'C', 'Q', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //AIM Client version 5.9 capabilities const char ICQ_CAPABILITY_AIMADDINGS[] = { 0x09, 0x46, 0x13, 0x47, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMCONTSEND[] = { 0x09, 0x46, 0x13, 0x4b, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMUNK2[] = { 0x09, 0x46, 0x01, 0x02, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; const char ICQ_CAPABILITY_AIMSNDBDDLST[]= { 0x09, 0x46, 0x00, 0x00, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x13, 0x4B }; const char ICQ_CAPABILITY_IMSECKEY1[] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char ICQ_CAPABILITY_IMSECKEY2[] = { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // Short capabilities const unsigned short ICQ_SHORTCAP_SHORTCAPS = 0x0000; const unsigned short ICQ_SHORTCAP_AIMVOICE = 0x1341; const unsigned short ICQ_SHORTCAP_SENDFILE = 0x1343; const unsigned short ICQ_SHORTCAP_DIRECT = 0x1344; const unsigned short ICQ_SHORTCAP_AIMIMAGE = 0x1345; const unsigned short ICQ_SHORTCAP_BUDDYCON = 0x1346; const unsigned short ICQ_SHORTCAP_AIMSTOCKS = 0x1347; const unsigned short ICQ_SHORTCAP_GETFILE = 0x1348; const unsigned short ICQ_SHORTCAP_RELAY = 0x1349; const unsigned short ICQ_SHORTCAP_GAMES = 0x134a; const unsigned short ICQ_SHORTCAP_AIMBUDDYLIST = 0x134b; const unsigned short ICQ_SHORTCAP_AVATAR = 0x134c; const unsigned short ICQ_SHORTCAP_AIMSUPPORT = 0x134d; const unsigned short ICQ_SHORTCAP_UTF = 0x134e; #endif /*CAPABILITIES_H_*/ qutim-0.2.0/plugins/icq/oscarprotocol.h0000644000175000017500000000774511273054317021633 0ustar euroelessareuroelessar/* oscarProtocol Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 OSCARPROTOCOL_H #define OSCARPROTOCOL_H #include //#include // QAbstractSocket::SocketError #include #include "quticqglobals.h" //#include "contactlist.h" // Qt standard classes class QTreeWidget; class QTcpSocket; class QTimer; class QAbstractSocket; enum QAbstractSocket::SocketError; // qutIM own classes class connection; class closeConnection; //class passwordDialog; class snacChannel; class contactListTree; class icqBuffer; //class EncryptionManager; //enum accountStatus { online, ffc, away, na, occupied, dnd, invisible, offline, connecting}; class oscarProtocol : public QObject { Q_OBJECT public: oscarProtocol(const QString &, const QString &profile_name , QObject *parent = 0); ~oscarProtocol(); static quint16 secnumGenerator(); void setStatus( accountStatus ); accountStatus getStatus() { return currentStatus; } void removeContactList(); void readreadMessageStack(); contactListTree *getContactListClass() const; void sendKeepAlive(bool); bool userDisconnected; bool rateLimit; bool reconnectOnDisc; void resendCapabilities(); void sendOnlyCapabilities(); void setAutoAway(); void setStatusAfterAutoAway(); void reservedForFutureAOLHacks(); public slots: void onReloadGeneralSettings(); signals: void statusChanged(accountStatus currentStatus); void systemMessage(const QString &); void userMessage(const QString &, const QString &, const QString &, userMessageType, bool); void getNewMessage(); void readAllMessages(); void addToEventList(bool); void updateTranslation(); void accountConnected(bool); private slots: void disconnected(); void connected(); void displayError(QAbstractSocket::SocketError); void readDataFromSocket(); void clearSocket(); void sendIdentif(); void sendSystemMessage(const QString &m ) { emit systemMessage(m); } void sendUserMessage(const QString &fu, const QString &f, const QString &m, userMessageType t, bool l) { emit userMessage(fu, f , m, t, l); } void getBosIp(const QHostAddress &addr) { bosIp = addr; } void getBosPort ( const quint16 &port) { bosPort = port; } void incFlapSeqNum(); void incReqSeq(); void getAuthKey(const QByteArray &); void reconnectToBos(const QByteArray); void connectingToBos(); void rereadSocket(); // void gettingNewMessage() { emit getNewMessage(); } void sendAlivePacket(); void updateChangedStatus(); void restartAutoAway(bool, quint32); void blockRateLimit() { rateLimit = true; } void proxyDeleteTimer(); // Autoaway handling void onSecondIdle(int seconds); private: bool checkPassword(); accountStatus currentStatus; accountStatus beforeAwayStatus; accountStatus tempStatus; QTcpSocket *connectionSocket; connection *connectClass; closeConnection *closeConnectionClass; snacChannel *snacChannelClass; QString icqUin; QByteArray password; bool connectingAccount; QHostAddress bosIp; quint16 bosPort; quint16 flapSeqNum; bool md5Connection; contactListTree *contactListClass; bool readyToReadFlap; quint8 channel; quint16 flapLength; icqBuffer *buffer; quint16 reqSeq; bool keepAlive; QTimer *timer; bool connectBos; QByteArray cookieForBos; bool fAutoAwayRunning; bool autoAway; quint32 awayMin; QString m_profile_name; }; #endif // OSCARPROTOCOL_H qutim-0.2.0/plugins/icq/deletecontactdialog.cpp0000644000175000017500000000233511273054317023261 0ustar euroelessareuroelessar/* deleteContactDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "deletecontactdialog.h" #include deleteContactDialog::deleteContactDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); setFixedSize(size()); move(desktopCenter()); setWindowIcon(qutim_sdk_0_2::Icon("deleteuser")); } deleteContactDialog::~deleteContactDialog() { } QPoint deleteContactDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } qutim-0.2.0/plugins/icq/userinformation.h0000644000175000017500000001523211273054317022154 0ustar euroelessareuroelessar/* userInformation Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 USERINFORMATION_H #define USERINFORMATION_H #include #include "ui_userinformation.h" #include "quticqglobals.h" class userInformation : public QWidget { Q_OBJECT public: userInformation(const QString &profile_name, bool, bool, const QString &,const QString &, QWidget *parent = 0); ~userInformation(); void rellocateDialogToCenter(QWidget *widget); void setNick(const QString &t){ui.nickEdit->setText(t);} void setFirst(const QString &t){ui.firstEdit->setText(t);} void setLast(const QString &t){ui.lastEdit->setText(t);} void setEmail(const QString &t){ui.emailEdit->setText(t);} void setHomeCity(const QString &t){ui.cityEdit->setText(t);} void setHomeState(const QString &t){ui.stateEdit->setText(t);} void setHomePhone(const QString &t){ui.phoneEdit->setText(t);} void setHomeFax(const QString &t){ui.faxEdit->setText(t);} void setHomeAddress(const QString &t){ui.streeEdit->setText(t);} void setCell(const QString &t){ui.cellularEdit->setText(t);} void setHomeZip(const QString &t){ui.zipEdit->setText(t);} void setCountry(quint16); void setAge(quint16 a) { if ( a ) ui.ageEdit->setText(QString::number(a)); } void setGender(quint8 g) { ui.genderComboBox->setCurrentIndex(g);} void setHomePage(const QString &t){ui.homePageEdit->setText(t);} void setBirthDay(quint16, quint8,quint8); void setLang(quint8, quint8); void setOriginalCity(const QString &t){ui.origCityEdit->setText(t);} void setOriginalState(const QString &t){ui.origStateEdit->setText(t);} void setOriginalCountry(quint16); void setWorkCity(const QString &t){ui.workCityEdit->setText(t);} void setWorkState(const QString &t){ui.workStateEdit->setText(t);} void setWorkPhone(const QString &t){ui.workPhoneEdit->setText(t);} void setWorkFax(const QString &t){ui.workFaxEdit->setText(t);} void setWorkAddress(const QString &t){ui.workStreetEdit->setText(t);} void setWorkZip(const QString &t){ui.workZipEdit->setText(t);} void setWorkCountry(quint16); void setWorkCompany(const QString &t){ui.compNameEdit->setText(t);} void setWorkDepartment(const QString &t){ui.divDeptEdit->setText(t);} void setWorkPosition(const QString &t){ui.positionEdit->setText(t);} void setWorkOccupation(quint16); void setWorkWebPage(const QString &t){ui.webSiteEdit->setText(t);} void setInterests(const QString&, quint16, quint8); void setAboutInfo(const QString & t){ui.aboutEdit->setPlainText(t); } void enableRequestButton() { ui.requestButton->setEnabled(true); makeSummary();} void setAuth(quint8, quint8,quint8); void setAdditional(quint32,quint32,quint32,quint32,quint32, quint32, contactStatus, const QString &, const QList &, const QList &, quint32, quint32, quint32, bool, quint8,quint32, quint32); QString getNick(){return ui.nickEdit->text();} QString getFirst(){return ui.firstEdit->text();} QString getLast(){return ui.lastEdit->text();} QString getEmail(){return ui.emailEdit->text();} bool getPublish(){return ui.publishBox->isChecked();} QString contactUin; quint16 getHomeCountry(){return getCountryCodeFromIndex(ui.countryComboBox->currentIndex());} QString getHomeCity(){return ui.cityEdit->text();} QString getHomeState(){return ui.stateEdit->text();} QString getHomeZip(){return ui.zipEdit->text();} QString getHomePhone(){return ui.phoneEdit->text();} QString getHomeFax(){return ui.faxEdit->text();} QString getCellular(){return ui.cellularEdit->text();} QString getHomeStreet(){return ui.streeEdit->text();} quint16 getOrigCountry(){return getCountryCodeFromIndex(ui.origCountryComboBox->currentIndex());} QString getOrigCity(){return ui.origCityEdit->text();} QString getOrigState(){return ui.origStateEdit->text();} quint16 getWorkCountry(){return getCountryCodeFromIndex(ui.workCountryComboBox->currentIndex());} QString getWorkCity(){return ui.workCityEdit->text();} QString getWorkState(){return ui.workStateEdit->text();} QString getWorkZip(){return ui.workZipEdit->text();} QString getWorkPhone(){return ui.workPhoneEdit->text();} QString getWorkFax(){return ui.workFaxEdit->text();} QString getWorkStreet(){return ui.workStreetEdit->text();} QString getCompanyName(){return ui.compNameEdit->text();} quint16 getOccupation(); QString getDepartment(){return ui.divDeptEdit->text();} QString getPosition() { return ui.positionEdit->text();} QString getWebPage() { return ui.webSiteEdit->text();} quint8 getGender() { return ui.genderComboBox->currentIndex();} QString getHomePage() { return ui.homePageEdit->text(); } bool sendBirth(){return ui.birthBox->isChecked();} QDate getBirth() {return ui.birthDateEdit->date();} quint8 getLang1() { return ui.langComboBox1->currentIndex();} quint8 getLang2() { return ui.langComboBox2->currentIndex();} quint8 getLang3() { return ui.langComboBox3->currentIndex();} quint16 getInterests(int); QString getInterestString(int); QString getAbout(){return ui.aboutEdit->toPlainText().left(2000);} quint8 getAuth(); quint8 webAware(){return ui.webBox->isChecked();} protected: bool eventFilter( QObject * o, QEvent * e ); private slots: void on_saveButton_clicked(); void on_requestButton_clicked(); void on_addButton_clicked(); void on_removeButton_clicked(); signals: void requestUserInfo(const QString &); void saveOwnerInfo(bool, const QString &); private: Ui::userInformationClass ui; int getIndexFromCountryCode(quint16); QPoint desktopCenter(); QString checkForAvatar(const QString&, const QString &); QString ownUin; void makeSummary(); QSize getPictureSize(const QString &); quint16 getCountryCodeFromIndex(int); bool pictureChanged; QString picturePath; QStringList getCountryList(); QStringList getLangList(); QStringList getInterestList(); QString m_profile_name; }; #endif // USERINFORMATION_H qutim-0.2.0/plugins/icq/readawaydialog.cpp0000644000175000017500000000226311273054317022240 0ustar euroelessareuroelessar/* readAwayDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "readawaydialog.h" readAwayDialog::readAwayDialog(QWidget *parent) : QWidget(parent) { ui.setupUi(this); setFixedSize(size()); move(desktopCenter()); } readAwayDialog::~readAwayDialog() { } QPoint readAwayDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void readAwayDialog::addMessage(QString &t) { ui.awayMessage->setPlainText(t); } qutim-0.2.0/plugins/icq/buffer.cpp0000644000175000017500000000246311273054317020536 0ustar euroelessareuroelessar/* icqBuffer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "buffer.h" icqBuffer::icqBuffer(QObject *parent) : QBuffer(parent) { } icqBuffer::~icqBuffer() { } QByteArray icqBuffer::readAll() { QBuffer::seek(0); QByteArray array = QBuffer::readAll(); QBuffer::buffer().clear(); return array; } QByteArray icqBuffer::read(qint64 size) { QBuffer::seek(0); QByteArray array = QBuffer::read(size); QBuffer::buffer().remove(0,size); return array; } qint64 icqBuffer::bytesAvailable() const { return QBuffer::buffer().size(); } qint64 icqBuffer::write ( const QByteArray & byteArray ) { QBuffer::seek(QBuffer::buffer().size()); return QBuffer::write(byteArray); } qutim-0.2.0/plugins/icq/deletecontactdialog.h0000644000175000017500000000216411273054317022726 0ustar euroelessareuroelessar/* deleteContactDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 DELETECONTACTDIALOG_H #define DELETECONTACTDIALOG_H #include #include "ui_deletecontactdialog.h" class deleteContactDialog : public QDialog { Q_OBJECT public: deleteContactDialog(QWidget *parent = 0); ~deleteContactDialog(); bool deleteHistory(){return ui.checkBox->isChecked();} private: Ui::deleteContactDialogClass ui; QPoint desktopCenter(); }; #endif // DELETECONTACTDIALOG_H qutim-0.2.0/plugins/icq/accounteditdialog.h0000644000175000017500000000307511273054317022414 0ustar euroelessareuroelessar/* AccountEditDialog Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 ACCOUNTEDITDIALOG_H #define ACCOUNTEDITDIALOG_H #include #include #include #include "ui_accounteditdialog.h" #include "contactlist.h" class AccountEditDialog : public QWidget { Q_OBJECT Q_DISABLE_COPY(AccountEditDialog) public: AccountEditDialog(const QString &uin, const QString &profile_name, contactListTree *cl, QWidget *parent = 0); ~AccountEditDialog(); protected: virtual void changeEvent(QEvent *e); private slots: void on_okButton_clicked(); void on_applyButton_clicked(); void on_cancelButton_clicked(); void proxyTypeChanged( int ); private: void loadSettings(); Ui::accountEdit m_ui; QString m_uin; QPoint desktopCenter(); QString m_profile_name; contactListTree *m_cl; void saveSettings(); }; #endif // ACCOUNTEDITDIALOG_H qutim-0.2.0/plugins/icq/tlv.cpp0000644000175000017500000000411711273054317020070 0ustar euroelessareuroelessar/* tlv Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include "buffer.h" #include "tlv.h" tlv::tlv() { length = 0; type = 0; LE = false; } tlv::~tlv() { } void tlv::setData(const QString &d) { if ( d.length() < 65536) { data = d.toUtf8(); length = (quint16)d.length(); } } void tlv::setData(const QByteArray &d) { if ( d.length() < 65536) { data = d; length = (quint16)d.length(); } } void tlv::setData(const quint8 &d) { length = 1; data[0] = d; } void tlv::setData(const quint16 &d) { length = 2; data[0] = (d / 0x100); data[1] = (d % 0x100); } void tlv::setData(const quint32 &d) { length = 4; data[0] = (d / 0x1000000); data[1] = (d / 0x10000); data[2] = (d / 0x100); data[3] = (d % 0x100); } quint16 tlv::getLength() const { return 4 + length; } QByteArray tlv::getData() const { QByteArray tlvPacket; if ( !LE ) { tlvPacket[0] = type / 0x100; tlvPacket[1] = type % 0x100; tlvPacket[2] = length / 0x100; tlvPacket[3] = length % 0x100; } else { tlvPacket[1] = type / 0x100; tlvPacket[0] = type % 0x100; tlvPacket[3] = length / 0x100; tlvPacket[2] = length % 0x100; } tlvPacket.append(data); return tlvPacket; } quint16 tlv::byteArrayToInt16(const QByteArray &array) const { bool ok; return array.toHex().toUInt(&ok,16); } void tlv::readData(icqBuffer *socket) { type = byteArrayToInt16(socket->read(2)); length = byteArrayToInt16(socket->read(2)); data = socket->read(length); } qutim-0.2.0/plugins/icq/addaccountform.ui0000644000175000017500000000350111273054317022103 0ustar euroelessareuroelessar AddAccountFormClass 0 0 255 185 AddAccountForm 4 UIN: Password: QLineEdit::Password Save password true Qt::Vertical 20 33 qutim-0.2.0/plugins/icq/addbuddydialog.h0000644000175000017500000000260511273054317021670 0ustar euroelessareuroelessar/* addBuddyDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ADDBUDDYDIALOG_H #define ADDBUDDYDIALOG_H #include #include "ui_addbuddydialog.h" class addBuddyDialog : public QDialog { Q_OBJECT public: addBuddyDialog(QWidget *parent = 0); ~addBuddyDialog(); void rellocateDialogToCenter(QWidget *widget); void setTitle(const QString &t) { setWindowTitle(tr("Add %1").arg(t));} void setContactData(const QString &, const QStringList &); inline QString getNick() const { return ui.nickEdit->text(); }; inline QString getGroup() const { return ui.groupList->currentText(); }; void setMoveData(const QStringList &); private: Ui::addBuddyDialogClass ui; QPoint desktopCenter(); }; #endif // ADDBUDDYDIALOG_H qutim-0.2.0/plugins/icq/acceptauthdialog.cpp0000644000175000017500000000317311273054317022565 0ustar euroelessareuroelessar/* acceptAuthDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "acceptauthdialog.h" #include acceptAuthDialog::acceptAuthDialog(const QString &u,QWidget *parent) : QDialog(parent), uin(u) { ui.setupUi(this); setFixedSize(size()); move(desktopCenter()); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); acceptAuth = false; ui.acceptButton->setIcon(qutim_sdk_0_2::Icon("apply")); ui.declineButton->setIcon(qutim_sdk_0_2::Icon("cancel")); } acceptAuthDialog::~acceptAuthDialog() { } QPoint acceptAuthDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void acceptAuthDialog::on_acceptButton_clicked() { acceptAuth = true; emit sendAuthReqAnswer(true, uin); close(); } void acceptAuthDialog::on_declineButton_clicked() { acceptAuth = false; sendAuthReqAnswer(false, uin); close(); } qutim-0.2.0/plugins/icq/serverloginreply.cpp0000644000175000017500000000455611273054317022705 0ustar euroelessareuroelessar/* serverLoginReply Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include "tlv.h" #include "buffer.h" #include "serverloginreply.h" serverLoginReply::serverLoginReply() { isSnacError = false; } serverLoginReply::~serverLoginReply() { } void serverLoginReply::readData(QTcpSocket *tcpSocket, icqBuffer *socket, const QString &uin) { tlv icqUin; forever { icqUin.readData(socket); if ( icqUin.getTlvType() == 0x0001 ) break; } if( uin != QString(icqUin.getTlvData())) return; tlv tmp; forever { tmp.readData(socket); if ( tmp.getTlvType() == 0x0004 ) break; if ( tmp.getTlvType() == 0x0005 ) break; if ( tmp.getTlvType() == 0x0008 ) break; } if ( tmp.getTlvType() == 0x0004 ) { getError(socket); tcpSocket->disconnectFromHost(); } if ( tmp.getTlvType() == 0x0008 ) { isSnacError = true; errorMessage = tmp.getTlvData().at(1); socket->readAll(); tcpSocket->disconnectFromHost(); } if ( tmp.getTlvType() == 0x0005 ) { getBosServer(QString(tmp.getTlvData())); getCookie(socket); } } void serverLoginReply::getError(icqBuffer *socket) { isSnacError = true; tlv error; error.readData(socket); if ( error.getTlvType() == 0x0008 ) { errorMessage = static_cast(error.getTlvData().at(1)); socket->readAll(); } } void serverLoginReply::getBosServer(const QString &bosServer) { QStringList splitServer = bosServer.split(":"); bosIp = splitServer.at(0); bosPort = (quint16)splitServer.at(1).toUInt(); } void serverLoginReply::getCookie(icqBuffer *socket) { isSnacError = false; tlv getCookie; getCookie.readData(socket); cookie = getCookie.getTlvData(); } qutim-0.2.0/plugins/icq/passworddialog.ui0000644000175000017500000000446011273054317022141 0ustar euroelessareuroelessar passwordDialogClass 0 0 271 94 Enter your password 4 Your password: 16 QLineEdit::Password false OK :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Save password Qt::Vertical 20 40 saveButton clicked() passwordDialogClass accept() 254 54 273 40 qutim-0.2.0/plugins/icq/metainformation.cpp0000644000175000017500000011051711273054317022461 0ustar euroelessareuroelessar/* metaInformation Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include "snac.h" #include "buffer.h" #include "tlv.h" #include "metainformation.h" metaInformation::metaInformation(const QString &uin) : myUin(uin), setBirth(false) { } metaInformation::~metaInformation() { } void metaInformation::sendShortInfoReq(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq, const QString &uin) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapReq)); packet.append(convertToByteArray((quint16)30)); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0010)); packet.append(convertToByteArray((quint16)0x0e00)); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); packet.append(convertToByteArray((quint16)0xba04)); packet.append(convertUinToArray(uin)); tcpSocket->write(packet); } QByteArray metaInformation::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray metaInformation::convertToByteArray(const quint8 &d) { QByteArray packet; packet[0] = d; return packet; } QByteArray metaInformation::convertToLEByteArray(const quint16 &d) { QByteArray packet; packet[1] = (d / 0x100); packet[0] = (d % 0x100); return packet; } QByteArray metaInformation::convertToByteArray(const quint32 &d) { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } QByteArray metaInformation::convertUinToArray(const QString &uin) { quint32 tmpUin = uin.toUInt(); QByteArray packet; packet[0] = tmpUin % 0x100; packet[1] = tmpUin % 0x10000 / 0x100; packet[2] = tmpUin % 0x1000000 / 0x10000; packet[3] = tmpUin / 0x1000000; return packet; } quint16 metaInformation::byteArrayToLEInt16(const QByteArray &array) { bool ok; quint16 tmp = array.toHex().toUInt(&ok,16); return ((tmp % 0x100) * 0x100 + (tmp)/ 0x100); } quint32 metaInformation::byteArrayToLEInt32(const QByteArray &array) { bool ok; quint32 tmp = array.toHex().toUInt(&ok,16); return ((tmp % 0x100) * 0x1000000 + (tmp % 0x10000 / 0x100) * 0x10000 + (tmp % 0x1000000 / 0x10000) * 0x100 + (tmp)/0x1000000); } quint16 metaInformation::readShortInfo(icqBuffer *socket) { quint16 length = 3; socket->read(1); quint16 nickLength = byteArrayToLEInt16(socket->read(2)); nick = socket->read(nickLength - 1); socket->read(1); length += nickLength; quint16 firstNameLength = byteArrayToLEInt16(socket->read(2)); socket->read(firstNameLength); length = length + firstNameLength + 2; quint16 lastNameLength = byteArrayToLEInt16(socket->read(2)); socket->read(lastNameLength); length = length + lastNameLength + 2; quint16 emailLength = byteArrayToLEInt16(socket->read(2)); socket->read(emailLength); length = length + emailLength + 2 + 3; socket->read(3); return length; } void metaInformation::searchByUin(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq, const QString &uin) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapReq)); packet.append(convertToByteArray((quint16)34)); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0014)); packet.append(convertToByteArray((quint16)0x1200)); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); packet.append(convertToByteArray((quint16)0x6905)); packet.append(convertToByteArray((quint16)0x3601)); packet.append(convertToByteArray((quint16)0x0400)); packet.append(convertUinToArray(uin)); tcpSocket->write(packet); } quint16 metaInformation::readSearchResult(icqBuffer *socket, bool last) { quint16 length = 1; founded = true; quint8 successByte = convertToInt8(socket->read(1)); if ( successByte != 0x0a) { founded = false; return length; } socket->read(2); length += 2; quint32 userUin = byteArrayToLEInt32(socket->read(4)); length += 4; foundedUin = QString::number(userUin); quint16 nickLength = byteArrayToLEInt16(socket->read(2)); length += 2; foundedNick = socket->read(nickLength - 1); socket->read(1); length += nickLength; quint16 firstLength = byteArrayToLEInt16(socket->read(2)); length += 2; foundedFirst = socket->read(firstLength - 1); socket->read(1); length += firstLength; quint16 lastLength = byteArrayToLEInt16(socket->read(2)); length += 2; foundedLast = socket->read(lastLength - 1); socket->read(1); length += lastLength; quint16 emailLength = byteArrayToLEInt16(socket->read(2)); length += 2; foundedEmail = socket->read(emailLength - 1); socket->read(1); length += emailLength; authFlag = convertToInt8(socket->read(1)); length += 1; foundedStatus = byteArrayToLEInt16(socket->read(2)); length += 2; foundedGender = convertToInt8(socket->read(1)); length += 1; foundedAge = byteArrayToLEInt16(socket->read(2)); length += 2; if ( last ) { socket->read(4); length += 4; } return length; } quint8 metaInformation::convertToInt8(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } void metaInformation::searchByEmail(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq, QString email) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapReq)); quint16 metaLength = 19 + email.length(); packet.append(convertToByteArray((quint16)(14 + metaLength))); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)metaLength)); packet.append(convertToLEByteArray((quint16)(metaLength - 2))); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); packet.append(convertToByteArray((quint16)0x7305)); packet.append(convertToByteArray((quint16)0x5e01)); packet.append(convertToLEByteArray((quint16)(email.length() + 3))); packet.append(convertToByteArray((quint16)(email.length() + 1))); email.append(QChar(0x00)); packet.append(email); tcpSocket->write(packet); } void metaInformation::searchByOther(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq,bool onlineOnly, QString nick, QString firstName, QString lastName, quint8 gender, quint16 minAge, quint16 maxAge, quint16 country, QString city, quint16 interests, quint16 language, quint16 occupation, QString keyWords) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapReq)); quint16 metaLength = 0; QByteArray metaArray; metaLength += 5; metaArray.append(convertToByteArray((quint16)0x3002)); metaArray.append(convertToByteArray((quint16)0x0100)); if ( onlineOnly ) { metaArray.append(convertToByteArray((quint8)0x01)); } else metaArray.append(convertToByteArray((quint8)0x00)); if ( !nick.isEmpty() ) { metaArray.append(convertToByteArray((quint16)0x5401)); metaArray.append(convertToLEByteArray((quint16)(3 + nick.length()))); metaArray.append(convertToLEByteArray((quint16)(1 + nick.length()))); metaLength += 6; nick.append(QChar(0x00)); metaArray.append(nick); metaLength += nick.length(); } if ( !firstName.isEmpty() ) { metaArray.append(convertToByteArray((quint16)0x4001)); metaArray.append(convertToLEByteArray((quint16)(3 + firstName.length()))); metaArray.append(convertToLEByteArray((quint16)(1 + firstName.length()))); metaLength += 6; firstName.append(QChar(0x00)); metaArray.append(firstName); metaLength += firstName.length(); } if ( !lastName.isEmpty() ) { metaArray.append(convertToByteArray((quint16)0x4a01)); metaArray.append(convertToLEByteArray((quint16)(3 + lastName.length()))); metaArray.append(convertToLEByteArray((quint16)(1 + lastName.length()))); metaLength += 6; lastName.append(QChar(0x00)); metaArray.append(lastName); metaLength += lastName.length(); } if ( gender ) { metaArray.append(convertToByteArray((quint16)0x7c01)); metaArray.append(convertToByteArray((quint16)0x0100)); metaArray.append(convertToByteArray((quint8)gender)); metaLength += 5; } if ( minAge && maxAge) { metaArray.append(convertToByteArray((quint16)0x6801)); metaArray.append(convertToByteArray((quint16)0x0400)); metaArray.append(convertToLEByteArray((quint16)minAge)); metaArray.append(convertToLEByteArray((quint16)maxAge)); metaLength += 8; } if ( country ) { metaArray.append(convertToByteArray((quint16)0xa401)); metaArray.append(convertToByteArray((quint16)0x0200)); metaArray.append(convertToLEByteArray((quint16)country)); metaLength += 6; } if ( !city.isEmpty() ) { metaArray.append(convertToByteArray((quint16)0x9001)); metaArray.append(convertToLEByteArray((quint16)(3 + city.length()))); metaArray.append(convertToLEByteArray((quint16)(1 + city.length()))); metaLength += 6; city.append(QChar(0x00)); metaArray.append(city); metaLength += city.length(); } if ( interests ) { metaArray.append(convertToByteArray((quint16)0xea01)); metaArray.append(convertToByteArray((quint16)0x0400)); metaArray.append(convertToLEByteArray((quint16)interests)); metaArray.append(convertToLEByteArray((quint16)0x0000)); metaLength += 8; } if ( language ) { metaArray.append(convertToByteArray((quint16)0x8601)); metaArray.append(convertToByteArray((quint16)0x0200)); metaArray.append(convertToLEByteArray((quint16)language)); metaLength += 6; } if ( occupation ) { metaArray.append(convertToByteArray((quint16)0xcc01)); metaArray.append(convertToByteArray((quint16)0x0200)); metaArray.append(convertToLEByteArray((quint16)occupation)); metaLength += 6; } if ( !keyWords.isEmpty() ) { metaArray.append(convertToByteArray((quint16)0x2602)); metaArray.append(convertToLEByteArray((quint16)(3 + keyWords.length()))); metaArray.append(convertToLEByteArray((quint16)(1 + keyWords.length()))); metaLength += 6; keyWords.append(QChar(0x00)); metaArray.append(keyWords); metaLength += keyWords.length(); } packet.append(convertToByteArray((quint16)(26 + metaLength))); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)(12 + metaLength))); packet.append(convertToLEByteArray((quint16)(metaLength + 10))); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); packet.append(convertToByteArray((quint16)0x5f05)); packet.append(metaArray); tcpSocket->write(packet); } void metaInformation::getFullUserInfo(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq, const QString &uin) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapReq)); packet.append(convertToByteArray((quint16)30)); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0010)); packet.append(convertToByteArray((quint16)0x0e00)); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); if ( uin == myUin ) packet.append(convertToByteArray((quint16)0xb204)); else packet.append(convertToByteArray((quint16)0xd004)); packet.append(convertUinToArray(uin)); tcpSocket->write(packet); } quint16 metaInformation::readBasicUserInfo(icqBuffer *socket) { quint16 length = 1; basicInfoSuccess = true; quint8 successByte = convertToInt8(socket->read(1)); if ( successByte != 0x0a) { basicInfoSuccess = false; return length; } quint16 nickLength = byteArrayToLEInt16(socket->read(2)); length += 2; basicNick = socket->read(nickLength - 1); socket->read(1); length += nickLength; quint16 firstNameLength = byteArrayToLEInt16(socket->read(2)); basicFirst = socket->read(firstNameLength - 1); socket->read(1); length = length + firstNameLength + 2; quint16 lastNameLength = byteArrayToLEInt16(socket->read(2)); basicLast = socket->read(lastNameLength - 1); socket->read(1); length = length + lastNameLength + 2; quint16 emailLength = byteArrayToLEInt16(socket->read(2)); basicEmail = socket->read(emailLength - 1); socket->read(1); length = length + emailLength + 2; quint16 cityLength = byteArrayToLEInt16(socket->read(2)); basicCity = socket->read(cityLength - 1); socket->read(1); length = length + cityLength + 2; quint16 stateLength = byteArrayToLEInt16(socket->read(2)); basicState = socket->read(stateLength - 1); socket->read(1); length = length + stateLength + 2; quint16 phoneLength = byteArrayToLEInt16(socket->read(2)); basicPhone = socket->read(phoneLength - 1); socket->read(1); length = length +phoneLength + 2; quint16 faxLength = byteArrayToLEInt16(socket->read(2)); basicFax= socket->read(faxLength - 1); socket->read(1); length = length + faxLength + 2; quint16 addressLength = byteArrayToLEInt16(socket->read(2)); basicAddress= socket->read(addressLength - 1); socket->read(1); length = length + addressLength + 2; quint16 cellLength = byteArrayToLEInt16(socket->read(2)); basicCell= socket->read(cellLength - 1); socket->read(1); length = length + cellLength + 2; quint16 zipLength = byteArrayToLEInt16(socket->read(2)); basicZip= socket->read(zipLength - 1); socket->read(1); length = length + zipLength + 2; country = byteArrayToLEInt16(socket->read(2)); length += 2; socket->read(1); basicAuthFlag = convertToInt8(socket->read(1)); webAware = convertToInt8(socket->read(1)); socket->read(1); publishEmail = convertToInt8(socket->read(1)); length += 5; return length; } quint16 metaInformation::readMoreUserInfo(icqBuffer *socket) { quint16 length = 1; moreInfoSuccess = true; quint8 successByte = convertToInt8(socket->read(1)); if ( successByte != 0x0a) { moreInfoSuccess = false; return length; } moreAge = byteArrayToLEInt16(socket->read(2)); length += 2; moreGender = convertToInt8(socket->read(1)); length ++; quint16 homePageLength = byteArrayToLEInt16(socket->read(2)); homepage = socket->read(homePageLength - 1); socket->read(1); length = length + homePageLength + 2; moreBirthYear = byteArrayToLEInt16(socket->read(2)); length += 2; moreBirthMonth = convertToInt8(socket->read(1)); length ++; moreBirthDay = convertToInt8(socket->read(1)); length ++; moreLang1 = convertToInt8(socket->read(1)); length ++; moreLang2 = convertToInt8(socket->read(1)); length ++; moreLang3 = convertToInt8(socket->read(1)); length ++; socket->read(2); length += 2; quint16 cityLength = byteArrayToLEInt16(socket->read(2)); moreCity = socket->read(cityLength - 1); socket->read(1); length = length + cityLength + 2; quint16 stateLength = byteArrayToLEInt16(socket->read(2)); moreState = socket->read(stateLength - 1); socket->read(1); length = length + stateLength + 2; moreCountry = byteArrayToLEInt16(socket->read(2)); length += 2; socket->read(1); length++; return length; } quint16 metaInformation::readWorkUserInfo(icqBuffer *socket) { quint16 length = 1; workInfoSuccess = true; quint8 successByte = convertToInt8(socket->read(1)); if ( successByte != 0x0a) { workInfoSuccess = false; return length; } quint16 cityLength = byteArrayToLEInt16(socket->read(2)); workCity = socket->read(cityLength - 1); socket->read(1); length = length + cityLength + 2; quint16 stateLength = byteArrayToLEInt16(socket->read(2)); workState = socket->read(stateLength - 1); socket->read(1); length = length + stateLength + 2; quint16 phoneLength = byteArrayToLEInt16(socket->read(2)); workPhone = socket->read(phoneLength - 1); socket->read(1); length = length + phoneLength + 2; quint16 faxLength = byteArrayToLEInt16(socket->read(2)); workFax = socket->read(faxLength - 1); socket->read(1); length = length + faxLength + 2; quint16 addressLength = byteArrayToLEInt16(socket->read(2)); workAddress = socket->read(addressLength - 1); socket->read(1); length = length + addressLength + 2; quint16 zipLength = byteArrayToLEInt16(socket->read(2)); workZip = socket->read(zipLength - 1); socket->read(1); length = length + zipLength + 2; workCountry = byteArrayToLEInt16(socket->read(2)); length += 2; quint16 companyLength = byteArrayToLEInt16(socket->read(2)); workCompany = socket->read(companyLength - 1); socket->read(1); length = length + companyLength + 2; quint16 departmentLength = byteArrayToLEInt16(socket->read(2)); workDepartment = socket->read(departmentLength - 1); socket->read(1); length = length + departmentLength + 2; quint16 positionLength = byteArrayToLEInt16(socket->read(2)); workPosition = socket->read(positionLength - 1); socket->read(1); length = length + positionLength + 2; workOccupation = byteArrayToLEInt16(socket->read(2)); length += 2; quint16 webpageLength = byteArrayToLEInt16(socket->read(2)); workWebPage = socket->read(webpageLength - 1); socket->read(1); length = length + webpageLength + 2; return length; } quint16 metaInformation::readInterestsUserInfo(icqBuffer *socket) { quint16 length = 1; interestsInfoSuccess = true; quint8 successByte = convertToInt8(socket->read(1)); if ( successByte != 0x0a) { interestsInfoSuccess = false; return length; } quint8 interestsCount = convertToInt8(socket->read(1)); length++; for(int i = 0; i < interestsCount; i++) { if(i == 0) { interCode1 = byteArrayToLEInt16(socket->read(2)); length += 2; quint16 interLength1 = byteArrayToLEInt16(socket->read(2)); interKeyWords1 = socket->read(interLength1 - 1); socket->read(1); length = length + interLength1 + 2; } else if ( i == 1) { interCode2 = byteArrayToLEInt16(socket->read(2)); length += 2; quint16 interLength2 = byteArrayToLEInt16(socket->read(2)); interKeyWords2 = socket->read(interLength2 - 1); socket->read(1); length = length + interLength2 + 2; } else if ( i == 2) { interCode3 = byteArrayToLEInt16(socket->read(2)); length += 2; quint16 interLength3 = byteArrayToLEInt16(socket->read(2)); interKeyWords3 = socket->read(interLength3 - 1); socket->read(1); length = length + interLength3 + 2; } else if ( i == 3 ) { interCode4 = byteArrayToLEInt16(socket->read(2)); length += 2; quint16 interLength4 = byteArrayToLEInt16(socket->read(2)); interKeyWords4 = socket->read(interLength4 - 1); socket->read(1); length = length + interLength4 + 2; } else { socket->read(2); length += 2; quint16 interLength= byteArrayToLEInt16(socket->read(2)); socket->read(interLength); length = length + interLength + 2; } } return length; } quint16 metaInformation::readAboutUserInfo(icqBuffer *socket) { quint16 length = 1; aboutInfoSuccess = true; quint8 successByte = convertToInt8(socket->read(1)); if ( successByte != 0x0a) { aboutInfoSuccess = false; return length; } quint16 aboutLength = byteArrayToLEInt16(socket->read(2)); about = socket->read(aboutLength- 1); socket->read(1); length = length + aboutLength + 2; return length; } void metaInformation::saveOwnerInfo(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapReq)); QByteArray metaData; tlv nickTlv; nickTlv.setLe(true); nickTlv.setType(0x0154); QByteArray nickArray; nickArray.append(convertToLEByteArray((quint16)(basicNick.length() + 1))); nickArray.append(basicNick); nickArray.append(QChar(0x00)); nickTlv.setData(nickArray); metaData.append(nickTlv.getData()); tlv firstTlv; firstTlv.setLe(true); firstTlv.setType(0x0140); QByteArray firstArray; firstArray.append(convertToLEByteArray((quint16)(basicFirst.length() + 1))); firstArray.append(basicFirst); firstArray.append(QChar(0x00)); firstTlv.setData(firstArray); metaData.append(firstTlv.getData()); tlv lastTlv; lastTlv.setLe(true); lastTlv.setType(0x014a); QByteArray lastArray; lastArray.append(convertToLEByteArray((quint16)(basicLast.length() + 1))); lastArray.append(basicLast); lastArray.append(QChar(0x00)); lastTlv.setData(lastArray); metaData.append(lastTlv.getData()); tlv emailTlv; emailTlv.setType(0x015e); emailTlv.setLe(true); QByteArray mailArray; mailArray.append(convertToLEByteArray((quint16)(basicEmail.length() + 2))); mailArray.append(basicEmail); mailArray.append(QChar(0x00)); mailArray.append(publishEmail); emailTlv.setData(mailArray); metaData.append(emailTlv.getData()); tlv countryTlv; countryTlv.setType(0x01a4); countryTlv.setLe(true); countryTlv.setData(convertToLEByteArray(country)); metaData.append(countryTlv.getData()); tlv cityTlv; cityTlv.setLe(true); cityTlv.setType(0x0190); QByteArray cityArray; cityArray.append(convertToLEByteArray((quint16)(basicCity.length() + 1))); cityArray.append(basicCity); cityArray.append(QChar(0x00)); cityTlv.setData(cityArray); metaData.append(cityTlv.getData()); tlv stateTlv; stateTlv.setLe(true); stateTlv.setType(0x019a); QByteArray stateArray; stateArray.append(convertToLEByteArray((quint16)(basicState.length() + 1))); stateArray.append(basicState); stateArray.append(QChar(0x00)); stateTlv.setData(stateArray); metaData.append(stateTlv.getData()); tlv zipTlv; zipTlv.setType(0x026c); zipTlv.setLe(true); zipTlv.setData(convertUinToArray(zip)); metaData.append(zipTlv.getData()); tlv phoneTlv; phoneTlv.setLe(true); phoneTlv.setType(0x0276); QByteArray phoneArray; phoneArray.append(convertToLEByteArray((quint16)(basicPhone.length() + 1))); phoneArray.append(basicPhone); phoneArray.append(QChar(0x00)); phoneTlv.setData(phoneArray); metaData.append(phoneTlv.getData()); tlv faxTlv; faxTlv.setLe(true); faxTlv.setType(0x0280); QByteArray faxArray; faxArray.append(convertToLEByteArray((quint16)(basicFax.length() + 1))); faxArray.append(basicFax); faxArray.append(QChar(0x00)); faxTlv.setData(faxArray); metaData.append(faxTlv.getData()); tlv cellTlv; cellTlv.setLe(true); cellTlv.setType(0x028a); QByteArray cellArray; cellArray.append(convertToLEByteArray((quint16)(basicCell.length() + 1))); cellArray.append(basicCell); cellArray.append(QChar(0x00)); cellTlv.setData(cellArray); metaData.append(cellTlv.getData()); tlv streetTlv; streetTlv.setLe(true); streetTlv.setType(0x0262); QByteArray streetArray; streetArray.append(convertToLEByteArray((quint16)(basicAddress.length() + 1))); streetArray.append(basicAddress); streetArray.append(QChar(0x00)); streetTlv.setData(streetArray); metaData.append(streetTlv.getData()); tlv mcountryTlv; mcountryTlv.setType(0x0334); mcountryTlv.setLe(true); mcountryTlv.setData(convertToLEByteArray(moreCountry)); metaData.append(mcountryTlv.getData()); tlv ocityTlv; ocityTlv.setLe(true); ocityTlv.setType(0x0320); QByteArray ocityArray; ocityArray.append(convertToLEByteArray((quint16)(moreCity.length() + 1))); ocityArray.append(moreCity); ocityArray.append(QChar(0x00)); ocityTlv.setData(ocityArray); metaData.append(ocityTlv.getData()); tlv ostateTlv; ostateTlv.setLe(true); ostateTlv.setType(0x032a); QByteArray ostateArray; ostateArray.append(convertToLEByteArray((quint16)(moreState.length() + 1))); ostateArray.append(moreState); ostateArray.append(QChar(0x00)); ostateTlv.setData(ostateArray); metaData.append(ostateTlv.getData()); tlv wcountryTlv; wcountryTlv.setType(0x02b2); wcountryTlv.setLe(true); wcountryTlv.setData(convertToLEByteArray(workCountry)); metaData.append(wcountryTlv.getData()); tlv wcityTlv; wcityTlv.setLe(true); wcityTlv.setType(0x029e); QByteArray wcityArray; wcityArray.append(convertToLEByteArray((quint16)(workCity.length() + 1))); wcityArray.append(workCity); wcityArray.append(QChar(0x00)); wcityTlv.setData(wcityArray); metaData.append(wcityTlv.getData()); tlv wstateTlv; wstateTlv.setLe(true); wstateTlv.setType(0x02a8); QByteArray wstateArray; wstateArray.append(convertToLEByteArray((quint16)(workState.length() + 1))); wstateArray.append(workState); wstateArray.append(QChar(0x00)); wstateTlv.setData(wstateArray); metaData.append(wstateTlv.getData()); tlv wzipTlv; wzipTlv.setType(0x02bc); wzipTlv.setLe(true); wzipTlv.setData(convertUinToArray(wzip)); metaData.append(wzipTlv.getData()); tlv wphoneTlv; wphoneTlv.setLe(true); wphoneTlv.setType(0x02c6); QByteArray wphoneArray; wphoneArray.append(convertToLEByteArray((quint16)(workPhone.length() + 1))); wphoneArray.append(workPhone); wphoneArray.append(QChar(0x00)); wphoneTlv.setData(wphoneArray); metaData.append(wphoneTlv.getData()); tlv wfaxTlv; wfaxTlv.setLe(true); wfaxTlv.setType(0x02d0); QByteArray wfaxArray; wfaxArray.append(convertToLEByteArray((quint16)(workFax.length() + 1))); wfaxArray.append(workFax); wfaxArray.append(QChar(0x00)); wfaxTlv.setData(wfaxArray); metaData.append(wfaxTlv.getData()); tlv wstreetTlv; wstreetTlv.setLe(true); wstreetTlv.setType(0x0294); QByteArray wstreetArray; wstreetArray.append(convertToLEByteArray((quint16)(workAddress.length() + 1))); wstreetArray.append(workAddress); wstreetArray.append(QChar(0x00)); wstreetTlv.setData(wstreetArray); metaData.append(wstreetTlv.getData()); tlv companyTlv; companyTlv.setLe(true); companyTlv.setType(0x01ae); QByteArray companyArray; companyArray.append(convertToLEByteArray((quint16)(workCompany.length() + 1))); companyArray.append(workCompany); companyArray.append(QChar(0x00)); companyTlv.setData(companyArray); metaData.append(companyTlv.getData()); tlv occuptionTlv; occuptionTlv.setType(0x01cc); occuptionTlv.setLe(true); occuptionTlv.setData(convertToLEByteArray(workOccupation)); metaData.append(occuptionTlv.getData()); tlv depTlv; depTlv.setLe(true); depTlv.setType(0x01b8); QByteArray depArray; depArray.append(convertToLEByteArray((quint16)(workDepartment.length() + 1))); depArray.append(workDepartment); depArray.append(QChar(0x00)); depTlv.setData(depArray); metaData.append(depTlv.getData()); tlv positionTlv; positionTlv.setLe(true); positionTlv.setType(0x01c2); QByteArray positionArray; positionArray.append(convertToLEByteArray((quint16)(workPosition.length() + 1))); positionArray.append(workPosition); positionArray.append(QChar(0x00)); positionTlv.setData(positionArray); metaData.append(positionTlv.getData()); tlv websiteTlv; websiteTlv.setLe(true); websiteTlv.setType(0x02da); QByteArray websiteArray; websiteArray.append(convertToLEByteArray((quint16)(workWebPage.length() + 1))); websiteArray.append(workWebPage); websiteArray.append(QChar(0x00)); websiteTlv.setData(websiteArray); metaData.append(websiteTlv.getData()); tlv genderTlv; genderTlv.setType(0x017c); genderTlv.setLe(true); genderTlv.setData(convertToByteArray((quint8)foundedGender)); metaData.append(genderTlv.getData()); tlv homePageTlv; homePageTlv.setLe(true); homePageTlv.setType(0x0213); QByteArray homePageArray; homePageArray.append(convertToLEByteArray((quint16)(homepage.length() + 1))); homePageArray.append(homepage); homePageArray.append(QChar(0x00)); homePageTlv.setData(homePageArray); metaData.append(homePageTlv.getData()); tlv birthTlv; birthTlv.setType(0x023a); birthTlv.setLe(true); QByteArray birthDay; if ( setBirth ) { birthDay.append(convertToLEByteArray((quint16)moreBirthYear)); birthDay.append(convertToLEByteArray((quint16)moreBirthMonth)); birthDay.append(convertToLEByteArray((quint16)moreBirthDay)); } else { birthDay.append(convertToByteArray((quint16)0x0000)); birthDay.append(convertToByteArray((quint16)0x0000)); birthDay.append(convertToByteArray((quint16)0x0000)); } birthTlv.setData(birthDay); metaData.append(birthTlv.getData()); tlv langTlv; langTlv.setType(0x0186); langTlv.setLe(true); langTlv.setData(convertToLEByteArray(moreLang1)); metaData.append(langTlv.getData()); tlv langTlv2; langTlv2.setType(0x0186); langTlv2.setLe(true); langTlv2.setData(convertToLEByteArray(moreLang2)); metaData.append(langTlv2.getData()); tlv langTlv3; langTlv3.setType(0x0186); langTlv3.setLe(true); langTlv3.setData(convertToLEByteArray(moreLang3)); metaData.append(langTlv3.getData()); tlv interest1Tlv; interest1Tlv.setLe(true); interest1Tlv.setType(0x01ea); QByteArray interst1Array; interst1Array.append(convertToLEByteArray((quint16)interCode1)); interst1Array.append(convertToLEByteArray((quint16)(interKeyWords1.length() + 1))); interst1Array.append(interKeyWords1); interst1Array.append(QChar(0x00)); interest1Tlv.setData(interst1Array); metaData.append(interest1Tlv.getData()); tlv interest2Tlv; interest2Tlv.setLe(true); interest2Tlv.setType(0x01ea); QByteArray interst2Array; interst2Array.append(convertToLEByteArray((quint16)interCode2)); interst2Array.append(convertToLEByteArray((quint16)(interKeyWords2.length() + 1))); interst2Array.append(interKeyWords2); interst2Array.append(QChar(0x00)); interest2Tlv.setData(interst2Array); metaData.append(interest2Tlv.getData()); tlv interest3Tlv; interest3Tlv.setLe(true); interest3Tlv.setType(0x01ea); QByteArray interst3Array; interst3Array.append(convertToLEByteArray((quint16)interCode3)); interst3Array.append(convertToLEByteArray((quint16)(interKeyWords3.length() + 1))); interst3Array.append(interKeyWords3); interst3Array.append(QChar(0x00)); interest3Tlv.setData(interst3Array); metaData.append(interest3Tlv.getData()); tlv interest4Tlv; interest4Tlv.setLe(true); interest4Tlv.setType(0x01ea); QByteArray interst4Array; interst4Array.append(convertToLEByteArray((quint16)interCode4)); interst4Array.append(convertToLEByteArray((quint16)(interKeyWords4.length() + 1))); interst4Array.append(interKeyWords4); interst4Array.append(QChar(0x00)); interest4Tlv.setData(interst4Array); metaData.append(interest4Tlv.getData()); tlv aboutTlv; aboutTlv.setLe(true); aboutTlv.setType(0x0258); QByteArray aboutArray; aboutArray.append(convertToLEByteArray((quint16)(about.length() + 1))); aboutArray.append(about); aboutArray.append(QChar(0x00)); aboutTlv.setData(aboutArray); metaData.append(aboutTlv.getData()); tlv authTlv; authTlv.setType(0x030c); authTlv.setLe(true); authTlv.setData(convertToByteArray((quint8)webAware)); metaData.append(authTlv.getData()); tlv webTlv; webTlv.setType(0x02f8); webTlv.setLe(true); webTlv.setData(convertToByteArray((quint8)!authFlag)); metaData.append(webTlv.getData()); packet.append(convertToByteArray((quint16)(26 + metaData.length()))); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)(12 +metaData.length()))); packet.append(convertToLEByteArray((quint16)(metaData.length() + 10 ))); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); packet.append(convertToByteArray((quint16)0x3a0c)); packet.append(metaData); tcpSocket->write(packet); } void metaInformation::sendMoreInfo(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; quint16 metaLength = 13 + homepage.length(); packet.append(convertToByteArray((quint16)flapReq)); packet.append(convertToByteArray((quint16)(metaLength + 26))); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)(12 + metaLength))); packet.append(convertToLEByteArray((quint16)(10 + metaLength))); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); packet.append(convertToByteArray((quint16)0xfd03)); packet.append(convertToByteArray((quint16)0x1200)); packet.append(convertToByteArray((quint8)foundedGender)); QByteArray homePageArray; homePageArray.append(convertToLEByteArray((quint16)(homepage.length() + 1))); homePageArray.append(homepage); homePageArray.append(QChar(0x00)); packet.append(homePageArray); if ( setBirth ) { packet.append(convertToLEByteArray((quint16)moreBirthYear)); packet.append(convertToByteArray((quint8)moreBirthMonth)); packet.append(convertToByteArray((quint8)moreBirthDay)); } else { packet.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint8)0x00)); packet.append(convertToByteArray((quint8)0x00)); } packet.append(convertToByteArray((quint8)moreLang1)); packet.append(convertToByteArray((quint8)moreLang2)); packet.append(convertToByteArray((quint8)moreLang3)); tcpSocket->write(packet); } void metaInformation::changePassword(QTcpSocket *tcpSocket, const quint16 &flapReq, const quint32 &snacReq, const quint16 &metaReq, const QString &password) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapReq)); packet.append(convertToByteArray((quint16)(29 + password.length()))); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snacReq); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)(15 + password.length()))); packet.append(convertToLEByteArray((quint16)(13 + password.length()))); packet.append(convertUinToArray(myUin)); packet.append(convertToByteArray((quint16)0xd007)); packet.append(convertToLEByteArray((quint16)metaReq)); packet.append(convertToByteArray((quint16)0x2e04)); packet.append(convertToLEByteArray(password.length())); packet.append(password); packet.append(QChar(0x00)); tcpSocket->write(packet); } qutim-0.2.0/plugins/icq/filerequestwindow.cpp0000644000175000017500000000624611273054317023050 0ustar euroelessareuroelessar/* fileRequestWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "filerequestwindow.h" #include fileRequestWindow::fileRequestWindow(QWidget *parent) : QWidget(parent) { ui.setupUi(this); setFixedSize(size()); qutim_sdk_0_2::SystemsCity::PluginSystem()->centerizeWidget(this); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); gettedFileSize = 0; setWindowIcon(qutim_sdk_0_2::Icon("save_all")); ui.fileLabel->setPixmap(qutim_sdk_0_2::Icon("filerequest").pixmap(128)); ui.acceptButton->setIcon(qutim_sdk_0_2::Icon("apply")); ui.declineButton->setIcon(qutim_sdk_0_2::Icon("cancel")); } fileRequestWindow::~fileRequestWindow() { } void fileRequestWindow::setSengingData(const QString &name, const QString &fileName, quint32 ip, quint32 fileSize, quint16 port) { peerip = ip; peerport = port; getFileName = fileName; gettedFileSize = fileSize; ui.fromLabel->setText(name); ui.fileNameLabel->setText(fileName); QHostAddress addr(ip); ui.ipLabel->setText(addr.toString()); ui.fileSizeLabel->setText(getFileSize(fileSize)); } QString fileRequestWindow::getFileSize(quint32 size) const { quint16 bytes = size % 1024; quint16 kBytes = size % (1024 * 1024) / 1024; quint16 mBytes = size % (1024 * 1024 * 1024) / (1024 * 1024); quint16 gBytes = size / (1024 * 1024 * 1024); QString fileSize; if ( gBytes ) fileSize.append(QString::number(gBytes)+","); if ( gBytes || mBytes ) fileSize.append(QString::number(mBytes)+","); if ( gBytes || mBytes || kBytes ) fileSize.append(QString::number(kBytes)+","); if ( gBytes || mBytes || kBytes || bytes ) fileSize.append(QString::number(bytes)); return fileSize; } void fileRequestWindow::on_declineButton_clicked() { emit cancelSending(cookie, uin); close(); } void fileRequestWindow::on_acceptButton_clicked() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), QDir::homePath() + "/" + getFileName, tr("All files (*)")); if ( !fileName.isEmpty() ) { //TODO make nice dialog for whis // QFileInfo fi = QFileInfo(fileName); // if (fi.exists()) { // qutim_sdk_0_2::TreeModelItem item; // qutim_sdk_0_2::SystemsCity::PluginSystem()->customNotification(item,tr("File %1 is exist").arg(fileName)); // return; // } emit fileAccepted(cookie, uin, fileName, peerip, peerport, gettedFileSize); close(); } } qutim-0.2.0/plugins/icq/filetransferwindow.h0000644000175000017500000000707111273054317022646 0ustar euroelessareuroelessar/* fileTransferWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 FILETRANSFERWINDOW_H #define FILETRANSFERWINDOW_H #include #include #include #include #include "ui_filetransferwindow.h" class fileThread : public QThread { public: // fileThread(); bool flag; void run() { // flag = false; // for(;;) // { // if(flag) // return; // } exec(); } void test() { // for(;;); } }; class fileTransferWindow : public QWidget { Q_OBJECT public: fileTransferWindow(const QString &, const QStringList &, const QString &, QByteArray &,bool, quint16 listen_port, QWidget *parent = 0); ~fileTransferWindow(); void sendingDeclined(const QString &); void sendingAccepted(const QString &); void connectToProxy(quint32, quint16, bool); void connectToAolProxy(quint32, quint16); quint32 fileSize; void setVisualContactIp(quint32); void setMainConnectionProxy(const QNetworkProxy &); private slots: void on_cancelButton_clicked(); void on_openButton_clicked(); void socketConnected(); void readFromSocket(); void sendFileData(); void checkLocalConnection(); void sendTransferPacket(); void bytesWritten(); void slotNewConnection(); void updateProgress(); signals: void cancelSending(QByteArray &, const QString &); void sendingToPeerRequest(const QByteArray &, const QString &,const QStringList &); void getRedirectToProxyData(const QByteArray &, const QString &, quint16, quint32); void sendAcceptMessage(const QByteArray &, const QString &); void sendRedirectToMineServer(const QByteArray&, const QString &, quint16); protected: void closeEvent ( QCloseEvent * event ); private: Ui::fileTransferWindowClass ui; QPoint desktopCenter(); fileThread mainThread; bool sendingFile; QByteArray cookie; QString contactUin; QStringList fileList; QTcpSocket *tcpSocket; QByteArray convertToByteArray(const quint8 &) const; QByteArray convertToByteArray(const quint16 &) const; QByteArray convertToByteArray(const quint32 &) const; QString mineUin; bool waitingFor18; quint16 byteArrayToInt16(const QByteArray &) const; quint32 byteArrayToInt32(const QByteArray &) const; quint32 prevCheckSum; quint32 fileCheckSum(QFile &, quint32) const; bool waitingForFileAccept; QFile currentFile; quint16 currentFileChunkSize; bool waitingForGoodTransfer; bool connectedToProxy; bool sendingFileNow; quint32 tmpFileSize; quint32 currentFileSize; quint32 m_all_file_size; quint32 m_total_number_of_files; QByteArray transferPacket; QTcpServer *tcpServer; bool listenSocket; quint16 keyProxyPort; QString getFileSize(quint32) const; bool connectedToAolProxy; bool everyThingIsDone; void recreateSocket(); quint32 speed; QTime lastTime; void setRemainTime(); QByteArray utf8toUnicode( const QString &); quint16 m_listen_port; }; #endif // FILETRANSFERWINDOW_H qutim-0.2.0/plugins/icq/filerequestwindow.h0000644000175000017500000000304111273054317022503 0ustar euroelessareuroelessar/* fileRequestWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 FILEREQUESTWINDOW_H #define FILEREQUESTWINDOW_H #include #include "ui_filerequestwindow.h" #include class fileRequestWindow : public QWidget { Q_OBJECT public: fileRequestWindow(QWidget *parent = 0); ~fileRequestWindow(); void setSengingData(const QString &, const QString &, quint32, quint32, quint16); QString uin; QByteArray cookie; private slots: void on_declineButton_clicked(); void on_acceptButton_clicked(); signals: void cancelSending(QByteArray &,const QString &); void fileAccepted(const QByteArray &, const QString &, const QString &,quint32, quint16,quint32); private: Ui::fileRequestWindowClass ui; QString getFileSize(quint32) const; QString getFileName; quint32 peerip; quint16 peerport; quint32 gettedFileSize; }; #endif // FILEREQUESTWINDOW_H qutim-0.2.0/plugins/icq/tlv.h0000644000175000017500000000265311273054317017540 0ustar euroelessareuroelessar/* tlv Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 TLV_H_ #define TLV_H_ #include class QTcpSocket; class icqBuffer; class tlv { public: tlv(); ~tlv(); void setLe(bool f){ LE = f;} void setType(quint16 t) { type = t; } void setData(const QString &); void setData(const QByteArray &); void setData(const quint8 &); void setData(const quint16 &); void setData(const quint32 &); quint16 getLength() const; QByteArray getData() const; inline QByteArray getTlvData() const { return data; } inline quint16 getTlvLength() const { return length; } inline quint16 getTlvType() const { return type; } void readData(icqBuffer *); private: quint16 byteArrayToInt16(const QByteArray &) const; quint16 type; quint16 length; QByteArray data; bool LE; }; #endif /*TLV_H_*/ qutim-0.2.0/plugins/icq/plugineventeater.h0000644000175000017500000000127111273054317022307 0ustar euroelessareuroelessar#ifndef PLUGINEVENTEATER_H_ #define PLUGINEVENTEATER_H_ #include "icqaccount.h" using namespace qutim_sdk_0_2; class PluginEventEater : public EventHandler { public: void getEvent(const QList &event); void processEvent(Event &ev); void setAccountList(const QHash &account_list ); private: PluginEventEater(); virtual ~PluginEventEater(); QHash m_icq_list; void setStatus(const QList &event); void restoreStatus(const QList &event); quint16 m_event_set_status; quint16 m_event_restore_status; quint16 m_event_set_xstatus; quint16 m_event_restore_xstatus; friend class IcqLayer; }; #endif /*PLUGINEVENTEATER_H_*/ qutim-0.2.0/plugins/icq/icqlayer.h0000644000175000017500000001430611273054317020542 0ustar euroelessareuroelessar/* IcqLayer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ICQLAYER_H_ #define ICQLAYER_H_ #include #include "settings/icqsettings.h" #include "settings/networksettings.h" #include "settings/statussettings.h" #include "settings/contactsettings.h" using namespace qutim_sdk_0_2; class QString; class AddAccountForm; class icqAccount; class QHBoxLayout; #include const char crypter[] = {0x10,0x67, 0x56, 0x78, 0x85, 0x14, 0x87, 0x11, 0x45,0x45,0x45,0x45,0x45,0x45 }; class IcqLayer : public QObject, ProtocolInterface { Q_OBJECT Q_INTERFACES(qutim_sdk_0_2::PluginInterface) public: virtual bool init(PluginSystemInterface *plugin_system); virtual void release(); virtual void processEvent(PluginEvent & /*event*/) {} virtual QWidget *settingsWidget(){return 0;} virtual QString name(); virtual QString description(); virtual QIcon *icon(); virtual void setProfileName(const QString &); virtual void removeAccount(const QString &account_name); virtual QWidget *loginWidget(); virtual void removeLoginWidget(); //will be emited if button 'OK' or 'Apply' from settings dialog was pressed. virtual void applySettingsPressed(); //function for getting protocol statuses menu from all accounts virtual QList getAccountStatusMenu(); //protocol plugin must add account button with status menu and etc to this layout. virtual void addAccountButtonsToLayout(QHBoxLayout *); //function for saving all login data from login widget. virtual void saveLoginDataFromLoginWidget(); //function return protocol settings widgets and some additional data virtual QList getSettingsList(); //function for deleting protocol settings from memory virtual void removeProtocolSettings(); //function return account list virtual QList getAccountList(); virtual QList getAccountStatuses(); //Function notify about auto-away virtual void setAutoAway(); //Function notify about changing status from auto-away virtual void setStatusAfterAutoAway(); virtual void itemActivated(const QString &account_name, const QString &contact_name); virtual void itemContextMenu(const QList &action_list, const QString &account_name, const QString &contact_name, int item_type, const QPoint &menu_point); PluginSystemInterface *getMainPluginSystemPointer() {return m_plugin_system; } virtual void sendMessageTo(const QString &account_name, const QString &contact_name, int item_type, const QString& message, int message_icon_position); virtual QStringList getAdditionalInfoAboutContact(const QString &account_name, const QString &item_name, int item_type ) const; virtual void showContactInformation(const QString &account_name, const QString &item_name, int item_type ); virtual void sendImageTo(const QString &account_name, const QString &item_name, int item_type, const QByteArray &image_raw ); virtual void sendFileTo(const QString &account_name, const QString &item_name, int item_type, const QStringList &file_names); virtual void sendTypingNotification(const QString &account_name, const QString &item_name, int item_type, int notification_type); virtual void moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item); virtual QString getItemToolTip(const QString &account_name, const QString &contact_name); virtual void deleteItemSignalFromCL(const QString &account_name, const QString &item_name, int type); virtual void chatWindowOpened(const QString &account_name, const QString &item_name); virtual void chatWindowAboutToBeOpened(const QString &account_name, const QString &item_name) {} virtual void chatWindowClosed(const QString &account_name, const QString &item_name) {} virtual void sendMessageToConference(const QString&, const QString&, const QString&) {}; virtual void leaveConference(const QString&, const QString&) {}; virtual void conferenceItemActivated(const QString & /*conference_name*/, const QString & /*account_name*/, const QString & /*nickname*/) {} virtual void conferenceItemContextMenu(const QList & /*action_list*/, const QString & /*conference_name*/, const QString & /*account_name*/, const QString & /*nickname*/, const QPoint & /*menu_point*/) {} virtual QString getConferenceItemToolTip(const QString & /*conference_name*/, const QString & /*account_name*/, const QString & /*nickname*/) { return "conf"; } virtual void showConferenceContactInformation(const QString & /*conference_name*/, const QString & /*account_name*/, const QString & /*nickname*/) {} virtual void showConferenceTopicConfig(const QString & /*conference_name*/, const QString & /*account_name*/) {} virtual void showConferenceMenu(const QString & /*conference_name*/, const QString & /*account_name*/, const QPoint & /*menu_point*/) {} virtual void getMessageFromPlugins(const QList &event); virtual void editAccount(const QString &account); private: void removeProfileDir(const QString &); void addAccount(const QString &); void killAccount(const QString &, bool deleting_account); QList m_status_list; PluginSystemInterface *m_plugin_system; QIcon *m_protocol_icon; AddAccountForm *m_login_widget; QString m_profile_name; QHBoxLayout *m_account_buttons_layout; QHash m_icq_list; icqSettings *m_general_icq_settings; QTreeWidgetItem *m_general_icq_item; networkSettings *m_network_settings; QTreeWidgetItem *m_network_item; statusSettings *m_status_settings; QTreeWidgetItem *m_status_item; ContactSettings *m_contact_settings; QTreeWidgetItem *m_contact_item; }; #endif /*ICQLAYER_H_*/ qutim-0.2.0/plugins/icq/multiplesending.h0000644000175000017500000000311511273054317022130 0ustar euroelessareuroelessar/* multipleSending Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 MULTIPLESENDING_H #define MULTIPLESENDING_H #include #include "ui_multiplesending.h" class messageFormat; class treeGroupItem; class treeBuddyItem; class multipleSending : public QWidget { Q_OBJECT public: multipleSending(QWidget *parent = 0); ~multipleSending(); void rellocateDialogToCenter(QWidget *widget); void setTreeModel(const QString &, const QHash *, const QHash *); private slots: void on_contactListWidget_itemChanged(QTreeWidgetItem *, int); void on_sendButton_clicked(); void on_stopButton_clicked(); void sendMessage(); signals: void sendMessageToContact(const messageFormat &); private: Ui::multipleSendingClass ui; QPoint desktopCenter(); QStringList sendToList; QTreeWidgetItem *rootItem; QTimer *sendTimer; int barInterval; }; #endif // MULTIPLESENDING_H qutim-0.2.0/plugins/icq/searchuser.h0000644000175000017500000000532511273054317021076 0ustar euroelessareuroelessar/* searchUser Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 SEARCHUSER_H #define SEARCHUSER_H #include #include "ui_searchuser.h" class searchUser : public QWidget { Q_OBJECT public: searchUser(const QString &profile_name, QWidget *parent = 0); ~searchUser(); void rellocateDialogToCenter(QWidget *widget); QString getUin(); QString getEmail(); void addFoundedContact(bool, bool, const QString &, const QString &, const QString &, const QString &, const QString &, const quint8 &, const quint16 &, const quint8&, const quint16 &); quint8 gender; quint16 minAge; quint16 maxAge; quint16 countryCode; quint16 interestsCode; quint16 languageCode; quint16 occupationCode; bool onlineOnly(); QString getKeyWords(){ return ui.keyWordEdit->text();} QString getCity(){ return ui.cityEdit->text();} QString getNick(){ return ui.nickEdit->text();} QString getFirst(){ return ui.firstEdit->text();} QString getLast(){ return ui.lastEdit->text();} signals: void findAskedUsers(int); void openChatWithFounded(const QString &, const QString &); void openInfoWindow(const QString &, const QString &, const QString &, const QString &); void checkStatusFor(const QString &); void addUserToContactList(const QString &, const QString &, bool); private slots: void on_moreButton_toggled(bool); void on_clearButton_clicked(); void on_searchButton_clicked(); void on_resultTreeWidget_itemClicked(QTreeWidgetItem *,int ); void on_resultTreeWidget_customContextMenuRequested ( const QPoint & ); void addUserActionActivated(); void checkStatusActionActivated(); void userInformationActionActivated(); void sendMessageActionActivated(); void on_resultTreeWidget_itemDoubleClicked( QTreeWidgetItem *, int ); private: void createContextMenu(); QMenu *contextMenu; QAction *addUser; QAction *checkStatus; QAction *userInformationAction; QAction *sendMessageAction; Ui::searchUserClass ui; QPoint desktopCenter(); QTreeWidgetItem *clickedItemForContext; QString m_profile_name; }; #endif // SEARCHUSER_H qutim-0.2.0/plugins/icq/filerequestwindow.ui0000644000175000017500000001736211273054317022704 0ustar euroelessareuroelessar fileRequestWindowClass 0 0 468 232 468 232 16777215 232 File request :/icons/crystal_project/save_all.png:/icons/crystal_project/save_all.png QLayout::SetMaximumSize 4 128 128 128 128 QFrame::NoFrame :/icons/crystal_project/filerequest.png Qt::AlignCenter 0 15 16777215 15 From: 0 22 16777215 22 QFrame::StyledPanel 0 15 16777215 15 IP: 0 22 16777215 22 QFrame::StyledPanel 0 15 16777215 15 File name: 0 22 16777215 22 QFrame::StyledPanel Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse 0 15 16777215 15 File size: 0 22 16777215 22 QFrame::StyledPanel Qt::Horizontal 40 20 0 25 16777215 16777215 Accept :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png 0 25 16777215 16777215 Decline :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png Qt::Vertical 20 40 qutim-0.2.0/plugins/icq/filetransfer.cpp0000644000175000017500000003271111273054317021750 0ustar euroelessareuroelessar/* FileTransfer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "filetransfer.h" #include "icqpluginsystem.h" FileTransfer::FileTransfer(const QString & uin, QObject *parent) : QObject(parent) , ownerUin(uin) { sendFileAction = new QAction(IcqPluginSystem::instance().getIcon("save_all"), tr("Send file"), this); connectionProxy = QNetworkProxy::NoProxy; m_listen_port = 5191; // signalObject = new fileTransferSignals(this); // fileTransferSignals obj; } FileTransfer::~FileTransfer() { foreach(fileRequestWindow *w, requestList) delete w; requestList.clear(); foreach(fileTransferWindow *w, fileSendWindowList) delete w; fileSendWindowList.clear(); } QAction *FileTransfer::getSendFileAction() { return sendFileAction; } void FileTransfer::sendFileTriggered(const QString &uin, const QStringList &fileName) { sendToUin = uin; if ( fileName.count() ) { quint32 msgcookie = QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); quint32 msgcookie2 = qrand(); QByteArray cookie; cookie.append(convertToByteArray((quint32)msgcookie)); cookie.append(convertToByteArray((quint32)msgcookie2)); fileTransferWindow *w = new fileTransferWindow(ownerUin, fileName, uin, cookie, true, m_listen_port); w->setMainConnectionProxy(connectionProxy); connect( w, SIGNAL(destroyed ( QObject *)), this, SLOT(deleteFileWin(QObject *))); connect( w, SIGNAL(cancelSending(QByteArray &,const QString &)), this, SLOT(cancelSending(QByteArray &, const QString &))); connect( w, SIGNAL(sendingToPeerRequest(const QByteArray &, const QString &, const QStringList &)), this, SLOT(sendingToPeerRequest(const QByteArray &, const QString &, const QStringList &))); connect( w, SIGNAL(getRedirectToProxyData(const QByteArray &, const QString &, quint16, quint32)), this, SLOT(getRedirectToProxyData(const QByteArray &, const QString &, quint16, quint32))); connect( w, SIGNAL(sendAcceptMessage(const QByteArray &, const QString &)), this, SLOT(sendAcceptMessage(const QByteArray &, const QString &))); connect( w, SIGNAL(sendRedirectToMineServer(const QByteArray&, const QString &, quint16)), this, SLOT(sendRedirectToMineServer(const QByteArray&, const QString &, quint16))); fileSendWindowList.insert(cookie, w); w->show(); sendingToPeerRequest(cookie, uin, fileName); } } QByteArray FileTransfer::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray FileTransfer::convertToByteArray(const quint8 &d) { QByteArray packet; packet[0] = d; return packet; } QByteArray FileTransfer::convertToLEByteArray(const quint16 &d) { QByteArray packet; packet[1] = (d / 0x100); packet[0] = (d % 0x100); return packet; } QByteArray FileTransfer::convertToByteArray(const quint32 &d) { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } quint16 FileTransfer::byteArrayToLEInt16(const QByteArray &array) { bool ok; quint16 tmp = array.toHex().toUInt(&ok,16); return ((tmp % 0x100) * 0x100 + (tmp)/ 0x100); } quint32 FileTransfer::byteArrayToLEInt32(const QByteArray &array) { bool ok; quint32 tmp = array.toHex().toUInt(&ok,16); return ((tmp % 0x100) * 0x1000000 + (tmp % 0x10000 / 0x100) * 0x10000 + (tmp % 0x1000000 / 0x10000) * 0x100 + (tmp)/0x1000000); } quint8 FileTransfer::convertToInt8(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } void FileTransfer::deleteFileWin(QObject *obj) { fileTransferWindow *tempWindow = (fileTransferWindow *)(obj); fileSendWindowList.remove(fileSendWindowList.key(tempWindow)); } void FileTransfer::cancelSending(QByteArray &array, const QString &uin) { QByteArray packet; packet.append(array); packet.append(convertToByteArray((quint16)0x0002)); packet[packet.length()] = uin.toUtf8().length(); packet.append(uin.toUtf8()); packet.append(convertToByteArray((quint16)0x0005)); packet.append(convertToByteArray((quint16)26)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(array); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); emit emitCancelSending(packet); } void FileTransfer::contactCanceled(const QString &uin, const QByteArray &cookie) { if ( fileSendWindowList.contains(cookie)) { fileSendWindowList.value(cookie)->sendingDeclined(uin); } } void FileTransfer::contactAccept(const QString &uin, const QByteArray &cookie) { if ( fileSendWindowList.contains(cookie)) { fileSendWindowList.value(cookie)->sendingAccepted(uin); } } void FileTransfer::sendingToPeerRequest(const QByteArray &cookie, const QString &uin, const QStringList &fileName) { QByteArray packet1; packet1.append(cookie); packet1.append(convertToByteArray((quint16)0x0002)); packet1[packet1.length()] = uin.toUtf8().length(); packet1.append(uin.toUtf8()); QByteArray rendezvousValue; rendezvousValue.append(convertToByteArray((quint16)0)); rendezvousValue.append(cookie); rendezvousValue.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); tlv tlv0a; tlv0a.setType(0x000a); tlv0a.setData((quint16)1); rendezvousValue.append(tlv0a.getData()); rendezvousValue.append(convertToByteArray((quint16)0x000f)); rendezvousValue.append(convertToByteArray((quint16)0)); QByteArray rendezvousValue2; tlv tlv05; tlv05.setType(0x0005); tlv05.setData((quint16)5191); rendezvousValue2.append(tlv05.getData()); tlv tlv17; tlv17.setType(0x0017); tlv17.setData((quint16)(9280 ^ 0xffff)); rendezvousValue2.append(tlv17.getData()); if ( fileName.count() == 1 ) { QString realFileName = fileName.at(0).section('/', -1); rendezvousValue2.append(convertToByteArray((quint16)0x2711)); rendezvousValue2.append(convertToByteArray((quint16)(9 + realFileName.toUtf8().length()))); rendezvousValue2.append(convertToByteArray((quint16)0x0001)); rendezvousValue2.append(convertToByteArray((quint16)0x0001)); QFile file(fileName.at(0)); rendezvousValue2.append(convertToByteArray((quint32)file.size())); rendezvousValue2.append(realFileName.toUtf8()); rendezvousValue2.append(QChar(0x00)); } else { rendezvousValue2.append(convertToByteArray((quint16)0x2711)); rendezvousValue2.append(convertToByteArray((quint16)9)); rendezvousValue2.append(convertToByteArray((quint16)2)); rendezvousValue2.append(convertToByteArray((quint16)fileName.count())); quint32 sumFileSize = 0; foreach(QString file_name, fileName) { QFile f(file_name); sumFileSize += f.size(); } rendezvousValue2.append(convertToByteArray((quint32)sumFileSize)); rendezvousValue2.append(QChar(0x00)); } tlv tlv2712; tlv2712.setType(0x2712); tlv2712.setData(QString("utf-8")); rendezvousValue2.append(tlv2712.getData()); emit sendFile(packet1, rendezvousValue, rendezvousValue2); } void FileTransfer::requestToRedirect(const QString &uin, const QByteArray &cookie, quint16 redirectTo, quint32 ip, quint16 port, const QString & contactName, const QString &fileName, quint32 fileSize, quint32 aolProxyIP) { if ( fileSendWindowList.contains(cookie) && redirectTo == 2) { if ( (aolProxyIP && !ip)) fileSendWindowList.value(cookie)->connectToProxy(aolProxyIP, port, true); else fileSendWindowList.value(cookie)->connectToProxy(ip, port, false); } if ( fileSendWindowList.contains(cookie) && redirectTo == 3) { fileSendWindowList.value(cookie)->connectToAolProxy(aolProxyIP, port); } if ( redirectTo == 1) { fileRequestWindow *w = new fileRequestWindow; connect( w, SIGNAL(destroyed ( QObject *)), this, SLOT(deleteReqWin(QObject *))); connect( w, SIGNAL(cancelSending(QByteArray &,const QString &)), this, SLOT(cancelSending(QByteArray &, const QString &))); connect( w, SIGNAL(fileAccepted(const QByteArray &, const QString &, const QString &,quint32, quint16, quint32)), this, SLOT(fileAccepted(const QByteArray &, const QString &, const QString &,quint32, quint16, quint32))); w->setSengingData(contactName, fileName, ip, fileSize, port); requestList.insert(cookie, w); w->uin = uin; w->cookie = cookie; w->show(); } } void FileTransfer::getRedirectToProxyData(const QByteArray &cookie, const QString &uin, quint16 port, quint32 ip) { QByteArray packet; packet.append(cookie); packet.append(convertToByteArray((quint16)0x0002)); packet[packet.length()] = uin.toUtf8().length(); packet.append(uin.toUtf8()); QByteArray rendezvousValue; rendezvousValue.append(convertToByteArray((quint16)0)); rendezvousValue.append(cookie); rendezvousValue.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); tlv tlv0a; tlv0a.setType(0x000a); tlv0a.setData((quint16)3); rendezvousValue.append(tlv0a.getData()); tlv tlv2; tlv2.setType(0x0002); tlv2.setData((quint32)ip); rendezvousValue.append(tlv2.getData()); // tlv tlv3; // tlv3.setType(0x0003); // tlv3.setData((quint32)ip); // // rendezvousValue.append(tlv3.getData()); tlv tlv16; tlv16.setType(0x0016); tlv16.setData((quint32)(ip ^ 0xffffffff)); rendezvousValue.append(tlv16.getData()); tlv tlv5; tlv5.setType(0x0005); tlv5.setData((quint16)port); rendezvousValue.append(tlv5.getData()); tlv tlv17; tlv17.setType(0x0017); tlv17.setData((quint16)(port ^ 0xffff)); rendezvousValue.append(tlv17.getData()); rendezvousValue.append(convertToByteArray((quint16)0x0010)); rendezvousValue.append(convertToByteArray((quint16)0)); packet.append(convertToByteArray((quint16)0x0005)); packet.append(convertToByteArray((quint16)rendezvousValue.length())); packet.append(rendezvousValue); emit sendRedirectToProxy(packet); } void FileTransfer::sendAcceptMessage(const QByteArray &cookie, const QString &uin) { QByteArray packet; packet.append(cookie); packet.append(convertToByteArray((quint16)0x0002)); packet[packet.length()] = uin.toUtf8().length(); packet.append(uin.toUtf8()); packet.append(convertToByteArray((quint16)0x0005)); packet.append(convertToByteArray((quint16)26)); packet.append(convertToByteArray((quint16)0x0002)); packet.append(cookie); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); emit emitAcceptSending(packet); } void FileTransfer::deleteReqWin(QObject *obj) { fileRequestWindow *tempWindow = (fileRequestWindow *)(obj); requestList.remove(requestList.key(tempWindow)); } void FileTransfer::fileAccepted(const QByteArray &cookie, const QString &uin, const QString &fileName, quint32 ip, quint16 port,quint32 fileSize) { QStringList list; list<setMainConnectionProxy(connectionProxy); w->fileSize = fileSize; connect( w, SIGNAL(destroyed ( QObject *)), this, SLOT(deleteFileWin(QObject *))); connect( w, SIGNAL(cancelSending(QByteArray &,const QString &)), this, SLOT(cancelSending(QByteArray &, const QString &))); connect( w, SIGNAL(sendingToPeerRequest(const QByteArray &, const QString &, const QStringList &)), this, SLOT(sendingToPeerRequest(const QByteArray &, const QString &, const QStringList &))); connect( w, SIGNAL(getRedirectToProxyData(const QByteArray &, const QString &, quint16, quint32)), this, SLOT(getRedirectToProxyData(const QByteArray &, const QString &, quint16, quint32))); connect( w, SIGNAL(sendAcceptMessage(const QByteArray &, const QString &)), this, SLOT(sendAcceptMessage(const QByteArray &, const QString &))); connect( w, SIGNAL(sendRedirectToMineServer(const QByteArray&, const QString &, quint16)), this, SLOT(sendRedirectToMineServer(const QByteArray&, const QString &, quint16))); fileSendWindowList.insert(cookie, w); w->setVisualContactIp(ip); w->show(); w->connectToProxy(ip, port, false); } void FileTransfer::sendRedirectToMineServer(const QByteArray& cookie, const QString &uin, quint16 port) { QByteArray packet1; packet1.append(cookie); packet1.append(convertToByteArray((quint16)0x0002)); packet1[packet1.length()] = uin.toUtf8().length(); packet1.append(uin.toUtf8()); QByteArray rendezvousValue; rendezvousValue.append(convertToByteArray((quint16)0)); rendezvousValue.append(cookie); rendezvousValue.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); tlv tlv0a; tlv0a.setType(0x000a); tlv0a.setData((quint16)2); rendezvousValue.append(tlv0a.getData()); QByteArray rendezvousValue2; tlv tlv05; tlv05.setType(0x0005); tlv05.setData((quint16)port); rendezvousValue2.append(tlv05.getData()); tlv tlv17; tlv17.setType(0x0017); tlv17.setData((quint16)(9280 ^ 0xffff)); rendezvousValue2.append(tlv17.getData()); emit sendFile(packet1, rendezvousValue, rendezvousValue2); } void FileTransfer::disconnectFromAll() { foreach(fileRequestWindow *w, requestList) delete w; requestList.clear(); foreach(fileTransferWindow *w, fileSendWindowList) delete w; fileSendWindowList.clear(); } qutim-0.2.0/plugins/icq/servicessetup.h0000644000175000017500000000572511273054317021642 0ustar euroelessareuroelessar/* servicesSetup Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 SERVICESSETUP_H_ #define SERVICESSETUP_H_ #include #include "quticqglobals.h" #include "icqpluginsystem.h" class QTcpSocket; class servicesSetup { public: servicesSetup(const QString &, const QString &profile_name); ~servicesSetup(); quint16 flap0202seq; quint32 snac0202seq; quint16 flap0204seq; quint32 snac0204seq; quint16 flap0302seq; quint32 snac0302seq; quint16 flap0404seq; quint32 snac0404seq; quint16 flap0402seq; quint32 snac0402seq; quint16 flap0402seq02; quint32 snac0402seq02; quint16 flap0902seq; quint32 snac0902seq; quint16 flap1302seq; quint32 snac1302seq; quint16 flap1305seq; quint32 snac1305seq; quint16 flap1307seq; quint32 snac1307seq; quint16 flap1309seq; quint32 snac1309seq; quint16 flap011eseq; quint32 snac011eseq; quint16 flap0102seq; quint32 snac0102seq; quint16 flap1502seq; quint32 snac1502seq; quint16 req1502seq; quint32 uin; void sendData(QTcpSocket *, const QString &); void answerToList(QTcpSocket *); void setStatus(accountStatus); void changeStatus(accountStatus, QTcpSocket *, const QString &); void setPrivacy(const QString &, quint16, quint16, QTcpSocket *); void sendCapabilities(QTcpSocket *); void sendXStatusAsAvailableMessage(QTcpSocket *); private: QString icqMood; QByteArray convertToByteArray(const quint8 &); QByteArray convertToByteArray(const quint16 &); QByteArray convertToByteArray(const quint32 &); QByteArray get0202(); QByteArray get0204(); QByteArray get0302(); QByteArray get0404(); QByteArray get0402(); QByteArray get0902(); QByteArray get1302(); QByteArray get1307(); QByteArray get1305(); QByteArray get011e(const QString &); QByteArray get0102(); QByteArray get1502(); QByteArray utf8Cap(); QByteArray buddyIconCap(); QByteArray rtfMessages(); QByteArray serverRelaying(); quint16 currentStatus; QByteArray getClientIdentification(); QString icqUin; QByteArray icq6Capab(); QByteArray icq51Capab(); QByteArray icq5Capab(); QByteArray icq4Capab(); QByteArray icq2003bCapab(); QByteArray icq2002Capab(); QByteArray icqMacCapab(); QByteArray icqQip2005Capab(); QByteArray icqQipInfCapab(); QByteArray qutimCapab(); QByteArray getProtocolVersion(unsigned,unsigned); QByteArray getXstatusCap(int); QString m_profile_name; }; #endif /*SERVICESSETUP_H_*/ qutim-0.2.0/plugins/icq/servicessetup.cpp0000644000175000017500000010130111273054317022160 0ustar euroelessareuroelessar/* servicesSetup Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include #include "tlv.h" #include "snac.h" #include "servicessetup.h" #ifdef Q_OS_WIN32 #include #endif #ifdef Q_WS_MAC #include #endif servicesSetup::servicesSetup(const QString &u, const QString &profile_name) : icqUin(u) , m_profile_name(profile_name) { flap0202seq = 0; snac0202seq = 0; flap0204seq = 0; snac0204seq = 0; flap0302seq = 0; snac0302seq = 0; flap0404seq = 0; snac0404seq = 0; flap0402seq = 0; snac0402seq = 0; flap0902seq = 0; snac0902seq = 0; flap1307seq = 0; snac1307seq = 0; flap1305seq = 0; snac1305seq = 0; flap011eseq = 0; snac011eseq = 0; flap0102seq = 0; snac0102seq = 0; } servicesSetup::~servicesSetup() { } QByteArray servicesSetup::convertToByteArray(const quint8 &d) { QByteArray packet; packet[0] = d; return packet; } QByteArray servicesSetup::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray servicesSetup::convertToByteArray(const quint32 & d) { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } void servicesSetup::sendData(QTcpSocket *socket, const QString &uin) { QByteArray packet; packet.append(get011e(uin)); packet.append(get0202()); packet.append(get0204()); packet.append(get0302()); packet.append(get0404()); packet.append(get0402()); packet.append(get0902()); packet.append(get1302()); packet.append(get1305()); socket->write(packet); } void servicesSetup::answerToList(QTcpSocket *socket) { QByteArray packet; packet.append(get1307()); packet.append(get0102()); packet.append(get1502()); socket->write(packet); } QByteArray servicesSetup::get0204() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); snac snac0204; snac0204.setFamily(0x0002); snac0204.setSubType(0x0004); snac0204.setReqId(snac0204seq); tlv capabilities; capabilities.setType(0x0005); QByteArray capList; capList.append(utf8Cap()); capList.append(serverRelaying()); capList.append(buddyIconCap()); capList.append(getClientIdentification()); int xstatusIndex = settings.value("xstatus/index", 0).toInt(); if ( xstatusIndex ) capList.append(getXstatusCap(xstatusIndex - 1)); // capList.append(rtfMessages()); capabilities.setData(capList); quint16 length = 10 + capabilities.getLength(); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap0204seq)); packet.append(convertToByteArray(length)); packet.append(snac0204.getData()); packet.append(capabilities.getData()); return packet; } QByteArray servicesSetup::utf8Cap() { //ICQ UTF8 Support {0946134e-4c7f-11d1-8222-444553540000} QByteArray packet; packet.append(convertToByteArray((quint32)0x0946134e)); packet.append(convertToByteArray((quint32)0x4c7f11d1)); packet.append(convertToByteArray((quint32)0x82224445)); packet.append(convertToByteArray((quint32)0x53540000)); return packet; } QByteArray servicesSetup::buddyIconCap() { //Buddy Icon {09461346-4c7f-11d1-8222-444553540000} QByteArray packet; packet.append(convertToByteArray((quint32)0x09461346)); packet.append(convertToByteArray((quint32)0x4c7f11d1)); packet.append(convertToByteArray((quint32)0x82224445)); packet.append(convertToByteArray((quint32)0x53540000)); return packet; } QByteArray servicesSetup::rtfMessages() { //RTF messages {97B12751-243C-4334-AD22-D6ABF73F1492} QByteArray packet; packet.append(convertToByteArray((quint32)0x97B12751)); packet.append(convertToByteArray((quint32)0x243C4334)); packet.append(convertToByteArray((quint32)0xAD22D6AB)); packet.append(convertToByteArray((quint32)0xF73F1492)); return packet; } QByteArray servicesSetup::serverRelaying() { //ICQ Server relaying {09461349-4C7F-11D1-8222-444553540000} QByteArray packet; packet.append(convertToByteArray((quint32)0x09461349)); packet.append(convertToByteArray((quint32)0x4C7F11D1)); packet.append(convertToByteArray((quint32)0x82224445)); packet.append(convertToByteArray((quint32)0x53540000)); return packet; } QByteArray servicesSetup::get0402() { snac snac0402; snac0402.setFamily(0x0004); snac0402.setSubType(0x0002); snac0402.setReqId(snac0402seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap0402seq)); packet.append(convertToByteArray((quint16)26)); packet.append(snac0402.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x000000b)); packet.append(convertToByteArray((quint16)0x1f40)); packet.append(convertToByteArray((quint16)0x03e7)); packet.append(convertToByteArray((quint16)0x03e7)); packet.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)0x0000)); snac0402.setReqId(snac0402seq02); QByteArray packet02; packet02[0] = 0x2A; packet02[1] = 0x02; packet02.append(convertToByteArray(flap0402seq02)); packet02.append(convertToByteArray((quint16)26)); packet02.append(snac0402.getData()); packet02.append(convertToByteArray((quint16)0x0002)); packet02.append(convertToByteArray((quint32)0x0000003)); packet02.append(convertToByteArray((quint16)0x1f40)); packet02.append(convertToByteArray((quint16)0x03e7)); packet02.append(convertToByteArray((quint16)0x03e7)); packet02.append(convertToByteArray((quint16)0x0000)); packet02.append(convertToByteArray((quint16)0x0000)); packet.append(packet02); return packet; } QByteArray servicesSetup::get1307() { snac snac1307; snac1307.setFamily(0x0013); snac1307.setSubType(0x0007); snac1307.setReqId(snac1307seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap1307seq)); packet.append(convertToByteArray((quint16)10)); packet.append(snac1307.getData()); return packet; } QByteArray servicesSetup::get011e(const QString &account) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); quint32 webaware = 0x00000000; if ( settings.value("statuses/webaware", false).toBool() ) webaware = 0x00010000; quint32 userFlags = 0x11000000 + webaware; if ( account_settings.value("xstatus/birth", false).toBool() ) { userFlags ^= 0x00080000; } snac snac011e; snac011e.setFamily(0x0001); snac011e.setSubType(0x001e); snac011e.setReqId(snac011eseq); tlv userStatus; userStatus.setType(0x0006); userStatus.setData((quint32)( userFlags + currentStatus)); unsigned clientIdentification = settings.value("clientid/index", 0).toUInt(); unsigned port = settings.value("clientid/protocol", 1).toUInt(); tlv unknownTlv; unknownTlv.setType(0x0008); unknownTlv.setData((quint16)0x0000); tlv dcInfo; dcInfo.setType(0x000c); dcInfo.setData(getProtocolVersion(clientIdentification, port)); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap011eseq)); // if ( clientIdentification ) packet.append(convertToByteArray((quint16)(18 + unknownTlv.getLength() + dcInfo.getLength()))); // else // packet.append(convertToByteArray((quint16)18)); packet.append(snac011e.getData()); packet.append(userStatus.getData()); // if ( clientIdentification ) // { packet.append(unknownTlv.getData()); packet.append(dcInfo.getData()); // } return packet; } QByteArray servicesSetup::get0102() { snac snac0102; snac0102.setFamily(0x0001); snac0102.setSubType(0x0002); snac0102.setReqId(snac0102seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap0102seq)); packet.append(convertToByteArray((quint16)82)); packet.append(snac0102.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0003)); packet.append(convertToByteArray((quint32)0x0110047b)); packet.append(convertToByteArray((quint16)0x0002)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x0101047b)); packet.append(convertToByteArray((quint16)0x0003)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x0110047b)); packet.append(convertToByteArray((quint16)0x0004)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x0110047b)); packet.append(convertToByteArray((quint16)0x0006)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x0110047b)); packet.append(convertToByteArray((quint16)0x0008)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x0110047b)); packet.append(convertToByteArray((quint16)0x0009)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x0110047b)); packet.append(convertToByteArray((quint16)0x000A)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint32)0x0110047b)); packet.append(convertToByteArray((quint16)0x0013)); packet.append(convertToByteArray((quint16)0x0002)); packet.append(convertToByteArray((quint32)0x0110047b)); return packet; } QByteArray servicesSetup::get1305() { snac snac1305; snac1305.setFamily(0x0013); snac1305.setSubType(0x0005); snac1305.setReqId(snac1305seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap1305seq)); packet.append(convertToByteArray((quint16)16)); packet.append(snac1305.getData()); packet.append(convertToByteArray((quint32)0x00000000)); packet.append(convertToByteArray((quint16)0x0000)); return packet; } QByteArray servicesSetup::get1302() { snac snac1302; snac1302.setFamily(0x0013); snac1302.setSubType(0x0002); snac1302.setReqId(snac1302seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap1302seq)); packet.append(convertToByteArray((quint16)10)); packet.append(snac1302.getData()); return packet; } QByteArray servicesSetup::get0202() { snac snac0202; snac0202.setFamily(0x0002); snac0202.setSubType(0x0002); snac0202.setReqId(snac0202seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap0202seq)); packet.append(convertToByteArray((quint16)10)); packet.append(snac0202.getData()); return packet; } QByteArray servicesSetup::get0302() { snac snac0302; snac0302.setFamily(0x0003); snac0302.setSubType(0x0002); snac0302.setReqId(snac0302seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap0302seq)); packet.append(convertToByteArray((quint16)10)); packet.append(snac0302.getData()); return packet; } QByteArray servicesSetup::get0404() { snac snac0404; snac0404.setFamily(0x0004); snac0404.setSubType(0x0004); snac0404.setReqId(snac0404seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap0404seq)); packet.append(convertToByteArray((quint16)10)); packet.append(snac0404.getData()); return packet; } QByteArray servicesSetup::get0902() { snac snac0902; snac0902.setFamily(0x0009); snac0902.setSubType(0x0002); snac0902.setReqId(snac0902seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap0902seq)); packet.append(convertToByteArray((quint16)10)); packet.append(snac0902.getData()); return packet; } QByteArray servicesSetup::get1502() { snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(snac1502seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap1502seq)); packet.append(convertToByteArray((quint16)24)); packet.append(snac1502.getData()); tlv metaData; metaData.setType(0x0001); QByteArray mData; mData.append(convertToByteArray((quint16)0x0800)); mData.append(uin % 0x100); mData.append(uin % 0x10000 / 0x100); mData.append(uin % 0x1000000 / 0x10000); mData.append(uin / 0x1000000); mData.append(convertToByteArray((quint16)0x3c00)); mData.append(convertToByteArray((quint16)req1502seq)); metaData.setData(mData); packet.append(metaData.getData()); return packet; } void servicesSetup::setStatus(accountStatus status) { switch ( status ) { case online: currentStatus = 0x0000; break; case ffc: currentStatus = 0x0020; break; case away: currentStatus = 0x0001; break; case na: currentStatus = 0x0004; break; case occupied: currentStatus = 0x0010; break; case dnd: currentStatus = 0x0002; break; case invisible: currentStatus = 0x0100; break; case lunch: currentStatus = 0x2001; break; case evil: currentStatus = 0x3000; break; case depression: currentStatus = 0x4000; break; case athome: currentStatus = 0x5000; break; case atwork: currentStatus = 0x6000; break; default: currentStatus = 0x0000; } } void servicesSetup::changeStatus(accountStatus s, QTcpSocket *socket, const QString &uin) { setStatus(s); socket->write(get011e(uin)); } void servicesSetup::setPrivacy(const QString &uin, quint16 pdInfoId, quint16 pdInfoGroupId, QTcpSocket *tcpSocket) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); quint32 privacyType = settings.value("statuses/privacy", 4).toUInt(); quint8 privacy; switch( privacyType ) { case 1: privacy = 0x01; break; case 2: privacy = 0x03; break; case 3: privacy = 0x04; break; case 4: privacy = 0x05; break; case 5: privacy = 0x02; break; default: privacy = 0x05; } snac snac1309; snac1309.setFamily(0x0013); snac1309.setSubType(0x0009); snac1309.setReqId(snac1309seq); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap1309seq)); quint16 length = 20; tlv tlv00ca; tlv00ca.setType(0x00ca); tlv00ca.setData((quint8)privacy); tlv tlv00cb; tlv00cb.setType(0x00cb); tlv00cb.setData((quint32)0xffffffff); length = length + tlv00ca.getLength() + tlv00cb.getLength(); packet.append(convertToByteArray((quint16)length)); packet.append(snac1309.getData()); packet.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)pdInfoGroupId)); packet.append(convertToByteArray((quint16)pdInfoId)); packet.append(convertToByteArray((quint16)0x0004)); packet.append(convertToByteArray((quint16)(tlv00ca.getLength() + tlv00cb.getLength()))); packet.append(tlv00ca.getData()); packet.append(tlv00cb.getData()); tcpSocket->write(packet); } QByteArray servicesSetup::getClientIdentification() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.beginGroup("clientid"); unsigned newClientIndex = settings.value("index", 0).toUInt(); QString newClientCap1 = settings.value("cap1").toString(); QString newClientCap2 = settings.value("cap2").toString(); QString newClientCap3 = settings.value("cap3").toString(); settings.endGroup(); QByteArray clientCapab; QByteArray cap1 = QByteArray::fromHex(newClientCap1.toLocal8Bit()); QByteArray cap2 = QByteArray::fromHex(newClientCap2.toLocal8Bit()); QByteArray cap3 = QByteArray::fromHex(newClientCap3.toLocal8Bit()); if ( cap1.length() == 16 ) clientCapab.append(cap1); if ( cap2.length() == 16 ) clientCapab.append(cap2); if ( cap3.length() == 16 ) clientCapab.append(cap3); switch(newClientIndex) { case 0: clientCapab.append(qutimCapab()); break; case 1: clientCapab.append(icq6Capab()); break; case 2: clientCapab.append(icq51Capab()); break; case 3: clientCapab.append(icq5Capab()); break; case 4: clientCapab.append(icq4Capab()); break; case 5: clientCapab.append(icq2003bCapab()); break; case 6: clientCapab.append(icq2002Capab()); break; case 7: clientCapab.append(icqMacCapab()); break; case 8: clientCapab.append(icqQip2005Capab()); break; case 9: clientCapab.append(icqQipInfCapab()); break; default: ; } // we always send a short_caps capability clientCapab.append(QByteArray::fromHex("094600004c7f11d18222444553540000")); return clientCapab; } QByteArray servicesSetup::icq6Capab() { QByteArray packet; packet.append(QByteArray::fromHex("0138ca7b769a491588f213fc00979ea8")); packet.append(QByteArray::fromHex("67361515612d4c078f3dbde6408ea041")); packet.append(QByteArray::fromHex("1a093c6cd7fd4ec59d51a6474e34f5a0")); packet.append(QByteArray::fromHex("b2ec8f167c6f451bbd79dc58497888b9")); packet.append(QByteArray::fromHex("178c2d9bdaa545bb8ddbf3bdbd53a10a")); packet.append(QByteArray::fromHex("0946134e4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613494c7f11d18222444553540000")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); return packet; } void servicesSetup::sendCapabilities(QTcpSocket *socket) { socket->write(get0204()); } QByteArray servicesSetup::getProtocolVersion(unsigned index, unsigned port) { QByteArray directInfo; directInfo.append(convertToByteArray((quint32)0x00000000)); directInfo.append(convertToByteArray((quint32)0x00000000)); directInfo.append(convertToByteArray((quint8)0x00)); switch(index) { case 0: directInfo.append(convertToByteArray((quint16)0x0009)); break; case 1: directInfo.append(convertToByteArray((quint16)0x0009)); break; case 2: directInfo.append(convertToByteArray((quint16)0x0009)); break; case 3: directInfo.append(convertToByteArray((quint16)0x0009)); break; case 4: directInfo.append(convertToByteArray((quint16)0x0009)); break; case 5: directInfo.append(convertToByteArray((quint16)0x000a)); break; case 6: directInfo.append(convertToByteArray((quint16)0x0008)); break; case 7: directInfo.append(convertToByteArray((quint16)0x0007)); break; case 8: directInfo.append(convertToByteArray((quint16)0x000b)); break; case 9: directInfo.append(convertToByteArray((quint16)0x000b)); break; default: directInfo.append(convertToByteArray((quint16)port)); } quint32 authcookie = ((quint32)qrand()) * QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); directInfo.append(convertToByteArray((quint32)authcookie)); quint16 webfrontport = ((quint32)qrand()) * QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); directInfo.append(convertToByteArray((quint16)webfrontport)); directInfo.append(convertToByteArray((quint32)0)); if ( index == 8 ) { directInfo.append(convertToByteArray((quint32)67584)); directInfo.append(convertToByteArray((quint32)0x02000000)); directInfo.append(convertToByteArray((quint32)0x000e0000)); directInfo.append(convertToByteArray((quint16)0x000f)); } else if ( index == 9 ) { directInfo.append(convertToByteArray((quint32)65536)); directInfo.append(convertToByteArray((quint32)0x23280000)); directInfo.append(convertToByteArray((quint32)0x000b0000)); directInfo.append(convertToByteArray((quint16)0x0000)); } else { directInfo.append(convertToByteArray((quint32)65536)); directInfo.append(convertToByteArray((quint32)0x00000000)); directInfo.append(convertToByteArray((quint32)0x00000000)); directInfo.append(convertToByteArray((quint16)0x0000)); } directInfo.append(convertToByteArray((quint16)0x0000)); return directInfo; } QByteArray servicesSetup::icq51Capab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613494c7f11d18222444553540000")); packet.append(QByteArray::fromHex("b2ec8f167c6f451bbd79dc58497888b9")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); packet.append(QByteArray::fromHex("e362c1e9121a4b94a6267a74de24270d")); packet.append(QByteArray::fromHex("178c2d9bdaa545bb8ddbf3bdbd53a10a")); packet.append(QByteArray::fromHex("97b12751243c4334ad22d6abf73f1492")); packet.append(QByteArray::fromHex("67361515612d4c078f3dbde6408ea041")); packet.append(QByteArray::fromHex("b99708b53a924202b069f1e757bb2e17")); packet.append(QByteArray::fromHex("1a093c6cd7fd4ec59d51a6474e34f5a0")); packet.append(QByteArray::fromHex("1a093c6cd7fd4ec59d51a6474e34f5a0")); packet.append(QByteArray::fromHex("0946134c4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613444c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); return packet; } QByteArray servicesSetup::icq5Capab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); packet.append(QByteArray::fromHex("e362c1e9121a4b94a6267a74de24270d")); packet.append(QByteArray::fromHex("094613444c7f11d18222444553540000")); packet.append(QByteArray::fromHex("178c2d9bdaa545bb8ddbf3bdbd53a10a")); packet.append(QByteArray::fromHex("97b12751243c4334ad22d6abf73f1492")); packet.append(QByteArray::fromHex("67361515612d4c078f3dbde6408ea041")); packet.append(QByteArray::fromHex("b99708b53a924202b069f1e757bb2e17")); packet.append(QByteArray::fromHex("1a093c6cd7fd4ec59d51a6474e34f5a0")); packet.append(QByteArray::fromHex("0946134c4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); return packet; } QByteArray servicesSetup::icq4Capab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); packet.append(QByteArray::fromHex("094613444c7f11d18222444553540000")); packet.append(QByteArray::fromHex("178c2d9bdaa545bb8ddbf3bdbd53a10a")); packet.append(QByteArray::fromHex("97b12751243c4334ad22d6abf73f1492")); packet.append(QByteArray::fromHex("1a093c6cd7fd4ec59d51a6474e34f5a0")); packet.append(QByteArray::fromHex("0946134c4c7f11d18222444553540000")); return packet; } QByteArray servicesSetup::icq2003bCapab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); packet.append(QByteArray::fromHex("094613444c7f11d18222444553540000")); packet.append(QByteArray::fromHex("97b12751243c4334ad22d6abf73f1492")); return packet; } QByteArray servicesSetup::icq2002Capab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613444c7f11d18222444553540000")); packet.append(QByteArray::fromHex("97b12751243c4334ad22d6abf73f1492")); return packet; } QByteArray servicesSetup::icqMacCapab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613444c7f11d18222444553540000")); packet.append(QByteArray::fromHex("dd16f20284e611d490db00104b9b4b7d")); return packet; } QByteArray servicesSetup::icqQip2005Capab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); packet.append(QByteArray::fromHex("0946134c4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); packet.append(QByteArray::fromHex("563fc8090b6f41514950203230303561")); return packet; } QByteArray servicesSetup::icqQipInfCapab() { QByteArray packet; packet.append(QByteArray::fromHex("0946134d4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); packet.append(QByteArray::fromHex("0946134c4c7f11d18222444553540000")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); packet.append(QByteArray::fromHex("7c737502c3be4f3ea69f015313431e1a")); packet.append(QByteArray::fromHex("1a093c6cd7fd4ec59d51a6474e34f5a0")); packet.append(QByteArray::fromHex("7c533ffa68004f21bcfbc7d2439aad31")); return packet; } QByteArray servicesSetup::getXstatusCap(int index) { switch(index) { case 0: icqMood = "icqmood23"; return QByteArray::fromHex("01d8d7eeac3b492aa58dd3d877e66b92"); case 1: icqMood = "icqmood1"; return QByteArray::fromHex("5a581ea1e580430ca06f612298b7e4c7"); case 2: icqMood = "icqmood2"; return QByteArray::fromHex("83c9b78e77e74378b2c5fb6cfcc35bec"); case 3: icqMood = "icqmood3"; return QByteArray::fromHex("e601e41c33734bd1bc06811d6c323d81"); case 4: icqMood = "icqmood4"; return QByteArray::fromHex("8c50dbae81ed4786acca16cc3213c7b7"); case 5: icqMood = "icqmood5"; return QByteArray::fromHex("3fb0bd36af3b4a609eefcf190f6a5a7f"); case 6: icqMood = "icqmood6"; return QByteArray::fromHex("f8e8d7b282c4414290f810c6ce0a89a6"); case 7: icqMood = "icqmood7"; return QByteArray::fromHex("80537de2a4674a76b3546dfd075f5ec6"); case 8: icqMood = "icqmood8"; return QByteArray::fromHex("f18ab52edc57491d99dc6444502457af"); case 9: icqMood = "icqmood9"; return QByteArray::fromHex("1b78ae31fa0b4d3893d1997eeeafb218"); case 10: icqMood = "icqmood10"; return QByteArray::fromHex("61bee0dd8bdd475d8dee5f4baacf19a7"); case 11: icqMood = "icqmood11"; return QByteArray::fromHex("488e14898aca4a0882aa77ce7a165208"); case 12: icqMood = "icqmood12"; return QByteArray::fromHex("107a9a1812324da4b6cd0879db780f09"); case 13: icqMood = "icqmood13"; return QByteArray::fromHex("6f4930984f7c4affa27634a03bceaea7"); case 14: icqMood = "icqmood14"; return QByteArray::fromHex("1292e5501b644f66b206b29af378e48d"); case 15: icqMood = "icqmood15"; return QByteArray::fromHex("d4a611d08f014ec09223c5b6bec6ccf0"); case 16: icqMood = "icqmood16"; return QByteArray::fromHex("609d52f8a29a49a6b2a02524c5e9d260"); case 17: // icqMood = "icqmood17"; icqMood.clear(); return QByteArray::fromHex("63627337a03f49ff80e5f709cde0a4ee"); case 18: icqMood = "icqmood17"; return QByteArray::fromHex("1f7a4071bf3b4e60bc324c5787b04cf1"); case 19: icqMood = "icqmood18"; // icqMood.clear(); return QByteArray::fromHex("785e8c4840d34c65886f04cf3f3f43df"); case 20: icqMood = "icqmood19"; return QByteArray::fromHex("a6ed557e6bf744d4a5d4d2e7d95ce81f"); case 21: icqMood = "icqmood20"; return QByteArray::fromHex("12d07e3ef885489e8e97a72a6551e58d"); case 22: icqMood = "icqmood21"; return QByteArray::fromHex("ba74db3e9e24434b87b62f6b8dfee50f"); case 23: icqMood = "icqmood22"; return QByteArray::fromHex("634f6bd8add24aa1aab9115bc26d05a1"); case 24: icqMood.clear(); return QByteArray::fromHex("2ce0e4e57c6443709c3a7a1ce878a7dc"); case 25: icqMood.clear(); return QByteArray::fromHex("101117c9a3b040f981ac49e159fbd5d4"); case 26: icqMood.clear(); return QByteArray::fromHex("160c60bbdd4443f39140050f00e6c009"); case 27: icqMood.clear(); return QByteArray::fromHex("6443c6af22604517b58cd7df8e290352"); case 28: icqMood.clear(); return QByteArray::fromHex("16f5b76fa9d240358cc5c084703c98fa"); case 29: icqMood.clear(); return QByteArray::fromHex("631436ff3f8a40d0a5cb7b66e051b364"); case 30: icqMood.clear(); return QByteArray::fromHex("b70867f538254327a1ffcf4cc1939797"); case 31: icqMood.clear(); return QByteArray::fromHex("ddcf0ea971954048a9c6413206d6f280"); case 32: icqMood.clear(); return QByteArray::fromHex("d4e2b0ba334e4fa598d0117dbf4d3cc8"); case 33: icqMood.clear(); return QByteArray::fromHex("0072d9084ad143dd91996f026966026f"); case 34: icqMood = "icqmood33"; return QByteArray::fromHex("e601e41c33734bd1bc06811d6c323d82"); case 35: icqMood = "icqmood32"; return QByteArray::fromHex("3FB0BD36AF3B4A609EEFCF190F6A5A7E"); case 36: icqMood = "icqmood60"; return QByteArray(); case 37: icqMood = "icqmood61"; return QByteArray(); case 38: icqMood = "icqmood62"; return QByteArray(); case 39: icqMood = "icqmood63"; return QByteArray(); case 40: icqMood = "icqmood64"; return QByteArray(); case 41: icqMood = "icqmood65"; return QByteArray(); } return QByteArray(); } QByteArray servicesSetup::qutimCapab() { QByteArray packet; packet.append(QByteArray::fromHex("69716d7561746769656d000000000000")); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); packet.append(QByteArray::fromHex("563fc8090b6f41bd9f79422609dfa2f3")); QByteArray clientId; clientId.append("qutim"); #if defined(Q_OS_WINCE) clientId.append(convertToByteArray((quint8)'c')); #elif defined(Q_OS_WIN32) clientId.append(convertToByteArray((quint8)'w')); #elif defined(Q_OS_LINUX) clientId.append(convertToByteArray((quint8)'l')); #elif defined(Q_OS_MAC) clientId.append(convertToByteArray((quint8)'m')); #elif defined(Q_OS_SYMBIAN) clientId.append(convertToByteArray((quint8)'s')); #elif defined(Q_OS_UNIX) clientId.append(convertToByteArray((quint8)'u')); #else clientId.append(convertToByteArray((quint8)'\0')); #endif quint8 major,minor, secminor; quint16 svn; //off version IcqPluginSystem::instance().getQutimVersion(major, minor, secminor, svn); clientId.append(convertToByteArray((quint8)major)); clientId.append(convertToByteArray((quint8)minor)); clientId.append(convertToByteArray((quint8)secminor)); //svn version clientId.append(convertToByteArray((quint16)svn)); #if defined(Q_OS_MAC) long minor_version, major_version, bug_fix; Gestalt(gestaltSystemVersionMajor, &major_version); Gestalt(gestaltSystemVersionMinor, &minor_version); Gestalt(gestaltSystemVersionBugFix, &bug_fix); quint32 id = (quint8(major_version) << 24) | (quint8(minor_version) << 16) | (quint8(bug_fix) << 8); clientId.append(convertToByteArray((quint32)id)); clientId.append(QByteArray::fromHex("00")); #elif defined(Q_OS_WIN32) OSVERSIONINFOEX osvi; BOOL bOsVersionInfoEx; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( (bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) { quint8 special_info = 0; if(osvi.wSuiteMask & 0x00000200) // VER_SUITE_PERSONAL special_info |= 0x01; if(osvi.wSuiteMask & 0x00008000) // VER_SUITE_WH_SERVER special_info |= 0x02; quint32 id = (quint8(osvi.dwMajorVersion) << 24) | (quint8(osvi.dwMinorVersion) << 16) | (quint8(osvi.wProductType) << 8) | special_info; clientId.append(convertToByteArray((quint32)id)); clientId.append(QByteArray::fromHex("00")); } else clientId.append(QByteArray::fromHex("0000000000")); #else clientId.append(QByteArray::fromHex("0000000000")); #endif packet.append(clientId); // packet.append(QByteArray::fromHex("717574696d302e310000000000000000")); return packet; } void servicesSetup::sendXStatusAsAvailableMessage(QTcpSocket *socket) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); snac snac011e; snac011e.setFamily(0x0001); snac011e.setSubType(0x001e); snac011e.setReqId(snac011eseq); tlv availMess; availMess.setType(0x001d); QByteArray mess; if ( icqMood.isEmpty()) { mess.append(QByteArray::fromHex("00020000000e0000")); } else { QByteArray cap = settings.value("xstatus/caption", "").toString().toUtf8().left(40); QByteArray msg = settings.value("xstatus/message", "").toString().toUtf8().left(200); quint16 length = cap.length() + msg.length() + 1; mess.append(QByteArray::fromHex("000204")); mess.append(convertToByteArray((quint8)(length +4))); mess.append(convertToByteArray((quint16)length)); mess.append(cap); mess.append(convertToByteArray((quint8)0x20)); mess.append(msg); mess.append(QByteArray::fromHex("0000000e")); mess.append(convertToByteArray((quint16)icqMood.length())); mess.append(icqMood); } availMess.setData(mess); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flap011eseq)); packet.append(convertToByteArray((quint16)(10 + availMess.getLength()))); packet.append(snac011e.getData()); packet.append(availMess.getData()); socket->write(packet); } qutim-0.2.0/plugins/icq/readawaydialog.ui0000644000175000017500000000573611273054317022103 0ustar euroelessareuroelessar readAwayDialogClass 0 0 297 222 readAwayDialog :/icons/crystal_project/readaway.png:/icons/crystal_project/readaway.png 4 true <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> Qt::Horizontal 40 20 Close :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png Return Qt::Horizontal 40 20 closeButton clicked() readAwayDialogClass close() 176 199 193 198 qutim-0.2.0/plugins/icq/buddypicture.cpp0000644000175000017500000002554111273054317021772 0ustar euroelessareuroelessar/* buddyPicture Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include #include "buffer.h" #include "flap.h" #include "snac.h" #include "tlv.h" #include "buddypicture.h" buddyPicture::buddyPicture(const QString &profile_name, const QString &mine_uin, QObject *parent) : QObject(parent) , m_profile_name(profile_name) , m_mine_uin(mine_uin) { readyToReadFlap = true; flapSeqNum = rand() % 0x8000; snacSeqNum = 0x00000000; connectedToServ = false; canSendReqForAvatars = false; alreadySentCap = false; refNum = 1; tcpSocket = new QTcpSocket(this); connect ( tcpSocket, SIGNAL(readyRead()), this, SLOT(readDataFromSocket())); connect ( tcpSocket, SIGNAL(disconnected()), this, SLOT(socketDisconnected())); connect ( tcpSocket, SIGNAL(connected()), this, SLOT(socketConnected())); buffer = new icqBuffer(this); buffer->open(QIODevice::ReadWrite); } buddyPicture::~buddyPicture() { } void buddyPicture::socketDisconnected() { connectedToServ = false; canSendReqForAvatars = false; alreadySentCap = false; buffer->readAll(); } void buddyPicture::sendHash(const QString &uin, const QByteArray &hash) { if ( tcpSocket->state() == QAbstractSocket::ConnectedState ) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeqNum)); incFlapSeq(); quint16 length = 32 + uin.length(); packet.append(convertToByteArray((quint16)length)); snac snac1006; snac1006.setFamily(0x0010); snac1006.setSubType(0x0006); snac1006.setReqId(snacSeqNum); incSnacSeq(); packet.append(snac1006.getData()); packet.append(convertToByteArray((quint8)uin.length())); packet.append(uin); packet.append(convertToByteArray((quint8)0x01)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0110)); packet.append(hash); tcpSocket->write(packet); } } QByteArray buddyPicture::convertToByteArray(const quint8 &d) { QByteArray packet; packet[0] = d; return packet; } QByteArray buddyPicture::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray buddyPicture::convertToByteArray(const quint32 &d) { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } void buddyPicture::incFlapSeq() { if ( flapSeqNum != 0x8000 ) flapSeqNum++; else flapSeqNum = 0x0000; } void buddyPicture::incSnacSeq() { if ( snacSeqNum != 0xffffffff ) snacSeqNum++; else snacSeqNum = 0x00000000; } void buddyPicture::readDataFromSocket() { buffer->write(tcpSocket->readAll()); if ( readyToReadFlap ) { flapPacket flap; if ( !flap.readFromSocket( buffer ) ) { return; } channel = flap.getChannel(); flapLength = flap.getLength(); } if ( buffer->bytesAvailable() < flapLength ) { readyToReadFlap = false; return; } readyToReadFlap = true; if ( channel == 0x01) { // qDebug()<<"hi"; // alreadySentCap = true; buffer->read(flapLength); // sendCapab(); } if ( channel == 0x02 ) { readSnac(flapLength); } if ( channel == 0x03 ) buffer->read(flapLength); if ( channel == 0x04) buffer->read(flapLength); if ( channel >= 0x05 ) buffer->read(flapLength); if (buffer->bytesAvailable()) readDataFromSocket(); } void buddyPicture::readSnac(quint16 length) { snac snacPacket; snacPacket.readData(buffer); length -= 10; switch ( snacPacket.getFamily()) { case 0x0001: switch(snacPacket.getSubType()) { case 0x0003: buffer->read(length); length = 0; if ( !alreadySentCap) sendCapab(); break; case 0x0007: buffer->read(length); length = 0; sendRateInfoClientReady(); break; case 0x0018: buffer->read(length); length = 0; sendInfoReq(); break; default: ; } break; case 0x0010: switch(snacPacket.getSubType()) { case 0x0007: saveAvatar(length); length = 0; break; default: ; } break; default: ; } if (length) buffer->read(length); if ( buffer->bytesAvailable() ) { readDataFromSocket(); } } void buddyPicture::sendCapab() { if ( tcpSocket->state() == QAbstractSocket::ConnectedState ) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeqNum)); incFlapSeq(); packet.append(convertToByteArray((quint16)18)); snac snac0117; snac0117.setFamily(0x0001); snac0117.setSubType(0x0017); snac0117.setReqId(snacSeqNum); incSnacSeq(); packet.append(snac0117.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0003)); packet.append(convertToByteArray((quint16)0x0010)); packet.append(convertToByteArray((quint16)0x0001)); tcpSocket->write(packet); } } void buddyPicture::sendInfoReq() { if ( tcpSocket->state() == QAbstractSocket::ConnectedState ) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeqNum)); incFlapSeq(); packet.append(convertToByteArray((quint16)10)); snac snac0106; snac0106.setFamily(0x0001); snac0106.setSubType(0x0006); snac0106.setReqId(snacSeqNum); packet.append(snac0106.getData()); incSnacSeq(); tcpSocket->write(packet); } } void buddyPicture::sendRateInfoClientReady() { if ( tcpSocket->state() == QAbstractSocket::ConnectedState ) { connectedToServ = true; QByteArray fullPacket; QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeqNum)); incFlapSeq(); packet.append(convertToByteArray((quint16)20)); snac snac0108; snac0108.setFamily(0x0001); snac0108.setSubType(0x0008); snac0108.setReqId(snacSeqNum); packet.append(snac0108.getData()); incSnacSeq(); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0002)); packet.append(convertToByteArray((quint16)0x0003)); packet.append(convertToByteArray((quint16)0x0004)); packet.append(convertToByteArray((quint16)0x0005)); fullPacket.append(packet); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)flapSeqNum)); incFlapSeq(); packet2.append(convertToByteArray((quint16)26)); snac snac0102; snac0102.setFamily(0x0001); snac0102.setSubType(0x0002); snac0102.setReqId(snacSeqNum); packet2.append(snac0102.getData()); incSnacSeq(); packet2.append(convertToByteArray((quint16)0x0001)); packet2.append(convertToByteArray((quint16)0x0003)); packet2.append(convertToByteArray((quint16)0x0110)); packet2.append(convertToByteArray((quint16)0x047b)); packet2.append(convertToByteArray((quint16)0x0010)); packet2.append(convertToByteArray((quint16)0x0001)); packet2.append(convertToByteArray((quint16)0x0110)); packet2.append(convertToByteArray((quint16)0x047b)); fullPacket.append(packet2); tcpSocket->write(fullPacket); canSendReqForAvatars = true; emit emptyAvatarList(); } } void buddyPicture::connectToServ(const QString &addr, const quint16 &port, QByteArray cookie, const QNetworkProxy &proxy) { QHostAddress hostAddr = QHostAddress(addr); if ( !hostAddr.isNull() ) { connectedToServ = true; tcpSocket->setProxy(proxy); tcpSocket->connectToHost(hostAddr, port); SSTcookie = cookie; } } void buddyPicture::disconnectFromSST() { tcpSocket->disconnectFromHost(); connectedToServ = false; canSendReqForAvatars = false; alreadySentCap = false; } quint8 buddyPicture::convertToInt8(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } quint16 buddyPicture::convertToInt16(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } quint32 buddyPicture::convertToInt32(const QByteArray &array) { bool ok; return array.toHex().toULong(&ok,16); } void buddyPicture::saveAvatar(quint16 length) { quint8 uinLength = convertToInt8(buffer->read(1)); length -= 1; QString uin = QString::fromUtf8(buffer->read(uinLength)); length -= uinLength; buffer->read(4); length -= 4; QByteArray hash = buffer->read(16); length -= 16; buffer->read(21); length -= 21; quint16 iconLength = convertToInt16(buffer->read(2)); length -= 2; if ( iconLength ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+m_mine_uin, "contactlist"); settings.beginGroup(uin); settings.setValue("iconhash", hash.toHex()); settings.endGroup(); QString iconPath = settings.fileName().section('/', 0, -3) + "/icqicons"; QDir iconDir(iconPath); if ( !iconDir.exists() ) iconDir.mkpath(iconPath); QFile iconFile(iconPath + "/" + hash.toHex()); if ( iconFile.open(QIODevice::WriteOnly) ) { iconFile.write(buffer->read(iconLength)); } emit updateAvatar(uin, hash); } length -= iconLength; if ( length ) buffer->read(length); } void buddyPicture::socketConnected() { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x01; packet.append(convertToByteArray((quint16)flapSeqNum)); incFlapSeq(); tlv tlvCookie; tlvCookie.setType(0x0006); tlvCookie.setData(SSTcookie); packet.append(convertToByteArray((quint16)( tlvCookie.getLength() + 4))); packet.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(tlvCookie.getData()); tcpSocket->write(packet); } void buddyPicture::uploadIcon(const QString &iconPath) { if ( QFile::exists(iconPath)) { QFile iconFile(iconPath); if ( iconFile.open(QIODevice::ReadOnly)) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeqNum)); incFlapSeq(); packet.append(convertToByteArray((quint16)(14 + iconFile.size()))); snac snac1002; snac1002.setFamily(0x0010); snac1002.setSubType(0x0002); snac1002.setReqId(snacSeqNum); packet.append(snac1002.getData()); incSnacSeq(); packet.append(convertToByteArray((quint16)0x0001)); refNum++; packet.append(convertToByteArray((quint16)iconFile.size())); packet.append(iconFile.readAll()); tcpSocket->write(packet); } } } qutim-0.2.0/plugins/icq/customstatusdialog.ui0000644000175000017500000000631211273054317023053 0ustar euroelessareuroelessar customStatusDialogClass 0 0 251 309 Custom status :/icons/crystal_project/statuses.png:/icons/crystal_project/statuses.png 4 30 16777215 60 Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOff false QAbstractItemView::NoDragDrop QListView::Static 5 QListView::IconMode Choose :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Cancel :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png Set birthday/happy flag cancelButton clicked() customStatusDialogClass reject() 170 260 194 260 qutim-0.2.0/plugins/icq/requestauthdialog.cpp0000644000175000017500000000216511273054317023016 0ustar euroelessareuroelessar/* requestAuthDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "requestauthdialog.h" requestAuthDialog::requestAuthDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); move(desktopCenter()); setFixedSize(size()); } requestAuthDialog::~requestAuthDialog() { } QPoint requestAuthDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } qutim-0.2.0/plugins/icq/filetransfer.h0000644000175000017500000000546611273054317021424 0ustar euroelessareuroelessar/* FileTransfer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 FILETRANSFER_H #define FILETRANSFER_H #include #include #include "tlv.h" #include "filetransferwindow.h" #include "filerequestwindow.h" class FileTransfer : public QObject { Q_OBJECT public: FileTransfer(const QString &, QObject *parent = 0); ~FileTransfer(); QAction *getSendFileAction(); void removeAll(); void sendFileTriggered(const QString &, const QStringList &); void contactCanceled(const QString &, const QByteArray &); void contactAccept(const QString &, const QByteArray &); void requestToRedirect(const QString &, const QByteArray &, quint16, quint32, quint16, const QString &, const QString &, quint32, quint32); void disconnectFromAll(); QNetworkProxy connectionProxy; void setListenPort(quint16 port) { m_listen_port = port; } private slots: void getRedirectToProxyData(const QByteArray &, const QString &, quint16, quint32); void deleteFileWin(QObject *); void deleteReqWin(QObject *); void cancelSending(QByteArray &, const QString &); void sendingToPeerRequest(const QByteArray &, const QString &, const QStringList &); void sendAcceptMessage(const QByteArray &, const QString &); void fileAccepted(const QByteArray &, const QString &, const QString &,quint32, quint16, quint32); void sendRedirectToMineServer(const QByteArray&, const QString &, quint16); signals: void sendFile(QByteArray &, QByteArray &, QByteArray &); void emitCancelSending(QByteArray &); void sendRedirectToProxy(const QByteArray &); void emitAcceptSending(const QByteArray &); private: QTreeWidgetItem *settingsTreeItem; QAction *sendFileAction; QByteArray convertToByteArray(const quint8 &); QByteArray convertToByteArray(const quint16 &); QByteArray convertToLEByteArray(const quint16 &); QByteArray convertToByteArray(const quint32 &); quint16 byteArrayToLEInt16(const QByteArray &); quint32 byteArrayToLEInt32(const QByteArray &); quint8 convertToInt8(const QByteArray &); QHash fileSendWindowList; QString sendToUin; QString ownerUin; QHash requestList; quint16 m_listen_port; }; #endif // FILETRANSFER_H qutim-0.2.0/plugins/icq/icqmessage.h0000644000175000017500000000562111273054317021052 0ustar euroelessareuroelessar/* icqMessage Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ICQMESSAGE_H_ #define ICQMESSAGE_H_ #include #include class QTcpSocket; class icqBuffer; class tlv; class messageFormat { public: QString from; QString fromUin; QString message; QDateTime date; quint64 position; }; class icqMessage { public: icqMessage(const QString &); ~icqMessage(); void readData(icqBuffer *,quint16); QString from; QByteArray byteArrayMsg; QString msg; void sendMessage(QTcpSocket *, const messageFormat &, quint16, quint32, bool); void sendMessageChannel2(QTcpSocket *, const messageFormat &, quint16, quint32, bool); QTextCodec *codec; quint16 messageType; QByteArray msgCookie; QByteArray downCounter1; QByteArray downCounter2; void sendAutoreply(QTcpSocket *, const QString &message, quint16, quint32); void requestAutoreply(QTcpSocket *, const QString &, quint16, quint32); void requestXStatus(QTcpSocket *, const QString &, const QString &mine_uin, quint16, quint32); void sendXstatusReply(QTcpSocket *, const QString &, const QString &profile_name, quint16, quint32); void getAwayMessage(icqBuffer *, quint16); void sendMessageRecieved(QTcpSocket *socket,const QString &uin, const QByteArray &cookie,quint16, quint32); quint8 awayType; quint8 msgType; quint16 reason; bool fileAnswer; quint16 connectToPeer; quint32 peerIP; quint16 peerPort; QString fileName; quint32 fileSize; quint32 aolProxyIP; void sendImage(QTcpSocket *, const QString &, const QByteArray &image_raw, quint16, quint32); bool isValidUtf8(const QByteArray &array); private: quint16 channel; QByteArray msgIdCookie; QByteArray serverRelaying(); QString unicodeToUtf8( const QByteArray &); QByteArray utf8toUnicode( const QString &); QByteArray utf8toUnicodeLE( const QString &); quint16 readPlainText(icqBuffer *); quint16 readRendezvousData( tlv ); QByteArray convertToByteArray(const quint8 &); QByteArray convertToByteArray(const quint16 &); QByteArray convertLEToByteArray(const quint16 &); QByteArray convertToByteArray(const quint32 &); quint8 byteArrayToInt8(const QByteArray &); quint16 byteArrayToInt16(const QByteArray &); quint32 byteArrayToInt32(const QByteArray &); quint16 byteArrayToLEInt16(const QByteArray &); }; #endif /*ICQMESSAGE_H_*/ qutim-0.2.0/plugins/icq/contactlist.h0000644000175000017500000004023511273054317021260 0ustar euroelessareuroelessar/* contactListTree Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 CONTACTLIST_H_ #define CONTACTLIST_H_ //#include //#include //#include //#include #include "statusiconsclass.h" #include "clientidentify.h" #include "modifyitem.h" #include "quticqglobals.h" #include "icqpluginsystem.h" #include "treegroupitem.h" //enum CLWindowStyle //{ // CLRegularWindow = 0, // CLBorderLessWindow //}; // Qt standard classes class QTcpSocket; class QTreeWidget; class QTreeWidgetItem; class QTextCodec; class QLabel; class QWidgetAction; class QAction; class QMenu; class QDateTime; // qutIM own classes class icqBuffer; class treeBuddyItem; //class treeGroupItem; class messageFormat; class chatWindow; class contactSeparator; class FileTransfer; class metaInformation; class buddyPicture; class searchUser; class userInformation; class multipleSending; class privacyListWindow; class readAwayDialog; class noteWidget; struct listFont { QString fontFamily; int fontSize; QColor fontColor; }; struct itemFromList { quint16 groupId; quint16 itemId; }; class contactListTree : public QObject { Q_OBJECT public: contactListTree(QTcpSocket *, icqBuffer *, const QString &, const QString &profile_name, quint16 &, quint32 &,quint16 &, QObject *parent = 0); ~contactListTree(); void removeContactList(); void readMessageStack(); void doubleClickedBuddy(treeBuddyItem *); void showItemContextMenu(const QList &action_list, const QString &item_name, int item_type, const QPoint &point_menu); void readMessageFrom(treeBuddyItem *); inline QHash getBuddyList() const { return buddyList; } QHash groupList; void updateSorting(); void goingOnline(bool); statusIconClass *statusIconObject; void changePrivacy(quint8); // accountStatus currentStatus; void appExiting(); QString accountNickname; void setAvatarDisabled(bool); void initializaMenus(QMenu *); void showGroupMenu(treeGroupItem *, const QPoint &); void showBuddyMenu(const QList &action_list, treeBuddyItem *, const QPoint &); void hideRoot(bool); void offlineHideButtonClicked(bool); QByteArray convertPassToCodePage(const QString &); void itemActivated(const QString &uin); // pluginSystem *plugins; void sendMessageTo(const QString &contact_uin, const QString &message, int message_icon_position); QStringList getAdditionalInfoAboutContact(const QString &item_name, int item_type ) const; void sendImageTo(const QString &contact_uin, const QByteArray &image_raw); void sendFileTo(const QString &contact_uin, const QStringList &file_names); void sendTypingNotifications(const QString &, quint16); FileTransfer *fileTransferObject; void moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item); void deleteItemSignalFromCL(const QString &item_name, int item_type); const QString getItemToolTip(const QString &contact_name); void chatWindowOpened(const QString &contact_uin, bool new_wind = false); signals: void userMessage(const QString &, const QString &, const QString&, userMessageType, bool); void getNewMessage(); void readAllMessages(); void incFlapSeq(); void incSnacSeq(); void incMetaSeq(); void sendGroupList(QHash); void buddyChangeStatus(treeBuddyItem *,bool); void updateOnlineList(); void reupdateList(); void updateStatus(); void restartAutoAway(bool, quint32); void updateStatusMenu(bool); void sendSystemMessage(const QString &); void soundSettingsChanged(); void playSoundEvent(const SoundEvent::Events &, const accountStatus &); public slots: void onUpdateTranslation(); void onReloadGeneralSettings(); void onStatusChanged(accountStatus status); void contactSettingsChanged(); void onSystemMessage() { emit playSoundEvent(SoundEvent::SystemEvent, currentStatus); }; void openInfoWindow(const QString &, const QString &n = 0, const QString & f = 0, const QString & l = 0); void clearPrivacyLists(); private slots: void createContact(bool); void oncomingBuddy(const QString &, quint16); void offlineBuddy(const QString &, quint16); void getMessage(quint16); void getOfflineMessage(quint16); void setMessageIconToContact(); void deleteChatWindow(QObject *); void deleteHistoryWindow(QObject *); void sendMessage(const messageFormat &); void msgSettingsChanged(); void statusSettingsChanged(); void activateWindow(const QString &); void readMetaData(quint16, bool notalone); void getTypingNotification(quint16); void clearNotifList() { notifList.clear(); } void showHistory(const QString &); void showServiceHistory(); void disableJustStarted() { justStarted = false; } void startChatWith(const QString &); void askForAvatars(const QByteArray &, const QString &); void readSSTserver(quint16); void emptyAvatarList(); void updateAvatar(const QString &, QByteArray); void findAddUser(); void findUserWindowClosed(QObject *); void searchForUsers(int); void openChatWindowWithFounded(const QString &,const QString &); void infoUserWindowClosed(QObject *); void askForFullUserInfo(const QString &); void checkStatusFor(const QString &); void getStatusCheck(quint16); void addUserToList(const QString &, const QString &,bool); void getModifyItemFromServer(quint16); void youWereAdded(quint16); void sendMultipleWindow(); void deleteSendMultipleWindow(QObject *); void openPrivacyWindow(); void deletePrivacyWindow(QObject *); void deleteFromPrivacyList(const QString &, int); void openSelfInfo(); void saveOwnerInfo(bool, const QString &); void getUploadIconData(quint16); void openChangePasswordDialog(); void createNewGroup(); void renameSelectedGroup(); void deleteSelectedGroup(); void sendMessageActionTriggered(); void userInformationActionTriggered(); void statusCheckActionTriggered(); void messageHistoryActionTriggered(); void readAwayActionTriggered(); void deleteAwayWindow(QObject *); void getAwayMessage(quint16); void renameContactActionTriggered(); void deleteContactActionTriggered(); void moveContactActionTriggered(); void addToVisibleActionTriggered(); void addToInvisibleActionTriggered(); void addToIgnoreActionTriggered(); void deleteFromVisibleActionTriggered(); void deleteFromInvisibleActionTriggered(); void deleteFromIgnoreActionTriggered(); void requestAuthorizationActionTriggered(); void copyUINActionTriggered(); void getAuthorizationRequest(quint16); void authorizationAcceptedAnswer(quint16); void addToContactListActionTriggered(); void allowToAddMeTriggered(); void removeMyselfTriggered(); void sendFile(QByteArray &, QByteArray &, QByteArray &); void sendFileActionTriggered(); void sendCancelSending(QByteArray &); void redirectToProxy(const QByteArray &); void sendAcceptMessage(const QByteArray &); void sendImage(const QString &,const QString &); void readXstatusTriggered(); void sendAuthReqAnswer(bool, const QString &); void askForXstatusTimerTick(); void sendFileFromWindow(const QString &); void editNoteActionTriggered(); void deleteNoteWindow(QObject *); void getChangeFontSignal(const QFont &, const QColor &, const QColor &); void getMessageAck(quint16); private: QString getCurrentAwayMessage() const; void initializeWindow(chatWindow *); void createContactList(); void createSoundEvents(); quint16 byteArrayToInt16(const QByteArray &); quint16 byteArrayToLEInt16(const QByteArray &); quint32 byteArrayToInt32(const QByteArray &); QString convertToStringStatus(contactStatus); void createNil(); void loadSettings(); QByteArray convertToByteArray(const quint16 &); // QHash groupList; QHash buddyList; QHash messageList; QHash chatWindowList; QTcpSocket *tcpSocket; icqBuffer *socket; QString icqUin; // QTreeWidgetItem *rootItem; bool newMessages; quint16 *flapSeq; quint32 *snacSeq; quint16 *metaSeq; QTextCodec *codec; bool isMergeAccounts; QStringList getGroups; QStringList getBuddies; bool contactListChanged; bool iAmOnline; bool showGroups; contactSeparator *onlineList; contactSeparator *offlineList; void createOnOffGroups(); void removeGroups(); void updateNil(); void prepareForMerge(); void showHideGroups(); void hideEmptyGroups(bool); void prepareForShowGroups(); bool hideEmpty; bool expandRoot; bool showOffline; void showOfflineUsers(); bool clearNil; void clearNilUsers(); bool dontUnderlineNotAutho; void updateBuddyListFlags(); bool hideBirth; bool customAccount; bool customGroup; bool customOnline; bool customOffline; listFont grpFont; listFont onlFont; listFont offFont; void updateGroupCustomFont(); void updateContactsCustomFont(); bool tabMode; void updateChatBuddyStatus(const QString &, const QIcon &); bool showNames; quint8 timestamp; bool sendOnEnter; bool closeOnSend; bool dontShowEvents; bool openNew; QString codepage; void requestUinInformation(const QString &); QHash metaInfoRequestList; void readShortInfo(const metaInformation &, quint16); bool sendTyping; QStringList notifList; bool webAware; bool autoAway; quint32 awayMin; void initializeBuddy(treeBuddyItem *); quint16 pdInfoID; quint16 pdInfoGroupId; bool waitForMineInfo; int mineMetaSeq; bool saveHistory; bool saveNilHistory; bool saveServiceHistory; bool showRecent; bool onlineNotify; bool offlineNotify; bool readAwayNotify; quint8 recentCount; void loadUnreadedMessages(); void setServiceMessageToWin(const QString&, const QString &); bool hideSeparators; void setHideSeparators(bool); bool disableTrayBlinking; bool disableButtonBlinking; bool signOnNot; bool signOffNot; bool typingNot; bool changeStatusNot; bool awayNot; bool justStarted; QHash avatartList; bool checkBuddyPictureHash(const QByteArray &); buddyPicture *buddyConnection; QString avatarAddress; quint16 avatarPort; void sendReqForRedirect(); QByteArray avatarCookie; bool getOnlyFromContactList; bool notifyAboutBlocked; void notifyBlockedMessage(const QString &, const QString &); void saveBlocked(const QString&, const QString&, const QDateTime &); bool blockAuth; bool checkMessageForUrl(const QString &); bool blockUrlMessage; bool enableAntiSpamBot; bool turnOnAntiSpamBot(const QString &, const QString &, const QDateTime &); bool dontAnswerBotIfInvis; QString question; QString answer; QString messageAfterAnswer; QStringList blockedBotList; bool disableAvatars; QAction *serviceMessages; QAction *findUser; QAction *sendMultiple; QAction *privacyList; QAction *selfInfo; QAction *changePassword; searchUser *searchWin; bool findUserWindowOpen; void addSearchResult(bool, bool, const QString &, const QString &, const QString &, const QString &, const QString &, const quint8 &, const quint16 &, const quint8&, const quint16 &); QHash infoWindowList; QHash fullInfoRequests; void readBasicUserInfo(const metaInformation &, quint16); void readMoreUserInfo(const metaInformation &, quint16); void readWorkUserInfo(const metaInformation &, quint16); void readInterestsUserInfo(const metaInformation &, quint16); void readAboutUserInfo(const metaInformation &, quint16); void fullIndoEnd(quint16,bool); quint8 convertToInt8(const QByteArray &); QList idBuddyList; void sendUserAddReq(const QString &, QString , bool, const QString &); void addModifiedBuddyToGroup(quint16, quint16, const QString &, bool, const QString &); QList modifyReqList; QString iconPath; bool multipleSendingOpen; multipleSending *multipleSendingWin; bool privacyListWindowOpen; privacyListWindow *privacyWindow; QStringList visibleList; QStringList invisibleList; QStringList ignoreList; QHash ignoreObjectList; QHash visibleObjectList; QHash invisibleObjectList; void checkForOwnIcon(QByteArray); bool waitForIconUpload; QString ownIconPath; void uploadIcon(); itemFromList iconObject; void removeIconHash(); void createContactListActions(); QLabel *menuLabel; QWidgetAction *menuTitle; QAction *createGroup; QAction *renameGroup; QAction *deleteGroup; QAction *sendMessageAction; QAction *userInformationAction; QAction *editNoteAction; QAction *statusCheckAction; QAction *messageHistoryAction; QAction *readAwayAction; treeGroupItem *currentContextGroup; QMenu *currentContextMenu; void addNewGroupToRoot(const QString &, quint16); void renameGroupToName(const QString &, quint16); void deleteSelectedGroup(quint16); treeBuddyItem *currentContextBuddy; QHash awayMessageList; QAction *renameContactAction; QAction *deleteContactAction; QAction *moveContactAction; void renameContact(const QString &, const QString &); void removeContact(const QString &); bool movingBuddy; QAction *addToVisibleAction; QAction *addToInvisibleAction; QAction *addToIgnoreAction; QAction *deleteFromVisibleAction; QAction *deleteFromInvisibleAction; QAction *deleteFromIgnoreAction; QAction *requestAuthorizationAction; void openAuthReqFromBuddy(treeBuddyItem *); QAction *addToContactListAction; QAction *allowToAddMe; QAction *removeMyself; QAction *copyUINAction; clientIdentify identifyContactClient; bool avatarModified; QString emoticonXMLPath; QAction *readXstatus; bool showXStatuses; bool showXstatusesinToolTips; QString addXstatusMessage(const QString &,QByteArray &); QString findTitle(QString ); QString findMessage(QString ); QString xTraAway(QString); QList xStatusTickList; bool letMeAskYouAboutXstatusPlease; bool lightChatView; bool dontShowIncomingMessagesInTrayEvents; QHash noteWidgetsList; quint32 allGroupCount; quint32 allContactCount; quint32 allContactTmpCount; accountStatus currentStatus; QHash messageCursorPositions; QString m_profile_name; QString account_name; IcqPluginSystem &m_icq_plugin_system; void addGroupToCL(quint16 id, const QString &); void renameGroupInCL(const QString&, quint16 new_id); void addContactToCL(quint16 group_id, const QString &contact_uin , const QString &contact_name); void renameContactInCL(quint16 group_id, const QString &, const QString &); void moveContactFromGroupToGroup(quint16 old_group_id, quint16 new_roup_id, const QString &contact_uin); void removeGroupFromCl(quint16 group_id); void removeContactFromCl(quint16 group_id, const QString&contact_uin); void setPrivacyIconsToContacts(); void addMessageFromContact(const QString &contact_uin, quint16 group_id, const QString &message , const QDateTime &message_date = QDateTime::currentDateTime()); void addServiceMessage(const QString &contact_uin, quint16 group_id, const QString &message); void addImage(const QString &contact_uin, quint16 group_id, const QByteArray &image_raw); void contactTyping(const QString &contact_uin, quint16 group_id, bool typing); void messageDelievered(const QString &contact_uin, quint16 group_id, int position); bool checkMessageForValidation(const QString &contact_uin, const QString &message, int message_type); bool m_notify_about_reading_status; bool m_show_xstatus_icon; bool m_show_birthday_icon; bool m_show_auth_icon; bool m_show_vis_icon; bool m_show_invis_icon; bool m_show_ignore_icon; bool m_show_xstatus_text; void notifyAboutBirthday(const QString &uin, quint16 group_id); void createChat(const QString &uin, quint16 groupd_id); void sendMessageRecieved(const QString &uin, const QByteArray &msg_cookie); }; #endif /*CONTACTLIST_H_*/ qutim-0.2.0/plugins/icq/modifyitem.h0000644000175000017500000000171411273054317021076 0ustar euroelessareuroelessar/* modifyObject Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 MODIFYITEM_H_ #define MODIFYITEM_H_ //#include #include struct modifyObject { quint16 itemId; quint16 groupId; quint16 itemType; quint8 operation; QString buddyName; QString buddyUin; bool authReq; }; #endif /*MODIFYITEM_H_*/ qutim-0.2.0/plugins/icq/icqaccount.h0000644000175000017500000001345011273054317021061 0ustar euroelessareuroelessar/* icqAccount Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ICQACCOUNT_H #define ICQACCOUNT_H #include #include #include #include #include "oscarprotocol.h" #include "quticqglobals.h" #include "icqpluginsystem.h" #include "accountbutton.h" //#include "soundevents.h" #include "accounteditdialog.h" // Qt stndard classes class QSystemTrayIcon; class QGridLayout; class QMenu; class QAction; class QTreeWidget; class QTreeWidgetItem; class QStackedWidget; class QSystemTrayIcon; class QActionGroup; // qutIM own classes class accountButton; class icqSettings; class networkSettings; class statusSettings; class oscarProtocol; class statusDialog; class customStatusDialog; class SoundEvents; class icqAccount : public QObject { Q_OBJECT public: icqAccount(QString, const QString &profile_name,QObject *parent = 0); ~icqAccount(); void createAccountButton(QHBoxLayout *); // void createMenuAccount(QMenu *, QAction *); void createMenuAccount(); void removeMenuAccount(QMenu *); void removeAccountButton(); inline QAction* getAction() const { return accountAction; } inline QString getIcquin() const { return icqUin; } inline bool getChangeState() const { return settingsChanged; }; inline QIcon getCurrentIcon() const { return currentIcon; }; inline accountStatus getStatus() const { return getProtocol()->getStatus(); }; void setTrayCurrent( bool curr ) { currentTrayStatus = curr; }; void createTrayMenuStatus(QMenu *); void removeTrayMenuStatus(QMenu *); void setChooseStatusCheck(bool check); // inline bool getAutoConnect() const { return autoConnect; }; void autoconnecting(); void removeContactList(); bool deleteingAccount; void readMessageStack(); inline oscarProtocol *getProtocol() const { return thisIcqProtocol;}; QString currentIconPath; QMenu *getAccountMenu() {return statusMenu;} void saveAccountSettings(); void setStatusFromPlugin(accountStatus status, const QString &status_text); void restoreStatusFromPlugin(); void setXstatusFromPlugin(int status, const QString &status_title, QString &status_text); void restoreXstatusFromPlugin(); void editAccountSettings(); public slots: void onUpdateTranslation(); void onReloadGeneralSettings(); private slots: void setStatus(); void setStatusIcon(accountStatus); void onOscarStatusChanged(accountStatus status); void emitChangeStatus(); void systemMessage(const QString &); void userMessage(const QString &,const QString &,const QString &, userMessageType, bool); void networkSettingsChanged(); void addToEvent(bool f) { emit addToEventList(f); } void updateStatusMenu(bool); void setVisibleForAll(); void setVisibleForVis(); void setNotVisibleForInv(); void setVisibleForContact(); void setInvisibleForAll(); void deleteTrayWindow(QObject *); void generalSettingsChanged(); void customStatusTriggered(); void accountConnected(bool f) { iAmConnected = f; }; void editAccountSettingsClosed(QObject*); signals: void changeSettingsApply(); void statusChanged(const QIcon &); void changeStatusInTrayMenu(const QString &); void getNewMessage(); void readAllMessages(); void addToEventList(bool); void updateTrayToolTip(); void updateTranslation(); private: accountStatus m_restore_status; QString m_restore_status_text; int m_restore_xstatus_num; QString m_restore_xstatus_title; QString m_restore_xstatus_text; void createIcons(); void createStatusMenu(); void updateIconStatus(); void loadAccountSettings(); void createContacts(); QString getIconPathForUin(const QString &) const; QIcon currentIcon; QString icqUin; accountButton *accountLineButton; QAction *accountAction; bool settingsChanged; bool menuExist; bool currentTrayStatus; bool statusTrayMenuExist; bool autoConnect; QMenu *statusMenu; QMenu *privacyStatus; QAction *onlineAction; QAction *offlineAction; QAction *ffcAction; QAction *awayAction; QAction *naAction; QAction *occupiedAction; QAction *dndAction; QAction *invisibleAction; QAction *lunchAction; QAction *evilAction; QAction *depressionAction; QAction *atHomeAction; QAction *atWorkAction; QVector statusMenuActions; QAction *visibleForAll; QAction *visibleForVis; QAction *notVisibleForInv; QAction *visibleForContact; QAction *invisibleForAll; QAction *customStatus; QActionGroup *privacyGroup; oscarProtocol *thisIcqProtocol; QAction *chooseStatus; bool showCustomStatus; bool showBalloon; int balloonTime; bool dontShowifNA; bool showTrayMessages; int trayMessageWidth; int trayMessageHeight; int trayMessageTime; TrayPosition trayMessagePosition;; int trayMessageStyle; int positionInStack; bool firsTrayMessageIsShown; QString configPath; unsigned clientIndex; unsigned protocolVersion; QString clientCap1; QString clientCap2; QString clientCap3; bool checkClientIdentification(unsigned, unsigned, const QString &, const QString &, const QString &); int currentXstatus; int statusIconIndex; bool iAmConnected; QString m_profile_name; QMenu *m_account_menu; IcqPluginSystem &m_icq_plugin_system; QMenu *m_account_additional_menu; bool m_edit_dialog_opened; }; #endif // ICQACCOUNT_H qutim-0.2.0/plugins/icq/passwordchangedialog.h0000644000175000017500000000234711273054317023123 0ustar euroelessareuroelessar/* passwordChangeDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 PASSWORDCHANGEDIALOG_H #define PASSWORDCHANGEDIALOG_H #include #include "ui_passwordchangedialog.h" class passwordChangeDialog : public QDialog { Q_OBJECT public: passwordChangeDialog(const QString &, const QString &profile_name, QWidget *parent = 0); ~passwordChangeDialog(); QString newPass; private slots: void on_changeButton_clicked(); private: Ui::passwordChangeDialogClass ui; QPoint desktopCenter(); QString ownerUin; QString m_profile_name; }; #endif // PASSWORDCHANGEDIALOG_H qutim-0.2.0/plugins/icq/deletecontactdialog.ui0000644000175000017500000000567411273054317023125 0ustar euroelessareuroelessar deleteContactDialogClass 0 0 310 118 deleteContactDialog :/icons/crystal_project/deleteuser.png:/icons/crystal_project/deleteuser.png 4 0 50 Contact will be deleted. Are you sure? Delete contact history Qt::Horizontal 40 20 Yes No Qt::Vertical 20 40 noButton clicked() deleteContactDialogClass reject() 244 116 308 120 yesButton clicked() deleteContactDialogClass accept() 193 129 88 121 qutim-0.2.0/plugins/icq/addrenamedialog.cpp0000644000175000017500000000250111273054317022356 0ustar euroelessareuroelessar/* addRenameDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "addrenamedialog.h" #include addRenameDialog::addRenameDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); setFixedSize(size()); move(desktopCenter()); ui.pushButton->setIcon(qutim_sdk_0_2::Icon("apply")); } addRenameDialog::~addRenameDialog() { } QPoint addRenameDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void addRenameDialog::on_lineEdit_textChanged(const QString &t) { name = t; ui.pushButton->setDisabled(t.isEmpty()); } qutim-0.2.0/plugins/icq/oscarprotocol.cpp0000644000175000017500000004642211273054317022161 0ustar euroelessareuroelessar/* oscarProtocol Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include "flap.h" #include "connection.h" #include "passworddialog.h" #include "closeconnection.h" #include "snacchannel.h" #include "buffer.h" #include "contactlist.h" #include "oscarprotocol.h" oscarProtocol::oscarProtocol(const QString &account, const QString &profile_name, QObject *parent) : QObject(parent) , icqUin(account) , m_profile_name(profile_name) { readyToReadFlap = true; flapLength = 0; channel = 0; currentStatus = offline; tempStatus = offline; md5Connection = true; connectingAccount = false; reconnectOnDisc = true; userDisconnected = false; rateLimit = false; connectionSocket = new QTcpSocket(this); buffer = new icqBuffer(this); buffer->open(QIODevice::ReadWrite); // flapSeqNum = secnumGenerator(); //sequences[rand() % sequences_num]; QSettings acc_settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); flapSeqNum = acc_settings.value("AOL/seq", 0).toUInt(); reqSeq = 0x0000; keepAlive = true; connectBos = false; autoAway = false; fAutoAwayRunning = false; timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(sendAlivePacket())); connectClass = new connection(connectionSocket, buffer, icqUin, m_profile_name, this); connect ( connectionSocket, SIGNAL(disconnected()), this, SLOT(disconnected())); connect ( connectionSocket, SIGNAL(readyRead()), this, SLOT(readDataFromSocket())); connect( connectionSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError))); connect ( connectClass, SIGNAL(sendLogin()), this, SLOT(sendIdentif()) ); connect ( connectClass, SIGNAL(connectingToBos()), this, SLOT(connectingToBos()) ); closeConnectionClass = new closeConnection(this); connect ( closeConnectionClass , SIGNAL(systemMessage(const QString &)), this, SLOT(sendSystemMessage(const QString &))); connect ( closeConnectionClass , SIGNAL(sendBosServer(const QHostAddress &)), this, SLOT(getBosIp(const QHostAddress &))); connect ( closeConnectionClass , SIGNAL(sendBosPort(const quint16 &)), this, SLOT(getBosPort(const quint16 &))); connect ( closeConnectionClass , SIGNAL(sendCookie(const QByteArray)), this, SLOT(reconnectToBos(const QByteArray))); snacChannelClass = new snacChannel(connectionSocket, buffer, flapSeqNum, icqUin, m_profile_name, this); contactListClass = new contactListTree(connectionSocket, buffer, icqUin, m_profile_name, flapSeqNum, snacChannelClass->snacReqId,snacChannelClass->reqSeq, this); connect ( contactListClass , SIGNAL(userMessage(const QString &, const QString &, const QString &, userMessageType, bool)), this, SLOT(sendUserMessage(const QString &, const QString &, const QString &, userMessageType, bool))); connect(this, SIGNAL(updateTranslation()), contactListClass, SLOT(onUpdateTranslation())); connect ( contactListClass , SIGNAL(sendSystemMessage(const QString &)), this, SLOT(sendSystemMessage(const QString &))); connect ( contactListClass , SIGNAL(getNewMessage()), this, SIGNAL(getNewMessage())); connect ( contactListClass , SIGNAL(readAllMessages()), this, SIGNAL(readAllMessages())); connect ( contactListClass , SIGNAL(updateStatus()), this, SLOT(updateChangedStatus())); connect ( contactListClass , SIGNAL(restartAutoAway(bool, quint32)), this, SLOT(restartAutoAway(bool, quint32))); connect(this, SIGNAL(statusChanged(accountStatus)), contactListClass, SLOT(onStatusChanged(accountStatus))); connect(this, SIGNAL(systemMessage(const QString &)), contactListClass, SLOT(onSystemMessage())); // connect(this, SIGNAL(accountConnected(bool)), // contactListClass, SLOT(onConnected(bool))); connect ( snacChannelClass, SIGNAL(incFlapSeq()), this, SLOT(incFlapSeqNum())); connect ( snacChannelClass, SIGNAL(incReqSeq()), this, SLOT(incReqSeq())); connect ( snacChannelClass, SIGNAL(rereadSocket()), this, SLOT(rereadSocket())); connect ( snacChannelClass, SIGNAL(sendAuthKey(const QByteArray &)), this, SLOT(getAuthKey(const QByteArray &))); connect ( snacChannelClass , SIGNAL(systemMessage(const QString &)), this, SLOT(sendSystemMessage(const QString &))); connect ( snacChannelClass , SIGNAL(sendBosServer(const QHostAddress &)), this, SLOT(getBosIp(const QHostAddress &))); connect ( snacChannelClass , SIGNAL(sendBosPort(const quint16 &)), this, SLOT(getBosPort(const quint16 &))); connect ( snacChannelClass , SIGNAL(sendCookie(const QByteArray)), this, SLOT(reconnectToBos(const QByteArray))); connect ( snacChannelClass, SIGNAL(connected()), this, SLOT(connected()) ); connect ( snacChannelClass, SIGNAL(blockRateLimit()), this, SLOT(blockRateLimit())); connect(closeConnectionClass, SIGNAL(blockRateLimit()), this, SLOT(blockRateLimit())); connect(snacChannelClass, SIGNAL(oncomingBuddy(const QString &, quint16)), contactListClass, SLOT(oncomingBuddy(const QString &, quint16)) ); connect(snacChannelClass, SIGNAL(offlineBuddy(const QString &, quint16)), contactListClass, SLOT(offlineBuddy(const QString &, quint16)) ); connect(snacChannelClass, SIGNAL(getList(bool)), contactListClass, SLOT(createContact(bool))); connect(snacChannelClass, SIGNAL(clearPrivacyLists()), contactListClass, SLOT(clearPrivacyLists())); connect ( snacChannelClass , SIGNAL(getMessage(quint16)), contactListClass, SLOT(getMessage(quint16))); connect ( snacChannelClass , SIGNAL(getOfflineMessage(quint16)), contactListClass, SLOT(getOfflineMessage(quint16))); connect ( contactListClass , SIGNAL(incSnacSeq()), snacChannelClass, SLOT(returnSnacReqId())); connect ( contactListClass , SIGNAL(incFlapSeq()), this, SLOT(incFlapSeqNum())); connect ( contactListClass , SIGNAL(incMetaSeq()), snacChannelClass, SLOT(incReq())); connect ( snacChannelClass , SIGNAL(readMetaData(quint16, bool)), contactListClass, SLOT(readMetaData(quint16,bool))); connect ( snacChannelClass , SIGNAL(getTypingNotif(quint16)), contactListClass, SLOT(getTypingNotification(quint16))); connect ( snacChannelClass , SIGNAL(readSSTserver(quint16)), contactListClass, SLOT(readSSTserver(quint16))); connect ( snacChannelClass , SIGNAL(getStatusCheck(quint16)), contactListClass, SLOT(getStatusCheck(quint16))); connect ( snacChannelClass , SIGNAL(getModifyItemFromServer(quint16)), contactListClass, SLOT(getModifyItemFromServer(quint16))); connect ( snacChannelClass , SIGNAL(getStatusCheck(quint16)), contactListClass, SLOT(getStatusCheck(quint16))); connect ( snacChannelClass , SIGNAL(getMessageAck(quint16)), contactListClass, SLOT(getMessageAck(quint16))); connect ( this, SIGNAL(addToEventList(bool)), parent, SLOT(addToEvent(bool))); connect (snacChannelClass, SIGNAL(youWereAdded(quint16)), contactListClass, SLOT(youWereAdded(quint16))); connect (snacChannelClass, SIGNAL(getUploadIconData(quint16)), contactListClass, SLOT(getUploadIconData(quint16))); connect (snacChannelClass, SIGNAL(getAwayMessage(quint16)), contactListClass, SLOT(getAwayMessage(quint16))); connect (snacChannelClass, SIGNAL(getAuthorizationRequest(quint16)), contactListClass, SLOT(getAuthorizationRequest(quint16))); connect (snacChannelClass, SIGNAL(authorizationAcceptedAnswer(quint16)), contactListClass, SLOT(authorizationAcceptedAnswer(quint16))); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); autoAway = settings.value("statuses/autoaway", true).toBool(); awayMin = settings.value("statuses/awaymin", 10).toUInt(); if ( autoAway ) emit addToEventList(true); } oscarProtocol::~oscarProtocol() { } quint16 oscarProtocol::secnumGenerator() { quint32 n = qrand(), s = 0, i; for (i = n; i >>= 3; s += i); return ((((0 - s) ^ (quint8)n) & 7 ^ n) + 2) & 0x7fff; } void oscarProtocol::setStatus(accountStatus status) { // Disable autoaway fAutoAwayRunning = false; if ( status != currentStatus) { bool changestatus = true; if ( status == offline && currentStatus != offline ) { emit statusChanged(offline); clearSocket(); connectingAccount = false; connectionSocket->disconnectFromHost(); } if ( (currentStatus == offline && status !=offline)) { if ( status != connecting ) { if ( checkPassword() ) { connectingAccount = true; userDisconnected = false; emit statusChanged(connecting); connectClass->connectToServer(connectionSocket); currentStatus = status; // contactListClass->currentStatus = status; changestatus = true; } else { changestatus = false; } } } if ( changestatus && !connectingAccount ) { currentStatus = status; // contactListClass->currentStatus = status; snacChannelClass->changeStatus(currentStatus); emit statusChanged(status); } } } void oscarProtocol::disconnected() { clearSocket(); tempStatus = currentStatus; if ( !connectBos) { currentStatus = offline; reservedForFutureAOLHacks(); } else connectBos = false; snacChannelClass->setConnectBOS(connectBos); emit statusChanged(offline); // contactListClass->currentStatus = offline; snacChannelClass->setStatus(tempStatus); timer->stop(); contactListClass->goingOnline(false); if ( !userDisconnected && reconnectOnDisc && !rateLimit ) { setStatus(tempStatus); } // if ( connectBos ) // { // connectClass->connectToBos(bosIp, bosPort, cookieForBos, flapSeqNum); // incFlapSeqNum(); // connectBos = false; // } } void oscarProtocol::connected() { connectingAccount = false; rateLimit = false; currentStatus = tempStatus; // contactListClass->currentStatus = tempStatus; emit accountConnected(true); emit statusChanged(tempStatus); if ( keepAlive ) timer->start(60000); contactListClass->goingOnline(true); } void oscarProtocol::displayError(QAbstractSocket::SocketError error) { setStatus(offline); switch(error) { case QAbstractSocket::ConnectionRefusedError: systemMessage(tr("The connection was refused by the peer (or timed out).")); break; case QAbstractSocket::RemoteHostClosedError: systemMessage(tr("The remote host closed the connection.")); break; case QAbstractSocket::HostNotFoundError: systemMessage(tr("The host address was not found.")); break; case QAbstractSocket::SocketAccessError: systemMessage(tr("The socket operation failed because " "the application lacked the required privileges.")); break; case QAbstractSocket::SocketResourceError: systemMessage(tr("The local system ran out of resources (e.g., too many sockets).")); break; case QAbstractSocket::SocketTimeoutError: systemMessage(tr("The socket operation timed out.")); break; case QAbstractSocket::NetworkError: systemMessage(tr("An error occurred with the network " "(e.g., the network cable was accidentally plugged out).")); break; case QAbstractSocket::UnsupportedSocketOperationError: systemMessage(tr("The requested socket operation is not supported " "by the local operating system (e.g., lack of IPv6 support).")); break; case QAbstractSocket::ProxyAuthenticationRequiredError: systemMessage(tr("The socket is using a proxy, and the proxy requires authentication.")); break; default: systemMessage(tr("An unidentified network error occurred.")); } } void oscarProtocol::readDataFromSocket() { // if ( connectionSocket->bytesAvailable() < 6 ) // return; // quint64 tmpLength = connectionSocket->bytesAvailable(); buffer->write(connectionSocket->readAll()); if ( readyToReadFlap ) { flapPacket flap; if ( !flap.readFromSocket( buffer ) ) { // qDebug()<readAll().toHex(); return; } channel = flap.getChannel(); flapLength = flap.getLength(); } if ( buffer->bytesAvailable() < flapLength ) { readyToReadFlap = false; return; } readyToReadFlap = true; if ( channel == 0x01) connectClass->readData(flapLength); if ( channel == 0x02 ) { snacChannelClass->readData(flapLength); } if ( channel == 0x03 ) buffer->read(flapLength); if ( channel == 0x04) closeConnectionClass->readData(connectionSocket, buffer, icqUin); if ( channel >= 0x05 ) buffer->read(flapLength); if (buffer->bytesAvailable()) readDataFromSocket(); // if ( connectionSocket->bytesAvailable() ) // clearSocket(); } void oscarProtocol::clearSocket() { connectionSocket->readAll(); buffer->readAll(); } bool oscarProtocol::checkPassword() { QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); md5Connection = account_settings.value("connection/md5", true).toBool(); if ( account_settings.value("main/savepass", false).toBool() ) { const char crypter[] = {0x10,0x67, 0x56, 0x78, 0x85, 0x14, 0x87, 0x11, 0x45,0x45,0x45,0x45,0x45,0x45 }; QByteArray tmpPass = account_settings.value("main/password").toByteArray(); QByteArray roastedPass; for ( int i = 0; i < tmpPass.length(); i++ ) roastedPass[i] = tmpPass.at(i) ^ crypter[i]; password = contactListClass->convertPassToCodePage(roastedPass); // password = settings.value("main/password").toString(); return true; } else { passwordDialog dialog; dialog.setTitle(icqUin); dialog.rellocateDialogToCenter(NULL); if ( dialog.exec() ) { password = contactListClass->convertPassToCodePage(dialog.getPass()); if ( dialog.getSavePass() ) { const char crypter[] = {0x10,0x67, 0x56, 0x78, 0x85, 0x14, 0x87, 0x11, 0x45,0x45,0x45,0x45,0x45,0x45 }; QByteArray roastedPass; for ( int i = 0; i < password.length(); i++ ) roastedPass[i] = password.at(i) ^ crypter[i]; // settings.setValue("main/password", password); account_settings.setValue("main/password",roastedPass); } account_settings.setValue("main/savepass", dialog.getSavePass() ); return true; } } return false; } void oscarProtocol::sendIdentif() { if ( md5Connection ) snacChannelClass->sendIdent(flapSeqNum); else { connectClass->sendIdent(password); password.clear(); } } void oscarProtocol::incFlapSeqNum() { if ( flapSeqNum != 0x8000 ) flapSeqNum++; else flapSeqNum = 0x0000; snacChannelClass->incFlap(); } void oscarProtocol::getAuthKey(const QByteArray &authKey) { snacChannelClass->md5Login(password, authKey, flapSeqNum); password.clear(); } void oscarProtocol::reconnectToBos(const QByteArray cookie) { connectBos = true; cookieForBos = cookie; connectionSocket->disconnectFromHost(); connectionSocket->close(); // if ( connectionSocket->proxy().type() != QNetworkProxy::NoProxy) // { // delete connectionSocket; // connectionSocket = new QTcpSocket(this); // // connect ( connectionSocket, SIGNAL(disconnected()), // this, SLOT(disconnected())); // connect ( connectionSocket, SIGNAL(readyRead()), // this, SLOT(readDataFromSocket())); // // connect( connectionSocket, SIGNAL(error(QAbstractSocket::SocketError)), // this, SLOT(displayError(QAbstractSocket::SocketError))); // } connectClass->connectToBos(bosIp, bosPort, cookie, flapSeqNum); incFlapSeqNum(); } void oscarProtocol::connectingToBos() { emit statusChanged(connecting); currentStatus = connecting; // contactListClass->currentStatus = connecting; } void oscarProtocol::removeContactList() { contactListClass->removeContactList(); } void oscarProtocol::rereadSocket() { readyToReadFlap = true; readDataFromSocket(); } void oscarProtocol::readreadMessageStack() { contactListClass->readMessageStack(); } void oscarProtocol::incReqSeq() { reqSeq++; } void oscarProtocol::sendKeepAlive(bool flag) { if ( keepAlive != flag ) { if ( !connectingAccount && (currentStatus != offline)) { if ( flag ) { timer->start(60000); } else { timer->stop(); } } } keepAlive = flag; } void oscarProtocol::sendAlivePacket() { if ( !connectionSocket->bytesAvailable() && !connectionSocket->bytesToWrite()) { QByteArray packet; packet[0] = 0x2A; packet[1] = 0x05; packet[2] = flapSeqNum / 0x100; packet[3] = flapSeqNum % 0x100; packet[4] = 0x00; packet[5] = 0x00; incFlapSeqNum(); qint64 aliveSize = connectionSocket->write((const char*)packet, 6); if (!connectionSocket->waitForBytesWritten(1000)) connectionSocket->abort(); if ( aliveSize == 0 || aliveSize == -1 ) connectionSocket->disconnectFromHost(); buffer->readAll(); } } void oscarProtocol::updateChangedStatus() { if ( currentStatus != connecting && currentStatus != offline ) { snacChannelClass->changeStatus(currentStatus); } } void oscarProtocol::restartAutoAway(bool f, quint32 min) { emit addToEventList(f); autoAway = f; awayMin = min; } void oscarProtocol::resendCapabilities() { if ( currentStatus != offline || currentStatus != connecting ) snacChannelClass->resendCapabilities(); } void oscarProtocol::sendOnlyCapabilities() { if ( currentStatus != offline || currentStatus != connecting ) snacChannelClass->sendOnlyCapabilities(); } void oscarProtocol::onReloadGeneralSettings() { contactListClass->onReloadGeneralSettings(); } void oscarProtocol::proxyDeleteTimer() { connectClass->connectToBos(bosIp, bosPort, cookieForBos, flapSeqNum); } void oscarProtocol::onSecondIdle(int seconds) { // Autoaway is disabled, do not touch anything if (!autoAway) return ; // if activity is detected if (seconds == 0) { if (currentStatus == away && fAutoAwayRunning) setStatus(online); } // If idle time is bigger than autoaway time if (seconds > static_cast(awayMin) * 60) { if (currentStatus == online) { setStatus(away); fAutoAwayRunning = true; } } } void oscarProtocol::setAutoAway() { if (currentStatus == online || currentStatus == ffc || currentStatus == evil || currentStatus == depression || currentStatus == athome || currentStatus == atwork) { beforeAwayStatus = currentStatus; setStatus(away); fAutoAwayRunning = true; } } void oscarProtocol::setStatusAfterAutoAway() { if (currentStatus == away && fAutoAwayRunning) setStatus(beforeAwayStatus); } contactListTree* oscarProtocol::getContactListClass() const { return contactListClass; } void oscarProtocol::reservedForFutureAOLHacks() { // flapSeqNum = sequences[rand() % sequences_num]; // flapSeqNum = secnumGenerator(); QSettings acc_settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); flapSeqNum = acc_settings.value("AOL/seq", 0).toUInt(); snacChannelClass->flapSequence = flapSeqNum; } qutim-0.2.0/plugins/icq/contactlist.cpp0000644000175000017500000057467011273054317021632 0ustar euroelessareuroelessar/* contactListTree Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include //#include "treegroupitem.h" #include "treebuddyitem.h" #include "icqmessage.h" #include "buffer.h" #include "metainformation.h" //#include "statusiconsclass.h" #include "servicessetup.h" #include "buddypicture.h" #include "searchuser.h" #include "userinformation.h" #include "addbuddydialog.h" //#include "modifyitem.h" #include "multiplesending.h" #include "privacylistwindow.h" #include "passwordchangedialog.h" #include "addrenamedialog.h" #include "readawaydialog.h" #include "deletecontactdialog.h" #include "requestauthdialog.h" #include "acceptauthdialog.h" //#include "clientidentify.h" #include "filetransfer.h" #include "snac.h" #include "tlv.h" #include "contactlist.h" #include "notewidget.h" #if defined(_MSC_VER) #pragma warning (disable:4138) #endif contactListTree::contactListTree(QTcpSocket *s, icqBuffer *buff, const QString &uin, const QString &profile_name, quint16 &flap, quint32 &snac, quint16 &meta, QObject *parent) : QObject(parent) , statusIconObject(statusIconClass::getInstance()) , tcpSocket(s) , socket(buff) , icqUin(uin) , account_name(uin) , m_profile_name(profile_name) , m_icq_plugin_system(IcqPluginSystem::instance()) { flapSeq = &flap; snacSeq = &snac; metaSeq = &meta; newMessages = false; isMergeAccounts = false; contactListChanged = false; iAmOnline = false; showGroups = false; clearNil = false; waitForMineInfo = false; mineMetaSeq = 0; pdInfoID = 0; justStarted = false; codec = QTextCodec::codecForName("Windows-1251"); if (!codec) codec = QTextCodec::codecForLocale(); Q_ASSERT(codec); currentStatus = offline; findUserWindowOpen = false; multipleSendingOpen = false; privacyListWindowOpen = false; waitForIconUpload = false; movingBuddy = false; avatarModified = false; iconObject.itemId = 0; currentContextGroup = 0; currentContextMenu = 0; allGroupCount = 0; allContactCount = 0; allContactTmpCount = 0; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); iconPath = settings.fileName().section('/', 0, -2) + "/icqicons/"; letMeAskYouAboutXstatusPlease = true; TreeModelItem root_item; root_item.m_protocol_name = "ICQ"; root_item.m_account_name = icqUin; root_item.m_item_name = icqUin; root_item.m_item_type = 2; m_icq_plugin_system.addItemToContactList(root_item, icqUin); loadSettings(); createContactList(); loadUnreadedMessages(); buddyConnection = new buddyPicture(m_profile_name, icqUin, this); connect ( buddyConnection, SIGNAL(emptyAvatarList()),this, SLOT(emptyAvatarList())); connect ( buddyConnection, SIGNAL(updateAvatar(const QString &, QByteArray)), this, SLOT(updateAvatar(const QString &, QByteArray))); avatarPort = 0; fileTransferObject = new FileTransfer(icqUin, this); connect ( fileTransferObject, SIGNAL(sendFile(QByteArray &, QByteArray &, QByteArray &)), this, SLOT(sendFile(QByteArray &, QByteArray &, QByteArray &))); connect ( fileTransferObject, SIGNAL(emitCancelSending(QByteArray &)), this, SLOT(sendCancelSending(QByteArray &))); connect ( fileTransferObject, SIGNAL(sendRedirectToProxy(const QByteArray &)), this, SLOT(redirectToProxy(const QByteArray &))); connect ( fileTransferObject, SIGNAL(emitAcceptSending(const QByteArray &)), this, SLOT(sendAcceptMessage(const QByteArray &))); createContactListActions(); createSoundEvents(); } contactListTree::~contactListTree() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); if ( findUserWindowOpen ) delete searchWin; if ( multipleSendingOpen ) delete multipleSendingWin; if (privacyListWindowOpen) delete privacyWindow; qDeleteAll(infoWindowList); infoWindowList.clear(); qDeleteAll(awayMessageList); awayMessageList.clear(); if ( currentContextMenu) { delete menuLabel; delete currentContextMenu; } qDeleteAll(noteWidgetsList); noteWidgetsList.clear(); } void contactListTree::createContact(bool last) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); Q_ASSERT(socket); if (!socket) return ; socket->read(1); quint16 arraySize = byteArrayToInt16(socket->read(2)); QStringList groups = settings.value("list/group").toStringList(); QStringList buddies = settings.value("list/contacts").toStringList(); for ( quint16 i = 0; i < arraySize; i++ ) { quint16 stringLength = byteArrayToInt16(socket->read(2)); QString itemName = QString::fromUtf8(socket->read(stringLength)); quint16 groupID = byteArrayToInt16(socket->read(2)); quint16 itemId = byteArrayToInt16(socket->read(2)); quint16 itemType = byteArrayToInt16(socket->read(2)); if ( itemType == 0x0001 && groupID != 0x0000 ) { settings.beginGroup(QString::number(groupID)); if ( !groupList.contains(groupID)) { treeGroupItem *group = new treeGroupItem; group->setOnOffLists(); groupList.insert(groupID, group); group->setGroupText(itemName); quint16 groupLength = byteArrayToInt16(socket->read(2)); group->readData(socket, groupLength); settings.setValue("id", groupID); contactListChanged = true; allContactCount += group->userCount; addGroupToCL(groupID, group->name); } else { if ( groupList.value(groupID) && itemName != groupList.value(groupID)->name) contactListChanged = true; if (groupList.contains(groupID)) { renameGroupInCL(itemName, groupID); groupList.value(groupID)->setGroupText(itemName); quint16 groupLength = byteArrayToInt16(socket->read(2)); groupList.value(groupID)->readData(socket, groupLength); allContactCount += groupList.value(groupID)->userCount; getGroups.removeAll(QString::number(groupID)); } } settings.setValue("name", itemName); settings.endGroup(); if ( !groups.contains(QString::number(groupID))) groups<read(2)); tlv rootTlv; for ( ;tmpLength > 0; ) { tlv tmpTlv; tmpTlv.readData(socket); tmpLength -= tmpTlv.getLength(); if ( tmpTlv.getTlvType() == 0x00c8) rootTlv = tmpTlv; } allGroupCount = rootTlv.getTlvLength() / 2; } else if (itemType == 0x0000 ) { allContactTmpCount++; idBuddyList.append(itemId); settings.beginGroup(itemName); if ( !buddyList.contains(itemName)) { if ( treeGroupItem *group = groupList.value(groupID) ) { treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); buddy->itemId = itemId; initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = groupID; buddy->groupName = group->name; buddyList.insert(itemName, buddy); buddy->setBuddyUin(itemName); quint16 buddyLength = byteArrayToInt16(socket->read(2)); buddy->readData(socket, buddyLength); settings.setValue("nickname", buddy->getName()); settings.setValue("authorized", !buddy->getNotAutho()); settings.setValue("lastonline", buddy->lastonlineTime); contactListChanged = true; if (itemName == buddy->getName()) requestUinInformation(itemName); addContactToCL(buddy->groupID, itemName, buddy->getName()); } } else { quint16 buddyLength = byteArrayToInt16(socket->read(2)); treeBuddyItem *tmpBuddy = buddyList.value(itemName); tmpBuddy->readData(socket, buddyLength); tmpBuddy->itemId = itemId; if (tmpBuddy->getName() != itemName) { settings.setValue("nickname", tmpBuddy->getName()); renameContactInCL(tmpBuddy->groupID, tmpBuddy->getUin(), tmpBuddy->getName()); } // else // requestUinInformation(itemName); settings.setValue("lastonline", tmpBuddy->lastonlineTime); settings.setValue("authorized", !tmpBuddy->getNotAutho()); if ( groupID != tmpBuddy->groupID && groupList.contains(tmpBuddy->groupID)) { treeGroupItem *oldGrp = groupList.value(tmpBuddy->groupID); Q_ASSERT(oldGrp); oldGrp->userCount--; treeGroupItem *newGrp = groupList.value(groupID); Q_ASSERT(newGrp); newGrp->userCount++; moveContactFromGroupToGroup(tmpBuddy->groupID, groupID, tmpBuddy->getUin()); settings.setValue("groupid", groupID); contactListChanged = true; } } getBuddies.removeAll(itemName); settings.setValue("name", itemName); settings.setValue("groupid", groupID); settings.endGroup(); if ( ! buddies.contains(itemName)) buddies<read(2)); socket->read(tmpLength); ignoreList<read(2)); socket->read(tmpLength); visibleList<read(2)); socket->read(tmpLength); invisibleList<read(2)); socket->read(tmpLength); } else if ( itemType == 0x0014) { iconObject.groupId = groupID; iconObject.itemId = itemId; quint16 tmpLength = byteArrayToInt16(socket->read(2)); bool iconGetted = false; tlv iconTlv; for ( ;tmpLength > 0; ) { tlv tmpTlv; tmpTlv.readData(socket); tmpLength -= tmpTlv.getLength(); if ( tmpTlv.getTlvType() == 0x00d5) { iconGetted = true; iconTlv = tmpTlv; } } if ( iconGetted ) { checkForOwnIcon(iconTlv.getTlvData()); } else { removeIconHash(); } } else { quint16 tmpLength = byteArrayToInt16(socket->read(2)); socket->read(tmpLength); } } // W00T W00T W00T // if ((allGroupCount == (groupList.count() - 1)) && (allContactCount == allContactTmpCount)) // last = true; socket->read(4); if ( last ) { foreach(QString name, getGroups) { getGroups.removeAll(name); groups.removeAll(name); settings.remove(name); treeGroupItem *tmpItem = groupList.value(name.toShort()); removeGroupFromCl(name.toShort()); delete tmpItem; tmpItem = NULL; groupList.remove(name.toShort()); contactListChanged = true; QStringList buddiesList = settings.value("list/contacts").toStringList(); foreach(treeBuddyItem *buddy, buddyList) { if (!buddy) continue; if ( buddy->groupID == name.toShort()) { buddiesList.removeAll(buddy->getUin()); getBuddies.removeAll(buddy->getUin()); settings.remove(buddy->getUin()); } } settings.setValue("list/contacts", buddiesList); } getGroups = settings.value("list/group").toStringList(); foreach(QString uin, getBuddies) { getBuddies.removeAll(uin); treeBuddyItem *nilBuddy = buddyList.value(uin); if ( nilBuddy && nilBuddy->groupID) { if ( groupList.contains(nilBuddy->groupID)) { removeContactFromCl(nilBuddy->groupID, nilBuddy->getUin()); } nilBuddy->groupID = 0; treeGroupItem *newGrp = groupList.value(0); addContactToCL(0, nilBuddy->getUin(), nilBuddy->getName()); newGrp->userCount++; settings.setValue(uin + "/groupid", 0); contactListChanged = true; } } getBuddies = settings.value("list/contacts").toStringList(); if ( contactListChanged && isMergeAccounts ) emit reupdateList(); emit incSnacSeq(); servicesSetup privacySetup(icqUin, m_profile_name); privacySetup.flap1309seq = *flapSeq; privacySetup.snac1309seq = *snacSeq; privacySetup.setPrivacy(icqUin, pdInfoID, pdInfoGroupId, tcpSocket); emit incFlapSeq(); emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.sendShortInfoReq(tcpSocket, *flapSeq, *snacSeq, *metaSeq, icqUin); mineMetaSeq = ((*metaSeq )% 0x100) * 0x100 + ((*metaSeq )/ 0x100); waitForMineInfo = true; emit incFlapSeq(); sendReqForRedirect(); justStarted = true; QTimer::singleShot(3000, this, SLOT(disableJustStarted())); QStringList tmp_list_a = settings.value("list/ignore",QStringList()).toStringList(); foreach(QString just_tmp_uin,tmp_list_a) { if ( !ignoreList.contains(just_tmp_uin) && buddyList.contains(just_tmp_uin)) buddyList.value(just_tmp_uin)->setCustomIcon(QIcon(),7); } tmp_list_a = settings.value("list/visible",QStringList()).toStringList(); foreach(QString just_tmp_uin,tmp_list_a) { if ( !visibleList.contains(just_tmp_uin) && buddyList.contains(just_tmp_uin)) buddyList.value(just_tmp_uin)->setCustomIcon(QIcon(),5); } tmp_list_a = settings.value("list/invisible",QStringList()).toStringList(); foreach(QString just_tmp_uin,tmp_list_a) { if ( !invisibleList.contains(just_tmp_uin) && buddyList.contains(just_tmp_uin)) buddyList.value(just_tmp_uin)->setCustomIcon(QIcon(),6); } settings.setValue("list/ignore", ignoreList); settings.setValue("list/visible", visibleList); settings.setValue("list/invisible", invisibleList); if ( ignoreList.count() || visibleList.count() || invisibleList.count() ) { //Q_ASSERT(privacyWindow); if ( privacyListWindowOpen && privacyWindow) privacyWindow->createLists(); } allGroupCount = 0; allContactCount = 0; fileTransferObject->connectionProxy = tcpSocket->proxy(); setPrivacyIconsToContacts(); } settings.setValue("list/group", groups); settings.setValue("list/contacts", buddies); } void contactListTree::removeContactList() { TreeModelItem root_item; root_item.m_protocol_name = "ICQ"; root_item.m_account_name = icqUin; root_item.m_item_name = icqUin; root_item.m_item_type = 2; m_icq_plugin_system.removeItemFromContactList(root_item); } quint16 contactListTree::byteArrayToInt16(const QByteArray &array) { bool ok; return array.toHex().toUInt(&ok,16); } quint32 contactListTree::byteArrayToInt32(const QByteArray &array) { bool ok; return array.toHex().toULong(&ok,16); } void contactListTree::oncomingBuddy(const QString &uin, quint16 length) { bool fromOffline = false; if ( treeBuddyItem *buddy = buddyList.value(uin) ) { // buddy->xStatusCaption.clear(); // buddy->xStatusMsg.clear(); treeGroupItem *group = groupList.value(buddy->groupID); Q_ASSERT(group); if (group && buddy && buddy->isOffline ) { fromOffline = true; } buddy->oncoming(socket, length); identifyContactClient.addContactClientId(buddy); buddy->checkForXStatus(); if ( buddy->xStatusPresent ) xStatusTickList.append(buddy); if ( letMeAskYouAboutXstatusPlease && buddy->xStatusPresent) { letMeAskYouAboutXstatusPlease = false; askForXstatusTimerTick(); } if ( !showXStatuses) buddy->waitingForAuth(buddy->authorizeMe); if ( buddy->statusChanged ) { updateChatBuddyStatus(buddy->getUin(), (statusIconClass::getInstance()->*(buddy->statusIconMethod))()); if (!justStarted) { // play sound emit playSoundEvent(static_cast(buddy->getStatus()), currentStatus); if ( !fromOffline && changeStatusNot )// && !contactList->hasFocus()) { userMessage(uin, buddy->getName(), convertToStringStatus(buddy->getStatus()), statusNotyfication, true); } } } emit updateOnlineList(); if ( buddy->getAvatarHash().length() != 16 ) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.remove(uin + "/iconhash"); } if (! disableAvatars) askForAvatars(buddy->getAvatarHash(), uin); // if ( chatWindowList.contains(uin)) // chatWindowList.value(uin)->setContactClient(buddy->clientId); } else { socket->read(length); } } void contactListTree::offlineBuddy(const QString &uin, quint16 length) { if ( treeBuddyItem *buddy = buddyList.value(uin) ) { if ( !buddy->isOffline ) { // play sound playSoundEvent(SoundEvent::ContactOffline, currentStatus); if ( notifList.contains(uin)) { notifList.removeAll(uin); contactTyping(uin, buddy->groupID, false); } treeGroupItem *group = groupList.value(buddy->groupID); buddy->buddyOffline(); updateChatBuddyStatus(buddy->getUin(), (statusIconClass::getInstance()->*(buddy->statusIconMethod))()); } // if ( chatWindowList.contains(uin)) // chatWindowList.value(uin)->setContactClient(buddy->clientId); } socket->read(length); } QString contactListTree::convertToStringStatus(contactStatus status) { switch ( status ) { case contactOnline: return tr("is online"); case contactAway: return tr("is away"); case contactDnd: return tr("is dnd"); case contactNa: return tr("is n/a"); case contactOccupied: return tr("is occupied"); case contactFfc: return tr("is free for chat"); case contactInvisible: return tr("is invisible"); case contactOffline: return tr("is offline"); case contactAtHome: return tr("at home"); case contactAtWork: return tr("at work"); case contactLunch: return tr("having lunch"); case contactEvil: return tr("is evil"); case contactDepression: return tr("in depression"); default: return tr("is online"); } } void contactListTree::getMessage(quint16 l) { icqMessage newMessage(codepage); newMessage.readData(socket, l); if ( newMessage.fileAnswer) { if ( !buddyList.contains(newMessage.from)) return; if( !newMessage.reason ) fileTransferObject->requestToRedirect(newMessage.from, newMessage.msgCookie, newMessage.connectToPeer, newMessage.peerIP, newMessage.peerPort, buddyList.value(newMessage.from)->getName(), newMessage.fileName, newMessage.fileSize, newMessage.aolProxyIP); if ( newMessage.reason == 0x0001) fileTransferObject->contactCanceled(newMessage.from, newMessage.msgCookie); if ( newMessage.reason == 0x0002) fileTransferObject->contactAccept(newMessage.from, newMessage.msgCookie); } if (!buddyList.contains(newMessage.from)) { if ( newMessage.messageType == 2 && !checkMessageForValidation(newMessage.from , newMessage.msg, 1)) { return; } if ( newMessage.messageType == 0 && !checkMessageForValidation(newMessage.from , newMessage.msg, 0)) { return; } } // if (!buddyList.contains(newMessage.from)) // { // if (getOnlyFromContactList && ( !newMessage.messageType || newMessage.messageType == 4) ) // { // if ( notifyAboutBlocked) // notifyBlockedMessage(newMessage.from, newMessage.msg); // // if ( saveServiceHistory ) // saveBlocked(newMessage.from, newMessage.msg, QDateTime::currentDateTime()); // // return; // } // // if (blockAuth && newMessage.messageType == 2) return; // // if (blockUrlMessage && checkMessageForUrl(newMessage.msg) // || newMessage.messageType == 3) // { // if ( notifyAboutBlocked && ( !newMessage.messageType || newMessage.messageType == 4) ) // notifyBlockedMessage(newMessage.from, newMessage.msg); // return; // } // // if (enableAntiSpamBot && ( !newMessage.messageType || newMessage.messageType == 4) ) // if (turnOnAntiSpamBot(newMessage.from, newMessage.msg, // QDateTime::currentDateTime())) return; // } if ( newMessage.messageType == 0 ) { bool playSound = true; messageFormat *msg = new messageFormat; msg->fromUin = newMessage.from; treeBuddyItem *tmpBuddy = 0; if ( (tmpBuddy = buddyList.value(msg->fromUin)) ) { msg->from = tmpBuddy->getName(); } else { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); if(groupList.size() == 0 ) { //fix #241 createNil(); //hack } treeGroupItem *group = groupList.value(0); msg->from = msg->fromUin; treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = 0; //buddy->groupName = ""; group->userCount++; buddyList.insert(msg->fromUin, buddy); buddy->setBuddyUin(msg->fromUin); buddy->setName(msg->fromUin); buddy->updateBuddyText(); updateNil(); requestUinInformation(buddy->getUin()); settings.beginGroup(buddy->getUin()); settings.setValue("name", buddy->getUin()); settings.setValue("groupid", 0); settings.setValue("nickname", buddy->getName()); settings.endGroup(); addContactToCL(0,buddy->getUin(), buddy->getName()); QStringList contacts = settings.value("list/contacts").toStringList(); contacts<getUin(); settings.setValue("list/contacts", contacts); } /* if ( buddyList.value(msg->fromUin)->UTF8 && newMessage.isValidUtf8(newMessage.byteArrayMsg)) msg->message = newMessage.msg; else if ( newMessage.isValidUtf8(newMessage.byteArrayMsg) ) msg->message = newMessage.msg; else msg->message = codec->toUnicode(newMessage.byteArrayMsg);*/ msg->message = newMessage.msg; msg->date = QDateTime::currentDateTime(); addMessageFromContact(msg->fromUin, buddyList.contains(msg->fromUin)?buddyList.value(msg->fromUin)->groupID : 0 , msg->message, msg->date); sendMessageRecieved(msg->fromUin, newMessage.msgCookie); // if ( chatWindowList.contains(msg->fromUin)) // { // chatWindow *w = chatWindowList.value(msg->fromUin); // w->setMessage(msg->from,msg->message, msg->date); // if ( !disableButtonBlinking) // qApp->alert(w, 0); // if ( tabMode ) // generalChatWindow->setMessageTab(w); // if ( !w->isActiveWindow() ) // { // // if ( messageList.contains(msg->fromUin)) // { // messageList.value(msg->fromUin)->messageList.append(msg); // } else { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // if ( !newMessages ) // { // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // } // if ( !disableTrayBlinking ) // emit getNewMessage(); // if ( ! dontShowEvents ) // { // if ( !dontShowIncomingMessagesInTrayEvents) // emit userMessage(msg->fromUin, msg->from, msg->message, messageNotification, true); // else // emit userMessage(msg->fromUin, msg->from, tr("New message"), messageNotification, true); // } // } // else if (!sounds->playIfChatWindowIsActive()) // playSound = false; // } // else // { // if ( messageList.contains(msg->fromUin)) // { // messageList.value(msg->fromUin)->messageList.append(msg); // } else { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // if ( !dontShowIncomingMessagesInTrayEvents) // emit userMessage(msg->fromUin, msg->from, msg->message, messageNotification, true); // else // emit userMessage(msg->fromUin, msg->from, tr("New message"), messageNotification, true); // if ( !disableTrayBlinking ) // emit getNewMessage(); // } // if ( !newMessages ) // { // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // } // // if ( openNew ) // doubleClickedBuddy(buddyList.value(msg->fromUin)); if (playSound) { // play sound emit playSoundEvent(SoundEvent::MessageGet, currentStatus); }; delete msg; } else if ( newMessage.messageType == 1 ) { if ( buddyList.contains(newMessage.from)) { // emit userMessage(tr("%1 is reading your away message").arg(buddyList.value(newMessage.from)->getName())); if ( m_notify_about_reading_status ) emit userMessage(newMessage.from, buddyList.value(newMessage.from)->getName(), "", readNotification, true); // setServiceMessageToWin(buddyList.value(newMessage.from)->getUin(), tr("is reading your away message")); addServiceMessage(buddyList.value(newMessage.from)->getUin(), buddyList.value(newMessage.from)->groupID, tr("%1 is reading your away message").arg(buddyList.value(newMessage.from)->getName())); emit incSnacSeq(); newMessage.sendAutoreply(tcpSocket, getCurrentAwayMessage(),*flapSeq, *snacSeq ); emit incFlapSeq(); } else { // emit userMessage(tr("%1 is reading your away message ( not from list )").arg(newMessage.from)); if ( m_notify_about_reading_status ) emit userMessage(newMessage.from, "", "", readNotification, false); } } else if (newMessage.messageType == 4) { bool playSound = true; messageFormat *msg = new messageFormat; msg->fromUin = newMessage.from; if ( buddyList.contains(msg->fromUin) ) { treeBuddyItem *buddy = buddyList.value(msg->fromUin); msg->from = buddy->getName(); // addImage( buddy->getUin(), buddy->groupID, newMessage.byteArrayMsg ); } else { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); treeGroupItem *group = groupList.value(0); msg->from = msg->fromUin; treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = 0; buddy->groupName = group->name; group->userCount++; group->updateText(); buddyList.insert(msg->fromUin, buddy); buddy->setBuddyUin(msg->fromUin); buddy->setName(msg->fromUin); buddy->updateBuddyText(); requestUinInformation(buddy->getUin()); settings.beginGroup(buddy->getUin()); settings.setValue("name", buddy->getUin()); settings.setValue("groupid", 0); settings.setValue("nickname", buddy->getName()); settings.endGroup(); addContactToCL(0,buddy->getUin(), buddy->getName()); QStringList contacts = settings.value("list/contacts").toStringList(); contacts<getUin(); settings.setValue("list/contacts", contacts); if ( contactListChanged && isMergeAccounts ) emit reupdateList(); } if (buddyList.contains(msg->fromUin)) { if ( buddyList.value(msg->fromUin)->UTF8 && newMessage.isValidUtf8(newMessage.byteArrayMsg)) msg->message = newMessage.msg; else if ( newMessage.isValidUtf8(newMessage.byteArrayMsg) ) msg->message = newMessage.msg; else msg->message = codec->toUnicode(newMessage.byteArrayMsg); } else { msg->message = newMessage.msg; } msg->date = QDateTime::currentDateTime(); addMessageFromContact(msg->fromUin, buddyList.contains(msg->fromUin)?buddyList.value(msg->fromUin)->groupID : 0 , msg->message, msg->date); sendMessageRecieved(msg->fromUin, newMessage.msgCookie); // if ( chatWindowList.contains(msg->fromUin)) // { // chatWindow *w = chatWindowList.value(msg->fromUin); // w->setMessage(msg->from,msg->message, msg->date); // if ( !disableButtonBlinking) // qApp->alert(w, 0); // if ( tabMode ) // generalChatWindow->setMessageTab(w); // if ( !w->isActiveWindow() ) // { // // if ( messageList.contains(msg->fromUin)) // messageList.value(msg->fromUin)->messageList.append(msg); // else // { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // if ( !disableTrayBlinking ) // emit getNewMessage(); // if ( ! dontShowEvents ) // { // if ( !dontShowIncomingMessagesInTrayEvents) // emit userMessage(msg->fromUin, msg->from, msg->message, // messageNotification, true); // else // emit userMessage(msg->fromUin, msg->from, tr("New message"), // messageNotification, true); // } // } // else if (!sounds->playIfChatWindowIsActive()) // playSound = false; // } // else // { // if ( messageList.contains(msg->fromUin)) // { // messageList.value(msg->fromUin)->messageList.append(msg); // } // else // { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // if ( dontShowIncomingMessagesInTrayEvents ) // emit userMessage(msg->fromUin, msg->from, msg->message, // messageNotification, true); // else // emit userMessage(msg->fromUin, msg->from, tr("New message"), // messageNotification, true); // // if ( !disableTrayBlinking ) // emit getNewMessage(); // } // if ( !newMessages ) // { // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // } // // if ( openNew ) // doubleClickedBuddy(buddyList.value(msg->fromUin)); if (playSound) { // play sound emit playSoundEvent(SoundEvent::MessageGet, currentStatus); }; delete msg; } else if ( newMessage.messageType == 7) { if ( buddyList.contains(newMessage.from)) { if ( m_notify_about_reading_status ) emit userMessage(newMessage.from, buddyList.value(newMessage.from)->getName(), "", xstatusReadNotification, true); setServiceMessageToWin(buddyList.value(newMessage.from)->getUin(), tr("%1 is reading your x-status message").arg(buddyList.value(newMessage.from)->getName())); emit incSnacSeq(); newMessage.sendXstatusReply(tcpSocket, icqUin, m_profile_name, *flapSeq, *snacSeq ); emit incFlapSeq(); } else { if ( m_notify_about_reading_status ) emit userMessage(newMessage.from, "", "", xstatusReadNotification, false); } } else if (newMessage.messageType == 8) { if ( buddyList.contains(newMessage.from) ) { treeBuddyItem *buddy = buddyList.value(newMessage.from); addImage( buddy->getUin(), buddy->groupID, newMessage.byteArrayMsg ); } } } void contactListTree::readMessageStack() { foreach(treeBuddyItem *item, messageList) { readMessageFrom(item); } } void contactListTree::setMessageIconToContact() { if ( !messageList.empty() ) { foreach(treeBuddyItem *item, messageList) { item->setMessageIcon(item->messageIcon); item->messageIcon = !item->messageIcon; } QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); } else { newMessages = false; } } void contactListTree::doubleClickedBuddy(treeBuddyItem *buddy) { if ( buddy->authorizeMe ) { openAuthReqFromBuddy(buddy); return; } // if ( messageList.contains(buddy->getUin()) ) // readMessageFrom(buddy); // else // { // if ( !chatWindowList.contains(buddy->getUin())) // { // chatWindow *winChat = new chatWindow(m_iconManager, m_profile_name); // winChat->setUin(icqUin); // winChat->setContactUin(buddy->getUin()); // connect( winChat, SIGNAL(destroyed ( QObject *)), // this, SLOT(deleteChatWindow(QObject *))); // connect( winChat, SIGNAL(sendMessage(const messageFormat &)), // this, SLOT(sendMessage(const messageFormat &))); // connect( winChat, SIGNAL(windowFocused(const QString &)), // this, SLOT(activateWindow(const QString &))); // winChat->setWindowTitle(buddy->getName()); //// winChat->setWindowIcon((statusIconClass::getInstance()->*(buddy->statusIconMethod))()); // winChat->setAttribute(Qt::WA_QuitOnClose, false); // winChat->setAttribute(Qt::WA_DeleteOnClose, true); // chatWindowList.insert(buddy->getUin(), winChat); // winChat->contactName = buddy->getName(); // initializeWindow(winChat); // if ( tabMode ) { // generalChatWindow->addChatWindow(winChat); // generalChatWindow->raise(); // generalChatWindow->activateWindow(); // generalChatWindow->setFocus(Qt::OtherFocusReason); // if ( generalChatWindow->isMinimized() ) // generalChatWindow->setWindowState(generalChatWindow->windowState() & ~Qt::WindowMinimized | Qt::WindowActive); // } else { // winChat->show(); // winChat->raise(); // winChat->activateWindow(); // winChat->setFocus(Qt::OtherFocusReason); // } // // // } else { // chatWindow *w = chatWindowList.value(buddy->getUin()); //// if ( !w->isActiveWindow() ) //// { //// if ( w->isMinimized() ) //// w->showNormal(); //// w->activateWindow(); //// if ( tabMode ) //// generalChatWindow->showWindow(w); //// } // // if ( !w->isActiveWindow() ) // { // if ( w->isMinimized() ) // w->setWindowState(w->windowState() & ~Qt::WindowMinimized | Qt::WindowActive); // // w->raise(); // w->activateWindow(); // w->setFocus(Qt::OtherFocusReason); // // if ( tabMode ) { // generalChatWindow->showWindow(w); // generalChatWindow->raise(); // generalChatWindow->activateWindow(); // generalChatWindow->setFocus(Qt::OtherFocusReason); // } // } // } // } } void contactListTree::readMessageFrom(treeBuddyItem *buddy) { // buddy->messageIcon = false; // bool addMessageToWindow = true; // if ( !chatWindowList.contains(buddy->getUin())) // { // chatWindow *winChat = new chatWindow(m_iconManager, m_profile_name); // winChat->setUin(icqUin); // winChat->setContactUin(buddy->getUin()); // connect( winChat, SIGNAL(destroyed ( QObject *)), // this, SLOT(deleteChatWindow(QObject *))); // connect( winChat, SIGNAL(sendMessage(const messageFormat &)), // this, SLOT(sendMessage(const messageFormat &))); // connect( winChat, SIGNAL(windowFocused(const QString &)), // this, SLOT(activateWindow(const QString &))); // winChat->setWindowIcon((statusIconClass::getInstance()->*(buddy->statusIconMethod))()); // winChat->setWindowTitle(buddy->getName()); // winChat->setAttribute(Qt::WA_QuitOnClose, false); // winChat->setAttribute(Qt::WA_DeleteOnClose, true); // chatWindowList.insert(buddy->getUin(), winChat); // winChat->contactName = buddy->getName(); // initializeWindow(winChat); // if ( tabMode ) { // generalChatWindow->addChatWindow(winChat); // generalChatWindow->raise(); // generalChatWindow->activateWindow(); // generalChatWindow->setFocus(Qt::OtherFocusReason); // if ( generalChatWindow->isMinimized() ) // generalChatWindow->setWindowState(generalChatWindow->windowState() & ~Qt::WindowMinimized | Qt::WindowActive); // } else { // winChat->show(); // winChat->raise(); // winChat->activateWindow(); // winChat->setFocus(Qt::OtherFocusReason); // } // } else { // addMessageToWindow = false; // // } // // if ( showRecent ) // addMessageToWindow = false; // chatWindow *w = chatWindowList.value(buddy->getUin()); // // if ( !w->isActiveWindow() ) // { // if ( w->isMinimized() ) // w->setWindowState(w->windowState() & ~Qt::WindowMinimized | Qt::WindowActive); // // w->raise(); // w->activateWindow(); // w->setFocus(Qt::OtherFocusReason); // // if ( tabMode ) { // generalChatWindow->showWindow(w); // generalChatWindow->raise(); // generalChatWindow->activateWindow(); // generalChatWindow->setFocus(Qt::OtherFocusReason); // } // } // // // // foreach(messageFormat *mesg, buddy->messageList) // { // if (addMessageToWindow ) // w->setMessage(mesg->from,mesg->message, mesg->date); // } // buddy->messageList.clear(); // buddy->setMessageIcon(false); // messageList.remove(buddy->getUin()); // if ( messageList.empty() ) // emit readAllMessages(); } void contactListTree::deleteChatWindow(QObject *obj) { // chatWindow *tempWindow = (chatWindow *)(obj); // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); // settings.setValue("chatwindow/size", tempWindow->size()); // chatWindowList.remove(chatWindowList.key(tempWindow)); } void contactListTree::deleteHistoryWindow(QObject *obj) { } void contactListTree::sendMessage(const messageFormat &msg) { if ( buddyList.contains(msg.fromUin ) ) { treeBuddyItem *buddy = buddyList.value(msg.fromUin); emit incSnacSeq(); icqMessage message(codepage); if ( buddy->getStatus()!= contactOffline ) if ( buddy->m_channel_two_support && buddyList.value(msg.fromUin)->UTF8) message.sendMessageChannel2(tcpSocket, msg,*flapSeq, *snacSeq, buddyList.value(msg.fromUin)->UTF8); else message.sendMessage(tcpSocket, msg,*flapSeq, *snacSeq, buddyList.value(msg.fromUin)->UTF8); else message.sendMessage(tcpSocket, msg,*flapSeq, *snacSeq, false); emit incFlapSeq(); messageCursorPositions.insert(message.msgCookie, msg.position); // play sound emit playSoundEvent(SoundEvent::MessageSend, currentStatus); } else { emit incSnacSeq(); icqMessage message(codepage); message.sendMessage(tcpSocket, msg,*flapSeq, *snacSeq, false); emit incFlapSeq(); } } void contactListTree::getOfflineMessage(quint16 orig_length) { socket->read(2); quint32 tempSenderUin = byteArrayToInt32(socket->read(4)); quint32 senderUin = (tempSenderUin % 0x100) * 0x1000000 + (tempSenderUin % 0x10000 / 0x100) * 0x10000 + (tempSenderUin % 0x1000000 / 0x10000) * 0x100 + (tempSenderUin / 0x1000000); messageFormat *msg = new messageFormat; msg->fromUin = QString::number(senderUin, 10); bool messageFromList; orig_length -= 6; bool ok; QDateTime offlineDateTime; quint16 year = (quint8)socket->read(1).toHex().toUShort(&ok, 16); year += ((quint8)socket->read(1).toHex().toUShort(&ok, 16) * 0x100); int month = (quint8)socket->read(1).toHex().toUShort(&ok, 16); int day = (quint8)socket->read(1).toHex().toUShort(&ok, 16); int hour = (quint8)socket->read(1).toHex().toUShort(&ok, 16); int min = (quint8)socket->read(1).toHex().toUShort(&ok, 16); QDate offlineDate(year, month, day); QTime offlineTime(hour, min); offlineDateTime.setDate(offlineDate); offlineDateTime.setTime(offlineTime); quint8 messageType = (quint8)socket->read(1).toHex().toUShort(&ok, 16); socket->read(1); quint16 tmpLength = byteArrayToInt16(socket->read(2)); quint16 length = (tmpLength % 0x100) * 0x100 + tmpLength / 0x100; orig_length -= 10; if ( !length ) length = orig_length; msg->message = codec->toUnicode(socket->read(length - 1)); QDateTime curTime = QDateTime::currentDateTime(); // TO-DO: What does this means? It seems calculating offset timestamp for offline messages. // It seems QT includes in local time not only offset from UTC time, but also Daylight Savings Time offset /*int offset = (curTime.toLocalTime().time().hour() - curTime.toUTC().time().hour()) * 3600 + (curTime.toLocalTime().time().minute() - curTime.toUTC().time().minute()) * 60;// - daylight * 3600; offlineDateTime = offlineDateTime.addSecs(offset);*/ offlineDateTime.setTimeSpec(Qt::UTC); offlineDateTime = offlineDateTime.toLocalTime().addSecs(-3600); msg->date = offlineDateTime; socket->read(1); if (!buddyList.contains(msg->fromUin)) { if ( messageType == 0x06 && !checkMessageForValidation(msg->fromUin, msg->message, 1)) { return; } if ( !checkMessageForValidation(msg->fromUin, msg->message, 0)) { return; } } // if ( !buddyList.contains(msg->fromUin) && getOnlyFromContactList) // { // if ( notifyAboutBlocked) // notifyBlockedMessage(msg->fromUin, msg->message); // // if ( saveServiceHistory ) // saveBlocked(msg->fromUin, msg->message, msg->date); // // return; // } // // if (!buddyList.contains(msg->fromUin) && blockAuth && messageType == 0x06) // { // return; // } // // // if (!buddyList.contains(msg->fromUin) && blockUrlMessage ) // { // if ( checkMessageForUrl(msg->message) || messageType == 0x04) // { // if ( notifyAboutBlocked && messageType != 0x04 ) // notifyBlockedMessage(msg->fromUin, msg->message); // return; // } // } // // if (!buddyList.contains(msg->fromUin) && enableAntiSpamBot ) // { // if (turnOnAntiSpamBot(msg->fromUin, msg->message, msg->date)) // return; // } if ( buddyList.contains(msg->fromUin) ) { treeBuddyItem *buddy = buddyList.value(msg->fromUin); msg->from = buddy->getName(); messageFromList = true; } else { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); treeGroupItem *group = groupList.value(0); msg->from = msg->fromUin; treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = 0; buddy->groupName = group->name; group->userCount++; group->updateText(); buddyList.insert(msg->fromUin, buddy); buddy->setBuddyUin(msg->fromUin); buddy->setName(msg->fromUin); buddy->updateBuddyText(); requestUinInformation(buddy->getUin()); settings.beginGroup(buddy->getUin()); settings.setValue("name", buddy->getUin()); settings.setValue("groupid", 0); settings.setValue("nickname", buddy->getName()); settings.endGroup(); addContactToCL(0,buddy->getUin(), buddy->getName()); QStringList contacts = settings.value("list/contacts").toStringList(); contacts<getUin(); settings.setValue("list/contacts", contacts); if ( contactListChanged && isMergeAccounts ) emit reupdateList(); messageFromList = false; } if ( messageType == 0x01 ) { addMessageFromContact(msg->fromUin, buddyList.contains(msg->fromUin)?buddyList.value(msg->fromUin)->groupID : 0 , msg->message, offlineDateTime); // if ( chatWindowList.contains(msg->fromUin)) // { // chatWindow *w = chatWindowList.value(msg->fromUin); // w->setMessage(msg->from,msg->message,offlineDateTime); // if ( !disableButtonBlinking ) // qApp->alert(w, 0); // // if ( !w->isActiveWindow() ) // { // if ( messageList.contains(msg->fromUin)) // { // messageList.value(msg->fromUin)->messageList.append(msg); // } else { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // if ( !disableTrayBlinking ) // emit getNewMessage(); // if ( ! dontShowEvents ) // emit userMessage(msg->fromUin, msg->from, msg->message, messageNotification, true); // } // // } else { // if ( messageList.contains(msg->fromUin)) // { // messageList.value(msg->fromUin)->messageList.append(msg); // } else { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // emit userMessage(msg->fromUin, msg->from, msg->message, messageNotification, true); // if ( !disableTrayBlinking ) // emit getNewMessage(); // } // // if ( !newMessages ) // { // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // } } // if ( openNew ) // doubleClickedBuddy(buddyList.value(msg->fromUin)); // msg->message = newMessage.msg; } void contactListTree::updateSorting() { foreach( treeGroupItem *group, groupList) { group->updateOnline(); } } void contactListTree::createContactList() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); getGroups = settings.value("list/group").toStringList(); getBuddies = settings.value("list/contacts").toStringList(); visibleList = settings.value("list/visible").toStringList(); invisibleList = settings.value("list/invisible").toStringList(); ignoreList = settings.value("list/ignore").toStringList(); if (getGroups.size()) { foreach(QString groupId, getGroups) { treeGroupItem *group = new treeGroupItem; group->setOnOffLists(); groupList.insert(groupId.toInt(), group); group->setGroupText(settings.value(groupId + "/name").toString()); addGroupToCL(groupId.toInt(), group->name); } createNil(); // Days to birthday int birthTo; if ( getBuddies.size()) { foreach(QString buddyUin, getBuddies) { int group_id = settings.value(buddyUin + "/groupid").toInt(); if ( treeGroupItem *group = groupList.value(group_id) ) { treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); initializeBuddy(buddy); settings.beginGroup(buddyUin); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = settings.value("groupid").toInt(); buddy->birth = !hideBirth; buddy->birthDay = QDate(settings.value("birthyear", 0).toInt(), settings.value("birthmonth", 0).toInt(), settings.value("birthday", 0).toInt()); // if birthday is comming -> play sound birthTo = QDate::currentDate().daysTo(buddy->birthDay); if ((birthTo >= 0) && (birthTo <= 3)) // we don't check if birthday sound has already been played // for today. SoundEvents class does it for us. notifyAboutBirthday(buddy->getUin(), buddy->groupID); buddy->groupName = group->name; group->userCount++; group->updateText(); buddyList.insert(buddyUin, buddy); buddy->setBuddyUin(buddyUin); buddy->setName(settings.value("nickname").toString()); addContactToCL(group_id, buddyUin, buddy->getName()); buddy->setAvatarHash(QByteArray::fromHex(settings.value("iconhash").toByteArray())); buddy->setNotAuthorizated(!settings.value("authorized",true).toBool()); buddy->lastonlineTime = settings.value("lastonline",0).toInt(); buddy->updateBuddyText(); settings.endGroup(); updateNil(); } } } } if ( clearNil ) clearNilUsers(); QStringList chatWithList = settings.value("list/chatwindow").toStringList(); foreach(QString buddyUin, chatWithList) { if ( buddyList.contains(buddyUin ) ) doubleClickedBuddy(buddyList.value(buddyUin)); } settings.remove("list/chatwindow"); setPrivacyIconsToContacts(); } void contactListTree::createSoundEvents() { } void contactListTree::createNil() { treeGroupItem *group = new treeGroupItem; group->setOnOffLists(); groupList.insert(0, group); group->setGroupText(""); } void contactListTree::updateNil() { } void contactListTree::goingOnline(bool iAmOnlineSignal) { TreeModelItem item; item.m_protocol_name = "ICQ"; item.m_account_name = icqUin; item.m_item_type = 2; m_icq_plugin_system.setAccountIsOnline(item, iAmOnlineSignal); if ( iAmOnline = iAmOnlineSignal ) { // foreach(chatWindow *w, chatWindowList) // w->setOnline(true); findUser->setEnabled(true); sendMultiple->setEnabled(true); changePassword->setEnabled(true); if ( privacyListWindowOpen) privacyWindow->setOnline(true); // privacyList->setEnabled(true); } else { fileTransferObject->disconnectFromAll(); visibleList.clear(); invisibleList.clear(); ignoreList.clear(); findUser->setEnabled(false); sendMultiple->setEnabled(false); changePassword->setEnabled(false); waitForIconUpload = false; if ( privacyListWindowOpen) privacyWindow->setOnline(false); // privacyList->setEnabled(false); foreach(treeBuddyItem *buddy, buddyList) { if ( !buddy->isOffline ) { treeGroupItem *group = groupList.value(buddy->groupID); buddy->buddyOffline(); updateChatBuddyStatus(buddy->getUin(), (statusIconClass::getInstance()->*(buddy->statusIconMethod))()); group->buddyOffline(); } } // foreach(chatWindow *w, chatWindowList) // w->setOnline(false); buddyConnection->disconnectFromSST(); avatarAddress.clear(); avatarCookie.clear(); avatartList.clear(); } } void contactListTree::loadSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); accountNickname = account_settings.value("main/nick", icqUin).toString(); disableAvatars = settings.value("connection/disavatars", false).toBool(); //messaging settings codepage = settings.value("general/codepage", "Windows-1251").toString(); codec = QTextCodec::codecForName(codepage.toLocal8Bit()); //status settings settings.beginGroup("statuses"); webAware = settings.value("webaware", false).toBool(); showXStatuses = settings.value("xstatus", true).toBool(); showXstatusesinToolTips = settings.value("xstattool", true).toBool(); m_notify_about_reading_status = settings.value("notify", true).toBool(); settings.endGroup(); settings.beginGroup("contacts"); m_show_xstatus_icon = settings.value("xstaticon", true).toBool(); m_show_birthday_icon = settings.value("birthicon", true).toBool(); m_show_auth_icon = settings.value("authicon", true).toBool(); m_show_vis_icon = settings.value("visicon", true).toBool(); m_show_invis_icon = settings.value("invisicon", true).toBool(); m_show_ignore_icon = settings.value("ignoreicon", true).toBool(); m_show_xstatus_text = settings.value("xstattext", true).toBool(); settings.endGroup(); } void contactListTree::createOnOffGroups() { } void contactListTree::removeGroups() { } void contactListTree::prepareForMerge() { } void contactListTree::showHideGroups() { } void contactListTree::prepareForShowGroups() { } void contactListTree::hideEmptyGroups(bool hide) { } void contactListTree::showOfflineUsers() { } void contactListTree::clearNilUsers() { if ( groupList.contains(0)) { groupList.value(0)->userCount = 0; groupList.value(0)->updateText(); QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); QStringList notNil = contacts.value("list/contacts").toStringList(); foreach(treeBuddyItem *buddy, buddyList) { if ( !buddy->groupID ) { removeContactFromCl(0,buddy->getUin()); notNil.removeAll(buddy->getUin()); contacts.remove(buddy->getUin()); getBuddies.removeAll(buddy->getUin()); buddyList.remove(buddy->getUin()); delete buddy; } } contacts.setValue("list/contacts", notNil); } } void contactListTree::updateBuddyListFlags() { foreach(treeBuddyItem *buddy, buddyList) { buddy->underline = !dontUnderlineNotAutho; buddy->birth = !hideBirth; buddy->updateBuddyText(); } } void contactListTree::updateGroupCustomFont() { foreach(treeGroupItem *group, groupList) group->setCustomFont(grpFont.fontFamily, grpFont.fontSize, grpFont.fontColor); } void contactListTree::updateContactsCustomFont() { } void contactListTree::msgSettingsChanged() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QString tmp_codepage = settings.value("general/codepage", "Windows-1251").toString(); if ( tmp_codepage == codepage ) return; codepage = tmp_codepage; codec = QTextCodec::codecForName(codepage.toLocal8Bit()); settings.beginGroup("messaging"); bool tbMd = settings.value("tab", true).toBool(); // if ( tabMode != tbMd ) // { // if ( tabMode = tbMd ) // { // generalChatWindow = new tabChatWindow(m_iconManager, this); // generalChatWindow->setAttribute(Qt::WA_QuitOnClose, false); // foreach(chatWindow *c, chatWindowList) // { // generalChatWindow->addChatWindow(c); // } // } // else // { // generalChatWindow->detachChildren(); // generalChatWindow->deleteChatWindows = false; // delete generalChatWindow; // foreach(chatWindow *c, chatWindowList) // { // c->show(); // } // } // } bool shNms = settings.value("chatnames", true).toBool(); quint8 tmstmp = settings.value("timestamp", 1).toInt(); bool onEnter = settings.value("onenter", false).toBool(); bool clsOnSnd = settings.value("closeonsend", false).toBool(); bool sndTpng = settings.value("typing", false).toBool(); // if ( showNames != shNms || timestamp != tmstmp || sendOnEnter != onEnter || // closeOnSend != clsOnSnd || sendTyping != sndTpng ) // { // showNames = shNms; // timestamp = tmstmp; // sendOnEnter = onEnter; // closeOnSend = clsOnSnd; // sendTyping = sndTpng; // foreach(chatWindow *w, chatWindowList) // { // w->showNames = showNames; // w->timestamp = timestamp; // w->setOnEnter(sendOnEnter); // w->closeOnSend = closeOnSend; // w->sendTyping = sendTyping; // } // // } dontShowEvents = settings.value("event", false).toBool(); openNew = settings.value("opennew", false).toBool(); // delete codec; lightChatView = settings.value("lightchat", false).toBool(); dontShowIncomingMessagesInTrayEvents = settings.value("dshowmsg", false).toBool(); settings.endGroup(); } void contactListTree::updateChatBuddyStatus(const QString &buddy, const QIcon &icon) { // if ( chatWindowList.contains(buddy) ) // { // if ( tabMode ) // { // generalChatWindow->updateStatusIcon(chatWindowList.value(buddy),icon); // } else { // chatWindowList.value(buddy)->setWindowIcon(icon); // } // } } void contactListTree::initializeWindow(chatWindow *w) { // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); // QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); // connect(w , SIGNAL(sendTypingNotification(const QString &, quint16)), // this, SLOT(sendTypingNotifications(const QString &, quint16))); // connect(w , SIGNAL(showHistory(const QString &)), // this, SLOT(showHistory(const QString &))); // connect(w , SIGNAL(openInfoWindow(const QString &)), // this, SLOT(openInfoWindow(const QString &))); // connect(w , SIGNAL(sendImage(const QString &,const QString &)), // this, SLOT(sendImage(const QString &,const QString &))); // connect(w , SIGNAL(sendFile(const QString &)), // this, SLOT(sendFileFromWindow(const QString &))); // connect(w , SIGNAL(sendFontSignal(const QFont&, const QColor &, const QColor &)), // this, SLOT(getChangeFontSignal(const QFont &, const QColor &, const QColor &))); // // QVariant fontCol = settings.value("chatwindow/fontcolor"); // QColor fontColor; // if ( fontCol.canConvert()) // fontColor = fontCol.value(); // // QVariant backCol = settings.value("chatwindow/backcolor"); // QColor backColor; // if ( backCol.canConvert()) // backColor = backCol.value(); // else // backColor.setRgb(255,255,255); // // QVariant chatFontVar = settings.value("chatwindow/font"); // QFont chatFont; // if ( chatFontVar.canConvert()) // chatFont = chatFontVar.value(); // // // /*Temp hack by Garfeild 17.07.2008 // *First time fill background of messageEdit by black colour, // *second time by user's or white. // */ // QColor tempColor; // tempColor.setRgb(0,0,0); // w->setWindowFont(chatFont, fontColor, tempColor); // w->setWindowFont(chatFont, fontColor, backColor); // // QString uin = w->chatWith; // // if ( buddyList.contains(uin) ) // { // treeBuddyItem *buddy = buddyList.value(uin); // QByteArray iconhash = buddy->getAvatarHash().toHex(); // if ( !iconhash.isEmpty()) // w->setAvatars(iconPath + iconhash); // // w->setContactName(buddy->getName()); // w->setContactClient(buddy->clientId); //// qDebug()<setContactNote(contacts.value(uin + "/note","").toString()); // } // // QByteArray iconhash = settings.value("main/iconhash").toByteArray(); // if ( !iconhash.isEmpty()) // w->setOwnerAvatar(iconPath + iconhash); // // w->accountNickName = accountNickname; // w->setOnline(iAmOnline); // w->restoreState(); // w->showNames = showNames; // w->timestamp = timestamp; // w->setOnEnter(sendOnEnter); // w->closeOnSend = closeOnSend; // w->setTyping(sendTyping); // w->lightVersion =lightChatView; // w->resize(settings.value("chatwindow/size", QSize(400,300)).toSize()); // if ( tabMode ) // { // if ( !generalChatWindow->count() ) // generalChatWindow->resize(settings.value("chatwindow/size", QSize(400,300)).toSize()); // } // // w->setEmoticonPath(emoticonXMLPath); // // if ( showRecent ) // { // if ( messageList.contains(w->chatWith) ) // { // if ( recentCount >= messageList.value(w->chatWith)->messageList.count() ) // historyObject->setRecentMessages(w, recentCount); // else // historyObject->setRecentMessages(w, messageList.value(w->chatWith)->messageList.count() ); // } // else // historyObject->setRecentMessages(w, recentCount); // } } void contactListTree::activateWindow(const QString &uin) { if ( messageList.contains(uin) ) { readMessageFrom(messageList.value(uin)); } } void contactListTree::requestUinInformation(const QString &uin) { emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.sendShortInfoReq(tcpSocket, *flapSeq, *snacSeq, *metaSeq, uin); int tmpMetaSeq = ((*metaSeq )% 0x100) * 0x100 + ((*metaSeq )/ 0x100); metaInfoRequestList.insert(tmpMetaSeq ,uin); emit incFlapSeq(); } quint16 contactListTree::byteArrayToLEInt16(const QByteArray &array) { bool ok; quint16 tmp = array.toHex().toUInt(&ok,16); return ((tmp % 0x100) * 0x100 + (tmp)/ 0x100); } void contactListTree::readShortInfo(const metaInformation &meta, quint16 metaSeq) { if ( waitForMineInfo && metaSeq == mineMetaSeq) { if ( meta.nick.size() ) accountNickname = codec->toUnicode(meta.nick); else accountNickname = icqUin; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); settings.setValue("main/nick", accountNickname); waitForMineInfo = false; } if ( metaInfoRequestList.contains(metaSeq) ) { treeBuddyItem *buddy = buddyList.value(metaInfoRequestList.value(metaSeq)); if ( meta.nick.size()) buddy->setName(codec->toUnicode(meta.nick)); else buddy->setName(buddy->getUin()); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); buddy->updateBuddyText(); settings.setValue(buddy->getUin() + "/nickname", buddy->getName()); metaInfoRequestList.remove(metaSeq); } } void contactListTree::readMetaData(quint16 length, bool notAlone) { quint16 metaSeq = byteArrayToInt16(socket->read(2)); quint16 dataSubType = byteArrayToInt16(socket->read(2)); metaInformation metaInfo(icqUin); quint8 success; switch( dataSubType ) { case 0x0401: length = length - 4 - metaInfo.readShortInfo(socket); readShortInfo(metaInfo, metaSeq); if ( length ) socket->read(length); break; case 0xc800: length = length - 4 - metaInfo.readBasicUserInfo(socket); readBasicUserInfo(metaInfo, metaSeq); fullIndoEnd(metaSeq, notAlone); if ( length ) socket->read(length); break; case 0xdc00: length = length - 4 - metaInfo.readMoreUserInfo(socket); readMoreUserInfo(metaInfo, metaSeq); fullIndoEnd(metaSeq, notAlone); if ( length ) socket->read(length); break; case 0xd200: length = length - 4 - metaInfo.readWorkUserInfo(socket); readWorkUserInfo(metaInfo, metaSeq); fullIndoEnd(metaSeq, notAlone); if ( length ) socket->read(length); break; case 0xf000: length = length - 4 - metaInfo.readInterestsUserInfo(socket); readInterestsUserInfo(metaInfo, metaSeq); fullIndoEnd(metaSeq, notAlone); if ( length > 0 ) socket->read(length); break; case 0xe600: length = length - 4 - metaInfo.readAboutUserInfo(socket); readAboutUserInfo(metaInfo, metaSeq); fullIndoEnd(metaSeq, notAlone); if ( length > 0 ) socket->read(length); break; case 0xeb00: fullIndoEnd(metaSeq, notAlone); socket->read(length - 4); break; case 0x0e01: fullIndoEnd(metaSeq, notAlone); socket->read(length - 4); break; case 0xfa00: fullIndoEnd(metaSeq, notAlone); socket->read(length - 4); break; case 0xa401: length = length - 4 - metaInfo.readSearchResult(socket, false); addSearchResult(false, metaInfo.founded, metaInfo.foundedUin, metaInfo.foundedNick, metaInfo.foundedFirst, metaInfo.foundedLast, metaInfo.foundedEmail, metaInfo.authFlag, metaInfo.foundedStatus, metaInfo.foundedGender, metaInfo.foundedAge); if ( length ) socket->read(length); break; case 0xae01: length = length - 4 - metaInfo.readSearchResult(socket, true); addSearchResult(true, metaInfo.founded, metaInfo.foundedUin, metaInfo.foundedNick, metaInfo.foundedFirst, metaInfo.foundedLast, metaInfo.foundedEmail, metaInfo.authFlag, metaInfo.foundedStatus, metaInfo.foundedGender, metaInfo.foundedAge); if ( length ) socket->read(length); break; case 0xaa00: success = convertToInt8(socket->read(1)); length--; if ( success == 0x0a ) emit sendSystemMessage(tr("Password is successfully changed")); else emit sendSystemMessage(tr("Password is not changed")); if ( length) socket->read(length); break; default: socket->read(length - 4); } } QByteArray contactListTree::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } void contactListTree::sendTypingNotifications(const QString &uin, quint16 type) { emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); snac snac0414; snac0414.setFamily(0x0004); snac0414.setSubType(0x0014); snac0414.setReqId(*snacSeq); quint16 length = 10; QByteArray typeNotif; typeNotif[0] = 0x00; typeNotif[1] = 0x00; typeNotif[2] = 0x00; typeNotif[3] = 0x00; typeNotif[4] = 0x00; typeNotif[5] = 0x00; typeNotif[6] = 0x00; typeNotif[7] = 0x00; typeNotif[8] = 0x00; typeNotif[9] = 0x01; typeNotif[10] = (quint8)(uin.length()); typeNotif.append(uin); typeNotif.append(convertToByteArray((quint16)type)); length += typeNotif.size(); packet.append(convertToByteArray((quint16)length)); packet.append(snac0414.getData()); packet.append(typeNotif); tcpSocket->write(packet); emit incFlapSeq(); } void contactListTree::getTypingNotification(quint16 length) { int tmpLength = 13; socket->read(8); quint16 channel = byteArrayToInt16(socket->read(2)); bool ok; quint8 uinlength = socket->read(1).toHex().toUInt(&ok, 16); QString uin(socket->read(uinlength)); quint16 notifType = byteArrayToInt16(socket->read(2)); if ( buddyList.contains( uin )) { if ( channel == 0x0001 ) { if ( notifType == 0x0002 ) { if ( !notifList.count() ) QTimer::singleShot(5000, this, SLOT(clearNotifList())); if ( !notifList.contains(uin) ) { notifList<groupID, true); // if ( chatWindowList.contains(uin) ) // { // // chatWindow *w = chatWindowList.value(uin); // if ( !dontShowEvents ) // { // if ( !w->isActiveWindow() && typingNot) //// emit userMessage(tr("%1 is typing").arg(buddyList.value(uin)->getName())); // emit userMessage(uin, buddyList.value(uin)->getName(), "", typingNotification, true); // } // // w->typingIcon(true); // // } else // { // if ( typingNot ) // emit userMessage(uin, buddyList.value(uin)->getName(), "", typingNotification, true); // } } } else if ( notifType == 0x0000) { contactTyping(uin, buddyList.value(uin)->groupID, false); // if ( chatWindowList.contains(uin) ) // { // chatWindowList.value(uin)->typingIcon(false); // } } } } else { contactTyping(uin, 0, true); if(typingNot) emit userMessage("", uin, "", typingNotification, false); // emit userMessage(tr("%1 is typing ( not from list )").arg(uin)); } tmpLength += uinlength; if ( length - tmpLength > 0 ) socket->read(length - tmpLength); } void contactListTree::statusSettingsChanged() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.beginGroup("statuses"); showXstatusesinToolTips = settings.value("xstattool", true).toBool(); bool wbAware = settings.value("webaware", false).toBool(); bool autoAw = settings.value("autoaway", true).toBool(); quint32 awMin = settings.value("awaymin", 10).toUInt(); m_notify_about_reading_status = settings.value("notify", true).toBool(); // bool shXStat = settings.value("xstatus", true).toBool(); if ( wbAware != webAware ) { webAware = wbAware; emit updateStatus(); } if ( autoAw != autoAway || awMin != awayMin ) { autoAway = autoAw; awayMin = awMin; emit restartAutoAway(autoAway, awayMin); } // if ( shXStat != showXStatuses) // { // showXStatuses = shXStat; // if ( showXStatuses) // { // foreach(treeBuddyItem *buddy, buddyList) // buddy->checkForXStatus(); // } else // { // foreach(treeBuddyItem *buddy, buddyList) // buddy->waitingForAuth(buddy->authorizeMe); // } // } emit updateStatusMenu(settings.value("customstat", true).toBool()); settings.endGroup(); } void contactListTree::initializeBuddy(treeBuddyItem * buddy ) { buddy->m_show_xstatus_icon = m_show_xstatus_icon; buddy->m_show_birthday_icon = m_show_birthday_icon; buddy->m_show_auth_icon = m_show_auth_icon; buddy->m_show_vis_icon = m_show_vis_icon; buddy->m_show_invis_icon = m_show_invis_icon; buddy->m_show_ignore_icon = m_show_ignore_icon; buddy->m_show_xstatus_text= m_show_xstatus_text; buddy->updateIcons(); } void contactListTree::changePrivacy(quint8 flag) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); settings.setValue("statuses/privacy", flag); emit incSnacSeq(); servicesSetup privacySetup(icqUin, m_profile_name); privacySetup.flap1309seq = *flapSeq; privacySetup.snac1309seq = *snacSeq; privacySetup.setPrivacy(icqUin, pdInfoID, pdInfoGroupId, tcpSocket); emit incFlapSeq(); } QString contactListTree::getCurrentAwayMessage() const { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); QString awayMessage; switch(currentStatus) { case away: awayMessage = settings.value("autoreply/awaymsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case lunch: awayMessage = settings.value("autoreply/lunchmsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case evil: awayMessage = settings.value("autoreply/evilmsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case depression: awayMessage = settings.value("autoreply/depressionmsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case athome: awayMessage = settings.value("autoreply/athomemsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case atwork: awayMessage = settings.value("autoreply/atworkmsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case na: awayMessage = settings.value("autoreply/namsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case occupied: awayMessage = settings.value("autoreply/occupiedmsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; case dnd: awayMessage = settings.value("autoreply/dndmsg", "").toString(); awayMessage.append(QChar(0x00)); return awayMessage; default: return QChar(0x00); } } void contactListTree::appExiting() { } void contactListTree::loadUnreadedMessages() { // QList msgList; // historyObject->loadUnreaded(&msgList); // // foreach(messageFormat msg, msgList) // { // // if ( buddyList.contains(msg.fromUin) ) // { // treeBuddyItem *buddy = buddyList.value(msg.fromUin); // msg.from = buddy->getName(); // } else { // // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); // // treeGroupItem *group = groupList.value(0); // msg.from = msg.fromUin; // treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); // // initializeBuddy(buddy); // buddy->underline = !dontUnderlineNotAutho; // buddy->groupID = 0; // buddy->groupName = group->name; // group->userCount++; // group->updateText(); // buddyList.insert(msg.fromUin, buddy); // buddy->setBuddyUin(msg.fromUin); // buddy->setName(msg.fromUin); // buddy->updateBuddyText(); // updateNil(); // requestUinInformation(buddy->getUin()); // settings.beginGroup(buddy->getUin()); // settings.setValue("name", buddy->getUin()); // settings.setValue("groupid", 0); // settings.setValue("nickname", buddy->getName()); // settings.endGroup(); // addContactToCL("",buddy->getUin(), buddy->getName()); // QStringList contacts = settings.value("list/contacts").toStringList(); // contacts<getUin(); // settings.setValue("list/contacts", contacts); // // } // // if ( chatWindowList.contains(msg.fromUin)) // { // chatWindow *w = chatWindowList.value(msg.fromUin); // w->setMessage(msg.from,msg.message, msg.date); // if ( !disableButtonBlinking ) // qApp->alert(w, 0); // if ( tabMode ) // generalChatWindow->setMessageTab(w); // if ( !w->isActiveWindow() ) // { // if ( messageList.contains(msg.fromUin)) // { // messageList.value(msg.fromUin)->messageList.append(new messageFormat(msg)); // } else { // messageList.insert(msg.fromUin, buddyList.value(msg.fromUin)); // messageList.value(msg.fromUin)->messageList.append(new messageFormat(msg)); // } // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // if ( !messageList.isEmpty() && !disableTrayBlinking) // QTimer::singleShot(500, this, SIGNAL(getNewMessage())); // } // // } else { // if ( messageList.contains(msg.fromUin)) // { // messageList.value(msg.fromUin)->messageList.append(new messageFormat(msg)); // } else { // messageList.insert(msg.fromUin, buddyList.value(msg.fromUin)); // messageList.value(msg.fromUin)->messageList.append(new messageFormat(msg)); // } // if ( !messageList.isEmpty() && !disableTrayBlinking) // QTimer::singleShot(500, this, SIGNAL(getNewMessage())); // } // if ( !newMessages ) // { // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // } // // if ( openNew ) // doubleClickedBuddy(buddyList.value(msg.fromUin)); // // } } void contactListTree::showHistory(const QString &uin) { } void contactListTree::showServiceHistory() { } void contactListTree::setServiceMessageToWin(const QString &uin, const QString &msg) { if ( buddyList.contains(uin) ) { treeBuddyItem *buddy = buddyList.value(uin); addServiceMessage(uin, buddy->groupID, msg); } } void contactListTree::setHideSeparators(bool hide) { } void contactListTree::startChatWith(const QString &uin) { if ( buddyList.contains(uin) ) { doubleClickedBuddy(buddyList.value(uin)); } } bool contactListTree::checkBuddyPictureHash(const QByteArray &hash) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); return QFile::exists(settings.fileName().section('/', 0, -2) + "/icqicons/" + hash.toHex()); } void contactListTree::askForAvatars(const QByteArray &hash, const QString &uin) { if ( !hash.isEmpty() && (hash.size() == 16 )) { if ( !checkBuddyPictureHash(hash) ) { QHostAddress hostAddr = QHostAddress(avatarAddress); if ( !hostAddr.isNull()) { if ( !buddyConnection->connectedToServ ) { avatartList.insert(uin, hash); buddyConnection->connectToServ(avatarAddress, avatarPort, avatarCookie, tcpSocket->proxy()); } else { if ( buddyConnection->canSendReqForAvatars ) { buddyConnection->sendHash(uin,hash); } else { avatartList.insert(uin, hash); } } } else { avatartList.insert(uin, hash); } // emit incSnacSeq(); // buddyPicture pic; // pic.sendHash(tcpSocket, uin, hash, *flapSeq, *snacSeq); // emit incFlapSeq(); } else { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); settings.setValue(uin + "/iconhash", hash.toHex()); } } } void contactListTree::sendReqForRedirect() { emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)12)); snac snac0104; snac0104.setFamily(0x0001); snac0104.setSubType(0x0004); snac0104.setReqId(*snacSeq); packet.append(snac0104.getData()); packet.append(convertToByteArray((quint16)0x0010)); emit incFlapSeq(); tcpSocket->write(packet); } void contactListTree::readSSTserver(quint16 length) { socket->read(2); length -= 2; quint16 familyID = 0; for ( ;length > 0; ) { tlv tmpTlv; tmpTlv.readData(socket); length -= tmpTlv.getLength(); switch(tmpTlv.getTlvType()) { case 0x000d: familyID = byteArrayToInt16(tmpTlv.getTlvData()); break; case 0x0005: avatarAddress = tmpTlv.getTlvData(); break; case 0x0006: avatarCookie = tmpTlv.getTlvData(); break; default: ; } } if ( familyID != 0x0010 ) { avatarPort = 0; } else avatarPort = tcpSocket->peerPort(); if ( length ) socket->read(length); if ( avatartList.count() || waitForIconUpload ) { QHostAddress hostAddr = QHostAddress(avatarAddress); if ( !hostAddr.isNull()) if ( !buddyConnection->connectedToServ ) buddyConnection->connectToServ(avatarAddress, avatarPort, avatarCookie, tcpSocket->proxy()); } if ( !disableAvatars ) { QHostAddress hostAddr = QHostAddress(avatarAddress); if ( !hostAddr.isNull()) if ( !buddyConnection->connectedToServ ) buddyConnection->connectToServ(avatarAddress, avatarPort, avatarCookie, tcpSocket->proxy()); } } void contactListTree::emptyAvatarList() { if ( avatartList.count() ) { foreach(QString uin, avatartList.keys() ) { askForAvatars(avatartList.value(uin), uin); } avatartList.clear(); } if ( waitForIconUpload ) { buddyConnection->uploadIcon(ownIconPath); waitForIconUpload = false; } } void contactListTree::updateAvatar(const QString &uin, QByteArray hash) { if ( buddyList.contains(uin) ) { buddyList.value(uin)->setAvatarHash(hash); } } void contactListTree::notifyBlockedMessage(const QString &from, const QString &message) { emit userMessage(from, from, message, blockedMessage, false); } void contactListTree::saveBlocked(const QString &from, const QString& msg, const QDateTime &date) { } bool contactListTree::checkMessageForUrl(const QString &msg) { bool containsURLs = false; containsURLs = msg.contains("http:", Qt::CaseInsensitive) ? true : containsURLs; containsURLs = msg.contains("ftp:", Qt::CaseInsensitive) ? true : containsURLs; containsURLs = msg.contains("www.", Qt::CaseInsensitive) ? true : containsURLs; return containsURLs; } bool contactListTree::turnOnAntiSpamBot(const QString &from, const QString &msg, const QDateTime &date) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); quint32 privacy = settings.value("statuses/privacy", 4).toUInt(); if ( notifyAboutBlocked) notifyBlockedMessage(from, msg); if ( saveServiceHistory ) saveBlocked(from, msg, date); if ( dontAnswerBotIfInvis && (currentStatus == invisible || privacy == 5) ) return true; if ( msg == answer) { messageFormat sendAnswerMessage; sendAnswerMessage.fromUin = from; sendAnswerMessage.message = messageAfterAnswer; emit incSnacSeq(); icqMessage message(codepage); message.sendMessage(tcpSocket, sendAnswerMessage,*flapSeq, *snacSeq, false); emit incFlapSeq(); blockedBotList.removeAll(from); return false; } if ( !blockedBotList.contains(from) ) { blockedBotList.append(from); messageFormat sendAnswerMessage; sendAnswerMessage.fromUin = from; sendAnswerMessage.message = question; emit incSnacSeq(); icqMessage message(codepage); message.sendMessage(tcpSocket, sendAnswerMessage,*flapSeq, *snacSeq, false); emit incFlapSeq(); return true; } return true; } void contactListTree::setAvatarDisabled(bool disable) { disableAvatars = disable; } void contactListTree::initializaMenus(QMenu *accountAdditionalMenu) { // serviceMessages = new QAction(m_icq_plugin_system.getIcon(""), icqUin, this); // connect(serviceMessages, SIGNAL(triggered()), this, SLOT(showServiceHistory())); findUser = new QAction(m_icq_plugin_system.getIcon("search"), tr("Add/find users"), this); connect(findUser, SIGNAL(triggered()), this, SLOT(findAddUser())); findUser->setEnabled(false); sendMultiple = new QAction(m_icq_plugin_system.getIcon("multiple"), tr("Send multiple"), this); connect(sendMultiple, SIGNAL(triggered()), this, SLOT(sendMultipleWindow())); sendMultiple->setEnabled(false); privacyList = new QAction(m_icq_plugin_system.getIcon("privacylist"), tr("Privacy lists"), this); connect(privacyList, SIGNAL(triggered()), this, SLOT(openPrivacyWindow())); // privacyList->setEnabled(false); selfInfo = new QAction(m_icq_plugin_system.getIcon("changedetails"), tr("View/change my details"), this); connect(selfInfo, SIGNAL(triggered()), this, SLOT(openSelfInfo())); changePassword = new QAction(m_icq_plugin_system.getIcon("password"), tr("Change my password"), this); connect(changePassword, SIGNAL(triggered()), this, SLOT(openChangePasswordDialog())); changePassword->setEnabled(false); accountAdditionalMenu->addAction(findUser); // accountAdditionalMenu->addAction(serviceMessages); accountAdditionalMenu->addAction(sendMultiple); accountAdditionalMenu->addAction(privacyList); accountAdditionalMenu->addAction(selfInfo); accountAdditionalMenu->addAction(changePassword); } void contactListTree::findAddUser() { searchWin = new searchUser (m_profile_name); connect ( searchWin, SIGNAL(openChatWithFounded(const QString &, const QString &)), this, SLOT(openChatWindowWithFounded(const QString &, const QString &))); connect ( searchWin, SIGNAL(openInfoWindow(const QString &, const QString &, const QString &, const QString &)), this, SLOT(openInfoWindow(const QString &, const QString &, const QString &, const QString &))); connect( searchWin, SIGNAL(checkStatusFor(const QString &)), this, SLOT(checkStatusFor(const QString &))); connect( searchWin, SIGNAL(addUserToContactList(const QString &, const QString &, bool)), this, SLOT(addUserToList(const QString &, const QString &,bool))); findUserWindowOpen = true; searchWin->setAttribute(Qt::WA_QuitOnClose, false); searchWin->setAttribute(Qt::WA_DeleteOnClose, true); connect( searchWin, SIGNAL(destroyed ( QObject *)), this, SLOT(findUserWindowClosed(QObject *))); connect( searchWin, SIGNAL(findAskedUsers(int)), this, SLOT(searchForUsers(int))); findUser->setEnabled(false); searchWin->show(); } void contactListTree::findUserWindowClosed(QObject */*obj*/) { findUserWindowOpen = false; findUser->setEnabled(true); } void contactListTree::searchForUsers(int index) { if ( tcpSocket->state() == QAbstractSocket::ConnectedState) { if ( index == 0) { emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.searchByUin(tcpSocket, *flapSeq, *snacSeq, *metaSeq, searchWin->getUin()); emit incFlapSeq(); } else if ( index == 1 ) { emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.searchByEmail(tcpSocket, *flapSeq, *snacSeq, *metaSeq, searchWin->getEmail()); emit incFlapSeq(); } else if (index == 2) { emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.searchByOther(tcpSocket, *flapSeq, *snacSeq, *metaSeq, searchWin->onlineOnly(), codec->fromUnicode(searchWin->getNick()), codec->fromUnicode(searchWin->getFirst()), codec->fromUnicode(searchWin->getLast()), searchWin->gender, searchWin->minAge, searchWin->maxAge, searchWin->countryCode, codec->fromUnicode(searchWin->getCity()), searchWin->interestsCode, searchWin->languageCode, searchWin->occupationCode, codec->fromUnicode(searchWin->getKeyWords())); emit incFlapSeq(); } } } void contactListTree::addSearchResult(bool last, bool founded, const QString &uin, const QString &nick, const QString &firstName, const QString &lastName, const QString &email, const quint8 &authFlag, const quint16 &status, const quint8 &gender, const quint16 &age) { QByteArray nickArray; nickArray.append(nick); QByteArray firstArray; firstArray.append(firstName); QByteArray lastArray; lastArray.append(lastName); if ( findUserWindowOpen ) searchWin->addFoundedContact(last,founded, uin, codec->toUnicode(nickArray), codec->toUnicode(firstArray), codec->toUnicode(lastArray), email, authFlag, status, gender, age); } void contactListTree::openChatWindowWithFounded(const QString &uin, const QString &nick) { if ( buddyList.contains(uin) ) { createChat(uin, buddyList.value(uin)->groupID); // doubleClickedBuddy(buddyList.value(uin)); } else { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); treeGroupItem *group = groupList.value(0); treeBuddyItem *buddy = new treeBuddyItem(icqUin,m_profile_name); initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = 0; buddy->groupName = group->name; group->userCount++; group->updateText(); buddyList.insert(uin, buddy); buddy->setBuddyUin(uin); buddy->setName(nick); buddy->updateBuddyText(); updateNil(); // requestUinInformation(buddy->getUin()); settings.beginGroup(buddy->getUin()); settings.setValue("name", buddy->getUin()); settings.setValue("groupid", 0); settings.setValue("nickname",nick); settings.endGroup(); addContactToCL(0, buddy->getUin(), buddy->getName()); QStringList contacts = settings.value("list/contacts").toStringList(); contacts<getUin(); settings.setValue("list/contacts", contacts); createChat(uin, 0); //doubleClickedBuddy(buddy); } } void contactListTree::openInfoWindow(const QString &uin, const QString &nick, const QString &firstName, const QString &lastName) { if ( infoWindowList.contains(uin) && uin != icqUin) return; userInformation *infoWin; if ( buddyList.contains(uin)) { infoWin = new userInformation(m_profile_name, false, true, uin, icqUin); treeBuddyItem *buddy = buddyList.value(uin); infoWin->setAdditional(buddy->externalIP, buddy->internalIP, buddy->onlineTime, buddy->signonTime, buddy->regTime, buddy->idleSinceTime, buddy->getStatus(), buddy->clientId, buddy->capabilitiesList, buddy->shortCaps, buddy->lastInfoUpdate, buddy->lastExtStatusInfoUpdate, buddy->lastExtInfoUpdate, !buddy->isOffline, buddy->protocolVersion, buddy->userPort, buddy->Cookie); if ( iAmOnline) askForFullUserInfo(uin); } else { if ( uin == icqUin ) { infoWin = new userInformation(m_profile_name, true, true, uin, icqUin); selfInfo->setEnabled(false); } else { infoWin = new userInformation(m_profile_name, false, false, uin, icqUin); } } infoWin->setAttribute(Qt::WA_QuitOnClose, false); infoWin->setAttribute(Qt::WA_DeleteOnClose, true); connect( infoWin, SIGNAL(destroyed ( QObject *)), this, SLOT(infoUserWindowClosed(QObject *))); connect( infoWin, SIGNAL(requestUserInfo(const QString &)), this, SLOT(askForFullUserInfo(const QString &))); connect( infoWin, SIGNAL(saveOwnerInfo(bool,const QString &)), this, SLOT(saveOwnerInfo(bool, const QString &))); infoWindowList.insert(uin, infoWin); if ( !buddyList.contains(uin) ) { infoWin->setNick(nick); infoWin->setFirst(firstName); infoWin->setLast(lastName); askForFullUserInfo(uin); } infoWin->show(); } void contactListTree::infoUserWindowClosed(QObject *obj) { userInformation *tempWindow = (userInformation *)(obj); if ( tempWindow->contactUin == icqUin ) selfInfo->setEnabled(true); infoWindowList.remove(infoWindowList.key(tempWindow)); } void contactListTree::askForFullUserInfo(const QString &uin) { emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.getFullUserInfo(tcpSocket, *flapSeq, *snacSeq, *metaSeq, uin); int tmpMetaSeq = ((*metaSeq )% 0x100) * 0x100 + ((*metaSeq )/ 0x100); fullInfoRequests.insert(tmpMetaSeq ,uin); emit incFlapSeq(); } void contactListTree::readBasicUserInfo(const metaInformation &metInfo, quint16 metSeqNum) { if ( infoWindowList.contains(fullInfoRequests.value(metSeqNum)) && metInfo.basicInfoSuccess) { userInformation *infoWin = infoWindowList.value(fullInfoRequests.value(metSeqNum)); infoWin->setNick(codec->toUnicode(metInfo.basicNick)); infoWin->setFirst(codec->toUnicode(metInfo.basicFirst)); infoWin->setLast(codec->toUnicode(metInfo.basicLast)); infoWin->setEmail(codec->toUnicode(metInfo.basicEmail)); infoWin->setHomeCity(codec->toUnicode(metInfo.basicCity)); infoWin->setHomeState(codec->toUnicode(metInfo.basicState)); infoWin->setHomePhone(codec->toUnicode(metInfo.basicPhone)); infoWin->setHomeFax(codec->toUnicode(metInfo.basicFax)); infoWin->setHomeAddress(codec->toUnicode(metInfo.basicAddress)); infoWin->setCell(codec->toUnicode(metInfo.basicCell)); infoWin->setHomeZip(codec->toUnicode(metInfo.basicZip)); infoWin->setCountry(metInfo.country); infoWin->setAuth(metInfo.basicAuthFlag, metInfo.webAware, metInfo.publishEmail); } if ( !metInfo.basicInfoSuccess ) fullIndoEnd(metSeqNum, false); } void contactListTree::fullIndoEnd(quint16 metaSeqNum, bool notAlone) { if ( !notAlone ) { if ( infoWindowList.contains(fullInfoRequests.value(metaSeqNum))) infoWindowList.value(fullInfoRequests.value(metaSeqNum))->enableRequestButton(); fullInfoRequests.remove(metaSeqNum); } } void contactListTree::readMoreUserInfo(const metaInformation &metInfo, quint16 metSeqNum) { if ( infoWindowList.contains(fullInfoRequests.value(metSeqNum)) && metInfo.moreInfoSuccess) { userInformation *infoWin = infoWindowList.value(fullInfoRequests.value(metSeqNum)); infoWin->setAge(metInfo.moreAge); infoWin->setGender(metInfo.moreGender); infoWin->setHomePage(codec->toUnicode(metInfo.homepage)); infoWin->setBirthDay(metInfo.moreBirthYear, metInfo.moreBirthMonth, metInfo.moreBirthDay); infoWin->setLang(1, metInfo.moreLang1); infoWin->setLang(2, metInfo.moreLang2); infoWin->setLang(3, metInfo.moreLang3); infoWin->setOriginalCity(codec->toUnicode(metInfo.moreCity)); infoWin->setOriginalState(codec->toUnicode(metInfo.moreState)); infoWin->setOriginalCountry(metInfo.moreCountry); } if ( !metInfo.moreInfoSuccess) fullIndoEnd(metSeqNum, false); } void contactListTree::readWorkUserInfo(const metaInformation &metInfo, quint16 metSeqNum) { if ( infoWindowList.contains(fullInfoRequests.value(metSeqNum)) && metInfo.workInfoSuccess) { userInformation *infoWin = infoWindowList.value(fullInfoRequests.value(metSeqNum)); infoWin->setWorkCity(codec->toUnicode(metInfo.workCity)); infoWin->setWorkState(codec->toUnicode(metInfo.workState)); infoWin->setWorkPhone(codec->toUnicode(metInfo.workPhone)); infoWin->setWorkFax(codec->toUnicode(metInfo.workFax)); infoWin->setWorkAddress(codec->toUnicode(metInfo.workAddress)); infoWin->setWorkZip(codec->toUnicode(metInfo.workZip)); infoWin->setWorkCountry(metInfo.workCountry); infoWin->setWorkCompany(codec->toUnicode(metInfo.workCompany)); infoWin->setWorkDepartment(codec->toUnicode(metInfo.workDepartment)); infoWin->setWorkPosition(codec->toUnicode(metInfo.workPosition)); infoWin->setWorkOccupation(metInfo.workOccupation); infoWin->setWorkWebPage(codec->toUnicode(metInfo.workWebPage)); } if ( !metInfo.workInfoSuccess) fullIndoEnd(metSeqNum, false); } void contactListTree::readInterestsUserInfo(const metaInformation &metInfo, quint16 metSeqNum) { if ( infoWindowList.contains(fullInfoRequests.value(metSeqNum)) && metInfo.interestsInfoSuccess) { userInformation *infoWin = infoWindowList.value(fullInfoRequests.value(metSeqNum)); infoWin->setInterests(codec->toUnicode(metInfo.interKeyWords1), metInfo.interCode1, 1); infoWin->setInterests(codec->toUnicode(metInfo.interKeyWords2), metInfo.interCode2, 2); infoWin->setInterests(codec->toUnicode(metInfo.interKeyWords3), metInfo.interCode3, 3); infoWin->setInterests(codec->toUnicode(metInfo.interKeyWords4), metInfo.interCode4, 4); } if ( !metInfo.interestsInfoSuccess) fullIndoEnd(metSeqNum, false); } void contactListTree::readAboutUserInfo(const metaInformation &metInfo, quint16 metSeqNum) { if ( infoWindowList.contains(fullInfoRequests.value(metSeqNum)) && metInfo.aboutInfoSuccess) { userInformation *infoWin = infoWindowList.value(fullInfoRequests.value(metSeqNum)); infoWin->setAboutInfo(codec->toUnicode(metInfo.about)); } if ( !metInfo.aboutInfoSuccess) fullIndoEnd(metSeqNum, false); } void contactListTree::checkStatusFor(const QString &uin) { emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)(15 + uin.length()))); snac snac0215; snac0215.setFamily(0x0002); snac0215.setSubType(0x0015); snac0215.setReqId(*snacSeq); packet.append(snac0215.getData()); packet.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)0x0005)); packet[packet.size()] = (quint8)uin.length(); packet.append(uin); tcpSocket->write(packet); emit incFlapSeq(); } void contactListTree::getStatusCheck(quint16 length) { quint8 uinLength = convertToInt8(socket->read(1)); length --; QString uin = socket->read(uinLength); length -= uinLength; socket->read(2); length -= 2; quint16 arraySize = byteArrayToInt16(socket->read(2)); length -= 2; bool statusPresent = false; tlv tlv06; for ( int i = 0; i < arraySize; i++ ) { tlv tmpTlv; tmpTlv.readData(socket); if ( tmpTlv.getTlvType() == 0x0006) { tlv06 = tmpTlv; statusPresent = true; } length -= tmpTlv.getLength(); } QString statusString; if ( statusPresent ) { quint16 userstatus = tlv06.getTlvData().at(2) * 0x100 + tlv06.getTlvData().at(3); switch ( userstatus ) { case 0x0000: statusString = convertToStringStatus(contactOnline); break; case 0x0001: statusString = convertToStringStatus(contactAway); break; case 0x0002: case 0x0013: statusString = convertToStringStatus(contactDnd); break; case 0x0004: case 0x0005: statusString = convertToStringStatus(contactNa); break; case 0x0010: case 0x0011: statusString = convertToStringStatus(contactOccupied); break; case 0x0020: statusString = convertToStringStatus(contactFfc); break; case 0x0100: statusString = convertToStringStatus(contactInvisible); break; case 0x2001: statusString = convertToStringStatus(contactLunch); break; case 0x3000: statusString = convertToStringStatus(contactEvil); break; case 0x4000: statusString = convertToStringStatus(contactDepression); break; case 0x5000: statusString = convertToStringStatus(contactAtHome); break; case 0x6000: statusString = convertToStringStatus(contactAtWork); break; default: statusString = convertToStringStatus(contactOnline); } } else { statusString = tr("is offline"); } if ( length ) socket->read(length); if ( buddyList.contains(uin)) emit userMessage(uin, buddyList.value(uin)->getName(), statusString, customMessage, true); // else if( !buddyList.contains(uin) && !uin.isEmpty() ) { emit userMessage(uin, uin, statusString, statusNotyfication, true); } } quint8 contactListTree::convertToInt8(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } void contactListTree::addUserToList(const QString &uin, const QString &nick, bool authReq) { if ( tcpSocket->state() == QAbstractSocket::ConnectedState ) { quint16 groupId = 1; if ( buddyList.contains(uin) ) groupId = buddyList.value(uin)->groupID; if ( !buddyList.contains(uin) || !groupId) { addBuddyDialog addDialog; addDialog.setTitle(uin); QStringList groups; foreach (treeGroupItem *group, groupList) { if ( groupList.key(group)) groups<name; } addDialog.setContactData(nick, groups); if ( addDialog.exec() ) { if ( !groupId) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); QStringList contactList = contacts.value("list/contacts").toStringList(); contactList.removeAll(uin); contacts.setValue("list/contacts", contactList); contacts.remove(uin); treeBuddyItem *buddy = buddyList.value(uin); idBuddyList.removeAll(buddy->itemId); if ( infoWindowList.contains(uin) ) { infoWindowList.value(uin)->close(); infoWindowList.remove(uin); } // if ( chatWindowList.contains(uin) ) // { // chatWindowList.value(uin)->close(); // chatWindowList.remove(uin); // } quint16 groupCount; QString groupName; treeGroupItem *group = groupList.value(buddy->groupID); group->buddiesList.removeAll(buddy->itemId); group->userCount--; group->updateText(); groupCount = group->buddiesList.count(); groupName = group->name; removeContactFromCl(buddy->groupID,uin); buddyList.remove(uin); delete buddy; } sendUserAddReq(uin, addDialog.getNick(), authReq, addDialog.getGroup()); } } } } void contactListTree::sendUserAddReq(const QString &uin, QString nick, bool authReq, const QString &groupName) { quint16 groupId = 0; foreach(treeGroupItem *group, groupList) { if ( groupName == group->name) groupId = groupList.key(group); } if ( !groupId) return; quint16 userId = rand() % 0x03e6; for ( ;idBuddyList.contains(userId);) userId = rand() % 0x03e6; if (nick.trimmed().isEmpty()) nick = uin; QByteArray editPack; emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); if (authReq) packet.append(convertToByteArray((quint16)14)); else packet.append(convertToByteArray((quint16)10)); snac snac1311; snac1311.setFamily(0x0013); snac1311.setSubType(0x0011); snac1311.setReqId(*snacSeq); packet.append(snac1311.getData()); if ( authReq ) { packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0000)); } emit incFlapSeq(); editPack.append(packet); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); if ( authReq) packet2.append(convertToByteArray((quint16)(28 + uin.length() + nick.toUtf8().length()))); else packet2.append(convertToByteArray((quint16)(24 + uin.length() + nick.toUtf8().length()))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0008); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)uin.length())); packet2.append(uin); packet2.append(convertToByteArray((quint16)groupId)); packet2.append(convertToByteArray((quint16)userId)); packet2.append(convertToByteArray((quint16)0x0000)); if ( authReq ) packet2.append(convertToByteArray((quint16)(8 + nick.toUtf8().length()))); else packet2.append(convertToByteArray((quint16)(4 + nick.toUtf8().length()))); packet2.append(convertToByteArray((quint16)0x0131)); packet2.append(convertToByteArray((quint16)nick.toUtf8().length())); packet2.append(nick.toUtf8()); if ( authReq ) { packet2.append(convertToByteArray((quint16)0x0066)); packet2.append(convertToByteArray((quint16)0x0000)); } emit incFlapSeq(); editPack.append(packet2); tcpSocket->write(editPack); modifyObject addBuddy; addBuddy.itemId = userId; addBuddy.groupId = groupId; addBuddy.itemType = 0; addBuddy.operation = 0; addBuddy.buddyUin = uin; addBuddy.buddyName = nick; addBuddy.authReq = authReq; modifyReqList.append(addBuddy); // treeGroupItem *group = groupList.value(0); // treeBuddyItem *buddy; // if ( showGroups ) // buddy = new treeBuddyItem(statusIconObject->getOfflineIcon(), this, group->offlineList); // else // buddy = new treeBuddyItem(statusIconObject->getOfflineIcon(), this, offlineList); // initializeBuddy(buddy); // if ( authReq) // buddy->notAutho = true; // buddy->underline = !dontUnderlineNotAutho; // buddy->groupID = 0; // buddy->groupName = group->name; // buddyList.insert(uin, buddy); // buddy->setBuddyUin(uin); // buddy->setName(nick); // buddy->updateBuddyText(); // buddy->setCustomFont(offFont.fontFamily, offFont.fontSize, offFont.fontColor); // buddy->setHidden(true); } void contactListTree::getModifyItemFromServer(quint16 length) { // socket->read(8); // length -= 8; // // quint16 itemLength = byteArrayToInt16(socket->read(2)); // length -= 2; // // QString itemName = QString::fromUtf8(socket->read(itemLength)); // // length -= itemLength; // // quint16 groupId = byteArrayToInt16(socket->read(2)); // length -= 2; // // quint16 itemId= byteArrayToInt16(socket->read(2)); // length -= 2; // // quint16 itemType = byteArrayToInt16(socket->read(2)); // length -= 2; // // quint16 tlvLength = byteArrayToInt16(socket->read(2)); // length -= 2; // // tlv nameTlv; // bool namePresent = false; // // for(;tlvLength > 0;) // { // tlv tmpTlv; // tmpTlv.readData(socket); // length -= tmpTlv.getLength(); // tlvLength -= tmpTlv.getLength(); // // if ( tmpTlv.getTlvType() == 0x0131) // { // nameTlv = tmpTlv; // namePresent = true; // } // } // // if ( length ) // socket->read(length); socket->read(8); length -= 8; int count = length / 2; for ( int i = 0; i < count; i++) { quint16 code = byteArrayToInt16(socket->read(2)); length -= 2; if ( modifyReqList.count()) { if ( code == 0x0000 ) { modifyObject tmpObject = modifyReqList.at(0); if ( tmpObject.itemType == 0 && tmpObject.operation == 0) { addModifiedBuddyToGroup(tmpObject.groupId, tmpObject.itemId, tmpObject.buddyUin, tmpObject.authReq, tmpObject.buddyName); } else if ( tmpObject.itemType == 1 && tmpObject.groupId && tmpObject.operation == 0) { addNewGroupToRoot(tmpObject.buddyName, tmpObject.groupId); } else if ( tmpObject.itemType == 1 && tmpObject.groupId && tmpObject.operation == 1) { renameGroupToName(tmpObject.buddyName, tmpObject.groupId); } else if ( tmpObject.itemType == 1 && tmpObject.groupId && tmpObject.operation == 2) { deleteSelectedGroup(tmpObject.groupId); } else if ( tmpObject.itemType == 0 && tmpObject.operation == 1) { renameContact(tmpObject.buddyUin, tmpObject.buddyName); } else if ( tmpObject.itemType == 0 && tmpObject.operation == 2) { removeContact(tmpObject.buddyUin); } else if ( tmpObject.itemType == 0x0014 && tmpObject.operation == 1) { avatarModified = true; } } if ( code == 0x000e) { modifyObject tmpObject = modifyReqList.at(0); if ( tmpObject.itemType == 0 && tmpObject.operation == 0) { sendUserAddReq(tmpObject.buddyUin, tmpObject.buddyName, true, groupList.value(tmpObject.groupId)->name); } } modifyReqList.removeAt(0); } } if ( length ) socket->read(2); // if ( itemType == 0x0000) // { // if ( buddyList.contains(itemName) ) // { // if ( buddyList.value(itemName)->groupID != groupId) // addModifiedBuddyToGroup(groupId, itemId, itemName); // } // } } void contactListTree::addModifiedBuddyToGroup(quint16 groupId, quint16 itemId, const QString &uin, bool authReq, const QString &nick) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); if ( groupList.contains(groupId)) { treeGroupItem *newGrp = groupList.value(groupId); treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = groupId; buddy->itemId = itemId; buddy->groupName = newGrp->name; buddyList.insert(uin, buddy); newGrp->userCount++; newGrp->updateText(); buddy->setBuddyUin(uin); buddy->setName(nick); buddy->updateBuddyText(); addContactToCL(groupId, uin, nick); if ( authReq) buddy->setNotAuthorizated(true); idBuddyList.append(itemId); buddyList.insert(uin, buddy); settings.beginGroup(uin); settings.setValue("groupid", groupId); settings.setValue("name", uin); settings.setValue("authorized", !buddy->getNotAutho()); settings.setValue("nickname", buddy->getName()); settings.setValue("lastonline", buddy->lastonlineTime); settings.endGroup(); QStringList buddies = settings.value("list/contacts").toStringList(); if ( ! buddies.contains(uin)) { buddies<name; groupObject.itemType = 1; groupObject.operation = 3; modifyReqList.append(groupObject); QByteArray editClose; int groupItemCount = editGroup->buddiesList.count(); emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)(24 + editGroup->name.toUtf8().length() + groupItemCount * 2))); snac snac1309; snac1309.setFamily(0x0013); snac1309.setSubType(0x0009); snac1309.setReqId(*snacSeq); packet.append(snac1309.getData()); packet.append(convertToByteArray((quint16)editGroup->name.toUtf8().length())); packet.append(editGroup->name.toUtf8()); packet.append(convertToByteArray((quint16)groupId)); packet.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)(4 + groupItemCount * 2))); packet.append(convertToByteArray((quint16)0x00c8)); packet.append(convertToByteArray((quint16)(groupItemCount * 2))); for ( int i = 0; i < groupItemCount; i++) { packet.append(convertToByteArray((quint16)editGroup->buddiesList.at(i))); } emit incFlapSeq(); editClose.append(packet); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)10)); snac snac1312; snac1312.setFamily(0x0013); snac1312.setSubType(0x0012); snac1312.setReqId(*snacSeq); packet2.append(snac1312.getData()); editClose.append(packet2); emit incFlapSeq(); tcpSocket->write(editClose); } } void contactListTree::youWereAdded(quint16 length) { socket->read(8); length -= 8; quint8 uinLength = convertToInt8(socket->read(1)); length -= 1; QString uin = socket->read(uinLength); length -= uinLength; QString addedMsg(tr("You were added")); if ( !buddyList.contains(uin) && !checkMessageForValidation(uin, addedMsg, 0)) { return; } // if (!buddyList.contains(uin) && blockAuth) // { // if ( notifyAboutBlocked) // notifyBlockedMessage(uin, addedMsg); // // if ( saveServiceHistory ) // saveBlocked(uin, addedMsg, QDateTime::currentDateTime()); // // // return; // } messageFormat *msg = new messageFormat; msg->fromUin = uin; msg->message = addedMsg; msg->date = QDateTime::currentDateTime(); if ( buddyList.contains(msg->fromUin) ) { treeBuddyItem *buddy = buddyList.value(msg->fromUin); msg->from = buddy->getName(); } else { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); treeGroupItem *group = groupList.value(0); msg->from = msg->fromUin; treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = 0; buddy->groupName = group->name; group->userCount++; group->updateText(); buddyList.insert(msg->fromUin, buddy); buddy->setBuddyUin(msg->fromUin); buddy->setName(msg->fromUin); buddy->updateBuddyText(); updateNil(); requestUinInformation(buddy->getUin()); settings.beginGroup(buddy->getUin()); settings.setValue("name", buddy->getUin()); settings.setValue("groupid", 0); settings.setValue("nickname", buddy->getName()); settings.endGroup(); addContactToCL(0, buddy->getUin(), buddy->getName()); QStringList contacts = settings.value("list/contacts").toStringList(); contacts<getUin(); settings.setValue("list/contacts", contacts); if ( contactListChanged && isMergeAccounts ) emit reupdateList(); } addMessageFromContact(msg->fromUin, buddyList.contains(msg->fromUin)?buddyList.value(msg->fromUin)->groupID : 0 , msg->message, msg->date); // if ( chatWindowList.contains(msg->fromUin)) // { // chatWindow *w = chatWindowList.value(msg->fromUin); // w->setMessage(msg->from,msg->message, msg->date); // if ( !disableButtonBlinking) // qApp->alert(w, 0); // if ( tabMode ) // generalChatWindow->setMessageTab(w); // if ( !w->isActiveWindow() ) // { // if ( messageList.contains(msg->fromUin)) // { // messageList.value(msg->fromUin)->messageList.append(msg); // } else { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // if ( !disableTrayBlinking ) // emit getNewMessage(); // if ( ! dontShowEvents ) // emit userMessage(msg->fromUin, msg->from, msg->message, messageNotification, true); // } // // } else { // if ( messageList.contains(msg->fromUin)) // { // messageList.value(msg->fromUin)->messageList.append(msg); // } else { // messageList.insert(msg->fromUin, buddyList.value(msg->fromUin)); // messageList.value(msg->fromUin)->messageList.append(msg); // } // emit userMessage(msg->fromUin, msg->from, msg->message, messageNotification, true); // if ( !disableTrayBlinking ) // emit getNewMessage(); // } // if ( !newMessages ) // { // newMessages = true; // QTimer::singleShot(1000,this, SLOT(setMessageIconToContact())); // } // // if ( openNew ) // doubleClickedBuddy(buddyList.value(msg->fromUin)); } void contactListTree::sendMultipleWindow() { multipleSendingWin = new multipleSending(); multipleSendingWin->setTreeModel(icqUin, &groupList, &buddyList); multipleSendingOpen = true; multipleSendingWin->setAttribute(Qt::WA_QuitOnClose, false); multipleSendingWin->setAttribute(Qt::WA_DeleteOnClose, true); connect( multipleSendingWin, SIGNAL(destroyed ( QObject *)), this, SLOT(deleteSendMultipleWindow(QObject *))); connect( multipleSendingWin, SIGNAL(sendMessageToContact(const messageFormat &)), this, SLOT(sendMessage(const messageFormat &))); sendMultiple->setEnabled(false); multipleSendingWin->show(); } void contactListTree::deleteSendMultipleWindow(QObject */*obj*/) { multipleSendingOpen = false; sendMultiple->setEnabled(true); } void contactListTree::openPrivacyWindow() { privacyWindow = new privacyListWindow(icqUin, m_profile_name); privacyWindow->setOnline(iAmOnline); privacyListWindowOpen = true; privacyWindow->setAttribute(Qt::WA_QuitOnClose, false); privacyWindow->setAttribute(Qt::WA_DeleteOnClose, true); connect( privacyWindow, SIGNAL(destroyed ( QObject *)), this, SLOT(deletePrivacyWindow(QObject *))); connect( privacyWindow, SIGNAL(openInfo( const QString &, const QString &, const QString &, const QString &)), this, SLOT(openInfoWindow(const QString &, const QString &, const QString &, const QString &))); connect( privacyWindow, SIGNAL(deleteFromPrivacyList(const QString &, int)), this, SLOT(deleteFromPrivacyList(const QString &, int))); privacyList->setEnabled(false); privacyWindow->show(); } void contactListTree::deletePrivacyWindow(QObject */*obj*/) { privacyListWindowOpen = false; privacyList->setEnabled(true); } void contactListTree::deleteFromPrivacyList(const QString &uin, int type) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(20 + uin.length()))); snac snac130a; snac130a.setFamily(0x0013); snac130a.setSubType(0x000a); snac130a.setReqId(*snacSeq); packet2.append(snac130a.getData()); itemFromList object; quint16 objectType = 0x0002; if (type == 0) { object = visibleObjectList.value(uin); objectType = 0x0002; if ( buddyList.contains(uin)) { buddyList.value(uin)->m_visible_contact = false; buddyList.value(uin)->setCustomIcon(QIcon(),5); } visibleList.removeAll(uin); visibleObjectList.remove(uin); contacts.setValue("list/visible", visibleList); } else if (type == 1) { object = invisibleObjectList.value(uin); objectType = 0x0003; if ( buddyList.contains(uin)) { buddyList.value(uin)->m_invisible_contact = false; buddyList.value(uin)->setCustomIcon(QIcon(),6); } invisibleList.removeAll(uin); invisibleObjectList.remove(uin); contacts.setValue("list/invisible", invisibleList); } else if (type == 2) { object = ignoreObjectList.value(uin); objectType = 0x000e; if ( buddyList.contains(uin)) { buddyList.value(uin)->m_ignore_contact = false; buddyList.value(uin)->setCustomIcon(QIcon(),7); } ignoreList.removeAll(uin); ignoreObjectList.remove(uin); contacts.setValue("list/ignore", ignoreList); } packet2.append(convertToByteArray((quint16)uin.length())); packet2.append(uin); // packet2.append(convertToByteArray((quint16)object.groupId)); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)object.itemId)); packet2.append(convertToByteArray((quint16)objectType)); modifyObject addBuddy; addBuddy.itemId = object.itemId; addBuddy.groupId = object.groupId; addBuddy.itemType = objectType; addBuddy.operation = 2; addBuddy.buddyUin = uin; modifyReqList.append(addBuddy); packet2.append(convertToByteArray((quint16)0x0000)); emit incFlapSeq(); tcpSocket->write(packet2); } void contactListTree::openSelfInfo() { openInfoWindow(icqUin); } void contactListTree::saveOwnerInfo(bool saveAvatar, const QString &avatarPath) { if ( infoWindowList.contains(icqUin)) { userInformation *win = infoWindowList.value(icqUin); emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.basicNick = codec->fromUnicode(win->getNick()); metaInfo.basicFirst = codec->fromUnicode(win->getFirst()); metaInfo.basicLast = codec->fromUnicode(win->getLast()); metaInfo.basicEmail = codec->fromUnicode(win->getEmail()); metaInfo.publishEmail = win->getPublish(); metaInfo.country = win->getHomeCountry(); metaInfo.basicCity = codec->fromUnicode(win->getHomeCity()); metaInfo.basicState = codec->fromUnicode(win->getHomeState()); metaInfo.zip = win->getHomeZip(); metaInfo.basicPhone = codec->fromUnicode(win->getHomePhone()); metaInfo.basicFax = codec->fromUnicode(win->getHomeFax()); metaInfo.basicCell = codec->fromUnicode(win->getCellular()); metaInfo.basicAddress = codec->fromUnicode(win->getHomeStreet()); metaInfo.moreCountry = win->getOrigCountry(); metaInfo.moreCity = codec->fromUnicode(win->getOrigCity()); metaInfo.moreState = codec->fromUnicode(win->getOrigState()); metaInfo.workCountry = win->getWorkCountry(); metaInfo.workCity = codec->fromUnicode(win->getWorkCity()); metaInfo.workState = codec->fromUnicode(win->getWorkState()); metaInfo.wzip = win->getWorkZip(); metaInfo.workPhone = codec->fromUnicode(win->getWorkPhone()); metaInfo.workFax = codec->fromUnicode(win->getWorkFax()); metaInfo.workAddress = codec->fromUnicode(win->getWorkStreet()); metaInfo.workCompany = codec->fromUnicode(win->getCompanyName()); metaInfo.workOccupation = win->getOccupation(); metaInfo.workDepartment = codec->fromUnicode(win->getDepartment()); metaInfo.workPosition = codec->fromUnicode(win->getPosition()); metaInfo.workWebPage = codec->fromUnicode(win->getWebPage()); metaInfo.foundedGender = win->getGender(); metaInfo.homepage = codec->fromUnicode(win->getHomePage()); metaInfo.setBirth = win->sendBirth(); QDate birth = win->getBirth(); metaInfo.moreBirthYear = birth.year(); metaInfo.moreBirthMonth = birth.month(); metaInfo.moreBirthDay = birth.day(); metaInfo.moreLang1 = win->getLang1(); metaInfo.moreLang2 = win->getLang2(); metaInfo.moreLang3 = win->getLang3(); metaInfo.interCode1 = win->getInterests(1); metaInfo.interKeyWords1 = codec->fromUnicode(win->getInterestString(1)); metaInfo.interCode2 = win->getInterests(2); metaInfo.interKeyWords2 = codec->fromUnicode(win->getInterestString(2)); metaInfo.interCode3 = win->getInterests(3); metaInfo.interKeyWords3 = codec->fromUnicode(win->getInterestString(3)); metaInfo.interCode4 = win->getInterests(4); metaInfo.interKeyWords4 = codec->fromUnicode(win->getInterestString(4)); metaInfo.about = codec->fromUnicode(win->getAbout()); metaInfo.authFlag = win->getAuth(); metaInfo.webAware = win->webAware(); metaInfo.saveOwnerInfo(tcpSocket, *flapSeq, *snacSeq, *metaSeq); emit incFlapSeq(); // // emit incSnacSeq(); // emit incMetaSeq(); // metaInfo.sendMoreInfo(tcpSocket, *flapSeq, *snacSeq, *metaSeq); // emit incFlapSeq(); if ( !waitForIconUpload && saveAvatar) { waitForIconUpload = saveAvatar; ownIconPath = avatarPath; uploadIcon(); } } } void contactListTree::checkForOwnIcon(QByteArray avatarArray) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); QByteArray icon = avatarArray.right(16); if ( icon.length() == 16) { if ( settings.value("main/iconhash").toByteArray() != icon.toHex() ) { askForAvatars(icon, icqUin); settings.setValue("main/iconhash", icon.toHex()); } } } void contactListTree::uploadIcon() { if ( QFile::exists(ownIconPath)) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); QFile pic(ownIconPath); if ( pic.open(QIODevice::ReadOnly)) { QCryptographicHash hash(QCryptographicHash::Md5); hash.addData(pic.readAll()); QByteArray hashArray = hash.result(); settings.setValue("main/iconhash",hashArray.toHex()); pic.copy(iconPath + hashArray.toHex() ); bool iconExistsOnServer = true; if ( !iconObject.itemId) { iconExistsOnServer = false; iconObject.itemId = rand() % 0x03e6; } emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)43)); snac snac1308; snac1308.setFamily(0x0013); if (iconExistsOnServer) snac1308.setSubType(0x0009); else snac1308.setSubType(0x0008); snac1308.setReqId(*snacSeq); packet.append(snac1308.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(QString("1")); packet.append(convertToByteArray((quint16)iconObject.groupId)); packet.append(convertToByteArray((quint16)iconObject.itemId)); packet.append(convertToByteArray((quint16)0x0014)); packet.append(convertToByteArray((quint16)22)); packet.append(convertToByteArray((quint16)0x00d5)); packet.append(convertToByteArray((quint16)0x0012)); packet.append(convertToByteArray((quint16)0x0110)); packet.append(hashArray); modifyObject addBuddy; addBuddy.itemId = iconObject.itemId; addBuddy.groupId = iconObject.groupId; addBuddy.itemType = 0x0014; addBuddy.operation = 1; addBuddy.buddyName = "1"; modifyReqList.append(addBuddy); tcpSocket->write(packet); emit incFlapSeq(); } } else { bool iconExistsOnServer = true; if ( !iconObject.itemId) { iconExistsOnServer = false; iconObject.itemId = rand() % 0x03e6; } emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)32)); snac snac1308; snac1308.setFamily(0x0013); if (iconExistsOnServer) snac1308.setSubType(0x0009); else snac1308.setSubType(0x0008); snac1308.setReqId(*snacSeq); packet.append(snac1308.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(QString("1")); packet.append(convertToByteArray((quint16)iconObject.groupId)); packet.append(convertToByteArray((quint16)iconObject.itemId)); packet.append(convertToByteArray((quint16)0x0014)); packet.append(convertToByteArray((quint16)11)); packet.append(convertToByteArray((quint16)0x00d5)); packet.append(convertToByteArray((quint16)0x0007)); packet.append(convertToByteArray((quint16)0x0005)); packet.append(convertToByteArray((quint16)0x0201)); packet.append(convertToByteArray((quint16)0xd204)); packet.append(QChar(0x72)); modifyObject addBuddy; addBuddy.itemId = iconObject.itemId; addBuddy.groupId = iconObject.groupId; addBuddy.itemType = 0x0014; addBuddy.operation = 1; addBuddy.buddyName = "1"; modifyReqList.append(addBuddy); tcpSocket->write(packet); emit incFlapSeq(); removeIconHash(); } } void contactListTree::getUploadIconData(quint16 length) { socket->read(8); length -= 8; quint16 noticeType = byteArrayToInt16(socket->read(2)); length -= 2; socket->read(length); if ( noticeType == 1 && avatarModified) { avatarModified = false; QHostAddress hostAddr = QHostAddress(avatarAddress); if ( !hostAddr.isNull() && avatarCookie.length() == 256) { if ( !buddyConnection->connectedToServ ) buddyConnection->connectToServ(avatarAddress, avatarPort, avatarCookie, tcpSocket->proxy()); else { if ( buddyConnection->canSendReqForAvatars ) { waitForIconUpload = false; buddyConnection->uploadIcon(ownIconPath); } } } } } void contactListTree::removeIconHash() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); settings.remove("main/iconhash"); } void contactListTree::openChangePasswordDialog() { passwordChangeDialog dialog(icqUin, m_profile_name); if ( dialog.exec() ) { emit incSnacSeq(); emit incMetaSeq(); metaInformation metaInfo(icqUin); metaInfo.changePassword(tcpSocket, *flapSeq, *snacSeq, *metaSeq, dialog.newPass); emit incFlapSeq(); } } void contactListTree::showGroupMenu(treeGroupItem *group, const QPoint &point) { currentContextGroup = group; currentContextMenu->clear(); currentContextMenu->addAction(menuTitle); menuLabel->setText(""+ group->name +""); if ( iAmOnline) { currentContextMenu->addAction(createGroup); if ( groupList.key(group)) { currentContextMenu->addAction(renameGroup); currentContextMenu->addAction(deleteGroup); } } currentContextMenu->popup(point); } void contactListTree::createContactListActions() { currentContextMenu = new QMenu; menuLabel = new QLabel; menuLabel->setAlignment(Qt::AlignCenter); menuTitle = new QWidgetAction(this); menuTitle->setDefaultWidget(menuLabel); createGroup = new QAction(m_icq_plugin_system.getIcon("add"), tr("New group"), this); connect(createGroup, SIGNAL(triggered()), this, SLOT(createNewGroup())); renameGroup = new QAction(m_icq_plugin_system.getIcon("clear"), tr("Rename group"), this); connect(renameGroup, SIGNAL(triggered()), this, SLOT(renameSelectedGroup())); deleteGroup = new QAction(m_icq_plugin_system.getIcon("remove"), tr("Delete group"), this); connect(deleteGroup, SIGNAL(triggered()), this, SLOT(deleteSelectedGroup())); sendMessageAction = new QAction(m_icq_plugin_system.getIcon("message"), tr("Send message"), this); connect(sendMessageAction, SIGNAL(triggered()), this, SLOT(sendMessageActionTriggered())); userInformationAction = new QAction(m_icq_plugin_system.getIcon("contactinfo"), tr("Contact details"), this); connect(userInformationAction, SIGNAL(triggered()), this, SLOT(userInformationActionTriggered())); copyUINAction = new QAction(m_icq_plugin_system.getIcon("copy_uin"), tr("Copy UIN to clipboard"), this); connect(copyUINAction, SIGNAL(triggered()), this, SLOT(copyUINActionTriggered())); statusCheckAction= new QAction(m_icq_plugin_system.getIcon("checkstat"), tr("Contact status check"), this); connect(statusCheckAction, SIGNAL(triggered()), this, SLOT(statusCheckActionTriggered())); messageHistoryAction = new QAction(m_icq_plugin_system.getIcon("history"), tr("Message history"), this); connect(messageHistoryAction, SIGNAL(triggered()), this, SLOT(messageHistoryActionTriggered())); readAwayAction = new QAction(m_icq_plugin_system.getIcon("readaway"), tr("Read away message"), this); connect(readAwayAction, SIGNAL(triggered()), this, SLOT(readAwayActionTriggered())); renameContactAction = new QAction(m_icq_plugin_system.getIcon("edituser"), tr("Rename contact"), this); connect(renameContactAction, SIGNAL(triggered()), this, SLOT(renameContactActionTriggered())); deleteContactAction = new QAction(m_icq_plugin_system.getIcon("deleteuser"), tr("Delete contact"), this); connect(deleteContactAction, SIGNAL(triggered()), this, SLOT(deleteContactActionTriggered())); moveContactAction = new QAction(m_icq_plugin_system.getIcon("moveuser"), tr("Move to group"), this); connect(moveContactAction, SIGNAL(triggered()), this, SLOT(moveContactActionTriggered())); addToVisibleAction = new QAction(m_icq_plugin_system.getIcon("visible"), tr("Add to visible list"), this); connect(addToVisibleAction, SIGNAL(triggered()), this, SLOT(addToVisibleActionTriggered())); addToInvisibleAction = new QAction(m_icq_plugin_system.getIcon("privacy"), tr("Add to invisible list"), this); connect(addToInvisibleAction, SIGNAL(triggered()), this, SLOT(addToInvisibleActionTriggered())); addToIgnoreAction = new QAction(m_icq_plugin_system.getIcon("ignorelist"), tr("Add to ignore list"), this); connect(addToIgnoreAction , SIGNAL(triggered()), this, SLOT(addToIgnoreActionTriggered())); deleteFromVisibleAction = new QAction(m_icq_plugin_system.getIcon("visible"), tr("Delete from visible list"), this); connect(deleteFromVisibleAction, SIGNAL(triggered()), this, SLOT(deleteFromVisibleActionTriggered())); deleteFromInvisibleAction = new QAction(m_icq_plugin_system.getIcon("privacy"), tr("Delete from invisible list"), this); connect(deleteFromInvisibleAction, SIGNAL(triggered()), this, SLOT(deleteFromInvisibleActionTriggered())); deleteFromIgnoreAction = new QAction(m_icq_plugin_system.getIcon("ignorelist"), tr("Delete from ignore list"), this); connect(deleteFromIgnoreAction , SIGNAL(triggered()), this, SLOT(deleteFromIgnoreActionTriggered())); // TO-DO: Investigate a better way of adding auth icon requestAuthorizationAction = new QAction(statusIconClass::getInstance()->getConnectingIcon(), tr("Authorization request"), this); connect(requestAuthorizationAction , SIGNAL(triggered()), this, SLOT(requestAuthorizationActionTriggered())); addToContactListAction = new QAction(m_icq_plugin_system.getIcon("add_user"), tr("Add to contact list"), this); connect(addToContactListAction , SIGNAL(triggered()), this, SLOT(addToContactListActionTriggered())); allowToAddMe = new QAction(m_icq_plugin_system.getIcon("apply"), tr("Allow contact to add me"), this); connect(allowToAddMe , SIGNAL(triggered()), this, SLOT(allowToAddMeTriggered())); removeMyself = new QAction(m_icq_plugin_system.getIcon("deletetab2"), tr("Remove myself from contact's list"), this); connect(removeMyself , SIGNAL(triggered()), this, SLOT(removeMyselfTriggered())); connect(fileTransferObject->getSendFileAction() , SIGNAL(triggered()), this, SLOT(sendFileActionTriggered())); readXstatus = new QAction(m_icq_plugin_system.getIcon("xstatus"), tr("Read custom status"), this); connect(readXstatus , SIGNAL(triggered()), this, SLOT(readXstatusTriggered())); editNoteAction = new QAction(m_icq_plugin_system.getIcon("note"), tr("Edit note"), this); connect(editNoteAction , SIGNAL(triggered()), this, SLOT(editNoteActionTriggered())); } void contactListTree::createNewGroup() { addRenameDialog dialog; dialog.setWindowTitle(tr("Create group")); if ( dialog.exec() ) { quint16 groupId = rand() % 0x03e6; for ( ;groupList.contains(groupId);) groupId = rand() % 0x03e6; QString groupName = dialog.name; QByteArray editPack; emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)10)); snac snac1311; snac1311.setFamily(0x0013); snac1311.setSubType(0x0011); snac1311.setReqId(*snacSeq); packet.append(snac1311.getData()); emit incFlapSeq(); editPack.append(packet); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + groupName.toUtf8().length()))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0008); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)groupName.toUtf8().length())); packet2.append(groupName.toUtf8()); packet2.append(convertToByteArray((quint16)groupId)); packet2.append(convertToByteArray((quint16)0x0000)); packet2.append(convertToByteArray((quint16)0x0001)); packet2.append(convertToByteArray((quint16)0x0004)); packet2.append(convertToByteArray((quint16)0x00c8)); packet2.append(convertToByteArray((quint16)0x0000)); emit incFlapSeq(); editPack.append(packet2); tcpSocket->write(editPack); modifyObject addGroup; addGroup.itemId = 0; addGroup.groupId = groupId; addGroup.itemType = 1; addGroup.operation = 0; addGroup.buddyName = groupName; modifyReqList.append(addGroup); } } void contactListTree::renameSelectedGroup() { addRenameDialog dialog; dialog.setWindowTitle(tr("Rename group")); if ( dialog.exec() ) { quint16 groupId = groupList.key(currentContextGroup); QString groupName = dialog.name; QByteArray editPack; emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)10)); snac snac1311; snac1311.setFamily(0x0013); snac1311.setSubType(0x0011); snac1311.setReqId(*snacSeq); packet.append(snac1311.getData()); emit incFlapSeq(); editPack.append(packet); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + groupName.toUtf8().length() + currentContextGroup->buddiesList.count() * 2))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0009); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)groupName.toUtf8().length())); packet2.append(groupName.toUtf8()); packet2.append(convertToByteArray((quint16)groupId)); packet2.append(convertToByteArray((quint16)0x0000)); packet2.append(convertToByteArray((quint16)0x0001)); packet2.append(convertToByteArray((quint16)(0x0004 + currentContextGroup->buddiesList.count() * 2))); packet2.append(convertToByteArray((quint16)0x00c8)); packet2.append(convertToByteArray((quint16)currentContextGroup->buddiesList.count() * 2)); foreach(quint16 listgroupId, currentContextGroup->buddiesList) { if ( listgroupId) packet2.append(convertToByteArray((quint16)listgroupId)); } emit incFlapSeq(); editPack.append(packet2); tcpSocket->write(editPack); modifyObject addGroup; addGroup.itemId = 0; addGroup.groupId = groupId; addGroup.itemType = 1; addGroup.operation = 1; addGroup.buddyName = groupName; modifyReqList.append(addGroup); } } void contactListTree::deleteSelectedGroup() { QMessageBox msgBox(QMessageBox::NoIcon, tr("Delete group"), tr("Delete group \"%1\"?").arg(currentContextGroup->name), QMessageBox::Yes | QMessageBox::No); switch( msgBox.exec() ) { case QMessageBox::Yes: break; case QMessageBox::No: return; break; default: return; break; } QString groupName = currentContextGroup->name; quint16 groupId = groupList.key(currentContextGroup); QByteArray editPack; emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)10)); snac snac1311; snac1311.setFamily(0x0013); snac1311.setSubType(0x0011); snac1311.setReqId(*snacSeq); packet.append(snac1311.getData()); emit incFlapSeq(); editPack.append(packet); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + groupName.toUtf8().length()))); snac snac130a; snac130a.setFamily(0x0013); snac130a.setSubType(0x000a); snac130a.setReqId(*snacSeq); packet2.append(snac130a.getData()); packet2.append(convertToByteArray((quint16)groupName.toUtf8().length())); packet2.append(groupName.toUtf8()); packet2.append(convertToByteArray((quint16)groupId)); packet2.append(convertToByteArray((quint16)0x0000)); packet2.append(convertToByteArray((quint16)0x0001)); packet2.append(convertToByteArray((quint16)0x0004)); packet2.append(convertToByteArray((quint16)0x00c8)); packet2.append(convertToByteArray((quint16)0x0000)); emit incFlapSeq(); editPack.append(packet2); tcpSocket->write(editPack); modifyObject delGroup; delGroup.itemId = 0; delGroup.groupId = groupId; delGroup.itemType = 1; delGroup.operation = 2; delGroup.buddyName = groupName; modifyReqList.append(delGroup); } void contactListTree::addNewGroupToRoot(const QString &name, quint16 groupID) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.beginGroup(QString::number(groupID)); treeGroupItem *group = new treeGroupItem; group->setOnOffLists(); groupList.insert(groupID, group); group->setGroupText(name); contacts.setValue("id", groupID); contacts.setValue("name", name); contacts.endGroup(); addGroupToCL(groupID, name); QStringList groups = contacts.value("list/group").toStringList(); groups<write(editPack); modifyObject addGroup; addGroup.itemId = 0; addGroup.groupId = 0; addGroup.itemType = 1; addGroup.operation = 1; modifyReqList.append(addGroup); } void contactListTree::renameGroupToName(const QString &name, quint16 groupId) { treeGroupItem *group = groupList.value(groupId); QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.setValue(QString::number(groupId) + "/name", name); renameGroupInCL(name, groupId); group->setGroupText(name); if ( isMergeAccounts ) emit reupdateList(); } void contactListTree::deleteSelectedGroup(quint16 groupId) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.remove(QString::number(groupId)); removeGroupFromCl(groupId); delete groupList.value(groupId); groupList.remove(groupId); QStringList buddiesList = contacts.value("list/contacts").toStringList(); foreach(treeBuddyItem *buddy, buddyList) { if ( buddy->groupID == groupId) { buddiesList.removeAll(buddy->getUin()); contacts.remove(buddy->getUin()); } } contacts.setValue("list/contacts", buddiesList); QStringList groups = contacts.value("list/group").toStringList(); groups.removeAll(QString::number(groupId)); contacts.setValue("list/group", groups); quint16 groupCount = groupList.count(); if ( groupList.contains(0) ) groupCount--; QByteArray editPack; emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + groupCount * 2))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0009); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)0x0001)); packet2.append(convertToByteArray((quint16)(4 + groupCount * 2))); packet2.append(convertToByteArray((quint16)0x00c8)); packet2.append(convertToByteArray((quint16)(groupCount* 2))); foreach(quint16 listgroupId, groupList.keys()) { if ( listgroupId) packet2.append(convertToByteArray((quint16)listgroupId)); } emit incFlapSeq(); editPack.append(packet2); emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)10)); snac snac1312; snac1312.setFamily(0x0013); snac1312.setSubType(0x0012); snac1312.setReqId(*snacSeq); packet.append(snac1312.getData()); emit incFlapSeq(); editPack.append(packet); tcpSocket->write(editPack); modifyObject addGroup; addGroup.itemId = 0; addGroup.groupId = 0; addGroup.itemType = 1; addGroup.operation = 1; modifyReqList.append(addGroup); } void contactListTree::showBuddyMenu(const QList &action_list, treeBuddyItem *buddy, const QPoint &point) { currentContextBuddy = buddy; currentContextMenu->clear(); currentContextMenu->addAction(menuTitle); menuLabel->setText(""+ buddy->getName() +""); currentContextMenu->addAction(action_list.at(0)); if ( iAmOnline ) { if ( currentContextBuddy->getStatus() != contactOffline) { if ( currentContextBuddy->fileTransferSupport ) currentContextMenu->addAction(fileTransferObject->getSendFileAction()); } if ( currentContextBuddy->getNotAutho()) { currentContextMenu->addAction(requestAuthorizationAction); } if ( currentContextBuddy->getStatus() == contactOffline ) { currentContextMenu->addAction(statusCheckAction); } if ( currentContextBuddy->getStatus() != contactOffline && currentContextBuddy->getStatus() != contactOnline && currentContextBuddy->getStatus() != contactInvisible ) { currentContextMenu->addAction(readAwayAction); } if ( currentContextBuddy->xStatusPresent) currentContextMenu->addAction(readXstatus); } currentContextMenu->addAction(copyUINAction); currentContextMenu->addAction(editNoteAction); currentContextMenu->addAction(action_list.at(2)); currentContextMenu->addAction(action_list.at(1)); if ( noteWidgetsList.contains(currentContextBuddy->getUin())) editNoteAction->setEnabled(false); else editNoteAction->setEnabled(true); if ( iAmOnline && currentContextBuddy->groupID) { currentContextMenu->addSeparator(); currentContextMenu->addAction(renameContactAction); currentContextMenu->addAction(deleteContactAction); currentContextMenu->addAction(moveContactAction); currentContextMenu->addSeparator(); if ( !visibleList.contains(currentContextBuddy->getUin())) currentContextMenu->addAction(addToVisibleAction); else currentContextMenu->addAction(deleteFromVisibleAction); if ( !invisibleList.contains(currentContextBuddy->getUin())) currentContextMenu->addAction(addToInvisibleAction); else currentContextMenu->addAction(deleteFromInvisibleAction); if ( !ignoreList.contains(currentContextBuddy->getUin())) currentContextMenu->addAction(addToIgnoreAction); else currentContextMenu->addAction(deleteFromIgnoreAction); currentContextMenu->addAction(allowToAddMe); currentContextMenu->addAction(removeMyself); } if ( !currentContextBuddy->groupID ) { currentContextMenu->addAction(deleteContactAction); if ( iAmOnline) { currentContextMenu->addAction(addToContactListAction); currentContextMenu->addAction(addToIgnoreAction); currentContextMenu->addAction(allowToAddMe); currentContextMenu->addAction(removeMyself); } } if ( iAmOnline ) currentContextMenu->addAction(createGroup); currentContextMenu->addSeparator(); int action_count = action_list.count() - 3; if ( action_count > 0 ) { for ( int i = 0; i < action_count; i++ ) { currentContextMenu->addAction(action_list.at(3 + i)); } } currentContextMenu->popup(point); } void contactListTree::sendMessageActionTriggered() { // doubleClickedBuddy(currentContextBuddy); TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = currentContextBuddy->getUin(); int group_id = currentContextBuddy->groupID; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.createChat(contact_item); } void contactListTree::userInformationActionTriggered() { openInfoWindow(currentContextBuddy->getUin()); } void contactListTree::statusCheckActionTriggered() { checkStatusFor(currentContextBuddy->getUin()); } void contactListTree::messageHistoryActionTriggered() { showHistory(currentContextBuddy->getUin()); } void contactListTree::readAwayActionTriggered() { emit incSnacSeq(); icqMessage message(codepage); if ( currentContextBuddy->icqLite ) { message.awayType = 0x1a; } else { if ( currentContextBuddy->getStatus() == contactOccupied ) message.awayType = 0xe9; else if ( currentContextBuddy->getStatus() == contactNa ) message.awayType = 0xea; else if ( currentContextBuddy->getStatus() == contactDnd ) message.awayType = 0xeb; else if ( currentContextBuddy->getStatus() == contactFfc ) message.awayType = 0xec; else message.awayType = 0xe8; } message.requestAutoreply(tcpSocket, currentContextBuddy->getUin(),*flapSeq, *snacSeq); emit incFlapSeq(); readAwayDialog *dialog = new readAwayDialog; dialog->setWindowTitle(tr("%1 away message").arg(currentContextBuddy->getName())); dialog->setAttribute(Qt::WA_QuitOnClose, false); dialog->setAttribute(Qt::WA_DeleteOnClose, true); connect( dialog, SIGNAL(destroyed ( QObject *)), this, SLOT(deleteAwayWindow(QObject *))); dialog->show(); awayMessageList.insert(message.msgCookie, dialog); } void contactListTree::deleteAwayWindow(QObject *o) { readAwayDialog *tempWindow = (readAwayDialog *)(o); awayMessageList.remove(awayMessageList.key(tempWindow)); } void contactListTree::getAwayMessage(quint16 length) { icqMessage message(codepage); message.getAwayMessage(socket, length); if ( message.msgType == 0xe8 || message.msgType == 0xe9 || message.msgType == 0xea || message.msgType == 0xeb || message.msgType == 0xec) { if ( awayMessageList.contains(message.msgCookie)) { awayMessageList.value(message.msgCookie)->addMessage(message.msg); } } else if (message.msgType == 0x1a ) { QString xStatusmsg = addXstatusMessage(message.from, message.byteArrayMsg); if ( awayMessageList.contains(message.msgCookie)) { awayMessageList.value(message.msgCookie)->addXstatus(xStatusmsg); } } else if (message.msgType == 0x01 ) { if ( messageCursorPositions.contains(message.msgCookie)) { messageDelievered(message.from,0,messageCursorPositions.value(message.msgCookie)); } messageCursorPositions.remove(message.msgCookie); } } void contactListTree::renameContactActionTriggered() { addRenameDialog dialog; dialog.setWindowTitle(tr("Rename contact")); if ( dialog.exec() ) { QString contactName = dialog.name; QString uin = currentContextBuddy->getUin(); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); if ( currentContextBuddy->getNotAutho() ) packet2.append(convertToByteArray((quint16)(28 + contactName.toUtf8().length() + uin.length()))); else packet2.append(convertToByteArray((quint16)(24 + contactName.toUtf8().length() + uin. toUtf8().length()))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0009); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)uin.toUtf8().length())); packet2.append(uin.toUtf8()); packet2.append(convertToByteArray((quint16)currentContextBuddy->groupID)); packet2.append(convertToByteArray((quint16)currentContextBuddy->itemId)); packet2.append(convertToByteArray((quint16)0x0000)); if ( currentContextBuddy->getNotAutho()) packet2.append(convertToByteArray((quint16)(8 + contactName.toUtf8().length()))); else packet2.append(convertToByteArray((quint16)(4 + contactName.toUtf8().length()))); packet2.append(convertToByteArray((quint16)0x0131)); packet2.append(convertToByteArray((quint16)contactName.toUtf8().length())); packet2.append(contactName.toUtf8()); if ( currentContextBuddy->getNotAutho()) { packet2.append(convertToByteArray((quint16)0x0066)); packet2.append(convertToByteArray((quint16)0)); } emit incFlapSeq(); tcpSocket->write(packet2); modifyObject renameBuddy; renameBuddy.itemId = currentContextBuddy->itemId; renameBuddy.groupId = currentContextBuddy->groupID; renameBuddy.itemType = 0; renameBuddy.operation = 1; renameBuddy.buddyName = contactName; renameBuddy.buddyUin = uin; modifyReqList.append(renameBuddy); } } void contactListTree::deleteContactActionTriggered() { deleteContactDialog dialog; dialog.setWindowTitle(tr("Delete %1").arg(currentContextBuddy->getName())); if ( !movingBuddy) { if ( !dialog.exec() ) return; } QString contactName = currentContextBuddy->getName(); QString uin = currentContextBuddy->getUin(); if ( !movingBuddy) { if ( dialog.deleteHistory() ) { //TODO: delet history } } movingBuddy = false; if ( buddyList.contains(uin)) { if (!buddyList.value(uin)->groupID) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); QStringList contactList = contacts.value("list/contacts").toStringList(); contactList.removeAll(uin); contacts.setValue("list/contacts", contactList); contacts.remove(uin); treeBuddyItem *buddy = buddyList.value(uin); idBuddyList.removeAll(buddy->itemId); if ( infoWindowList.contains(uin) ) { infoWindowList.value(uin)->close(); infoWindowList.remove(uin); } // if ( chatWindowList.contains(uin) ) // { // chatWindowList.value(uin)->close(); // chatWindowList.remove(uin); // } quint16 groupCount; QString groupName; treeGroupItem *group = groupList.value(buddy->groupID); group->buddiesList.removeAll(buddy->itemId); group->userCount--; group->updateText(); groupCount = group->buddiesList.count(); groupName = group->name; removeContactFromCl(buddy->groupID, uin); buddyList.remove(uin); delete buddy; return; } } QByteArray editPack; emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)10)); snac snac1311; snac1311.setFamily(0x0013); snac1311.setSubType(0x0011); snac1311.setReqId(*snacSeq); packet.append(snac1311.getData()); emit incFlapSeq(); editPack.append(packet); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); if ( currentContextBuddy->getNotAutho()) packet2.append(convertToByteArray((quint16)(28 + contactName.toUtf8().length() + uin.length()))); else packet2.append(convertToByteArray((quint16)(24 + contactName.toUtf8().length() + uin. toUtf8().length()))); snac snac130a; snac130a.setFamily(0x0013); snac130a.setSubType(0x000a); snac130a.setReqId(*snacSeq); packet2.append(snac130a.getData()); packet2.append(convertToByteArray((quint16)uin.toUtf8().length())); packet2.append(uin.toUtf8()); packet2.append(convertToByteArray((quint16)currentContextBuddy->groupID)); packet2.append(convertToByteArray((quint16)currentContextBuddy->itemId)); packet2.append(convertToByteArray((quint16)0x0000)); if ( currentContextBuddy->getNotAutho()) packet2.append(convertToByteArray((quint16)(8 + contactName.toUtf8().length()))); else packet2.append(convertToByteArray((quint16)(4 + contactName.toUtf8().length()))); packet2.append(convertToByteArray((quint16)0x0131)); packet2.append(convertToByteArray((quint16)contactName.toUtf8().length())); packet2.append(contactName.toUtf8()); if ( currentContextBuddy->getNotAutho()) { packet2.append(convertToByteArray((quint16)0x0066)); packet2.append(convertToByteArray((quint16)0)); } emit incFlapSeq(); editPack.append(packet2); tcpSocket->write(editPack); modifyObject delBuddy; delBuddy.itemId = currentContextBuddy->itemId; delBuddy.groupId = currentContextBuddy->groupID; delBuddy.itemType = 0; delBuddy.operation = 2; delBuddy.buddyName = contactName; delBuddy.buddyUin = uin; modifyReqList.append(delBuddy); } void contactListTree::moveContactActionTriggered() { addBuddyDialog addDialog; addDialog.setWindowTitle(tr("Move %1 to:").arg(currentContextBuddy->getUin())); QStringList groups; foreach (treeGroupItem *group, groupList) { if ( groupList.key(group)) groups<name; } addDialog.setMoveData(groups); if ( addDialog.exec() ) { QString uin = currentContextBuddy->getUin(); QString name = currentContextBuddy->getName(); bool authReq = currentContextBuddy->getNotAutho(); movingBuddy = true; deleteContactActionTriggered(); sendUserAddReq(uin, name,authReq , addDialog.getGroup()); } } void contactListTree::renameContact(const QString &uin, const QString &name) { if ( buddyList.contains(uin)) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.setValue(uin + "/nickname", name); buddyList.value(uin)->setName(name); buddyList.value(uin)->updateBuddyText(); } } void contactListTree::removeContact(const QString &uin) { if ( buddyList.contains(uin) ) { QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); QStringList contactList = contacts.value("list/contacts").toStringList(); contactList.removeAll(uin); contacts.setValue("list/contacts", contactList); contacts.remove(uin); treeBuddyItem *buddy = buddyList.value(uin); idBuddyList.removeAll(buddy->itemId); if ( infoWindowList.contains(uin) ) { infoWindowList.value(uin)->close(); infoWindowList.remove(uin); } // if ( chatWindowList.contains(uin) ) // { // chatWindowList.value(uin)->close(); // chatWindowList.remove(uin); // } quint16 groupCount; QString groupName; treeGroupItem *group = groupList.value(buddy->groupID); group->buddiesList.removeAll(buddy->itemId); group->userCount--; group->updateText(); groupCount = group->buddiesList.count(); groupName = group->name; if ( !buddy->isOffline) { group->buddyOffline(); } removeContactFromCl(buddy->groupID, uin); buddyList.remove(uin); messageList.remove(uin); delete buddy; QByteArray editPack; emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + groupCount * 2 + groupName.toUtf8().length()))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0009); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)groupName.toUtf8().length())); packet2.append(groupName.toUtf8()); packet2.append(convertToByteArray((quint16)groupList.key(group))); packet2.append(convertToByteArray((quint16)0x0000)); packet2.append(convertToByteArray((quint16)0x0001)); packet2.append(convertToByteArray((quint16)(4 + groupCount * 2))); packet2.append(convertToByteArray((quint16)0x00c8)); packet2.append(convertToByteArray((quint16)(groupCount* 2))); foreach(quint16 buddyId, group->buddiesList) { if ( buddyId) packet2.append(convertToByteArray((quint16)buddyId)); } emit incFlapSeq(); editPack.append(packet2); emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)10)); snac snac1312; snac1312.setFamily(0x0013); snac1312.setSubType(0x0012); snac1312.setReqId(*snacSeq); packet.append(snac1312.getData()); emit incFlapSeq(); editPack.append(packet); tcpSocket->write(editPack); modifyObject addGroup; addGroup.itemId = 0; addGroup.groupId = groupList.key(group); addGroup.itemType = 1; addGroup.operation = 1; addGroup.buddyName = group->name; modifyReqList.append(addGroup); } } void contactListTree::addToVisibleActionTriggered() { if ( visibleList.contains(currentContextBuddy->getUin())) return; if ( invisibleList.contains(currentContextBuddy->getUin())) deleteFromPrivacyList(currentContextBuddy->getUin(),1); QString uin = currentContextBuddy->getUin(); QString name = currentContextBuddy->getName(); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + name.toUtf8().length() + uin.toUtf8().length()))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0008); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)uin.toUtf8().length())); packet2.append(uin.toUtf8()); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)currentContextBuddy->itemId)); packet2.append(convertToByteArray((quint16)0x0002)); packet2.append(convertToByteArray((quint16)(4 + name.toUtf8().length()))); packet2.append(convertToByteArray((quint16)0x0131)); packet2.append(convertToByteArray((quint16)name.toUtf8().length())); packet2.append(name.toUtf8()); emit incFlapSeq(); tcpSocket->write(packet2); modifyObject visBuddy; visBuddy.itemId = currentContextBuddy->itemId; visBuddy.groupId = 0; visBuddy.itemType = 2; visBuddy.operation = 0; visBuddy.buddyName = name; visBuddy.buddyUin = uin; modifyReqList.append(visBuddy); visibleList.append(uin); itemFromList object; object.groupId = currentContextBuddy->groupID; object.itemId = currentContextBuddy->itemId; visibleObjectList.insert(uin, object); QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.setValue("list/visible", visibleList); if ( privacyListWindowOpen) privacyWindow->createLists(); currentContextBuddy->m_visible_contact = true; currentContextBuddy->setCustomIcon(m_icq_plugin_system.getIcon("visible"),5); } void contactListTree::addToInvisibleActionTriggered() { if ( invisibleList.contains(currentContextBuddy->getUin())) return; if ( visibleList.contains(currentContextBuddy->getUin())) deleteFromPrivacyList(currentContextBuddy->getUin(),0); QString uin = currentContextBuddy->getUin(); QString name = currentContextBuddy->getName(); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + name.toUtf8().length() + uin.toUtf8().length()))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0008); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)uin.toUtf8().length())); packet2.append(uin.toUtf8()); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)currentContextBuddy->itemId)); packet2.append(convertToByteArray((quint16)0x0003)); packet2.append(convertToByteArray((quint16)(4 + name.toUtf8().length()))); packet2.append(convertToByteArray((quint16)0x0131)); packet2.append(convertToByteArray((quint16)name.toUtf8().length())); packet2.append(name.toUtf8()); emit incFlapSeq(); tcpSocket->write(packet2); modifyObject visBuddy; visBuddy.itemId = currentContextBuddy->itemId; visBuddy.groupId = 0; visBuddy.itemType = 3; visBuddy.operation = 0; visBuddy.buddyName = name; visBuddy.buddyUin = uin; modifyReqList.append(visBuddy); invisibleList.append(uin); itemFromList object; object.groupId = currentContextBuddy->groupID; object.itemId = currentContextBuddy->itemId; invisibleObjectList.insert(uin, object); QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.setValue("list/invisible", invisibleList); if ( privacyListWindowOpen) privacyWindow->createLists(); currentContextBuddy->m_invisible_contact = true; currentContextBuddy->setCustomIcon(m_icq_plugin_system.getIcon("privacy"),6); } void contactListTree::addToIgnoreActionTriggered() { if ( ignoreList.contains(currentContextBuddy->getUin())) return; QString uin = currentContextBuddy->getUin(); QString name = currentContextBuddy->getName(); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(24 + name.toUtf8().length() + uin.toUtf8().length()))); snac snac1308; snac1308.setFamily(0x0013); snac1308.setSubType(0x0008); snac1308.setReqId(*snacSeq); packet2.append(snac1308.getData()); packet2.append(convertToByteArray((quint16)uin.toUtf8().length())); packet2.append(uin.toUtf8()); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)currentContextBuddy->itemId)); packet2.append(convertToByteArray((quint16)0x000e)); packet2.append(convertToByteArray((quint16)(4 + name.toUtf8().length()))); packet2.append(convertToByteArray((quint16)0x0131)); packet2.append(convertToByteArray((quint16)name.toUtf8().length())); packet2.append(name.toUtf8()); emit incFlapSeq(); tcpSocket->write(packet2); modifyObject visBuddy; visBuddy.itemId = currentContextBuddy->itemId; visBuddy.groupId = 0; visBuddy.itemType = 0x000e; visBuddy.operation = 0; visBuddy.buddyName = name; visBuddy.buddyUin = uin; modifyReqList.append(visBuddy); ignoreList.append(uin); itemFromList object; object.groupId = currentContextBuddy->groupID; object.itemId = currentContextBuddy->itemId; ignoreObjectList.insert(uin, object); QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); contacts.setValue("list/ignore", ignoreList); if ( privacyListWindowOpen) privacyWindow->createLists(); currentContextBuddy->m_ignore_contact = true; currentContextBuddy->setCustomIcon(m_icq_plugin_system.getIcon("ignorelist"),7); } void contactListTree::requestAuthorizationActionTriggered() { requestAuthDialog dialog; if ( dialog.exec() ) { QString uin = currentContextBuddy->getUin(); QString msg = dialog.getMessage(); QByteArray authPack; emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(15 + uin.toUtf8().length()))); snac snac1314; snac1314.setFamily(0x0013); snac1314.setSubType(0x0014); snac1314.setReqId(*snacSeq); packet2.append(snac1314.getData()); packet2[packet2.length()] = (quint8)uin.toUtf8().length(); packet2.append(uin.toUtf8()); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)0)); authPack.append(packet2); emit incFlapSeq(); emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)(15 + uin.toUtf8().length() + msg.toUtf8().length()))); snac snac1318; snac1318.setFamily(0x0013); snac1318.setSubType(0x0018); snac1318.setReqId(*snacSeq); packet.append(snac1318.getData()); packet[packet.length()] = (quint8)uin.toUtf8().length(); packet.append(uin.toUtf8()); packet.append(convertToByteArray((quint16)msg.toUtf8().length())); packet.append(msg.toUtf8()); packet.append(convertToByteArray((quint16)0)); authPack.append(packet); emit incFlapSeq(); tcpSocket->write(authPack); } } void contactListTree::getAuthorizationRequest(quint16 length) { socket->read(8); length -= 8; quint8 uinLength = convertToInt8(socket->read(1)); length--; QString uin = socket->read(uinLength); length -= uinLength; quint16 msgLength = byteArrayToInt16(socket->read(2)); length -= 2; QString msg = QString::fromUtf8(socket->read(msgLength)); length -= msgLength; socket->read(2); length -= 2; if ( buddyList.contains(uin) ) { treeBuddyItem *buddy = buddyList.value(uin); Q_ASSERT(buddy); if (buddy) { buddy->waitingForAuth(true); buddy->authMessage = msg; // emit userMessage(buddy->getUin(), buddy->getName(), msg, customMessage, true); addMessageFromContact(buddy->getUin(),buddy->groupID, msg, QDateTime::currentDateTime()); } } else { if ( checkMessageForValidation(uin, "", 1) ) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "contactlist"); treeGroupItem *group = groupList.value(0); // Q_ASSERT(group); if (!group) return ; treeBuddyItem *buddy = new treeBuddyItem(icqUin, m_profile_name); Q_ASSERT(buddy); if (!buddy) return ; initializeBuddy(buddy); buddy->underline = !dontUnderlineNotAutho; buddy->groupID = 0; buddy->groupName = group->name; group->userCount++; group->updateText(); buddyList.insert(uin, buddy); buddy->setBuddyUin(uin); buddy->setName(uin); buddy->updateBuddyText(); updateNil(); requestUinInformation(buddy->getUin()); settings.beginGroup(buddy->getUin()); settings.setValue("name", buddy->getUin()); settings.setValue("groupid", 0); settings.setValue("nickname", buddy->getName()); settings.endGroup(); addContactToCL(0,buddy->getUin(), buddy->getName()); QStringList contacts = settings.value("list/contacts").toStringList(); contacts<getUin(); settings.setValue("list/contacts", contacts); if ( contactListChanged && isMergeAccounts ) emit reupdateList(); buddy->waitingForAuth(true); buddy->authMessage = msg; // emit userMessage(buddy->getUin(), buddy->getName(), msg, customMessage, true); addMessageFromContact(buddy->getUin(),buddy->groupID, msg, QDateTime::currentDateTime()); } } if ( length) socket->read(length); } void contactListTree::openAuthReqFromBuddy(treeBuddyItem *buddy) { acceptAuthDialog *dialog = new acceptAuthDialog(buddy->getUin()); dialog->setWindowTitle(tr("Accept authorization from %1").arg(buddy->getName())); dialog->setMessage(buddy->authMessage); buddy->waitingForAuth(false); connect(dialog, SIGNAL(sendAuthReqAnswer(bool, const QString &)), this, SLOT(sendAuthReqAnswer(bool, const QString &))); dialog->show(); } void contactListTree::authorizationAcceptedAnswer(quint16 length) { socket->read(8); length -= 8; quint8 uinLength = convertToInt8(socket->read(1)); length--; QString uin = socket->read(uinLength); length -= uinLength; quint8 mesgAccept = convertToInt8(socket->read(1)); length --; QString message; if ( mesgAccept ) { message = tr("Authorization accepted"); if ( buddyList.contains(uin) ) { buddyList.value(uin)->setNotAuthorizated(false); buddyList.value(uin)->updateBuddyText(); } } else message = tr("Authorization declined"); if ( buddyList.contains(uin)) emit userMessage(uin, buddyList.value(uin)->getName(), message, messageNotification, true); else emit userMessage(uin, uin, message, messageNotification, false); if ( length ) socket->read(length); } void contactListTree::addToContactListActionTriggered() { addUserToList(currentContextBuddy->getUin(), currentContextBuddy->getName(), currentContextBuddy->getNotAutho()); } void contactListTree::allowToAddMeTriggered() { QString uin = currentContextBuddy->getUin(); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(15 + uin.toUtf8().length()))); snac snac1314; snac1314.setFamily(0x0013); snac1314.setSubType(0x0014); snac1314.setReqId(*snacSeq); packet2.append(snac1314.getData()); packet2[packet2.length()] = (quint8)uin.toUtf8().length(); packet2.append(uin.toUtf8()); packet2.append(convertToByteArray((quint16)0)); packet2.append(convertToByteArray((quint16)0)); emit incFlapSeq(); tcpSocket->write(packet2); } void contactListTree::removeMyselfTriggered() { QString uin = currentContextBuddy->getUin(); emit incSnacSeq(); QByteArray packet2; packet2[0] = 0x2a; packet2[1] = 0x02; packet2.append(convertToByteArray((quint16)*flapSeq)); packet2.append(convertToByteArray((quint16)(11 + uin.toUtf8().length()))); snac snac1316; snac1316.setFamily(0x0013); snac1316.setSubType(0x0016); snac1316.setReqId(*snacSeq); packet2.append(snac1316.getData()); packet2[packet2.length()] = (quint8)uin.toUtf8().length(); packet2.append(uin.toUtf8()); emit incFlapSeq(); tcpSocket->write(packet2); } void contactListTree::sendFile(QByteArray &part1, QByteArray &part2, QByteArray &part3) { QByteArray packet; emit incSnacSeq(); packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); QByteArray tmpPacket; snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(*snacSeq); tmpPacket.append(snac0406.getData()); tmpPacket.append(part1); tmpPacket.append(convertToByteArray((quint16)0x0005)); tmpPacket.append(convertToByteArray((quint16)(24 + part2.length() + part3.length()))); quint32 localIP = tcpSocket->localAddress().toIPv4Address(); tmpPacket.append(part2); tlv tlv02; tlv02.setType(0x0002); tlv02.setData((quint32)localIP); tlv tlv16; tlv16.setType(0x0016); tlv16.setData((quint32)(localIP ^ 0xffffffff)); tlv tlv03; tlv03.setType(0x0003); tlv03.setData((quint32)localIP); tmpPacket.append(tlv02.getData()); tmpPacket.append(tlv16.getData()); tmpPacket.append(tlv03.getData()); tmpPacket.append(part3); packet.append(convertToByteArray((quint16)tmpPacket.length())); packet.append(tmpPacket); emit incFlapSeq(); tcpSocket->write(packet); } void contactListTree::sendFileActionTriggered() { sendFileFromWindow(currentContextBuddy->getUin()); } void contactListTree::sendCancelSending(QByteArray &part) { QByteArray packet; emit incSnacSeq(); packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)(10 + part.length()))); snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(*snacSeq); packet.append(snac0406.getData()); packet.append(part); emit incFlapSeq(); tcpSocket->write(packet); } void contactListTree::redirectToProxy(const QByteArray &part) { QByteArray packet; emit incSnacSeq(); packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)(10 + part.length()))); snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(*snacSeq); packet.append(snac0406.getData()); packet.append(part); emit incFlapSeq(); tcpSocket->write(packet); } void contactListTree::sendAcceptMessage(const QByteArray &part) { QByteArray packet; emit incSnacSeq(); packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)(10 + part.length()))); snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(*snacSeq); packet.append(snac0406.getData()); packet.append(part); emit incFlapSeq(); tcpSocket->write(packet); } void contactListTree::sendImage(const QString &uin, const QString &path) { // if ( buddyList.contains(uin) && QFile::exists(path)) // { // emit incSnacSeq(); // // icqMessage message(codepage); // // message.sendImage(tcpSocket, uin, path,*flapSeq, *snacSeq); // emit incFlapSeq(); // //// if ( saveHistory ) //// historyObject->saveHistoryMessage(msg.fromUin, //// accountNickname, QDateTime::currentDateTime() , false, msg.message); // } } void contactListTree::readXstatusTriggered() { emit incSnacSeq(); icqMessage message(codepage); message.requestXStatus(tcpSocket, currentContextBuddy->getUin(), icqUin, *flapSeq, *snacSeq); emit incFlapSeq(); readAwayDialog *dialog = new readAwayDialog; dialog->setWindowTitle(tr("%1 xStatus message").arg(currentContextBuddy->getName())); dialog->setAttribute(Qt::WA_QuitOnClose, false); dialog->setAttribute(Qt::WA_DeleteOnClose, true); connect( dialog, SIGNAL(destroyed ( QObject *)), this, SLOT(deleteAwayWindow(QObject *))); dialog->show(); awayMessageList.insert(message.msgCookie, dialog); } void contactListTree::sendAuthReqAnswer(bool accep, const QString &uin) { emit incSnacSeq(); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)*flapSeq)); packet.append(convertToByteArray((quint16)(16 + uin.toUtf8().length()))); snac snac131a; snac131a.setFamily(0x0013); snac131a.setSubType(0x001a); snac131a.setReqId(*snacSeq); packet.append(snac131a.getData()); packet[packet.length()] = (quint8)uin.toUtf8().length(); packet.append(uin.toUtf8()); if ( accep) packet[packet.length()] = (quint8)1; else packet[packet.length()] = (quint8)0; packet.append(convertToByteArray((quint16)0)); packet.append(convertToByteArray((quint16)0)); emit incFlapSeq(); tcpSocket->write(packet); } void contactListTree::hideRoot(bool flag) { } QString contactListTree::addXstatusMessage(const QString &xtrauin,QByteArray &msg) { if (msg.contains(QByteArray::fromHex("4177617920537461747573204d657373616765"))) { msg = msg.right(msg.length() - 19); QString xtraaw = xTraAway(QString::fromUtf8(msg)); if ( buddyList.contains(xtrauin)) { treeBuddyItem *buddy = buddyList.value(xtrauin); buddy->setXstatusCaptionAndMessage(xtraaw, ""); buddy->setXstatusText(); chatWindowOpened(buddy->getUin()); } return xtraaw; } else { msg = msg.right(msg.length() - 98); msg.chop(13); QString title = findTitle(QString::fromUtf8(msg)); QString message = findMessage(QString::fromUtf8(msg)); if ( buddyList.contains(xtrauin)) { treeBuddyItem *buddy = buddyList.value(xtrauin); buddy->setXstatusCaptionAndMessage(title, message); buddy ->setXstatusText(); chatWindowOpened(buddy->getUin()); } QString xtraaw = "" + title +"
" + message.replace("\n", "
"); return xtraaw; } } QString contactListTree::findTitle(QString _givenText) { QRegExp regExp("[&][l][t][;][t][i][t][l][e][&][g][t][;](.+)[&][l][t][;][/][t][i][t][l][e][&][g][t][;]"); int pos = 0; regExp.indexIn(_givenText, pos); QString rez = regExp.cap(0); return rez.mid(13, rez.length() - 27); } QString contactListTree::findMessage(QString _givenText) { QRegExp regExp("[&][l][t][;][d][e][s][c][&][g][t][;](.+)[&][l][t][;][/][d][e][s][c][&][g][t][;]"); int pos = 0; regExp.indexIn(_givenText, pos); QString rez = regExp.cap(0); return rez.mid(12, rez.length() - 25); } QString contactListTree::xTraAway(QString _givenText) { QRegExp regExp("[<][B][O][D][Y][>](.+)[<][/][B][O][D][Y][>]"); int pos = 0; regExp.indexIn(_givenText, pos); QString rez = regExp.cap(0); return rez.mid(6, rez.length() - 13); } void contactListTree::offlineHideButtonClicked(bool flag) { if ( showOffline != flag) { showOffline = flag; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.setValue("contactlist/hideoff", showOffline); showOfflineUsers(); } } void contactListTree::askForXstatusTimerTick() { if ( xStatusTickList.count() ) { treeBuddyItem *buddy = xStatusTickList.at(0); if ( buddy->m_xstatus_already_readed ) { chatWindowOpened(buddy->getUin()); } if (buddy->xStatusPresent && showXstatusesinToolTips && !buddy->m_xstatus_already_readed ) { if ( !buddy->icqLite) { emit incSnacSeq(); icqMessage message(codepage); message.requestXStatus(tcpSocket, buddy->getUin(), icqUin, *flapSeq, *snacSeq); emit incFlapSeq(); } else { emit incSnacSeq(); icqMessage message(codepage); message.awayType = 0x1a; message.requestAutoreply(tcpSocket, buddy->getUin(),*flapSeq, *snacSeq); emit incFlapSeq(); } } else { xStatusTickList.removeAt(0); askForXstatusTimerTick(); } xStatusTickList.removeAt(0); QTimer::singleShot(500,this, SLOT(askForXstatusTimerTick())); } else letMeAskYouAboutXstatusPlease = true; } void contactListTree::onUpdateTranslation() { createGroup->setText(tr("New group")); renameGroup->setText(tr("Rename group")); deleteGroup->setText(tr("Delete group")); sendMessageAction->setText(tr("Send message")); userInformationAction->setText(tr("Contact details")); copyUINAction->setText(tr("Copy UIN to clipboard")); statusCheckAction->setText(tr("Contact status check")); messageHistoryAction->setText(tr("Message history")); readAwayAction->setText(tr("Read away message")); renameContactAction->setText(tr("Rename contact")); deleteContactAction->setText(tr("Delete contact")); moveContactAction->setText(tr("Move to group")); addToVisibleAction->setText(tr("Add to visible list")); addToInvisibleAction->setText(tr("Add to invisible list")); addToIgnoreAction->setText(tr("Add to ignore list")); requestAuthorizationAction->setText(tr("Authorization request")); addToContactListAction->setText(tr("Add to contact list")); allowToAddMe->setText(tr("Allow contact to add me")); removeMyself->setText(tr("Remove myself from contact's list")); readXstatus->setText(tr("Read custom status")); } void contactListTree::onReloadGeneralSettings() { // QHashIterator iterator(buddyList); // // while(iterator.hasNext()) // { // treeBuddyItem *buddy = NULL; // iterator.next(); // // buddy = iterator.value(); // buddy->setIcon(0, (statusIconClass::getInstance()->*(buddy->statusIconMethod))()); // } } void contactListTree::sendFileFromWindow(const QString &uin) { if ( buddyList.contains(uin)) { if ( buddyList.value(uin)->fileTransferSupport) { if ( !buddyList.value(uin)->isOffline) { // QFileDialog dialog(0,QObject::tr("Open File"),"",QObject::tr("All files (*)")); // dialog.setFileMode(QFileDialog::ExistingFiles); // dialog.setAttribute(Qt::WA_QuitOnClose, false); // QStringList file_names; // if ( !dialog.exec() ) // return; // file_names = dialog.selectedFiles(); QStringList file_names = QFileDialog::getOpenFileNames(0,QObject::tr("Open File"),QDir::homePath(),QObject::tr("All files (*)")); if (file_names.isEmpty()) { return; } fileTransferObject->sendFileTriggered(uin, file_names); } } else emit sendSystemMessage(tr("Contact does not support file transfer")); } } void contactListTree::deleteFromIgnoreActionTriggered() { deleteFromPrivacyList(currentContextBuddy->getUin(), 2); if ( privacyListWindowOpen) privacyWindow->createLists(); currentContextBuddy->m_ignore_contact = false; currentContextBuddy->setCustomIcon(QIcon(),7); } void contactListTree::deleteFromInvisibleActionTriggered() { deleteFromPrivacyList(currentContextBuddy->getUin(), 1); if ( privacyListWindowOpen) privacyWindow->createLists(); currentContextBuddy->m_invisible_contact = false; currentContextBuddy->setCustomIcon(QIcon(),6); } void contactListTree::deleteFromVisibleActionTriggered() { deleteFromPrivacyList(currentContextBuddy->getUin(), 0); if ( privacyListWindowOpen) privacyWindow->createLists(); currentContextBuddy->m_visible_contact = false; currentContextBuddy->setCustomIcon(QIcon(),5); } void contactListTree::copyUINActionTriggered() { QApplication::clipboard()->setText(currentContextBuddy->getUin()); } void contactListTree::editNoteActionTriggered() { noteWidget *noteW = new noteWidget(icqUin, currentContextBuddy->getUin(), currentContextBuddy->getName(), m_profile_name); connect( noteW, SIGNAL(destroyed ( QObject *)), this, SLOT(deleteNoteWindow(QObject *))); noteWidgetsList.insert(currentContextBuddy->getUin(), noteW); noteW->show(); } void contactListTree::onStatusChanged(accountStatus status) { if (currentStatus == status) return; // playing sounds // going online if (((currentStatus == offline) || (currentStatus == connecting)) && ((status != offline) && (status != connecting))) emit playSoundEvent(SoundEvent::Connected, status); // going offline else if (status == offline) emit playSoundEvent(SoundEvent::Disconnected, offline); // saving status currentStatus = status; } void contactListTree::deleteNoteWindow(QObject *obj) { noteWidget *tempWindow = (noteWidget *)(obj); noteWidgetsList.remove(noteWidgetsList.key(tempWindow)); } void contactListTree::getChangeFontSignal(const QFont &f, const QColor &fc, const QColor &c) { // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); // settings.setValue("chatwindow/fontcolor", fc); // settings.setValue("chatwindow/backcolor", c); // settings.setValue("chatwindow/font", f); // // foreach(chatWindow *w, chatWindowList) // { // w->setWindowFont(f,fc,c); // } } void contactListTree::getMessageAck(quint16 length) { QByteArray msgCookie = socket->read(8); socket->read(2); length -= 10; quint8 uinLength = convertToInt8(socket->read(1)); length--; QString uin = socket->read(uinLength); length -= uinLength; if ( length ) socket->read(length); // if ( chatWindowList.contains(uin) && messageCursorPositions.contains(msgCookie)) // { // chatWindowList.value(uin)->messageApply(messageCursorPositions.value(msgCookie)); // } // if ( messageCursorPositions.contains(msgCookie)) // { // messageDelievered(uin,0,messageCursorPositions.value(msgCookie)); // } // // messageCursorPositions.remove(msgCookie); } QByteArray contactListTree::convertPassToCodePage(const QString &pass) { if (!codec) return pass.toLocal8Bit(); return codec->fromUnicode(pass); } void contactListTree::addGroupToCL(quint16 group_id, const QString &group_name) { TreeModelItem group_item; group_item.m_protocol_name = "ICQ"; group_item.m_account_name = icqUin; group_item.m_item_name = group_id?QString::number(group_id):""; group_item.m_parent_name = icqUin; group_item.m_item_type = 1; m_icq_plugin_system.addItemToContactList(group_item, group_name); } void contactListTree::renameGroupInCL(const QString &new_name, quint16 group_id) { TreeModelItem group_item; group_item.m_protocol_name = "ICQ"; group_item.m_account_name = icqUin; group_item.m_item_name = group_id?QString::number(group_id):""; group_item.m_parent_name = icqUin; group_item.m_item_type = 1; m_icq_plugin_system.setContactItemName(group_item, new_name); } void contactListTree::addContactToCL(quint16 group_id, const QString &contact_uin, const QString& contact_name) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.addItemToContactList(contact_item, contact_name); if ( group_id ) { m_icq_plugin_system.setContactItemStatus(contact_item, statusIconClass::getInstance()->getOfflineIcon(), "offline", 1000); } else { // m_icq_plugin_system.setContactItemIcon(contact_item, m_icq_plugin_system.getStatusIcon("noauth", "icq"), 0); m_icq_plugin_system.setContactItemStatus(contact_item, m_icq_plugin_system.getStatusIcon("noauth", "icq"), "offline", 1000); } if ( buddyList.contains(contact_uin) ) { initializeBuddy(buddyList.value(contact_uin)); } } void contactListTree::renameContactInCL(quint16 group_id, const QString &contact_uin, const QString& contact_name) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.setContactItemName(contact_item, contact_name); } void contactListTree::moveContactFromGroupToGroup(quint16 old_group_id, quint16 new_group_id, const QString &contact_uin) { TreeModelItem old_item; old_item.m_protocol_name = "ICQ"; old_item.m_account_name = icqUin; old_item.m_item_name = contact_uin; old_item.m_parent_name = old_group_id?QString::number(old_group_id):""; old_item.m_item_type = 0; TreeModelItem new_item; new_item.m_protocol_name = "ICQ"; new_item.m_account_name = icqUin; new_item.m_item_name = contact_uin; new_item.m_parent_name = new_group_id?QString::number(new_group_id):""; new_item.m_item_type = 0; m_icq_plugin_system.moveItemInContactList(old_item, new_item); } void contactListTree::removeGroupFromCl(quint16 group_id) { TreeModelItem group_item; group_item.m_protocol_name = "ICQ"; group_item.m_account_name = icqUin; group_item.m_item_name = group_id?QString::number(group_id):""; group_item.m_parent_name = icqUin; group_item.m_item_type = 1; m_icq_plugin_system.removeItemFromContactList(group_item); } void contactListTree::removeContactFromCl(quint16 group_id, const QString &contact_uin) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.removeItemFromContactList(contact_item); } void contactListTree::setPrivacyIconsToContacts() { foreach(QString uin, visibleList) { if ( buddyList.contains(uin) ) { buddyList.value(uin)->m_visible_contact = true; buddyList.value(uin)->setCustomIcon(m_icq_plugin_system.getIcon("visible"),5); } } foreach(QString uin, invisibleList) { if ( buddyList.contains(uin) ) { buddyList.value(uin)->m_invisible_contact = true; buddyList.value(uin)->setCustomIcon(m_icq_plugin_system.getIcon("privacy"),6); } } foreach(QString uin, ignoreList) { if ( buddyList.contains(uin) ) { buddyList.value(uin)->m_ignore_contact = true; buddyList.value(uin)->setCustomIcon(m_icq_plugin_system.getIcon("ignorelist"),7); } } } void contactListTree::itemActivated(const QString &clicked_uin) { if ( buddyList.contains(clicked_uin) ) { doubleClickedBuddy(buddyList.value(clicked_uin)); } } void contactListTree::showItemContextMenu(const QList &action_list, const QString &item_name, int item_type, const QPoint &menu_point) { if ( item_type == 1 ) { if ( groupList.contains(item_name.toUInt())) { showGroupMenu(groupList.value(item_name.toUInt()), menu_point); } } else if ( item_type == 0) { if ( buddyList.contains(item_name) ) { showBuddyMenu(action_list,buddyList.value(item_name), menu_point); } } } void contactListTree::addMessageFromContact(const QString &contact_uin, quint16 group_id, const QString &message, const QDateTime &message_date) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.addMessageFromContact(contact_item, message, message_date); } void contactListTree::sendMessageTo(const QString &contact_uin, const QString &message, int message_icon_position) { messageFormat new_message; new_message.date = QDateTime::currentDateTime(); new_message.fromUin = contact_uin; new_message.from = icqUin; new_message.message = message; new_message.position = message_icon_position; sendMessage(new_message); } void contactListTree::addServiceMessage(const QString &contact_uin, quint16 group_id, const QString &message) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.addServiceMessage(contact_item, message); } void contactListTree::createChat(const QString &uin, quint16 group_id) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.createChat(contact_item); } QStringList contactListTree::getAdditionalInfoAboutContact(const QString &item_name, int item_type ) const { if ( !item_type ) { if (item_name == icqUin) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); QStringList additional_info_list; QString avatar_hash = settings.value("main/iconhash").toByteArray(); additional_info_list<getAvatarHash().toHex(); additional_info_list<getName() <<(avatar_hash.isEmpty()?"":(iconPath + avatar_hash)) <clientId <sendFileTriggered(contact_uin, file_names); } void contactListTree::contactTyping(const QString &contact_uin, quint16 group_id, bool typing) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.contactTyping(contact_item, typing); } void contactListTree::messageDelievered(const QString &contact_uin, quint16 group_id, int position) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.messageDelievered(contact_item, position); } bool contactListTree::checkMessageForValidation(const QString &contact_uin, const QString &message, int message_type) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+account_name, "accountsettings"); quint32 privacy = settings.value("statuses/privacy", 4).toUInt(); TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = ""; contact_item.m_item_type = 0; return m_icq_plugin_system.checkForMessageValidation(contact_item, message, message_type, privacy == 5 ? true : false); } void contactListTree::contactSettingsChanged() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); settings.beginGroup("contacts"); m_show_xstatus_icon = settings.value("xstaticon", true).toBool(); m_show_birthday_icon = settings.value("birthicon", true).toBool(); m_show_auth_icon = settings.value("authicon", true).toBool(); m_show_vis_icon = settings.value("visicon", true).toBool(); m_show_invis_icon = settings.value("invisicon", true).toBool(); m_show_ignore_icon = settings.value("ignoreicon", true).toBool(); m_show_xstatus_text = settings.value("xstattext", true).toBool(); settings.endGroup(); foreach(treeBuddyItem *buddy, buddyList) { initializeBuddy(buddy); } } void contactListTree::notifyAboutBirthday(const QString &contact_uin, quint16 group_id) { TreeModelItem contact_item; contact_item.m_protocol_name = "ICQ"; contact_item.m_account_name = icqUin; contact_item.m_item_name = contact_uin; contact_item.m_parent_name = group_id?QString::number(group_id):""; contact_item.m_item_type = 0; m_icq_plugin_system.notifyAboutBirthDay(contact_item); } void contactListTree::moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item) { if ( iAmOnline && buddyList.contains(old_item.m_item_name ) && groupList.contains(new_item.m_parent_name.toUInt())) { treeBuddyItem *buddy = buddyList.value(old_item.m_item_name); QString uin = buddy->getUin(); QString name = buddy->getName(); bool authReq = buddy->getNotAutho(); currentContextBuddy = buddy; movingBuddy = true; deleteContactActionTriggered(); sendUserAddReq(uin, name,authReq , groupList.value(new_item.m_parent_name.toUInt())->name); } } void contactListTree::deleteItemSignalFromCL(const QString &item_name, int item_type) { if ( iAmOnline ) { if ( !item_type && buddyList.contains(item_name)) { currentContextBuddy = buddyList.value(item_name); deleteContactActionTriggered(); } else if (item_type == 1 && groupList.contains(item_name.toInt())) { currentContextGroup = groupList.value(item_name.toInt()); deleteSelectedGroup(); } } } const QString contactListTree::getItemToolTip(const QString &contact_name) { if ( buddyList.contains(contact_name) ) { return buddyList.value(contact_name)->createToolTip(); } return contact_name; } void contactListTree::clearPrivacyLists() { visibleList.clear(); invisibleList.clear(); ignoreList.clear(); } void contactListTree::chatWindowOpened(const QString &contact_uin, bool new_wind) { if ( buddyList.contains(contact_uin) ) { treeBuddyItem *buddy = buddyList.value(contact_uin); QString xstatus_caption, xstatus_message; xstatus_caption = buddy->xStatusCaption; xstatus_message = buddy->xStatusMsg; if ( ( !xstatus_caption.trimmed().isEmpty() || !xstatus_message.trimmed().isEmpty() ) && ( buddy->m_xstatus_changed || new_wind )) { QString tmp_xstatus; if ( !xstatus_caption.trimmed().isEmpty()) { tmp_xstatus.append(xstatus_caption); if ( !xstatus_message.trimmed().isEmpty() ) tmp_xstatus.append(" - "); } if ( !xstatus_message.trimmed().isEmpty()) tmp_xstatus.append(xstatus_message); addServiceMessage(contact_uin, buddy->groupID, tmp_xstatus); } doubleClickedBuddy(buddy); } } void contactListTree::sendMessageRecieved(const QString &uin, const QByteArray &msg_cookie) { if ( !msg_cookie.isEmpty() ) { emit incSnacSeq(); icqMessage recieve_message(icqUin); recieve_message.sendMessageRecieved(tcpSocket, uin, msg_cookie, *flapSeq, *snacSeq); emit incFlapSeq(); } } qutim-0.2.0/plugins/icq/connection.cpp0000644000175000017500000001531211273054317021421 0ustar euroelessareuroelessar/* connection Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include //#include "buffer.h" //#include "clientIdentification.h" //#include "tlv.h" #include "connection.h" connection::connection(QTcpSocket *tcpSocket, icqBuffer *buff, const QString &account, const QString &profile_name, QObject *parent) : QObject(parent) , icqUin(account) , socket(tcpSocket) , buffer(buff) , m_profile_name(profile_name) { connectedToBos = false; connect(socket, SIGNAL(proxyAuthenticationRequired ( const QNetworkProxy & , QAuthenticator * ) ), this, SLOT(proxyAuthenticationRequired ( const QNetworkProxy & , QAuthenticator *) )); } connection::~connection() { } void connection::connectToServer(QTcpSocket *socket) { if ( getProxy()) { socket->setProxy(currentProxy); // QNetworkProxy::setApplicationProxy(getProxy()); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); //QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QString host = settings.value("connection/host", "login.icq.com").toString(); quint16 port = settings.value("connection/port", 5190).toInt(); connectedToBos = false; socket->connectToHost(host,port); } } void connection::readData(const quint16 &length) { if ( length < 10 ) { protocolVersion = buffer->read(4); if ( (length -4) > 0 ) buffer->read(length -4); } if ( !connectedToBos ) emit sendLogin(); } void connection::sendIdent(const QString &password) { clientIdentification clientLogin(icqUin, m_profile_name); clientLogin.setProcolVersion(protocolVersion); clientLogin.setScreenName(icqUin); //clientLogin.setClientName("ICQ Client"); clientLogin.setPassword(password); clientLogin.sendPacket(socket); } void connection::connectToBos(const QHostAddress &bosIp, const quint16 &port, const QByteArray cookie, const quint16 &flapSeq) { // socket->disconnectFromHost(); // if (socket->state() == QAbstractSocket::UnconnectedState) // { // socket->abort(); // socket->setProxy(QNetworkProxy::NoProxy); // socket->setProxy(getProxy()); // QNetworkProxy prox; // prox.set connectedToBos = true; emit connectingToBos(); socket->connectToHost(bosIp, port); quint16 length = 4; tlv cookieTlv; cookieTlv.setType(0x0006); cookieTlv.setData(cookie); length += cookieTlv.getLength(); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x01; packet[2] = flapSeq / 0x100; packet[3] = flapSeq % 0x100; packet[4] = length / 0x100; packet[5] = length % 0x100; packet.append(protocolVersion); packet.append(cookieTlv.getData()); socket->write(packet); // } } bool connection::getProxy() { bool success = true; //QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); if ( settings.value("connection/useproxy", false).toBool() ) { quint16 proxyType = settings.value("proxy/proxyType", 0).toInt(); if ( proxyType ) { QNetworkProxy connectionProxy; switch( proxyType ) { case 1: connectionProxy.setType(QNetworkProxy::HttpProxy); break; case 2: connectionProxy.setType(QNetworkProxy::Socks5Proxy); break; default: break; } QString hostN = settings.value("proxy/host").toString(); QHostAddress addr(hostN); if ( addr.isNull() ) { success = false; QHostInfo::lookupHost(hostN, const_cast(this), SLOT(dnsResults(QHostInfo))); } connectionProxy.setHostName(hostN); connectionProxy.setPort(settings.value("proxy/port", 1).toInt()); if ( settings.value("proxy/auth", false).toBool() ) { connectionProxy.setUser(settings.value("proxy/user").toString()); connectionProxy.setPassword(settings.value("proxy/pass").toString()); } setCurrentProxy(connectionProxy); // currentProxy.setType(connectionProxy.type()); // currentProxy.setHostName(connectionProxy.hostName()); // currentProxy.setHostName("gggg"); // currentProxy.setPort(connectionProxy.port()); // currentProxy.setUser(connectionProxy.user()); // currentProxy.setPassword(connectionProxy.password()); } // else { // currentProxy.setType(QNetworkProxy::HttpCachingProxy); // } } // currentProxy.setType(QNetworkProxy::NoProxy); return success; } void connection::proxyAuthenticationRequired ( const QNetworkProxy & /* proxy */, QAuthenticator * /*authenticator*/ ) { // qDebug()<proxy().user(); // qDebug()<proxy().password(); // authenticator->setUser(socket->proxy().user()); // authenticator->setPassword(socket->proxy().password()); // // QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/ICQ."+icqUin, "account"); // authenticator->setUser(settings.value("proxy/user").toString()); // authenticator->setPassword(settings.value("proxy/pass").toString()); } void connection::dnsResults(QHostInfo info) { if (info.addresses().count() > 0) { currentProxy.setHostName(info.addresses().at(0).toString()); socket->setProxy(currentProxy); //QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name, "icqsettings"); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+icqUin, "accountsettings"); QString host = settings.value("connection/host", "login.icq.com").toString(); quint16 port = settings.value("connection/port", 5190).toInt(); connectedToBos = false; socket->connectToHost(host,port); } } void connection::setCurrentProxy(QNetworkProxy &proxyToCopy) { currentProxy.setType(proxyToCopy.type()); currentProxy.setHostName(proxyToCopy.hostName()); currentProxy.setPort(proxyToCopy.port()); currentProxy.setUser(proxyToCopy.user()); currentProxy.setPassword(proxyToCopy.password()); } qutim-0.2.0/plugins/icq/connection.h0000644000175000017500000000343711273054317021073 0ustar euroelessareuroelessar/* connection Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 CONNECTION_H #define CONNECTION_H #include #include #include #include #include "buffer.h" #include "clientIdentification.h" #include "tlv.h" class tcpSocket; class icqBuffer; class connection : public QObject { Q_OBJECT public: connection(QTcpSocket *, icqBuffer *,const QString &, const QString &profile_name, QObject *parent = 0); ~connection(); void connectToServer(QTcpSocket *); void readData(const quint16 &); void sendIdent(const QString &); void connectToBos(const QHostAddress &, const quint16 &, const QByteArray, const quint16 &); signals: void connected(); void sendLogin(); void connectingToBos(); private slots: void proxyAuthenticationRequired ( const QNetworkProxy & proxy, QAuthenticator * authenticator ); void dnsResults(QHostInfo); private: QNetworkProxy currentProxy; bool getProxy(); QString icqUin; QTcpSocket *socket; icqBuffer *buffer; QByteArray protocolVersion; bool connectedToBos; void setCurrentProxy(QNetworkProxy &); QString m_profile_name; }; #endif // CONNECTION_H qutim-0.2.0/plugins/icq/icq.qrc0000644000175000017500000000014511273071676020046 0ustar euroelessareuroelessar icons/icqprotocol.png qutim-0.2.0/plugins/icq/customstatusdialog.cpp0000644000175000017500000001312111273054317023214 0ustar euroelessareuroelessar/* customStatusDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "customstatusdialog.h" #include "icqpluginsystem.h" #include customStatusDialog::customStatusDialog(const QString &u, const QString &profile_name, QWidget *parent) : QDialog(parent) , mineUin(u) , m_profile_name(profile_name) { ui.setupUi(this); setFixedSize(size()); setAttribute(Qt::WA_QuitOnClose, false); connect(ui.iconList, SIGNAL(itemDoubleClicked(QListWidgetItem *)), ui.chooseButton, SIGNAL(clicked())); setWindowIcon(Icon("statuses")); ui.chooseButton->setIcon(Icon("apply")); ui.cancelButton->setIcon(Icon("cancel")); } customStatusDialog::~customStatusDialog() { qDeleteAll(itemList); } void customStatusDialog::setStatuses(int index, const QList &list) { QListWidgetItem *none = new QListWidgetItem(ui.iconList); none->setIcon(IcqPluginSystem::instance().getIcon("icq_xstatus")); foreach(QString path, list) { QListWidgetItem *tmp= new QListWidgetItem(ui.iconList); itemList.append(tmp); tmp->setIcon(QIcon(path)); tmp->setToolTip(getToolTip(list.indexOf(path))); } statusIndex = index; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+mineUin, "accountsettings"); QString cap = settings.value("xstatus"+ QString::number(statusIndex - 1) +"/caption", "").toString(); if ( cap.isEmpty()) ui.captionEdit->setText(ui.iconList->item(statusIndex)->toolTip()); else setCaption(cap); setMessage(settings.value("xstatus"+ QString::number(statusIndex - 1) +"/message", "").toString()); if ( !index ) { ui.captionEdit->clear(); ui.awayEdit->clear(); ui.captionEdit->setEnabled(false); ui.awayEdit->setEnabled(false); } ui.birthBox->setChecked(settings.value("xstatus/birth", false).toBool()); } QString customStatusDialog::getToolTip(int index) const { switch(index) { case 0: return tr("Angry"); case 1: return tr("Taking a bath"); case 2: return tr("Tired"); case 3: return tr("Party"); case 4: return tr("Drinking beer"); case 5: return tr("Thinking"); case 6: return tr("Eating"); case 7: return tr("Watching TV"); case 8: return tr("Meeting"); case 9: return tr("Coffee"); case 10: return tr("Listening to music"); case 11: return tr("Business"); case 12: return tr("Shooting"); case 13: return tr("Having fun"); case 14: return tr("On the phone"); case 15: return tr("Gaming"); case 16: return tr("Studying"); case 17: return tr("Shopping"); case 18: return tr("Feeling sick"); case 19: return tr("Sleeping"); case 20: return tr("Surfing"); case 21: return tr("Browsing"); case 22: return tr("Working"); case 23: return tr("Typing"); case 24: return tr("Picnic"); case 28: return tr("On WC"); case 29: return tr("To be or not to be"); case 30: return tr("PRO 7"); case 31: return tr("Love"); case 34: return tr("Sex"); case 35: return tr("Smoking"); case 36: return tr("Cold"); case 37: return tr("Crying"); case 38: return tr("Fear"); case 39: return tr("Reading"); case 40: return tr("Sport"); case 41: return tr("In tansport"); default: return tr("?"); } } void customStatusDialog::on_iconList_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * /*previous*/ ) { statusIndex = ui.iconList->row(current); if ( current->toolTip().isEmpty() ) { ui.captionEdit->clear(); ui.awayEdit->clear(); ui.captionEdit->setEnabled(false); ui.awayEdit->setEnabled(false); } else { // ui.captionEdit->setText(current->toolTip()); ui.captionEdit->setEnabled(true); ui.awayEdit->setEnabled(true); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+mineUin, "accountsettings"); QString cap = settings.value("xstatus"+ QString::number(statusIndex -1 ) +"/caption", "").toString(); if ( cap.isEmpty()) ui.captionEdit->setText(current->toolTip()); else setCaption(cap); setMessage(settings.value("xstatus"+ QString::number(statusIndex - 1) +"/message", "").toString()); } } void customStatusDialog::on_chooseButton_clicked() { status = statusIndex; statusCaption = ui.captionEdit->text(); statusMessage = ui.awayEdit->toPlainText(); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+mineUin, "accountsettings"); settings.setValue("xstatus/index", status); settings.setValue("xstatus"+ QString::number(statusIndex - 1) + "/caption", statusCaption); settings.setValue("xstatus"+ QString::number(statusIndex - 1) + "/message", statusMessage); settings.setValue("xstatus/caption", statusCaption); settings.setValue("xstatus/message", statusMessage); settings.setValue("xstatus/birth", ui.birthBox->isChecked()); accept(); } void customStatusDialog::on_awayEdit_textChanged() { QString xstat = ui.awayEdit->toPlainText(); if (xstat.length() > 6500){ ui.chooseButton->setEnabled(false); } else { ui.chooseButton->setEnabled(true); } } qutim-0.2.0/plugins/icq/GPL0000644000175000017500000004313111273071676017132 0ustar euroelessareuroelessar GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qutim-0.2.0/plugins/icq/icq.pro0000644000175000017500000000706211273054317020057 0ustar euroelessareuroelessar# ##################################################################### # Automatically generated by qmake (2.01a) Wed Oct 8 11:31:32 2008 # ##################################################################### TEMPLATE = lib TARGET = icq OBJECTS_DIR = build/obj UI_DIR = build/uic MOC_DIR = build/moc RCC_DIR = build/rcc DEPENDPATH += . \ settings INCLUDEPATH += ../../include ../../../include unix:INCLUDEPATH += /usr/include macx:INCLUDEPATH += /opt/local/include CONFIG += qt \ plugin CONFIG -= embed_manifest_dll QT += core \ gui \ network \ xml RESOURCES += icq.qrc # Input HEADERS += acceptauthdialog.h \ accountbutton.h \ addaccountform.h \ addbuddydialog.h \ addrenamedialog.h \ buddycaps.h \ buddypicture.h \ buffer.h \ clientIdentification.h \ clientidentify.h \ clientmd5login.h \ closeconnection.h \ connection.h \ contactlist.h \ customstatusdialog.h \ deletecontactdialog.h \ filerequestwindow.h \ filetransfer.h \ filetransferwindow.h \ flap.h \ icqaccount.h \ icqlayer.h \ icqmessage.h \ icqpluginsystem.h \ metainformation.h \ modifyitem.h \ multiplesending.h \ notewidget.h \ oscarprotocol.h \ passwordchangedialog.h \ passworddialog.h \ privacylistwindow.h \ quticqglobals.h \ readawaydialog.h \ requestauthdialog.h \ searchuser.h \ serverloginreply.h \ servicessetup.h \ snac.h \ snacchannel.h \ statusiconsclass.h \ tlv.h \ treebuddyitem.h \ treegroupitem.h \ userinformation.h \ settings/contactsettings.h \ settings/icqsettings.h \ settings/networksettings.h \ settings/statussettings.h \ plugineventeater.h \ accounteditdialog.h FORMS += acceptauthdialog.ui \ addaccountform.ui \ addbuddydialog.ui \ addrenamedialog.ui \ customstatusdialog.ui \ deletecontactdialog.ui \ filerequestwindow.ui \ filetransferwindow.ui \ multiplesending.ui \ notewidget.ui \ passwordchangedialog.ui \ passworddialog.ui \ privacylistwindow.ui \ readawaydialog.ui \ requestauthdialog.ui \ searchuser.ui \ userinformation.ui \ settings/contactsettings.ui \ settings/icqsettings.ui \ settings/networksettings.ui \ settings/statussettings.ui \ accounteditdialog.ui SOURCES += acceptauthdialog.cpp \ accountbutton.cpp \ addaccountform.cpp \ addbuddydialog.cpp \ addrenamedialog.cpp \ buddypicture.cpp \ buffer.cpp \ clientIdentification.cpp \ clientidentify.cpp \ clientmd5login.cpp \ closeconnection.cpp \ connection.cpp \ contactlist.cpp \ customstatusdialog.cpp \ deletecontactdialog.cpp \ filerequestwindow.cpp \ filetransfer.cpp \ filetransferwindow.cpp \ flap.cpp \ icqaccount.cpp \ icqlayer.cpp \ icqmessage.cpp \ icqpluginsystem.cpp \ metainformation.cpp \ multiplesending.cpp \ notewidget.cpp \ oscarprotocol.cpp \ passwordchangedialog.cpp \ passworddialog.cpp \ privacylistwindow.cpp \ readawaydialog.cpp \ requestauthdialog.cpp \ searchuser.cpp \ serverloginreply.cpp \ servicessetup.cpp \ snac.cpp \ snacchannel.cpp \ statusiconsclass.cpp \ tlv.cpp \ treebuddyitem.cpp \ treegroupitem.cpp \ userinformation.cpp \ settings/contactsettings.cpp \ settings/icqsettings.cpp \ settings/networksettings.cpp \ settings/statussettings.cpp \ plugineventeater.cpp \ accounteditdialog.cpp INSTALLS += target unix:target.path += /usr/lib/qutim qutim-0.2.0/plugins/icq/addaccountform.cpp0000644000175000017500000000175011273054317022254 0ustar euroelessareuroelessar/* AddAccountForm Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "addaccountform.h" AddAccountForm::AddAccountForm(QWidget *parent) : QWidget(parent) { ui.setupUi(this); QRegExp rx("[1-9][0-9]{1,9}"); QValidator *validator = new QRegExpValidator(rx, this); ui.uinEdit->setValidator(validator); } AddAccountForm::~AddAccountForm() { } qutim-0.2.0/plugins/icq/searchuser.cpp0000644000175000017500000005021511273054317021427 0ustar euroelessareuroelessar/* searchUser Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "searchuser.h" #include "statusiconsclass.h" #include "icqpluginsystem.h" searchUser::searchUser(const QString &profile_name, QWidget *parent) : QWidget(parent) , m_profile_name(profile_name) { ui.setupUi(this); createContextMenu(); QRegExp rx("[1-9][0-9-]{1,11}"); QValidator *validator = new QRegExpValidator(rx, this); ui.uinEdit->setValidator(validator); QRegExp rxMail("([a-zA-Z0-9\\-\\_\\.]+@([a-zA-Z0-9\\-\\_]+\\.)+[a-zA-Z]+)"); QValidator *validatorMail = new QRegExpValidator(rxMail, this); ui.emailEdit->setValidator(validatorMail); ui.resultTreeWidget->hideColumn(9); ui.moreBox->setVisible(false); adjustSize(); setWindowTitle(tr("Add/find users")); setWindowIcon(IcqPluginSystem::instance().getIcon("search")); resize(700,500); // setFixedSize(700,500); move(desktopCenter()); ui.uinButton->setChecked(true); ui.resultTreeWidget->setColumnWidth(0,22); ui.resultTreeWidget->setColumnWidth(1,22); ui.resultTreeWidget->setColumnWidth(6,60); ui.resultTreeWidget->setColumnWidth(7,70); // addFoundedContact(true, true, "1245345", "lo", "vasia", "koz", "r@t.ru", 0, 2, 2, 15); // addFoundedContact(true, true, "1245345", "lo", "vasia", "koz", "r@t.ru", 0, 2, 2, 15); gender = 0; minAge = 0; maxAge = 0; countryCode = 0; interestsCode = 0; languageCode = 0; ui.maritalComboBox->setVisible(false); ui.maritalLabel->setVisible(false); } searchUser::~searchUser() { } void searchUser::rellocateDialogToCenter(QWidget *widget) { QDesktopWidget &desktop = *QApplication::desktop(); // Get current screen num int curScreen = desktop.screenNumber(widget); // Get available geometry of the screen QRect screenGeom = desktop.availableGeometry(curScreen); // Let's calculate point to move dialog QPoint moveTo(screenGeom.left(), screenGeom.top()); moveTo.setX(moveTo.x() + screenGeom.width() / 2); moveTo.setY(moveTo.y() + screenGeom.height() / 2); moveTo.setX(moveTo.x() - this->size().width() / 2); moveTo.setY(moveTo.y() - this->size().height() / 2); this->move(moveTo); } void searchUser::on_moreButton_toggled(bool toggled) { ui.moreBox->setVisible(toggled); } void searchUser::on_clearButton_clicked() { ui.uinEdit->clear(); ui.emailEdit->clear(); ui.nickEdit->clear(); ui.firstEdit->clear(); ui.lastEdit->clear(); ui.genderComboBox->setCurrentIndex(0); ui.ageComboBox->setCurrentIndex(0); ui.countryComboBox->setCurrentIndex(0); ui.cityEdit->clear(); ui.interestsComboBox->setCurrentIndex(0); ui.maritalComboBox->setCurrentIndex(0); ui.languageComboBox->setCurrentIndex(0); ui.occupationComboBox->setCurrentIndex(0); ui.keyWordEdit->clear(); } QPoint searchUser::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } QString searchUser::getUin() { return ui.uinEdit->text().remove('-'); } void searchUser::on_searchButton_clicked() { if ( ui.uinButton->isChecked() && ui.uinEdit->text().isEmpty()) return; if ( ui.emailButton->isChecked() && ui.emailEdit->text().isEmpty()) return; if ( ui.otherButton->isChecked() ) { bool sendSearchPacket = false; if ( !ui.nickEdit->text().isEmpty() ) sendSearchPacket = true; if ( !ui.firstEdit->text().isEmpty() ) sendSearchPacket = true; if ( !ui.lastEdit->text().isEmpty() ) sendSearchPacket = true; if ( !ui.cityEdit->text().isEmpty() ) sendSearchPacket = true; if ( !ui.keyWordEdit->text().isEmpty() ) sendSearchPacket = true; if ( int index = ui.genderComboBox->currentIndex() ) { gender = index; sendSearchPacket = true; } else gender = 0; if ( int index = ui.ageComboBox->currentIndex() ) { switch(index) { case 1: minAge = 13; maxAge = 17; break; case 2: minAge = 18; maxAge = 22; break; case 3: minAge = 23; maxAge = 29; break; case 4: minAge = 30; maxAge = 39; break; case 5: minAge = 40; maxAge = 49; break; case 6: minAge = 50; maxAge = 59; break; case 7: minAge = 60; maxAge = 90; break; } sendSearchPacket = true; } else { minAge = 0; maxAge = 0; } if (int index = ui.countryComboBox->currentIndex() ) { switch(index ) { case 1: countryCode = 93; break; case 2: countryCode = 355; break; case 3: countryCode = 213; break; case 4: countryCode = 684; break; case 5: countryCode = 376; break; case 6: countryCode = 244; break; case 7: countryCode = 101; break; case 8: countryCode = 102; break; case 9: countryCode = 1021; break; case 10: countryCode = 5902; break; case 11: countryCode = 54; break; case 12: countryCode = 374; break; case 13: countryCode = 297; break; case 14: countryCode = 247; break; case 15: countryCode = 61; break; case 16: countryCode = 43; break; case 17: countryCode = 994; break; case 18: countryCode = 103; break; case 19: countryCode = 973; break; case 20: countryCode = 880; break; case 21: countryCode = 104; break; case 22: countryCode = 120; break; case 23: countryCode = 375; break; case 24: countryCode = 32; break; case 25: countryCode = 501; break; case 26: countryCode = 229; break; case 27: countryCode = 105; break; case 28: countryCode = 975; break; case 29: countryCode = 591; break; case 30: countryCode = 267; break; case 31: countryCode = 55; break; case 32: countryCode = 673; break; case 33: countryCode = 359; break; case 34: countryCode = 226; break; case 35: countryCode = 257; break; case 36: countryCode = 855; break; case 37: countryCode = 237; break; case 38: countryCode = 107; break; case 39: countryCode = 178; break; case 40: countryCode = 108; break; case 41: countryCode = 235; break; case 42: countryCode = 56; break; case 43: countryCode = 86; break; case 44: countryCode = 672; break; case 45: countryCode = 57; break; case 46: countryCode = 2691; break; case 47: countryCode = 682; break; case 48: countryCode = 506; break; case 49: countryCode = 385; break; case 50: countryCode = 53; break; case 51: countryCode = 357; break; case 52: countryCode = 42; break; case 53: countryCode = 45; break; case 54: countryCode = 246; break; case 55: countryCode = 253; break; case 56: countryCode = 109; break; case 57: countryCode = 110; break; case 58: countryCode = 593; break; case 59: countryCode = 20; break; case 60: countryCode = 503; break; case 61: countryCode = 291; break; case 62: countryCode = 372; break; case 63: countryCode = 251; break; case 64: countryCode = 298; break; case 65: countryCode = 500; break; case 66: countryCode = 679; break; case 67: countryCode = 358; break; case 68: countryCode = 33; break; case 69: countryCode = 5901; break; case 70: countryCode = 594; break; case 71: countryCode = 689; break; case 72: countryCode = 241; break; case 73: countryCode = 220; break; case 74: countryCode = 995; break; case 75: countryCode = 49; break; case 76: countryCode = 233; break; case 77: countryCode = 350; break; case 78: countryCode = 30; break; case 79: countryCode = 299; break; case 80: countryCode = 111; break; case 81: countryCode = 590; break; case 82: countryCode = 502; break; case 83: countryCode = 224; break; case 84: countryCode = 245; break; case 85: countryCode = 592; break; case 86: countryCode = 509; break; case 87: countryCode = 504; break; case 88: countryCode = 852; break; case 89: countryCode = 36; break; case 90: countryCode = 354; break; case 91: countryCode = 91; break; case 92: countryCode = 62; break; case 93: countryCode = 964; break; case 94: countryCode = 353; break; case 95: countryCode = 972; break; case 96: countryCode = 39; break; case 97: countryCode = 112; break; case 98: countryCode = 81; break; case 99: countryCode = 962; break; case 100: countryCode = 705; break; case 101: countryCode = 254; break; case 102: countryCode = 686; break; case 103: countryCode = 850; break; case 104: countryCode = 82; break; case 105: countryCode = 965; break; case 106: countryCode = 706; break; case 107: countryCode = 856; break; case 108: countryCode = 371; break; case 109: countryCode = 961; break; case 110: countryCode = 266; break; case 111: countryCode = 231; break; case 112: countryCode = 4101; break; case 113: countryCode = 370; break; case 114: countryCode = 352; break; case 115: countryCode = 853; break; case 116: countryCode = 261; break; case 117: countryCode = 265; break; case 118: countryCode = 60; break; case 119: countryCode = 960; break; case 120: countryCode = 223; break; case 121: countryCode = 356; break; case 122: countryCode = 692; break; case 123: countryCode = 596; break; case 124: countryCode = 222; break; case 125: countryCode = 230; break; case 126: countryCode = 269; break; case 127: countryCode = 52; break; case 128: countryCode = 373; break; case 129: countryCode = 377; break; case 130: countryCode = 976; break; case 131: countryCode = 113; break; case 132: countryCode = 212; break; case 133: countryCode = 258; break; case 134: countryCode = 95; break; case 135: countryCode = 264; break; case 136: countryCode = 674; break; case 137: countryCode = 977; break; case 138: countryCode = 31; break; case 139: countryCode = 114; break; case 140: countryCode = 687; break; case 141: countryCode = 64; break; case 142: countryCode = 505; break; case 143: countryCode = 227; break; case 144: countryCode = 234; break; case 145: countryCode = 683; break; case 146: countryCode = 6722; break; case 147: countryCode = 47; break; case 148: countryCode = 968; break; case 149: countryCode = 92; break; case 150: countryCode = 680; break; case 151: countryCode = 507; break; case 152: countryCode = 675; break; case 153: countryCode = 595; break; case 154: countryCode = 51; break; case 155: countryCode = 63; break; case 156: countryCode = 48; break; case 157: countryCode = 351; break; case 158: countryCode = 121; break; case 159: countryCode = 974; break; case 160: countryCode = 262; break; case 161: countryCode = 40; break; case 162: countryCode = 6701; break; case 163: countryCode = 7; break; case 164: countryCode = 250; break; case 165: countryCode = 122; break; case 166: countryCode = 670; break; case 167: countryCode = 378; break; case 168: countryCode = 966; break; case 169: countryCode = 442; break; case 170: countryCode = 221; break; case 171: countryCode = 248; break; case 172: countryCode = 232; break; case 173: countryCode = 65; break; case 174: countryCode = 4201; break; case 175: countryCode = 386; break; case 176: countryCode = 677; break; case 177: countryCode = 252; break; case 178: countryCode = 27; break; case 179: countryCode = 34; break; case 180: countryCode = 94; break; case 181: countryCode = 290; break; case 182: countryCode = 115; break; case 183: countryCode = 249; break; case 184: countryCode = 597; break; case 185: countryCode = 268; break; case 186: countryCode = 46; break; case 187: countryCode = 41; break; case 188: countryCode = 963; break; case 189: countryCode = 886; break; case 190: countryCode = 708; break; case 191: countryCode = 255; break; case 192: countryCode = 66; break; case 193: countryCode = 6702; break; case 194: countryCode = 228; break; case 195: countryCode = 690; break; case 196: countryCode = 676; break; case 197: countryCode = 216; break; case 198: countryCode = 90; break; case 199: countryCode = 709; break; case 200: countryCode = 688; break; case 201: countryCode = 256; break; case 202: countryCode = 380; break; case 203: countryCode = 44; break; case 204: countryCode = 598; break; case 205: countryCode = 1; break; case 206: countryCode = 711; break; case 207: countryCode = 678; break; case 208: countryCode = 379; break; case 209: countryCode = 58; break; case 210: countryCode = 84; break; case 211: countryCode = 441; break; case 212: countryCode = 685; break; case 213: countryCode = 967; break; case 214: countryCode = 381; break; case 215: countryCode = 382; break; case 216: countryCode = 3811; break; case 217: countryCode = 260; break; case 218: countryCode = 263; break; } sendSearchPacket = true; } else { countryCode = 0; } if ( int index = ui.interestsComboBox->currentIndex() ) { interestsCode = index + 99; sendSearchPacket = true; } else interestsCode = 0; if ( int index = ui.languageComboBox->currentIndex() ) { languageCode = index; sendSearchPacket = true; } else languageCode = 0; if ( int index = ui.occupationComboBox->currentIndex() ) { if ( index == 28) occupationCode = 99; else occupationCode = index; sendSearchPacket = true; } else occupationCode = 0; if ( !sendSearchPacket ) return; } if ( !ui.previousBox->isChecked() ) ui.resultTreeWidget->clear(); ui.statusLabel->setText(tr("Searching")); if ( ui.uinButton->isChecked() ) emit findAskedUsers(0); if ( ui.emailButton->isChecked() ) emit findAskedUsers(1); if ( ui.otherButton->isChecked()) emit findAskedUsers(2); } void searchUser::addFoundedContact(bool last, bool founded, const QString &uin, const QString &nick, const QString &firstName, const QString &lastName, const QString &email, const quint8 &authFlag, const quint16 &status, const quint8 &gender, const quint16 &age) { IcqPluginSystem &ips = IcqPluginSystem::instance(); if ( !founded ) { ui.statusLabel->setText(tr("Nothing found")); return; } if ( last ) ui.statusLabel->setText(tr("Done")); QTreeWidgetItem *contact = new QTreeWidgetItem(ui.resultTreeWidget); contact->setIcon(0, ips.getIcon("contactinfo")); contact->setIcon(1, statusIconClass::getInstance()->getContentIcon()); contact->setText(2, uin); switch( status ) { case 0: contact->setIcon(2, statusIconClass::getInstance()->getOfflineIcon()); break; case 1: contact->setIcon(2, statusIconClass::getInstance()->getOnlineIcon()); break; case 2: contact->setIcon(2, statusIconClass::getInstance()->getConnectingIcon()); break; default: contact->setIcon(2, statusIconClass::getInstance()->getConnectingIcon()); } contact->setText(3, nick); contact->setText(4, firstName); contact->setText(5, lastName); contact->setText(6, email); QString ageColumn; if ( gender == 1 ) ageColumn = "F - "; else if (gender == 2) ageColumn = "M - "; ageColumn.append(QString::number(age)); contact->setText(7, ageColumn); if ( authFlag ) { contact->setText(8, tr("Always")); contact->setText(9, "0"); } else { contact->setText(8, tr("Authorize")); contact->setText(9, "1"); } } void searchUser::on_resultTreeWidget_itemClicked(QTreeWidgetItem *item, int column) { if ( column == 1 ) emit openChatWithFounded(item->text(2), item->text(3)); else if ( column == 0) emit openInfoWindow(item->text(2), item->text(3), item->text(4), item->text(5)); } QString searchUser::getEmail() { return ui.emailEdit->text(); } bool searchUser::onlineOnly() { return ui.onlineOnlyBox->isChecked(); } void searchUser::createContextMenu() { IcqPluginSystem &ips = IcqPluginSystem::instance(); contextMenu = new QMenu(ui.resultTreeWidget); addUser = new QAction(ips.getIcon("add_user"),tr("Add to contact list"),ui.resultTreeWidget ); connect(addUser, SIGNAL(triggered()), this, SLOT(addUserActionActivated()) ); userInformationAction = new QAction(ips.getIcon("contactinfo"),tr("Contact details"),ui.resultTreeWidget ); connect(userInformationAction, SIGNAL(triggered()), this, SLOT(userInformationActionActivated()) ); sendMessageAction = new QAction(statusIconClass::getInstance()->getContentIcon(),tr("Send message"),ui.resultTreeWidget ); connect(sendMessageAction, SIGNAL(triggered()), this, SLOT(sendMessageActionActivated()) ); checkStatus = new QAction(ips.getIcon("checkstat"),tr("Contact status check"),ui.resultTreeWidget ); connect(checkStatus , SIGNAL(triggered()), this, SLOT(checkStatusActionActivated()) ); contextMenu->addAction(addUser); contextMenu->addAction(userInformationAction); contextMenu->addAction(sendMessageAction); contextMenu->addAction(checkStatus); } void searchUser::on_resultTreeWidget_customContextMenuRequested ( const QPoint & point) { clickedItemForContext = 0; clickedItemForContext = ui.resultTreeWidget->itemAt(point); if ( clickedItemForContext ) { contextMenu->popup(ui.resultTreeWidget->mapToGlobal(ui.resultTreeWidget->mapFromGlobal(QCursor::pos()))); } } void searchUser::addUserActionActivated() { if ( clickedItemForContext ) { if ( clickedItemForContext->text(9) == "0") emit addUserToContactList(clickedItemForContext->text(2), clickedItemForContext->text(3), false); else emit addUserToContactList(clickedItemForContext->text(2), clickedItemForContext->text(3), true); } } void searchUser::checkStatusActionActivated() { if ( clickedItemForContext ) emit checkStatusFor(clickedItemForContext->text(2)); } void searchUser::userInformationActionActivated() { if ( clickedItemForContext ) emit openInfoWindow(clickedItemForContext->text(2), clickedItemForContext->text(3), clickedItemForContext->text(4), clickedItemForContext->text(5)); } void searchUser::sendMessageActionActivated() { if ( clickedItemForContext ) emit openChatWithFounded(clickedItemForContext->text(2), clickedItemForContext->text(3)); } void searchUser::on_resultTreeWidget_itemDoubleClicked( QTreeWidgetItem *item , int /* col */) { if ( item ) { if ( item->text(9) == "0") emit addUserToContactList(item->text(2), item->text(3), false); else emit addUserToContactList(item->text(2), item->text(3), true); } } qutim-0.2.0/plugins/icq/metainformation.h0000644000175000017500000001001411273054317022115 0ustar euroelessareuroelessar/* metaInformation Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 METAINFORMATION_H_ #define METAINFORMATION_H_ #include class QTcpSocket; class icqBuffer; class metaInformation { public: metaInformation(const QString &); ~metaInformation(); void sendShortInfoReq(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &, const QString &); void searchByUin(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &, const QString &); void searchByEmail(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &, QString); void searchByOther(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &, bool, QString, QString, QString, quint8, quint16, quint16, quint16, QString, quint16, quint16, quint16, QString); void getFullUserInfo(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &, const QString &); void saveOwnerInfo(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &); void sendMoreInfo(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &); void changePassword(QTcpSocket *, const quint16 &, const quint32 &, const quint16 &, const QString &); QString myUin; quint16 readShortInfo(icqBuffer *); quint16 readSearchResult(icqBuffer *,bool); quint16 readBasicUserInfo(icqBuffer *); quint16 readMoreUserInfo(icqBuffer *); quint16 readWorkUserInfo(icqBuffer *); quint16 readInterestsUserInfo(icqBuffer *); quint16 readAboutUserInfo(icqBuffer *); QByteArray nick; QString foundedUin; QString foundedNick; QString foundedFirst; QString foundedLast; QString foundedEmail; quint8 authFlag; quint16 foundedStatus; quint8 foundedGender; quint16 foundedAge; bool founded; bool basicInfoSuccess; bool moreInfoSuccess; bool workInfoSuccess; bool interestsInfoSuccess; bool aboutInfoSuccess; QByteArray basicNick; QByteArray basicFirst; QByteArray basicLast; QByteArray basicEmail; QByteArray basicCity; QByteArray basicState; QByteArray basicPhone; QByteArray basicFax; QByteArray basicAddress; QByteArray basicCell; QByteArray basicZip; QString zip; QString wzip; quint16 country; quint16 moreAge; quint8 moreGender; QByteArray homepage; quint16 moreBirthYear; quint8 moreBirthDay; quint8 moreBirthMonth; quint8 moreLang1; quint8 moreLang2; quint8 moreLang3; QByteArray moreCity; QByteArray moreState; quint16 moreCountry; QByteArray workCity; QByteArray workState; QByteArray workPhone; QByteArray workFax; QByteArray workAddress; QByteArray workZip; quint16 workCountry; QByteArray workCompany; QByteArray workDepartment; QByteArray workPosition; quint16 workOccupation; QByteArray workWebPage; quint16 interCode1; QByteArray interKeyWords1; quint16 interCode2; QByteArray interKeyWords2; quint16 interCode3; QByteArray interKeyWords3; quint16 interCode4; QByteArray interKeyWords4; QByteArray about; quint8 basicAuthFlag; quint8 webAware; quint8 publishEmail; bool setBirth; private: QByteArray convertToByteArray(const quint8 &); QByteArray convertToByteArray(const quint16 &); QByteArray convertToLEByteArray(const quint16 &); QByteArray convertToByteArray(const quint32 &); QByteArray convertUinToArray(const QString &); quint16 byteArrayToLEInt16(const QByteArray &); quint32 byteArrayToLEInt32(const QByteArray &); quint8 convertToInt8(const QByteArray &); }; #endif /*METAINFORMATION_H_*/ qutim-0.2.0/plugins/icq/snacchannel.cpp0000644000175000017500000004205411273054317021542 0ustar euroelessareuroelessar/* snacChannel Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include "tlv.h" #include "snac.h" #include "clientmd5login.h" #include "serverloginreply.h" #include "servicessetup.h" #include "buffer.h" #include "snacchannel.h" snacChannel::snacChannel(QTcpSocket *s, icqBuffer *buff, quint16 seq, const QString &uin, const QString &profile_name, QObject *parent) : QObject(parent) , icqUin(uin) , tcpSocket(s) , socket(buff) , m_profile_name(profile_name) { snacReqId = 0x00000000; flapSequence = seq; reqSeq = 0x0000; m_connect_bos = false; } snacChannel::~snacChannel() { } quint32 snacChannel::returnSnacReqId() { if(!m_connect_bos) return 0x00000000; if ( snacReqId != 0xffffffff ) snacReqId++; else snacReqId = 0x00000000; return snacReqId; } void snacChannel::sendIdent(const quint16 &flapSeq) { QByteArray authReq; authReq.append(convertToByteArray((quint8)0x2A)); authReq.append(convertToByteArray((quint8)0x01)); authReq.append(convertToByteArray((quint16)flapSeq)); authReq.append(convertToByteArray((quint16)0x000c)); authReq.append(convertToByteArray((quint32)0x00000001)); authReq.append(convertToByteArray((quint32)0x80030004)); authReq.append(convertToByteArray((quint32)0x00100000)); emit incFlapSeq(); authReq.append(convertToByteArray((quint8)0x2A)); authReq.append(convertToByteArray((quint8)0x02)); authReq.append(convertToByteArray((quint16)flapSeq)); tlv screenName; screenName.setType(0x0001); screenName.setData(icqUin); quint16 length = 18; length += screenName.getLength(); authReq.append(convertToByteArray(length)); snac snacPacket; snacPacket.setFamily(0x0017); snacPacket.setSubType(0x0006); snacPacket.setReqId(returnSnacReqId()); authReq.append(snacPacket.getData()); authReq.append(screenName.getData()); authReq.append(convertToByteArray((quint16)0x004B)); authReq.append(convertToByteArray((quint16)0x0000)); authReq.append(convertToByteArray((quint16)0x005A)); authReq.append(convertToByteArray((quint16)0x0000)); tcpSocket->write(authReq); emit incFlapSeq(); } QByteArray snacChannel::convertToByteArray(const quint8 &d) { QByteArray packet; packet[0] = d; return packet; } QByteArray snacChannel::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray snacChannel::convertToByteArray(const quint32 &d) { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } void snacChannel::readData(quint16 length) { snac snacPacket; snacPacket.readData(socket); length -= 10; switch ( snacPacket.getFamily()) { case 0x00001: switch(snacPacket.getSubType()) { case 0x0003: getServicesList(length); break; case 0x0005: emit readSSTserver(length); length = 0; break; case 0x0007: serverRateLimitInfo(length); break; case 0x0018: clientRatesRequest(); break; case 0x000f: break; case 0x0021: emit getUploadIconData(length); length = 0; break; default: // qDebug()<<"Unknown 0x0001 snac sybtype:"<read(length); if ( socket->bytesAvailable() ) { emit rereadSocket(); } } quint16 snacChannel::convertToInt16(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } quint8 snacChannel::convertToInt8(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } quint32 snacChannel::convertToInt32(const QByteArray &array) { bool ok; return array.toHex().toULong(&ok,16); } void snacChannel::readAuthKey(quint16 &length) { quint16 authLength = convertToInt16(socket->read(2)); length -=2; length -= authLength; emit sendAuthKey(socket->read(authLength)); } void snacChannel::md5Login(const QString &password, const QString &authKey, const quint16 & flapSeq) { clientMd5Login login(icqUin, m_profile_name); login.setScreenName(icqUin); login.setPassword(password, authKey); login.sendPacket(tcpSocket,flapSeq,returnSnacReqId()); emit incFlapSeq(); } void snacChannel::getServerLoginReply(quint16 &length) { serverLoginReply loginReply; loginReply.readData(tcpSocket, socket, icqUin); if ( loginReply.isSnacError ) { errorMessage(loginReply.errorMessage); } else { emit sendBosServer(QHostAddress(loginReply.bosIp)); emit sendBosPort(loginReply.bosPort); emit sendCookie(loginReply.cookie); } length = 0; } void snacChannel::errorMessage(quint16 error) { switch(error) { case 0x01: emit systemMessage(tr("Invalid nick or password")); emit blockRateLimit(); break; case 0x02: emit systemMessage(tr("Service temporarily unavailable")); break; case 0x04: emit systemMessage(tr("Incorrect nick or password")); emit blockRateLimit(); break; case 0x05: emit systemMessage(tr("Mismatch nick or password")); emit blockRateLimit(); break; case 0x06: emit systemMessage(tr("Internal client error (bad input to authorizer)")); break; case 0x07: emit systemMessage(tr("Invalid account")); emit blockRateLimit(); break; case 0x08: emit systemMessage(tr("Deleted account")); emit blockRateLimit(); break; case 0x09: emit systemMessage(tr("Expired account")); emit blockRateLimit(); break; case 0x0A: emit systemMessage(tr("No access to database")); break; case 0x0B: emit systemMessage(tr("No access to resolver")); break; case 0x0C: emit systemMessage(tr("Invalid database fields")); break; case 0x0D: emit systemMessage(tr("Bad database status")); break; case 0x0E: emit systemMessage(tr("Bad resolver status")); break; case 0x0F: emit systemMessage(tr("Internal error")); break; case 0x10: emit systemMessage(tr("Service temporarily offline")); break; case 0x11: emit systemMessage(tr(" Suspended account")); break; case 0x12: emit systemMessage(tr("DB send error")); break; case 0x13: emit systemMessage(tr("DB link error")); break; case 0x14: emit systemMessage(tr("Reservation map error")); break; case 0x15: emit systemMessage(tr("The users num connected from this IP has reached the maximum")); break; case 0x17: emit systemMessage(tr(" The users num connected from this IP has reached the maximum (reservation)")); break; case 0x18: emit systemMessage(tr("Rate limit exceeded (reservation). Please try to reconnect in a few minutes")); emit blockRateLimit(); break; case 0x19: emit systemMessage(tr("User too heavily warned")); break; case 0x1A: emit systemMessage(tr("Reservation timeout")); break; case 0x1B: emit systemMessage(tr("You are using an older version of ICQ. Upgrade required")); break; case 0x1C: emit systemMessage(tr("You are using an older version of ICQ. Upgrade recommended")); break; case 0x1D: emit systemMessage(tr("Rate limit exceeded. Please try to reconnect in a few minutes")); emit blockRateLimit(); break; case 0x1E: emit systemMessage(tr("Can't register on the ICQ network. Reconnect in a few minutes")); break; case 0x20: emit systemMessage(tr("Invalid SecurID")); break; case 0x22: emit systemMessage(tr("Account suspended because of your age (age < 13)")); break; default: emit systemMessage(tr("Connection Error: %1").arg(error)); } } void snacChannel::incFlap() { if ( flapSequence != 0x8000 ) flapSequence++; else flapSequence= 0x0000; } void snacChannel::getServicesList(quint16 &length) { int arrayLength = length / 2; // quint16 familyList[arrayLength]; QList familyList; for ( int i = 0; length; ++i) { // familyList[i] = convertToInt16(socket->read(2)); familyList.append(convertToInt16(socket->read(2))); length -= 2; } QByteArray famVers; for (int i = 0; i < arrayLength; i++) { famVers.append(convertToByteArray(familyList[i])); if ( familyList.at(i) == 0x0001 ) famVers.append(convertToByteArray((quint16)0x0004)); else if ( familyList.at(i) == 0x0013 ) famVers.append(convertToByteArray((quint16)0x0004)); else famVers.append(convertToByteArray((quint16)0x0001)); } if ( length ) socket->readAll(); quint16 flapLength = 10 + arrayLength * 4; QByteArray clientFamVers; clientFamVers[0] = 0x2A; clientFamVers[1] = 0x02; clientFamVers.append(convertToByteArray(flapSequence)); clientFamVers.append(convertToByteArray(flapLength)); snac fv; fv.setFamily(0x0001); fv.setSubType(0x0017); fv.setReqId(returnSnacReqId()); clientFamVers.append(fv.getData()); clientFamVers.append(famVers); tcpSocket->write(clientFamVers); emit incFlapSeq(); } void snacChannel::clientRatesRequest() { QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flapSequence)); packet.append(convertToByteArray((quint16)10)); snac snacPacket; snacPacket.setFamily(0x0001); snacPacket.setSubType(0x0006); snacPacket.setReqId(returnSnacReqId()); packet.append(snacPacket.getData()); tcpSocket->write(packet); emit incFlapSeq(); } void snacChannel::serverRateLimitInfo(quint16 &length) { quint16 arrayLength = convertToInt16(socket->read(2)); length = 0; // quint16 classArray[arrayLength]; QList classArray; for (int i = 0; i < arrayLength; i++) { // classArray[i] = convertToInt16(socket->read(2)); classArray.append(convertToInt16(socket->read(2))); socket->read(33); } socket->readAll(); QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flapSequence)); quint16 flapLength = 10 + arrayLength * 2; packet.append(convertToByteArray(flapLength)); snac infoSnac; infoSnac.setFamily(0x0001); infoSnac.setSubType(0x0008); infoSnac.setReqId(returnSnacReqId()); packet.append(infoSnac.getData()); for (int i = 0; i < arrayLength; i++) packet.append(convertToByteArray(classArray[i])); tcpSocket->write(packet); emit incFlapSeq(); //send servicesSetup; servicesSetup servSetup(icqUin, m_profile_name); servSetup.flap011eseq = flapSequence; emit incFlapSeq(); servSetup.snac011eseq = returnSnacReqId(); servSetup.flap0202seq = flapSequence; emit incFlapSeq(); servSetup.snac0202seq = returnSnacReqId(); servSetup.flap0204seq = flapSequence; emit incFlapSeq(); servSetup.snac0204seq = returnSnacReqId(); servSetup.flap0302seq = flapSequence; emit incFlapSeq(); servSetup.snac0302seq = returnSnacReqId(); servSetup.flap0404seq = flapSequence; emit incFlapSeq(); servSetup.snac0404seq = returnSnacReqId(); servSetup.flap0402seq = flapSequence; emit incFlapSeq(); servSetup.snac0402seq = returnSnacReqId(); servSetup.flap0402seq02 = flapSequence; emit incFlapSeq(); servSetup.snac0402seq02 = returnSnacReqId(); servSetup.flap0902seq = flapSequence; emit incFlapSeq(); servSetup.snac0902seq = returnSnacReqId(); servSetup.flap1302seq = flapSequence; emit incFlapSeq(); servSetup.snac1302seq = returnSnacReqId(); servSetup.flap1305seq = flapSequence; emit incFlapSeq(); servSetup.snac1305seq = returnSnacReqId(); servSetup.setStatus(status); servSetup.sendData(tcpSocket, icqUin); emit connected(); } void snacChannel::changeStatus(accountStatus status) { servicesSetup servSetup(icqUin, m_profile_name); servSetup.flap011eseq = flapSequence; emit incFlapSeq(); servSetup.snac011eseq = returnSnacReqId(); servSetup.changeStatus(status, tcpSocket, icqUin); } void snacChannel::getContactList(quint16 &length,bool aloneSnac) { // quint16 tmpL = socket->bytesAvailable() - length; // emit clearPrivacyLists(); emit getList(!aloneSnac); // if ( socket->bytesAvailable() != tmpL ) // { // // socket->read(socket->bytesAvailable() - tmpL); // } // socket->read(length); length = 0; if ( !aloneSnac ) { servicesSetup servSetup(icqUin, m_profile_name); servSetup.flap1307seq = flapSequence; emit incFlapSeq(); servSetup.snac1307seq = returnSnacReqId(); servSetup.flap0102seq = flapSequence; emit incFlapSeq(); servSetup.snac0102seq = returnSnacReqId(); bool ok; servSetup.uin = icqUin.toUInt(&ok,10); servSetup.flap1502seq = flapSequence; emit incFlapSeq(); servSetup.snac1502seq = returnSnacReqId(); servSetup.req1502seq = reqSeq; emit incReqSeq(); servSetup.answerToList(tcpSocket); } } void snacChannel::getOncomingBuddy(quint16 &length) { quint8 uinLength = convertToInt8(socket->read(1)); length = length - 1 - uinLength; QString uin = QString::fromUtf8(socket->read(uinLength)); emit oncomingBuddy(uin, length); } void snacChannel::getOfflineBuddy(quint16 &length) { quint8 uinLength = convertToInt8(socket->read(1)); length = length - 1 - uinLength; QString uin = QString::fromUtf8(socket->read(uinLength)); emit offlineBuddy(uin, length); } void snacChannel::getMetaData(bool notAlone) { socket->read(2); quint16 length = convertToInt16(socket->read(2)) - 2; socket->read(2); QByteArray targetUin = socket->read(4); quint16 dataType = convertToInt16(socket->read(2)); if ( dataType == 0x4200) { socket->read(3); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSequence)); packet.append(convertToByteArray((quint16)24)); incFlapSeq(); snac snac1502; snac1502.setFamily(0x0015); snac1502.setSubType(0x0002); snac1502.setReqId(returnSnacReqId()); packet.append(snac1502.getData()); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x000a)); packet.append(convertToByteArray((quint16)0x0800)); packet.append(targetUin); packet.append(convertToByteArray((quint16)0x3e00)); packet.append(convertToByteArray((quint16)reqSeq)); incReqSeq(); tcpSocket->write(packet); } else if ( dataType == 0x4100 ) { emit getOfflineMessage(length - 6); } else if ( dataType == 0xda07 ) { emit readMetaData(length - 6, notAlone); }else { socket->read(length - 6); } } void snacChannel::resendCapabilities() { servicesSetup servSetup(icqUin, m_profile_name); servSetup.flap0204seq = flapSequence; emit incFlapSeq(); servSetup.snac0204seq = returnSnacReqId(); servSetup.sendCapabilities(tcpSocket); servSetup.flap011eseq = flapSequence; emit incFlapSeq(); servSetup.snac011eseq = returnSnacReqId(); servSetup.changeStatus(status, tcpSocket, icqUin); } void snacChannel::sendOnlyCapabilities() { servicesSetup servSetup(icqUin, m_profile_name); servSetup.flap0204seq = flapSequence; emit incFlapSeq(); servSetup.snac0204seq = returnSnacReqId(); servSetup.sendCapabilities(tcpSocket); servSetup.flap011eseq = flapSequence; emit incFlapSeq(); servSetup.snac011eseq = returnSnacReqId(); servSetup.sendXStatusAsAvailableMessage(tcpSocket); } qutim-0.2.0/plugins/icq/accountbutton.cpp0000644000175000017500000000170611273054317022154 0ustar euroelessareuroelessar/* accountButton Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "accountbutton.h" accountButton::accountButton(QWidget *parent): QToolButton(parent) { // setText(""); setMinimumSize(QSize(22, 22)); setMaximumSize(QSize(22, 22)); // setFlat(true); setAutoRaise(true); } accountButton::~accountButton() { } qutim-0.2.0/plugins/icq/statusiconsclass.cpp0000644000175000017500000002365611273054317022701 0ustar euroelessareuroelessar/* statusIconClass Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "statusiconsclass.h" #include "icqpluginsystem.h" // Statics QMutex statusIconClass::fInstGuard; statusIconClass *statusIconClass::fInstance = NULL; statusIconClass::statusIconClass() { reloadIcons(); } statusIconClass::~statusIconClass() { } statusIconClass *statusIconClass::getInstance() { if (!fInstance) { QMutexLocker locker(&fInstGuard); if (!fInstance) { fInstance = new statusIconClass; atexit(&statusIconClass::release); } } return fInstance; } void statusIconClass::release() { QMutexLocker locker(&fInstGuard); if (fInstance) { delete fInstance; fInstance = NULL; } } bool statusIconClass::reloadIcons() { QMutexLocker locker(&fIconLocker); onlineIcon = IcqPluginSystem::instance().getStatusIcon("online", "icq"); ffcIcon = IcqPluginSystem::instance().getStatusIcon("ffc", "icq"); awayIcon = IcqPluginSystem::instance().getStatusIcon("away", "icq"); naIcon = IcqPluginSystem::instance().getStatusIcon("na", "icq"); occupiedIcon = IcqPluginSystem::instance().getStatusIcon("occupied", "icq"); dndIcon = IcqPluginSystem::instance().getStatusIcon("dnd", "icq"); invisibleIcon = IcqPluginSystem::instance().getStatusIcon("invisible", "icq"); offlineIcon = IcqPluginSystem::instance().getStatusIcon("offline", "icq"); connectingIcon = IcqPluginSystem::instance().getStatusIcon("connecting", "icq"); atHomeIcon = IcqPluginSystem::instance().getStatusIcon("athome", "icq"); atWorkIcon = IcqPluginSystem::instance().getStatusIcon("atwork", "icq"); lunchIcon = IcqPluginSystem::instance().getStatusIcon("lunch", "icq"); evilIcon = IcqPluginSystem::instance().getStatusIcon("evil", "icq"); depressionIcon = IcqPluginSystem::instance().getStatusIcon("depression", "icq"); contentIcon = IcqPluginSystem::instance().getStatusIcon("content", "icq"); xstatusList.clear(); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus0")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus1")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus2")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus3")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus4")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus5")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus6")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus7")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus8")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus9")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus10")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus11")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus12")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus13")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus14")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus15")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus16")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus17")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus18")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus19")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus20")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus21")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus22")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus23")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus24")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus25")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus26")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus27")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus28")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus29")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus30")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus31")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus32")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus33")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus34")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus35")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus36")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus37")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus38")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus39")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus40")); xstatusList.append(IcqPluginSystem::instance().getIconFileName("icq_xstatus41")); // xstatusList.insert(0, ":/icons/xstatus/icq_xstatus0.png"); // xstatusList.insert(1, ":/icons/xstatus/icq_xstatus1.png"); // xstatusList.insert(2, ":/icons/xstatus/icq_xstatus2.png"); // xstatusList.insert(3, ":/icons/xstatus/icq_xstatus3.png"); // xstatusList.insert(4, ":/icons/xstatus/icq_xstatus4.png"); // xstatusList.insert(5, ":/icons/xstatus/icq_xstatus5.png"); // xstatusList.insert(6, ":/icons/xstatus/icq_xstatus6.png"); // xstatusList.insert(7, ":/icons/xstatus/icq_xstatus7.png"); // xstatusList.insert(8, ":/icons/xstatus/icq_xstatus8.png"); // xstatusList.insert(9, ":/icons/xstatus/icq_xstatus9.png"); // xstatusList.insert(10, ":/icons/xstatus/icq_xstatus10.png"); // xstatusList.insert(11, ":/icons/xstatus/icq_xstatus11.png"); // xstatusList.insert(12, ":/icons/xstatus/icq_xstatus12.png"); // xstatusList.insert(13, ":/icons/xstatus/icq_xstatus13.png"); // xstatusList.insert(14, ":/icons/xstatus/icq_xstatus14.png"); // xstatusList.insert(15, ":/icons/xstatus/icq_xstatus15.png"); // xstatusList.insert(16, ":/icons/xstatus/icq_xstatus16.png"); // xstatusList.insert(17, ":/icons/xstatus/icq_xstatus17.png"); // xstatusList.insert(18, ":/icons/xstatus/icq_xstatus18.png"); // xstatusList.insert(19, ":/icons/xstatus/icq_xstatus19.png"); // xstatusList.insert(20, ":/icons/xstatus/icq_xstatus20.png"); // xstatusList.insert(21, ":/icons/xstatus/icq_xstatus21.png"); // xstatusList.insert(22, ":/icons/xstatus/icq_xstatus22.png"); // xstatusList.insert(23, ":/icons/xstatus/icq_xstatus23.png"); // xstatusList.insert(24, ":/icons/xstatus/icq_xstatus24.png"); // xstatusList.insert(25, ":/icons/xstatus/icq_xstatus25.png"); // xstatusList.insert(26, ":/icons/xstatus/icq_xstatus26.png"); // xstatusList.insert(27, ":/icons/xstatus/icq_xstatus27.png"); // xstatusList.insert(28, ":/icons/xstatus/icq_xstatus28.png"); // xstatusList.insert(29, ":/icons/xstatus/icq_xstatus29.png"); // xstatusList.insert(30, ":/icons/xstatus/icq_xstatus30.png"); // xstatusList.insert(31, ":/icons/xstatus/icq_xstatus31.png"); // xstatusList.insert(32, ":/icons/xstatus/icq_xstatus32.png"); // xstatusList.insert(33, ":/icons/xstatus/icq_xstatus33.png"); return true; } bool statusIconClass::reloadIconsFromSettings() { return reloadIcons(); } const QIcon &statusIconClass::getOnlineIcon() const { QMutexLocker locker(&fIconLocker); return onlineIcon; } const QIcon &statusIconClass::getFreeForChatIcon() const { QMutexLocker locker(&fIconLocker); return ffcIcon; } const QIcon &statusIconClass::getAwayIcon() const { QMutexLocker locker(&fIconLocker); return awayIcon; } const QIcon &statusIconClass::getNotAvailableIcon() const { QMutexLocker locker(&fIconLocker); return naIcon; } const QIcon &statusIconClass::getOccupiedIcon() const { QMutexLocker locker(&fIconLocker); return occupiedIcon; } const QIcon &statusIconClass::getDoNotDisturbIcon() const { QMutexLocker locker(&fIconLocker); return dndIcon; } const QIcon &statusIconClass::getInvisibleIcon() const { QMutexLocker locker(&fIconLocker); return invisibleIcon; } const QIcon &statusIconClass::getOfflineIcon() const { QMutexLocker locker(&fIconLocker); return offlineIcon; } const QIcon &statusIconClass::getConnectingIcon() const { QMutexLocker locker(&fIconLocker); return connectingIcon; } const QIcon &statusIconClass::getAtHomeIcon() const { QMutexLocker locker(&fIconLocker); return atHomeIcon; } const QIcon &statusIconClass::getAtWorkIcon() const { QMutexLocker locker(&fIconLocker); return atWorkIcon; } const QIcon &statusIconClass::getLunchIcon() const { QMutexLocker locker(&fIconLocker); return lunchIcon; } const QIcon &statusIconClass::getEvilIcon() const { QMutexLocker locker(&fIconLocker); return evilIcon; } const QIcon &statusIconClass::getDepressionIcon() const { QMutexLocker locker(&fIconLocker); return depressionIcon; } const QIcon &statusIconClass::getContentIcon() const { QMutexLocker locker(&fIconLocker); return contentIcon; } const QString statusIconClass::getStatusPath(const QString &status, const QString &path ) { return IcqPluginSystem::instance().getStatusIconFileName(status,path); } qutim-0.2.0/plugins/icq/icons/0000755000175000017500000000000011273101010017646 5ustar euroelessareuroelessarqutim-0.2.0/plugins/icq/icons/icqprotocol.png0000644000175000017500000000163111273054317022734 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8ek\Us͝|j"qu!. BV"PpAtPh*hmԴNd2I3wf{y] ϣD'OBO1pWn+9gJy/z'k%A/q[W*Ssg/fm?ZLt㳿<|8@GBu^f8,N TOjRa*7x֙oQa&ax<‰ɈNSV_Ƨ+lpP3L2X5$03/>n8 j1VN"dtj#=s,3`jwWml0 ݟ-MN{E*%r`  ({0pXou+_턤i|ھqg.eسU5HqP,y._/>RQnlfDUP >X +Z;ɥ_PchCxb!BW{a[^>آ`'f ~yd~Tz~Y@(:[嫭*pc[Hq2g"~X. i/ANp{i%Xj4(b՞Ty mƘxx<y@IENDB`qutim-0.2.0/plugins/icq/notewidget.h0000644000175000017500000000226311273054317021101 0ustar euroelessareuroelessar/* noteWidget Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 NOTEWIDGET_H #define NOTEWIDGET_H #include #include "ui_notewidget.h" class noteWidget : public QWidget { Q_OBJECT public: noteWidget(const QString &, const QString &, const QString &, const QString &profile_name, QWidget *parent = 0); ~noteWidget(); private slots: void on_okButton_clicked(); private: Ui::noteWidgetClass ui; QPoint desktopCenter(); QString contactUin; QString mineUin; QString m_profile_name; }; #endif // NOTEWIDGET_H qutim-0.2.0/plugins/icq/quticqglobals.h0000644000175000017500000000616711273054317021611 0ustar euroelessareuroelessar/***************************************************************************** ** ** ** Copyright (C) 2008 Denisss (Denis Novikov). All rights reserved. ** ** ** ** This file contains global constaints enums and typedefs. ** ** ** ** This file may be used under the terms of the GNU General Public ** ** License version 2.0 as published by the Free Software Foundation. ** ** Alternatively you may (at your option) use any later version of ** ** the GNU General Public License. ** ** ** ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, ** ** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND ** ** FITNESS FOR A PARTICULAR PURPOSE. ** ** ** *****************************************************************************/ #ifndef QUTICQGLOBALS_H #define QUTICQGLOBALS_H enum userMessageType { statusNotyfication, messageNotification, typingNotification, readNotification,blockedMessage, xstatusReadNotification , customMessage}; enum TrayPosition { TopLeft, TopRight, BottomLeft, BottomRight }; enum accountStatus { online= 0, ffc, away, na, occupied, dnd, invisible, lunch, evil, depression, athome, atwork, offline, connecting //!!! STATUS_COUNT must always be at the last position !!!// , restoreAccount, STATUS_COUNT }; const char* const StatusNames[] = { "online", "ffc", "away", "na", "occupied", "dnd", "invisible", "lunch", "evil", "depression", "athome", "atwork", "offline", "connecting" , 0 }; enum contactStatus { contactOnline = 0, contactFfc, contactAway, contactLunch, contactAtWork, contactAtHome, contactEvil, contactDepression, contactNa, contactOccupied, contactDnd, contactInvisible, contactOffline }; namespace SoundEvent { enum SoundSystem { None = 0, LibPhonon, LibSound, UserCommand }; enum Events { ContactOnline = contactOnline, ContactFfc, ContactAway, ContactLunch, ContactAtWork, ContactAtHome, ContactEvil, ContactDepression, ContactNa, ContactOccupied, ContactDnd, ContactInvisible, ContactOffline // Reserve 9 contact statuses , ContactBirthday = ContactOffline + 10, Startup, Connected, Disconnected, MessageGet, MessageSend, SystemEvent //!!! EVENT_COUNT must always be at the last position !!!// , EVENT_COUNT }; // more events? const char* const XmlEventNames[] = { "c_online", "c_ffc", "c_away", "c_lunch", "c_work", "c_home", "c_evil", "c_depression", "c_na", "c_occupied", "c_dnd", "c_invis", "c_offline", 0, 0, 0, 0, 0, 0, 0, 0, 0, "c_birth", "start", "connect", "disconnect", "m_get", "m_send", "sys_event", 0 }; } #endif // QUTICQGLOBALS_H qutim-0.2.0/plugins/icq/AUTHORS0000644000175000017500000000021311273071676017627 0ustar euroelessareuroelessarqutIM: cute crossplatform Instant Messenger ICQ plugin =========================================== Developers: ----------- Rustam Chakin qutim-0.2.0/plugins/icq/serverloginreply.h0000644000175000017500000000226211273054317022342 0ustar euroelessareuroelessar/* serverLoginReply Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 SERVERLOGINREPLY_H_ #define SERVERLOGINREPLY_H_ #include class QTcpSocket; class icqBuffer; class serverLoginReply { public: serverLoginReply(); ~serverLoginReply(); void readData(QTcpSocket *,icqBuffer *, const QString &); quint16 errorMessage; QString bosIp; quint16 bosPort; QByteArray cookie; bool isSnacError; private: void getBosServer(const QString &); void getCookie(icqBuffer *); void getError(icqBuffer *); }; #endif /*SERVERLOGINREPLY_H_*/ qutim-0.2.0/plugins/icq/clientmd5login.h0000644000175000017500000000275011273054317021646 0ustar euroelessareuroelessar/* clientMd5Login Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 CLIENTMD5LOGIN_H_ #define CLIENTMD5LOGIN_H_ #include "tlv.h" class clientMd5Login { public: clientMd5Login(const QString &uin, const QString &profile_name); ~clientMd5Login(); void setScreenName(const QString &account) { screenName.setData(account); } void setPassword(const QString &, const QString &); void sendPacket(QTcpSocket *, quint16, quint32 ); private: QByteArray getBytePacket() const; QByteArray flapLength() const; QByteArray convertToByteArray(const quint16 &) const; QByteArray convertToByteArray(const quint32 &) const; tlv screenName; tlv password; tlv clientName; tlv clientID; tlv clientMajor; tlv clientMinor; tlv clientLesser; tlv clientBuild; tlv distributionNumber; tlv clientLanguage; tlv clientCountry; }; #endif /*CLIENTMD5LOGIN_H_*/ qutim-0.2.0/plugins/icq/passwordchangedialog.ui0000644000175000017500000000623111273054317023305 0ustar euroelessareuroelessar passwordChangeDialogClass 0 0 323 129 Change password :/icons/crystal_project/password.png:/icons/crystal_project/password.png 4 Qt::Vertical 20 40 16 QLineEdit::Password Current password: New password: 16 QLineEdit::Password Retype new password: 16 QLineEdit::Password Qt::Horizontal 40 20 Change :/icons/crystal_project/password.png:/icons/crystal_project/password.png qutim-0.2.0/plugins/icq/snac.h0000644000175000017500000000310111273054317017644 0ustar euroelessareuroelessar/* snac Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 SNAC_H_ #define SNAC_H_ #include class QTcpSocket; class icqBuffer; class snac { public: snac(); ~snac(); void setNotAlone() { snacFlags |= 0x0001; } void setUnknowInfo() { snacFlags |= 0x8000; } void setFamily(const quint16 family) { familyId = family; } void setSubType(const quint16 subtype) { subTypeId = subtype; } void setReqId(const quint32 id) { reqId = id; } quint16 getFamily() { return familyId; } quint16 getSubType() { return subTypeId; } quint16 getFlags() { return snacFlags; } bool aloneSnac(); QByteArray getData(); void readData(icqBuffer *); private: QByteArray convertToByteArray(const quint16 &); QByteArray convertToByteArray(const quint32 &); quint16 byteArrayToInt16(const QByteArray &); quint32 byteArrayToInt32(const QByteArray &); quint16 familyId; quint16 subTypeId; quint16 snacFlags; quint32 reqId; }; #endif /*SNAC_H_*/ qutim-0.2.0/plugins/icq/searchuser.ui0000644000175000017500000020677411273054317021277 0ustar euroelessareuroelessar searchUserClass 0 0 794 574 searchUser 0 0 Search by: false 4 4 5 UIN Email 5 false 12 false 150 Other Nick name: false 80 First name: false 50 Last name: false 50 false Online only More >> true false false Advanced 4 Gender: false Female Male Age: false false 13-17 18-22 23-29 30-39 40-49 50-59 60+ Country: false Afghanistan Albania Algeria American Samoa Andorra Angola Anguilla Antigua Antigua & Barbuda Antilles Argentina Armenia Aruba AscensionIsland Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Barbuda Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Botswana Brazil Brunei Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Canary Islands Cayman Islands Chad Chile, Rep. of China Christmas Island Colombia Comoros CookIslands Costa Rica Croatia Cuba Cyprus Czech Rep. Denmark Diego Garcia Djibouti Dominica Dominican Rep. Ecuador Egypt El Salvador Eritrea Estonia Ethiopia Faeroe Islands Falkland Islands Fiji Finland France FrenchAntilles French Guiana French Polynesia Gabon Gambia Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guatemala Guinea Guinea-Bissau Guyana Haiti Honduras Hong Kong Hungary Iceland India Indonesia Iraq Ireland Israel Italy Jamaica Japan Jordan Kazakhstan Kenya Kiribati Korea, North Korea, South Kuwait Kyrgyzstan Laos Latvia Lebanon Lesotho Liberia Liechtenstein Lithuania Luxembourg Macau Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius MayotteIsland Mexico Moldova, Rep. of Monaco Mongolia Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Nevis NewCaledonia New Zealand Nicaragua Niger Nigeria Niue Norfolk Island Norway Oman Pakistan Palau Panama Papua New Guinea Paraguay Peru Philippines Poland Portugal Puerto Rico Qatar Reunion Island Romania Rota Island Russia Rwanda Saint Lucia Saipan Island San Marino Saudi Arabia Scotland Senegal Seychelles Sierra Leone Singapore Slovakia Slovenia Solomon Islands Somalia SouthAfrica Spain Sri Lanka St. Helena St. Kitts Sudan Suriname Swaziland Sweden Switzerland Syrian ArabRep. Taiwan Tajikistan Tanzania Thailand Tinian Island Togo Tokelau Tonga Tunisia Turkey Turkmenistan Tuvalu Uganda Ukraine United Kingdom Uruguay USA Uzbekistan Vanuatu Vatican City Venezuela Vietnam Wales Western Samoa Yemen Yugoslavia Yugoslavia - Montenegro Yugoslavia - Serbia Zambia Zimbabwe City: false 50 Interests: false QComboBox::AdjustToContentsOnFirstShow true Art Cars Celebrity Fans Collections Computers Culture & Literature Fitness Games Hobbies ICQ - Providing Help Internet Lifestyle Movies/TV Music Outdoor Activities Parenting Pets/Animals Religion Science/Technology Skills Sports Web Design Nature and Environment News & Media Government Business & Economy Mystics Travel Astronomy Space Clothing Parties Women Social science 60's 70's 80's 50's Finance and corporate Entertainment Consumer electronics Retail stores Health and beauty Media Household products Mail order catalog Business services Audio and visual Sporting and athletic Publishing Home automation Language: false Arabic Bhojpuri Bulgarian Burmese Cantonese Catalan Chinese Croatian Czech Danish Dutch English Esperanto Estonian Farsi Finnish French Gaelic German Greek Hebrew Hindi Hungarian Icelandic Indonesian Italian Japanese Khmer Korean Lao Latvian Lithuanian Malay Norwegian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Somali Spanish Swahili Swedish Tagalog Tatar Thai Turkish Ukrainian Urdu Vietnamese Yiddish Yoruba Afrikaans Persian Albanian Armenian Kyrgyz Maltese Occupation: false Academic Administrative Art/Entertainment College Student Computers Community & Social Education Engineering Financial Services Government High School Student Home ICQ - Providing Help Law Managerial Manufacturing Medical/Health Military Non-Goverment Organisation Professional Retail Retired Science & Research Sports Technical University student Web building Other services Keywords: false 1000 Marital status: false Divorced Engaged Long term relationship Married Open relationship Other Separated Single Widowed Do not clear previous results Clear :/icons/crystal_project/clear.png:/icons/crystal_project/clear.png Search :/icons/crystal_project/search.png:/icons/crystal_project/search.png Return false true true Qt::Horizontal 40 20 Qt::CustomContextMenu true false true true Account Nick name First name Last name Email Gender/Age Authorize QFrame::StyledPanel QFrame::Raised uinButton toggled(bool) uinEdit setEnabled(bool) 67 42 107 47 emailButton toggled(bool) emailEdit setEnabled(bool) 49 74 103 73 otherButton toggled(bool) nickEdit setEnabled(bool) 51 101 106 168 otherButton toggled(bool) firstEdit setEnabled(bool) 73 103 260 167 otherButton toggled(bool) lastEdit setEnabled(bool) 71 102 401 167 otherButton toggled(bool) genderComboBox setEnabled(bool) 28 102 650 65 otherButton toggled(bool) ageComboBox setEnabled(bool) 62 103 731 81 otherButton toggled(bool) maritalComboBox setEnabled(bool) 49 111 642 288 otherButton toggled(bool) countryComboBox setEnabled(bool) 39 102 625 136 otherButton toggled(bool) cityEdit setEnabled(bool) 43 108 737 182 otherButton toggled(bool) languageComboBox setEnabled(bool) 73 110 627 352 otherButton toggled(bool) occupationComboBox setEnabled(bool) 31 100 658 403 otherButton toggled(bool) interestsComboBox setEnabled(bool) 55 108 702 243 otherButton toggled(bool) keyWordEdit setEnabled(bool) 55 103 649 456 otherButton toggled(bool) onlineOnlyBox setEnabled(bool) 84 103 503 148 qutim-0.2.0/plugins/icq/buddypicture.h0000644000175000017500000000423311273054317021432 0ustar euroelessareuroelessar/* buddyPicture Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 BUDDYPICTURE_H_ #define BUDDYPICTURE_H_ #include #include class QTcpSocket; class icqBuffer; class QNetworkProxy; class buddyPicture : public QObject { Q_OBJECT public: buddyPicture(const QString &profile_name, const QString &mine_uin, QObject *parent = 0); ~buddyPicture(); void sendHash(const QString &, const QByteArray &); bool connectedToServ; bool canSendReqForAvatars; void connectToServ(const QString &, const quint16 &, QByteArray, const QNetworkProxy &); void disconnectFromSST(); void uploadIcon(const QString &); private slots: void readDataFromSocket(); void socketDisconnected(); void socketConnected(); signals: void emptyAvatarList(); void updateAvatar(const QString &, QByteArray); private: quint16 refNum; bool alreadySentCap; void incFlapSeq(); void incSnacSeq(); void readSnac(quint16); QByteArray convertToByteArray(const quint8 &); QByteArray convertToByteArray(const quint16 &); QByteArray convertToByteArray(const quint32 &); quint16 convertToInt16(const QByteArray &); quint8 convertToInt8(const QByteArray &); quint32 convertToInt32(const QByteArray &); QTcpSocket *tcpSocket; icqBuffer *buffer; bool readyToReadFlap; quint8 channel; quint16 flapLength; quint16 flapSeqNum; quint32 snacSeqNum; void sendCapab(); void sendInfoReq(); void sendRateInfoClientReady(); void saveAvatar(quint16); QString m_profile_name; QByteArray SSTcookie; QString m_mine_uin; }; #endif /*BUDDYPICTURE_H_*/ qutim-0.2.0/plugins/icq/passworddialog.cpp0000644000175000017500000000413211273054317022302 0ustar euroelessareuroelessar/* passwordDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include "passworddialog.h" passwordDialog::passwordDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); resetSettings(); setFixedSize(size()); connect( ui.passwordEdit, SIGNAL(textChanged ( const QString &) ), this, SLOT(okEnable(const QString &))); connect( ui.saveBox, SIGNAL(stateChanged(int)), this, SLOT(savePass(int))); } passwordDialog::~passwordDialog() { } void passwordDialog::rellocateDialogToCenter(QWidget *widget) { QDesktopWidget &desktop = *QApplication::desktop(); // Get current screen num int curScreen = desktop.screenNumber(widget); // Get available geometry of the screen QRect screenGeom = desktop.availableGeometry(curScreen); // Let's calculate point to move dialog QPoint moveTo(screenGeom.left(), screenGeom.top()); moveTo.setX(moveTo.x() + screenGeom.width() / 2); moveTo.setY(moveTo.y() + screenGeom.height() / 2); moveTo.setX(moveTo.x() - this->size().width() / 2); moveTo.setY(moveTo.y() - this->size().height() / 2); this->move(moveTo); } void passwordDialog::okEnable(const QString &text) { ui.saveButton->setEnabled(text != ""); password = text; } void passwordDialog::resetSettings() { ui.passwordEdit->clear(); ui.saveBox->setChecked(false); savePassword = false; } void passwordDialog::setTitle(const QString &account) { setWindowTitle(tr("Enter %1 password").arg(account)); } qutim-0.2.0/plugins/icq/treegroupitem.cpp0000644000175000017500000000651011273054317022155 0ustar euroelessareuroelessar/* treeGroupItem Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "tlv.h" #include "buffer.h" #include "treegroupitem.h" treeGroupItem::treeGroupItem() { commonInit(); } treeGroupItem::~treeGroupItem() { } void treeGroupItem::commonInit() { userCount = 0; userOnline = 0; } void treeGroupItem::setGroupText(const QString &text) { name = text; } void treeGroupItem::updateText() { QString t(name + " (" + QString::number(userOnline) + "/" + QString::number(userCount) + ")"); // setText(1,t); } void treeGroupItem::readData(icqBuffer *socket, quint16 length) { for ( ;length > 0; ) { tlv tmpTlv; tmpTlv.readData(socket); takeTlv(tmpTlv); length -= tmpTlv.getLength(); } } void treeGroupItem::takeTlv(tlv &newTlv) { switch(newTlv.getTlvType()) { case 0x00c8: userCount = newTlv.getTlvLength() / 2; addBuddiesToList(newTlv.getTlvData()); updateText(); break; default: break; } } void treeGroupItem::groupClicked() { // setExpanded(!isExpanded()); } void treeGroupItem::buddyOnline() { userOnline++; updateText(); } void treeGroupItem::buddyOffline() { userOnline--; updateText(); // treeWidget()->setUpdatesEnabled(false); // offlineList->sortChildren(1,Qt::AscendingOrder); // treeWidget()->setUpdatesEnabled(true); } void treeGroupItem::setOnOffLists() { } void treeGroupItem::updateOnline() { // treeWidget()->setUpdatesEnabled(false); // onlineList->sortChildren(1,Qt::AscendingOrder); // // treeWidget()->setUpdatesEnabled(true); } void treeGroupItem::setExpanded(bool aexpand) { // if ( userCount) // if ( aexpand ) // { // // if ( !(onlineList->isHidden() && offlineList->isHidden()) ) // { // setIcon(0, m_iconManager->getSystemIcon("expanded")); // QTreeWidgetItem::setExpanded(true); // offlineList->sortChildren(1,Qt::AscendingOrder); // onlineList->sortChildren(1,Qt::AscendingOrder); // } // } else { // if ( !(onlineList->isHidden() && offlineList->isHidden()) ) // { // setIcon(0, m_iconManager->getSystemIcon("collapsed")); // QTreeWidgetItem::setExpanded(false); // } // } } void treeGroupItem::setCustomFont(const QString &f, int s, const QColor &c) { // QFont font; // font.setFamily(f); // font.setPointSize(s); // setFont(1, font); // setForeground(1, c); } void treeGroupItem::hideSeparators(bool hide) { // onlineList->hideSeparator(hide); // offlineList->hideSeparator(hide); separatorsHided = hide; } quint16 treeGroupItem::convertToInt16(const QByteArray &packet) { bool ok; return packet.toHex().toUInt(&ok,16); } void treeGroupItem::addBuddiesToList(QByteArray array) { int size = array.size() / 2; for ( int i = 0; i < size ; i++) { buddiesList.append(convertToInt16(array.left(2))); array = array.right(array.size() - 2); } } qutim-0.2.0/plugins/icq/customstatusdialog.h0000644000175000017500000000321311273054317022662 0ustar euroelessareuroelessar/* customStatusDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 CUSTOMSTATUSDIALOG_H #define CUSTOMSTATUSDIALOG_H #include #include "ui_customstatusdialog.h" class customStatusDialog : public QDialog { Q_OBJECT public: customStatusDialog(const QString &, const QString &profile_name,QWidget *parent = 0); ~customStatusDialog(); void setStatuses(int, const QList &); int status; QString statusCaption; QString statusMessage; void setCaption(const QString &t){ui.captionEdit->setText(t);} void setMessage(const QString &t){ui.awayEdit->setPlainText(t);} private slots: void on_iconList_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ); void on_chooseButton_clicked(); void on_awayEdit_textChanged(); private: Ui::customStatusDialogClass ui; QList itemList; QString getToolTip(int) const; int statusIndex; QString mineUin; QString m_profile_name; }; #endif // CUSTOMSTATUSDIALOG_H qutim-0.2.0/plugins/icq/treegroupitem.h0000644000175000017500000000316311273054317021623 0ustar euroelessareuroelessar/* treeGroupItem Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 TREEGROUPITEM_H_ #define TREEGROUPITEM_H_ #include #include #include class contactListTree; class tlv; class contactSeparator; class icqBuffer; class treeGroupItem { public: treeGroupItem(); ~treeGroupItem(); void commonInit();//!< It is called from constructors for common initialization void setGroupText(const QString &); void updateText(); void readData(icqBuffer *, quint16); void takeTlv(tlv &); void groupClicked(); void buddyOnline(); void buddyOffline(); void setOnOffLists(); void updateOnline(); QString name; quint32 userCount; quint32 userOnline; void setExpanded(bool); void setCustomFont(const QString &, int, const QColor &); void hideSeparators(bool); QList buddiesList; contactListTree *par; bool fromItem; private: void addBuddiesToList(QByteArray); bool separatorsHided; quint16 convertToInt16(const QByteArray &); }; #endif /*TREEGROUPITEM_H_*/ qutim-0.2.0/plugins/icq/acceptauthdialog.ui0000644000175000017500000000531511273054317022420 0ustar euroelessareuroelessar acceptAuthDialogClass 0 0 315 230 acceptAuthDialog :/icons/icq/auth.png:/icons/icq/auth.png 4 Qt::Horizontal 40 20 0 25 16777215 25 Authorize :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png true 0 25 16777215 25 Decline :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png Qt::Horizontal 40 20 qutim-0.2.0/plugins/icq/flap.cpp0000644000175000017500000000261211273054317020203 0ustar euroelessareuroelessar/* flapPacket Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 //#include #include #include #include "buffer.h" #include "flap.h" flapPacket::flapPacket() { } flapPacket::~flapPacket() { } bool flapPacket::readFromSocket(icqBuffer *socket) { if ( byteArrayToInt8(socket->read(1)) != 0x2a ) return false; channel = byteArrayToInt8(socket->read(1)); seqNumber = byteArrayToInt16(socket->read(2)); length = byteArrayToInt16(socket->read(2)); return true; } quint16 flapPacket::byteArrayToInt16(const QByteArray &array) const { bool ok; return array.toHex().toUInt(&ok,16); } quint8 flapPacket::byteArrayToInt8(const QByteArray &array) const { bool ok; return array.toHex().toUInt(&ok,16); } qutim-0.2.0/plugins/icq/privacylistwindow.ui0000644000175000017500000001246411273054317022723 0ustar euroelessareuroelessar privacyListWindowClass 0 0 417 358 privacyListWindow 4 0 :/icons/crystal_project/visible.png:/icons/crystal_project/visible.png Visible list 4 true false false true true UIN Nick name I D :/icons/crystal_project/privacy.png:/icons/crystal_project/privacy.png Invisible list 4 true false false true true UIN Nick name I D :/icons/ignorelist.png:/icons/ignorelist.png Ignore list 4 true false false true true UIN Nick name I D qutim-0.2.0/plugins/icq/flap.h0000644000175000017500000000221711273054317017651 0ustar euroelessareuroelessar/* flapPacket Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 FLAP_H_ #define FLAP_H_ class icqBuffer; class QByteArray; class flapPacket { public: flapPacket(); ~flapPacket(); inline quint8 getChannel() const { return channel; } inline quint16 getLength() const { return length; } bool readFromSocket(icqBuffer *); private: quint8 byteArrayToInt8(const QByteArray &) const; quint16 byteArrayToInt16(const QByteArray &) const; quint8 channel; quint16 seqNumber; quint16 length; }; #endif /*FLAP_H_*/ qutim-0.2.0/plugins/icq/closeconnection.cpp0000644000175000017500000001267611273054317022461 0ustar euroelessareuroelessar/* closeConnection Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include "tlv.h" #include "buffer.h" #include "closeconnection.h" closeConnection::closeConnection(QObject *parent) : QObject(parent) { } closeConnection::~closeConnection() { } void closeConnection::readData(QTcpSocket * tcpSocket, icqBuffer *socket, const QString &uin) { tlv icqUin; for ( ;socket->bytesAvailable();) { icqUin.readData(socket); if ( icqUin.getTlvType() == 0x0001 ) break; if ( icqUin.getTlvType() == 0x0009 ) break; } if ( icqUin.getTlvType() == 0x0009) { disconnectTakeUin(tcpSocket); return; } if( uin != QString(icqUin.getTlvData())) return; tlv tmp; for(;socket->bytesAvailable();) { tmp.readData(socket); if ( tmp.getTlvType() == 0x0004 ) break; if ( tmp.getTlvType() == 0x0005 ) break; if ( tmp.getTlvType() == 0x0008 ) break; } if ( tmp.getTlvType() == 0x0004 ) { getError(tcpSocket, socket); } if ( tmp.getTlvType() == 0x0008 ) { char errorCode = tmp.getTlvData().at(1); errorMessage(static_cast(errorCode)); socket->readAll(); tcpSocket->disconnectFromHost(); } if ( tmp.getTlvType() == 0x0005 ) { getBosServer(QString(tmp.getTlvData())); getLuck(socket); } } void closeConnection::getError(QTcpSocket *tcpSocket,icqBuffer *socket) { tlv error; error.readData(socket); if ( error.getTlvType() == 0x0008 ) { char errorCode = error.getTlvData().at(1); errorMessage(static_cast(errorCode)); } socket->readAll(); tcpSocket->disconnectFromHost(); } void closeConnection::errorMessage(const quint16 error) { switch(error) { case 0x01: systemMessage(tr("Invalid nick or password")); break; case 0x02: systemMessage(tr("Service temporarily unavailable")); break; case 0x04: systemMessage(tr("Incorrect nick or password")); break; case 0x05: systemMessage(tr("Mismatch nick or password")); break; case 0x06: systemMessage(tr("Internal client error (bad input to authorizer)")); break; case 0x07: systemMessage(tr("Invalid account")); break; case 0x08: systemMessage(tr("Deleted account")); break; case 0x09: systemMessage(tr("Expired account")); break; case 0x0A: systemMessage(tr("No access to database")); break; case 0x0B: systemMessage(tr("No access to resolver")); break; case 0x0C: systemMessage(tr("Invalid database fields")); break; case 0x0D: systemMessage(tr("Bad database status")); break; case 0x0E: systemMessage(tr("Bad resolver status")); break; case 0x0F: systemMessage(tr("Internal error")); break; case 0x10: systemMessage(tr("Service temporarily offline")); break; case 0x11: systemMessage(tr(" Suspended account")); break; case 0x12: systemMessage(tr("DB send error")); break; case 0x13: systemMessage(tr("DB link error")); break; case 0x14: systemMessage(tr("Reservation map error")); break; case 0x15: systemMessage(tr("Reservation link error")); break; case 0x16: systemMessage(tr("The users num connected from this IP has reached the maximum")); break; case 0x17: systemMessage(tr(" The users num connected from this IP has reached the maximum (reservation)")); break; case 0x18: systemMessage(tr("Rate limit exceeded (reservation). Please try to reconnect in a few minutes")); break; case 0x19: systemMessage(tr("User too heavily warned")); break; case 0x1A: systemMessage(tr("Reservation timeout")); break; case 0x1B: systemMessage(tr("You are using an older version of ICQ. Upgrade required")); break; case 0x1C: systemMessage(tr("You are using an older version of ICQ. Upgrade recommended")); break; case 0x1D: systemMessage(tr("Rate limit exceeded. Please try to reconnect in a few minutes")); break; case 0x1E: systemMessage(tr("Can't register on the ICQ network. Reconnect in a few minutes")); break; case 0x20: systemMessage(tr("Invalid SecurID")); break; case 0x22: systemMessage(tr("Account suspended because of your age (age < 13)")); break; default: systemMessage(tr("Connection Error")); } } void closeConnection::getBosServer(const QString &bosServer) { QStringList splitServer = bosServer.split(":"); emit sendBosServer(QHostAddress(splitServer.at(0))); emit sendBosPort((quint16)splitServer.at(1).toUInt()); } void closeConnection::getLuck(icqBuffer *socket ) { tlv cookie; cookie.readData(socket); emit sendCookie(cookie.getTlvData()); } void closeConnection::disconnectTakeUin(QTcpSocket *socket) { emit blockRateLimit(); socket->disconnectFromHost(); systemMessage(tr("Another client is loggin with this uin")); } qutim-0.2.0/plugins/icq/addrenamedialog.h0000644000175000017500000000215111273054317022024 0ustar euroelessareuroelessar/* addRenameDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ADDRENAMEDIALOG_H #define ADDRENAMEDIALOG_H #include #include "ui_addrenamedialog.h" class addRenameDialog : public QDialog { Q_OBJECT public: addRenameDialog(QWidget *parent = 0); ~addRenameDialog(); QString name; private slots: void on_lineEdit_textChanged(const QString &); private: Ui::addRenameDialogClass ui; QPoint desktopCenter(); }; #endif // ADDRENAMEDIALOG_H qutim-0.2.0/plugins/icq/requestauthdialog.ui0000644000175000017500000000345411273054317022653 0ustar euroelessareuroelessar requestAuthDialogClass 0 0 315 230 Authorization request :/icons/icq/auth.png:/icons/icq/auth.png 4 Qt::Horizontal 40 20 Send :/icons/icq/auth.png:/icons/icq/auth.png sendButton clicked() requestAuthDialogClass accept() 270 206 150 211 qutim-0.2.0/plugins/icq/multiplesending.cpp0000644000175000017500000001146411273054317022471 0ustar euroelessareuroelessar/* multipleSending Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "treegroupitem.h" #include "treebuddyitem.h" #include "icqmessage.h" #include "multiplesending.h" #include "icqpluginsystem.h" multipleSending::multipleSending(QWidget *parent) : QWidget(parent) { ui.setupUi(this); setWindowTitle(tr("Send multiple")); setWindowIcon(IcqPluginSystem::instance().getIcon("multiple")); move(desktopCenter()); ui.contactListWidget->header()->hide(); QList listSize; listSize.append(408); listSize.append(156); ui.splitter->setSizes(listSize); sendTimer = new QTimer(this); connect(sendTimer, SIGNAL(timeout()), this, SLOT(sendMessage())); } multipleSending::~multipleSending() { } void multipleSending::rellocateDialogToCenter(QWidget *widget) { QDesktopWidget &desktop = *QApplication::desktop(); // Get current screen num int curScreen = desktop.screenNumber(widget); // Get available geometry of the screen QRect screenGeom = desktop.availableGeometry(curScreen); // Let's calculate point to move dialog QPoint moveTo(screenGeom.left(), screenGeom.top()); moveTo.setX(moveTo.x() + screenGeom.width() / 2); moveTo.setY(moveTo.y() + screenGeom.height() / 2); moveTo.setX(moveTo.x() - this->size().width() / 2); moveTo.setY(moveTo.y() - this->size().height() / 2); this->move(moveTo); } void multipleSending::setTreeModel(const QString &uin, const QHash *groupList, const QHash *buddyList) { rootItem = new QTreeWidgetItem(ui.contactListWidget); rootItem->setText(0, uin); rootItem->setFlags(rootItem->flags() | Qt::ItemIsUserCheckable); rootItem->setCheckState(0, Qt::Unchecked); foreach(treeGroupItem *getgroup, *groupList) { QTreeWidgetItem *group = new QTreeWidgetItem(rootItem); group->setText(0,getgroup->name); group->setFlags(group->flags() | Qt::ItemIsUserCheckable); group->setCheckState(0, Qt::Unchecked); foreach(treeBuddyItem *getbuddy, *buddyList) { if ( getbuddy->groupName == getgroup->name) { QTreeWidgetItem *buddy = new QTreeWidgetItem(group); buddy->setText(0,getbuddy->getName()); // buddy->setIcon(0, getbuddy-> ); buddy->setFlags(buddy->flags() | Qt::ItemIsUserCheckable); buddy->setCheckState(0, Qt::Unchecked); buddy->setToolTip(0,getbuddy->getUin()); } } if ( group->childCount() ) group->setExpanded(true); } if ( rootItem->childCount() ) rootItem->setExpanded(true); } void multipleSending::on_contactListWidget_itemChanged(QTreeWidgetItem *item, int ) { if ( item->childCount() ) { Qt::CheckState checkState = item->checkState(0); for ( int i = 0; i < item->childCount(); i++) { item->child(i)->setCheckState(0,checkState); } } } QPoint multipleSending::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void multipleSending::on_sendButton_clicked() { if ( !ui.messageEdit->toPlainText().isEmpty()) { ui.sendButton->setEnabled(false); ui.stopButton->setEnabled(true); for( int i = 0; i < rootItem->childCount(); i++) { QTreeWidgetItem *group = rootItem->child(i); for ( int j = 0; j < group->childCount(); j++) { if ( !group->child(j)->toolTip(0).isEmpty() && group->child(j)->checkState(0)) sendToList<child(j)->toolTip(0); } } barInterval = sendToList.count(); if (barInterval) { sendMessage(); } else on_stopButton_clicked(); } } void multipleSending::on_stopButton_clicked() { ui.sendButton->setEnabled(true); ui.stopButton->setEnabled(false); sendToList.clear(); sendTimer->stop(); ui.progressBar->setValue(0); } void multipleSending::sendMessage() { if ( !ui.messageEdit->toPlainText().isEmpty()) { if ( sendToList.count() ) { messageFormat msg; msg.date = QDateTime::currentDateTime(); msg.fromUin = sendToList.at(0); msg.message = ui.messageEdit->toPlainText(); emit sendMessageToContact(msg); sendToList.removeAt(0); sendTimer->start(2000); ui.progressBar->setValue(ui.progressBar->value() + 100 / barInterval ); if ( !sendToList.count() ) on_stopButton_clicked(); } else on_stopButton_clicked(); } else on_stopButton_clicked(); } qutim-0.2.0/plugins/icq/passwordchangedialog.cpp0000644000175000017500000000477311273054317023463 0ustar euroelessareuroelessar/* passwordChangeDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "passwordchangedialog.h" passwordChangeDialog::passwordChangeDialog(const QString &u, const QString &profile_name, QWidget *parent) : QDialog(parent) , ownerUin(u) , m_profile_name(profile_name) { ui.setupUi(this); setFixedSize(size()); move(desktopCenter()); } passwordChangeDialog::~passwordChangeDialog() { } QPoint passwordChangeDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void passwordChangeDialog::on_changeButton_clicked() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+ownerUin, "accountsettings"); // QString pass = settings.value("main/password").toString(); const char crypter[] = {0x10,0x67, 0x56, 0x78, 0x85, 0x14, 0x87, 0x11, 0x45,0x45,0x45,0x45,0x45,0x45 }; QByteArray tmpPass = settings.value("main/password").toByteArray(); QByteArray roastedPass; for ( int i = 0; i < tmpPass.length(); i++ ) roastedPass[i] = tmpPass.at(i) ^ crypter[i]; QString curPass = ui.currentEdit->text(); curPass.truncate(8); roastedPass.truncate(8); if ( curPass != roastedPass ) { QMessageBox::warning(this, tr("Password error"), tr("Current password is invalid")); return; } if ( ui.newEdit->text() != ui.lineEdit->text() ) { QMessageBox::warning(this, tr("Password error"), tr("Confirm password does not match")); return; } newPass = ui.newEdit->text(); newPass.truncate(8); QByteArray saveRoastedPass; for ( int i = 0; i < newPass.length(); i++ ) saveRoastedPass[i] = newPass.at(i).unicode() ^ crypter[i]; settings.setValue("main/password",saveRoastedPass); // settings.setValue("main/password", newPass); accept(); } qutim-0.2.0/plugins/icq/accounteditdialog.ui0000644000175000017500000005474011273054317022607 0ustar euroelessareuroelessar accountEdit 0 0 400 480 Form 4 0 Icq settings 4 Save password: false QLineEdit::Password Qt::Vertical 20 40 AOL expert settings 4 Client id: 65535 Qt::Horizontal 40 20 Client major version: Client minor version: 65535 Qt::Horizontal 40 20 Client lesser version: 65535 Qt::Horizontal 40 20 Client build number: 65535 Qt::Horizontal 40 20 Client id number: 65535 Qt::Horizontal 40 20 Client distribution number: 65535 Qt::Horizontal 40 20 Seq first id: 65535 Qt::Horizontal 40 20 Autoconnect on start false Save my status on exit Server 4 Keep connection alive Secure login Proxy connection 0 0 Listen port for file transfer: 0 0 1024 65535 5191 Qt::Horizontal 40 20 Qt::Vertical 20 98 0 0 Server Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 4 Host: 150 0 login.icq.com Port: 1 65535 5190 Qt::Horizontal 40 20 Proxy 4 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Type: Host: Port: 140 0 None HTTP SOCKS 5 false false 1 65535 Qt::Horizontal 40 20 false Authentication Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter User name: Password: false false QLineEdit::Password Qt::Vertical 20 40 Qt::Horizontal 40 20 OK Apply Cancel savePassBox toggled(bool) passwordEdit setEnabled(bool) 85 108 94 83 authBox toggled(bool) userNameEdit setEnabled(bool) 105 184 126 207 authBox toggled(bool) userPasswordEdit setEnabled(bool) 60 180 155 244 autoBox toggled(bool) saveStatusOnExitBox setEnabled(bool) 199 78 199 105 qutim-0.2.0/plugins/icq/clientIdentification.cpp0000644000175000017500000001067011273054317023414 0ustar euroelessareuroelessar/* clientIdentification Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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. * * * *************************************************************************** */ #ifdef _MSC_VER #pragma warning(disable:4309) #endif #include #include "clientIdentification.h" #include "oscarprotocol.h" #include // const quint16 sequences[] = { // 0x04E7, 0x0679, 0x0704, 0x078A, 0x078A, 0x07C9, 0x0B25, 0x0FC5, // 0x163F, 0x1BEA, 0x2294, 0x2493, 0x25D6, 0x25FA, 0x26EE, 0x2886, // 0x30CC, 0x3303, 0x3526, 0x3C26, 0x42A8, 0x43DC, 0x4E94, 0x5342, // 0x5697, 0x5A09, 0x5A09, 0x5C2B, 0x5C44, 0x5C44, 0x5D6E, 0x7339, // 0x7570, 0x75A8, 0x7A02, 0x7F33 // }; // const quint32 sequences_num = 28; clientIdentification::clientIdentification(const QString &uin, const QString &profile_name) { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+profile_name+"/ICQ."+uin, "accountsettings"); screenName.setType(0x0001); password.setType(0x0002); clientName.setType(0x0003); clientName.setData(settings.value("AOL/id", "ICQ Client").toString()); clientID.setType(0x0016); clientID.setData((quint16)settings.value("AOL/cid", 266).toUInt()); clientMajor.setType(0x0017); clientMajor.setData((quint16)settings.value("AOL/major", 20).toUInt()); clientMinor.setType(0x0018); clientMinor.setData((quint16)settings.value("AOL/minor", 52).toUInt()); clientLesser.setType(0x0019); clientLesser.setData((quint16)settings.value("AOL/lesser", 1).toUInt()); clientBuild.setType(0x001A); clientBuild.setData((quint16)settings.value("AOL/build", 3916).toUInt()); distributionNumber.setType(0x0014); distributionNumber.setData((quint32)settings.value("AOL/distr", 85).toUInt()); clientLanguage.setType(0x000F); clientLanguage.setData(QString("en")); clientCountry.setType(0x000E); clientCountry.setData(QString("us")); } clientIdentification::~clientIdentification() { } void clientIdentification::setPassword(const QString &pass) { const char roastArray[] = { 0xF3, 0x26, 0x81, 0xC4, 0x39, 0x86, 0xDB, 0x92, 0x71, 0xA3, 0xB9, 0xE6, 0x53, 0x7A, 0x95, 0x7C}; quint8 length = pass.length() > 16 ? 16: pass.length(); QByteArray roastedPass; for ( int i = 0; i < length; i++ ) roastedPass[i] = pass.at(i).unicode() ^ roastArray[i]; password.setData(roastedPass); } QByteArray clientIdentification::flapLength() { quint16 l = 4; l += screenName.getLength(); l += password.getLength(); l += clientName.getLength(); l += clientID.getLength(); l += clientMajor.getLength(); l += clientMinor.getLength(); l += clientLesser.getLength(); l += clientBuild.getLength(); l += distributionNumber.getLength(); l += clientLanguage.getLength(); l += clientCountry.getLength(); QByteArray packetLength; packetLength[0] = l / 0x100; packetLength[1] = l % 0x100; return packetLength; } QByteArray clientIdentification::getSeqNumber() const { QByteArray seq; //quint16 num = sequences[rand() % sequences_num]; //quint16 num = oscarProtocol::secnumGenerator(); quint16 num = 0; seq[0] = num / 0x100; seq[1] = num % 0x100; return seq; } QByteArray clientIdentification::getBytePacket() const { QByteArray packet; packet.append(protocolVersion); packet.append(screenName.getData()); packet.append(password.getData()); packet.append(clientName.getData()); packet.append(clientMajor.getData()); packet.append(clientMinor.getData()); packet.append(clientLesser.getData()); packet.append(clientBuild.getData()); packet.append(clientID.getData()); packet.append(distributionNumber.getData()); packet.append(clientLanguage.getData()); packet.append(clientCountry.getData()); return packet; } void clientIdentification::sendPacket(QTcpSocket *socket) { QByteArray packet; packet[0] = 0x2A; packet[1] = 0x01; packet.append(getSeqNumber()); packet.append(flapLength()); packet.append(getBytePacket()); socket->write(packet); } qutim-0.2.0/plugins/icq/notewidget.ui0000644000175000017500000000517211273054317021271 0ustar euroelessareuroelessar noteWidgetClass 0 0 211 183 noteWidget :/icons/crystal_project/note.png:/icons/crystal_project/note.png 4 Qt::Horizontal 40 20 OK :/icons/crystal_project/apply.png:/icons/crystal_project/apply.png Cancel :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png Qt::Horizontal 40 20 cancelButton clicked() noteWidgetClass close() 179 163 208 153 qutim-0.2.0/plugins/icq/clientidentify.h0000755000175000017500000000476611273054317021757 0ustar euroelessareuroelessar/* clientIdentify Copyright (c) 2008 by Alexey Ignatiev *************************************************************************** * * * 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 CLIENTIDENTIFY_H_ #define CLIENTIDENTIFY_H_ #if defined(Q_OS_WIN32) #define snprintf _snprintf #endif #include #include typedef QList ByteArrayList; class treeBuddyItem; class clientIdentify { public: clientIdentify(); ~clientIdentify(); void addContactClientId(treeBuddyItem *); private: ByteArrayList client_caps; QList client_shorts; char *capsbuf; unsigned capsize; quint8 client_proto; quint32 lastInfo; quint32 lastExtStatusInfo; quint32 lastExtInfo; void removeXstatus(); bool identify_by_DCInfo(treeBuddyItem *); bool identify_by_Caps(treeBuddyItem *); bool identify_by_ProtoVersion(treeBuddyItem *); char *MatchBuddyCaps(char *, unsigned, const char *, unsigned short); bool MatchShortCaps(const QList &, const quint16 &); char *identify_qutIM(); char *identify_k8qutIM(); char *identify_Miranda(); char *identify_Qip(); char *identify_QipInfium(); char *identify_QipPDA(); char *identify_QipMobile(); char *identify_Sim(); char *identify_SimRnQ(); char *identify_Licq(); char *identify_Kopete(); char *identify_Micq(); char *identify_LibGaim(); char *identify_Jimm(); char *identify_Mip(); char *identify_Trillian(); char *identify_Climm(); char *identify_Im2(); char *identify_AndRQ(); char *identify_RandQ(); char *identify_Imadering(); char *identify_Mchat(); char *identify_CorePager(); char *identify_DiChat(); char *identify_Macicq(); char *identify_Anastasia(); char *identify_Jicq(); char *identify_Inlux(); char *identify_Vmicq(); char *identify_Smaper(); char *identify_Yapp(); char *identify_Pigeon(); char *identify_NatIcq(); char *identify_WebIcqPro(); char *identify_BayanIcq(); char *identify_MailAgent(); }; #endif /*CLIENTIDENTIFY_H_*/ qutim-0.2.0/plugins/icq/addaccountform.h0000644000175000017500000000231511273054317021717 0ustar euroelessareuroelessar/* AddAccountForm Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ADDACCOUNTFORM_H #define ADDACCOUNTFORM_H #include #include #include #include "ui_addaccountform.h" class AddAccountForm : public QWidget { Q_OBJECT public: AddAccountForm(QWidget *parent = 0); ~AddAccountForm(); QString getName() const {return ui.uinEdit->text();} QString getPass() const {return ui.passwordEdit->text();} bool getSavePass() const {return ui.passwordBox->isChecked(); } private: Ui::AddAccountFormClass ui; }; #endif // ADDACCOUNTFORM_H qutim-0.2.0/plugins/icq/filetransferwindow.cpp0000644000175000017500000004621011273054317023177 0ustar euroelessareuroelessar/* fileTransferWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "filetransferwindow.h" #include "icqpluginsystem.h" fileTransferWindow::fileTransferWindow(const QString &muin, const QStringList &list, const QString & uin,QByteArray & c,bool f, quint16 listen_port, QWidget *parent) : QWidget(parent) , sendingFile(f) , cookie(c) , contactUin(uin) , fileList(list) , mineUin(muin) , m_listen_port(listen_port) { ui.setupUi(this); // ui.label_4->setVisible(false); // ui.filesLabel->setVisible(false); ui.label_11->setVisible(false); ui.senderLabel->setVisible(false); setFixedSize(size()); move(desktopCenter()); setWindowTitle(tr("File transfer: %1").arg(uin)); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); fileSize = 0; tmpFileSize = 0; listenSocket = false; tcpSocket = new QTcpSocket(this); lastTime.setHMS(0,0,0,0); connect(tcpSocket, SIGNAL(connected()), this, SLOT(socketConnected())); connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readFromSocket())); connect(tcpSocket, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten())); waitingFor18 = false; tcpServer = new QTcpServer(this); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(slotNewConnection())); ui.statusLabel->setText(tr("Waiting...")); prevCheckSum = 0xffff0000; waitingForFileAccept = false; waitingForGoodTransfer = false; connectedToProxy = true; sendingFileNow = false; everyThingIsDone = false; m_total_number_of_files = fileList.count();; m_all_file_size = 0; // currentFile.moveToThread(&mainThread); // mainThread.start(QThread::LowPriority); // mainThread.test(); // for(;;); } fileTransferWindow::~fileTransferWindow() { // mainThread.terminate(); // mainThread.wait(); } QPoint fileTransferWindow::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void fileTransferWindow::on_cancelButton_clicked() { // emit cancelSending(cookie); close(); } void fileTransferWindow::closeEvent ( QCloseEvent * /*event*/ ) { emit cancelSending(cookie, contactUin); } void fileTransferWindow::sendingDeclined(const QString &uin) { setWindowTitle(tr("File transfer: %1").arg(uin)); if ( !everyThingIsDone) ui.statusLabel->setText(tr("Declined by remote user")); } void fileTransferWindow::sendingAccepted(const QString &uin) { setWindowTitle(tr("File transfer: %1").arg(uin)); ui.statusLabel->setText(tr("Accepted")); sendTransferPacket(); } void fileTransferWindow::socketConnected() { // emit sendingToPeerRequest(cookie, contactUin, fileList); if ( connectedToProxy ) { if ( sendingFile) { QByteArray packet; if ( connectedToAolProxy ) { packet.append(convertToByteArray((quint16)(mineUin.toUtf8().length() + 41))); packet.append(QByteArray::fromHex("044a0004000000000000")); } else { packet.append(convertToByteArray((quint16)(mineUin.toUtf8().length() + 39))); packet.append(QByteArray::fromHex("044a0002000000000000")); } packet.append(convertToByteArray((quint8)mineUin.toUtf8().length())); packet.append(mineUin.toUtf8()); if ( connectedToAolProxy) packet.append(convertToByteArray((quint16)keyProxyPort)); packet.append(cookie); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0010)); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); waitingFor18 = true; tcpSocket->write(packet); } else { QByteArray packet; packet.append(convertToByteArray((quint16)(mineUin.toUtf8().length() + 41))); packet.append(QByteArray::fromHex("044a0004000000000000")); packet.append(convertToByteArray((quint8)mineUin.toUtf8().length())); packet.append(mineUin.toUtf8()); packet.append(convertToByteArray((quint16)keyProxyPort)); packet.append(cookie); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0010)); packet.append(QByteArray::fromHex("094613434c7f11d18222444553540000")); waitingFor18 = true; tcpSocket->write(packet); } } } QByteArray fileTransferWindow::convertToByteArray(const quint16 &d) const { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray fileTransferWindow::convertToByteArray(const quint32 &d) const { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } QByteArray fileTransferWindow::convertToByteArray(const quint8 &d) const { QByteArray packet; packet[0] = d; return packet; } void fileTransferWindow::connectToProxy(quint32 ip, quint16 port,bool proxy) { if ( sendingFile ) { if ( ip && port ) { if ( proxy) { connectedToProxy = true; connectedToAolProxy = true; keyProxyPort = port; // tcpSocket->abort(); recreateSocket(); tcpSocket->connectToHost(QHostAddress(ip), 5190); } else { connectedToProxy = false; connectedToAolProxy = false; // tcpSocket->abort(); // tcpSocket->close(); recreateSocket(); tcpSocket->connectToHost(QHostAddress(ip), port); QTimer::singleShot(1000, this, SLOT(checkLocalConnection())); } } else { // tcpSocket->abort(); connectedToProxy = true; connectedToAolProxy = false; recreateSocket(); tcpSocket->connectToHost("64.12.201.185", 5190); } } else { if ( ip && port ) { waitingForFileAccept = true; connectedToProxy = false; // tcpSocket->abort(); recreateSocket(); tcpSocket->connectToHost(QHostAddress(ip), port); QTimer::singleShot(1000, this, SLOT(checkLocalConnection())); } } } void fileTransferWindow::connectToAolProxy(quint32 ip, quint16 port) { if ( !sendingFile ) { tcpServer->close(); connectedToProxy = true; connectedToAolProxy = true; keyProxyPort = port; // tcpSocket->abort(); recreateSocket(); tcpSocket->connectToHost(QHostAddress(ip), 5190); } } void fileTransferWindow::readFromSocket() { if ( sendingFile ) { if ( tcpSocket->bytesAvailable() == 18 && waitingFor18 && !connectedToAolProxy) { QByteArray answer = tcpSocket->read(18).right(6); quint16 port = byteArrayToInt16(answer.left(2)); quint32 ip = byteArrayToInt32(answer.right(4)); waitingFor18 = false; emit getRedirectToProxyData(cookie, contactUin, port, ip); } if ( tcpSocket->bytesAvailable() == 12 && waitingFor18 && connectedToAolProxy) { waitingFor18 = false; emit sendAcceptMessage(cookie, contactUin); foreach(QString file_name, fileList) { QFile f(file_name); m_all_file_size += f.size(); } m_total_number_of_files = fileList.count(); sendTransferPacket(); } if ( tcpSocket->bytesAvailable() >= 256 && waitingForFileAccept) { QByteArray transferData = tcpSocket->read(256); if ( transferData.at(6) == 0x02 && transferData.at(7) == 0x02 ) { waitingForFileAccept = false; // currentFile.moveToThread(&mainThread); currentFile.close(); if ( currentFile.open(QIODevice::ReadOnly)) { ui.progressBar->setValue(0); currentFile.seek(0); sendingFileNow = true; currentFileChunkSize = currentFile.size() < 1360 ? currentFile.size() : 1360; ui.statusLabel->setText(tr("Sending...")); // lastTime.start(); tmpFileSize = 0; currentFileSize = currentFile.size(); QFileInfo fileInfo(currentFile.fileName()); ui.currentFileLabel->setText(fileInfo.fileName()); // ui.currentFileLabel->setText(currentFile.fileName()); ui.sizeLabel->setText(getFileSize(currentFileSize)); updateProgress(); sendFileData(); } } } if ( tcpSocket->bytesAvailable()>=256 && waitingForGoodTransfer) { QByteArray transferData = tcpSocket->read(256); if ( transferData.at(6) == 0x02 && transferData.at(7) == 0x04 ) { waitingForGoodTransfer = false; if ( !fileList.count() ) { tcpSocket->disconnectFromHost(); ui.statusLabel->setText(tr("Done")); everyThingIsDone = true; ui.cancelButton->setIcon(IcqPluginSystem::instance().getIcon("apply")); ui.cancelButton->setText(tr("Done")); ui.speedLabel->clear(); } else { sendTransferPacket(); } } } } else { if ( tcpSocket->bytesAvailable() == 12 && waitingFor18) { waitingFor18 = false; emit sendAcceptMessage(cookie, contactUin); } if ( tcpSocket->bytesAvailable()>= 256 && waitingForFileAccept) { waitingForFileAccept = false; if(fileList.count()) { currentFile.setFileName(fileList.at(0)); currentFile.close(); if ( currentFile.open(QIODevice::WriteOnly)) { QByteArray transferData = tcpSocket->read(256); tmpFileSize = 0; transferData[6] = 0x02; transferData[7] = 0x02; transferData.replace(8,8,cookie); transferPacket = transferData; tcpSocket->write(transferData); sendingFileNow = true; tmpFileSize = 0; currentFileSize = fileSize; QFileInfo fileInfo(currentFile.fileName()); ui.currentFileLabel->setText(fileInfo.fileName()); ui.sizeLabel->setText(getFileSize(currentFileSize)); updateProgress(); ui.statusLabel->setText(tr("Getting...")); // lastTime.start(); } } } else if ( sendingFileNow ) { tmpFileSize += tcpSocket->bytesAvailable(); speed += tcpSocket->bytesAvailable(); currentFile.write(tcpSocket->readAll()); if (tmpFileSize >= fileSize ) { currentFile.close(); ui.statusLabel->setText(tr("Done")); ui.cancelButton->setIcon(IcqPluginSystem::instance().getIcon("apply")); ui.cancelButton->setText(tr("Done")); ui.speedLabel->clear(); transferPacket[7] = 0x04; tcpSocket->readAll(); tcpSocket->write(transferPacket); tcpSocket->disconnectFromHost(); tcpServer->close(); return; } } } tcpSocket->readAll(); } quint16 fileTransferWindow::byteArrayToInt16(const QByteArray &array) const { bool ok; return array.toHex().toUInt(&ok,16); } quint32 fileTransferWindow::byteArrayToInt32(const QByteArray &array) const { bool ok; return array.toHex().toULong(&ok,16); } void fileTransferWindow::sendTransferPacket() { if ( fileList.count() ) { QFile file(fileList.at(0)); // mainThread.start(QThread::LowPriority); // file.moveToThread(&mainThread); if (file.open(QIODevice::ReadOnly | QIODevice::Unbuffered)) { currentFile.setFileName(file.fileName()); QByteArray packet; packet.append(QByteArray::fromHex("4f465432")); packet.append(convertToByteArray((quint16)0x0100)); packet.append(convertToByteArray((quint16)0x0101)); packet.append(cookie); packet.append(convertToByteArray((quint16)0)); packet.append(convertToByteArray((quint16)0)); //total number of files packet.append(convertToByteArray((quint16)m_total_number_of_files)); //files left packet.append(convertToByteArray((quint16)fileList.count())); packet.append(convertToByteArray((quint16)0x0001)); packet.append(convertToByteArray((quint16)0x0001)); //all size packet.append(convertToByteArray((quint32)m_all_file_size)); //current file size packet.append(convertToByteArray((quint32)file.size())); packet.append(convertToByteArray((quint32)0)); packet.append(convertToByteArray((quint32)fileCheckSum(file, file.size()))); file.seek(0); packet.append(convertToByteArray((quint32)0xffff0000)); packet.append(convertToByteArray((quint32)0)); packet.append(convertToByteArray((quint32)0)); packet.append(convertToByteArray((quint32)0xffff0000)); packet.append(convertToByteArray((quint32)0)); packet.append(convertToByteArray((quint32)0xffff0000)); packet.append(QByteArray::fromHex("436f6f6c2046696c6558666572")); for ( int i = 0; i < 19; i++) packet.append(QChar(0x00)); packet.append(convertToByteArray((quint8)0x20)); packet.append(convertToByteArray((quint16)0x1c11)); for ( int i = 0; i < 85; i++) packet.append(QChar(0x00)); packet.append(convertToByteArray((quint32)0)); QFileInfo fileInfo(file.fileName()); // QByteArray fileName64(utf8toUnicode(fileInfo.fileName())); QByteArray fileName64; fileName64.append(fileInfo.fileName()); // fileName64.append(fileInfo.fileName().toUtf8()); qint64 fileNameLength = fileName64.length(); if ( fileNameLength > 64 ) fileName64 = fileName64.left(64); else { for ( int i = 0; i < 64 - fileNameLength; i++ ) fileName64.append(QChar(0x00)); } packet.append(fileName64); waitingForFileAccept = true; tcpSocket->write(packet); fileList.removeAt(0); ui.filesLabel->setText(QString("%1/%2").arg(m_total_number_of_files - fileList.count()) .arg(m_total_number_of_files)); } } } quint32 fileTransferWindow::fileCheckSum(QFile &file, quint32 size) const { quint32 bytesRead = 0; int bufferSize = 10240; // while (bytesRead < size) //not sure that any client use this for real // { QByteArray buffer = file.read(qMin(bufferSize, (int)(size - bytesRead))); file.seek(file.pos() + buffer.length()); // if (buffer.length() == 0) // break; bytesRead += buffer.length(); quint32 check = (prevCheckSum >> 16) & 0xffff; quint32 oldcheck; quint16 val; for (int i = 0; i < buffer.length(); i++) { oldcheck = check; quint8 byte = buffer.at(i); if (i&1) val = byte; else val = byte << 8; check -= val; if (check > oldcheck) check--; file.seek(file.pos() + 1); } check = ((check & 0x0000ffff) + (check >> 16)); check = ((check & 0x0000ffff) + (check >> 16)); return check << 16; // } } void fileTransferWindow::sendFileData() { qint64 tmpL = currentFile.size() - currentFile.pos(); if ( tmpL < 1 ) { waitingForGoodTransfer = true; currentFile.close(); // ui.statusLabel->setText(tr("Done")); // tcpSocket->disconnectFromHost(); return; } tcpSocket->write(currentFile.peek(currentFileChunkSize)); tmpFileSize = currentFile.pos() + currentFileChunkSize; // updateProgress(); currentFile.seek(currentFile.pos() + currentFileChunkSize); speed += currentFileChunkSize; if ( connectedToProxy ) currentFileChunkSize = tmpL < 1360 ? tmpL : 1360; else currentFileChunkSize = tmpL < 8000 ? tmpL : 8000; // QTimer::singleShot(50, this, SLOT(sendFileData())); } void fileTransferWindow::checkLocalConnection() { if ( tcpSocket->state() == QAbstractSocket::ConnectedState) { if ( sendingFile ) { waitingForFileAccept = true; emit sendAcceptMessage(cookie, contactUin); QTimer::singleShot(500, this, SLOT(sendTransferPacket())); } else { emit sendAcceptMessage(cookie, contactUin); } } else { if ( sendingFile) { connectedToProxy = true; connectedToAolProxy = false; // tcpSocket->abort(); // tcpSocket->close(); recreateSocket(); tcpSocket->connectToHost("64.12.201.185", 5190); } else { tcpServer->listen(QHostAddress::Any, m_listen_port); emit sendRedirectToMineServer(cookie, contactUin, m_listen_port); } } } void fileTransferWindow::bytesWritten() { if ( sendingFileNow && sendingFile) { sendFileData(); } } void fileTransferWindow::slotNewConnection() { if ( !listenSocket ) { delete tcpSocket; tcpSocket = tcpServer->nextPendingConnection(); connect(tcpSocket, SIGNAL(connected()), this, SLOT(socketConnected())); connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readFromSocket())); connect(tcpSocket, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten())); listenSocket = true; } } void fileTransferWindow::updateProgress() { if ( tmpFileSize > currentFileSize ) { waitingForGoodTransfer = true; ui.doneLabel->setText(getFileSize(currentFileSize)); ui.progressBar->setValue(100); ui.speedLabel->clear(); currentFile.close(); // ui.statusLabel->setText(tr("Done")); } else { ui.doneLabel->setText(getFileSize(tmpFileSize)); ui.progressBar->setValue(100 * ((float)tmpFileSize / currentFileSize)); // ui.progressBar->setValue(100 * ((float)tmpFileSize / m_all_file_size)); ui.speedLabel->setText(getFileSize(speed) + tr("/s")); setRemainTime(); speed = 0; // tmpTime.addSecs(lastTime.elapsed()); ui.lastLabel->setText(lastTime.toString()); lastTime = lastTime.addSecs(1); if ( tcpSocket->state() == QAbstractSocket::ConnectedState ) QTimer::singleShot(1000, this, SLOT(updateProgress())); } } QString fileTransferWindow::getFileSize(quint32 size) const { quint16 bytes = size % 1024; quint16 kBytes = size % (1024 * 1024) / 1024; quint16 mBytes = size % (1024 * 1024 * 1024) / (1024 * 1024); quint16 gBytes = size / (1024 * 1024 * 1024); QString fileSize; // if ( gBytes ) // fileSize.append(QString::number(gBytes)+","); // if ( gBytes || mBytes ) // fileSize.append(QString::number(mBytes)+","); // if ( gBytes || mBytes || kBytes ) // fileSize.append(QString::number(kBytes)+","); // if ( gBytes || mBytes || kBytes || bytes ) // fileSize.append(QString::number(bytes)); if ( bytes && !kBytes && !mBytes && !gBytes ) fileSize.append(QString::number(bytes) + tr(" B")); else if (kBytes && !mBytes && !gBytes ) fileSize.append(QString::number(kBytes) + "," + QString::number(bytes) + tr(" KB")); else if (mBytes && !gBytes ) fileSize.append(QString::number(mBytes) + "," + QString::number(kBytes) + tr(" MB")); else if (gBytes ) fileSize.append(QString::number(gBytes) + "," + QString::number(mBytes) + tr(" GB")); return fileSize; } void fileTransferWindow::recreateSocket() { delete tcpSocket; tcpSocket = new QTcpSocket(this); connect(tcpSocket, SIGNAL(connected()), this, SLOT(socketConnected())); connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readFromSocket())); connect(tcpSocket, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten())); } void fileTransferWindow::setVisualContactIp(quint32 ip) { ui.label_11->setVisible(true); ui.senderLabel->setVisible(true); QHostAddress contactIp(ip); ui.senderLabel->setText(contactIp.toString()); } void fileTransferWindow::setRemainTime() { if( speed) { int secsLeft = (currentFileSize - tmpFileSize) / speed; QTime tmpTime(0,0,0); ui.remainedLabel->setText(tmpTime.addSecs(secsLeft).toString()); } } void fileTransferWindow::on_openButton_clicked() { QFileInfo fileInfo(currentFile.fileName()); QDesktopServices::openUrl(QUrl(fileInfo.absoluteDir().path())); } QByteArray fileTransferWindow::utf8toUnicode(const QString &message) { QByteArray msg; const ushort *array = message.utf16(); for(;*array;array++) msg.append(convertToByteArray((quint16)*array)); return msg; } void fileTransferWindow::setMainConnectionProxy(const QNetworkProxy &p) { tcpSocket->setProxy(p); tcpServer->setProxy(p); } qutim-0.2.0/plugins/icq/readawaydialog.h0000644000175000017500000000220211273054317021676 0ustar euroelessareuroelessar/* readAwayDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 READAWAYDIALOG_H #define READAWAYDIALOG_H #include #include "ui_readawaydialog.h" class readAwayDialog : public QWidget { Q_OBJECT public: readAwayDialog(QWidget *parent = 0); ~readAwayDialog(); void addMessage(QString &); void addXstatus(QString &t){ui.awayMessage->setHtml(t.replace("\n", "
"));} private: Ui::readAwayDialogClass ui; QPoint desktopCenter(); }; #endif // READAWAYDIALOG_H qutim-0.2.0/plugins/icq/closeconnection.h0000644000175000017500000000266311273054317022121 0ustar euroelessareuroelessar/* closeConnection Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 CLOSECONNECTION_H_ #define CLOSECONNECTION_H_ #include class QTcpSocket; class QString; class QHostAddress; class icqBuffer; class closeConnection : public QObject { Q_OBJECT public: closeConnection(QObject *parent = 0); ~closeConnection(); void readData(QTcpSocket *, icqBuffer *, const QString &); signals: void systemMessage(const QString &); void sendCookie(const QByteArray); void sendBosServer(const QHostAddress &); void sendBosPort(const quint16 &); void blockRateLimit(); private: void disconnectTakeUin(QTcpSocket *); void errorMessage(const quint16); void getError(QTcpSocket *, icqBuffer *); void getLuck(icqBuffer *); void getBosServer(const QString &); }; #endif /*CLOSECONNECTION_H_*/ qutim-0.2.0/plugins/icq/icqpluginsystem.cpp0000644000175000017500000001200111273054317022512 0ustar euroelessareuroelessar#include "icqpluginsystem.h" IcqPluginSystem::IcqPluginSystem() { } IcqPluginSystem::~IcqPluginSystem() { } IcqPluginSystem &IcqPluginSystem::instance() { static IcqPluginSystem ips; return ips; } void IcqPluginSystem::updateStatusIcons() { m_parent_layer->getMainPluginSystemPointer()->updateStatusIcons(); } bool IcqPluginSystem::addItemToContactList(TreeModelItem Item, QString name) { return m_parent_layer->getMainPluginSystemPointer()->addItemToContactList(Item, name); } bool IcqPluginSystem::removeItemFromContactList(TreeModelItem Item) { return m_parent_layer->getMainPluginSystemPointer()->removeItemFromContactList(Item); } bool IcqPluginSystem::moveItemInContactList(TreeModelItem OldItem, TreeModelItem NewItem) { return m_parent_layer->getMainPluginSystemPointer()->moveItemInContactList(OldItem, NewItem); } bool IcqPluginSystem::setContactItemName(TreeModelItem Item, QString name) { return m_parent_layer->getMainPluginSystemPointer()->setContactItemName(Item, name); } bool IcqPluginSystem::setContactItemIcon(TreeModelItem Item, QIcon icon, int position) { return m_parent_layer->getMainPluginSystemPointer()->setContactItemIcon(Item, icon, position); } bool IcqPluginSystem::setContactItemRow(TreeModelItem Item, QList row, int position) { return m_parent_layer->getMainPluginSystemPointer()->setContactItemRow(Item, row, position); } bool IcqPluginSystem::setContactItemStatus(TreeModelItem Item, QIcon icon, QString text, int mass) { return m_parent_layer->getMainPluginSystemPointer()->setContactItemStatus(Item, icon, text, mass); } bool IcqPluginSystem::setStatusMessage(QString &status_message, bool &dshow) { return m_parent_layer->getMainPluginSystemPointer()->setStatusMessage(status_message, dshow); } void IcqPluginSystem::addMessageFromContact(const TreeModelItem &item, const QString &message, const QDateTime &message_date) { m_parent_layer->getMainPluginSystemPointer()->addMessageFromContact(item, message, message_date); } void IcqPluginSystem::addServiceMessage(const TreeModelItem &item, const QString &message) { m_parent_layer->getMainPluginSystemPointer()->addServiceMessage(item, message); } void IcqPluginSystem::addImage(const TreeModelItem &item, const QByteArray &image_raw) { m_parent_layer->getMainPluginSystemPointer()->addImage(item,image_raw); } void IcqPluginSystem::contactTyping(const TreeModelItem &item, bool typing) { m_parent_layer->getMainPluginSystemPointer()->contactTyping(item, typing); } void IcqPluginSystem::messageDelievered(const TreeModelItem &item, int position) { m_parent_layer->getMainPluginSystemPointer()->messageDelievered(item, position); } bool IcqPluginSystem::checkForMessageValidation(const TreeModelItem &item, const QString &message, int message_type, bool special_status) { return m_parent_layer->getMainPluginSystemPointer()->checkForMessageValidation(item, message, message_type, special_status); } QString IcqPluginSystem::getIconFileName(const QString & icon_name) { return m_parent_layer->getMainPluginSystemPointer()->getIconFileName(icon_name); } QIcon IcqPluginSystem::getIcon(const QString & icon_name) { return m_parent_layer->getMainPluginSystemPointer()->getIcon(icon_name); } QString IcqPluginSystem::getStatusIconFileName(const QString & icon_name, const QString & default_path) { return m_parent_layer->getMainPluginSystemPointer()->getStatusIconFileName(icon_name, default_path); } QIcon IcqPluginSystem::getStatusIcon(const QString & icon_name, const QString & default_path) { return m_parent_layer->getMainPluginSystemPointer()->getStatusIcon(icon_name, default_path); } void IcqPluginSystem::setAccountIsOnline(const TreeModelItem &item, bool online) { m_parent_layer->getMainPluginSystemPointer()->setAccountIsOnline(item, online); } void IcqPluginSystem::createChat(const TreeModelItem &item) { m_parent_layer->getMainPluginSystemPointer()->createChat(item); } void IcqPluginSystem::notifyAboutBirthDay(const TreeModelItem &item) { m_parent_layer->getMainPluginSystemPointer()->notifyAboutBirthDay(item); } void IcqPluginSystem::systemNotifiacation(const TreeModelItem &item, const QString &message) { m_parent_layer->getMainPluginSystemPointer()->systemNotifiacation(item ,message); } void IcqPluginSystem::customNotifiacation(const TreeModelItem &item, const QString &message) { m_parent_layer->getMainPluginSystemPointer()->customNotifiacation(item ,message); } void IcqPluginSystem::getQutimVersion(quint8 &major, quint8 &minor, quint8 &secminor, quint16 &svn) { m_parent_layer->getMainPluginSystemPointer()->getQutimVersion(major, minor, secminor, svn); } quint16 IcqPluginSystem::registerEventHandler(const QString &event_id, EventHandler *handler) { return m_parent_layer->getMainPluginSystemPointer()->registerEventHandler(event_id, handler); } void IcqPluginSystem::removeEventHandler(quint16 id, EventHandler *handler) { m_parent_layer->getMainPluginSystemPointer()->removeEventHandler(id, handler); } bool IcqPluginSystem::sendEvent(Event &event) { return m_parent_layer->getMainPluginSystemPointer()->sendEvent(event); } qutim-0.2.0/plugins/icq/accounteditdialog.cpp0000644000175000017500000002047111273054317022746 0ustar euroelessareuroelessar/* AccountEditDialog Copyright (c) 2009 by Rustam Chakin *************************************************************************** * * * 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 "accounteditdialog.h" #include "icqpluginsystem.h" #include AccountEditDialog::AccountEditDialog(const QString &uin, const QString &profile_name, contactListTree *cl, QWidget *parent) : QWidget(parent), m_uin(uin), m_profile_name(profile_name), m_cl(cl) { m_ui.setupUi(this); move(desktopCenter()); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); IcqPluginSystem &ips = IcqPluginSystem::instance(); m_ui.okButton->setIcon(ips.getIcon("apply")); m_ui.applyButton->setIcon(ips.getIcon("apply")); m_ui.cancelButton->setIcon(ips.getIcon("cancel")); m_ui.tabWidget->setTabIcon(0, QIcon(":/icons/icqprotocol.png")); m_ui.tabWidget->setTabIcon(1, ips.getIcon("network")); m_ui.tabWidget->setTabIcon(2, ips.getIcon("proxy")); setWindowTitle(tr("Editing %1").arg(m_uin)); setWindowIcon(ips.getIcon("edituser")); connect( m_ui.typeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(proxyTypeChanged(int))); loadSettings(); } AccountEditDialog::~AccountEditDialog() { } void AccountEditDialog::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui.retranslateUi(this); break; default: break; } } QPoint AccountEditDialog::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void AccountEditDialog::loadSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+m_uin, "accountsettings"); const char crypter[] = {0x10,0x67, 0x56, 0x78, 0x85, 0x14, 0x87, 0x11, 0x45,0x45,0x45,0x45,0x45,0x45 }; QByteArray tmpPass = settings.value("main/password").toByteArray(); QByteArray roastedPass; for ( int i = 0; i < tmpPass.length(); i++ ) roastedPass[i] = tmpPass.at(i) ^ crypter[i]; QString password = m_cl->convertPassToCodePage(roastedPass); m_ui.passwordEdit->setText(password); m_ui.savePassBox->setChecked( settings.value("main/savepass", false).toBool()); bool autoC = settings.value("connection/auto", true).toBool(); m_ui.autoBox->setChecked(autoC); if ( autoC ) m_ui.saveStatusOnExitBox->setChecked(settings.value("connection/statonexit", true).toBool()); m_ui.idEdit->setText(settings.value("AOL/id", "ICQ Client").toString()); m_ui.majorBox->setValue(settings.value("AOL/major", 20).toUInt()); m_ui.minorBox->setValue(settings.value("AOL/minor", 52).toUInt()); m_ui.lesserBox->setValue(settings.value("AOL/lesser", 1).toUInt()); m_ui.buildBox->setValue(settings.value("AOL/build", 3916).toUInt()); m_ui.idBox->setValue(settings.value("AOL/cid", 266).toUInt()); m_ui.distributionBox->setValue(settings.value("AOL/distr", 85).toUInt()); m_ui.seqBox->setValue(settings.value("AOL/seq", 0).toUInt()); m_ui.secureBox->setChecked(settings.value("connection/md5", true).toBool()); m_ui.hostEdit->setText(settings.value("connection/host", "login.icq.com").toString()); m_ui.portBox->setValue(settings.value("connection/port", 5190).toInt()); m_ui.typeBox->setCurrentIndex(settings.value("proxy/proxyType", 0).toInt()); m_ui.proxyHostEdit->setText(settings.value("proxy/host", "").toString()); m_ui.proxyPortBox->setValue(settings.value("proxy/port", 1).toInt()); m_ui.authBox->setChecked(settings.value("proxy/auth", false).toBool()); if ( m_ui.authBox->isChecked() ) { m_ui.userNameEdit->setEnabled(true); m_ui.userPasswordEdit->setEnabled(true); } m_ui.userNameEdit->setText(settings.value("proxy/user", "").toString()); m_ui.userPasswordEdit->setText(settings.value("proxy/pass", "").toString()); m_ui.keepAliveBox->setChecked(settings.value("connection/alive", true).toBool()); m_ui.useProxyBox->setChecked(settings.value("connection/useproxy", false).toBool()); m_ui.listenPortBox->setValue(settings.value("connection/listen", 5191).toUInt()); } void AccountEditDialog::on_okButton_clicked() { saveSettings(); close(); } void AccountEditDialog::on_applyButton_clicked() { saveSettings(); } void AccountEditDialog::on_cancelButton_clicked() { close(); } void AccountEditDialog::saveSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+m_uin, "accountsettings"); QString account_password = m_ui.passwordEdit->text(); account_password.truncate(8); const char crypter[] = {0x10,0x67, 0x56, 0x78, 0x85, 0x14, 0x87, 0x11, 0x45,0x45,0x45,0x45,0x45,0x45 }; QByteArray roasted_pass; for ( int i = 0; i < account_password.length(); i++ ) roasted_pass[i] = account_password.at(i).unicode() ^ crypter[i]; settings.setValue("main/password",roasted_pass); settings.setValue("main/savepass", m_ui.savePassBox->isChecked()); bool autoC = m_ui.autoBox->isChecked(); settings.setValue("connection/auto", autoC); if ( autoC ) settings.setValue("connection/statonexit", m_ui.saveStatusOnExitBox->isChecked()); else settings.remove("connection/statonexit"); settings.setValue("AOL/id",m_ui.idEdit->text()); settings.setValue("AOL/major", m_ui.majorBox->value()); settings.setValue("AOL/minor", m_ui.minorBox->value()); settings.setValue("AOL/lesser", m_ui.lesserBox->value()); settings.setValue("AOL/build", m_ui.buildBox->value()); settings.setValue("AOL/cid", m_ui.idBox->value()); settings.setValue("AOL/distr", m_ui.distributionBox->value()); settings.setValue("AOL/seq", m_ui.seqBox->value()); settings.setValue("connection/md5", m_ui.secureBox->isChecked()); if ( m_ui.hostEdit->text().trimmed() != "" ) settings.setValue("connection/host", m_ui.hostEdit->text()); else settings.remove("connection/host"); settings.setValue("connection/port", m_ui.portBox->value()); settings.setValue("proxy/proxyType", m_ui.typeBox->currentIndex()); if ( m_ui.proxyHostEdit->isEnabled() && m_ui.proxyHostEdit->text().trimmed() != "" ) settings.setValue("proxy/host", m_ui.proxyHostEdit->text()); else settings.remove("proxy/host"); if ( m_ui.proxyPortBox->isEnabled() ) settings.setValue("proxy/port", m_ui.proxyPortBox->value()); else settings.remove("proxy/port"); if ( m_ui.authBox->isChecked() ) { settings.setValue("proxy/auth", true); settings.setValue("proxy/user", m_ui.userNameEdit->text()); settings.setValue("proxy/pass", m_ui.userPasswordEdit->text()); } else { settings.remove("proxy/auth"); settings.remove("proxy/user"); settings.remove("proxy/pass"); } settings.setValue("connection/alive", m_ui.keepAliveBox->isChecked()); settings.setValue("connection/useproxy", m_ui.useProxyBox->isChecked()); settings.setValue("connection/listen", m_ui.listenPortBox->value()); } void AccountEditDialog::proxyTypeChanged(int index) { if ( index ) { m_ui.proxyHostEdit->setEnabled(true); m_ui.proxyPortBox->setEnabled(true); m_ui.authBox->setEnabled(true); } else { m_ui.proxyHostEdit->setEnabled(false); m_ui.proxyPortBox->setEnabled(false); m_ui.authBox->setEnabled(false); m_ui.authBox->setChecked(false); } } qutim-0.2.0/plugins/icq/treebuddyitem.h0000644000175000017500000001071211273054317021574 0ustar euroelessareuroelessar/* treeBuddyItem Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 TREEBUDDYITEM_H_ #define TREEBUDDYITEM_H_ #include #include "statusiconsclass.h" #include "quticqglobals.h" #include "icqpluginsystem.h" class messageFormat; class contactListTree; class icqBuffer; class tlv; class treeBuddyItem { public: treeBuddyItem(const QString &, const QString &profile_name); ~treeBuddyItem(); void checkForXStatus(); void readData(icqBuffer *, quint16); void oncoming(icqBuffer *, quint16); void buddyOffline(); void setBuddyUin(const QString &); quint16 groupID; QString groupName; quint16 itemId; bool isOffline; inline contactStatus getStatus() const { return status; }; inline QString getName() const { return buddyName; }; inline QString getUin() const { return buddyUin; }; void setName(const QString& n); QList messageList; statusIconClass::getIconFunction statusIconMethod; bool messageIcon; void readMessage(); contactListTree *par; bool UTF8; bool statusChanged; void updateBuddyText(); bool operator< ( const QTreeWidgetItem &other ) const ; bool underline; bool birth; QDate birthDay; quint8 picFlags; void waitingForAuth(bool); bool authorizeMe; QString authMessage; QList capabilitiesList; QString clientId; quint32 externalIP; quint32 internalIP; quint32 onlineTime; quint32 signonTime; quint32 lastonlineTime; quint32 regTime; quint32 idleSinceTime; bool fileTransferSupport; bool xStatusPresent; bool icqLite; QByteArray xStatusMessage; QString xStatusIcon; quint8 protocolVersion; quint32 userPort; quint32 Cookie; quint32 lastInfoUpdate; quint32 lastExtInfoUpdate; quint32 lastExtStatusInfoUpdate; QList shortCaps; inline QString getParentUin() const { return parentUin; }; void setMessageIcon(bool) {}; void setAvatarHash(const QByteArray &hash); QByteArray getAvatarHash() const {return avatarMd5Hash;} void setNotAuthorizated(bool authflag); bool getNotAutho() {return notAutho;} void setClientIcon(const QIcon &client_icon); bool m_show_xstatus_icon; bool m_show_birthday_icon; bool m_show_auth_icon; bool m_show_vis_icon; bool m_show_invis_icon; bool m_show_ignore_icon; bool m_show_xstatus_text; bool m_visible_contact; bool m_invisible_contact; bool m_ignore_contact; void updateIcons(); void setCustomIcon(const QIcon &icon, int position); bool m_xstatus_already_readed; void setXstatusText(); QString createToolTip(); bool m_xstatus_changed; QString xStatusCaption; QString xStatusMsg; void setXstatusCaptionAndMessage(const QString &caption, const QString &message); bool m_channel_two_support; private: bool notAutho; QByteArray avatarMd5Hash; void setCapabilities(QByteArray); bool isUtf8Cap(const QByteArray &); void takeOncomingTlv(tlv &); void takeTlv(tlv &); quint32 convertToInt32(const QByteArray &) const; quint16 byteArrayToInt16(const QByteArray &) const; quint8 byteArrayToInt8(const QByteArray &) const; void changeStatus(const QByteArray &); QString buddyUin; QString buddyName; contactStatus status; void readAvailableMessTlv(QByteArray); QString iconPath; QString parentUin; void setExtIp(const QByteArray &); void setIntIp(const QByteArray &); void setOnlTime(const QByteArray &); void setSignOn(const QByteArray &); void setLastOnl(); void setregTime(const QByteArray &); void readShortCap(quint16 ,const QByteArray &); void setIdleSinceTime(quint16, const QByteArray &); QString statToStr(contactStatus st); QString m_profile_name; IcqPluginSystem &m_icq_plugin_system; void setContactStatus(const QIcon &statuc_icon, const QString &status_name, int mass); void setContactXStatus(const QIcon &xstatus_icon); void setTextToRow(const QString &text, int position); void clearRow(int position); void setBirthdayIcon(); }; #endif /*TREEBUDDYITEM_H_*/ qutim-0.2.0/plugins/icq/accountbutton.h0000644000175000017500000000166711273054317021627 0ustar euroelessareuroelessar/* accountButton Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ACCOUNTBUTTON_H #define ACCOUNTBUTTON_H #include class accountButton : public QToolButton { Q_OBJECT public: accountButton(QWidget *parent = 0); ~accountButton(); private: }; #endif // ACCOUNTBUTTON_H qutim-0.2.0/plugins/icq/userinformation.ui0000644000175000017500000012073311273054317022345 0ustar euroelessareuroelessar userInformationClass 0 0 637 483 userInformation 4 64 64 64 64 QFrame::StyledPanel Qt::AlignCenter :/icons/crystal_project/add.png:/icons/crystal_project/add.png 0 0 QFrame::StyledPanel Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse 0 0 0 Name 4 Nick name: 50 Last login: true true 50 Last name: 50 First name: 0 0 Account info 4 true UIN: Registration: true Email: 60 Don't publish for all Qt::Vertical 20 40 0 0 0 Originally from Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 4 Country: City: 50 Qt::Horizontal 40 20 State: 40 16777215 3 Qt::Horizontal 40 20 0 0 Home address 4 Country: Phone: 20 City: 50 Fax: 20 State: 40 16777215 3 Zip: 10 Cellular: 30 Street address: 80 Qt::Vertical 20 40 0 0 0 Work address 4 Country: Phone: 20 City: 50 Fax: 20 State: 40 16777215 3 Zip: 10 Street: 80 0 0 Company 4 Company name: 50 Occupation: Div/dept: 40 Web site: Position: 50 Qt::Vertical 20 40 0 0 0 Personal QFormLayout::AllNonFixedFieldsGrow Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 4 Marital status: Gender: true 0 QComboBox::AdjustToContentsOnFirstShow Female Male Home page: 80 Age: 36 16777215 32765 true false Birth date Qt::Horizontal 40 20 Spoken language: true 0 0 Interests 4 200 200 200 200 0 false <!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" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Verdana'; font-size:8pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"></p></body></html> 0 0 0 16777215 16777215 Authorization/webaware 4 My authorization is required true All uses can add me without authorization Allow others to view my status in search and from the web Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Vertical 20 40 Qt::Horizontal 268 0 Save :/icons/crystal_project/save_all.png:/icons/crystal_project/save_all.png Close :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png :/icons/crystal_project/remove.png:/icons/crystal_project/remove.png 130 16777215 false Summary :/icons/crystal_project/summary.png:/icons/crystal_project/summary.png General :/icons/crystal_project/general.png:/icons/crystal_project/general.png Home :/icons/crystal_project/home.png:/icons/crystal_project/home.png Work :/icons/crystal_project/work.png:/icons/crystal_project/work.png Personal :/icons/crystal_project/personal.png:/icons/crystal_project/personal.png About :/icons/crystal_project/about.png:/icons/crystal_project/about.png Additinonal :/icons/crystal_project/additional.png:/icons/crystal_project/additional.png 0 0 Request details :/icons/crystal_project/request.png:/icons/crystal_project/request.png infoListWidget currentRowChanged(int) detailsStackedWidget setCurrentIndex(int) 106 166 284 205 birthBox toggled(bool) birthDateEdit setEnabled(bool) 244 39 244 39 closeButton clicked() userInformationClass close() 589 416 630 432 qutim-0.2.0/plugins/icq/buffer.h0000644000175000017500000000175711273054317020210 0ustar euroelessareuroelessar/* icqBuffer Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 BUFFER_H_ #define BUFFER_H_ #include class icqBuffer : public QBuffer { Q_OBJECT public: icqBuffer(QObject *parent = 0); ~icqBuffer(); QByteArray readAll(); QByteArray read(qint64); qint64 bytesAvailable() const; qint64 write ( const QByteArray &); }; #endif /*BUFFER_H_*/ qutim-0.2.0/plugins/icq/statusiconsclass.h0000644000175000017500000000510611273054317022334 0ustar euroelessareuroelessar/* statusIconClass Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 STATUSICONSCLASS_H_ #define STATUSICONSCLASS_H_ #include #include #ifdef _MSC_VER #pragma warning (disable:4100) #endif class treeBuddyItem; class statusIconClass { public: typedef const QIcon &(statusIconClass::*getIconFunction)() const; //const QIcon &(__thiscall statusIconClass::* )(void) const; QList xstatusList; static statusIconClass *getInstance(); bool reloadIcons(); bool reloadIconsFromSettings(); const QString getStatusPath(const QString &status, const QString &path ); const QIcon &getOnlineIcon() const; const QIcon &getFreeForChatIcon() const; const QIcon &getAwayIcon() const; const QIcon &getNotAvailableIcon() const; const QIcon &getOccupiedIcon() const; const QIcon &getDoNotDisturbIcon() const; const QIcon &getInvisibleIcon() const; const QIcon &getOfflineIcon() const; const QIcon &getConnectingIcon() const; const QIcon &getAtHomeIcon() const; const QIcon &getAtWorkIcon() const; const QIcon &getLunchIcon() const; const QIcon &getEvilIcon() const; const QIcon &getDepressionIcon() const; const QIcon &getContentIcon() const; private: static QMutex fInstGuard; static statusIconClass *fInstance; mutable QMutex fIconLocker; QIcon onlineIcon; QIcon ffcIcon; QIcon awayIcon; QIcon naIcon; QIcon occupiedIcon; QIcon dndIcon; QIcon invisibleIcon; QIcon offlineIcon; QIcon connectingIcon; QIcon atHomeIcon; QIcon atWorkIcon; QIcon lunchIcon; QIcon evilIcon; QIcon depressionIcon; QIcon contentIcon; statusIconClass(); statusIconClass(const statusIconClass & /* iconClass */) { } ~statusIconClass(); statusIconClass operator = (const statusIconClass & /* iconClass */) { return *this; }; static void release(); }; #endif /*STATUSICONSCLASS_H_*/ qutim-0.2.0/plugins/icq/acceptauthdialog.h0000644000175000017500000000245111273054317022230 0ustar euroelessareuroelessar/* acceptAuthDialog Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 ACCEPTAUTHDIALOG_H #define ACCEPTAUTHDIALOG_H #include #include "ui_acceptauthdialog.h" class acceptAuthDialog : public QDialog { Q_OBJECT public: acceptAuthDialog(const QString &, QWidget *parent = 0); ~acceptAuthDialog(); void setMessage(const QString &t){ui.textBrowser->setPlainText(t);} bool acceptAuth; private slots: void on_acceptButton_clicked(); void on_declineButton_clicked(); signals: void sendAuthReqAnswer(bool, const QString &); private: Ui::acceptAuthDialogClass ui; QPoint desktopCenter(); QString uin; }; #endif // ACCEPTAUTHDIALOG_H qutim-0.2.0/plugins/icq/clientmd5login.cpp0000644000175000017500000001060411273054317022176 0ustar euroelessareuroelessar/* clientMd5Login Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include "snac.h" #include "clientmd5login.h" #include clientMd5Login::clientMd5Login(const QString &uin, const QString &profile_name) { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+profile_name+"/ICQ."+uin, "accountsettings"); screenName.setType(0x0001); password.setType(0x0025); clientName.setType(0x0003); clientName.setData(settings.value("AOL/id", "ICQ Client").toString()); clientID.setType(0x0016); clientID.setData((quint16)settings.value("AOL/cid", 266).toUInt()); clientMajor.setType(0x0017); clientMajor.setData((quint16)settings.value("AOL/major", 20).toUInt()); clientMinor.setType(0x0018); clientMinor.setData((quint16)settings.value("AOL/minor", 52).toUInt()); clientLesser.setType(0x0019); clientLesser.setData((quint16)settings.value("AOL/lesser", 1).toUInt()); clientBuild.setType(0x001A); clientBuild.setData((quint16)settings.value("AOL/build", 3916).toUInt()); distributionNumber.setType(0x0014); distributionNumber.setData((quint32)settings.value("AOL/distr", 85).toUInt()); clientLanguage.setType(0x000F); clientLanguage.setData(QString("en")); clientCountry.setType(0x000E); clientCountry.setData(QString("us")); } clientMd5Login::~clientMd5Login() { } void clientMd5Login::setPassword(const QString &pass, const QString &authKey) { QByteArray hashPassword; hashPassword.append(pass); QByteArray authkey; authkey.append(authKey); QByteArray AIM_MD5_STRING("AOL Instant Messenger (SM)"); QCryptographicHash passHash(QCryptographicHash::Md5); passHash.addData(authkey); passHash.addData(hashPassword); passHash.addData(AIM_MD5_STRING); password.setData(passHash.result()); } void clientMd5Login::sendPacket(QTcpSocket *socket, quint16 flapSeq, quint32 snacSeq) { QByteArray packet; packet[0] = 0x2A; packet[1] = 0x02; packet.append(convertToByteArray(flapSeq)); packet.append(flapLength()); packet.append(convertToByteArray((quint16)0x0017)); packet.append(convertToByteArray((quint16)0x0002)); packet.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray(snacSeq)); packet.append(getBytePacket()); socket->write(packet); } QByteArray clientMd5Login::flapLength() const { quint16 l = 10; l += screenName.getLength(); l += password.getLength(); l += clientName.getLength(); l += clientID.getLength(); l += clientMajor.getLength(); l += clientMinor.getLength(); l += clientLesser.getLength(); l += clientBuild.getLength(); l += distributionNumber.getLength(); l += clientLanguage.getLength(); l += clientCountry.getLength(); QByteArray packetLength; packetLength[0] = l / 0x100; packetLength[1] = l % 0x100; return packetLength; } QByteArray clientMd5Login::getBytePacket() const { QByteArray packet; packet.append(screenName.getData()); packet.append(clientName.getData()); packet.append(password.getData()); packet.append(clientMajor.getData()); packet.append(clientMinor.getData()); packet.append(clientLesser.getData()); packet.append(clientBuild.getData()); packet.append(clientID.getData()); packet.append(distributionNumber.getData()); packet.append(clientLanguage.getData()); packet.append(clientCountry.getData()); return packet; } QByteArray clientMd5Login::convertToByteArray(const quint16 &d) const { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray clientMd5Login::convertToByteArray(const quint32 &d) const { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } qutim-0.2.0/plugins/icq/filetransferwindow.ui0000644000175000017500000003246611273054317023042 0ustar euroelessareuroelessar fileTransferWindowClass 0 0 400 280 0 0 400 280 File transfer :/icons/crystal_project/save_all.png:/icons/crystal_project/save_all.png 4 16777215 15 Current file: 0 22 16777215 22 QFrame::StyledPanel Qt::PlainText false Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false -1 Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse 0 0 Done: 0 0 Speed: 50 22 16777215 22 QFrame::StyledPanel 100 22 16777215 22 QFrame::StyledPanel 0 0 File size: 0 0 Files: 0 0 50 22 16777215 22 QFrame::StyledPanel 0 22 16777215 22 QFrame::StyledPanel 1/1 Qt::AlignCenter Last time: 0 22 16777215 22 QFrame::StyledPanel Remained time: 0 22 16777215 22 QFrame::StyledPanel Sender's IP: 0 22 16777215 22 QFrame::StyledPanel 16777215 15 Status: 0 22 16777215 22 QFrame::StyledPanel Qt::AlignCenter 0 22 16777215 22 0 false Qt::Horizontal 241 27 Open :/icons/crystal_project/folder.png:/icons/crystal_project/folder.png 0 25 16777215 16777215 Cancel :/icons/crystal_project/cancel.png:/icons/crystal_project/cancel.png Qt::Vertical 20 40 qutim-0.2.0/plugins/icq/privacylistwindow.cpp0000644000175000017500000001167011273054317023066 0ustar euroelessareuroelessar/* privacyListWindow Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 "privacylistwindow.h" #include "icqpluginsystem.h" privacyListWindow::privacyListWindow(const QString &uin, const QString &profile_name ,QWidget *parent) : QWidget(parent) , accountUin(uin) , m_profile_name(profile_name) { ui.setupUi(this); setWindowTitle(tr("Privacy lists")); setWindowIcon(IcqPluginSystem::instance().getIcon("privacylist")); move(desktopCenter()); ui.visibleTreeWidget->setColumnWidth(2,22); ui.visibleTreeWidget->setColumnWidth(3,22); ui.visibleTreeWidget->setColumnWidth(1,200); ui.invisibleTreeWidget->setColumnWidth(2,22); ui.invisibleTreeWidget->setColumnWidth(3,22); ui.invisibleTreeWidget->setColumnWidth(1,200); ui.ignoreTreeWidget->setColumnWidth(2,22); ui.ignoreTreeWidget->setColumnWidth(3,22); ui.ignoreTreeWidget->setColumnWidth(1,200); createLists(); } privacyListWindow::~privacyListWindow() { } void privacyListWindow::rellocateDialogToCenter(QWidget *widget) { QDesktopWidget &desktop = *QApplication::desktop(); // Get current screen num int curScreen = desktop.screenNumber(widget); // Get available geometry of the screen QRect screenGeom = desktop.availableGeometry(curScreen); // Let's calculate point to move dialog QPoint moveTo(screenGeom.left(), screenGeom.top()); moveTo.setX(moveTo.x() + screenGeom.width() / 2); moveTo.setY(moveTo.y() + screenGeom.height() / 2); moveTo.setX(moveTo.x() - this->size().width() / 2); moveTo.setY(moveTo.y() - this->size().height() / 2); this->move(moveTo); } QPoint privacyListWindow::desktopCenter() { QDesktopWidget &desktop = *QApplication::desktop(); return QPoint(desktop.width() / 2 - size().width() / 2, desktop.height() / 2 - size().height() / 2); } void privacyListWindow::createLists() { IcqPluginSystem &ips = IcqPluginSystem::instance(); QSettings contacts(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profile_name+"/ICQ."+accountUin, "contactlist"); ui.visibleTreeWidget->clear(); QStringList visibleList = contacts.value("list/visible").toStringList(); foreach(QString uin, visibleList) { QTreeWidgetItem *buddy = new QTreeWidgetItem(ui.visibleTreeWidget); buddy->setText(0,uin); buddy->setText(1, contacts.value(uin + "/nickname", "").toString()); buddy->setIcon(2, ips.getIcon("contactinfo")); buddy->setIcon(3, ips.getIcon("delete_user")); } ui.invisibleTreeWidget->clear(); QStringList invisibleList = contacts.value("list/invisible").toStringList(); foreach(QString uin, invisibleList) { QTreeWidgetItem *buddy = new QTreeWidgetItem(ui.invisibleTreeWidget); buddy->setText(0,uin); buddy->setText(1, contacts.value(uin + "/nickname", "").toString()); buddy->setIcon(2, ips.getIcon("contactinfo")); buddy->setIcon(3, ips.getIcon("delete_user")); } ui.ignoreTreeWidget->clear(); QStringList ignoreList = contacts.value("list/ignore").toStringList(); foreach(QString uin, ignoreList) { QTreeWidgetItem *buddy = new QTreeWidgetItem(ui.ignoreTreeWidget); buddy->setText(0,uin); buddy->setText(1, contacts.value(uin + "/nickname", "").toString()); buddy->setIcon(2, ips.getIcon("contactinfo")); buddy->setIcon(3, ips.getIcon("delete_user")); } } void privacyListWindow::setOnline(bool online) { ui.ignoreTreeWidget->setColumnHidden(2, !online); ui.visibleTreeWidget->setColumnHidden(2, !online); ui.invisibleTreeWidget->setColumnHidden(2, !online); ui.ignoreTreeWidget->setColumnHidden(3, !online); ui.visibleTreeWidget->setColumnHidden(3, !online); ui.invisibleTreeWidget->setColumnHidden(3, !online); } void privacyListWindow::on_visibleTreeWidget_itemClicked(QTreeWidgetItem * item, int column) { if ( column == 2) emit openInfo(item->text(0), item->text(1), "", ""); if ( column == 3) { emit deleteFromPrivacyList(item->text(0), 0); delete item; } } void privacyListWindow::on_invisibleTreeWidget_itemClicked(QTreeWidgetItem * item, int column) { if ( column == 2) { emit openInfo(item->text(0), item->text(1), "", ""); } if ( column == 3) { emit deleteFromPrivacyList(item->text(0), 1); delete item; } } void privacyListWindow::on_ignoreTreeWidget_itemClicked(QTreeWidgetItem * item, int column) { if ( column == 2) emit openInfo(item->text(0), item->text(1), "", ""); if ( column == 3) { emit deleteFromPrivacyList(item->text(0), 2); delete item; } } qutim-0.2.0/plugins/icq/icqmessage.cpp0000644000175000017500000011352711273054317021412 0ustar euroelessareuroelessar/* icqMessage Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include #include #include #include "tlv.h" #include "buffer.h" #include "snac.h" #include "icqmessage.h" icqMessage::icqMessage(const QString &codepage) { codec = QTextCodec::codecForName(codepage.toLocal8Bit()); downCounter1 = convertToByteArray((quint16)1); downCounter2 = convertToByteArray((quint16)1); msgType = 0; reason = 0; fileAnswer = false; peerIP = 0; peerPort = 0; fileSize = 0; aolProxyIP = 0; } icqMessage::~icqMessage() { } QByteArray icqMessage::convertToByteArray(const quint8 &d) { QByteArray packet; packet[0] = d; return packet; } QByteArray icqMessage::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray icqMessage::convertLEToByteArray(const quint16 &d) { QByteArray packet; packet[1] = (d / 0x100); packet[0] = (d % 0x100); return packet; } QByteArray icqMessage::convertToByteArray(const quint32 &d) { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } quint8 icqMessage::byteArrayToInt8(const QByteArray &array) { bool ok; return array.toHex().toUInt(&ok,16); } quint16 icqMessage::byteArrayToInt16(const QByteArray &array) { bool ok; return array.toHex().toUInt(&ok,16); } quint32 icqMessage::byteArrayToInt32(const QByteArray &array) { bool ok; return array.toHex().toULong(&ok,16); } quint16 icqMessage::byteArrayToLEInt16(const QByteArray &array) { bool ok; quint16 tmp = array.toHex().toUInt(&ok,16); return ((tmp % 0x100) * 0x100 + (tmp)/ 0x100); } void icqMessage::readData(icqBuffer *socket, quint16 l) { msgCookie = msgIdCookie = socket->read(8); quint16 channel = byteArrayToInt16(socket->read(2)); quint8 length = byteArrayToInt8(socket->read(1)); from = socket->read(length); socket->read(2); quint16 numberOfTlv = byteArrayToInt16(socket->read(2)); l = l - length - 15; tlv rendezvousData; for ( int i = 0; i < numberOfTlv; i++) { tlv newTlv; newTlv.readData(socket); l -= newTlv.getLength(); } if ( channel == 0x0002) { for ( ; l > 0;) { tlv newTlv; newTlv.readData(socket); l -= newTlv.getLength(); if (newTlv.getTlvType() == 0x0005) rendezvousData = newTlv; } } switch ( channel ) { case 0x0001: messageType = 0; l -= readPlainText(socket); break; case 0x0002: readRendezvousData(rendezvousData); break; default: break; } if ( l ) { socket->read(l); } } quint16 icqMessage::readPlainText(icqBuffer *socket) { quint16 length = 0; length += 2; quint16 msgData = byteArrayToInt16(socket->read(2)); if ( msgData != 0x0002 ) return length; length += 6; socket->read(4); quint16 capLength = byteArrayToInt16(socket->read(2)); socket->read(capLength); length += capLength; socket->read(2); quint16 msgLength = byteArrayToInt16(socket->read(2)); length += 4; quint16 charset = byteArrayToInt16(socket->read(2)); socket->read(2); // QTextCodec *codec = if ( charset != 0x0002 ) msg = codec->toUnicode(socket->read(msgLength - 4)); else if ( charset == 0x0002 ) { msg = unicodeToUtf8(socket->read(msgLength - 4)); } // msg = QString::fromUtf8(socket->read(msgLength - 4)); length += msgLength; return length; } QString icqMessage::unicodeToUtf8(const QByteArray &array) { static QTextCodec *codec = QTextCodec::codecForName("UTF-16BE"); return codec->toUnicode(array); } QByteArray icqMessage::utf8toUnicode(const QString &message) { static QTextCodec *codec = QTextCodec::codecForName("UTF-16BE"); return codec->fromUnicode(message); } QByteArray icqMessage::utf8toUnicodeLE(const QString &message) { static QTextCodec *codec = QTextCodec::codecForName("UTF-16LE"); return codec->fromUnicode(message); } void icqMessage::sendMessage(QTcpSocket *tcpSocket, const messageFormat &message, quint16 flapSeq, quint32 snacSeq, bool utf8) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(snacSeq); messageSnac.append(snac0406.getData()); quint32 msgcookie = QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); msgCookie.append(convertToByteArray(msgcookie)); // messageSnac.append(convertToByteArray((quint32)0x41C01C9E)); // messageSnac.append(convertToByteArray(msgcookie)); msgcookie = qrand(); msgCookie.append(convertToByteArray(msgcookie)); messageSnac.append(msgCookie); // messageSnac.append(convertToByteArray((quint32)0x2DD4DA21)); messageSnac.append(convertToByteArray((quint16)0x0001)); messageSnac.append(convertToByteArray((quint8)message.fromUin.size())); messageSnac.append(message.fromUin); tlv messageData; messageData.setType(0x0002); QByteArray tlvMessage; tlvMessage.append(convertToByteArray((quint16)0x0501)); tlvMessage.append(convertToByteArray((quint16)0x0001)); tlvMessage.append(convertToByteArray((quint8)0x01)); tlvMessage.append(convertToByteArray((quint16)0x0101)); QByteArray msg; if ( utf8 ) msg.append(utf8toUnicode(message.message)); else msg.append(codec->fromUnicode(message.message)); tlvMessage.append(convertToByteArray((quint16)(4 + msg.size()))); if ( utf8 ) tlvMessage.append(convertToByteArray((quint16)0x0002)); else tlvMessage.append(convertToByteArray((quint16)0x0000)); tlvMessage.append(convertToByteArray((quint16)0x0000)); tlvMessage.append(msg); messageData.setData(tlvMessage); messageSnac.append(messageData.getData()); messageSnac.append(convertToByteArray((quint16)0x0003)); messageSnac.append(convertToByteArray((quint16)0x0000)); messageSnac.append(convertToByteArray((quint16)0x0006)); messageSnac.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); tcpSocket->write(packet); } void icqMessage::sendMessageChannel2(QTcpSocket *tcpSocket, const messageFormat &message, quint16 flapSeq, quint32 snacSeq, bool utf8) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(snacSeq); messageSnac.append(snac0406.getData()); quint32 msgcookie = QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); msgCookie.append(convertToByteArray(msgcookie)); // messageSnac.append(convertToByteArray((quint32)0x41C01C9E)); // messageSnac.append(convertToByteArray(msgcookie)); msgcookie = qrand(); msgCookie.append(convertToByteArray(msgcookie)); messageSnac.append(msgCookie); // messageSnac.append(convertToByteArray((quint32)0x2DD4DA21)); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint8)message.fromUin.size())); messageSnac.append(message.fromUin); tlv messageData; messageData.setType(0x0005); QByteArray tlvMessage; tlvMessage.append(convertToByteArray((quint16)0x0000)); tlvMessage.append(msgCookie); tlvMessage.append(QByteArray::fromHex("094613494c7f11d18222444553540000")); tlv tlv0a; tlv0a.setType(0x000a); tlv0a.setData((quint16)1); tlvMessage.append(tlv0a.getData()); tlvMessage.append(convertToByteArray((quint16)0x000f)); tlvMessage.append(convertToByteArray((quint16)0x0000)); tlvMessage.append(convertToByteArray((quint16)0x2711)); QByteArray extentionData; extentionData.append(convertToByteArray((quint16)0x1b00)); extentionData.append(convertToByteArray((quint16)0x0a00)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint32)0x03000000)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(downCounter1); extentionData.append(convertToByteArray((quint16)0x0e00)); extentionData.append(downCounter2); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint8)0x01)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0400)); QByteArray converted_message = message.message.toUtf8(); converted_message.append(QChar(0x00)); extentionData.append(convertLEToByteArray((quint16)converted_message.length())); extentionData.append(converted_message); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0xffffff00)); extentionData.append(convertToByteArray((quint32)0x26000000)); extentionData.append(convertToByteArray((quint32)0x7b303934)); extentionData.append(convertToByteArray((quint32)0x36313334)); extentionData.append(convertToByteArray((quint32)0x452d3443)); extentionData.append(convertToByteArray((quint32)0x37462d31)); extentionData.append(convertToByteArray((quint32)0x3144312d)); extentionData.append(convertToByteArray((quint32)0x38323232)); extentionData.append(convertToByteArray((quint32)0x2d343434)); extentionData.append(convertToByteArray((quint32)0x35353335)); extentionData.append(convertToByteArray((quint32)0x34303030)); extentionData.append(convertToByteArray((quint16)0x307d)); tlvMessage.append(convertToByteArray((quint16)extentionData.length())); tlvMessage.append(extentionData); messageData.setData(tlvMessage); messageSnac.append(messageData.getData()); messageSnac.append(convertToByteArray((quint16)0x0003)); messageSnac.append(convertToByteArray((quint16)0x0000)); messageSnac.append(convertToByteArray((quint16)0x0006)); messageSnac.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); tcpSocket->write(packet); } QByteArray icqMessage::serverRelaying() { QByteArray packet; packet.append(convertToByteArray((quint32)0x09461349)); packet.append(convertToByteArray((quint32)0x4C7F11D1)); packet.append(convertToByteArray((quint32)0x82224445)); packet.append(convertToByteArray((quint32)0x53540000)); return packet; } quint16 icqMessage::readRendezvousData(tlv tlv05) { QByteArray data05 = tlv05.getTlvData(); quint16 length = 26; reason = byteArrayToInt16(data05.left(2)); data05 = data05.right(data05.size() - 2); msgCookie = data05.left(8); data05 = data05.right(data05.size() - 8); QByteArray msgCapab = data05.left(16); data05 = data05.right(data05.size() - 16); if ( msgCapab == QByteArray::fromHex("094613434c7f11d18222444553540000")) { fileAnswer = true; if ( reason ) return length; } quint16 leftsize = data05.size(); bool extentionDataPresent = false; QByteArray extentionData; for(;leftsize > 0;) { quint16 tlvType = byteArrayToInt16(data05.left(2)); data05 = data05.right(data05.size() - 2); quint16 tlvLength = byteArrayToInt16(data05.left(2)); data05 = data05.right(data05.size() - 2); QByteArray tlvData = data05.left(tlvLength); data05 = data05.right(data05.size() - tlvLength); leftsize = leftsize - 4 - tlvData.size(); length = length + 4 + tlvData.size(); if ( tlvType == 0x000a ) { connectToPeer = byteArrayToInt16(tlvData); } if ( tlvType == 0x2711 ) { extentionData = tlvData; extentionDataPresent = true; } if ( tlvType == 0x0003) peerIP = byteArrayToInt32(tlvData); if ( tlvType == 0x0002) aolProxyIP = byteArrayToInt32(tlvData); if ( tlvType == 0x0005) peerPort = byteArrayToInt16(tlvData); } if ( fileAnswer && extentionDataPresent) { quint16 folowingLength = extentionData.size(); extentionData = extentionData.right(extentionData.size() - 4 ); fileSize = byteArrayToInt32(extentionData.left(4)); extentionData = extentionData.right(extentionData.size() - 4 ); fileName = QString::fromUtf8(extentionData.left(folowingLength - 9)); extentionData = extentionData.right(extentionData.size() - 8 - folowingLength ); return length; } // if ( !extentionDataPresent ) // return length; quint16 folowingLength = byteArrayToLEInt16(extentionData.left(2)); extentionData = extentionData.right(extentionData.size() - (folowingLength )); downCounter1 = extentionData.left(2); extentionData = extentionData.right(extentionData.size() - 2 ); quint16 folowingLength2 = byteArrayToLEInt16(extentionData.left(2)); downCounter2 = extentionData.left(2); extentionData = extentionData.right(extentionData.size() - 2 ); extentionData = extentionData.right(extentionData.size() - (folowingLength2 )); length += 4 + folowingLength + folowingLength2; msgType = byteArrayToInt8(extentionData.left(1)); extentionData = extentionData.right(extentionData.size() - 1); if ( msgType == 0xe8 || msgType == 0xE9 || msgType == 0xEA || msgType == 0xEB ) { messageType = 1; extentionData = extentionData.right(extentionData.size() - 5); quint16 messageLength = byteArrayToLEInt16(extentionData.left(2)); extentionData = extentionData.right(extentionData.size() - 2); extentionData = extentionData.right(extentionData.size() - messageLength); } else if (msgType == 0x06) { messageType = 2; } else if ( msgType == 0x04 ) { messageType = 3; } else if ( msgType == 0x01) { messageType = 4; extentionData = extentionData.right(extentionData.size() - 5); quint16 messageLength = byteArrayToLEInt16(extentionData.left(2)); extentionData = extentionData.right(extentionData.size() - 2); msg = QString::fromUtf8(extentionData.left(messageLength - 1)); byteArrayMsg = extentionData.left(messageLength - 1); extentionData = extentionData.right(extentionData.size() - messageLength); } else if (msgType == 0x25 && msgCapab != QByteArray::fromHex("69716d7561746769656d000000000000")) { messageType = 4; extentionData = extentionData.right(extentionData.size() - 5); quint16 messageLength = byteArrayToLEInt16(extentionData.left(2)); extentionData = extentionData.right(extentionData.size() - 2); byteArrayMsg = extentionData.left(messageLength); extentionData = extentionData.right(extentionData.size() - messageLength); } else if (msgType == 0x1a) { if ( msgCapab == QByteArray::fromHex("094613494c7f11d18222444553540000")) messageType = 7; } else if (msgType == 0x25 && msgCapab == QByteArray::fromHex("69716d7561746769656d000000000000")) { messageType = 8; extentionData = extentionData.right(extentionData.size() - 5); quint16 messageLength = byteArrayToLEInt16(extentionData.left(2)); extentionData = extentionData.right(extentionData.size() - 2); byteArrayMsg = extentionData.left(messageLength); extentionData = extentionData.right(extentionData.size() - messageLength); } else messageType = 9; return length; } void icqMessage::sendAutoreply(QTcpSocket *tcpSocket, const QString &message,quint16 flapSeq, quint32 snacSeq) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac040b; snac040b.setFamily(0x0004); snac040b.setSubType(0x000b); snac040b.setReqId(snacSeq); messageSnac.append(snac040b.getData()); messageSnac.append(msgCookie); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint8)from.size())); messageSnac.append(from); messageSnac.append(convertToByteArray((quint16)0x0003)); QByteArray extentionData; extentionData.append(convertToByteArray((quint16)0x1b00)); extentionData.append(convertToByteArray((quint16)0x0800)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint32)0x03000000)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(downCounter1); extentionData.append(convertToByteArray((quint16)0x0e00)); extentionData.append(downCounter2); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint8)msgType)); extentionData.append(convertToByteArray((quint8)0x03)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertLEToByteArray((quint16)message.size())); extentionData.append(codec->fromUnicode(message)); messageSnac.append(extentionData); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); tcpSocket->write(packet); } void icqMessage::requestAutoreply(QTcpSocket *tcpSocket, const QString &uin,quint16 flapSeq, quint32 snacSeq) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(snacSeq); messageSnac.append(snac0406.getData()); quint32 msgcookie = QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); msgCookie.clear(); msgCookie.append(convertToByteArray((quint32)msgcookie)); msgcookie = qrand(); msgCookie.append(convertToByteArray((quint32)msgcookie)); messageSnac.append(msgCookie); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint8)uin.size())); messageSnac.append(uin); QByteArray extentionData; extentionData.append(convertToByteArray((quint16)0x1b00)); extentionData.append(convertToByteArray((quint16)0x0800)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint32)0x03000000)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(downCounter1); extentionData.append(convertToByteArray((quint16)0x0e00)); extentionData.append(downCounter2); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); if ( awayType != 0x1a ) { extentionData.append(convertToByteArray((quint8)awayType)); extentionData.append(convertToByteArray((quint8)0x03)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertLEToByteArray((quint16)1)); extentionData.append(convertToByteArray((quint8)0)); } else { extentionData.append(convertToByteArray((quint8)0x1a)); extentionData.append(convertToByteArray((quint8)0)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0001)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(QByteArray::fromHex("3a00811a18bc0e6c1847a5916f18dcc76f1a01001" "30000004177617920537461747573204d6573736167650100000000000000000000000000000" "00015000000000000000d000000746578742f782d616f6c727466")); } messageSnac.append(convertToByteArray((quint16)0x0005)); messageSnac.append(convertToByteArray((quint16)(40 + extentionData.length()))); messageSnac.append(convertToByteArray((quint16)0x0000)); messageSnac.append(msgCookie); messageSnac.append(QByteArray::fromHex("094613494c7f11d18222444553540000")); messageSnac.append(convertToByteArray((quint16)0x000a)); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint16)0x0001)); messageSnac.append(convertToByteArray((quint16)0x000f)); messageSnac.append(convertToByteArray((quint16)0x0000)); messageSnac.append(convertToByteArray((quint16)0x2711)); messageSnac.append(convertToByteArray((quint16)extentionData.length())); messageSnac.append(extentionData); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); tcpSocket->write(packet); } void icqMessage::getAwayMessage(icqBuffer *socket, quint16 length) { msgCookie = socket->read(8); length -= 8; quint16 channel = byteArrayToInt16(socket->read(2)); length -= 2; quint8 uinLength = byteArrayToInt8(socket->read(1)); length--; from = socket->read(uinLength); length -= uinLength; quint16 reason = byteArrayToInt16(socket->read(2)); length -= 2; if ( channel == 0x02) { socket->read(29); length -= 29; socket->read(16); length -= 16; msgType = byteArrayToInt8(socket->read(1)); length --; socket->read(5); length -= 5; quint16 messageLength = byteArrayToLEInt16(socket->read(2)); length -= 2; if ( messageLength ) { msg = codec->toUnicode(socket->read(messageLength - 1)); socket->read(1); } length -= messageLength; if ( msgType == 0x1a) { byteArrayMsg = socket->read(length); length -= length; if ( byteArrayMsg.contains(QByteArray::fromHex("4177617920537461747573204d657373616765"))) { byteArrayMsg = byteArrayMsg.right(byteArrayMsg.length() - 68); // QString _givenText = byteArrayMsg; // QRegExp regExp("[<][B][O][D][Y][>](.+)[<][/][B][O][D][Y][>]"); // int pos = 0; // regExp.indexIn(_givenText, pos); // QString rez = regExp.cap(0); // // qDebug()<toUnicode(byteArrayMsg); // qDebug()<toUnicode(byteArrayMsg); byteArrayMsg.clear(); byteArrayMsg.append(QByteArray::fromHex("4177617920537461747573204d657373616765")); byteArrayMsg.append(tmpMsg.toUtf8()); } } } if ( length ) socket->read(length); } void icqMessage::sendImage(QTcpSocket *tcpSocket, const QString &uin, const QByteArray &image_raw, quint16 flapSeq, quint32 snacSeq) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(snacSeq); messageSnac.append(snac0406.getData()); QByteArray rndzvCookie; quint32 msgcookie = QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); rndzvCookie.append(convertToByteArray(msgcookie)); msgcookie = qrand(); rndzvCookie.append(convertToByteArray(msgcookie)); messageSnac.append(rndzvCookie); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint8)uin.size())); messageSnac.append(uin); QByteArray rndzvData; tlv tlv0a; tlv0a.setType(0x000a); tlv0a.setData((quint16)1); rndzvData.append(tlv0a.getData()); rndzvData.append(convertToByteArray((quint16)0x000f)); rndzvData.append(convertToByteArray((quint16)0x0000)); rndzvData.append(convertToByteArray((quint16)0x2711)); QByteArray extentionData; extentionData.append(convertToByteArray((quint16)0x1b00)); extentionData.append(convertToByteArray((quint16)0x0900)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint32)0x03000000)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(downCounter1); extentionData.append(convertToByteArray((quint16)0x0e00)); extentionData.append(downCounter2); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint8)0x25)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0000)); if ( !image_raw.isEmpty() ) { extentionData.append(convertLEToByteArray((quint16)(image_raw.size()))); extentionData.append(image_raw); } else { extentionData.append(convertLEToByteArray((quint16)1)); extentionData.append(convertToByteArray((quint8)0)); } rndzvData.append(convertToByteArray((quint16)extentionData.length())); rndzvData.append(extentionData); messageSnac.append(convertToByteArray((quint16)0x0005)); messageSnac.append(convertToByteArray((quint16)(26 + rndzvData.length()))); messageSnac.append(convertToByteArray((quint16)0x0000)); messageSnac.append(rndzvCookie); messageSnac.append(QByteArray::fromHex("69716d7561746769656d000000000000")); messageSnac.append(rndzvData); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); tcpSocket->write(packet); } void icqMessage::sendXstatusReply(QTcpSocket *tcpSocket, const QString &uin, const QString &profile_name, quint16 flapSeq, quint32 snacSeq) { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+profile_name+"/ICQ."+uin, "accountsettings"); QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac040b; snac040b.setFamily(0x0004); snac040b.setSubType(0x000b); snac040b.setReqId(snacSeq); messageSnac.append(snac040b.getData()); messageSnac.append(msgCookie); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint8)from.size())); messageSnac.append(from); messageSnac.append(convertToByteArray((quint16)0x0003)); QByteArray extentionData; extentionData.append(convertToByteArray((quint16)0x1b00)); extentionData.append(convertToByteArray((quint16)0x0800)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint32)0x03000000)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(downCounter1); extentionData.append(convertToByteArray((quint16)0x0e00)); extentionData.append(downCounter2); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint8)0x1a)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertLEToByteArray((quint16)1)); extentionData.append(convertToByteArray((quint8)0)); QByteArray xstatusreply; xstatusreply.append(QByteArray::fromHex("53637269707420506c75672d696e3a2052656d6f7465204e6f74696669636174696f6e20417272697665000001000000000000000000000000f2010000ee010000" "3c4e523e3c5245533e266c743b726574206576656e743d274f6e52656d6f74654e6f74696669636174696f6e272667743b266c743b7372762667743b266c743b69642667743b634" "1776179537276266c743b2f69642667743b266c743b76616c207372765f69643d276341776179537276272667743b266c743b526f6f742667743b266c743b4341535874726153657" "4417761794d6573736167652667743b266c743b2f43415358747261536574417761794d6573736167652667743b266c743b75696e2667743b")); xstatusreply.append(uin); xstatusreply.append(QByteArray::fromHex("266c743b2f75696e2667743b266c743b696e6465782667743b")); xstatusreply.append(QString::number(settings.value("xstatus/index",0).toInt())); xstatusreply.append(QByteArray::fromHex("266c743b2f696e6465782667743b266c743b7469746c652667743b")); xstatusreply.append(settings.value("xstatus/caption","").toString().toUtf8()); xstatusreply.append(QByteArray::fromHex("266c743b2f7469746c652667743b266c743b646573632667743b")); xstatusreply.append(settings.value("xstatus/message","").toString().toUtf8()); xstatusreply.append(QByteArray::fromHex("266c743b2f646573632667743b266c743b2f526f6f742667743b0d0a266c743b2f76616c2667743b266c743b2f7372762667743b266c743b7372762667743b266c743b69642667743b635261" "6e646f6d697a6572537276266c743b2f69642667743b266c743b76616c207372765f69643d276352616e646f6d697a6572537276272667743b756e646566696e6564266c743b2f76616c2667743b266c743b2" "f7372762667743b266c743b2f7265742667743b3c2f5245533e3c2f4e523e0d0a")); extentionData.append(QByteArray::fromHex("4f003b60b3efd82a6c45a4 e09c5a5e67e86508002a000000")); extentionData.append(xstatusreply); messageSnac.append(extentionData); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); tcpSocket->write(packet); } void icqMessage::requestXStatus(QTcpSocket *tcpSocket, const QString &uin, const QString &mine_uin, quint16 flapSeq, quint32 snacSeq) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac0406; snac0406.setFamily(0x0004); snac0406.setSubType(0x0006); snac0406.setReqId(snacSeq); messageSnac.append(snac0406.getData()); quint32 msgcookie = QTime::currentTime().hour() * QTime::currentTime().minute() * QTime::currentTime().second() * QTime::currentTime().msec(); msgCookie.clear(); msgCookie.append(convertToByteArray((quint32)msgcookie)); msgcookie = qrand(); msgCookie.append(convertToByteArray((quint32)msgcookie)); messageSnac.append(msgCookie); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint8)uin.size())); messageSnac.append(uin); QByteArray extentionData; extentionData.append(convertToByteArray((quint16)0x1b00)); extentionData.append(convertToByteArray((quint16)0x0a00)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint32)0x03000000)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(downCounter1); extentionData.append(convertToByteArray((quint16)0x0e00)); extentionData.append(downCounter2); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint8)0x1a)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0100)); extentionData.append(convertLEToByteArray((quint16)1)); extentionData.append(convertToByteArray((quint8)0)); QByteArray xStatusString; // xStatusString.append(QByteArray::fromHex("4f003b60b3efd82a6c45a4 e09c5a5e67e86508002a000000")); // // xStatusString.append(QByteArray::fromHex("53637269707420506c75672d696e3a2052656d6f7465204e6f74696669636174696f6e2041727269766500000100000000000000000000000016010000120100003c4e3e3c51554552593e266c743b512667743b266c743b506c" // "7567696e49442667743b7372764d6e67266c743b2f506c7567696e49442667743b266c743b2f512667743b3c2f51554552593e3c4e4f544946593e266c743b7372762667743b266c743b69642667743b6341776179537276266c743" // "b2f69642667743b266c743b7265712667743b266c743b69642667743b4177617953746174266c743b2f69642667743b266c743b7472616e732667743b3135266c743b2f7472616e732667743b266c743b73656e646572")); xStatusString.append(QByteArray::fromHex("4f003b60b3efd82a6c45a4e09c5a5e67e86508002a0000005363" "7269707420506c75672d696e3a2052656d6f7465204e6f74696669636174696f6" "e2041727269766500000100000000000000000000000015010000110100003c4e" "3e3c51554552593e266c743b512667743b266c743b506c7567696e49442667743" "b7372764d6e67266c743b2f506c7567696e49442667743b266c743b2f51266774" "3b3c2f51554552593e3c4e4f544946593e266c743b7372762667743b266c743b6" "9642667743b6341776179537276266c743b2f69642667743b266c743b72657126" "67743b266c743b69642667743b4177617953746174266c743b2f69642667743b2" "66c743b7472616e732667743b39266c743b2f7472616e732667743b266c743b73" "656e64657249642667743b")); xStatusString.append(mine_uin); xStatusString.append(QByteArray::fromHex("266c743b2f73656e64657249642667743b266c743b2f72657126" "67743b266c743b2f7372762667743b3c2f4e4f544946593e3c2f4e3e0d0a")); // xStatusString.append(QByteArray::fromHex("266c743b2f73656e64657249642667743b266c743b2f7265712667743b266c743b2f7372762667743b3c2f4e4f544946593e3c2f4e3e0d0a")); extentionData.append(xStatusString); messageSnac.append(convertToByteArray((quint16)0x0005)); messageSnac.append(convertToByteArray((quint16)(40 + extentionData.length()))); messageSnac.append(convertToByteArray((quint16)0x0000)); messageSnac.append(msgCookie); messageSnac.append(QByteArray::fromHex("094613494c7f11d18222444553540000")); messageSnac.append(convertToByteArray((quint16)0x000a)); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint16)0x0001)); messageSnac.append(convertToByteArray((quint16)0x000f)); messageSnac.append(convertToByteArray((quint16)0x0000)); messageSnac.append(convertToByteArray((quint16)0x2711)); messageSnac.append(convertToByteArray((quint16)extentionData.length())); messageSnac.append(extentionData); messageSnac.append(convertToByteArray((quint16)0x0003)); messageSnac.append(convertToByteArray((quint16)0x0000)); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); tcpSocket->write(packet); } void icqMessage::sendMessageRecieved(QTcpSocket *socket,const QString &uin, const QByteArray &cookie, quint16 flapSeq, quint32 snacSeq) { QByteArray packet; packet[0] = 0x2a; packet[1] = 0x02; packet.append(convertToByteArray((quint16)flapSeq)); QByteArray messageSnac; snac snac040b; snac040b.setFamily(0x0004); snac040b.setSubType(0x000b); snac040b.setReqId(snacSeq); messageSnac.append(snac040b.getData()); messageSnac.append(cookie); messageSnac.append(convertToByteArray((quint16)0x0002)); messageSnac.append(convertToByteArray((quint8)uin.size())); messageSnac.append(uin); messageSnac.append(convertToByteArray((quint16)0x0003)); QByteArray extentionData; extentionData.append(convertToByteArray((quint16)0x1b00)); extentionData.append(convertToByteArray((quint16)0x0900)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint32)0x01000000)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(downCounter1); extentionData.append(convertToByteArray((quint16)0x0e00)); extentionData.append(downCounter2); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint8)0x01)); extentionData.append(convertToByteArray((quint8)0x00)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertToByteArray((quint16)0x0000)); extentionData.append(convertLEToByteArray((quint16)1)); extentionData.append(convertToByteArray((quint8)0)); extentionData.append(convertToByteArray((quint32)0x00000000)); extentionData.append(convertToByteArray((quint32)0xffffff00)); messageSnac.append(extentionData); packet.append(convertToByteArray((quint16)messageSnac.size())); packet.append(messageSnac); socket->write(packet); } bool icqMessage::isValidUtf8(const QByteArray &array) { int i = 0; unsigned int c; unsigned int n = 0, r = 0; unsigned char x; while (i < array.size()) { x = array[i]; c = x; i ++; for (n = 0; (c & 0x80) == 0x80; c <<= 1) n ++; if (r > 0) { if (n == 1) { r --; } else { return false; } } else if (n == 1) { return false; } else if (n != 0) { r = n - 1; } } if (r > 0) { return false; } return true; } qutim-0.2.0/plugins/icq/snac.cpp0000644000175000017500000000371211273054317020207 0ustar euroelessareuroelessar/* snac Copyright (c) 2008 by Rustam Chakin *************************************************************************** * * * 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 #include "buffer.h" #include "snac.h" snac::snac() { snacFlags = 0x0000; familyId = 0x0000; subTypeId = 0x0000; reqId = 0x00000000; } snac::~snac() { } QByteArray snac::getData() { QByteArray packet; packet.append(convertToByteArray(familyId)); packet.append(convertToByteArray(subTypeId)); packet.append(convertToByteArray(snacFlags)); packet.append(convertToByteArray(reqId)); return packet; } void snac::readData(icqBuffer *socket) { familyId = byteArrayToInt16(socket->read(2)); subTypeId = byteArrayToInt16(socket->read(2)); snacFlags = byteArrayToInt16(socket->read(2)); reqId = byteArrayToInt32(socket->read(4)); } QByteArray snac::convertToByteArray(const quint16 &d) { QByteArray packet; packet[0] = (d / 0x100); packet[1] = (d % 0x100); return packet; } QByteArray snac::convertToByteArray(const quint32 &d) { QByteArray packet; packet[0] = (d / 0x1000000); packet[1] = (d / 0x10000); packet[2] = (d / 0x100); packet[3] = (d % 0x100); return packet; } quint16 snac::byteArrayToInt16(const QByteArray &array) { bool ok; return array.toHex().toUInt(&ok,16); } quint32 snac::byteArrayToInt32(const QByteArray &array) { bool ok; return array.toHex().toULong(&ok,16); } bool snac::aloneSnac() { return snacFlags & 0x0001; } qutim-0.2.0/plugins/mrim/0000755000175000017500000000000011273101025016731 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/uisrc/0000755000175000017500000000000011273101025020056 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/uisrc/smswidget.cpp0000644000175000017500000000542111273054313022601 0ustar euroelessareuroelessar/***************************************************************************** SMSWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "smswidget.h" #include "ui_smswidget.h" #include "../coresrc/mrimcontact.h" #include "../coresrc/MRIMClient.h" #include "../coresrc/MRIMUtils.h" #include "../coresrc/MRIMPluginSystem.h" #include SMSWidget::SMSWidget(MRIMClient* aClient, QWidget *parent) : QWidget(parent), m_ui(new Ui::SMSWidget), m_parentClient(aClient) { m_ui->setupUi(this); QString codec("Latin1"); m_latinCodec = QTextCodec::codecForName(codec.toLocal8Bit()); m_ui->addNumberButton->setIcon(MRIMPluginSystem::PluginSystem()->getIcon("add")); m_addNumberWidget = new AddNumberWidget(aClient); connect(m_addNumberWidget,SIGNAL(numbersChanged()),this,SLOT(handleNumbersChanged())); } SMSWidget::~SMSWidget() { delete m_ui; disconnect(m_addNumberWidget,SIGNAL(numbersChanged()),this,SLOT(handleNumbersChanged())); } void SMSWidget::show(MRIMContact* aCnt) { m_cnt = aCnt; m_ui->smsTextEdit->clear(); m_ui->counterLabel->clear(); m_ui->recieverLabel->setText(m_cnt->Name()); handleNumbersChanged(); move(MRIMCommonUtils::DesktopCenter(size())); QWidget::show(); } void SMSWidget::on_smsTextEdit_textChanged() { QString text = m_ui->smsTextEdit->toPlainText(); bool latin = m_latinCodec->canEncode(text); int maxLen = (latin)? 144 : 44; if (text.length() > maxLen) { text.truncate(maxLen); m_ui->smsTextEdit->setPlainText(text); } m_ui->counterLabel->setText(QString("%1/%2").arg(text.length()).arg(maxLen)); } void SMSWidget::on_sendButton_clicked() { m_parentClient->Protocol()->SendSMS(m_ui->numbersComboBox->currentText(),m_ui->smsTextEdit->toPlainText()); hide(); } void SMSWidget::on_addNumberButton_clicked() { m_addNumberWidget->show(m_cnt); } void SMSWidget::handleNumbersChanged() { m_ui->numbersComboBox->clear(); m_ui->numbersComboBox->addItems(m_cnt->Phone()); } qutim-0.2.0/plugins/mrim/uisrc/contactdetails.ui0000644000175000017500000001725411273054313023436 0ustar euroelessareuroelessar ContactDetailsClass 0 0 442 269 Contact details 4 300 0 Personal data Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 4 E-Mail: Nickname: Surname: Sex: Age: Birthday: Zodiac sign: Living place: <email> <nickname> Name: <name> <surname> <sex> <age> <birthday> <zodiac> <living place> QLayout::SetDefaultConstraint 128 128 128 128 Avatar 4 64 64 128 128 true No avatar Qt::AlignCenter Qt::Vertical 0 40 Add contact false 128 16777215 Update 128 16777215 Close pushButton clicked() ContactDetailsClass hide() 403 252 451 -7 qutim-0.2.0/plugins/mrim/uisrc/addnumberwidget.cpp0000644000175000017500000000504411273054313023741 0ustar euroelessareuroelessar/***************************************************************************** AddNumberWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "addnumberwidget.h" #include "ui_addnumberwidget.h" #include "../coresrc/MRIMUtils.h" #include "../coresrc/mrimcontact.h" #include "../coresrc/MRIMClient.h" #include AddNumberWidget::AddNumberWidget(MRIMClient* aClient, QWidget *parent) : QWidget(parent), m_ui(new Ui::AddNumberWidget), m_client(aClient) { m_ui->setupUi(this); QRegExp rx("[\\+0-9]+"); QRegExpValidator* valid = new QRegExpValidator(rx,this); m_ui->homeEdit->setValidator(valid); m_ui->workEdit->setValidator(valid); m_ui->mobileEdit->setValidator(valid); } AddNumberWidget::~AddNumberWidget() { delete m_ui; } void AddNumberWidget::show(MRIMContact* aCnt) { m_cnt = aCnt; QStringList numbers = m_cnt->Phone(); if (numbers.count() > 0) { m_ui->homeEdit->setText(numbers[0]); } if (numbers.count() > 1) { m_ui->workEdit->setText(numbers[1]); } if (numbers.count() > 2) { m_ui->mobileEdit->setText(numbers[2]); } move(MRIMCommonUtils::DesktopCenter(size())); QWidget::show(); } void AddNumberWidget::on_saveButton_clicked() { QStringList numbers; if (m_ui->homeEdit->text().length() > 0) { numbers.append(m_ui->homeEdit->text()); } if (m_ui->workEdit->text().length() > 0) { numbers.append(m_ui->workEdit->text()); } if (m_ui->mobileEdit->text().length() > 0) { numbers.append(m_ui->mobileEdit->text()); } m_cnt->SetPhone(numbers); m_client->Protocol()->SendModifyContact(m_cnt->Email(),"",0,0,MRIMProto::EKeepOldValues); emit numbersChanged(); hide(); } qutim-0.2.0/plugins/mrim/uisrc/addnumberwidget.ui0000644000175000017500000000473511273054313023602 0ustar euroelessareuroelessar AddNumberWidget Qt::WindowModal 0 0 307 129 500 150 Phone numbers 4 Home: Work: Mobile: Qt::Horizontal 40 20 Save Qt::Vertical 20 40 qutim-0.2.0/plugins/mrim/uisrc/movetogroupwidget.h0000644000175000017500000000301211273054313024024 0ustar euroelessareuroelessar/***************************************************************************** MoveToGroupWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MOVETOGROUPWIDGET_H #define MOVETOGROUPWIDGET_H #include #include "../coresrc/mrimgroup.h" namespace Ui { class MoveToGroupWidget; } class MoveToGroupWidget : public QWidget { Q_OBJECT Q_DISABLE_COPY(MoveToGroupWidget) public: explicit MoveToGroupWidget(QWidget *parent = 0); virtual ~MoveToGroupWidget(); void show(QString aEmail, QList aGrList, QString aNick = QString()); private slots: void EmitMoveToGroup(); signals: void MoveContactToGroup(QString aEmail, QString aGrId); private: Ui::MoveToGroupWidget *m_ui; QString m_email; }; #endif // MOVETOGROUPWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/mrimsearchwidget.ui0000644000175000017500000003370311273054313023770 0ustar euroelessareuroelessar MRIMSearchWidgetClass 0 0 400 562 400 480 16777215 650 Search contacts 4 0 0 150 250 Search form QFormLayout::AllNonFixedFieldsGrow 4 Nickname: Name: Surname: Sex: 200 50 Country: 16777215 16777215 Region: 16777215 16777215 Birthday: 50 16777215 Day: 100 0 100 16777215 Any 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 80 16777215 Month: 100 0 100 16777215 Zodiac: Age from: 100 0 150 16777215 to 100 0 150 16777215 Search only online contacts Show avatars 0 0 0 50 E-Mail 4 Note: search is available only for following domains: @mail.ru, @list.ru, @bk.ru, @inbox.ru Qt::Vertical 20 40 Qt::Horizontal 40 20 100 0 150 16777215 Qt::LeftToRight Start search! qutim-0.2.0/plugins/mrim/uisrc/movetogroupwidget.ui0000644000175000017500000000433111273054313024217 0ustar euroelessareuroelessar MoveToGroupWidget 0 0 251 80 400 80 Move contact to group 4 Qt::Horizontal 40 20 100 16777215 Qt::LeftToRight false Move! Group: Qt::Vertical 20 40 qutim-0.2.0/plugins/mrim/uisrc/settingswidget.h0000644000175000017500000000415711273054313023311 0ustar euroelessareuroelessar/***************************************************************************** SettingsWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 SETTINGSWIDGET_H #define SETTINGSWIDGET_H #include #include "ui_settingswidget.h" #include class SettingsWidget : public QWidget { Q_OBJECT public: SettingsWidget(QString aProfileName, QString aAccountName = QString(), QWidget *parent = 0); ~SettingsWidget(); inline QString GetHostText() { return ui.hostEdit->text(); } inline quint32 GetPortText() { return ui.portEdit->text().toULong(); } inline bool IsProxyEnabled() { return (ui.proxyCheckBox->checkState() == Qt::Checked)?true:false; } QNetworkProxy::ProxyType GetSelectedProxyType(); inline QString GetProxyHostText() { return ui.proxyHostEdit->text(); } inline quint32 GetProxyPortText() { return ui.proxyPortEdit->text().toULong(); } inline QString GetProxyUsernameText() { return ui.proxyUsernameEdit->text(); } inline QString GetProxyPasswordText() { return ui.proxyPassEdit->text(); } void SaveSettings(); void LoadSettings(); private: void UpdateControlsAvailablility(); private: Ui::SettingsWidgetClass ui; bool m_changed; QString m_account; QString m_profile; private slots: void on_groupBox_2_toggled(bool); void widgetStateChanged(); signals: void settingsChanged(); void settingsSaved(); }; #endif // SETTINGSWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/loginform.h0000644000175000017500000000262511273054313022237 0ustar euroelessareuroelessar/***************************************************************************** LoginForm Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 LOGINFORM_H #define LOGINFORM_H #include #include "ui_loginform.h" class MRIMClient; class LoginForm : public QWidget { Q_OBJECT public: LoginForm(MRIMClient *aClient, QWidget *parent = 0); LoginForm(QString aProfile, QWidget *parent = 0); ~LoginForm(); QString GetEmail() const {return ui.emailEdit->text();} QString GetPass() const {return ui.passEdit->text();} void SaveSettings(); void LoadSettings(); private: Ui::LoginFormClass ui; MRIMClient* m_client; QString m_profileName; }; #endif qutim-0.2.0/plugins/mrim/uisrc/mrimsearchwidget.h0000644000175000017500000000333411273054313023577 0ustar euroelessareuroelessar/***************************************************************************** MRIMSearchWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMSEARCHWIDGET_H #define MRIMSEARCHWIDGET_H #include #include "ui_mrimsearchwidget.h" #include "../coresrc/mrimdefs.h" class RegionListParser; struct LiveRegion; class MRIMClient; class MRIMSearchWidget : public QWidget { Q_OBJECT public: MRIMSearchWidget(MRIMClient* aClient, QWidget *parent = 0); ~MRIMSearchWidget(); bool ShowAvatars(); public slots: void SearchFinished(quint32 aFoundCnts); signals: void StartSearch(MRIMSearchParams aParams); private: Ui::MRIMSearchWidgetClass ui; RegionListParser* m_listParser; const QList* m_regionsList; MRIMClient* m_client; private slots: void on_pushButton_clicked(); void on_countryComboBox_currentIndexChanged(int); void on_emailEdit_textChanged(QString); void on_groupBox_toggled(bool); }; #endif // MRIMSEARCHWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/addcontactwidget.ui0000644000175000017500000000374211273054313023742 0ustar euroelessareuroelessar AddContactWidgetClass Qt::ApplicationModal 0 0 300 142 Add contact to list 4 Add to group: Contact email: Contact nickname: Add Qt::Vertical 20 40 qutim-0.2.0/plugins/mrim/uisrc/renamewidget.ui0000644000175000017500000000436611273054313023110 0ustar euroelessareuroelessar RenameWidget Qt::WindowModal 0 0 257 71 400 100 Rename contact 4 0 0 New name: Qt::Vertical 20 40 Qt::Horizontal 40 20 50 0 OK qutim-0.2.0/plugins/mrim/uisrc/mrimsearchwidget.cpp0000644000175000017500000001551011273054313024131 0ustar euroelessareuroelessar/***************************************************************************** MRIMSearchWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "mrimsearchwidget.h" #include "../coresrc/RegionListParser.h" #include "../coresrc/MRIMUtils.h" #include "../coresrc/MRIMClient.h" MRIMSearchWidget::MRIMSearchWidget(MRIMClient* aClient, QWidget *parent) : QWidget(parent), m_client(aClient) { ui.setupUi(this); move(MRIMCommonUtils::DesktopCenter(size())); QRegExp rxMail("([a-zA-Z0-9\\-\\_\\.]+@([a-zA-Z0-9\\-\\_]+\\.)+[a-zA-Z]+)"); QValidator *validatorMail = new QRegExpValidator(rxMail, this); ui.emailEdit->setValidator(validatorMail); m_listParser = new RegionListParser(":/Resources/region.txt"); m_regionsList = m_listParser->GetRegionsList(); ui.countryComboBox->addItem(tr("Any"),-1); if (m_regionsList != NULL) { foreach (LiveRegion reg,*m_regionsList) { int existIndex = ui.countryComboBox->findData(reg.countryId); if (reg.cityId == 0 && existIndex == -1) { ui.countryComboBox->addItem(reg.name,reg.countryId); } } on_countryComboBox_currentIndexChanged(0); } ui.zodiacComboBox->addItem(tr("Any"),-1); ui.zodiacComboBox->addItem(tr("The Ram"),1); ui.zodiacComboBox->addItem(tr("The Bull"),2); ui.zodiacComboBox->addItem(tr("The Twins"),3); ui.zodiacComboBox->addItem(tr("The Crab"),4); ui.zodiacComboBox->addItem(tr("The Lion"),5); ui.zodiacComboBox->addItem(tr("The Virgin"),6); ui.zodiacComboBox->addItem(tr("The Balance"),7); ui.zodiacComboBox->addItem(tr("The Scorpion"),8); ui.zodiacComboBox->addItem(tr("The Archer"),9); ui.zodiacComboBox->addItem(tr("The Capricorn"),10); ui.zodiacComboBox->addItem(tr("The Water-bearer"),11); ui.zodiacComboBox->addItem(tr("The Fish"),12); ui.sexComboBox->addItem(tr("Any"),-1); ui.sexComboBox->addItem(tr("Male"),1); ui.sexComboBox->addItem(tr("Female"),2); ui.birthMonthComboBox->addItem(tr("Any"),-1); ui.birthMonthComboBox->addItem(tr("January"),1); ui.birthMonthComboBox->addItem(tr("February"),2); ui.birthMonthComboBox->addItem(tr("March"),3); ui.birthMonthComboBox->addItem(tr("April"),4); ui.birthMonthComboBox->addItem(tr("May"),5); ui.birthMonthComboBox->addItem(tr("June"),6); ui.birthMonthComboBox->addItem(tr("July"),7); ui.birthMonthComboBox->addItem(tr("August"),8); ui.birthMonthComboBox->addItem(tr("September"),9); ui.birthMonthComboBox->addItem(tr("October"),10); ui.birthMonthComboBox->addItem(tr("November"),11); ui.birthMonthComboBox->addItem(tr("December"),12); } MRIMSearchWidget::~MRIMSearchWidget() { } void MRIMSearchWidget::on_groupBox_toggled(bool) { } void MRIMSearchWidget::on_emailEdit_textChanged(QString) { if (ui.emailEdit->text().length() > 0) { ui.searchGroupBox->setEnabled(false); } else { ui.searchGroupBox->setEnabled(true); } } void MRIMSearchWidget::on_countryComboBox_currentIndexChanged(int aNewIndex) { ui.regionComboBox->clear(); bool isOk; quint32 currCountryId = ui.countryComboBox->itemData(aNewIndex).toUInt(&isOk); if (isOk) { if (m_regionsList != NULL) { qint32 addedCount = 0; foreach (LiveRegion reg,*m_regionsList) { qint32 existIndex = ui.regionComboBox->findData(reg.cityId); if (reg.countryId == currCountryId && reg.cityId != 0 && existIndex == -1) { ui.regionComboBox->addItem(reg.name,reg.cityId); addedCount++; } } if (addedCount == 0) { ui.regionComboBox->addItem(tr("Any"),-1); } } } } void MRIMSearchWidget::on_pushButton_clicked() { MRIMSearchParams searchParams; QStringList email = ui.emailEdit->text().split("@"); if (email.count() > 1) { searchParams.EmailAddr = email[0]; searchParams.EmailDomain = email[1]; searchParams.Nick = ""; searchParams.Name = ""; searchParams.Surname = ""; searchParams.Sex = -1; searchParams.MinAge = -1; searchParams.MaxAge = -1; searchParams.ZodiacId = -1; searchParams.CountryId = -1; searchParams.CityId = -1; searchParams.BirthDay = -1; searchParams.BirthdayMonth = -1; searchParams.OnlineOnly = false; } else { searchParams.EmailAddr = ""; searchParams.EmailDomain = ""; searchParams.Nick = ui.nickEdit->text(); searchParams.Name = ui.nameEdit->text(); searchParams.Surname = ui.surnameEdit->text(); searchParams.Sex = ui.sexComboBox->itemData(ui.sexComboBox->currentIndex()).toInt(); bool ok = false; if (ui.ageFromEdit->text().length() > 0) { searchParams.MinAge = ui.ageFromEdit->text().toInt(&ok); } if (!ok) { searchParams.MinAge = -1; } ok = false; if (ui.ageToEdit->text().length() > 0) { searchParams.MaxAge = ui.ageToEdit->text().toInt(&ok); } if (!ok) { searchParams.MaxAge = -1; } ok = false; searchParams.ZodiacId = ui.zodiacComboBox->itemData(ui.zodiacComboBox->currentIndex()).toInt(&ok); if (!ok) { searchParams.ZodiacId = -1; } ok = false; searchParams.CountryId = ui.countryComboBox->itemData(ui.countryComboBox->currentIndex()).toInt(&ok); if (!ok) { searchParams.CountryId = -1; } ok = false; searchParams.CityId = ui.regionComboBox->itemData(ui.regionComboBox->currentIndex()).toInt(&ok); if (!ok) { searchParams.CityId = -1; } ok = false; searchParams.BirthDay = ui.birthDayComboBox->itemText(ui.birthDayComboBox->currentIndex()).toInt(&ok); if (!ok) { searchParams.BirthDay = -1; } ok = false; searchParams.BirthdayMonth = ui.birthMonthComboBox->itemData(ui.birthMonthComboBox->currentIndex()).toInt(&ok); if (!ok) { searchParams.BirthdayMonth = -1; } searchParams.OnlineOnly = (ui.onlyOnlineCheckBox->checkState() == Qt::Checked); } m_client->Protocol()->StartSearch(searchParams); setEnabled(false); } void MRIMSearchWidget::SearchFinished(quint32 aFoundCnts) { setEnabled(true); if (aFoundCnts > 0) { hide(); } } bool MRIMSearchWidget::ShowAvatars() { return ui.showAvatarsCheckBox->checkState() == Qt::Checked; } qutim-0.2.0/plugins/mrim/uisrc/smswidget.h0000644000175000017500000000312311273054313022243 0ustar euroelessareuroelessar/***************************************************************************** SMSWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 SMSWIDGET_H #define SMSWIDGET_H #include "addnumberwidget.h" #include class MRIMContact; class MRIMClient; class QTextCodec; namespace Ui { class SMSWidget; } class SMSWidget : public QWidget { Q_OBJECT public: explicit SMSWidget(MRIMClient* aClient, QWidget *parent = 0); void show(MRIMContact* aCnt); virtual ~SMSWidget(); private: Ui::SMSWidget *m_ui; MRIMClient* m_parentClient; MRIMContact* m_cnt; QTextCodec* m_latinCodec; AddNumberWidget* m_addNumberWidget; private slots: void handleNumbersChanged(); void on_addNumberButton_clicked(); void on_sendButton_clicked(); void on_smsTextEdit_textChanged(); }; #endif // SMSWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/authwidget.ui0000644000175000017500000000254411273054313022576 0ustar euroelessareuroelessar authwidgetClass 0 0 363 179 Authorization request 4 Authorize Qt::Horizontal 40 20 Reject qutim-0.2.0/plugins/mrim/uisrc/smswidget.ui0000644000175000017500000000533011273054313022433 0ustar euroelessareuroelessar SMSWidget 0 0 422 192 Send SMS 4 75 true Reciever: TextLabel Qt::Horizontal 40 20 150 0 TextLabel Qt::Horizontal 40 20 Send! qutim-0.2.0/plugins/mrim/uisrc/mrimloginwidget.h0000644000175000017500000000231011273054313023433 0ustar euroelessareuroelessar/***************************************************************************** MRIMLoginWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMLOGINWIDGET_H #define MRIMLOGINWIDGET_H #include #include "ui_mrimloginwidget.h" class MRIMLoginWidget : public QWidget { Q_OBJECT public: MRIMLoginWidget(QWidget *parent = 0); ~MRIMLoginWidget(); QString GetLoginText(); QString GetPassText(); private: Ui::MRIMLoginWidgetClass ui; }; #endif // MRIMLOGINWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/editaccount.h0000644000175000017500000000144511273054313022544 0ustar euroelessareuroelessar#ifndef EDITACCOUNT_H #define EDITACCOUNT_H #include #include namespace Ui { class EditAccount; } class MRIMClient; class LoginForm; class SettingsWidget; class EditAccount : public QWidget { Q_OBJECT Q_DISABLE_COPY(EditAccount) public: explicit EditAccount(MRIMClient* aClient, QWidget *parent = 0); virtual ~EditAccount(); protected: virtual void changeEvent(QEvent *e); void SaveSettings(); private: Ui::EditAccount *m_ui; MRIMClient* m_client; LoginForm* m_loginWidget; SettingsWidget* m_settingsWidget; private slots: void on_buttonBox_clicked(QAbstractButton* button); void on_useProfileCheckBox_clicked(); void on_buttonBox_rejected(); void on_buttonBox_accepted(); }; #endif // EDITACCOUNT_H qutim-0.2.0/plugins/mrim/uisrc/movetogroupwidget.cpp0000644000175000017500000000376611273054313024377 0ustar euroelessareuroelessar/***************************************************************************** MoveToGroupWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "movetogroupwidget.h" #include "ui_movetogroupwidget.h" #include #include "../coresrc/MRIMUtils.h" MoveToGroupWidget::MoveToGroupWidget(QWidget *parent) : QWidget(parent), m_ui(new Ui::MoveToGroupWidget) { m_ui->setupUi(this); connect(m_ui->pushButton,SIGNAL(clicked()),this,SLOT(EmitMoveToGroup())); } MoveToGroupWidget::~MoveToGroupWidget() { delete m_ui; } void MoveToGroupWidget::show(QString aEmail, QList aGrList, QString aNick) { move(MRIMCommonUtils::DesktopCenter(size())); m_email = aEmail; QString titleName = (aNick.length() > 0) ? aNick : aEmail; setWindowTitle(tr("Move")+" "+Qt::escape(titleName)); m_ui->groupComboBox->clear(); for (qint32 i=0; i < aGrList.count(); i++) { quint32 grId = aGrList.at(i)->Id().toUInt(); QVariant val(grId); m_ui->groupComboBox->addItem(aGrList.at(i)->Name(),val); } QWidget::show(); } void MoveToGroupWidget::EmitMoveToGroup() { hide(); emit MoveContactToGroup(m_email,m_ui->groupComboBox->itemData(m_ui->groupComboBox->currentIndex()).toString()); } qutim-0.2.0/plugins/mrim/uisrc/renamewidget.h0000644000175000017500000000250211273054313022710 0ustar euroelessareuroelessar/***************************************************************************** RenameWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 RENAMEWIDGET_H #define RENAMEWIDGET_H #include class MRIMContact; class MRIMClient; namespace Ui { class RenameWidget; } class RenameWidget : public QWidget { Q_OBJECT Q_DISABLE_COPY(RenameWidget) public: explicit RenameWidget(QWidget *parent = 0); virtual ~RenameWidget(); void show(MRIMContact* aCnt); private: Ui::RenameWidget *m_ui; MRIMContact* m_cnt; private slots: void on_okButton_clicked(); }; #endif // RENAMEWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/filetransferwidget.ui0000644000175000017500000002441111273054313024316 0ustar euroelessareuroelessar FileTransferWidget 0 0 436 253 Form 4 16777215 15 Filename: 0 22 16777215 22 QFrame::StyledPanel Qt::PlainText false Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false -1 Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse 0 0 Done: 50 22 16777215 22 QFrame::StyledPanel 0 0 Speed: 100 22 16777215 22 QFrame::StyledPanel QFormLayout::ExpandingFieldsGrow 0 0 File size: 0 0 50 22 16777215 22 QFrame::StyledPanel Last time: 0 22 16777215 22 QFrame::StyledPanel 3 Remained time: 0 22 16777215 22 QFrame::StyledPanel Qt::Vertical 20 39 16777215 15 Status: 0 22 16777215 22 QFrame::StyledPanel Qt::AlignCenter 0 22 16777215 22 0 false 3 Close window after tranfer is finished Qt::Horizontal 241 27 Open :/icons/core/folder.png:/icons/core/folder.png 0 25 16777215 16777215 Cancel :/icons/core/cancel.png:/icons/core/cancel.png qutim-0.2.0/plugins/mrim/uisrc/addcontactwidget.cpp0000644000175000017500000000636211273054313024110 0ustar euroelessareuroelessar/***************************************************************************** AddContactWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "addcontactwidget.h" #include "../coresrc/MRIMUtils.h" #include "../coresrc/MRIMClient.h" #include #include AddContactWidget::AddContactWidget(MRIMClient* aClient, QWidget *parent) : QDialog(parent), m_client(aClient) { ui.setupUi(this); move(MRIMCommonUtils::DesktopCenter(size())); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); } AddContactWidget::~AddContactWidget() { } void AddContactWidget::on_pushButton_clicked() { } void AddContactWidget::FillGroups() { QList grList = m_client->Protocol()->GetAllGroups(); for (qint32 i=0; i < grList.count(); i++) { quint32 grId = grList.at(i)->Id().toUInt(); QVariant val(grId); ui.groupComboBox->addItem(grList.at(i)->Name(),val); } } void AddContactWidget::on_addContactButton_clicked() { QRegExp rx("^[\\w\\d][\\w\\d\\-.]*@[\\w\\d]{2}[\\w\\d\\-]*.[\\w\\d]{2}(\\.?[\\w\\d\\-]+)*$"); int pos; QRegExpValidator emailValidator(rx,0); QString email(ui.emailEdit->text()); if (emailValidator.validate(email,pos) == QValidator::Acceptable) { m_selctedGrId = ui.groupComboBox->itemData(ui.groupComboBox->currentIndex()).toUInt(); m_contactEmail = ui.emailEdit->text(); m_client->Protocol()->AddContact(GetContactEmail(),GetNickname(),GetSelectedGroupId()); close(); } else { QMessageBox::critical(this,tr("Incorrect email"),tr("Email you entered is not valid or empty!"),QMessageBox::Ok,QMessageBox::Ok); } } quint32 AddContactWidget::GetSelectedGroupId() { return m_selctedGrId; } QString AddContactWidget::GetContactEmail() { return m_contactEmail; } void AddContactWidget::SetEmail(QString aEmail, bool aReadOnly) { QRegExp rx("^[\\w\\d][\\w\\d\\-.]*@[\\w\\d]{2}[\\w\\d\\-]*.[\\w\\d]{2}(\\.?[\\w\\d\\-]+)*$"); int pos; QRegExpValidator emailValidator(rx,0); if (emailValidator.validate(aEmail,pos) == QValidator::Acceptable) { ui.emailEdit->clear(); ui.emailEdit->insert(aEmail); ui.emailEdit->setReadOnly(aReadOnly); } else { ui.emailEdit->clear(); ui.emailEdit->setReadOnly(false); } } void AddContactWidget::SetNick(QString aNick, bool aReadOnly) { ui.nickEdit->clear(); ui.nickEdit->insert(aNick); ui.nickEdit->setReadOnly(aReadOnly); } qutim-0.2.0/plugins/mrim/uisrc/filetransferrequest.cpp0000644000175000017500000000632111273054313024670 0ustar euroelessareuroelessar/***************************************************************************** FileTransferRequest Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "filetransferrequest.h" #include #include #include "../coresrc/MRIMPluginSystem.h" #include "../coresrc/MRIMUtils.h" #include "ui_filetransferrequest.h" #include "filetransferwidget.h" FileTransferRequestWidget::FileTransferRequestWidget(MRIMClient* aClient, const FileTransferRequest& aReq, QWidget *parent) : QWidget(parent), m_ui(new Ui::FileTransferRequestWidget), m_client(aClient), m_req(aReq) { m_ui->setupUi(this); move(MRIMCommonUtils::DesktopCenter(size())); setWindowTitle(tr("File transfer request from %1").arg(m_req.From)); m_ui->fileLabel->setPixmap(MRIMPluginSystem::ImplPointer()->PluginSystem()->getIcon("filerequest").pixmap(128, 128)); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); setWindowIcon(MRIMPluginSystem::ImplPointer()->PluginSystem()->getIcon("save_all")); m_ui->fromLabel->setText(m_req.From); m_ui->filesTreeWidget->setColumnWidth(0,100); m_ui->filesTreeWidget->setColumnWidth(1,40); qint64 totalSize = 0; for (qint32 i = 0; ifilesTreeWidget); fileTreeItem->setText(0,m_req.FilesDict.keys().at(i)); qint64 fileSize = m_req.FilesDict.values().at(i); fileTreeItem->setText(1,MRIMCommonUtils::GetFileSize(fileSize)); totalSize += fileSize; } m_ui->fileSizeLabel->setText(MRIMCommonUtils::GetFileSize(totalSize)); } FileTransferRequestWidget::~FileTransferRequestWidget() { delete m_ui; } void FileTransferRequestWidget::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } void FileTransferRequestWidget::on_acceptButton_clicked() { QString location = QFileDialog::getExistingDirectory(this,tr("Choose location to save file(s)"),QDesktopServices::storageLocation(QDesktopServices::HomeLocation),QFileDialog::ShowDirsOnly); if ( !location.isEmpty() ) { qDebug()<<"Will recieve files to: "<show(); close(); } } void FileTransferRequestWidget::on_declineButton_clicked() { m_client->Protocol()->DeclineFileTransfer(m_req.UniqueId); close(); } qutim-0.2.0/plugins/mrim/uisrc/mrimloginwidget.ui0000644000175000017500000000276011273054313023632 0ustar euroelessareuroelessar MRIMLoginWidgetClass 0 0 352 104 MRIMLoginWidget 4 Email: Password: QLineEdit::Password Qt::Vertical 20 40 qutim-0.2.0/plugins/mrim/uisrc/filetransferrequest.ui0000644000175000017500000001702011273054313024521 0ustar euroelessareuroelessar FileTransferRequestWidget 0 0 464 257 Form 4 Qt::Vertical 20 97 -1 QLayout::SetDefaultConstraint 0 25 15 70 15 From: 0 22 16777215 22 QFrame::StyledPanel 0 15 16777215 15 File(s): false true 2 50 File name Size 10 0 15 70 15 Total size: 0 22 16777215 22 QFrame::StyledPanel Qt::Vertical 20 40 128 128 128 128 QFrame::NoFrame :/icons/core/filerequest.png Qt::AlignCenter Qt::Horizontal 220 22 0 25 16777215 16777215 Accept :/icons/core/apply.png:/icons/core/apply.png 0 25 16777215 16777215 Decline :/icons/core/cancel.png:/icons/core/cancel.png Qt::Vertical 125 11 qutim-0.2.0/plugins/mrim/uisrc/contactdetails.cpp0000644000175000017500000000705511273054313023601 0ustar euroelessareuroelessar/***************************************************************************** ContactDetails Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "contactdetails.h" #include "../coresrc/MRIMUtils.h" #include "../coresrc/avatarfetcher.h" #include "addcontactwidget.h" #include ContactDetails::ContactDetails(MRIMClient* aClient, QWidget *parent) : QWidget(parent), m_client(aClient) { ui.setupUi(this); connect(AvatarFetcher::Instance(),SIGNAL(BigAvatarFetched(QString)),this,SLOT(SetAvatarLabelText(QString))); } ContactDetails::~ContactDetails() { } void ContactDetails::SetInfo(MRIMSearchParams aInfo) { ui.nameLabel->setText(aInfo.Name); ui.surnameLabel->setText(aInfo.Surname); ui.nickLabel->setText(aInfo.Nick); m_email = aInfo.EmailAddr+"@"+aInfo.EmailDomain; ui.emailLabel->setText("
"+m_email+""); QDate currDate = QDate::currentDate(); QDate contactBDay = QDate(aInfo.BirthYear,aInfo.BirthdayMonth,aInfo.BirthDay); int age = contactBDay.daysTo(currDate) / 365; ui.ageLabel->setText(QString::number(age)); ui.birthdayLabel->setText(contactBDay.toString()); ui.placeLabel->setText(aInfo.LocationText); QString sex = "-"; if (aInfo.Sex == 1) { sex=tr("M"); } if (aInfo.Sex == 2) { sex=tr("F"); } ui.sexLabel->setText(sex); bool hasAvatar = QFile::exists(AvatarFetcher::BigAvatarPath(m_email)); if (!hasAvatar) { AvatarFetcher::Instance()->FetchBigAvatar(m_email); } else { SetAvatarLabelText(m_email); } } void ContactDetails::ResetInfo() { ui.nameLabel->clear(); ui.surnameLabel->clear(); ui.nickLabel->clear(); ui.emailLabel->clear(); ui.ageLabel->clear(); ui.birthdayLabel->clear(); ui.placeLabel->clear(); ui.zodiacLabel->clear(); } void ContactDetails::show(const MRIMSearchParams& aInfo) { ResetInfo(); SetInfo(aInfo); move(MRIMCommonUtils::DesktopCenter(size())); ui.addToCLButton->setVisible(!m_client->Protocol()->IsInList(m_email)); QWidget::show(); } void ContactDetails::SetAvatarLabelText(QString aEmail) { if (m_email != aEmail) return; bool hasAvatar = QFile::exists(AvatarFetcher::BigAvatarPath(aEmail)); QString text = (hasAvatar) ? "" : tr("No avatar"); ui.avatarLabel->setText(text); } void ContactDetails::on_addToCLButton_clicked() { AddContactWidget *addCntWidget = new AddContactWidget(m_client,this); connect(addCntWidget,SIGNAL(accepted()),ui.addToCLButton,SLOT(hide())); addCntWidget->FillGroups(); addCntWidget->SetEmail(m_email,true); addCntWidget->SetNick(ui.nickLabel->text()); addCntWidget->show(); } qutim-0.2.0/plugins/mrim/uisrc/searchresultswidget.h0000644000175000017500000000371111273054313024333 0ustar euroelessareuroelessar/***************************************************************************** SearchResultsWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 SEARCHRESULTSWIDGET_H #define SEARCHRESULTSWIDGET_H #include #include "ui_searchresultswidget.h" #include "../coresrc/mrimdefs.h" class MRIMClient; class ContactWidgetItem : public QObject, public QTreeWidgetItem { Q_OBJECT public: ContactWidgetItem(QString aEmail, bool aShowAvatar, QTreeWidget* aParent); ~ContactWidgetItem(); private slots: void HandleSmallAvatarFetched(QString aEmail); void SetAvatar(); private: QString m_email; }; class SearchResultsWidget : public QWidget { Q_OBJECT public: SearchResultsWidget(MRIMClient* aClient,QWidget *parent = 0); ~SearchResultsWidget(); void show(QList aFoundList, bool aShowAvatars); public slots: void Reset(); void AddContacts(QList aFoundContacts, bool aShowAvatars); private: Ui::SearchResultsWidgetClass ui; MRIMClient* m_client; private slots: void on_contactsTreeWidget_itemClicked(QTreeWidgetItem* item, int column); void on_addCntButton_clicked(); }; #endif // SEARCHRESULTSWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/loginform.cpp0000644000175000017500000000446111273054313022572 0ustar euroelessareuroelessar/***************************************************************************** LoginForm Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "loginform.h" #include "../coresrc/MRIMClient.h" LoginForm::LoginForm(MRIMClient *aClient, QWidget *parent) : QWidget(parent), m_client(aClient) { ui.setupUi(this); m_profileName = aClient->ProfileName(); } LoginForm::LoginForm(QString aProfile, QWidget *parent) : QWidget(parent), m_client(0), m_profileName(aProfile) { ui.setupUi(this); } LoginForm::~LoginForm() { } void LoginForm::SaveSettings() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName, "mrimsettings"); QStringList accounts = settings.value("accounts/list").toStringList(); QString email = GetEmail(), pass = GetPass(); if( !accounts.contains(email) ) { accounts<AccountName(), "accountsettings"); ui.emailEdit->setText(account_settings.value("main/login").toString()); ui.emailEdit->setReadOnly(true); ui.passEdit->setText(account_settings.value("main/password").toString()); } qutim-0.2.0/plugins/mrim/uisrc/editaccount.cpp0000644000175000017500000000545411273054313023103 0ustar euroelessareuroelessar#include "editaccount.h" #include "ui_editaccount.h" #include "loginform.h" #include "settingswidget.h" #include "../coresrc/MRIMClient.h" #include "../coresrc/MRIMUtils.h" EditAccount::EditAccount(MRIMClient* aClient, QWidget *parent) : QWidget(parent), m_ui(new Ui::EditAccount), m_client(aClient) { m_loginWidget = new LoginForm(m_client); m_settingsWidget = new SettingsWidget(m_client->ProfileName(),m_client->AccountName()); m_ui->setupUi(this); move(MRIMCommonUtils::DesktopCenter(size())); setWindowTitle(tr("Edit %1 account settings").arg(m_client->AccountName())); m_ui->buttonBox->button(QDialogButtonBox::Ok)->setIcon(QIcon(":/icons/core/apply.png")); m_ui->buttonBox->button(QDialogButtonBox::Apply)->setIcon(QIcon(":/icons/core/apply.png")); m_ui->buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QIcon(":/icons/core/cancel.png")); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); m_ui->accountTab->layout()->setAlignment(Qt::AlignTop); m_ui->accountTab->layout()->addWidget(m_loginWidget); m_ui->connectionTab->layout()->setAlignment(Qt::AlignTop); m_ui->connectionTab->layout()->addWidget(m_settingsWidget); m_loginWidget->LoadSettings(); QSettings accountSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_client->ProfileName()+"/mrim."+m_client->AccountName(),"accountsettings"); bool profileDefaults = accountSettings.value("main/useProfileDefaults").toBool(); m_ui->useProfileCheckBox->setCheckState( (profileDefaults) ? Qt::Checked : Qt::Unchecked); m_settingsWidget->setEnabled(!profileDefaults); } EditAccount::~EditAccount() { delete m_ui; delete m_loginWidget; delete m_settingsWidget; } void EditAccount::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } void EditAccount::on_buttonBox_accepted() { SaveSettings(); close(); } void EditAccount::on_buttonBox_rejected() { close(); } void EditAccount::on_useProfileCheckBox_clicked() { m_settingsWidget->setEnabled(m_ui->useProfileCheckBox->checkState() == Qt::Unchecked); } void EditAccount::on_buttonBox_clicked(QAbstractButton* button) { if (button == m_ui->buttonBox->button(QDialogButtonBox::Apply)) { SaveSettings(); } } void EditAccount::SaveSettings() { m_loginWidget->SaveSettings(); m_settingsWidget->SaveSettings(); QSettings accountSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_client->ProfileName()+"/mrim."+m_client->AccountName(),"accountsettings"); accountSettings.setValue("main/useProfileDefaults",m_ui->useProfileCheckBox->checkState() == Qt::Checked); m_client->UpdateSettings(); } qutim-0.2.0/plugins/mrim/uisrc/generalsettings.cpp0000644000175000017500000000401411273054313023766 0ustar euroelessareuroelessar/***************************************************************************** GeneralSettings Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "generalsettings.h" #include GeneralSettings::GeneralSettings(QString aProfile, QWidget *parent) : QWidget(parent), m_ui(new Ui::GeneralSettings), m_changed(false) { m_ui->setupUi(this); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+aProfile+"/mrimsettings"); bool restoreStatus = settings.value("main/restoreStatus",true).toBool(); bool phoneCnts = settings.value("main/phoneCnts").toBool(); m_ui->restoreStatusCheckBox->setCheckState( (restoreStatus)?Qt::Checked : Qt::Unchecked); m_ui->showPhoneCheckBox->setCheckState( (phoneCnts)?Qt::Checked : Qt::Unchecked); m_ui->showStatusCheck->setChecked(settings.value("roster/statustext", true).toBool()); connect( m_ui->showStatusCheck, SIGNAL(stateChanged(int)),this, SLOT(widgetStateChanged())); connect( m_ui->restoreStatusCheckBox, SIGNAL(stateChanged(int)),this, SLOT(widgetStateChanged())); connect( m_ui->showPhoneCheckBox, SIGNAL(stateChanged(int)),this, SLOT(widgetStateChanged())); } GeneralSettings::~GeneralSettings() { delete m_ui; } void GeneralSettings::widgetStateChanged() { m_changed = true; emit settingsChanged(); } qutim-0.2.0/plugins/mrim/uisrc/generalsettings.ui0000644000175000017500000000355611273054313023633 0ustar euroelessareuroelessar GeneralSettings 0 0 400 300 GeneralSettings 0 QFrame::StyledPanel QFrame::Raised 4 Restore status at application's start Show phone contacts Show status text in contact list Qt::Vertical 20 40 qutim-0.2.0/plugins/mrim/uisrc/settingswidget.ui0000644000175000017500000001244211273054313023473 0ustar euroelessareuroelessar SettingsWidgetClass 0 0 376 266 16777215 16777215 SettingsWidget 0 QFrame::StyledPanel QFrame::Raised 4 MRIM server port: MRIM server host: Use proxy true Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Proxy type: Proxy host: Proxy port: Proxy username: Password: QLineEdit::Password Qt::Vertical 20 40 proxyCheckBox toggled(bool) groupBox setVisible(bool) 57 70 79 92 qutim-0.2.0/plugins/mrim/uisrc/generalsettings.h0000644000175000017500000000323711273054313023441 0ustar euroelessareuroelessar/***************************************************************************** GeneralSettings Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 GENERALSETTINGS_H #define GENERALSETTINGS_H #include #include "ui_generalsettings.h" class GeneralSettings : public QWidget { Q_OBJECT Q_DISABLE_COPY(GeneralSettings) public: explicit GeneralSettings(QString aProfile, QWidget *parent = 0); virtual ~GeneralSettings(); inline bool GetShowPhoneCnts() { return (m_ui->showPhoneCheckBox->checkState() == Qt::Checked)?true:false; } inline bool GetRestoreStatus() { return (m_ui->restoreStatusCheckBox->checkState() == Qt::Checked)?true:false; } inline bool GetStatustextStatus() { return m_ui->showStatusCheck->isChecked(); } private: bool m_changed; Ui::GeneralSettings *m_ui; private slots: void widgetStateChanged(); signals: void settingsChanged(); void settingsSaved(); }; #endif // GENERALSETTINGS_H qutim-0.2.0/plugins/mrim/uisrc/settingswidget.cpp0000644000175000017500000001324711273054313023644 0ustar euroelessareuroelessar/***************************************************************************** SettingsWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "settingswidget.h" #include #include SettingsWidget::SettingsWidget(QString aProfileName, QString aAccountName, QWidget *parent) : QWidget(parent), m_account(aAccountName), m_profile(aProfileName) { ui.setupUi(this); connect( ui.proxyCheckBox, SIGNAL(stateChanged(int)),this, SLOT(widgetStateChanged())); connect( ui.proxyTypeComboBox, SIGNAL(currentIndexChanged(int)),this, SLOT(widgetStateChanged())); connect( ui.hostEdit, SIGNAL(textEdited ( const QString & )),this, SLOT(widgetStateChanged())); connect( ui.portEdit, SIGNAL(textEdited ( const QString & )),this, SLOT(widgetStateChanged())); connect( ui.proxyHostEdit, SIGNAL(textEdited ( const QString & )),this, SLOT(widgetStateChanged())); connect( ui.proxyPortEdit, SIGNAL(textEdited ( const QString & )),this, SLOT(widgetStateChanged())); ui.groupBox->setVisible(false); QString settingsPath = "qutim/qutim."+m_profile; QString settingsFile = "mrimsettings"; if (!m_account.isEmpty()) { settingsPath += "/mrim."+m_account; settingsFile = "accountsettings"; } QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, settingsPath, settingsFile); QString host(settings.value("main/host").toString()); if (host == "") { host = "mrim.mail.ru"; } ui.hostEdit->setText(host); quint32 port = settings.value("main/port").toUInt(); if (port == 0) { port = 2042; } ui.portEdit->setText(QString::number(port)); bool useProxy = settings.value("main/useProxy").toBool(); ui.proxyCheckBox->setCheckState(useProxy ? Qt::Checked : Qt::Unchecked); bool convertedOk; QNetworkProxy::ProxyType proxyType = (QNetworkProxy::ProxyType)settings.value("main/proxyType").toUInt(&convertedOk); if (!convertedOk || proxyType == QNetworkProxy::NoProxy) { proxyType = QNetworkProxy::DefaultProxy; } ui.proxyHostEdit->setText(settings.value("main/proxyHost").toString()); ui.proxyPortEdit->setText(QString::number(settings.value("main/proxyPort").toUInt())); ui.proxyTypeComboBox->addItem(tr("Default proxy"), QVariant(QNetworkProxy::DefaultProxy)); ui.proxyTypeComboBox->addItem("SOCKS", QVariant(QNetworkProxy::Socks5Proxy)); ui.proxyTypeComboBox->addItem("HTTP(S)", QVariant(QNetworkProxy::HttpProxy)); int itemIndex = ui.proxyTypeComboBox->findData(QVariant(proxyType)); if (itemIndex < ui.proxyTypeComboBox->count()) { ui.proxyTypeComboBox->setCurrentIndex(itemIndex); } ui.proxyUsernameEdit->setText(settings.value("main/proxyUser").toString()); ui.proxyPassEdit->setText(settings.value("main/proxyPass").toString()); UpdateControlsAvailablility(); } SettingsWidget::~SettingsWidget() { } void SettingsWidget::on_groupBox_2_toggled(bool) { } QNetworkProxy::ProxyType SettingsWidget::GetSelectedProxyType() { bool convertedOk; QNetworkProxy::ProxyType proxyType = (QNetworkProxy::ProxyType)ui.proxyTypeComboBox->itemData(ui.proxyTypeComboBox->currentIndex()).toUInt(&convertedOk); if (!convertedOk) { proxyType = QNetworkProxy::NoProxy; } return proxyType; } void SettingsWidget::UpdateControlsAvailablility() { bool proxySectionEnabled = true; bool proxyTypeComboEnabled = true; if (ui.proxyCheckBox->checkState() != Qt::Checked) { proxySectionEnabled = false; proxyTypeComboEnabled = false; } else { if (GetSelectedProxyType() == QNetworkProxy::DefaultProxy) { proxySectionEnabled = false; } } ui.proxyHostEdit->setEnabled(proxySectionEnabled); ui.proxyPortEdit->setEnabled(proxySectionEnabled); ui.proxyTypeComboBox->setEnabled(proxyTypeComboEnabled); ui.proxyUsernameEdit->setEnabled(proxySectionEnabled); ui.proxyPassEdit->setEnabled(proxySectionEnabled); } void SettingsWidget::widgetStateChanged() { m_changed = true; UpdateControlsAvailablility(); emit settingsChanged(); } void SettingsWidget::SaveSettings() { QString settingsPath = "qutim/qutim."+m_profile; QString settingsFile = "mrimsettings"; if (!m_account.isEmpty()) { settingsPath += "/mrim."+m_account; settingsFile = "accountsettings"; } QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, settingsPath, settingsFile); settings.setValue("main/host", GetHostText()); settings.setValue("main/port", GetPortText()); settings.setValue("main/useProxy", IsProxyEnabled()); settings.setValue("main/proxyType", GetSelectedProxyType()); settings.setValue("main/proxyHost", GetProxyHostText()); settings.setValue("main/proxyPort", GetProxyPortText()); settings.setValue("main/proxyUser", GetProxyUsernameText()); settings.setValue("main/proxyPass", GetProxyPasswordText()); } qutim-0.2.0/plugins/mrim/uisrc/addcontactwidget.h0000644000175000017500000000331111273054313023544 0ustar euroelessareuroelessar/***************************************************************************** AddContactWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 ADDCONTACTWIDGET_H #define ADDCONTACTWIDGET_H //#include #include #include "ui_addcontactwidget.h" #include "../coresrc/MRIMContactList.h" class MRIMClient; class AddContactWidget : public QDialog { Q_OBJECT public: AddContactWidget(MRIMClient* aClient, QWidget *parent = 0); ~AddContactWidget(); void FillGroups(); quint32 GetSelectedGroupId(); QString GetContactEmail(); inline QString GetNickname() { return ui.nickEdit->text(); } void SetEmail(QString aEmail, bool aReadOnly = false); void SetNick(QString aNick, bool aReadOnly = false); private: Ui::AddContactWidgetClass ui; quint32 m_selctedGrId; QString m_contactEmail; MRIMClient* m_client; private slots: void on_addContactButton_clicked(); void on_pushButton_clicked(); }; #endif // ADDCONTACTWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/filetransferrequest.h0000644000175000017500000000311511273054313024333 0ustar euroelessareuroelessar/***************************************************************************** FileTransferRequest Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 FILETRANSFERREQUEST_H #define FILETRANSFERREQUEST_H #include #include "../coresrc/mrimdefs.h" namespace Ui { class FileTransferRequestWidget; } class MRIMClient; class FileTransferRequestWidget : public QWidget { Q_OBJECT Q_DISABLE_COPY(FileTransferRequestWidget) public: explicit FileTransferRequestWidget(MRIMClient* aClient, const FileTransferRequest& aReq, QWidget *parent = 0); virtual ~FileTransferRequestWidget(); protected: virtual void changeEvent(QEvent *e); private: Ui::FileTransferRequestWidget *m_ui; MRIMClient* m_client; FileTransferRequest m_req; private slots: void on_declineButton_clicked(); void on_acceptButton_clicked(); }; #endif // FILETRANSFERREQUEST_H qutim-0.2.0/plugins/mrim/uisrc/filetransferwidget.h0000644000175000017500000000567111273054313024137 0ustar euroelessareuroelessar/***************************************************************************** FileTransferWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 FILETRANSFERWIDGET_H #define FILETRANSFERWIDGET_H #include #include #include #include #include #include "../coresrc/mrimdefs.h" namespace Ui { class FileTransferWidget; } class MRIMClient; class FileTransferWidget : public QWidget { Q_OBJECT Q_DISABLE_COPY(FileTransferWidget) enum TransferMode { TM_RECIEVE_CLIENT, TM_RECIEVE_SERVER, TM_SEND_CLIENT, TM_SEND_SERVER }; enum FileTranferStatus { FT_IDLE = 0, FT_CONNECTING, FT_CONNECTED, FT_WAIT_FOR_CLIENT, FT_WAIT_FOR_HELLO, FT_WAIT_FOR_TRANSFER, FT_TRANSFER, FT_TRANSFER_FILE_COMPLETED, FT_TRANSFER_COMPLETED, FT_TRANSFER_CANCELLED, FT_DISCONNECTED }; public: explicit FileTransferWidget(MRIMClient* aClient, FileTransferRequest aReq, QString aLocation = QString(), QWidget *parent = 0); virtual ~FileTransferWidget(); protected: virtual void changeEvent(QEvent *e); void StartTransfer(); void SendCmd(const QString& aCmd); void GetNextFile(); void SetRemainTime(); private slots: void on_openButton_clicked(); void on_cancelButton_clicked(); void ConnectedToPeer(); void ReadyRead(); void Disconnected(); void UpdateProgress(); void ClientConnected(); void SendFile(QString aFileName); void FileBytesWritten(qint64 aBytesCount); void SendFileDataChunk(); void SocketError(QAbstractSocket::SocketError); private: Ui::FileTransferWidget *m_ui; FileTransferRequest m_req; quint32 m_currentFileIndex; FileTranferStatus m_currentStatus; QTcpSocket* m_socket; QTcpServer* m_server; QHashIterator* m_IPsHashIter; QHashIterator* m_filesHashIter; QFile m_currentFile; qint64 m_currentFileSize; qint64 m_speedBytes; qint64 m_bytesSent; qint32 m_currentFileChunkSize; qint32 m_sentFilesCount; MRIMClient* m_client; QString m_location; TransferMode m_transferMode; }; #endif // FILETRANSFERWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/searchresultswidget.ui0000644000175000017500000000574711273054313024534 0ustar euroelessareuroelessar SearchResultsWidgetClass 0 0 720 250 720 250 Search results 4 true 32 32 false false true true true false Nick E-Mail Name Surname Sex Age Info Qt::Horizontal 40 20 Add contact qutim-0.2.0/plugins/mrim/uisrc/contactdetails.h0000644000175000017500000000277711273054313023254 0ustar euroelessareuroelessar/***************************************************************************** ContactDetails Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 CONTACTDETAILS_H #define CONTACTDETAILS_H #include #include "ui_contactdetails.h" #include "../coresrc/mrimdefs.h" class MRIMClient; class ContactDetails : public QWidget { Q_OBJECT public: ContactDetails(MRIMClient* aClient,QWidget *parent = 0); ~ContactDetails(); void SetInfo(MRIMSearchParams aInfo); void ResetInfo(); void show(const MRIMSearchParams& aInfo); private slots: void on_addToCLButton_clicked(); void SetAvatarLabelText(QString aEmail); private: Ui::ContactDetailsClass ui; MRIMClient* m_client; QString m_email; }; #endif // CONTACTDETAILS_H qutim-0.2.0/plugins/mrim/uisrc/searchresultswidget.cpp0000644000175000017500000001470311273054313024671 0ustar euroelessareuroelessar/***************************************************************************** SearchResultsWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "searchresultswidget.h" #include "contactdetails.h" #include "../coresrc/MRIMUtils.h" #include "../coresrc/MRIMClient.h" #include "../coresrc/avatarfetcher.h" #include ContactWidgetItem::ContactWidgetItem(QString aEmail, bool aShowAvatar, QTreeWidget* aParent) : QTreeWidgetItem(aParent), m_email(aEmail) { if (!aShowAvatar) return; bool hasAvatar = QFile::exists(AvatarFetcher::SmallAvatarPath(m_email)); if (!hasAvatar) { connect(AvatarFetcher::Instance(),SIGNAL(SmallAvatarFetched(QString)),this,SLOT(HandleSmallAvatarFetched(QString))); AvatarFetcher::Instance()->FetchSmallAvatar(m_email); } else { SetAvatar(); } } void ContactWidgetItem::SetAvatar() { qint32 size = 32; QSize ava_size(size,size); QIcon icon(AvatarFetcher::SmallAvatarPath(m_email)); QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(65535,65535)),QIcon::Normal,QIcon::On); if(!pixmap.isNull()) { QPixmap alpha (ava_size); alpha.fill(QColor(0,0,0)); QPainter painter(&alpha); QPen pen(QColor(127,127,127)); painter.setRenderHint(QPainter::Antialiasing); pen.setWidth(0); painter.setPen(pen); painter.setBrush(QBrush(QColor(255,255,255))); painter.drawRoundedRect(QRectF(QPointF(0,0),QSize(size-1,size-1)),5,5); painter.end(); pixmap = pixmap.scaled(ava_size,Qt::IgnoreAspectRatio,Qt::SmoothTransformation); pixmap.setAlphaChannel(alpha); setIcon(1,pixmap); } } void ContactWidgetItem::HandleSmallAvatarFetched(QString aEmail) { if (m_email != aEmail) return; SetAvatar(); disconnect(AvatarFetcher::Instance(),SIGNAL(SmallAvatarFetched(QString)),this,SLOT(HandleSmallAvatarFetched(QString))); } ContactWidgetItem::~ContactWidgetItem() { MRIMSearchParams* info = (MRIMSearchParams*)qVariantValue(data(0,Qt::UserRole)); delete info; } SearchResultsWidget::SearchResultsWidget(MRIMClient* aClient, QWidget *parent) : QWidget(parent), m_client(aClient) { ui.setupUi(this); move(MRIMCommonUtils::DesktopCenter(size())); ui.contactsTreeWidget->headerItem()->setText(0," "); ui.contactsTreeWidget->headerItem()->setText(1," "); ui.contactsTreeWidget->setColumnWidth(0,20); ui.contactsTreeWidget->setColumnWidth(1,32); ui.contactsTreeWidget->setColumnWidth(2,130); ui.contactsTreeWidget->setColumnWidth(3,130); ui.contactsTreeWidget->setColumnWidth(4,130); ui.contactsTreeWidget->setColumnWidth(5,130); ui.contactsTreeWidget->setColumnWidth(6,30); ui.contactsTreeWidget->setColumnWidth(7,30); ui.contactsTreeWidget->setColumnWidth(8,50); } SearchResultsWidget::~SearchResultsWidget() { } void SearchResultsWidget::AddContacts(QList aFoundContacts, bool aShowAvatars) { //add to ui if (aShowAvatars) ui.contactsTreeWidget->showColumn(1); else ui.contactsTreeWidget->hideColumn(1); Status stat; foreach (MRIMSearchParams* foundContact,aFoundContacts) { QString email = foundContact->EmailAddr+"@"+foundContact->EmailDomain; ContactWidgetItem* contact = new ContactWidgetItem(email,aShowAvatars,ui.contactsTreeWidget); if (foundContact->Status != -1) { contact->setIcon(0,Status::GetIcon(foundContact->Status)); } else { contact->setIcon(0,Status::GetIcon(STATUS_UNDETERMINATED)); } if (foundContact->EmailAddr.length() > 0) { contact->setText(3,email); } if (foundContact->Nick.length() > 0) { contact->setText(2,foundContact->Nick); } if (foundContact->Name.length() > 0) { contact->setText(4,foundContact->Name); } if (foundContact->Surname.length() > 0) { contact->setText(5,foundContact->Surname); } if (foundContact->Sex == -1) { contact->setText(6,"-"); } if (foundContact->Sex == 1) { contact->setText(6,tr("M")); } if (foundContact->Sex == 2) { contact->setText(6,tr("F")); } if (foundContact->BirthDay != -1 && foundContact->BirthdayMonth != -1 && foundContact->BirthYear != -1) { QDate currDate = QDate::currentDate(); QDate contactBDay = QDate(foundContact->BirthYear,foundContact->BirthdayMonth,foundContact->BirthDay); int age = contactBDay.daysTo(currDate) / 365; contact->setText(7,QString::number(age)); } contact->setIcon(8,MRIMPluginSystem::PluginSystem()->getIcon("contactinfo")); contact->setData(0,Qt::UserRole,(qptrdiff)foundContact); } aFoundContacts.clear(); } void SearchResultsWidget::on_addCntButton_clicked() { QTreeWidgetItem* currItem = ui.contactsTreeWidget->currentItem(); if (currItem) { m_client->HandleAddContact(currItem->text(3),currItem->text(2)); } } void SearchResultsWidget::Reset() { ui.contactsTreeWidget->clear(); } void SearchResultsWidget::show(QList aFoundList, bool aShowAvatars) { AddContacts(aFoundList, aShowAvatars); QWidget::show(); } void SearchResultsWidget::on_contactsTreeWidget_itemClicked(QTreeWidgetItem* item, int column) { if (column != 8) return; ContactDetails* cntDetails = new ContactDetails(m_client); MRIMSearchParams* info = (MRIMSearchParams*)qVariantValue(item->data(0,Qt::UserRole)); if (!info) return; cntDetails->show(*info); } qutim-0.2.0/plugins/mrim/uisrc/mrimloginwidget.cpp0000644000175000017500000000222211273054313023770 0ustar euroelessareuroelessar/***************************************************************************** MRIMLoginWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "mrimloginwidget.h" MRIMLoginWidget::MRIMLoginWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); } MRIMLoginWidget::~MRIMLoginWidget() { } QString MRIMLoginWidget::GetLoginText() { return ui.loginEdit->text(); } QString MRIMLoginWidget::GetPassText() { return ui.passEdit->text(); } qutim-0.2.0/plugins/mrim/uisrc/authwidget.h0000644000175000017500000000262711273054313022412 0ustar euroelessareuroelessar/***************************************************************************** authwidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 AUTHWIDGET_H #define AUTHWIDGET_H #include #include "ui_authwidget.h" class MRIMClient; class authwidget : public QWidget { Q_OBJECT public: authwidget(MRIMClient* aClient, QWidget *parent = 0); ~authwidget(); void SetupAuthRequest(QString aText, const QString& aContact); private: void AcceptAuth(); Ui::authwidgetClass ui; MRIMClient* m_client; QString m_contact; private slots: void on_rejectButton_clicked(); void on_authButton_clicked(); }; #endif // AUTHWIDGET_H qutim-0.2.0/plugins/mrim/uisrc/loginform.ui0000644000175000017500000000312611273054313022422 0ustar euroelessareuroelessar LoginFormClass 0 0 276 91 16777215 150 LoginForm 4 E-mail: Password: QLineEdit::Password Qt::Vertical 20 40 qutim-0.2.0/plugins/mrim/uisrc/renamewidget.cpp0000644000175000017500000000316111273054313023245 0ustar euroelessareuroelessar/***************************************************************************** RenameWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "renamewidget.h" #include "ui_renamewidget.h" #include "../coresrc/mrimcontact.h" #include "../coresrc/MRIMClient.h" #include "../coresrc/MRIMUtils.h" RenameWidget::RenameWidget(QWidget *parent) : QWidget(parent), m_ui(new Ui::RenameWidget), m_cnt(0) { m_ui->setupUi(this); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); } RenameWidget::~RenameWidget() { delete m_ui; } void RenameWidget::show(MRIMContact* aCnt) { if (!aCnt) return; m_cnt = aCnt; setWindowTitle(tr("Rename")+" "+m_cnt->Name()); m_ui->newNameEdit->clear(); move(MRIMCommonUtils::DesktopCenter(size())); QWidget::show(); } void RenameWidget::on_okButton_clicked() { m_cnt->Rename(m_ui->newNameEdit->text()); close(); } qutim-0.2.0/plugins/mrim/uisrc/authwidget.cpp0000644000175000017500000000400511273054313022735 0ustar euroelessareuroelessar/***************************************************************************** authwidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "authwidget.h" #include "addcontactwidget.h" #include "../coresrc/MRIMUtils.h" #include "../coresrc/MRIMClient.h" authwidget::authwidget(MRIMClient* aClient, QWidget *parent) : QWidget(parent), m_client(aClient) { ui.setupUi(this); move(MRIMCommonUtils::DesktopCenter(size())); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); } authwidget::~authwidget() { } void authwidget::SetupAuthRequest(QString aText, const QString& aContact) { ui.authTextBox->setText(aText); m_contact = aContact; } void authwidget::on_rejectButton_clicked() { close(); } void authwidget::on_authButton_clicked() { AcceptAuth(); } void authwidget::AcceptAuth() { m_client->Protocol()->SendAuthorizationTo(m_contact); hide(); if (!m_client->Protocol()->IsInList(m_contact)) { AddContactWidget* cntAddWidget = new AddContactWidget(m_client); cntAddWidget->FillGroups(); cntAddWidget->SetEmail(m_contact,true); cntAddWidget->show(); } close(); } qutim-0.2.0/plugins/mrim/uisrc/editaccount.ui0000644000175000017500000000342411273054313022731 0ustar euroelessareuroelessar EditAccount Qt::WindowModal 0 0 357 411 Edit account 1 Account 4 Connection 4 Use profile settings QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok qutim-0.2.0/plugins/mrim/uisrc/filetransferwidget.cpp0000644000175000017500000002741411273054313024471 0ustar euroelessareuroelessar/***************************************************************************** FileTransferWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "ui_filetransferwidget.h" #include "filetransferwidget.h" #include "../coresrc/MRIMPluginSystem.h" #include "../coresrc/MRIMUtils.h" FileTransferWidget::FileTransferWidget(MRIMClient* aClient, FileTransferRequest aReq, QString aLocation, QWidget *parent) : QWidget(parent), m_ui(new Ui::FileTransferWidget), m_req(aReq), m_speedBytes(0), m_client(aClient), m_location(aLocation) { m_ui->setupUi(this); move(MRIMCommonUtils::DesktopCenter(size())); setWindowIcon(MRIMPluginSystem::PluginSystem()->getIcon("save_all")); setWindowTitle(tr("File transfer with: %1").arg(m_req.From)); m_ui->doneLabel->setText("0"); m_ui->statusLabel->setText(tr("Waiting...")); setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_DeleteOnClose, true); if (m_location.length() > 0 && m_req.From.length() > 0) m_transferMode = TM_RECIEVE_CLIENT; else { m_transferMode = TM_SEND_SERVER; } StartTransfer(); } void FileTransferWidget::StartTransfer() { m_currentStatus = FT_IDLE; m_speedBytes = 0; m_IPsHashIter = new QHashIterator(m_req.IPsDict); m_IPsHashIter->toFront(); m_filesHashIter = new QHashIterator(m_req.FilesDict); m_filesHashIter->toFront(); switch (m_transferMode) { case TM_RECIEVE_CLIENT: { m_socket = new QTcpSocket; connect(m_socket,SIGNAL(connected()),this,SLOT(ConnectedToPeer())); connect(m_socket,SIGNAL(readyRead()),this,SLOT(ReadyRead())); connect(m_socket,SIGNAL(disconnected()),this,SLOT(Disconnected())); connect(m_socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(SocketError(QAbstractSocket::SocketError))); QHash::const_iterator currIp = m_IPsHashIter->next(); m_currentStatus = FT_CONNECTING; qDebug()<<"MRIM: FT: Connecting to "<connectToHost(currIp.key(),currIp.value()); } break; case TM_SEND_SERVER: { m_sentFilesCount = 0; m_server = new QTcpServer(); connect(m_server,SIGNAL(newConnection()),this,SLOT(ClientConnected())); qDebug()<<"MRIM: FT: Starting server @ 127.0.0.1:"<listen(QHostAddress(QHostAddress::LocalHost),m_req.IPsDict.values().at(0)); } break; } } FileTransferWidget::~FileTransferWidget() { delete m_ui; } void FileTransferWidget::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } void FileTransferWidget::ConnectedToPeer() { m_currentStatus = FT_WAIT_FOR_HELLO; SendCmd("MRA_FT_HELLO "+m_client->GetAccountInfo().account_name); } void FileTransferWidget::ReadyRead() { switch (m_transferMode) { case TM_RECIEVE_CLIENT: { if (m_currentStatus == FT_WAIT_FOR_HELLO) { QString cmd(m_socket->readAll()); qDebug()<<"File transfer cmd recieved: "<bytesAvailable(); m_speedBytes += m_socket->bytesAvailable(); m_ui->doneLabel->setText(MRIMCommonUtils::GetFileSize(m_currentFileSize)); m_ui->progressBar->setValue(m_currentFileSize); m_currentFile.write(m_socket->readAll()); if (m_currentFileSize >= m_filesHashIter->value()) { //done with current file m_currentFile.close(); m_currentStatus = FT_TRANSFER_FILE_COMPLETED; GetNextFile(); } } } break; case TM_SEND_SERVER: { if (m_currentStatus == FT_WAIT_FOR_HELLO) { QString cmd(m_socket->readAll()); qDebug()<<"File transfer cmd recieved: "<GetAccountInfo().account_name); m_currentStatus = FT_WAIT_FOR_TRANSFER; } } else if (m_currentStatus == FT_WAIT_FOR_TRANSFER && m_sentFilesCount < m_req.FilesInfo.count()) { QString cmdStr(m_socket->readAll()); qDebug()<<"File transfer cmd recieved: "<hasNext()) { QHash::const_iterator currIp = m_IPsHashIter->next(); m_currentStatus = FT_CONNECTING; qDebug()<<"MRIM: FT: Connecting to "<connectToHost(currIp.key(),currIp.value()); } else if (m_currentStatus != FT_TRANSFER_COMPLETED && m_currentStatus != FT_TRANSFER_CANCELLED) { m_currentStatus = FT_DISCONNECTED; } } void FileTransferWidget::SendCmd(const QString& aCmd) { QString codepage = "CP1251"; QTextCodec* codec = QTextCodec::codecForName(codepage.toLocal8Bit()); if (codec != NULL) { m_socket->write(codec->fromUnicode(aCmd)); } else { m_socket->write(aCmd.toLatin1()); } } void FileTransferWidget::UpdateProgress() { qint64 progress = 0, totalSize = 0; if (m_transferMode == TM_RECIEVE_CLIENT) { progress = m_currentFileSize; totalSize = m_filesHashIter->value(); } else if (m_transferMode == TM_SEND_SERVER) { progress = m_currentFile.pos(); totalSize = m_currentFile.size(); } m_ui->doneLabel->setText(MRIMCommonUtils::GetFileSize(progress)); m_ui->progressBar->setValue(progress); m_ui->speedLabel->setText(MRIMCommonUtils::GetFileSize(m_speedBytes)+tr("/sec")); SetRemainTime(); m_speedBytes = 0; if (progress >= totalSize) { m_ui->statusLabel->setText(tr("Done!")); m_ui->speedLabel->setText(""); return; } if ( m_socket->state() == QAbstractSocket::ConnectedState ) QTimer::singleShot(1000, this, SLOT(UpdateProgress())); } void FileTransferWidget::GetNextFile() { if (m_filesHashIter->hasNext()) { m_speedBytes = 0; m_currentFileSize = 0; QHash::const_iterator currFile = m_filesHashIter->next(); m_ui->progressBar->setMaximum(currFile.value()); m_ui->progressBar->setValue(0); m_ui->fileSizeLabel->setText(MRIMCommonUtils::GetFileSize(currFile.value())); m_ui->doneLabel->setText(MRIMCommonUtils::GetFileSize(0)); m_ui->statusLabel->setText(tr("Getting file...")); m_ui->fileNameLabel->setText(currFile.key()); m_ui->speedLabel->clear(); QString reqCmd("MRA_FT_GET_FILE "+currFile.key()); m_currentFile.setFileName(m_location+currFile.key()); m_currentFile.open(QIODevice::WriteOnly); SendCmd(reqCmd); m_currentStatus = FT_WAIT_FOR_TRANSFER; UpdateProgress(); } else { m_client->Protocol()->FileTransferCompleted(m_req.UniqueId); m_currentStatus = FT_TRANSFER_COMPLETED; m_socket->disconnectFromHost(); m_ui->cancelButton->setText(tr("Close")); if (m_ui->closeAfterTransfer->checkState() == Qt::Checked) { close(); } } } void FileTransferWidget::SetRemainTime() { if(m_speedBytes) { qint64 progress = 0, totalSize = 0; if (m_transferMode == TM_RECIEVE_CLIENT) { progress = m_currentFileSize; totalSize = m_filesHashIter->value(); } else if (m_transferMode == TM_SEND_SERVER) { progress = m_currentFile.pos(); totalSize = m_currentFile.size(); } int secsLeft = (totalSize - progress) / m_speedBytes; QTime tmpTime(0,0,0); m_ui->remainedLabel->setText(tmpTime.addSecs(secsLeft).toString()); } } void FileTransferWidget::on_cancelButton_clicked() { if (m_currentStatus == FT_TRANSFER_COMPLETED) { close(); } else { m_client->Protocol()->DeclineFileTransfer(m_req.UniqueId); } } void FileTransferWidget::on_openButton_clicked() { QDesktopServices::openUrl(QUrl(m_location)); } void FileTransferWidget::ClientConnected() { m_socket = m_server->nextPendingConnection(); connect(m_socket,SIGNAL(readyRead()),this,SLOT(ReadyRead())); connect(m_socket,SIGNAL(disconnected()),this,SLOT(Disconnected())); connect(m_socket,SIGNAL(bytesWritten(qint64)),this,SLOT(FileBytesWritten(qint64))); m_currentStatus = FT_WAIT_FOR_HELLO; m_server->close(); } void FileTransferWidget::SendFile(QString aFileName) { if (!m_req.FilesDict.contains(aFileName)) return; QFileInfo info = m_req.FilesInfo.at(m_req.FilesDict.keys().indexOf(aFileName,0)); if (info.exists()) { m_speedBytes = 0; if (m_currentFile.isOpen()) m_currentFile.close(); m_currentFile.setFileName(info.absoluteFilePath()); m_currentFile.open(QIODevice::ReadOnly); m_currentFileChunkSize = m_currentFile.size() < 1360 ? m_currentFile.size() : 1360; m_ui->progressBar->setMaximum(m_currentFile.size()); m_ui->progressBar->setValue(0); m_ui->fileSizeLabel->setText(MRIMCommonUtils::GetFileSize(m_currentFile.size())); m_ui->doneLabel->setText(MRIMCommonUtils::GetFileSize(0)); m_ui->speedLabel->clear(); m_ui->statusLabel->setText(tr("Sending file...")); m_ui->fileNameLabel->setText(m_currentFile.fileName()); UpdateProgress(); SendFileDataChunk(); } } void FileTransferWidget::FileBytesWritten(qint64 aBytesCount) { if (m_transferMode == TM_SEND_SERVER && m_currentStatus == FT_TRANSFER) { m_speedBytes += aBytesCount; SendFileDataChunk(); } } void FileTransferWidget::SendFileDataChunk() { qint64 bytesLeft = m_currentFile.size() - m_currentFile.pos(); if (bytesLeft < 1) { m_currentFile.close(); m_sentFilesCount++; if (m_sentFilesCount >= m_req.FilesInfo.count()) { m_currentStatus = FT_TRANSFER_COMPLETED; m_socket->disconnectFromHost(); } else { m_currentStatus = FT_WAIT_FOR_TRANSFER; } return; } m_socket->write(m_currentFile.read(m_currentFileChunkSize)); } void FileTransferWidget::SocketError(QAbstractSocket::SocketError) { qDebug()<<"MRIM: FT: Socket error"; Disconnected(); } qutim-0.2.0/plugins/mrim/uisrc/addnumberwidget.h0000644000175000017500000000273411273054313023411 0ustar euroelessareuroelessar/***************************************************************************** AddNumberWidget Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 ADDNUMBERWIDGET_H #define ADDNUMBERWIDGET_H #include class MRIMContact; class MRIMClient; namespace Ui { class AddNumberWidget; } class AddNumberWidget : public QWidget { Q_OBJECT Q_DISABLE_COPY(AddNumberWidget) signals: void numbersChanged(); public: explicit AddNumberWidget(MRIMClient* aClient, QWidget *parent = 0); virtual ~AddNumberWidget(); void show(MRIMContact* aCnt); private: Ui::AddNumberWidget *m_ui; MRIMContact* m_cnt; MRIMClient* m_client; private slots: void on_saveButton_clicked(); }; #endif // ADDNUMBERWIDGET_H qutim-0.2.0/plugins/mrim/xtraz/0000755000175000017500000000000011273101025020101 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/xtraz/xtrazpackage.cpp0000644000175000017500000000646211273054313023310 0ustar euroelessareuroelessar#include "xtrazpackage.h" #include #include #include #include #include XtrazPackage::XtrazPackage(QString aPackageName, QString aFullPath) : m_packageName(aPackageName), m_fullPath(aFullPath) { qDebug()<<"Initializing package "<ParseSmiles(rootEl.firstChildElement("smiles")); docFile.close(); return package; } void XtrazPackage::ParseSmiles(const QDomElement& aSmilesElement) { QList smiles; if (aSmilesElement.isNull()) return; for(QDomNode smileNode = aSmilesElement.firstChild(); !smileNode.isNull(); smileNode = smileNode.nextSibling()) { if (smileNode.nodeName() != "smile") continue; XtrazSmile* smile = new XtrazSmile; smile->Type = (SmileType)smileNode.firstChildElement("type").text().toUInt(); smile->FileName = m_fullPath+"/"+smileNode.firstChildElement("file").text(); for(QDomElement nameEl = smileNode.firstChildElement("name"); !nameEl.isNull(); nameEl = nameEl.nextSiblingElement("name")) { qDebug()<Names.insert(nameEl.attribute("lang"),nameEl.text()); } for(QDomElement expEl = smileNode.firstChildElement("exp"); !expEl.isNull(); expEl = expEl.nextSiblingElement("exp")) { qDebug()<<"Expression for smile found: "<Expressions.append(QRegExp(Qt::escape(expEl.text()))); } smile->Replacement = smileNode.firstChildElement("replace").text(); smiles.append(smile); } qDebug()<<"Smiles found in package! Count: "< aSmilesList) { m_smilesList.append(aSmilesList); } void XtrazPackage::FindSmilesAndReplace(QString& aText) { qDebug()<<"Finding smile tags in text: "<Expressions) { if (rx.indexIn(aText) >= 0) { qDebug()<Replacement); aText.replace(rx.cap(0),smile->Replacement.arg(m_fullPath.section('/',0,-2)+'/')); } } } qDebug()<<"Text after processing: "< XtrazSettings 0 0 396 322 Form 4 Enable Xtraz false 0 25 250 25 Xtraz packages: 250 16777215 0 25 16777215 25 Information: 150 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop qutim-0.2.0/plugins/mrim/xtraz/xtrazpacks/0000755000175000017500000000000011273101025022273 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/xtraz/xtrazpacks/mrimxtraz/0000755000175000017500000000000011273101025024330 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/xtraz/xtrazpacks/mrimxtraz/xtrazpack.xml0000644000175000017500000000076311273054313027076 0ustar euroelessareuroelessar qutim-0.2.0/plugins/mrim/xtraz/xtrazdefs.h0000644000175000017500000000053711273054313022300 0ustar euroelessareuroelessar#ifndef XTRAZDEFS_H #define XTRAZDEFS_H #include #include enum SmileType { StaticSmile = 0, FlashSmile, GifSmile }; struct XtrazSmile { QHash Names; SmileType Type; QString FileName; QList Expressions; QString Replacement; }; #endif // XTRAZDEFS_H qutim-0.2.0/plugins/mrim/xtraz/xtrazsettings.h0000644000175000017500000000103211273054313023206 0ustar euroelessareuroelessar#ifndef XTRAZSETTINGS_H #define XTRAZSETTINGS_H #include namespace Ui { class XtrazSettings; } class XtrazPackage; class XtrazSettings : public QWidget { Q_OBJECT Q_DISABLE_COPY(XtrazSettings) public: explicit XtrazSettings(QString aProfileName, QWidget *parent = 0); virtual ~XtrazSettings(); void SaveSettings(); protected: virtual void changeEvent(QEvent *e); private: Ui::XtrazSettings *m_ui; QString m_profileName; }; #endif // XTRAZSETTINGS_H qutim-0.2.0/plugins/mrim/xtraz/xtrazutils.h0000644000175000017500000000047111273054313022514 0ustar euroelessareuroelessar#ifndef XTRAZUTILS_H #define XTRAZUTILS_H #include "xtrazpackage.h" class QDomElement; class XtrazUtils { public: static QList FindPackages(); protected: static QList ProccessPackages(const QString& aPaths); XtrazUtils(); }; #endif // XTRAZUTILS_H qutim-0.2.0/plugins/mrim/xtraz/xtrazpackage.h0000644000175000017500000000126211273054313022746 0ustar euroelessareuroelessar#ifndef XTRAZPACKAGE_H #define XTRAZPACKAGE_H #include #include "xtrazdefs.h" class QDomElement; class XtrazPackage : public QObject { public: static XtrazPackage* TryParse(QString aPackageFilePath); XtrazPackage(QString aPackageName, QString aFullPath); void AddSmiles(QList aSmilesList); void ParseSmiles(const QDomElement& aSmilesElement); void FindSmilesAndReplace(QString& aText); inline QString Name() { return m_packageName; } inline QString Path() { return m_fullPath; } private: QList m_smilesList; QString m_packageName; QString m_fullPath; }; #endif // XTRAZPACKAGE_H qutim-0.2.0/plugins/mrim/xtraz/xtrazsettings.cpp0000644000175000017500000000360411273054313023550 0ustar euroelessareuroelessar#include "xtrazsettings.h" #include "xtrazutils.h" #include "ui_xtrazsettings.h" #include #include #include XtrazSettings::XtrazSettings(QString aProfileName, QWidget *parent) : QWidget(parent), m_ui(new Ui::XtrazSettings), m_profileName(aProfileName) { m_ui->setupUi(this); QList packages = XtrazUtils::FindPackages(); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName, "xtrazsettings"); QString current = settings.value("currentPack/path").toString(); bool enabled = settings.value("main/enabled",true).toBool(); m_ui->enabledCheck->setChecked( (enabled) ? Qt::Checked : Qt::Unchecked ); foreach (XtrazPackage* pack, packages) { qDebug()<<"Xtraz settings: adding package to list: "<Name(); QListWidgetItem* item = new QListWidgetItem(pack->Name()); item->setData(Qt::UserRole,pack->Path()); m_ui->packagesListView->addItem(item); if (!current.isEmpty() && current == pack->Path()) { m_ui->packagesListView->setCurrentItem(item); } } } XtrazSettings::~XtrazSettings() { delete m_ui; } void XtrazSettings::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } } void XtrazSettings::SaveSettings() { QListWidgetItem* current = m_ui->packagesListView->currentItem(); if (!current) return; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName, "xtrazsettings"); settings.setValue("currentPack/path",current->data(Qt::UserRole)); bool enabled = (m_ui->enabledCheck->checkState() == Qt::Checked)? true : false; settings.setValue("main/enabled",enabled); } qutim-0.2.0/plugins/mrim/xtraz/xtrazutils.cpp0000644000175000017500000000371011273054313023046 0ustar euroelessareuroelessar#include "xtrazutils.h" #include #include #include #include #include XtrazUtils::XtrazUtils() { } QList XtrazUtils::FindPackages() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim", "qutimsettings"); QStringList paths; QString appPath = qApp->applicationDirPath(); if (appPath.at(appPath.size()-1) == '/') appPath.chop(1); #if !defined(Q_WS_WIN) // ../share/qutim paths << appPath.section('/', 0, -2) + "/share/qutim"; #endif // ./ paths << appPath; // ~/.config/qutim or Application Data paths << settings.fileName().section('/', 0, -2); #if defined(Q_WS_MAC) // ./ Application bundle paths << qApp->applicationDirPath().section('/', 0, -2) + "/Resources"; #endif QList packagesList; foreach (QString path, paths) { QString packsPath = path+"/xtrazpacks"; packagesList.append(ProccessPackages(packsPath)); } qDebug()<<"Packages total count: "< XtrazUtils::ProccessPackages(const QString& aPath) { qDebug()<<"Searching for Xtraz package in: "< packagesList; foreach (QString dir, xtrazPacks) { QString fullPath = aPath + "/" + dir; qDebug()<<"Checking Xtraz package in: "< Resources/region.txt icons/mrim/STATUS_AWAY.png icons/mrim/STATUS_INVISIBLE.png icons/mrim/STATUS_OFFLINE.png icons/mrim/STATUS_ONLINE.png icons/mrim/STATUS_UNDETERMINATED.png icons/mrim/connecting.png icons/mrim/status_10.png icons/mrim/status_11.png icons/mrim/status_12.png icons/mrim/status_13.png icons/mrim/status_14.png icons/mrim/status_15.png icons/mrim/status_16.png icons/mrim/status_17.png icons/mrim/status_18.png icons/mrim/status_19.png icons/mrim/status_20.png icons/mrim/status_21.png icons/mrim/status_22.png icons/mrim/status_23.png icons/mrim/status_24.png icons/mrim/status_26.png icons/mrim/status_27.png icons/mrim/status_28.png icons/mrim/status_29.png icons/mrim/status_30.png icons/mrim/status_32.png icons/mrim/status_33.png icons/mrim/status_34.png icons/mrim/status_35.png icons/mrim/status_36.png icons/mrim/status_37.png icons/mrim/status_38.png icons/mrim/status_39.png icons/mrim/status_4.png icons/mrim/status_40.png icons/mrim/status_41.png icons/mrim/status_42.png icons/mrim/status_43.png icons/mrim/status_44.png icons/mrim/status_45.png icons/mrim/status_46.png icons/mrim/status_47.png icons/mrim/status_48.png icons/mrim/status_49.png icons/mrim/status_5.png icons/mrim/status_50.png icons/mrim/status_51.png icons/mrim/status_52.png icons/mrim/status_53.png icons/mrim/status_6.png icons/mrim/status_7.png icons/mrim/status_8.png icons/mrim/status_9.png icons/mrim/status_chat.png icons/mrim/status_dnd.png icons/protocol/mrim.png Resources/statuses.xml icons/clients/imadering.png icons/clients/magent.png qutim-0.2.0/plugins/mrim/icons/0000755000175000017500000000000011273101025020044 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/icons/protocol/0000755000175000017500000000000011273101025021705 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/icons/protocol/mrim.png0000644000175000017500000000130611273054313023366 0ustar euroelessareuroelessarPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<CIDAT8mkUϽOi)J!Ђ+Qqpn\4;&n\辋v!"V t!U#B)DNm4~U0KOH'r" I|qƙ7Iqon H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڜ=kAu.9"Bl,7(/^K M+?M Ũ o HiedEVW{ - C/$uSIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_10.png0000644000175000017500000000651111273054313023353 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FdIDATxڄ[HTQ̌" )bY M G)#z)z@ ӗT2zR*ƇR$A0 ::s݃djE8By}zoKB`Ew+*qFK5UL D="}B6n7bMJS9E/%dΌ+JwbnW,e.7<%⚵q[r&`U~&.]\>Ԅs}rB&u?:Aycg,cq[תԪ"q>(vt%pũ귳3`1(DEK3Y%U>/bfc# ; vFO[zmPrkuU5fEJR[Z07&6.Mxd۪OI鿰L\)ku5Sy`)B='ś5[3\? ,Eq|Ϛi|?x\Wxe0U>d%i*6I@2S G\ j1@{IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_41.png0000644000175000017500000000102211273054313023347 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATx|S=/DA=6AH( J$bm"*@%ԩUFӉB4 B#!Aaݵ.f̛y̹wf4T$j&XaN#D-XhꪁJ`X TA6YU$K `D=r)a5S8$ dL C (&6*Hk%ώ)cԎ\Y> O~PtU:&m?DJNT3Ǐ"Se@f-9cRwfc8kR>$Κi5*^/[<ϰ帬9qB&wS,c |ga%7)ЧįFxG@/76=}i'FC KC P`<0R:LK6~_HJ򲔀O!t!kذw>T=`.jgfeUhf%3^m;amܷB<u&0ۢf)]Q^vLg.ӕox6j l& \K,@Wϟ _3cot5ZA~]Y4jŞ{'<"9bc~# `]fkjٜB h2)O5:ٚR PXՐ_Ѡ0Y~KJ(n{؃;w6hmbwmc2"D٫ꚅҶJ, Yp̩IzS/QU>esWQB-JM3*sG`|[#iQjzQqIKfy7@MIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/STATUS_OFFLINE.png0000644000175000017500000000155611273054313023721 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڔSKHa$nbrdEN[ONW_bMMC$FOOw#LjlM9kyVV@m1Gil؁nmm_ӫOA/MlQQ 2{م6&$2$S)Nuu90=-Ғ]CbN.o !Lv~V\NAB8 =$8398:%L9:ʖVUEZ-VSsKF`CN&%;3FQI>(R؂`@ ( H\"R/!8@QЀ._gfLO]::rwNs'65*R @ cy +-.^R*5ꎎT~c|kKORHIں$RTXxT<2rORx2W)Ϥw5+`>KvYGͶπS'. ML܇J.⥥2m63.$އE{Q,^#|#G*^樾󙮡 |JAR  k s>o }c%IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_29.png0000644000175000017500000000115311273054313023362 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe< IDATx|SKTQXk)I$ K ޲[q1+ !j 7QTH& ZcqwF|s9/OD3} 3+^3'oXCl~2DsD |y.=b,%`S8&I M-~zokUE{$1I`9%nTBS({H rK$9ZEhCn*7_Ey x&\CY5:|xd(l'4eKcF+,`qNNg7`~?&p{̬DD-)Z8 63$➢ǨRE8s~Nw,^ 'bUprHPY#Jȍ\ +XOY Gp&O8'v&+2ApɞB&Z˖Y;Ndwn v$*:i^Ic0?a *_m]v8U}<'MrJ}] 7_<15]/͟=IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_13.png0000644000175000017500000000665211273054313023364 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڔKhTg9sr2&mԚ*i@i!DE]t_PRЋ`"DEUZTTHAbBLۅ,R@41tf9FJ>f|+Wk} PlV~BJ&nmPO>6[ ;pbkUIzGFtA zk BLOf#M)P2nQga`=Tr|Ǜ-==]ٹ}&|*?kgOKqkį34NN1%fH,`zgq:eWVVJ Vr=,=< OR !ٺ@wH5fN7el^ />$~FB9"_ WC`@V[ 3"Vt{}x]wmjE?˫! zRcϛ-5@ [߉iss&KM"Waƣš !{VJéijvuu+7FF@Gh+ PzTxo0 !~EIG &@_Ou$$G?:։9o{۞?p@IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_46.png0000644000175000017500000000121311273054313023356 0ustar euroelessareuroelessarPNG  IHDRa pHYsod=IDATxmQMhQ?jjHM@*^kAPГFCa:qa~/8r ,;KwXp lBzw?>SL.pO ХIQuu!  xkQƨ[ mB7DKmOHPlu9,_]VO1 #Nr(tELJYMx4m g~d~n|9m@lQ>*}i:9ES2 R K4q<.W/ƇT.q2NR,D$ ϷVۗ3K"[xwbbG xNi%jPT$.E'N}[PW}HOT'5&{IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_28.png0000644000175000017500000000636111273054313023367 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F IDATxڄ=kTQ9׻`Lv6  A$X !A!6X Bf7{w=g,$ipUeOibzz>CTbE0n1Tֹ6y8X2A!V/ku{!DXz {Ee&UIoLme~tzܹK3ZXnX ėHXpzD@ d 4C>wW+qYPpXv{qAꥋFX)0#ajP;q!j |7ZN9;& N%* ?h~JFezkI~,Ѩj(TC] +m~w=:Kh\M_9>iI"qzsdy+V3ky<;iމ &l}xxN $)g;ТЊ XE)FPn#@c@-@N<;B I KIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_43.png0000644000175000017500000000067411273054313023365 0ustar euroelessareuroelessarPNG  IHDRaIDATx+DaPfJ2-+­iHYdmv6,|mHivLBD>t,{ݯz;ysngHu 2ՆT͵^"6V 0j&{cvYBRD`pg,uzogUlX c"0;cvZ{;\쯅JZ^,,|䇕b RgY|yS^S=8 h%AI'z, F1*KŤh܄g]Mܿ6ѶqV &_@mnkK#ס RUsǁJ%{RR $9pq?-P-@Nm2NfȩfWp;@Ɵpt@jzO X Ȋ+h?s84 tQJ3 pun)O^T]w=˳y1pݺHeR0"{"uyܺ 4J)^:4 &*%, eXHZju2? :IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/STATUS_AWAY.png0000644000175000017500000000151611273054313023374 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڔ]Haǟ677I'nHŖd h@*B/"*P ?6jik,V.>}t& 9/<91:RD `~#h"8Etie 2"e2ŅF)UcA=p>kIR:FX4*˧妺ٺ%ZT u]H(Lbcԟ6Ph2+l׷a^We?/5 T1}k}U#U|v({wQnb؆z re32"MH=a`Nx_aw29A#D<̠p\?vEG+'tՂz[M %DNLz9 p.!3af9nG ϛ|ހpT[n&F%s NlޢJ$fz բ1PQWY~|tAk4i^(.;8v*WT-*h2]BxJK7遊u4K:v--ϖ݃44% ו_UdcdαkfRuö7f6MV9E#o/Lln^W6v!@ϲh 3 @ | )6~?RC/ZxIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_30.png0000644000175000017500000000120111273054313023344 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<#IDATx|S=hSQ޳8 ֊RRt{TMArDqqLA$?I $)TD+I{b|s=z"~9(LV~h^X6 @gf]/5l^=OZk DZ9# )+<-K*U:&I$WG_̠ENhR$ Fu-S#IkY1ux=!:R'!z] {!7!樳BOYb: SB]aqW|L$/aiT$h+¦پ)sQ"_d2@0dL3WzE8Lic/L@4ll/x corx7 pzPeU`]eN/vQd8hbP#TE=t R>Q2H(*_1_Ҏ'+xQ31p.7hy t_1 EQyIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_45.png0000644000175000017500000000107311273054313023361 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڌSMK[A= ֍KmƠ+qQ(t#] Mytgkݹt#.4 B\RƨJ컞y3Gk wɝsϽoD{M4m1鳐UE2N]n7c/w%嬂sQ%=䠠V Ŕ蜷@ Ɵ1!8 x g J^TkeD#c i}Yǥ"Q(o6q42@L|F/SſC(8BjH'aR_⦈5ǧyM?'V'a$j BRWvhkRi vrdf7=di7jY s6.mqYcW 6HޚP( T^9haniIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_7.png0000644000175000017500000000710511273054313023301 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F`IDATxTmLUs 5)A`5c4T6YYIN-`jV3WV4L@W(XQk&G!Fh%s9>LOχgOO@PA:rv.c6 3 ;_jyWnr7$v\޻ɶXK4t msg 5I.hht'`eib TTC(G"am{՜ZPpWS}d/&ٸUuarsgQ; ۿ WPsNGKE]GrJ".PPq|q}d\ };wz5-%8\.]PT݁z>xwwUVw~=|^7e+*a{1 R]/,hy}PZ[X +o@UT-K֪ F چRط'2'tߕΚIK(QTE@qv"KbΡ1j-yAU5v nȵ22l-Ew|K6L" 8 `BseCaLWdi76<DAAqlDYr֝f7.}3'! ͆2 iobY!PH~ZXڻ$̫N'lZ-X 4汊>lQs2-}E'6`ٳ U/qaߎr2ӓ!u;&@ UX pvrҭT|/IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_22.png0000644000175000017500000000114711273054313023356 0ustar euroelessareuroelessarPNG  IHDRa pHYsodIDATxMkQwnr;i#UVX!ꦘJwE(n\t#dF(m]? Z] *hSZ5!;cҵ89\8G@5: L_S6vg>Nn Ґ)K:zgI ЧysE )h D(`.3YyمQ@~G:lфYWX4 f"a\L %)hզƔCkzG4 $77PK2#QiDds,owvǙ;]XE.4'}w#V]xZDn)wzaI6:e6 ?R1bgp+ =4:&ޞ>tmX ob %b+PҳR/l+Dv{0 \p.p}\Q(f?w^>/iURCGs~{+2L _ݹEȟ)f8t2ƯIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_chat.png0000644000175000017500000000703511273054313024054 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F8IDATx|[LwƟ#*V( <4DH\`6GYBCRf1܍&JP ʤH5L&FE; VRZ> B\f@<2 x֨JBB26{;W/]- \zt*=**[[ZԖa쥁`4m[WWtv^# f!AqאaH~PzD=qg$5 _7m$1'"ZH{~ 6ד^F H u{ػe2s\9ӁXНcz|lj)Vc1fm$Yߔ)i,r?CO9&dXod]rIRA @kL&zը< )u 4#-*:#YQBmT۳yv"v"-2(H}^{<#xaʹwu]?L4+SBBaF:-0W0\;8w}s&]Hc7`WS*D{b@J`mʧouʩߏ!i'93%JvmyLv+yz<1BRYrTku} sg4hO~gEhrd[=ZIRHJ)B2Y"u R&,aEĿAaW I#=Y1&s-YIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_24.png0000644000175000017500000000647211273054313023366 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FUIDATxڔKHqǿy#\W1u}`Q:5CCE]2Ȃ]2AHI>:X:;3:N]b|}v g_<$~Z=Rz !V`~kcK\TuB|qlxa`4 ݝ=釚a)/䈘sޔhp uPGbdo mo溳~`;~ԧʜ K!0tM'7Ͷ8X$0p|ۦ80#}`On} _0B+ݔKT{7mքݳ\͗bVRg&[t,ʹ\*ӛtduquh_k!;!?*.8XNx9E_|`xYs0h M+qFG7+޾i>`σ46-с}%\6XB)Jvm?I jozcV?J᢬,)<{9^F4B >VC44Sk50\d ղ_s+MgIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_6.png0000644000175000017500000000705011273054313023277 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FCIDATx,[h[uN]&i&lU͡+&j' >ч:AA T=*чDq0PXX:eW4k.Mrr9P~?w6xrPOC 0%󙫏=VR9V6 OVh6-޽3 SVvJ#f'h] /Gsvm~aAbq*d>W|qC*Rcl VFM%843_@ic66y蠦$bnGBŠ=e61m FFacJa0ܤisx.<= _P||. XrtneA m\W{08nnBeжNE]:T}HE J4vP cɁ/.f"J Bx.h^6 ӏ-dWm5$]|)'lM6`Vi: \)O~,X?ai=lҵW*OC T_^D$js)+N/$3 O%Z$7Ē9NZ4o{5NynSZᅪ@`Fc?X¿`H/uLDFn50IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_16.png0000644000175000017500000000664711273054313023373 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤOO\U@{}ڡn,f6-'@BMc~Itcb1`JbtQM4 LF,}-!V`{5<QjRl4'& Лvb Jw1ۏ tt-twU L;K+/13'N B>gcSm,zSO&L{ǣ###ojݫ 6 "`:ݻ?H\][9dւ ZFuNwk478mF<{E0Fh2lGv >vl>js.$6^be%IlTZ_h,.r(fMɕިծ~}J%=@kkA-hTÿ$*IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_5.png0000644000175000017500000000660211273054313023300 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxtkTg;s'33IĀh46`4Blun"?mqV.*v mGkUhAd}ӅF1gusC߻2^ZÅ]GOLߗ"{GĿծ_ƿK/ZO[̚@9~^eljs{ĩIAޒƜܿJ/m{B+0:O=>%N}yV;#sŎ=y1$5#]%Z54{7ᩉ[.?&eEcDӿJsWѹzubuc ?E;gD0 %0h18o}&:oNy*1\C∔ZOd5A{/?Ht_٧2āeplPiXf8rbU<=#0͙9ҸKycXwE]t!T3/w8!]|D6WDA+bū:Qz'/oXvlV"E: *mcU:`{:[އd=$hTk9RHݢ$&"JCt&E$L\IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/STATUS_INVISIBLE.png0000644000175000017500000000160211273054313024153 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڔ_HQ6fi/3DkWh"gV(YC!4A|KZ I 35D} iYa+9ܜΝȇzw9s=! FgdYD3Ij^jVJ_`oJX^nT4l3?gS zHzzttF}_7m0ލɳ?igvL o!nXv,yy:g}qL]@ض@ڿ?zP/_$rv+ Z+YY V<<_*͔ؖ![X# x:yOۓBur*;KV S0[W9=M666qH\"m:S)#G״eBsTQM W 7GE?iysI}t ~FI^~%d@X@h},2nƑCG0OGh}ZcٵԆwMO.xZ׭l+KJ/8.p˖K~Aߠu}꾀űC{u.=뎕)D-H NcXL/2eYMEr9Ri 5t!ީ"&.k_3 !ʏʜezI"tnI|%k ic:at10W %6&>IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_53.png0000644000175000017500000000102011273054313023350 0ustar euroelessareuroelessarPNG  IHDRa pHYsodIDATxuS+DQ"eecIr,,E߀WVUR1DGF3>ff~;3:s=w~sCX~{lʃ@s;ψ CYVhWdP0O8%;2HSށL| LB27 IU%}ܔR矀 .%I:hgܨnYdS˳:9 BMx"= {諣Q-DR鏔XD#?c-'Jq&\>L!1y*ƹ%TZQhgmpO"J?^v@S1<ekp'LoR['5m&%Swe/4')_ݴ\H{WJ.yS.5QUJ#m7P}z}(Ava ?a`#-3s o ?2G*IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_21.png0000644000175000017500000000661311273054313023360 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڄoTe}̝:u %FB4tg?w#] aaq㴷1qWĸբDWV ?¢eޙ{g=EM5)ٜdWODnW/ϝ==Q=N8iG|e%H<TVX'339\|cqcwu)>+vKwAM^b$չ3/㣅%;(f Pn(>O[ XxlrTuR@hL|cG[_ K;> 73챗?>W:8Q;7!?mw.\Ig,CC</S+?\4mnu(9ֻEpسsб!AA +-o~)9'8U2 &A!Uz0 7!xog>f)  yot5p0ãPM3)! "VT:<տRy) H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F IDATxڤALhZ04II{B`2^ҹtv0"GRlIkARKͶ~#ew3xyך*DW>O?ިZ^-GoKjW.]JzK㒎Wzs>"I'%b$=_\\B`Gǀa]c@se]cs3ϡ%g_bVd8ks|7Wm||Px#6x8V*#}>(LMΦ_kg˫8;:> ,g$5ZuA#?I:>W~*Mtf'$ If`W`8?zε^z&^[V378e}+&Ӧe^06 HfP腗O_Mߙ-,*LU Ici4vV  ad63=lғIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_38.png0000644000175000017500000000123611273054313023364 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<@IDATxdSMHTQ8j!HTEyH킠U-Z `[iAзh6Lf#ZVo9}獎^8s{s޹JD:$]˿8b8@DBDj=dP<-!|A:P^LLk'.P\h) ;RHobE_jDª#rU `PB*9ea/seyi#bf/ Ѹ" '&"߸9mc9G`rZd%Ddm |>BHӝY؃oudu5699_I6yb+62T@C^IGrtK*Zjy`C$Xg;s&8AΞf1=8l6z3 cO]mh3iSn=ׇ<{sg-*n5r_tpg\`ы}BMU{/8 #IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_51.png0000644000175000017500000000140011273054313023350 0ustar euroelessareuroelessarPNG  IHDRa pHYsodIDATxmKHTQι3u1˷H**LV֪آhFHihnmZ"P|Ta45tЈ|p8;}y1oSHdvO=1Ga^ B^GUk\h0}מl-fp)3d A, v?cyo-ߟEcfPґ'rxg{6mp\A B+ݴ1|pf;^t_Ӻlʧ@u~MÇalckyK{Hͭcfn@] FwWQcTxZUC>IL#Q FS+ ~ D<a}u}xupPyFW*Pe0 RPWS&ŋ3Urs%G~oh\VpEB]1426 n: w~[&ay >  n+QZAH!s Qofsi.@Qj5?vBbДv{e1if{n,by se q/e!ĖGxu%PˑH,9M M[T{FIiZ2]j )V~~xTgp* 7(9' we}]3R5o>!qa_rH W"m*jPc tBTюg< p7!\2*>Kv33 Qع-;1 kӼPo}7H2P W7X}"4Ұ$&: /3䍿066 y yr IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_35.png0000644000175000017500000000102311273054313023353 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڔS=KAAK(H@Q666 ڨ`D X B`ҩ1Hoor%)\x3fNC pܘe7ߍ( }D%t$nc*_2W<@?slLpqsJ t=ֹ Sqɿ&sahbcHT=G*:kAaVh`y C5"$ `^y2]\ki:{OJFWFoS<<:KDb׈<lwW!<=JHCQPNQ?" <3|J4F1gR#]Sv5j`Hhn&įlطP)*W (GfZ 5(yddf]yXw^- >2OR$IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/STATUS_ONLINE.png0000644000175000017500000000157011273054313023617 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxڔ]HSaǏL氦SQ$njhY :o@T$2C+$ AOꢆ6Rk趣yzND7 #I97P@8]`ا?27::͊!Рڬy%=׃+qnUUO0%GlO:7NI(f'9 PmpO4 LkDYd r B~J18O]C֡w*.#=A2Pj4AzQr!#rW\lLԱT%4jsCz.Q5SIS t:!Yl*މ]@0ˊf"J <|Q%\QbA%( p;fQwNO&cApPML ?108B9lzkjb].X{;/anJ.6[(@τ/QU jm):c]Wc1E8⥉ !fUW&<6o q!P,ּjez">O vvdH$y<TM%|OUgk6wK/&e";Sa6bllG6lhkݡv3Eec]˞aN%HXR 5ke:T0E {`tdvIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_39.png0000644000175000017500000000111011273054313023354 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxtNAIDACH"mJ!M4=/@MAGHA$co6w;|;Yν3wf^&T^ay#S4/ bľ?2@`R'"yйb طw6k[5# NK|hMT䥠BAU~})h y]n.Q}{/HPD'8b~(uՁC$G C 9zdyd' >G0kBvk77Hi#@fA+98F6y%{V@/03v25IsL]6;b∺D0bN@'7u5&ν_OLr $RE9JvU ucy] jɾ&}*K*o.@6-}kL܅+ӞG IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_20.png0000644000175000017500000000677411273054313023367 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATx\Ih]U9!K&mڴ$$hnRl7"PDЍP*V܉ B(- JKCl |sH}v`J{y#_ˢ,Al! yG  wz ӸG{?F D1AlG/P|m]֎X<Yg Td= /C4>/M*7.7)9wHksx.rJ)q<~a*Y[NOwye^ye>}6Z (,I}jcht(7>¬ʴLsJ <r}h ugt/Sh]<;PVfAEd` KެXΟW?f}':[+;6D'NC%H{D-gYY:U,7qK{ !l#38Z+++ZXIQ5)=49XMsh@Q WddED'Z&3)n4)4q1` l?f̨;+͸جqE4p 6s|0,JdsG~ySI% +r9) NtƐz{{eGcV~\>W7 5縋>w`ͻy`.m1?l8;SIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_34.png0000644000175000017500000000117111273054313023356 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATx|S;hTA=o]j+"HAo,(JX;Z66"L&XX$>(*ƘE#fd7lg>8o̹wD"n9(̸DE4/?ewBYol^=Mޣ_|,81F!yԚuI{/; N$ڤy, ? 쇂'ُgacO T h '3K2S;/oud-f["jZ6M"VPӱw0MOx\M3Uzـx@4%x=qY>q8 6{`iv' lXxv`ja n^1Ro KԒPgBDee%'2p+$]s1pfŽݙPqP. d!"e.6=qu ; ъ8 IMW; )r䙍kՖ)& Iɢ-:ܛ'k!߶}I7<FMKB)Ȝ-/OE_"vŷ`㉋P9IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_15.png0000644000175000017500000000666211273054313023367 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxtOh\e7&I'!Ii hB*ZJ)q(;7n½]Bw⟍ JkcFJIilML'33޼]ƒJsVpGr WFzsŧ^v^AOnz0\Y4rn_1šG0枳puV39ny֣<;z}hf>ͥQ9yBF(`p'~,(:峏v⡌1>ahSn4>w%JCMN;qNwr~-$q;*-Y}vwdǨ' ,z{vt F0FX#tD]<{ɽ֮Xٚ; #.^ګqǨo[͢@[ko򭙩,< 22q8B.һ:5ԃ OěyS.z]գ>VӶ$v4&y_4A7Ah F m;!0 FU1@ H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F=IDATxڜ_HSϽWKt?7uQF  {豇‡R %J$%-M.Q*VH$#4@0[fYU{|r9{smEvǥu A1a [w, g_pL:͋?bQTޅm 1 Egx L\71PA/0Dw5Xi}ҩ/fZۀlt*1 "]6GFmLfYLZwX*Xx)ѐ~a;ڽ}>f 3=+0 "I' 5aᘶ{Se BGRVLJPIMzp4,}RK-@J o:/p 5Mr=B4|2˰B #WP G, czrP*0+Oq q9UfK;1{j?؛z&8ϻ+Pԕș/#},ergn)RlIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/STATUS_UNDETERMINATED.png0000644000175000017500000000157111273054313024744 0ustar euroelessareuroelessarPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxڔSYLQ. `,ŅeQ%Ø&h‡/ 1Ř&,,b(LYjPJ#ݰ3Sh>35MN7w;x  lgZ ȝ\Hnf}o4 3DѴbpxf֜  =2Yð5fUN>~ffW&O(G{zZgeeEtb Q/'łܙ+p> 2MIZM~׏\§s= &F*PNVk|>iOLV&իTYV hb g0[t~i*]Ww/j++q.9i ŅD!y,Y&j :o\v; jX$OKMY5M`-ry<%t\ # 1:#6)7 *Ui)A"JB1-aEIw^D |gbEAܜ7U=ZZZH" *Pg;Jnll  |b¦q\F*Laaωưuu GHsK[8ӝ//+醳m?tZ33|B(E}gd{Ąglu)d++SO.=QF&dLLkGke]$Rqq.enΡ6 $*3 g^y5DigmU4*IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_47.png0000644000175000017500000000137411273054313023367 0ustar euroelessareuroelessarPNG  IHDRa pHYsodIDATx]HSqƟs}61Lize]7]DeyQ]YU$H**!J% F %BQNq~ܦ;?H?uHakPEag hs0/Nͷv YsOM\hQH=֞PtmWhmcx$#2JD^_P_] he ލ#&IK;VZN-ɤ:Y MjNW-^$,fNIUIJU]Td2oKm틪zIU! b2EW=!Iy? JIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_50.png0000644000175000017500000000102411273054313023351 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATx|S;/DAZXMH3+T DP 5*$ (hJB4b׆+2q}s̙UZkmK.cZ,`'Avuxd-bQvDM rJfug`z)'"r,~>7瓃;`p[&Wt0Z/'F,&OxubWDZ/O͆3+' c-zWj I]'%1|dq2IPF`Tzw0ѨM5RXO^@;:z60,h Kr<ӫ.F]X\ԁ ~`ܗC~`ia_gaWL[z ;Ɨ_vܴgIP-#hwk`Z9ƪ(ξLO*M/gmhTr2m)uQ(ʭ\^L& #[O{Q~O֑Y }2 Eldz[hgjq| 0g3:IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_9.png0000644000175000017500000000674711273054313023316 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڌOLuy>}d:e`P07.4d"&J\.herX`e:]dPډy~?/^ua86wOju50a/շh6ŶQJ(s?xr^9m?60;_AG`jfS7'h|f);u:hܾh|.-'E$ 3p%&`Vn!wu-?ax=WR5\(UjJgn.˙3ph%eh'h'MT0JHVen-s|4 e,1؁ƒ":l_@ãxA"'A/L=afS"у,.d} D+*ǧrdm-Uf.Z胂gZuooσ44co QYp퀟3!2=H\m7k#fEAfPo CQ[)q}~ONe9>G9Qch Jk2pl#B(F96ȁ\'L010XbWg?g.h*9vm[h60և%\GhjX\q\ְm`ʆƛCHJ`.R-Cͼ7ttv=]Nz5C2xw/?,Vdë-̳TV\90'&&.uyXB='+wr[. rIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_36.png0000644000175000017500000000101311273054313023353 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxtS=KAS m_"" BRh%XI p(B@`iVH# ,v>y;313y%=9(>SY|5_ ooNAvJ -XvF>38=d}^A"jc*76s3\ B_1"5p(_PFZNʙcx F9G =%Jś7+&QF˂ 0@Ьi 27:$fp[8|x`HuUJ? H(A[8ʬw " SUW=$QM{)p%P- K͂:\|,'N1^f%dD9>h D@[s9ZIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_37.png0000644000175000017500000000113711273054313023363 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATx|?hTAƿ<Z IM>;k-,BV+V"WzU!E QsBĻ{w$޻yݝ bƭhKoXz߀n:3 2'3pvk֔U!;uU]܅B2]pohb׶S!u@@h~Pxl9f"M12IL"V_xM_Z~D%}W!R}$9| Ҽ+wh?:+Nj٧>M^DcW=z=sg`fge!B"]dٙ5jQ{.ע߆}I흸HU%feBڡp,}E\ 2ӽ`hk!0_>1e|,VFuoIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_40.png0000644000175000017500000000120111273054313023345 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<#IDATxlKkA=xxz'"B\=E!ÂDq'؝tϴ;[PT3G0Dby3:94끞1.πF;Wq. 뺤O)N~g39>`QYVF01PTo"*!6tLfJDlʉ\Ev? \. EmmFeeP@HqWloHD9hך)/k-u:mG_6IJ1 L]H{?"$nKY"cǰ>hﮒ&VI歈x*WKieF/ ۴|ZJ46PP{r\LxuuЋO`0#zN: n@ƭ@(/J'>O3 6Bܡ57<rPdv@!'vL&Fr@ ߨa*"BIO(0͛E=t qTӼ C (Ѽ\D:F.q"|Lr-D,V IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_27.png0000644000175000017500000000662511273054313023371 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤKSqǿ巳sܚF:%5 g]$J(ug" * /& " _BH-Pwsn;D$ >yχ2 O5ZNҠq{50'Ը]Rt&uR};0<[;P:X: Y8OCd6%GL-֑@5L( Q^W{rຣШw;'2 xGugbv{sw%(L"Ո5s3@fAVU7!P F# S…TwsZ0XǨHG 8iy DF¬,-t \,s?Т0.ha84 Yg!+4dFV) ; s(kih[<#oK8_Az+c5ݔ)/zpH X$]H@%:22+948>Z_J'cӥDzY4,.yxŐBhͧ \PJ-K0]LrkʊWJ3q6MJKŝ YIuDZ hßXtAO WLV]{Z/f[w'&c:luIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_8.png0000644000175000017500000000637311273054313023310 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڌOSQ?WҖ,"?:hjb\LQ&hhB"I$ȏ`i^~-0@;;Ϲ|AD8HJ5`iКD5"J МpjcWݺ\_,9}p(+p22Ybɑ;""-ʣ _AI!5(VrOADXcO Sj015/$x߹PVHF؁;4kH$e)Y.vR>J5L_;vwR[gIJ2qe,E&3\8rDžt.^)yteIhMUZ3ȟL8hKi~2zDxR,ϮPx,Kgr»WfZDPJqh{;x ( Nf~|迴K{i^oM/PwX7CwG >ig+.B;έA]- N4IVMUMRsIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_26.png0000644000175000017500000000653111273054313023364 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FtIDATxڤKHTa}|3:3c3oD* -"4hӦڸ,"Z6EQImBbHI0!sRrf33sJ۝C'>PpYݭfZ2Ю: :@0G[xxl dPv uV*nDj)`9"t"zNH[5uP˽N*`d t#fP8)CDzz7?D6C2Tp9۝0M<1 N(*856Þ' .#3 16dtS1I|P,m?x9n8@ M*`pfI~ mXwW/[1h(řbFu6!jF늖ՂƝHI}{<AE񢶦: [ʪ\0%_a*6HEe ]Y+523*kUq3s+CIdu@E'>_۩:TB(eA,rXd@`jІG^ .kWӟ\ Lސ2rh6.~ aO3mIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_14.png0000644000175000017500000000700711273054313023360 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F"IDATx|]le>]mWUb/L4[&D.͌TBq`"I PuL4Qd9׮-]bь眜e)0;ױʅk|<0R@% Wy&<ӎ$k=[FXo 3 a\_OjNRF3~ l;nO`<ڊ5uCF线9]t::ydj23mE7θ,r H2ǃwn$ut_RqJ k7ˣޕud>#4hms }O6iZv/G ^70aMoOs/8Q~QOI-bL(#b2仡ZG)9%re?͚B:/H{%1􆘊#Q1yȩ?}>&5ّ},Ke~=MoO;\ -kpy/9~:!Y!c/UK!?+RqeI|TJyڤ\8 ;c|;"K)g4qģm֊r@lUhs409A$Dў4UU)v%~0XH¥Is@ڄM^a0f"gHʐ!p !r %7nWnW~6"pQYB8Eyw֮5 שf+coƶ+&=| Z+%CDE X# ? D/ ;VIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_19.png0000644000175000017500000000665711273054313023377 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxtKLQmөHRh-hԍ5ˆčԘ`+H" Q!!!&ZT >ҙvuA,{ϗKc M}?gO(&]}H· ǖ kWՌ1ܮ~F)cB2U(@m؜cL"x:鶲ѷM=p7I; e%CmZ")l\!i}}_|}觚O:okz~P>ZQڕD5-![THnRDSxz맮,))HV0 }L}q+!&_Zޘ2:&s7cq,yrtF0}gLdQV)߰X+9pga1j^oQTXS`ZYxtV]p ,=ggHcK:ɉtӭfx:;h7{}6 BmTPaYe \_? %!odq'jP0xbd2eQAȤ99s^h:A0@*3|"@zN 2HRo;=b]h{?b%ʶgbF&s}a 7l^+lJ8of8ڤ>H%IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_33.png0000644000175000017500000000117511273054313023361 0ustar euroelessareuroelessarPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxtSMHTQ pQ?((H%jʌYoZ . qa(ԭ 1Jqٮ# .$~Lıʱg߽{sw޹R'rW|ebz{De@,IXµugbmM$r7Co d{D8܅ɜ$G++\zw)N ;RR$h(7?)&dGv^FSTu~-+'B/G Mm9t#ҹD[JlDW[J`j~-SqnK37I@=Ģ}1e'|ݏtEvDV@` nJb{ ?f1t?DeL|~:NΊ"?) vF/M9h\$ʽ؎G7GpWjY̝$68FYԐD\BTI'(2yjs}{t!xyο$:*,=' 7IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_11.png0000644000175000017500000000675411273054313023365 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxl_Te7vugwuJP")M5F/Į+SЛ.*›". m!6(tŜYvvߙ3vAW/<Q"R Q)˦,b6xqw0Dyn\8 DV˙ZBƶIk MҌBAH=՚ ~/#"h狏YӧnOqA(4(E}bKyDs,TG, @p5/8Be:와If66<ןgO+e+G5@G6ql^>v[vܺAv=1ed?l!Vߜ8>ƄTKmFIq6"%:I@ʶY6hX?!xܻ[78?7Z; hhih'{_z\AZD2S]ddcc\a?Ĵ(Snգ6i{mPKXu:ŹQ+Q}D']@'G;ء/?W%v?_Bsl7uZBXpB~ oi9m~/Lsp!fh~0"0)`9J)6Mg'8۲!e+tFQ!1A(=^Y~"R*xQ֬i;e+ #B$x*E%ܩeJ_D# K #; <0{x=i>N;VO6Hp$m (D-1Z&";Tm:IENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_48.png0000644000175000017500000000142111273054313023361 0ustar euroelessareuroelessarPNG  IHDRa pHYsodIDATxRmHSQ~ݼs}8q,DK "2A(Q?'#% "# B`iNXd-ݦMǹtV8}xpĬԪS4Ղx+K?KMFS^~%>) J! vZFͥv,O%{D W:(Ч{= pZcj5X+ cҾ+׾%ƞH0$a|<Ӣcb|L, Ģ<>qN.H v%?$D#K0/rrsBH;U}8 Rka60iKxv"E r곹.Ŷ^mV 5V4L.FbQJƌNͺB*؇DD~v\/PEad4A4}"ѸpNBM%ct#^&98 dHgQ-LHk" E jQr3sKsAGcTXlE! euj60mcJm5FJ!yYU% ?iҌ$RPƵ*nY﬇B;~FHjfUd_ ,b^BvO tm/zcS._5U?-%@T:_[kn7r=ѣ?zIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_12.png0000644000175000017500000000677611273054313023372 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxt]L[eihA 1uc0N -$ih8N 1\ċH\etfPJ(E =gv'O~!m?u],ܤ/Fc: EocY(e"VcG 1>}g"X)`s~%^M@ΐktwQ f&A8LL;d#)Hj`6qhv!{ u'Ri64ͫE̬n&ّ*=SS5~?}Hp[ r>[u|z+xTJLIݠlây'9l}drGJ]zZ:usp ~U9{j9>7.lBsX|u\NKIENDB`qutim-0.2.0/plugins/mrim/icons/mrim/status_23.png0000644000175000017500000000671311273054313023363 0ustar euroelessareuroelessarPNG  IHDRa pHYsod OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڄYhTwƿvgo& 1Aj*.AECR*.o 10 -h-BDAb%ɌɌ$s|T4>=]O3v4v~xg7teZ L^9JKW\h]B |sJzSbՊ9ye-̝vA=׆S'4=DݮO[k8ånoJ:zIΙ#A:@',o߼;c֚g"'5fWw)ԄP,8M\ ޡ,O[E"v:\#a3P.c>P)9L` !TEKQ^Q)mPМ._BRFf 0ys 0qDR5 QIRFy(|Br/zT׮?Og"Bv~׮TCr਍TT($ˍVUI 34 / B#xH !!S@eoꍣUG*!d,Ca^>~HZ~GI;zNqi٢<)Jx1GjYGr_(rfmʌnooޖ _5SF  Qd/ŷ'm?r>Y7z=YiM7R|:IENDB`qutim-0.2.0/plugins/mrim/icons/clients/0000755000175000017500000000000011273101025021505 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/icons/clients/magent.png0000644000175000017500000000170211273054313023475 0ustar euroelessareuroelessarPNG  IHDRaIDATxڭ[L[rJ)'Bt-XVJ΀x[&DcG5AfbD$:3JL l2J)zo9=CϥiɌ~O!AhM&p:f$zYBO77rYQay0h6z<' Q\-oՌ翬}Hzb߆l/8Ú߹rǩq3v 7Ϲkg]G9Y̻o d,wyb*{UX 0vhzz=?xj?xG…F؆v(n5{v>I&3F鸆 mJ0 k,Q7yh4cx< P@Eǭ,HAvx(lUJ2tt ^ 8F}Ar%@}G\QMAzKwh؊SCcV &rK75\.JETUu盧}G実,6&oeN;qTdy$IM0tPFӱ#ſnIv BQm_:&fדI8hVŲlO>v ~mhT)ޕ-3zcqqR$+rԘh#vLFPҶ-}/[~], 90LonZz^/I;;j' lGIENDB`qutim-0.2.0/plugins/mrim/icons/clients/imadering.png0000644000175000017500000000575311273054313024173 0ustar euroelessareuroelessarPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ 0ŗIt\;8E!APutӵ Cgb$.}2a"Mdդhi:XqB”9Mi`Hjz<)pG\ܼSʋXQ@ZI|5Z @7vbXc۱LQ$c~,!~ )Ď:g>r~@mz.N'[۵w *************************************************************************** * * * 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 "mrimcontact.h" #include "MRIMUtils.h" #include "MRIMPluginSystem.h" #include #include #include #include #include #include "avatarfetcher.h" MRIMContact::MRIMContact(const QString& aAccount, quint32 aFlags, const QString& aName, const QString& aEmail, qint32 aContactId, qint32 aGroupId, const Status& aStatus, quint32 aServerFlags, QString aContPhone, const UserAgent& aUserAgent, quint32 aComSupport, bool aIsAuthed, bool aIsAuthedMe) : MRIMCLItem(aAccount,aFlags,aName), m_GroupId(aGroupId), m_ServerFlags(aServerFlags), m_Email(aEmail), m_isAuthed(aIsAuthed), m_isAuthedMe(aIsAuthedMe), m_contactId(aContactId) { LoadSettings(); m_Type = EContact; m_Phone = aContPhone.split(',',QString::SkipEmptyParts); m_Status.Clone(aStatus); m_UserAgent.Set(aUserAgent); connect(&m_Status,SIGNAL(Changed()),this,SLOT(UpdateStatusInUi())); connect(&m_UserAgent,SIGNAL(Changed()),this,SLOT(UpdateUserAgentInUi())); connect(AvatarFetcher::Instance(),SIGNAL(SmallAvatarFetched(QString)),this,SLOT(AvatarFetched(QString))); //TODO: as local var, not singleton } QString MRIMContact::GetTooltip() { QString toolTip = "
"; if (!m_Name.isEmpty()) { toolTip+=""+Qt::escape(m_Name)+" ("+m_Email+")
"; } else { toolTip+=""+m_Email+"
"; } if (!m_Status.GetTitle().isEmpty()) { toolTip+= ""+m_Status.GetTitle(); if (!m_Status.GetDescription().isEmpty()) { toolTip+= " - "+m_Status.GetDescription(); } toolTip+="
"; } toolTip+=""; if (!m_UserAgent.IsEmpty()) { toolTip+= ""+tr("Possible client:")+" "+m_UserAgent.HumanReadable()+"
"; } toolTip+="
"; toolTip+="
"; if (HasAvatar()) { toolTip+=""; } toolTip+="
"; return toolTip; } MRIMContact::~MRIMContact() { disconnect(AvatarFetcher::Instance(),SIGNAL(SmallAvatarFetched(const QString&)),this,SLOT(AvatarFetched(const QString&))); disconnect(&m_Status,SIGNAL(Changed()),this,SLOT(UpdateStatusInUi())); disconnect(&m_UserAgent,SIGNAL(Changed()),this,SLOT(UpdateUserAgentInUi())); } void MRIMContact::Rename(QString aNewName) { MRIMProto *proto = MRIMPluginSystem::ImplPointer()->FindClientInstance(m_account)->Protocol(); if (proto && proto->IsOnline()) { m_Name = aNewName; TreeModelItem contactItem = GetTreeModel(); proto->SendModifyContact(m_Email,aNewName,GroupId(),0,MRIMProto::ENoFlags); MRIMPluginSystem::PluginSystem()->setContactItemName(contactItem,aNewName); } else { QMessageBox::warning(0,tr("Renaming %1").arg(m_Name),tr("You can't rename a contact while you're offline!"),QMessageBox::Ok); } } bool MRIMContact::HasAvatar() { return QFile::exists(AvatarFetcher::SmallAvatarPath(m_Email)); } QString MRIMContact::SmallAvatarPath() { return AvatarFetcher::SmallAvatarPath(m_Email); } QString MRIMContact::BigAvatarPath() { return AvatarFetcher::BigAvatarPath(m_Email); } void MRIMContact::FetchAvatars() { AvatarFetcher::Instance()->FetchSmallAvatar(m_Email); AvatarFetcher::Instance()->FetchBigAvatar(m_Email); } void MRIMContact::ShowSmallAvatar() { MRIMPluginSystem::ImplPointer()->PluginSystem()->setContactItemIcon(GetTreeModel(),QIcon(AvatarFetcher::SmallAvatarPath(m_Email)),1); } TreeModelItem MRIMContact::GetTreeModel() { TreeModelItem cntItem; cntItem.m_protocol_name = "MRIM"; cntItem.m_account_name = m_account; cntItem.m_item_name = m_Email; cntItem.m_parent_name = (m_GroupId == -1)?"":QString::number(m_GroupId); cntItem.m_item_type = EContact; return cntItem; } void MRIMContact::AvatarFetched(QString aEmail) { if (aEmail != m_Email || !IsInUi()) return; ShowSmallAvatar(); } void MRIMContact::UpdateUserAgentInUi() { if (!IsInUi()) return; MRIMPluginSystem::PluginSystem()->setContactItemIcon(GetTreeModel(),m_UserAgent.GetIcon(),12); } void MRIMContact::UpdateStatusInUi() { if (!IsInUi()) return; if (!IsPurePhoneCnt()) { QString statusText = m_Status.GetTitle(); if (m_showStatusText && !statusText.isEmpty()) { if (!m_Status.GetDescription().isEmpty()) { statusText.append(" - "); statusText.append(m_Status.GetDescription()); } QList textList; textList.append(" "+statusText); MRIMPluginSystem::PluginSystem()->setContactItemRow(GetTreeModel(), textList, 1); } else { QList list; MRIMPluginSystem::PluginSystem()->setContactItemRow(GetTreeModel(), list, 1); } MRIMPluginSystem::PluginSystem()->setContactItemStatus(GetTreeModel(),m_Status.GetIcon(),"",m_Status.GetMass()); } else { MRIMPluginSystem::PluginSystem()->setContactItemStatus(GetTreeModel(),Icon("phone_mobile"),"",Status::GetMass(STATUS_UNDETERMINATED)); } } void MRIMContact::UpdateAuthInUi() { if (!IsInUi()) return; MRIMPluginSystem::PluginSystem()->setContactItemIcon(GetTreeModel(),(!IsAuthedMe() && !IsPurePhoneCnt()) ? Icon("auth") : QIcon(),5); } void MRIMContact::SyncWithUi() { if (!IsInUi()) { MRIMPluginSystem::PluginSystem()->addItemToContactList(GetTreeModel(),m_Name); SetIsInUi(true); } if (HasAvatar()) { ShowSmallAvatar(); } FetchAvatars(); LoadSettings(); UpdateStatusInUi(); UpdateUserAgentInUi(); UpdateAuthInUi(); } void MRIMContact::LoadSettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "qutim/qutim."+MRIMPluginSystem::ImplPointer()->Profile(), "mrimsettings"); m_showStatusText = settings.value("roster/statustext", true).toBool(); } qutim-0.2.0/plugins/mrim/coresrc/mrimeventhandler.cpp0000644000175000017500000000723711273054313024461 0ustar euroelessareuroelessar#include "mrimeventhandler.h" #include "MRIMPluginSystem.h" #include "proto.h" #include using namespace qutim_sdk_0_2; MRIMEventHandlerClass::MRIMEventHandlerClass() { m_plugin_system = PluginSystemImpl(); m_event_account_status_changed = m_plugin_system->PluginSystem()->registerEventHandler("MRIM/Account/Status/Changed"); m_event_account_connected = m_plugin_system->PluginSystem()->registerEventHandler("MRIM/Account/Connected"); m_event_account_disconnected = m_plugin_system->PluginSystem()->registerEventHandler("MRIM/Account/Disconnected"); m_event_account_status_change = m_plugin_system->PluginSystem()->registerEventHandler("MRIM/Account/Status/Change", this); m_event_account_status_text_change = m_plugin_system->PluginSystem()->registerEventHandler("MRIM/Account/Status/ChangeText", this); } MRIMEventHandlerClass& MRIMEventHandlerClass::Instance() { return *MRIMPluginSystem::ImplPointer()->GetEventHandler(); } MRIMEventHandlerClass::~MRIMEventHandlerClass() { m_plugin_system = NULL; } void MRIMEventHandlerClass::processEvent(Event &event) { if (event.id == m_event_account_status_change || event.id == m_event_account_status_text_change) { HandleStatusChangeEvent(event); } } void MRIMEventHandlerClass::sendStatusChangedEvent(const QString& aAccount, const Status& aNewStatus) { StatusData data = aNewStatus.GetData(); Event event(m_event_account_status_changed,5,&aAccount,&data.m_status,&data.m_customStatusID,&data.m_title,&data.m_descr); m_plugin_system->PluginSystem()->sendEvent(event); } void MRIMEventHandlerClass::sendConnectedEvent(const QString& aAccount, const Status& aConnectedStatus) { Event event(m_event_account_connected,1,&aAccount); m_plugin_system->PluginSystem()->sendEvent(event); sendStatusChangedEvent(aAccount,aConnectedStatus); } void MRIMEventHandlerClass::sendDisconnectedEvent(const QString& aAccount) { Event event(m_event_account_disconnected,1,&aAccount); m_plugin_system->PluginSystem()->sendEvent(event); } void MRIMEventHandlerClass::HandleStatusChangeEvent(Event &event) { if (event.args.size() < 1) return; QStringList *accountsList = (QStringList*)event.args.at(0); if (accountsList == 0) { return; } Status newStatus; MRIMClient *account = 0; QString *statusCustomId = 0; QString *statusTitle = 0; QString *statusDesc = 0; qint32 *statusNum = 0; if (event.id == m_event_account_status_change) { statusNum = (qint32*)event.args.at(1); statusCustomId = (QString*)event.args.at(2); statusTitle = (QString*)event.args.at(3); statusDesc = (QString*)event.args.at(4); } else if (event.id == m_event_account_status_text_change) { statusTitle = (QString*)event.args.at(1); statusDesc = (QString*)event.args.at(2); } foreach (QString acc, *accountsList) { account = PluginSystemImpl()->FindClientInstance(acc); if (account && account->Protocol()->IsOnline()) { newStatus = account->Protocol()->CurrentStatus().GetData(); //get current status, then change it if (statusNum) { newStatus.Set(*statusNum); if (newStatus.Get() == STATUS_USER_DEFINED) { newStatus.SetCustomID(*statusCustomId); } } if (statusTitle) { newStatus.SetTitle(*statusTitle); } if (statusDesc) { newStatus.SetDescription(*statusDesc); } account->ChangeStatus(newStatus); } } } qutim-0.2.0/plugins/mrim/coresrc/MRIMProto.h0000644000175000017500000001717111273054313022350 0ustar euroelessareuroelessar/***************************************************************************** MRIMProto Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMPROTO_H #define MRIMPROTO_H #include #include #include #include #include #include #include "proto.h" #include #include "mrimdefs.h" #include #include "MRIMContactList.h" #include #include "Status.h" #include "useragent.h" class MRIMPacket; struct TypingStruct { MRIMContact* typingContact; int secsLeft; }; struct MsgIdsLink { quint32 qutimKernelNum; quint32 mrimMsgSequence; QString contactEmail; quint32 groupId; }; class MRIMProto : public QObject { Q_OBJECT public: struct MRIMOfflineMessage { QString From; QDateTime DateTime; QString Subject; //for future use quint32 Flags; QString Message; }; enum TModifyFlags { ENoFlags = 0, EKeepOldValues }; enum CurrentCLOperation { ENoOperation, EDelete, EModify, EAdd }; MRIMProto(QString aProfileName, QNetworkProxy aProxy); ~MRIMProto(); void Connect(QString aLogin, QString aPass, QString aHost, quint32 aPort, const Status &aStatus = Status(STATUS_ONLINE)); void SendTypingToContact(QString aEmail); void SendMessageToContact(QString aEmail, QString aMessage, quint32 aKernelMsgId, bool aIsAuth = false, bool aIsTyping = false); void SendAuthorizationTo(QString aEmail); void AddContact(QString aEmail, QString aName, quint32 aGroupId, bool aIsAuthed = false, bool aIsAuthedMe = false); void AddGroup(QString aName, quint32 aId = -1); QList GetAllGroups(); bool IsInList(QString aEmail); bool IsContactAuthedByMe(QString aEmail); bool IsContactAuthedMe(QString aEmail); bool ChangeStatus(const Status& aNewStatus); void SetProxy(QNetworkProxy aProxy); QList* GetAllCL(); void DisconnectFromIM(); MRIMContact* GetContactByEmail(QString aEmail); void RemoveUserFromCL(QString aEmail); void StartSearch(MRIMSearchParams aParams); void RequestCntInfo(QString aEmail); MRIMContact* GetCnt(QString aEmail); void SendModifyContact(QString aEmail, QString aNewName, quint32 aNewGroupId, quint32 aFlags = 0, TModifyFlags aSpecialFlags = ENoFlags); void SendSMS(QString aPhoneNumber, QString aText); void DeclineFileTransfer(quint32 aUniqueId); void FileTransferCompleted(quint32 aUniqueId); void SendFileTransferRequest(const FileTransferRequest& aReq); bool IsOnline(); static bool IsOnline(const Status& aStatus); inline Status& CurrentStatus() { return m_currentStatus; } inline Status& PreviousStatus() { return m_prevStatus; } inline MRIMContactList *GetContactList() { return m_clParser; } signals: void NotifyUI(QString aMessage); void ProtoStatusChanged(StatusData aStatusData); void AddItemToUI(CLItemType aType, QString aParentId, QString aID, QString aName, StatusData aData, bool aAuthed = true, bool isNew = true); void RemoveItemFromUI(CLItemType aType, QString aParentId, QString aID); void AccountInfoRecieved(MRIMUserInfo aInfo); void ContactTyping(QString aContactEmail, QString aGroupId); void ContactTypingStopped(QString aContactEmail, QString aGroupId); void MessageRecieved(QString aContactEmail, QString aGroupId, QString aMessage, QDateTime aDate, bool aIsRtf, bool aIsAuth); void MessageDelivered(QString aContactEmail, QString aGroupId, quint32 aKernelMessageId); void AuthorizeResponseReceived(QString aContactEmail, QString aGroupId); void LogoutReceived(LogoutReason aReason); void MailboxStatusChanged(quint32 aUnreadMessages); void MPOPKeyReceived(QString aMPOPKey); void CLOperationFailed(CLOperationError aError); void SearchFinished(QList aFoundList); void ContactFound(MRIMSearchParams aFoundContact); void ContactInfoRecieved(MRIMSearchParams aInfo); void NewCLReceived(); void FileTransferRequested(FileTransferRequest req); private slots: void receiveGoodServer(); void connectedToSrvRequestServer(); void connectedToIMServer(); void disconnectedFromIMServer(); void disconnectedFromSrvRequestServer(); void readDataFromSocket(); void SendPINGPacket(); void SendLOGINPacket(); bool HandleMRIMPacket(MRIMPacket* aPacket); void StartPing(); void StopPing(); void TypingTimerStep(); void RequestMPOPKey(); void HandleChangeOfStatus(); private: //handlers void HandleContactList(MRIMPacket* aPacket); void HandleUserStatusChanged(MRIMPacket* aPacket); void HandleUserInfo(MRIMPacket* aPacket); void HandleMessageAck(MRIMPacket* aPacket); void HandleAddContactAck(MRIMPacket* aPacket); void HandleMessageStatusPacket(MRIMPacket* aPacket); void HandleAuthorizeAckPacket(MRIMPacket* aPacket); void HandleMPOPSessionAck(MRIMPacket* aPacket); void HandleModifyContactAck(MRIMPacket* aPacket); void HandleAnketaInfo(MRIMPacket* aPacket); void HandleFileTransferRequest(MRIMPacket* aPacket); void HandleOfflineMessageAck(MRIMPacket* aPacket); void HandleNewMail(MRIMPacket* aPacket); //senders void SendStatusChangePacket(const Status& aNewStatus); void SendDeliveryReport(QString aFrom, quint32 aMsgId); void SetAllContactsOffline(); void SendFileTransferAck(quint32 aUniqueId, quint32 aErrorCode, QString aIPsList = QString() ); bool IsUnicodeAnketaField(const QString& aFieldName); //utils CLOperationError ConvertCLErrorFromNative(quint32 aNativeErrorCode); quint32 ConvertCLErrorToNative(CLOperationError aLocalErrorCode); MRIMSearchParams* ParseForm(QHash& aUnparsedForm); bool ParseOfflineMessage(QString aRawMsg, MRIMOfflineMessage& aMsg); inline quint32 ProtoFeatures() { return MY_MRIM_PROTO_FEATURES; } //members MRIMContactList* m_clParser; QBuffer* m_RecvBuffer; Status m_firstStatus; Status m_currentStatus; Status m_prevStatus; QTimer* m_PingTimer; quint32 m_PingPeriod; MRIMContact* m_addingContact; MRIMGroup* m_addingGroup; MRIMContact* m_modifingContact; CurrentCLOperation m_currentClOp; QNetworkProxy m_proxy; QString m_profileName; QTcpSocket* m_IMSocket; QTcpSocket* m_SrvRequestSocket; MRIMUserInfo m_UserInfo; bool m_SaveBufPos; QString* m_IMServerHost; ulong m_IMServerPort; QString m_IMServerSelectorHost; ulong m_IMServerSelectorPort; QString m_login; QString m_pass; QTimer* m_typingTimer; QTimer* m_mpopTimer; QList* m_typersList; quint32 m_msgSequenceNum; QQueue m_msgIdsLinks; QHash m_fileReqsHash; bool m_doNotReconnect; bool m_cntInfoRequested; quint32 m_unreadMsgs; quint32 m_protoFeatures; UserAgent m_userAgent; }; #endif // MRIMPROTO_H qutim-0.2.0/plugins/mrim/coresrc/MRIMPluginSystem.cpp0000644000175000017500000003710711273054313024244 0ustar euroelessareuroelessar/***************************************************************************** MRIMPluginSystem Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "MRIMPluginSystem.h" #include "MRIMUtils.h" #include "ui_settingswidget.h" #include "../uisrc/loginform.h" #include "mrimeventhandler.h" #include #include #include #include PluginSystemInterface* MRIMPluginSystem::m_static_plugin_system = 0; MRIMPluginSystem* MRIMPluginSystem::m_selfPointer = 0; MRIMPluginSystem::MRIMPluginSystem() { qsrand(QDateTime::currentDateTime ().toTime_t()); m_loginWidget = NULL; m_settingsWidget = NULL; m_generalSettingsWidget = NULL; m_generalSettItem = NULL; m_connectionSettItem = NULL; m_selfPointer = this; m_protoIcon = NULL; m_event_handler = NULL; } MRIMPluginSystem::~MRIMPluginSystem() { delete m_event_handler; } QWidget* MRIMPluginSystem::loginWidget() { if (!m_loginWidget) { m_loginWidget = new LoginForm(m_profileName); } return m_loginWidget; } bool MRIMPluginSystem::init(PluginSystemInterface *plugin_system) { ProtocolInterface::init(plugin_system); m_static_plugin_system = plugin_system; m_event_handler = new MRIMEventHandlerClass(); //init event handler return true; } void MRIMPluginSystem::saveLoginDataFromLoginWidget() { m_loginWidget->SaveSettings(); addAccount(m_loginWidget->GetEmail()); } QList MRIMPluginSystem::getSettingsList() { if (m_generalSettItem == NULL) { m_generalSettItem = new QTreeWidgetItem(); m_generalSettItem->setIcon(0,*m_protoIcon); m_generalSettItem->setText(0,tr("General settings")); } if (m_connectionSettItem == NULL) { m_connectionSettItem = new QTreeWidgetItem(); m_connectionSettItem->setIcon(0,*m_protoIcon); m_connectionSettItem->setText(0,tr("Connection settings")); } if (m_settingsWidget == NULL) { m_settingsWidget = new SettingsWidget(m_profileName); } if (m_generalSettingsWidget == NULL) { m_generalSettingsWidget = new GeneralSettings(m_profileName); } QList settings; SettingsStructure generalSettingsStruct; generalSettingsStruct.settings_item = m_generalSettItem; generalSettingsStruct.settings_widget = m_generalSettingsWidget; SettingsStructure connectionSettingsStruct; connectionSettingsStruct.settings_item = m_connectionSettItem; connectionSettingsStruct.settings_widget = m_settingsWidget; settings.append(generalSettingsStruct); settings.append(connectionSettingsStruct); return settings; } void MRIMPluginSystem::removeProtocolSettings() { if (m_generalSettItem) { delete m_generalSettItem; m_generalSettItem = NULL; } if (m_connectionSettItem) { delete m_connectionSettItem; m_connectionSettItem = NULL; } if (m_settingsWidget) { delete m_settingsWidget; m_settingsWidget = NULL; } if (m_generalSettingsWidget) { delete m_generalSettingsWidget; m_generalSettingsWidget = NULL; } } void MRIMPluginSystem::removeLoginWidget() { if (m_loginWidget) delete m_loginWidget; m_loginWidget = NULL; } void MRIMPluginSystem::addAccountButtonsToLayout(QHBoxLayout *aLayout) { m_protoButtonLayout = aLayout; QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName, "mrimsettings"); QStringList accountList = settings.value("accounts/list").toStringList(); foreach(QString account_from_list, accountList) { addAccount(account_from_list); } } void MRIMPluginSystem::removeAccount(const QString &account_name) { #ifdef DEBUG_LEVEL_DEV qDebug()<<"MRIM: removeAccount - profile "<ClearCL(); client->RemoveAccountButton(); m_clients.remove(account_name); delete client; } } void MRIMPluginSystem::removeProfileDir(const QString &path) { //recursively delete all files in directory #ifdef DEBUG_LEVEL_DEV qDebug()<<"MRIM: removeProfileDir - will do cleanup at path: "<GetShowPhoneCnts(); bool restoreStatus = m_generalSettingsWidget->GetRestoreStatus(); profile_settings.setValue("main/phoneCnts", phoneCnts); profile_settings.setValue("main/restoreStatus", restoreStatus); profile_settings.setValue("roster/statustext", m_generalSettingsWidget->GetStatustextStatus()); emit UpdateClientsSettings(); } QList MRIMPluginSystem::getAccountStatusMenu() { QList menuList; foreach (MRIMClient* client, m_clients) { menuList.append(client->AccountMenu()); } return menuList; } QList MRIMPluginSystem::getAccountList() { QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName, "mrimsettings"); QStringList accountList = settings.value("accounts/list").toStringList(); QList accounts; foreach(QString account_from_list, accountList) { AccountStructure account; account.account_name = account_from_list; account.protocol_icon = *m_protoIcon; account.protocol_name = "MRIM"; accounts.append(account); } return accounts; } QList MRIMPluginSystem::getAccountStatuses() { QList statuses; AccountStructure acc; foreach (MRIMClient* client, m_clients) { acc = client->GetAccountInfo(); statuses.append(acc); } return statuses; } void MRIMPluginSystem::setAutoAway() { foreach (MRIMClient* client, m_clients) { client->SetAutoAway(); } } void MRIMPluginSystem::setStatusAfterAutoAway() { foreach (MRIMClient* client, m_clients) { client->RestoreFromAutoAway(); } } void MRIMPluginSystem::itemActivated(const QString &account_name, const QString &contact_name) { //not yet needed } void MRIMPluginSystem::itemContextMenu(const QList &action_list, const QString &account_name, const QString &contact_name, int item_type, const QPoint &menu_point) { if (item_type == EContact) { TreeModelItem itemData; itemData.m_account_name = account_name; itemData.m_item_type = item_type; itemData.m_item_name = contact_name; MRIMClient* client = FindClientInstance(account_name); if (client) { client->ShowCntContextPopup(action_list,itemData,menu_point); } } } void MRIMPluginSystem::sendMessageTo(const QString &account_name, const QString &contact_name, int item_type, const QString& message, int message_icon_position) { MRIMClient* client = FindClientInstance(account_name); if (client && item_type == EContact) { client->SendMessageToContact(contact_name,message,message_icon_position); } } MRIMClient* MRIMPluginSystem::FindClientInstance(QString aAccName) const { MRIMClient* client = NULL; QHash::const_iterator iter = m_clients.find(aAccName); if (iter != m_clients.end()) { client = iter.value(); } return client; } QStringList MRIMPluginSystem::getAdditionalInfoAboutContact(const QString &account_name, const QString &item_name, int item_type ) const { MRIMClient* client = FindClientInstance(account_name); QStringList additionalInfo; if (client) { if (account_name == item_name) { MRIMUserInfo accInfo = client->GetUserInfo(); if (accInfo.userNickname != "") { additionalInfo.append(accInfo.userNickname); } else { additionalInfo.append(item_name); } // if (accInfo.AvatarPath != "") // { // additionalInfo.append(accInfo.AvatarPath); // } } else { ContactAdditionalInfo info = client->GetContactAdditionalInfo(item_name); if (info.Nick != "") { additionalInfo.append(info.Nick); } else { additionalInfo.append(item_name); } if (info.AvatarPath != "") { additionalInfo.append(info.AvatarPath); } if (info.ClientName != "") { additionalInfo.append(info.ClientName); } if (info.OtherInfo != "") { additionalInfo.append(info.OtherInfo); } } } return additionalInfo; } void MRIMPluginSystem::showContactInformation(const QString &account_name, const QString &item_name, int item_type ) { MRIMClient* client = FindClientInstance(account_name); if (client && item_type == EContact) { client->ShowContactDetails(item_name); } } void MRIMPluginSystem::sendImageTo(const QString &account_name, const QString &item_name, int item_type, const QByteArray &image_raw ) { //TODO } void MRIMPluginSystem::sendFileTo(const QString &account_name, const QString &item_name, int item_type, const QStringList &file_names) { if (item_type != EContact) return; FindClientInstance(account_name)->SendFileTo(item_name,file_names); } void MRIMPluginSystem::sendTypingNotification(const QString &account_name, const QString &item_name, int item_type, int notification_type) { MRIMClient* client = FindClientInstance(account_name); if (client && client->Protocol() && item_type == EContact && notification_type != 0) { client->Protocol()->SendTypingToContact(item_name); } } void MRIMPluginSystem::moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item) { MRIMClient* client = FindClientInstance(old_item.m_account_name); if (client && old_item.m_item_type == EContact) { client->MoveContact(old_item.m_item_name,new_item.m_parent_name); } } QString MRIMPluginSystem::getItemToolTip(const QString &account_name, const QString &contact_name) { QString toolTip; MRIMClient* client = FindClientInstance(account_name); if (client) { toolTip = client->GetItemToolTip(contact_name); } return toolTip; } void MRIMPluginSystem::deleteItemSignalFromCL(const QString &account_name, const QString &item_name, int type) { MRIMClient* client = FindClientInstance(account_name); if (client && type == EContact) { client->RemoveContactFromCL(item_name); } } void MRIMPluginSystem::chatWindowOpened(const QString &account_name, const QString &item_name) { //not needed yet } void MRIMPluginSystem::sendMessageToConference(const QString &conference_name, const QString &account_name, const QString &message) {//conference is not yet implemented } void MRIMPluginSystem::leaveConference(const QString &conference_name, const QString &account_name) {//conference is not yet implemented } void MRIMPluginSystem::release() { } QString MRIMPluginSystem::name() { QString name = "MRIM"; return name; } QString MRIMPluginSystem::description() { QString desc = "MRIM qutIM protocol plugin"; return desc; } QIcon *MRIMPluginSystem::icon() { return m_protoIcon; } void MRIMPluginSystem::setProfileName(const QString &profile_name) { m_profileName = profile_name; m_protoIcon = new QIcon(Icon("mrim",IconInfo::Protocol)); delete m_settingsWidget; } void MRIMPluginSystem::addAccount(QString accountName) { MRIMClient* client = new MRIMClient(accountName,m_profileName,m_plugin_system,m_protoButtonLayout); client->CreateAccountButton(); connect(this,SIGNAL(UpdateClientsSettings()),client,SLOT(UpdateSettings())); m_clients.insert(accountName,client); } void MRIMPluginSystem::conferenceItemActivated(const QString &conference_name, const QString &account_name, const QString &nickname) {//conference is not yet implemented } void MRIMPluginSystem::conferenceItemContextMenu(const QList &action_list, const QString &conference_name, const QString &account_name, const QString &nickname, const QPoint &menu_point) {//conference is not yet implemented } QString MRIMPluginSystem::getConferenceItemToolTip(const QString &conference_name, const QString &account_name, const QString &nickname) {//conference is not yet implemented return QString(); } void MRIMPluginSystem::showConferenceContactInformation(const QString &conference_name, const QString &account_name, const QString &nickname) { //conference is not yet implemented } void MRIMPluginSystem::showConferenceTopicConfig(const QString &conference_name, const QString &account_name) { } void MRIMPluginSystem::showConferenceMenu(const QString &conference_name, const QString &account_name, const QPoint &menu_point) { } void MRIMPluginSystem::getMessageFromPlugins(const QList &event) {//not implemented yet } void MRIMPluginSystem::editAccount(const QString &account_name) { FindClientInstance(account_name)->ShowEditAccountWindow(); } void MRIMPluginSystem::chatWindowAboutToBeOpened(const QString &account_name, const QString &item_name) {//not implemented yet } void MRIMPluginSystem::chatWindowClosed(const QString &account_name, const QString &item_name) {//not implemented yet } Q_EXPORT_PLUGIN2(mrimrotoimpl, MRIMPluginSystem); qutim-0.2.0/plugins/mrim/coresrc/mrimgroup.cpp0000644000175000017500000000313411273054313023126 0ustar euroelessareuroelessar/***************************************************************************** MRIMGroup Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "mrimgroup.h" #include "MRIMPluginSystem.h" MRIMGroup::MRIMGroup(QString aAccount, quint32 aFlags, QString aId, QString aName): MRIMCLItem(aAccount,aFlags,aName) { m_Type = EGroup; m_Id = aId; } QString MRIMGroup::Id() const { return m_Id; } MRIMGroup::~MRIMGroup() { } TreeModelItem MRIMGroup::GetTreeModel() { TreeModelItem groupItem; groupItem.m_protocol_name = "MRIM"; groupItem.m_account_name = m_account; groupItem.m_item_name = (m_Id == "-1")?"":m_Id; groupItem.m_parent_name = m_account; groupItem.m_item_type = m_Type; return groupItem; } void MRIMGroup::SyncWithUi() { if (!IsInUi()) { MRIMPluginSystem::PluginSystem()->addItemToContactList(GetTreeModel(),m_Name); SetIsInUi(true); } } qutim-0.2.0/plugins/mrim/coresrc/avatarfetcher.cpp0000644000175000017500000001664111273054313023733 0ustar euroelessareuroelessar#include "avatarfetcher.h" #include #include #include "MRIMPluginSystem.h" AvatarFetcher* AvatarFetcher::m_instance = 0; AvatarFetcher::AvatarFetcher() : QObject(0) { m_headerHttp = new QHttp("obraz.foto.mail.ru",80); m_avaHttp = new QHttp("obraz.foto.mail.ru",80); connect(m_headerHttp,SIGNAL(responseHeaderReceived(QHttpResponseHeader)),this,SLOT(HandleAvatarRequestHeader(QHttpResponseHeader))); connect(m_avaHttp,SIGNAL(requestFinished(int, bool)),this,SLOT(HandleAvatarFetched(int,bool))); } AvatarFetcher::~AvatarFetcher() { disconnect(m_headerHttp,SIGNAL(responseHeaderReceived(QHttpResponseHeader)),this,SLOT(HandleAvatarRequestHeader(QHttpResponseHeader))); disconnect(m_avaHttp,SIGNAL(requestFinished(int, bool)),this,SLOT(HandleAvatarFetched(int,bool))); delete m_headerHttp; delete m_avaHttp; } void AvatarFetcher::FetchSmallAvatar(const QString& aEmail) { QRegExp rx("(.+)@(.+).ru"); rx.indexIn(aEmail,0); if (rx.numCaptures() < 2 ) { #ifdef DEBUG_LEVEL_DEV // qDebug()<<"Regexp failed"; #endif return; } QStringList list = rx.capturedTexts(); if (list[1] == "" || list[2] == "") return; QString req = QString("http://obraz.foto.mail.ru/%1/%2/_mrimavatarsmall").arg(list[2]).arg(list[1]); #ifdef DEBUG_LEVEL_DEV // qDebug()<<"Fetching small avatar header from URL: "<head(req); m_smallAvatarReqIds.insert(aEmail,reqId); } void AvatarFetcher::FetchBigAvatar(const QString& aEmail) { QRegExp rx("(.+)@(.+).ru"); rx.indexIn(aEmail,0); if (rx.numCaptures() < 2 ) { #ifdef DEBUG_LEVEL_DEV qDebug()<<"Regexp failed"; #endif return; } QStringList list = rx.capturedTexts(); if (list[1] == "" || list[2] == "") return; QString req = QString("http://obraz.foto.mail.ru/%1/%2/_mrimavatar").arg(list[2]).arg(list[1]); #ifdef DEBUG_LEVEL_DEV //qDebug()<<"Fetching big avatar header from URL: "<head(req); m_bigAvatarReqIds.insert(aEmail,reqId); } void AvatarFetcher::HandleAvatarRequestHeader(const QHttpResponseHeader& resp) { #ifdef DEBUG_LEVEL_DEV // qDebug()<<"HTTP Request finished"; #endif if (resp.statusCode() != 404) { bool smallAvatar = m_smallAvatarReqIds.values().contains(m_headerHttp->currentId()); QString email = (smallAvatar) ? m_smallAvatarReqIds.key(m_headerHttp->currentId()) : m_bigAvatarReqIds.key(m_headerHttp->currentId()); if (smallAvatar) m_smallAvatarReqIds.remove(email); else m_bigAvatarReqIds.remove(email); QString reqType = (smallAvatar) ? "small avatar req" : "big avatar req"; #ifdef DEBUG_LEVEL_DEV // qDebug()<<"Request type is "+reqType; #endif bool willFetch = true; QString postfix; if (smallAvatar) postfix = "small"; if (resp.hasKey("Date")) { QSettings avatarsCacheSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+MRIMPluginSystem::ImplPointer()->Profile()+"/mrimicons", "avatars_cache"); QString currentDate = resp.value("Last-Modified"); QString lastFetchDate = avatarsCacheSettings.value(email+"/last"+postfix+"AvatarFetchDate").toString(); #ifdef DEBUG_LEVEL_DEV // qDebug()<<"Avatar last fetch date is "<get(path); m_smallAvatarReqIds.insert(email,reqId); } else { qint32 reqId = m_avaHttp->get(path); m_bigAvatarReqIds.insert(email,reqId); } } else { #ifdef DEBUG_LEVEL_DEV // qDebug()<<"Avatar will not be fetched!"; #endif } } } void AvatarFetcher::HandleAvatarFetched(int aReqId, bool aError) { bool smallAvatar = m_smallAvatarReqIds.values().contains(aReqId); QString email = (smallAvatar) ? m_smallAvatarReqIds.key(aReqId) : m_bigAvatarReqIds.key(aReqId); if (smallAvatar) m_smallAvatarReqIds.remove(email); else m_bigAvatarReqIds.remove(email); if (aError || email.isEmpty()) return; if (smallAvatar) { QString fileName = SmallAvatarPath(email); #ifdef DEBUG_LEVEL_DEV // qDebug()<<"Fetching small avatar to file: "<readAll()); smallAvatar.waitForBytesWritten(5000); if (written < 50) smallAvatar.remove(); //50 is a hack for support@corp.mail.ru smallAvatar.close(); emit SmallAvatarFetched(email); } else { if (aError || email.isEmpty()) return; QString fileName = BigAvatarPath(email); #ifdef DEBUG_LEVEL_DEV // qDebug()<<"Fetching big avatar to file: "<readAll()); bigAvatar.waitForBytesWritten(5000); if (written < 50) bigAvatar.remove(); //50 is a hack for support@corp.mail.ru bigAvatar.close(); emit BigAvatarFetched(email); } } QString AvatarFetcher::SmallAvatarPath(const QString& aEmail) { QSettings avatarsCacheSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+MRIMPluginSystem::ImplPointer()->Profile()+"/mrimicons", "avatars_cache"); QString avatarsDir = avatarsCacheSettings.fileName().section('/',0,-2)+"/"; QString fileName = avatarsDir + aEmail + "_small.jpg"; QDir dir(avatarsDir); if (!dir.exists()) { dir.mkpath(avatarsDir); } return fileName; } QString AvatarFetcher::BigAvatarPath(const QString& aEmail) { QSettings avatarsCacheSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+MRIMPluginSystem::ImplPointer()->Profile()+"/mrimicons", "avatars_cache"); QString avatarsDir = avatarsCacheSettings.fileName().section('/',0,-2)+"/"; QString fileName = avatarsDir + aEmail + "_big.jpg"; QDir dir(avatarsDir); if (!dir.exists()) { dir.mkpath(avatarsDir); } return fileName; } qutim-0.2.0/plugins/mrim/coresrc/mrimcontact.h0000644000175000017500000000667511273054313023107 0ustar euroelessareuroelessar/***************************************************************************** MRIMContact Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMCONTACT_H #define MRIMCONTACT_H #include "mrimclitem.h" #include #include "Status.h" #include "useragent.h" class MRIMContact : public MRIMCLItem { Q_OBJECT public: MRIMContact(const QString& aAccount, quint32 aFlags, const QString& aName, const QString& aEmail, qint32 aContactId, qint32 aGroupId, const Status& aStatus, quint32 aServerFlags, QString aContPhone, const UserAgent& aUserAgent, quint32 aComSupport, bool aIsAuthed, bool aIsAuthedMe = false); ~MRIMContact(); inline void SetStatus(const Status& aNewStatus) { m_Status.Clone(aNewStatus,true); } inline const QString& Email() const { return m_Email; } inline const QStringList& Phone() const { return m_Phone; } inline void SetPhone(QStringList aNumbers) { m_Phone = aNumbers; } inline const Status& GetStatus() const { return m_Status; } inline const UserAgent& GetUserAgent() const { return m_UserAgent; } inline void SetUserAgent(const UserAgent& aNewAgent) { m_UserAgent.Set(aNewAgent); } inline qint32 Id() const { return m_contactId; } inline void SetId(qint32 aNewId) { m_contactId = aNewId; } inline qint32 GroupId() const { return m_GroupId; } inline quint32 ServerFlags() const { return m_ServerFlags; } inline bool IsAuthed() const { return m_isAuthed; } inline bool IsPurePhoneCnt() const { return (m_Email == "phone"); } inline void SetAuthed(bool aAuthed) { m_isAuthed = aAuthed; } inline bool IsAuthedMe() const { return m_isAuthedMe; } inline void SetAuthedMe(bool aAuthed) { m_isAuthedMe = aAuthed; UpdateAuthInUi(); } inline bool InList() { return (m_GroupId != -1); } bool HasAvatar(); QString SmallAvatarPath(); QString BigAvatarPath(); void ShowSmallAvatar(); void Rename(QString aNewName); QString GetTooltip(); inline bool HasPhone() { return m_Phone.count(); } void FetchSmallAvatar(); void FetchBigAvatar(); void FetchAvatars(); virtual TreeModelItem GetTreeModel(); void LoadSettings(); private slots: void AvatarFetched(QString aEmail); void UpdateStatusInUi(); void UpdateUserAgentInUi(); void UpdateAuthInUi(); private: virtual void SyncWithUi(); QString m_Email; qint32 m_contactId; qint32 m_GroupId; Status m_Status; quint32 m_ServerFlags; QStringList m_Phone; UserAgent m_UserAgent; bool m_isAuthed; bool m_isAuthedMe; bool m_showStatusText; }; #endif // MRIMCONTACT_H qutim-0.2.0/plugins/mrim/coresrc/RegionListParser.h0000644000175000017500000000254211273054313024010 0ustar euroelessareuroelessar/***************************************************************************** RegionListParser Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 REGIONLISTPARSER_H #define REGIONLISTPARSER_H #include struct LiveRegion { quint32 id; quint32 cityId; quint32 countryId; QString name; }; class RegionListParser { public: RegionListParser(QString aRelPath); inline const QList* GetRegionsList() { return const_cast*>(m_regionsList); } ~RegionListParser(void); private: void AddRegion(QString aStr); QList* m_regionsList; }; #endif //REGIONLISTPARSER_H qutim-0.2.0/plugins/mrim/coresrc/MRIMClient.h0000644000175000017500000001537511273054313022467 0ustar euroelessareuroelessar/***************************************************************************** MRIMClient Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMCLIENT_H_ #define MRIMCLIENT_H_ #include #include #include #include "MRIMProto.h" #include #include #include #include #include #include "mrimdefs.h" using namespace qutim_sdk_0_2; class authwidget; class MRIMSearchWidget; class SearchResultsWidget; class ContactDetails; class MoveToGroupWidget; class SMSWidget; class AddNumberWidget; class MRIMClient: public QObject { Q_OBJECT enum MenuActions { AddContactAction }; public: MRIMClient(QString accountName, QString profileName, PluginSystemInterface *pluginSystem, QHBoxLayout *protoButtonLayout); const TreeModelItem AccountItem(); void CreateAccountButton(); void RemoveAccountButton(); void ClearCL(CLItemType aDepth = EAccount, bool aDeleteFromSettings = false); void SendMessageToContact(QString aContactName, QString aMessage, int aMessageIconPosition); virtual ~MRIMClient(); void ShowCntContextPopup(const QList &aDefActList,TreeModelItem aItemData, const QPoint &aMenuPoint); ContactAdditionalInfo GetContactAdditionalInfo(QString aEmail); MRIMUserInfo GetUserInfo(); void ShowContactDetails(QString aEmail); inline QMenu* AccountMenu() { return m_accountButtonMenu; } AccountStructure GetAccountInfo(); void SetAutoAway(); void RestoreFromAutoAway(); void RenameContact(QString aEmail, QString aNewName); QString GetItemToolTip(const QString &aCntId); void RemoveContactFromCL(QString aCntId); inline MRIMProto* Protocol() { return m_protoInstance; } inline const QString& ProfileName() const { return m_profileName; } inline const QString& AccountName() const { return m_accountName; } QString FilterMessage(const QString& aMessage); void SendFileTo(QString aTo, QStringList aFiles); void ShowEditAccountWindow(); void ChangeStatus(const Status &aNewStatus); public slots: void MoveContact(QString aCntId, QString aNewGroup); //from search res widget void HandleAddContact(QString aEmail = QString(),QString aNick = QString()); //from protoimpl void UpdateSettings(); private slots: void SelectXStatusesClicked(); void DisconnectMenuItemClicked(); void ChangeStatusClicked(QAction* action); void AccountMenuItemClicked(QAction* action); void CntContextMenuClicked(QAction* aAction); //from proto void HandleProtoStatusChanged(StatusData aNewStatusData); void UpdateStatusIcon( const Status &newStatus ); void UpdateStatusIcon( const QIcon &newIcon ); void HandleItemAdditionToUI(CLItemType aType, QString aParentId, QString aID, QString aName, StatusData aStatusData, bool aAuthed, bool aIsNew); void HandleAccountInfoRecieved(MRIMUserInfo aInfo); void HandleMessageRecieved(QString aContactEmail, QString aGroupId, QString aMessage, QDateTime aDate, bool aIsRtf, bool aIsAuth); void HandleContactTyping(QString aContactEmail, QString aGroupId); void HandleContactTypingStopped(QString aContactEmail, QString aGroupId); void HandleMessageDelivered(QString aContactEmail, QString aGroupId, quint32 aKernelMessageId); void HandleAuthorizeResponseReceived(QString aContactEmail, QString aGroupId); void HandleMailboxStatusChanged(quint32 aUnreadMessages); void HandleLogoutReceived(LogoutReason aReason); void HandleMPOPKeyReceived(QString aMPOPKey); void HandleCLOperationFailed(CLOperationError aClErrCode); void HandleSearchFinished(QList aFoundList); void HandleRemoveItemFromUI(CLItemType aType,QString aParentID,QString aId); void HandleNewCLReceived(); void HandleFileTransferRequest(FileTransferRequest aReq); //from proto void HandleNotifyUI(QString aMessage); private: void ChangeStatus(qint32 aNewStatus, const QString &aCustomID = QString()); void LoadSettings(); void LoadAccountSettings(); void ConnectAllProtoEvents(); void DisconnectAllProtoEvents(); void SaveCLItem(CLItemType aItemType, TreeModelItem aItem, QString aName, bool aisAuthed,bool aIsAuthedMe, QString aPhone); void LoadCL(); void DeleteFromLocalSettings(CLItemType aType, QString aId); void FillActionLists(); private: QToolButton* m_accountButton; QSettings *m_settings; QString m_accountName; QString m_profileName; MRIMProto* m_protoInstance; QHBoxLayout *m_protoButtonLayout; PluginSystemInterface *m_pluginSystem; QMenu* m_contextCntMenu; QMenu *m_accountButtonMenu; //account menu QActionGroup *m_statusGroup; //statuses group //account menu actions QAction* m_actUnreadEmails; QAction* m_actExtendedStatus; QAction* m_actAddContact; QAction* m_actOpenMbox; QAction* m_actSearchCnts; //item context menu actions QWidgetAction* m_menuTitle; QLabel* m_menuLabel; QAction* m_actRemoveCnt; QAction* m_actAuthorizeCnt; QAction* m_actRequestAuthFromCnt; QAction* m_actRenameCnt; QAction* m_actMoveToGroup; QAction* m_actAddToList; QAction* m_actSendSms; QAction* m_actAddNumber; QAction* m_separator; QList m_contactActionsList; QList m_statusActionsList; QList m_additionalActionsList; QList m_otherActionsList; //widgets MRIMSearchWidget* m_searchCntsWidget; SearchResultsWidget* m_searchResWidget; ContactDetails* m_cntDetailsWidget; MoveToGroupWidget* m_moveToGroupWidget; SMSWidget* m_smsWidget; AddNumberWidget* m_addNumberWidget; //other members MRIMUserInfo m_userInfo; QString m_login; QString m_pass; QString m_host; quint32 m_port; QNetworkProxy m_proxy; bool m_inAutoAway; bool m_phoneGroupAdded; bool m_isAccountItemAdded; bool m_isAddingContact; bool m_updateAccSettingsOnNextLogon; bool m_showPhoneCnts; quint32 m_phoneCntCounter; QString m_mpopKey; }; #endif /*MRIMCLIENT_H_*/ qutim-0.2.0/plugins/mrim/coresrc/MRIMContactList.h0000644000175000017500000000400611273054313023465 0ustar euroelessareuroelessar/***************************************************************************** MRIMContactList Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMContactList_H_ #define MRIMContactList_H_ #include #include #include #include #include #include "proto.h" #include "mrimcontact.h" #include "mrimgroup.h" class MRIMContactList: public QObject { Q_OBJECT public: MRIMContactList(QString aAccount, QByteArray& cl); MRIMContactList(QString aAccount); void SetData(QByteArray& data); QList* Parse(); bool AddItem(MRIMCLItem* aItem); MRIMContact* CntByEmail(const QString& aName); MRIMContact* CntByName(const QString& aName); MRIMGroup* GroupById(const QString& aId); quint32 GetItemsCount(); void DeleteEntry(MRIMCLItem* aItemToDelete); MRIMCLItem* ItemByIndex(qint32 aIndex); QList* GetCL(); virtual ~MRIMContactList(); void UpdateContactList(); private: void Init(); qint32 ParseGroups(); qint32 ParseContacts(); quint32 m_opResult; quint32 m_grCount; QString m_account; QString m_grMask; QString m_contMask; QBuffer* m_clBuffer; QList* m_parsedList; bool m_isPhoneGroupAdded; }; #endif /*MRIMContactList_H_*/ qutim-0.2.0/plugins/mrim/coresrc/MRIMContactList.cpp0000644000175000017500000003412111273054313024021 0ustar euroelessareuroelessar/***************************************************************************** MRIMContactList Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "MRIMContactList.h" #include "MRIMUtils.h" #include MRIMContactList::MRIMContactList(QString aAccount) : m_account(aAccount) { Init(); } void MRIMContactList::Init() { m_isPhoneGroupAdded = false; m_clBuffer = new QBuffer(this); m_clBuffer->open(QIODevice::ReadWrite); m_parsedList = new QList; } void MRIMContactList::SetData(QByteArray& data) { if (m_clBuffer) { delete m_clBuffer; m_clBuffer = new QBuffer(this); m_clBuffer->open(QIODevice::ReadWrite); } qint64 written = m_clBuffer->write(data); Q_UNUSED(written); } MRIMContactList::MRIMContactList(QString aAccount, QByteArray& cl) : m_account(aAccount) { Init(); SetData(cl); } MRIMContactList::~MRIMContactList() { if (m_parsedList) { delete m_parsedList; } if (m_clBuffer) { m_clBuffer->close(); delete m_clBuffer; } } QList* MRIMContactList::Parse() { m_clBuffer->seek(0); m_opResult = ByteUtils::ReadToUL(*m_clBuffer); m_grCount = ByteUtils::ReadToUL(*m_clBuffer); m_grMask = ByteUtils::ReadToString(*m_clBuffer); m_contMask = ByteUtils::ReadToString(*m_clBuffer); if (m_grMask == "" || m_contMask == "" ) return NULL; if (m_opResult == GET_CONTACTS_OK) { #ifdef DEBUG_LEVEL_DEV qDebug()<<"GroupMask,ContactMask = "<(); } for (quint32 i=0; i < m_grCount; i++) { quint32 grFlags = 0; QString grName; for (qint32 j=0; j < m_grMask.length(); j++) { QChar chr = m_grMask.at(j); switch (chr.toAscii()) { case 'u': { quint32 val = ByteUtils::ReadToUL(*m_clBuffer); if (j == 0) { grFlags = val; #ifdef DEBUG_LEVEL_DEV qDebug("UL for group #%d read. grFlags=%x",i+1,grFlags); #endif } } break; case 's': { QString valStr = ByteUtils::ReadToString(*m_clBuffer,true); if (j == 1) { grName = valStr; #ifdef DEBUG_LEVEL_DEV qDebug()<<"String for group #"<GroupId()),tr("Phone contacts")); AddItem(phoneGroup); m_isPhoneGroupAdded = true; } } count++; idCounter++; } #ifdef DEBUG_LEVEL_DEV qDebug()<<"Total contacts read:"<count(); i++) { if ( m_parsedList->at(i)->Type() == EContact ) { foundContact = static_cast(m_parsedList->at(i)); if (foundContact->Email() == aEmail) { break; } else { foundContact = NULL; } } } return foundContact; } MRIMContact* MRIMContactList::CntByName(const QString& aName) { MRIMContact * foundContact = NULL; for (qint32 i=0; i < m_parsedList->count(); i++) { if ( m_parsedList->at(i)->Type() == EContact ) { foundContact = static_cast(m_parsedList->at(i)); if (foundContact->Name() == aName) { break; } else { foundContact = NULL; } } } return foundContact; } MRIMGroup* MRIMContactList::GroupById(const QString& aId) { MRIMGroup * foundGroup = NULL; for (qint32 i=0; i < m_parsedList->count(); i++) { if ( m_parsedList->at(i)->Type() == EGroup ) { foundGroup = static_cast(m_parsedList->at(i)); if (foundGroup->Id() == aId) { break; } else { foundGroup = NULL; } } } return foundGroup; } quint32 MRIMContactList::GetItemsCount() { return m_parsedList->count(); } MRIMCLItem* MRIMContactList::ItemByIndex(qint32 aIndex) { if (aIndex < 0 || aIndex >m_parsedList->count()) return NULL; return m_parsedList->at(aIndex); } bool MRIMContactList::AddItem(MRIMCLItem* aItem) { if (!m_parsedList) return true; bool isNew = true; bool isInUi = false; if (aItem->Type() == EContact) { MRIMContact* newCnt = reinterpret_cast(aItem); MRIMContact* cnt = CntByEmail(newCnt->Email()); if (cnt && cnt->Email() == "phone") { cnt = CntByName(newCnt->Name()); } if (cnt != NULL) { isNew = false; aItem->SetIsInUi(cnt->IsInUi()); aItem->m_isNew = false; m_parsedList->removeOne(cnt); delete cnt; } m_parsedList->append(aItem); } if (aItem->Type() == EGroup) { MRIMGroup* newGr = reinterpret_cast(aItem); MRIMGroup* gr = GroupById(newGr->Id()); if (gr != NULL) { isNew = false; aItem->SetIsInUi(gr->IsInUi()); aItem->m_isNew = false; m_parsedList->removeOne(gr); delete gr; } m_parsedList->append(aItem); } aItem->SyncWithUi(); return isNew; } void MRIMContactList::DeleteEntry(MRIMCLItem* aItemToDelete) { int index = m_parsedList->indexOf(aItemToDelete); if (index != -1) { m_parsedList->removeAt(index); delete aItemToDelete; } } QList* MRIMContactList::GetCL() { return m_parsedList; } void MRIMContactList::UpdateContactList() { foreach (MRIMCLItem *item, *m_parsedList) item->SyncWithUi(); } qutim-0.2.0/plugins/mrim/coresrc/rtf/0000755000175000017500000000000011273101025021164 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/coresrc/rtf/rtfimport_tokenizer.h0000644000175000017500000000272411273054313025471 0ustar euroelessareuroelessar/* This file is part of the KDE project Copyright (C) 2001 Ewald Snel Copyright (C) 2001 Tomasz Grobelny 2009, modified by Rusanov Peter for Mail.Ru agent protocol needs under qutIM project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef __RTFIMPORT_TOKENIZER_H__ #define __RTFIMPORT_TOKENIZER_H__ //#include #include /// This class represents the tokenizer and the token class RTFTokenizer { public: enum TokenType { OpenGroup, CloseGroup, ControlWord, PlainText, BinaryData }; RTFTokenizer(); /** * Open tokenizer from file. * @param in the input file */ void open( QBuffer *in ); /** * Reads the next token. */ void next(); // token data /// plain text or control word/symbol char *text; TokenType type; /// numeric parameter int value; /// token has a (numeric) parameter bool hasParam; public: /// Binary data (of \\bin keyword) QByteArray binaryData; // tokenizer (private) data private: int nextChar(); QBuffer *infile; //QByteArray fileBuffer; QByteArray tokenText; //uchar *fileBufferPtr; //uchar *fileBufferEnd; }; #endif qutim-0.2.0/plugins/mrim/coresrc/rtf/rtfimport_dom.cpp0000644000175000017500000001775311273054313024601 0ustar euroelessareuroelessar/* This file is part of the KDE project Copyright (C) 2001 Ewald Snel Copyright (C) 2001 Tomasz Grobelny 2009, modified by Rusanov Peter for Mail.Ru agent protocol needs under qutIM project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include //Added by qt3to4: #include #include // sprintf #include "rtfimport_dom.h" /** * Escape the special XML characters and be careful to catch any disallowed control character */ QString CheckAndEscapeXmlText(const QString& strText) { QString strReturn(strText); QChar ch; for (uint i=0; i else if (test == 34) { strReturn.replace(i, 1, """); i+=5; } // " else if (test == 39) { strReturn.replace(i, 1, "'"); i+=5; } // ' else if (test >= 32) continue; // Normal character (from space on) else if ((test == 9) || (test == 10) || (test == 13) ) continue; // Allowed control characters: TAB, LF, CR else { // A disallowed control character: // - could be a bug in the RTF file // - could be not supported encoding. // In any case, we must replace this character. strReturn.replace(i, 1, '?'); // Replacement character } } return strReturn; } DomNode::DomNode() { clear(0); } /** * Creates a new document. * @param doctype the document type (tag) */ DomNode::DomNode( const char *doctype ) { documentLevel = 1; hasChildren = false; hasAttributes = false; str += "\n<"; str += doctype; } /** * Creates a new document node (no memory allocation). * @param level the document depth of the node */ void DomNode::clear( int level ) { str.clear(); documentLevel = level; hasChildren = true; hasAttributes = false; } /** * Adds a new node. * @param name the name of the new node (tag) */ void DomNode::addNode( const char *name ) { closeTag( true ); str += " <"; str += name; hasChildren = false; ++documentLevel; } /** * Adds a text node. * @param text the text to write into the document node */ void DomNode::addTextNode( const char *text, QTextCodec* codec ) { closeTag( false ); if (!codec) { return; } str += CheckAndEscapeXmlText(codec->toUnicode(text)); } /** * Add border to existing frameset (see KWord DTD). */ void DomNode::addBorder( int id, const QColor &color, int style, double width ) { char attr[16]; sprintf( attr, "%cRed", id ); setAttribute( attr, color.red() ); sprintf( attr, "%cGreen", id ); setAttribute( attr, color.green() ); sprintf( attr, "%cBlue", id ); setAttribute( attr, color.blue() ); sprintf( attr, "%cStyle", id ); setAttribute( attr, style ); sprintf( attr, "%cWidth", id ); setAttribute( attr, width ); } /** * Add color attributes to document node. * @param color the color */ void DomNode::addColor( const QColor &color ) { setAttribute( "red", color.red() ); setAttribute( "green", color.green() ); setAttribute( "blue", color.blue() ); } /** * Add rectangle attributes to document node. */ void DomNode::addRect( int left, int top, int right, int bottom ) { setAttribute( "left", .05*left ); setAttribute( "top", .05*top ); setAttribute( "right", .05*right ); setAttribute( "bottom", .05*bottom ); } /** * Add pixmap or clipart key. * @param dt date/time * @param filename the filename of the image * @param name the relative path to the image in the store (optional) */ void DomNode::addKey( const QDateTime& dt, const QString& filename, const QString& name ) { const QDate date ( dt.date() ); const QTime time ( dt.time() ); addNode( "KEY" ); setAttribute( "filename", CheckAndEscapeXmlText(filename) ); setAttribute( "year", date.year() ); setAttribute( "month", date.month() ); setAttribute( "day", date.day() ); setAttribute( "hour", time.hour() ); setAttribute( "minute", time.minute() ); setAttribute( "second", time.second() ); setAttribute( "msec", time.msec() ); if (!name.isEmpty()) { setAttribute( "name", CheckAndEscapeXmlText(name) ); } closeNode( "KEY" ); } /** * Add frameset to document (see KWord DTD). */ void DomNode::addFrameSet( const char *name, int frameType, int frameInfo ) { addNode( "FRAMESET" ); setAttribute( "name", name ); setAttribute( "frameType", frameType ); setAttribute( "frameInfo", frameInfo ); setAttribute( "removable", 0 ); setAttribute( "visible", 1 ); } /** * Add frame to existing frameset (see KWord DTD). */ void DomNode::addFrame( int left, int top, int right, int bottom, int autoCreateNewFrame, int newFrameBehaviour, int sheetSide ) { addNode( "FRAME" ); addRect( left, top, right, bottom ); setAttribute( "runaround", 1 ); setAttribute( "runaroundGap", 2 ); setAttribute( "autoCreateNewFrame", autoCreateNewFrame ); setAttribute( "newFrameBehaviour", newFrameBehaviour ); setAttribute( "sheetSide", sheetSide ); } /** * Sets a new attribute to a string value. */ void DomNode::setAttribute( const QString& attribute, const QString& value ) { str += ' '; str += attribute; str += '='; str += '"'; str += CheckAndEscapeXmlText( value ); str += '"'; hasAttributes = true; } /** * Sets a new attribute to an integer value. */ void DomNode::setAttribute( const char *attribute, int value ) { char strvalue[32]; sprintf( strvalue, "%d", value ); setAttribute( attribute, (const char *)strvalue ); } /** * Sets a new attribute to a double value. */ void DomNode::setAttribute( const char *attribute, double value ) { char strvalue[32]; sprintf( strvalue, "%f", value ); setAttribute( attribute, (const char *)strvalue ); } /** * Closes a document node. * @param name the node (tag) to close */ void DomNode::closeNode( const char *name ) { if (!hasChildren) { str += '/'; } else { str += "\n"; --documentLevel; for (int i=documentLevel-1; i>0; i--) { str += ' '; } hasChildren = true; } /** * Closes the current XML tag (if open). * @param nl add a newline */ void DomNode::closeTag( bool nl ) { if (!hasChildren) { str += '>'; if (nl) { str += '\n'; for (int i=documentLevel-1; i>0; i--) { str += ' '; } } hasChildren = true; } hasAttributes = false; } /** * Appends a child node. * @param child the node to append to this document node */ void DomNode::appendNode( const DomNode &child ) { const QString childStr ( child.toString() ); closeTag( (childStr.length() >= 2 && (childStr[0] == '<' || childStr[1] == '<')) ); str += childStr; } /** * Appends XML text to node */ void DomNode::append( const QString& _str) { str += _str; } void DomNode::append( const QByteArray& cstr) { str += QString::fromUtf8(cstr); } void DomNode::append( const char ch) { str += ch; } /** * Returns true if node is empty. */ bool DomNode::isEmpty( void ) const { return str.isEmpty(); } /** * Returns the data of the document node. */ QString DomNode::toString( void ) const { return str; } qutim-0.2.0/plugins/mrim/coresrc/rtf/rtfimport.h0000644000175000017500000003763311273054313023406 0ustar euroelessareuroelessar/* This file is part of the KDE project Copyright (C) 2001 Ewald Snel Copyright (C) 2001 Tomasz Grobelny Copyright (C) 2003, 2004 Nicolas GOUTTE 2009, modified by Rusanov Peter for Mail.Ru agent protocol needs under qutIM project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ // ### FIXME: copyright holders/date #ifndef __RTFIMPORT_H__ #define __RTFIMPORT_H__ //#include //#include #include //#include #include #include #include #include #include //#include //#include #include #include "rtfimport_dom.h" #include "rtfimport_tokenizer.h" //#include #include class DomNode; class RTFImport; /// RTF property (control word table entry) struct RTFProperty { const char *onlyValidIn; const char *name; void (RTFImport::*cwproc)( struct RTFProperty * ); /// offset of formatting property int offset; /// default value int value; }; /// RTF field description struct RTFField { const char *id; int type; int subtype; const char *value; }; struct RTFTextState; /// RTF destination struct RTFDestination { const char *group; const char *name; void (RTFImport::*destproc)( RTFProperty * ); RTFTextState* target; }; /// Paragraph border struct RTFBorder { enum BorderStyle { Solid, Dashes, Dots, DashDot, DashDotDot, None = 16 }; BorderStyle style; int color; int width; int space; }; /// Tabulator struct RTFTab { enum TabType { Left, Centered, FlushRight, Decimal }; enum LeaderType { None, Dots, Hyphens, Underline, ThickLine }; TabType type; LeaderType leader; int position; }; /// Font table entry struct RTFFont { QString name; QFont::StyleHint styleHint; int fixedPitch; int number; }; /// RTF embedded picture struct RTFPicture { enum PictureType { BMP, WMF, MacPict, EMF, PNG, JPEG }; QByteArray bits; PictureType type; int width, height; int cropLeft, cropTop, cropRight, cropBottom; int desiredWidth, desiredHeight; int scalex, scaley; int nibble; bool scaled; /// \\blipuid QString identifier; }; /// Paragraph-formatting properties struct RTFLayout { enum Alignment { Left, Right, Justified, Centered }; QStack tablist; RTFTab tab; RTFBorder borders[4]; RTFBorder *border; Alignment alignment; int style; int firstIndent, leftIndent, rightIndent; int spaceBefore, spaceAfter; int spaceBetween; ///< Line spacing bool spaceBetweenMultiple; ///< Is the linespacing defined as multiple of line height (true) or by a height in 1/20 pt (false)? bool inTable; bool keep, keepNext; bool pageBB, pageBA; }; /// Character-formatting properties struct RTFFormat { enum VertAlign { Normal = 0, SubScript, SuperScript }; enum Underline { UnderlineNone=0, UnderlineSimple, UnderlineThick, UnderlineDouble, UnderlineWordByWord, UnderlineWave, UnderlineDash, UnderlineDot, UnderlineDashDot, UnderlineDashDotDot }; VertAlign vertAlign; Underline underline; int font, fontSize, baseline; int color, bgcolor, underlinecolor; int uc; bool bold, italic, strike, striked; bool hidden, caps, smallCaps; }; /// Comparison operator \since 1.4 inline bool operator == ( const RTFFormat& f1, const RTFFormat& f2 ) { return f1.vertAlign == f2.vertAlign && f1.underline == f2.underline && f1.font == f2.font && f1.fontSize == f2.fontSize && f1.baseline == f2.baseline && f1.color == f2.color && f1.bgcolor == f2.color && f1.underlinecolor == f2.underlinecolor && f1.uc == f2.uc && f1.bold == f2.bold && f1.italic == f2.italic && f1.strike == f2.strike && f1.striked == f2.striked && f1.hidden == f2.hidden && f1.caps == f2.caps && f1.smallCaps == f2.smallCaps ; } /// Comparison operator \since 1.4 inline bool operator != ( const RTFFormat& f1, const RTFFormat& f2 ) { return ! ( f1 == f2 ); } /// Style sheet entry struct RTFStyle { QString name; RTFFormat format; RTFLayout layout; int next; }; /// Section-formatting properties struct RTFSectionLayout { int headerMargin; int footerMargin; bool titlePage; }; /// Table cell definition struct RTFTableCell { RTFBorder borders[4]; int bgcolor; int x; }; /// Table-formatting properties struct RTFTableRow { QStack cells; QStringList frameSets; RTFLayout::Alignment alignment; int height; int left; }; /// KWord format struct KWFormat { RTFFormat fmt; QString xmldata; uint id, pos, len; }; /// RTF rich text state (text and tables) struct RTFTextState { /// paragraphs DomNode node; /// table cell(s) DomNode cell; /// plain text (for paragraph or table cell) DomNode text; QStack formats; QStringList frameSets; QStack rows; uint table, length; }; /// RTF group state (formatting properties) struct RTFGroupState { RTFTableRow tableRow; RTFTableCell tableCell; RTFFormat format; RTFLayout layout; RTFSectionLayout section; /// '}' will close the current destination bool brace0; /// Should the group be ignored? bool ignoreGroup; }; class RTFImport : public QObject { Q_OBJECT public: RTFImport( ); virtual QString convert( QString& aRtfText ); /** * Skip the keyword, as we do not need to do anything with it * (either because it is supported anyway or because we cannot support it.) */ void ignoreKeyword( RTFProperty * ); /** * Set document codepage. * @note Mac's code pages > 10000 are not supported */ void setCodepage( RTFProperty * ); /** * Set document codepage to Mac (also known as MacRoman or as Apple Roman) */ void setMacCodepage( RTFProperty * ); /** * Set document codepage to CP1252 * @note Old RTF files have a \\ansi keyword but no \\ansicpg keyword */ void setAnsiCodepage( RTFProperty * ); /** * Set document codepage to IBM 850 */ void setPcaCodepage( RTFProperty * ); /** * Set document codepage to IBM 435. * @note As Qt does not support IBM 435, this is currently approximated as IBM 850 */ void setPcCodepage( RTFProperty * ); /** * Sets the value of a boolean RTF property specified by token. * @deprecated not portable, as it needs an out-of-specification use of offsetof */ void setToggleProperty( RTFProperty * ); /** * Sets a boolean RTF property specified by token. * @param property the property to set * @deprecated not portable, as it needs an out-of-specification use of offsetof */ void setFlagProperty( RTFProperty *property ); /** * Sets the charset. * @param property the property to set * @deprecated not portable, as it needs an out-of-specification use of offsetof */ void setCharset( RTFProperty *property ); /** * Sets the value of a numeric RTF property specified by token. * @param property the property to set * @deprecated not portable, as it assumes that an enum is a char */ void setNumericProperty( RTFProperty *property ); /** * Sets an enumeration (flag) RTF property specified by token. * @param property the property to set * @deprecated not portable, as it assumes that an enum is a char */ void setEnumProperty( RTFProperty *property ); /** * Set font style hint */ void setFontStyleHint( RTFProperty* property ); /** * Set the picture type * (BMP, PNG...) */ void setPictureType( RTFProperty* property ); /** * Sets the enumaration value for \\ul-type keywords * \\ul switches on simple underline * \\ul0 switches off all underlines */ void setSimpleUnderlineProperty( RTFProperty* ); /** * Set underline properties * @param property the property to set */ void setUnderlineProperty( RTFProperty* property ); /** * Sets the value of a border property specified by token. * @param property the property to set */ void setBorderProperty( RTFProperty *property ); /** * Sets the value of a border color specified by token. * @deprecated not portable, as it needs an out-of-specification use of offsetof */ void setBorderColor( RTFProperty * ); /** * Sets the value of a border property specified by token. * @param property the property to set */ void setBorderStyle( RTFProperty *property ); /** * Sets the value of the font baseline (superscript). */ void setUpProperty( RTFProperty * ); /** * Reset character-formatting properties. */ void setPlainFormatting( RTFProperty * = 0L ); /** * Reset paragraph-formatting properties */ void setParagraphDefaults( RTFProperty * = 0L ); /** * Reset section-formatting properties. */ void setSectionDefaults( RTFProperty * = 0L ); /** * Reset table-formatting properties. */ void setTableRowDefaults( RTFProperty * = 0L ); /** * Select which border is the current one. * @param property the property to set */ void selectLayoutBorder( RTFProperty * property ); /** * Select which border is the current one, in case of a cell * @param property the property to set */ void selectLayoutBorderFromCell( RTFProperty * property ); void insertParagraph( RTFProperty * = 0L ); void insertPageBreak( RTFProperty * ); void insertTableCell( RTFProperty * ); /** * Finish table row and calculate cell borders. */ void insertTableRow( RTFProperty * = 0L ); /** * Inserts a table cell definition. */ void insertCellDef( RTFProperty * ); /** * Inserts a tabulator definition. */ void insertTabDef( RTFProperty * ); /** * Inserts a single (Unicode) character in UTF8 format. * @param ch the character to write to the current destination */ void insertUTF8( int ch ); /// Insert special character (as plain text). void insertSymbol( RTFProperty *property ); /// Insert special character (hexadecimal escape value). void insertHexSymbol( RTFProperty * ); /// Insert unicode character (keyword \\u). void insertUnicodeSymbol( RTFProperty * ); /** * Insert a date or time field */ void insertDateTime( RTFProperty *property ); /** * Insert a page number field */ void insertPageNumber( RTFProperty * ); /** * Parse the picture identifier */ void parseBlipUid( RTFProperty* ); /** * Parse recursive fields. * @note The {\\fldrslt ...} group will be used for * unsupported and embedded fields. */ void parseField( RTFProperty* ); void parseFldinst( RTFProperty* ); void parseFldrslt( RTFProperty* ); /** * Font table destination callback */ void parseFontTable( RTFProperty * ); /** * This function parses footnotes * \todo Endnotes */ void parseFootNote( RTFProperty * ); /** * Style sheet destination callback. */ void parseStyleSheet( RTFProperty * ); /** * Color table destination callback. */ void parseColorTable( RTFProperty * ); /** * Picture destination callback. */ void parsePicture( RTFProperty * ); /** * Rich text destination callback. */ void parseRichText( RTFProperty * ); /** * Plain text destination callback. */ void parsePlainText( RTFProperty * ); /** * Do nothing special for this group */ void parseGroup( RTFProperty * ); /** * Discard all tokens until the current group is closed. */ void skipGroup( RTFProperty * ); /** * Change the destination. */ void changeDestination( RTFProperty *property ); /** * Reset formatting properties to their default settings. */ void resetState(); /** * Add anchor to current destination (see KWord DTD). * @param instance the frameset number in the document */ void addAnchor( const char *instance ); /** * Add format information to document node. * @param node the document node (destination) * @param format the format information * @param baseFormat the format information is based on this format */ void addFormat( DomNode &node, const KWFormat& format, const RTFFormat* baseFormat ); /** * Add layout information to document node. * @param node the document node (destination) * @param name the name of the current style * @param layout the paragraph layout information * @param frameBreak paragraph is always the last in a frame if true */ void addLayout( DomNode &node, const QString &name, const RTFLayout &layout, bool frameBreak ); /** * Add paragraph information to document node. * @param node the document node (destination) * @param frameBreak paragraph is always the last in a frame if true */ void addParagraph( DomNode &node, bool frameBreak ); void addVariable(const DomNode& spec, int type, const QString& key, const RTFFormat* fmt=0); void addImportedPicture( const QString& rawFileName ); /** * Add a date/time field and split it for KWord * @param format format of the date/time * @param isDate is it a date field? (For the default format, if needed) * @param fmt ??? */ void addDateTime( const QString& format, const bool isDate, RTFFormat& fmt ); /** * Finish table and recalculate cell borders. */ void finishTable(); /** * Write out part (file inside the store). * @param name the internal name of the part * @param node the data to write */ void writeOutPart( const char *name, const DomNode &node ); QString m_plainText; RTFTokenizer token; DomNode frameSets; DomNode pictures; DomNode author, company, title, doccomm; RTFTextState bodyText; QList footnotes; ///< list of footnotes int fnnum; ///< number of last footnote RTFTextState firstPageHeader, oddPagesHeader, evenPagesHeader; RTFTextState firstPageFooter, oddPagesFooter, evenPagesFooter; /** * Dummy text state for destinations without own RTFTextState * @note this is mainly to avoid dangling or NULL pointers */ RTFTextState m_dummyTextState; QMap fontTable; QStack styleSheet; QStack colorTable; QStack stateStack; QStack destinationStack; RTFGroupState state; RTFDestination destination; RTFTextState *textState; RTFFont font; RTFStyle style; RTFPicture picture; RTFTableCell emptyCell; KWFormat kwFormat; QHash properties; QHash destinationProperties; uint table; uint pictureNumber; ///< Picture number; increase *before* use! // Color table and document-formatting properties int red, green, blue; int paperWidth, paperHeight; int leftMargin, topMargin, rightMargin, bottomMargin; int defaultTab, defaultFont; bool landscape, facingPages; // Field support QByteArray fldinst, fldrslt; RTFFormat fldfmt; int flddst; ///< support for recursive fields QString inFileName; ///< File name of the source file. protected: QTextCodec* textCodec; ///< currently used QTextCodec by the RTF file //QTextCodec* utf8TextCodec; ///< QTextCodec for UTF-8 (used in \\u) QMap debugUnknownKeywords; bool m_batch; ///< Should the filter system be in batch mode (i.e. non-interactive) }; #endif qutim-0.2.0/plugins/mrim/coresrc/rtf/rtfimport_dom.h0000644000175000017500000000740111273054313024233 0ustar euroelessareuroelessar/* This file is part of the KDE project Copyright (C) 2001 Ewald Snel Copyright (C) 2001 Tomasz Grobelny 2009, modified by Rusanov Peter for Mail.Ru agent protocol needs under qutIM project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef __RTFIMPORT_DOM_H__ #define __RTFIMPORT_DOM_H__ #include #include //Added by qt3to4: #include class QColor; class QDateTime; /** * Escape the special XML characters and be careful to catch any disallowed control character */ QString CheckAndEscapeXmlText(const QString& strText); class DomNode { public: DomNode(); /** * Creates a new document. * @param doctype the document type (tag) */ explicit DomNode( const char *doctype ); /** * Creates a new document node (no memory allocation). * @param level the document depth of the node */ void clear( int level=0 ); /** * Adds a new node. * @param name the name of the new node (tag) */ void addNode( const char *name ); /** * Adds a text node. * @param text the text to write into the document node * @param codec the codec from the source document, to be used for encoding. */ void addTextNode( const char *text, QTextCodec* codec ); /** * Add border to existing frameset (see KWord DTD). */ void addBorder( int id, const QColor &color, int style, double width ); /** * Add color attributes to document node. * @param color the color */ void addColor( const QColor &color ); /** * Add rectangle attributes to document node. */ void addRect( int left, int top, int right, int bottom ); /** * Add pixmap or clipart key. * @param dt date/time * @param filename the filename of the image * @param name the relative path to the image in the store (optional) */ void addKey( const QDateTime& dt, const QString& filename, const QString& name = QString() ); /** * Add frameset to document (see KWord DTD). */ void addFrameSet( const char *name, int frameType, int frameInfo ); /** * Add frame to existing frameset (see KWord DTD). */ void addFrame( int left, int top, int right, int bottom, int autoCreateNewFrame, int newFrameBehaviour, int sheetSide ); /** * Sets a new attribute to a string value. */ void setAttribute( const QString& attribute, const QString& value ); /** * Sets a new attribute to an integer value. */ void setAttribute( const char *name, int value ); /** * Sets a new attribute to a double value. */ void setAttribute( const char *name, double value ); /** * Closes a document node. * @param name the node (tag) to close */ void closeNode( const char *name ); /** * Closes the current XML tag (if open). * @param nl add a newline */ void closeTag( bool nl ); /** * Appends a child node. * @param child the node to append to this document node */ void appendNode( const DomNode &child ); /** * Appends XML text to node */ void append( const QByteArray& cstr); void append( const QString& _str); void append( const char ch); /** * Returns true if node is empty. */ bool isEmpty() const; /** * Returns the data of the document node. */ QString toString() const; private: QString str; int documentLevel; bool hasChildren; bool hasAttributes; }; #endif qutim-0.2.0/plugins/mrim/coresrc/rtf/rtfimport_tokenizer.cpp0000644000175000017500000001135611273054313026025 0ustar euroelessareuroelessar/* This file is part of the KDE project Copyright (C) 2001 Ewald Snel Copyright (C) 2001 Tomasz Grobelny Copyright (C) 2005 Tommi Rantala 2009, modified by Rusanov Peter for Mail.Ru agent protocol needs under qutIM project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include "rtfimport_tokenizer.h" RTFTokenizer::RTFTokenizer() { tokenText.resize( 4113 ); infile = 0L; } /** * Open tokenizer from file. * @param in the input file */ void RTFTokenizer::open( QBuffer *in ) { infile = in; type = RTFTokenizer::PlainText; } int RTFTokenizer::nextChar() { QByteArray ch = infile->read(1); if (ch.length() == 0) return -1; int n = ch[0]; if (n <= 0) return -1; return n; } /** * Reads the next token. */ void RTFTokenizer::next() { int ch; value=0; if (!infile) return; do { int n = nextChar(); if ( n <= 0 ) { ch = '}'; break; } ch = n; } while (ch == '\n' || ch == '\r' && ch != 0); // Skip one byte for prepend '@' to destinations text = (tokenText.data() + 1); hasParam = false; uchar *_text = (uchar *)text; if (ch == '{') type = RTFTokenizer::OpenGroup; else if (ch == '}') type = RTFTokenizer::CloseGroup; else if (ch == '\\') { type = RTFTokenizer::ControlWord; int n = nextChar(); if ( n <= 0 ) { // Return CloseGroup on EOF type = RTFTokenizer::CloseGroup; return; } ch = n; // Type is either control word or control symbol if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { int v = 0; // Read alphabetic string (command) while (_text < ( uchar* )tokenText.data()+tokenText.size()-3 && ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) ) { *_text++ = ch; int n = nextChar(); if ( n <= 0 ) { ch = ' '; break; } ch = n; } // Read numeric parameter (param) bool isneg = (ch == '-'); if (isneg) { int n = nextChar(); if ( n <= 0 ) { type = RTFTokenizer::CloseGroup; return; } ch = n; } while (ch >= '0' && ch <= '9') { v = (10 * v) + ch - '0'; hasParam = true; int n = nextChar(); if ( n <= 0 ) n = ' '; ch = n; } value = isneg ? -v : v; // If delimiter is a space, it's part of the control word if (ch != ' ') { bool ok = infile->seek(infile->pos()-1); } *_text = 0; // Just put an end of string for the test, it can then be over-written again if ( !memcmp( tokenText.data()+1, "bin", 4 ) ) { // We have \bin, so we need to read the bytes if (value > 0) { type = RTFTokenizer::BinaryData; binaryData.resize(value); for (int i=0; ipos() >= infile->size()) break; char ch_t; infile->getChar(&ch_t); ch = (int)ch_t; } if(infile->pos() < infile->size()) infile->seek(infile->pos()-1); // give back the last char } *_text++ = 0; } qutim-0.2.0/plugins/mrim/coresrc/rtf/rtfimport.cpp0000644000175000017500000020365211273054313023735 0ustar euroelessareuroelessar/* This file is part of the KDE project Copyright (C) 2001 Ewald Snel Copyright (C) 2001 Tomasz Grobelny Copyright (C) 2003, 2004 Nicolas GOUTTE 2009, modified by Rusanov Peter for Mail.Ru agent protocol needs under qutIM project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include "rtfimport.h" #include // sprintf #define PROP(a,b,c,d,e) { a, b, &RTFImport::c, d, e } // defines a member variable of RTFImport as a property (DEPRECATED) #define MEMBER(a,b,c,d,e) PROP(a,b,c,offsetof(RTFImport,d),e) static RTFProperty destinationPropertyTable[] = { // only-valid-in control word function offset, value PROP( 0L, "@*", skipGroup, 0L, false ), MEMBER( "@info", "@author", parsePlainText, author, false ), PROP( "@pict", "@blipuid", parseBlipUid, 0, 0 ), PROP( "@rtf", "@colortbl", parseColorTable, 0L, true ), MEMBER( "@info", "@company", parsePlainText, company, false ), MEMBER( "@info", "@doccomm", parsePlainText, doccomm, false ), PROP( "Text", "@field", parseField, 0L, false ), PROP( "@field", "@fldinst", parseFldinst, 0L, false ), PROP( "@field", "@fldrslt", parseFldrslt, 0L, false ), PROP( "@rtf", "@fonttbl", parseFontTable, 0L, true ), MEMBER( "@rtf", "@footer", parseRichText, oddPagesFooter, true ), PROP( "@rtf", "@footnote", parseFootNote, 0L, true ), MEMBER( "@rtf", "@footerf", parseRichText, firstPageFooter, true ), MEMBER( "@rtf", "@footerl", parseRichText, oddPagesFooter, true ), MEMBER( "@rtf", "@footerr", parseRichText, evenPagesFooter, true ), MEMBER( "@rtf", "@header", parseRichText, oddPagesHeader, true ), MEMBER( "@rtf", "@headerf", parseRichText, firstPageHeader, true ), MEMBER( "@rtf", "@headerl", parseRichText, oddPagesHeader, true ), MEMBER( "@rtf", "@headerr", parseRichText, evenPagesHeader, true ), PROP( "@rtf", "@info", parseGroup, 0L, true ), PROP( "Text", "@nonshppict", skipGroup, 0L, false ), PROP( 0L, "@panose", skipGroup, 0L, 0 ), // Not supported PROP( "Text", "@pict", parsePicture, 0L, true ), MEMBER( "@", "@rtf", parseRichText, bodyText, true ), PROP( "Text", "@shpinst", skipGroup, 0L, true ), PROP( "Text", "@shppict", parseGroup, 0L, false ), PROP( "@rtf", "@stylesheet", parseStyleSheet, 0L, true ), MEMBER( "@info", "@title", parsePlainText, title, false ), }; static RTFProperty propertyTable[] = // Alphabetical order { // only-valid-in control word function offset, value PROP( "Text", "\n", insertParagraph, 0L, 0 ), PROP( "Text", "\r", insertParagraph, 0L, 0 ), PROP( 0L, "\'", insertHexSymbol, 0L, 0 ), PROP( 0L, "\\", insertSymbol, 0L, '\\' ), PROP( 0L, "_", insertSymbol, 0L, 0x2011 ), PROP( 0L, "{", insertSymbol, 0L, '{' ), PROP( 0L, "|", insertSymbol, 0L, 0x00b7 ), PROP( 0L, "}", insertSymbol, 0L, '}' ), PROP( 0L, "~", insertSymbol, 0L, 0x00a0 ), PROP( 0L, "-", insertSymbol, 0L, 0x00ad ), PROP( 0L, "adjustright", ignoreKeyword, 0L, 0 ), // Not supported, KWord has no grid PROP( 0L, "ansi", setAnsiCodepage, 0L, 0 ), PROP( 0L, "ansicpg", setCodepage, 0L, 0 ), MEMBER( 0L, "b", setToggleProperty, state.format.bold, 0 ), // \bin is handled in the tokenizer MEMBER( "@colortbl", "blue", setNumericProperty, blue, 0 ), MEMBER( 0L, "box", setEnumProperty, state.layout.border, 0 ), PROP( 0L, "brdrb", selectLayoutBorder, 0L, 3 ), PROP( 0L, "brdrcf", setBorderColor, 0L, 0 ), PROP( 0L, "brdrdash", setBorderStyle, 0L, RTFBorder::Dashes ), PROP( 0L, "brdrdashd", setBorderStyle, 0L, RTFBorder::DashDot ), PROP( 0L, "brdrdashdd", setBorderStyle, 0L, RTFBorder::DashDotDot ), PROP( 0L, "brdrdashsm", setBorderStyle, 0L, RTFBorder::Dashes ), PROP( 0L, "brdrdb", setBorderStyle, 0L, RTFBorder::Solid ), PROP( 0L, "brdrdot", setBorderStyle, 0L, RTFBorder::Dots ), PROP( 0L, "brdrhairline", setBorderStyle, 0L, RTFBorder::Solid ), PROP( 0L, "brdrl", selectLayoutBorder, 0L, 0 ), PROP( 0L, "brdrr", selectLayoutBorder, 0L, 1 ), PROP( 0L, "brdrs", setBorderStyle, 0L, RTFBorder::Solid ), PROP( 0L, "brdrsh", setBorderStyle, 0L, RTFBorder::Solid ), PROP( 0L, "brdrt", selectLayoutBorder, 0L, 2 ), PROP( 0L, "brdrth", setBorderStyle, 0L, RTFBorder::Solid ), PROP( 0L, "brdrw", setBorderProperty, offsetof(RTFBorder,width), 0 ), PROP( 0L, "bullet", insertSymbol, 0L, 0x2022 ), PROP( 0L, "brsp", setBorderProperty, offsetof(RTFBorder,space), 0 ), MEMBER( 0L, "caps", setToggleProperty, state.format.caps, 0 ), MEMBER( 0L, "cb", setNumericProperty, state.format.bgcolor, 0 ), MEMBER( 0L, "highlight", setNumericProperty, state.format.bgcolor, 0 ), PROP( "Text", "cell", insertTableCell, 0L, 0 ), PROP( 0L, "cellx", insertCellDef, 0L, 0 ), MEMBER( 0L, "cf", setNumericProperty, state.format.color, 0 ), PROP( 0L, "chdate", insertDateTime, 0L, true ), PROP( 0L, "chpgn", insertPageNumber, 0L, 0 ), PROP( 0L, "chtime", insertDateTime, 0L, false ), PROP( 0L, "clbrdrb", selectLayoutBorderFromCell, 0L, 3 ), PROP( 0L, "clbrdrl", selectLayoutBorderFromCell, 0L, 0 ), PROP( 0L, "clbrdrr", selectLayoutBorderFromCell, 0L, 1 ), PROP( 0L, "clbrdrt", selectLayoutBorderFromCell, 0L, 2 ), MEMBER( 0L, "clcbpat", setNumericProperty, state.tableCell.bgcolor, 0 ), PROP( 0L, "cs", ignoreKeyword, 0L, 0 ), // Not supported by KWord 1.3 PROP( 0L, "datafield", skipGroup, 0L, 0 ), // Binary data in variables are not supported MEMBER( "@rtf", "deff", setNumericProperty, defaultFont, 0 ), MEMBER( "@rtf", "deftab", setNumericProperty, defaultTab, 0 ), PROP( "@pict", "dibitmap", setPictureType, 0L, RTFPicture::BMP ), MEMBER( 0L, "dn", setNumericProperty, state.format.baseline, 6 ), PROP( 0L, "emdash", insertSymbol, 0L, 0x2014 ), PROP( "@pict", "emfblip", setPictureType, 0L, RTFPicture::EMF ), PROP( 0L, "emspace", insertSymbol, 0L, 0x2003 ), PROP( 0L, "endash", insertSymbol, 0L, 0x2013 ), PROP( 0L, "enspace", insertSymbol, 0L, 0x2002 ), PROP( 0L, "expnd", ignoreKeyword, 0L, 0 ), // Expansion/compression of character inter-space not supported PROP( 0L, "expndtw", ignoreKeyword, 0L, 0 ), // Expansion/compression of character inter-space not supported MEMBER( 0L, "f", setNumericProperty, state.format.font, 0 ), MEMBER( "@rtf", "facingp", setFlagProperty, facingPages, true ), PROP( 0L, "fcharset", setCharset, 0L, 0 ), // Not needed with Qt PROP( "@fonttbl", "fdecor", setFontStyleHint, 0L, QFont::Decorative ), MEMBER( 0L, "fi", setNumericProperty, state.layout.firstIndent, 0 ), PROP( "@fonttbl", "fmodern", setFontStyleHint, 0L, QFont::TypeWriter ), PROP( "@fonttbl", "fnil", setFontStyleHint, 0L, QFont::AnyStyle ), MEMBER( 0L, "footery", setNumericProperty, state.section.footerMargin, 0 ), PROP( 0L, "formshade", ignoreKeyword, 0L, 0 ), // Not supported, KWord has no form support MEMBER( "@fonttbl", "fprq", setNumericProperty, font.fixedPitch, 0 ), PROP( "@fonttbl", "froman", setFontStyleHint, 0L, QFont::Serif ), MEMBER( 0L, "fs", setNumericProperty, state.format.fontSize, 0 ), PROP( "@fonttbl", "fscript", setFontStyleHint, 0L, QFont::AnyStyle ), PROP( "@fonttbl", "fswiss", setFontStyleHint, 0L, QFont::SansSerif ), PROP( "@fonttbl", "ftech", setFontStyleHint, 0L, QFont::AnyStyle ), MEMBER( "@colortbl", "green", setNumericProperty, green, 0 ), MEMBER( 0L, "headery", setNumericProperty, state.section.headerMargin, 0 ), MEMBER( 0L, "i", setToggleProperty, state.format.italic, 0 ), MEMBER( 0L, "intbl", setFlagProperty, state.layout.inTable, true ), PROP( "@pict", "jpegblip", setPictureType, 0L, RTFPicture::JPEG ), MEMBER( 0L, "keep", setFlagProperty, state.layout.keep, true ), MEMBER( 0L, "keepn", setFlagProperty, state.layout.keepNext, true ), MEMBER( "@rtf", "landscape", setFlagProperty, landscape, true ), PROP( 0L, "ldblquote", insertSymbol, 0L, 0x201c ), MEMBER( 0L, "li", setNumericProperty, state.layout.leftIndent, 0 ), PROP( 0L, "line", insertSymbol, 0L, 0x000a ), PROP( 0L, "lquote", insertSymbol, 0L, 0x2018 ), PROP( 0L, "ltrmark", insertSymbol, 0L, 0x200e ), PROP( 0L, "mac", setMacCodepage, 0L, 0 ), PROP( "@pict", "macpict", setPictureType, 0L, RTFPicture::MacPict ), MEMBER( "@rtf", "margb", setNumericProperty, bottomMargin, 0 ), MEMBER( "@rtf", "margl", setNumericProperty, leftMargin, 0 ), MEMBER( "@rtf", "margr", setNumericProperty, rightMargin, 0 ), MEMBER( "@rtf", "margt", setNumericProperty, topMargin, 0 ), MEMBER( 0L, "nosupersub", setEnumProperty, state.format.vertAlign, RTFFormat::Normal ), PROP( "Text", "page", insertPageBreak, 0L, 0 ), MEMBER( 0L, "pagebb", setFlagProperty, state.layout.pageBB, true ), MEMBER( "@rtf", "paperh", setNumericProperty, paperHeight, 0 ), MEMBER( "@rtf", "paperw", setNumericProperty, paperWidth, 0 ), PROP( "Text", "par", insertParagraph, 0L, 0 ), PROP( 0L, "pard", setParagraphDefaults, 0L, 0 ), PROP( 0L, "pc", setPcCodepage, 0L, 0 ), PROP( 0L, "pca", setPcaCodepage, 0L, 0 ), MEMBER( 0L, "pgbrk", setToggleProperty, state.layout.pageBA, true ), MEMBER( "@pict", "piccropb", setNumericProperty, picture.cropBottom, 0 ), MEMBER( "@pict", "piccropl", setNumericProperty, picture.cropLeft, 0 ), MEMBER( "@pict", "piccropr", setNumericProperty, picture.cropRight, 0 ), MEMBER( "@pict", "piccropt", setNumericProperty, picture.cropTop, 0 ), MEMBER( "@pict", "pich", setNumericProperty, picture.height, 0 ), MEMBER( "@pict", "pichgoal", setNumericProperty, picture.desiredHeight, 0 ), MEMBER( "@pict", "picscaled", setFlagProperty, picture.scaled, true ), MEMBER( "@pict", "picscalex", setNumericProperty, picture.scalex, 0 ), MEMBER( "@pict", "picscaley", setNumericProperty, picture.scaley, 0 ), MEMBER( "@pict", "picw", setNumericProperty, picture.width, 0 ), MEMBER( "@pict", "picwgoal", setNumericProperty, picture.desiredWidth, 0 ), PROP( 0L, "plain", setPlainFormatting, 0L, 0 ), PROP( "@pict", "pmmetafile", setPictureType, 0L, RTFPicture::WMF ), PROP( "@pict", "pngblip", setPictureType, 0L, RTFPicture::PNG ), MEMBER( 0L, "qc", setEnumProperty, state.layout.alignment, RTFLayout::Centered ), MEMBER( 0L, "qj", setEnumProperty, state.layout.alignment, RTFLayout::Justified ), MEMBER( 0L, "ql", setEnumProperty, state.layout.alignment, RTFLayout::Left ), PROP( 0L, "qmspace", insertSymbol, 0L, 0x2004 ), MEMBER( 0L, "qr", setEnumProperty, state.layout.alignment, RTFLayout::Right ), PROP( 0L, "rdblquote", insertSymbol, 0L, 0x201d ), MEMBER( "@colortbl", "red", setNumericProperty, red, 0 ), MEMBER( 0L, "ri", setNumericProperty, state.layout.rightIndent, 0 ), PROP( "Text", "row", insertTableRow, 0L, 0 ), PROP( 0L, "rquote", insertSymbol, 0L, 0x2019 ), PROP( 0L, "rtlmark", insertSymbol, 0L, 0x200f ), MEMBER( 0L, "s", setNumericProperty, state.layout.style, 0 ), MEMBER( 0L, "sa", setNumericProperty, state.layout.spaceAfter, 0 ), MEMBER( 0L, "sb", setNumericProperty, state.layout.spaceBefore, 0 ), MEMBER( 0L, "scaps", setToggleProperty, state.format.smallCaps, 0 ), PROP( "Text", "sect", insertPageBreak, 0L, 0 ), PROP( 0L, "sectd", setSectionDefaults, 0L, 0 ), MEMBER( 0L, "sl", setNumericProperty, state.layout.spaceBetween, 0 ), MEMBER( 0L, "slmult", setToggleProperty, state.layout.spaceBetweenMultiple, 0 ), MEMBER( "@stylesheet", "snext", setNumericProperty, style.next, 0 ), MEMBER( 0L, "strike", setToggleProperty, state.format.strike, 0 ), MEMBER( 0L, "striked", setToggleProperty, state.format.striked, 0 ), MEMBER( 0L, "sub", setEnumProperty, state.format.vertAlign, RTFFormat::SubScript ), MEMBER( 0L, "super", setEnumProperty, state.format.vertAlign, RTFFormat::SuperScript ), PROP( 0L, "tab", insertSymbol, 0L, 0x0009 ), MEMBER( 0L, "titlepg", setFlagProperty, state.section.titlePage, true ), MEMBER( 0L, "tldot", setEnumProperty, state.layout.tab.leader, RTFTab::Dots ), MEMBER( 0L, "tlhyph", setEnumProperty, state.layout.tab.leader, RTFTab::Hyphens ), MEMBER( 0L, "tlth", setEnumProperty, state.layout.tab.leader, RTFTab::ThickLine ), MEMBER( 0L, "tlul", setEnumProperty, state.layout.tab.leader, RTFTab::Underline ), MEMBER( 0L, "tqc", setEnumProperty, state.layout.tab.type, RTFTab::Centered ), MEMBER( 0L, "tqdec", setEnumProperty, state.layout.tab.type, RTFTab::Decimal ), MEMBER( 0L, "tqr", setEnumProperty, state.layout.tab.type, RTFTab::FlushRight ), MEMBER( 0L, "trleft", setNumericProperty, state.tableRow.left, 0 ), MEMBER( 0L, "trowd", setTableRowDefaults, state.tableRow, 0 ), MEMBER( 0L, "trqc", setEnumProperty, state.tableRow.alignment, RTFLayout::Centered ), MEMBER( 0L, "trql", setEnumProperty, state.tableRow.alignment, RTFLayout::Left ), MEMBER( 0L, "trqr", setEnumProperty, state.tableRow.alignment, RTFLayout::Right ), MEMBER( 0L, "trrh", setNumericProperty, state.tableRow.height, 0 ), PROP( 0L, "tx", insertTabDef, 0L, 0 ), MEMBER( 0L, "u", insertUnicodeSymbol, state.format.uc, 0 ), MEMBER( 0L, "uc", setNumericProperty, state.format.uc, 0 ), PROP( 0L, "ul", setSimpleUnderlineProperty, 0L, 0 ), MEMBER( 0L, "ulc", setNumericProperty, state.format.underlinecolor, 0 ), PROP( 0L, "uld", setUnderlineProperty, 0L, RTFFormat::UnderlineDot ), PROP( 0L, "uldash", setUnderlineProperty, 0L, RTFFormat::UnderlineDash ), PROP( 0L, "uldashd", setUnderlineProperty, 0L, RTFFormat::UnderlineDashDot ), PROP( 0L, "uldashdd", setUnderlineProperty, 0L, RTFFormat::UnderlineDashDotDot ), PROP( 0L, "uldb", setUnderlineProperty, 0L, RTFFormat::UnderlineDouble ), PROP( 0L, "ulnone", setUnderlineProperty, 0L, RTFFormat::UnderlineNone ), PROP( 0L, "ulth", setUnderlineProperty, 0L, RTFFormat::UnderlineThick ), PROP( 0L, "ulw", setUnderlineProperty, 0L, RTFFormat::UnderlineWordByWord ), PROP( 0L, "ulwave", setUnderlineProperty, 0L, RTFFormat::UnderlineWave ), PROP( 0L, "ulhwave", setUnderlineProperty, 0L, RTFFormat::UnderlineWave ), PROP( 0L, "ululdbwave", setUnderlineProperty, 0L, RTFFormat::UnderlineWave ), MEMBER( 0L, "up", setUpProperty, state.format.baseline, 6 ), MEMBER( 0L, "v", setToggleProperty, state.format.hidden, 0 ), // ### TODO: \wbitmap: a Windows Device-Dependent Bitmap is not a BMP PROP( "@pict", "wbitmap", setPictureType, 0L, RTFPicture::BMP ), PROP( "@pict", "wmetafile", setPictureType, 0L, RTFPicture::EMF ), PROP( 0L, "zwj", insertSymbol, 0L, 0x200d ), PROP( 0L, "zwnj", insertSymbol, 0L, 0x200c ) }; static RTFField fieldTable[] = { // id type subtype default value { "AUTHOR", 8, 2, "NO AUTHOR" }, { "FILENAME", 8, 0, "NO FILENAME" }, { "TITLE", 8, 10, "NO TITLE" }, { "NUMPAGES", 4, 1, 0 }, { "PAGE", 4, 0, 0 }, { "TIME", -1, -1, 0 }, { "DATE", -1, -1, 0 }, { "HYPERLINK", 9, -1, 0 }, { "SYMBOL", -1, -1, 0 }, { "IMPORT", -1, -1, 0 } }; // KWord attributes static const char *alignN[4] = { "left", "right", "justify", "center" }; static const char *boolN[2] = { "false", "true" }; static const char *borderN[4] = { "LEFTBORDER", "RIGHTBORDER", "TOPBORDER", "BOTTOMBORDER" }; RTFImport::RTFImport( ) : properties(), destinationProperties(), textCodec(0) { for (uint i=0; i < sizeof(propertyTable) / sizeof(propertyTable[0]); i++) { properties.insert( QString(propertyTable[i].name), &propertyTable[i] ); } for (uint i=0; i < sizeof(destinationPropertyTable) / sizeof(destinationPropertyTable[0]); i++) { destinationProperties.insert( QString(destinationPropertyTable[i].name), &destinationPropertyTable[i] ); } fnnum=0; } QString RTFImport::convert( QString& aRtfText ) { // This filter only supports RTF to KWord conversion QTime debugTime; debugTime.start(); m_plainText.clear(); // Are we in batch mode, i.e. non-interactive m_batch=false; QBuffer* buff = new QBuffer(); buff->open(QIODevice::ReadWrite); qint64 len = buff->write(aRtfText.toAscii()); buff->seek(0); token.open( buff ); token.next(); if (token.type != RTFTokenizer::OpenGroup) { return QString(); } // Verify document type and version (RTF version 1.x) token.next(); if (token.type != RTFTokenizer::ControlWord) { return QString(); } bool force = false; // By default do not force, despite an unknown keyword or version if ( !qstrcmp( token.text, "rtf" ) ) { // RTF is normally version 1 but at least Ted uses 0 as version number if ( token.value > 1 ) { return QString(); } } else if ( !qstrcmp( token.text, "pwd" ) ) { // PocketWord's PWD format is similar to RTF but has a version number of 2. if ( token.value != 2 ) { return QString(); } } else if ( !qstrcmp( token.text, "urtf" ) ) { // URTF seems to have either no version or having version 1 if ( token.value > 1 ) { return QString(); } } else { return QString(); } table = 0; pictureNumber = 0; // Document-formatting properties paperWidth = 12240; paperHeight = 15840; leftMargin = 1800; topMargin = 1440; rightMargin = 1800; bottomMargin= 1440; defaultTab = 720; defaultFont = 0; landscape = false; facingPages = false; // Create main document frameSets.clear( 2 ); pictures.clear(); bodyText.node.clear( 3 ); firstPageHeader.node.clear( 3 ); oddPagesHeader.node.clear( 3 ); evenPagesHeader.node.clear( 3 ); firstPageFooter.node.clear( 3 ); oddPagesFooter.node.clear( 3 ); evenPagesFooter.node.clear( 3 ); author.clear(); company.clear(); title.clear(); doccomm.clear(); stateStack.push( state ); // Add a security item for the destination stack destination.name = "!stackbottom"; changeDestination( destinationProperties["@rtf"] ); flddst = -1; emptyCell = state.tableCell; state.format.uc=1; state.ignoreGroup = false; // There is no default encoding in RTF, it must be always declared. (But beware of buggy files!) textCodec=QTextCodec::codecForName("CP1251"); // Or IBM 437 ? // Parse RTF document while (true) { bool firstToken = false; bool ignoreUnknown = false; token.next(); while (token.type == RTFTokenizer::OpenGroup) { // Store the current state on the stack stateStack.push( state ); state.brace0 = false; firstToken = true; ignoreUnknown = false; token.next(); if (token.type == RTFTokenizer::ControlWord && !qstrcmp( token.text, "*" )) { // {\*\control ...} destination ignoreUnknown = true; token.next(); } } if (token.type == RTFTokenizer::CloseGroup) { if (state.brace0) { // Close the current destination (this->*destination.destproc)(0L); ////kDebug(30515) <<"Closing destination..." << destinationStack.count(); if (destinationStack.isEmpty()) { } else { destination = destinationStack.pop(); } } // ### TODO: why can this not be simplified to use QValueList::isEmpty() if (stateStack.count() <= 1) { // End-of-document, keep formatting properties stateStack.pop(); break; } else { // Retrieve the current state from the stack state = stateStack.pop(); } } else if (token.type == RTFTokenizer::ControlWord) { RTFProperty *property = properties[token.text]; if (property != 0L) { if (property->onlyValidIn == 0L || property->onlyValidIn == destination.name || property->onlyValidIn == destination.group) { (this->*property->cwproc)( property ); } } else if (firstToken) { // Possible destination change *(--token.text) = '@'; property = destinationProperties[token.text]; if ((property != 0L) && (property->onlyValidIn == 0L || property->onlyValidIn == destination.name || property->onlyValidIn == destination.group)) { // Change destination changeDestination( property ); } else if (ignoreUnknown) { // Skip unknown {\* ...} destination changeDestination( destinationProperties["@*"] ); debugUnknownKeywords[token.text]++; } else if ( !property ) { debugUnknownKeywords[token.text]++; } } else { debugUnknownKeywords[token.text]++; } } else if (token.type == RTFTokenizer::PlainText || token.type == RTFTokenizer::BinaryData) { (this->*destination.destproc)(0L); } } // Determine header and footer type const int hType = facingPages ? (state.section.titlePage ? 3 : 1) : (state.section.titlePage ? 2 : 0); const bool hasHeader = !oddPagesHeader.node.isEmpty() || (facingPages &&!evenPagesHeader.node.isEmpty()) || (state.section.titlePage && !firstPageHeader.node.isEmpty()); const bool hasFooter = !oddPagesFooter.node.isEmpty() || (facingPages && !evenPagesFooter.node.isEmpty()) || (state.section.titlePage && !firstPageFooter.node.isEmpty()); // Create main document DomNode mainDoc( "DOC" ); mainDoc.addNode( "FRAMESETS" ); mainDoc.addFrameSet( "Frameset 1", 1, 0 ); mainDoc.addFrame( leftMargin, topMargin, (paperWidth - rightMargin), (paperHeight - bottomMargin), 1, 0, 0 ); mainDoc.closeNode( "FRAME" ); mainDoc.appendNode( bodyText.node ); mainDoc.closeNode( "FRAMESET" ); mainDoc.closeNode( "STYLES" ); mainDoc.closeNode( "DOC" ); return m_plainText; } void RTFImport::ignoreKeyword( RTFProperty * ) { } void RTFImport::setCodepage( RTFProperty * ) { textCodec=QTextCodec::codecForName("CP1251"); } void RTFImport::setMacCodepage( RTFProperty * ) { textCodec=QTextCodec::codecForName("CP1251"); } void RTFImport::setAnsiCodepage( RTFProperty * ) { textCodec=QTextCodec::codecForName("CP1251"); } void RTFImport::setPcaCodepage( RTFProperty * ) { textCodec=QTextCodec::codecForName("CP1251"); } void RTFImport::setPcCodepage( RTFProperty * ) { textCodec=QTextCodec::codecForName("CP1251"); } void RTFImport::setToggleProperty( RTFProperty *property ) { ((bool *)this)[property->offset] = (!token.hasParam || token.value != 0); } void RTFImport::setFlagProperty( RTFProperty *property ) { ((bool *)this)[property->offset] = property->value; } void RTFImport::setCharset( RTFProperty *property ) { textCodec=QTextCodec::codecForName("CP1251"); } void RTFImport::setNumericProperty( RTFProperty *property ) { *((int *)(((char *)this) + property->offset)) = token.hasParam ? token.value : property->value; } void RTFImport::setEnumProperty( RTFProperty *property ) { *((int *)(((char *)this) + property->offset)) = property->value; } void RTFImport::setFontStyleHint( RTFProperty* property ) { font.styleHint = QFont::StyleHint( property->value ); } void RTFImport::setPictureType( RTFProperty* property ) { picture.type = RTFPicture::PictureType( property->value ); } void RTFImport::setSimpleUnderlineProperty( RTFProperty* ) { state.format.underline = (!token.hasParam || token.value != 0) ? RTFFormat::UnderlineSimple : RTFFormat::UnderlineNone; } void RTFImport::setUnderlineProperty( RTFProperty* property ) { state.format.underline = RTFFormat::Underline( property->value ); } void RTFImport::setBorderStyle( RTFProperty *property ) { if (state.layout.border) { state.layout.border->style = static_cast ( property->value ); } else { for (uint i=0; i < 4; i++) { state.layout.borders[i].style = static_cast ( property->value ); } } } void RTFImport::setBorderProperty( RTFProperty *property ) { ////kDebug() <<"setBorderProperty:"; if (state.layout.border) { state.layout.border->width = token.value; } else { for (uint i=0; i < 4; i++) { state.layout.borders[i].width = token.value; } } } void RTFImport::setBorderColor( RTFProperty * ) { if (state.layout.border) { state.layout.border->color = token.value; } else { for (uint i=0; i < 4; i++) { state.layout.borders[i].color = token.value; } } } void RTFImport::setUpProperty( RTFProperty * ) { state.format.baseline = token.hasParam ? -token.value : -6; } void RTFImport::setPlainFormatting( RTFProperty * ) { RTFFormat &format = state.format; format.font = defaultFont; format.fontSize = 24; format.baseline = 0; format.color = -1; format.bgcolor = -1; format.underlinecolor = -1; format.vertAlign = RTFFormat::Normal; format.bold = false; format.italic = false; format.strike = false; format.striked = false; format.hidden = false; format.caps = false; format.smallCaps = false; format.underline = RTFFormat::UnderlineNone; // Do not reset format.uc ! } void RTFImport::setParagraphDefaults( RTFProperty * ) { RTFLayout &layout = state.layout; layout.tablist.clear(); layout.tab.type = RTFTab::Left; layout.tab.leader = RTFTab::None; for (uint i=0; i < 4; i++) { RTFBorder &border = layout.borders[i]; border.color = -1; border.width = 0; border.style = RTFBorder::None; } layout.firstIndent = 0; layout.leftIndent = 0; layout.rightIndent = 0; layout.spaceBefore = 0; layout.spaceAfter = 0; layout.spaceBetween = 0; layout.spaceBetweenMultiple = false; layout.style = 0; layout.alignment = RTFLayout::Left; layout.border = 0L; layout.inTable = false; layout.keep = false; layout.keepNext = false; layout.pageBB = false; layout.pageBA = false; } void RTFImport::setSectionDefaults( RTFProperty * ) { RTFSectionLayout §ion = state.section; section.headerMargin = 720; section.footerMargin = 720; section.titlePage = false; } void RTFImport::setTableRowDefaults( RTFProperty * ) { RTFTableRow &tableRow = state.tableRow; RTFTableCell &tableCell = state.tableCell; tableRow.height = 0; tableRow.left = 0; tableRow.alignment = RTFLayout::Left; tableRow.cells.clear(); tableCell.bgcolor = -1; for (uint i=0; i < 4; i++) { RTFBorder &border = tableCell.borders[i]; border.color = -1; border.width = 0; border.style = RTFBorder::None; } } void RTFImport::selectLayoutBorder( RTFProperty * property ) { state.layout.border = & state.layout.borders [ property->value ]; } void RTFImport::selectLayoutBorderFromCell( RTFProperty * property ) { state.layout.border = & state.tableCell.borders [ property->value ]; } void RTFImport::insertParagraph( RTFProperty * ) { if (state.layout.inTable) { if (textState->table == 0) { // Create a new table cell textState->table = ++table; } addParagraph( textState->cell, false ); } else { if (textState->table) { finishTable(); } addParagraph( textState->node, false ); } } void RTFImport::insertPageBreak( RTFProperty * ) { if (textState->length > 0) { insertParagraph(); } addParagraph( textState->node, true ); } void RTFImport::insertTableCell( RTFProperty * ) { //{{ bool b = state.layout.inTable; state.layout.inTable = true; insertParagraph(); state.layout.inTable = b; //}} textState->frameSets << textState->cell.toString(); textState->cell.clear( 3 ); } void RTFImport::insertTableRow( RTFProperty * ) { if (!textState->frameSets.isEmpty()) { RTFTableRow row = state.tableRow; row.frameSets = textState->frameSets; if (textState->rows.isEmpty()) { char buf[64]; sprintf( buf, "Table %d", textState->table ); RTFLayout::Alignment align = row.alignment; // Store the current state on the stack stateStack.push( state ); resetState(); state.layout.alignment = align; // table alignment // Add anchor for new table (default layout) addAnchor( buf ); addParagraph( textState->node, false ); // Retrieve the current state from the stack state = stateStack.pop(); } // Number of cell definitions should equal the number of cells while (row.cells.count() > row.frameSets.count()) { // ### TODO: verify if it is the right action and how we have come here at all. row.cells.pop_back(); } while (row.cells.count() < row.frameSets.count()) { row.cells << row.cells.last(); } int lx = row.left; // Each cell should be at least 1x1 in size if (row.height == 0) { row.height = 1; } for (int k=0; k < row.cells.count(); k++) { if ((row.cells[k].x - lx) < 1) row.cells[k].x = ++lx; else lx = row.cells[k].x; } if (row.left < 0) { for (int k=0; k < row.cells.count(); k++) { row.cells[k].x -= row.left; } row.left = 0; } textState->rows << row; textState->frameSets.clear(); } } void RTFImport::insertCellDef( RTFProperty * ) { RTFTableCell &cell = state.tableCell; cell.x = token.value; state.tableRow.cells << cell; cell.bgcolor = -1; for (uint i=0; i < 4; i++) { RTFBorder &border = cell.borders[i]; border.color = -1; border.width = 0; border.style = RTFBorder::None; } } void RTFImport::insertTabDef( RTFProperty * ) { RTFTab tab = state.layout.tab; tab.position = token.value; state.layout.tablist.push( tab ); tab.type = RTFTab::Left; tab.leader = RTFTab::None; } void RTFImport::insertUTF8( int ch ) { char buf[4]; char *text = buf; char *tk = token.text; token.type = RTFTokenizer::PlainText; token.text = buf; // We do not test if the character is not allowed in XML: // - it will be done later // - list definitions need to use char(1), char(2)... // ### FIXME: for high Unicode values, RTF uses negative values if (ch > 0x007f) { if (ch > 0x07ff) { *text++ = 0xe0 | (ch >> 12); ch = (ch & 0xfff) | 0x1000; } *text++ = ((ch >> 6) | 0x80) ^ 0x40; ch = (ch & 0x3f) | 0x80; } *text++ = ch; *text++ = 0; textCodec = QTextCodec::codecForName("CP1251"); (this->*destination.destproc)(0L); token.text = tk; } void RTFImport::insertSymbol( RTFProperty *property ) { insertUTF8( property->value ); } void RTFImport::insertHexSymbol( RTFProperty * ) { qDebug()<<"insertHexSymbol:"<< token.value; // Be careful, the value given in \' could be only one byte of a multi-byte character. // So it cannot be assumed that it will result in one character. // Some files have \'00 which is pretty bad, as NUL is end of string for us. // (e.g. attachment #7758 of bug #90649) if ( !token.value ) { //kWarning(30515) << "Trying to insert NUL character!"; return; } char tmpch[2] = {token.value, '\0'}; char *tk = token.text; token.type = RTFTokenizer::PlainText; token.text = tmpch; (this->*destination.destproc)(0L); token.text = tk; } void RTFImport::insertUnicodeSymbol( RTFProperty * ) { const int ch = token.value; // Ignore the next N characters (or control words) for (uint i=state.format.uc; i > 0; ) { token.next(); if (token.type == RTFTokenizer::ControlWord) --i; // Ignore as single token else if (token.type == RTFTokenizer::OpenGroup || token.type == RTFTokenizer::CloseGroup) { break; } else if (token.type == RTFTokenizer::PlainText) { const uint len = qstrlen( token.text ); if ( len < i ) i -= len; else { token.text += i; break; } } } if (token.type != RTFTokenizer::PlainText) { token.type = RTFTokenizer::PlainText; token.text[0] = 0; } insertUTF8( ch ); // ### TODO: put it higher in this function (this->*destination.destproc)(0L); } void RTFImport::parseFontTable( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { font.name.clear(); font.styleHint = QFont::AnyStyle; font.fixedPitch = 0; } else if (token.type == RTFTokenizer::PlainText) { if (!textCodec) { //kError(30515) << "No text codec for font!" << endl; return; // We have no text codec, so we cannot proceed! } // ### TODO VERIFY: a RTF group could be in the middle of the font name // ### TODO VERIFY: I do not now if it is specified in RTF but attachment #7758 of bug #90649 has it. // Semicolons separate fonts if (strchr( token.text, ';' ) == 0L) // ### TODO: is this allowed with multi-byte Asian characters? font.name += textCodec->toUnicode( token.text ); else { // Add font to font table *strchr( token.text, ';' ) = 0; // ### TODO: is this allowed with multi-byte Asian characters? font.name += textCodec->toUnicode( token.text ); // Use Qt to look up the closest matching installed font QFont qFont( font.name ); qFont.setFixedPitch( (font.fixedPitch == 1) ); qFont.setStyleHint( font.styleHint ); for(;!qFont.exactMatch();) { int space=font.name.lastIndexOf(' ', font.name.length()); if(space==-1) break; font.name.truncate(space); qFont.setFamily( font.name ); } const QFontInfo info( qFont ); const QString newFontName ( info.family() ); //kDebug(30515) <<"Font" << state.format.font <<" asked:" << font.name <<" given:" << newFontName; if ( newFontName.isEmpty() ) fontTable.insert( state.format.font, font.name ); else fontTable.insert( state.format.font, newFontName ); font.name.truncate( 0 ); font.styleHint = QFont::AnyStyle; font.fixedPitch = 0; } } } void RTFImport::parseStyleSheet( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { style.name = ""; style.next = -1; } else if (token.type == RTFTokenizer::PlainText) { // Semicolons separate styles if (strchr( token.text, ';' ) == 0L) // ### TODO: is this allowed with multi-byte Asian characters? style.name += textCodec->toUnicode( token.text ); else { // Add style to style sheet *strchr( token.text, ';' ) = 0; // ### TODO: is this allowed with multi-byte Asian characters? style.name += textCodec->toUnicode( token.text ); style.format = state.format; style.layout = state.layout; style.next = (style.next == -1) ? style.layout.style : style.next; styleSheet << style; style.name.truncate( 0 ); style.next = -1; } } } void RTFImport::parseColorTable( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { red = 0; green = 0; blue = 0; } else if (token.type == RTFTokenizer::PlainText) { // Note: the color table can be a simple ; character only, especially in PWD files // Search for semicolon(s) while ((token.text = strchr( token.text, ';' ))) { colorTable << QColor( red, green, blue ); red = green = blue = 0; ++token.text; } } } void RTFImport::parseBlipUid( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { picture.identifier.clear(); } else if (token.type == RTFTokenizer::PlainText) { picture.identifier += QString::fromUtf8( token.text ); } else if (token.type == RTFTokenizer::CloseGroup) { //kDebug(30515) <<"\\blipuid:" << picture.identifier; } } void RTFImport::parsePicture( RTFProperty * ) { if (state.ignoreGroup) return; if (token.type == RTFTokenizer::OpenGroup) { picture.type = RTFPicture::PNG; picture.width = 0; picture.height = 0; picture.desiredWidth = 0; picture.desiredHeight = 0; picture.scalex = 100; // Default is 100% picture.scaley = 100; // Default is 100% picture.cropLeft = 0; picture.cropTop = 0; picture.cropRight = 0; picture.cropBottom = 0; picture.nibble = 0; picture.bits.truncate( 0 ); picture.identifier.clear(); } else if (token.type == RTFTokenizer::PlainText) { if (picture.nibble) { *(--token.text) = picture.nibble; } uint n = qstrlen( token.text ) >> 1; picture.bits.resize( picture.bits.size() + n ); char *src = token.text; char *dst = (picture.bits.data() + picture.bits.size() - n); // Store hexadecimal data while (n-- > 0) { int k = *src++; int l = *src++; *dst++ = (((k + ((k & 16) ? 0 : 9)) & 0xf) << 4) | ((l + ((l & 16) ? 0 : 9)) & 0xf); } picture.nibble = *src; } else if (token.type == RTFTokenizer::BinaryData) { picture.bits = token.binaryData; //kDebug(30515) <<"Binary data of length:" << picture.bits.size(); } else if (token.type == RTFTokenizer::CloseGroup) { const char *ext; // Select file extension based on picture type switch (picture.type) { case RTFPicture::WMF: case RTFPicture::EMF: ext = ".wmf"; break; case RTFPicture::BMP: ext = ".bmp"; break; case RTFPicture::MacPict: ext = ".pict"; break; case RTFPicture::JPEG: ext = ".jpg"; break; case RTFPicture::PNG: default: ext = ".png"; break; } const int id = ++pictureNumber; QString pictName("pictures/picture"); pictName += QString::number(id); pictName += ext; QByteArray frameName; frameName.setNum(id); frameName.prepend("Picture "); QString idStr; if (picture.identifier.isEmpty()) { idStr = pictName; } else { idStr += picture.identifier.trimmed(); idStr += ext; } //kDebug(30515) <<"Picture:" << pictName <<" Frame:" << frameName; // Add anchor to rich text destination addAnchor( frameName ); // It is safe, as we call currentDateTime only once for each picture const QDateTime dt(QDateTime::currentDateTime()); // Add pixmap or clipart (key) pictures.addKey( dt, idStr, pictName ); // Add picture or clipart frameset frameSets.addFrameSet( frameName, 2, 0 ); ////kDebug(30515) <<"Width:" << picture.desiredWidth <<" scalex:" << picture.scalex <<"%"; ////kDebug(30515) <<"Height:" << picture.desiredHeight<<" scaley:" << picture.scaley <<"%"; frameSets.addFrame( 0, 0, (picture.desiredWidth * picture.scalex) /100 , (picture.desiredHeight * picture.scaley) /100 , 0, 1, 0 ); frameSets.closeNode( "FRAME" ); frameSets.addNode( "PICTURE" ); frameSets.addKey( dt, idStr ); frameSets.closeNode( "PICTURE" ); frameSets.closeNode( "FRAMESET" ); picture.identifier.clear(); } } void RTFImport::addImportedPicture( const QString& rawFileName ) { } void RTFImport::insertPageNumber( RTFProperty * ) { DomNode node; node.addNode( "PGNUM" ); node.setAttribute( "subtype", 0 ); node.setAttribute( "value", 0 ); node.closeNode("PGNUM"); addVariable( node, 4, "NUMBER", &state.format); } void RTFImport::insertDateTime( RTFProperty *property ) { //kDebug(30515) <<"insertDateTime:" << property->value; addDateTime( QString(), bool(property->value), state.format ); } void RTFImport::addDateTime( const QString& format, const bool isDate, RTFFormat& fmt ) { bool asDate=isDate; // Should the variable be a date variable? QString kwordFormat(format); if (format.isEmpty()) { if (isDate) kwordFormat = "DATElocale"; else kwordFormat = "TIMElocale"; } else if (!isDate) { // It is a time with a specified format, so check if it is really a time // (as in KWord 1.3, a date can have a time format but a time cannot have a date format const QRegExp regexp ("[yMd]"); // any date format character? asDate = regexp.exactMatch(format); // if yes, then it is a date } DomNode node; if (asDate) { node.clear(7); node.addNode("DATE"); node.setAttribute("year", 0); node.setAttribute("month", 0); node.setAttribute("day", 0); node.setAttribute("fix", 0); node.closeNode("DATE"); addVariable(node, 0, kwordFormat, &fmt); } else { node.clear(7); node.addNode("TIME"); node.setAttribute("hour", 0); node.setAttribute("minute", 0); node.setAttribute("second", 0); node.setAttribute("fix", 0); node.closeNode("TIME"); addVariable(node, 2, kwordFormat, &fmt); } } void RTFImport::parseField( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { if (flddst == -1) { // Destination for unsupported fields flddst = (destinationStack.count() - 1); } fldinst = ""; fldrslt = ""; destination.group = 0L; } else if (token.type == RTFTokenizer::CloseGroup) { if (!fldinst.isEmpty()) { DomNode node; QString str(fldinst); QStringList list = str.split(' ',QString::SkipEmptyParts); //kDebug(30515) <<"Field:" << list; uint i; QString fieldName ( list[0].toUpper() ); fieldName.remove('\\'); // Remove \, especialy leading ones in OOWriter RTF files node.clear(7); bool ok=false; for (i=0; i < sizeof(fieldTable) /sizeof(fieldTable[0]); i++) { if (fieldName == fieldTable[i].id) { //kDebug(30515) <<"Field found:" << fieldTable[i].id; ok=true; break; } } if (!ok) { //kWarning(30515) << "Field not supported: " << fieldName; return; } if (fieldTable[i].type == 4) { node.addNode( "PGNUM" ); node.setAttribute( "subtype", fieldTable[i].subtype ); node.setAttribute( "value", 0 ); node.closeNode("PGNUM"); addVariable( node, 4, "NUMBER", &fldfmt); } else if (fieldTable[i].type == 8) { node.addNode( "FIELD" ); node.setAttribute( "subtype", fieldTable[i].subtype ); node.setAttribute( "value", fieldTable[i].value ); node.closeNode("FIELD"); addVariable( node, 8, "STRING", &fldfmt); } else if (fieldTable[i].type == 9) { QString hrefName; // Use ConstIterator for (int i=1; i < list.count(); i++) { if (list[i] == "\\l") { hrefName += '#'; } else if (list[i].startsWith( '"' ) && list[i].endsWith( '"' )) { hrefName += list[i].mid( 1, (list[i].length() - 2) ); } else if (list[i].startsWith("http")) { hrefName += list[i]; } } node.addNode( "LINK" ); node.setAttribute( "linkName", QString::fromLatin1( fldrslt ) ); node.setAttribute( "hrefName", hrefName ); node.closeNode( "LINK" ); addVariable( node, 9, "STRING", &fldfmt); } else if (fieldName == "SYMBOL") { if (list.count() >= 2) { int ch = list[1].toInt(); if (ch > 0) { // ### TODO: some error control (the destination might be invalid!) destination = destinationStack[flddst]; state.format = fldfmt; insertUTF8( ch ); } } } else if (fieldName == "TIME" || fieldName == "DATE") { QString strFldinst( QString::fromUtf8(fldinst) ); QRegExp regexp("\\\\@\\s*\"(.+)\""); // \@ "Text" if (regexp.exactMatch(strFldinst)) { // Not found? Perhaps it is not in quotes (even if it is rare) //kWarning(30515) << "Date/time field format not in quotes!"; strFldinst += ' '; // Add a space at the end to simplify the regular expression regexp = QRegExp("\\\\@(\\S+)\\s+"); // \@some_text_up_to_a_space //regexp.search(strFldinst); } QString format(regexp.cap(1)); //kDebug(30515) <<"Date/time field format:" << format; format.replace("am/pm", "ap"); format.replace("a/p", "ap"); // Approximation format.replace("AM/PM", "AP"); format.replace("A/P", "AP"); // Approximation format.remove("'"); // KWord 1.3 cannot protect text in date/time addDateTime( format, (fieldName == "DATE"), fldfmt ); } else if (fieldName == "IMPORT") { addImportedPicture( list[1] ); } fldinst = ""; } if (flddst == (int) (destinationStack.count() - 1)) { // Top-level field closed, clear field destination flddst = -1; } } } void RTFImport::parseFldinst( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { fldinst = ""; } else if (token.type == RTFTokenizer::PlainText) { fldinst += token.text; } } void RTFImport::parseFldrslt( RTFProperty * ) { if (fldinst.isEmpty()) { if (token.type == RTFTokenizer::OpenGroup) { // ### TODO: why is this destination change not done with the corresponding procedure "changeDestination"? destination = destinationStack[flddst]; destination.destproc = &RTFImport::parseFldrslt; } else if (token.type != RTFTokenizer::CloseGroup) { (this->*destinationStack[flddst].destproc)(0L); } } else if (token.type == RTFTokenizer::OpenGroup) { fldrslt = ""; } else if (token.type == RTFTokenizer::PlainText) { fldrslt += token.text; } else if (token.type == RTFTokenizer::CloseGroup) { fldfmt = state.format; } } void RTFImport::addVariable (const DomNode& spec, int type, const QString& key, const RTFFormat* fmt) { DomNode node; node.clear( 6 ); node.addNode( "VARIABLE" ); node.closeTag(true); node.addNode("TYPE"); node.setAttribute( "type", type ); node.setAttribute( "key", CheckAndEscapeXmlText(key) ); node.setAttribute( "text", 1 ); node.closeNode("TYPE"); node.appendNode(spec); node.closeNode( "VARIABLE" ); kwFormat.xmldata = node.toString(); kwFormat.id = 4; kwFormat.pos = textState->length++; kwFormat.len = 1; if (fmt) kwFormat.fmt = *fmt; textState->text.append( '#' ); textState->formats << kwFormat; } void RTFImport::parseFootNote( RTFProperty * property) { if(token.type==RTFTokenizer::OpenGroup) { RTFTextState* newTextState=new RTFTextState; footnotes.append(newTextState); fnnum++; destination.target = newTextState; QByteArray str = "Footnote "; str += QByteArray::number(fnnum); DomNode node; node.clear( 7 ); node.addNode("FOOTNOTE"); node.setAttribute("numberingtype", "auto"); node.setAttribute("notetype", "footnote"); node.setAttribute("frameset", QString::fromLatin1(str)); node.setAttribute("value", fnnum); node.closeNode("FOOTNOTE"); addVariable(node, 11, "STRING"); } parseRichText(property); } void RTFImport::parseRichText( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { // Save and change rich text destination RTFTextState *oldState = textState; textState = destination.target; destination.target = oldState; destination.group = "Text"; // Initialize rich text state textState->text.clear(); textState->node.clear( 3 ); textState->cell.clear( 3 ); textState->formats.clear(); textState->frameSets.clear(); textState->rows.clear(); textState->table = 0; textState->length = 0; } else if (token.type == RTFTokenizer::PlainText) { // Ignore hidden text if (!state.format.hidden) { const int len = /*(token.text[0] < 0) ? 1 : */ qstrlen( token.text ); // Check and store format changes if ( textState->formats.isEmpty() || textState->formats.last().fmt != state.format || ( !textState->formats.last().xmldata.isEmpty() ) ) { /*kwFormat.fmt = state.format; kwFormat.id = 1; kwFormat.pos = textState->length; kwFormat.len = len; textState->formats << kwFormat;*/ kwFormat.xmldata.clear(); } else { textState->formats.last().len += len; } textState->length += len; textState->text.addTextNode( token.text, textCodec ); } } else if (token.type == RTFTokenizer::CloseGroup) { if (textState->length) insertParagraph(); if (textState->table) finishTable(); // Restore rich text destination textState = destination.target; } } void RTFImport::parsePlainText( RTFProperty * ) { if (token.type == RTFTokenizer::OpenGroup) { destination.target->node.clear(); } else if (token.type == RTFTokenizer::PlainText) { destination.target->node.addTextNode( token.text, textCodec ); } } void RTFImport::parseGroup( RTFProperty * ) { } void RTFImport::skipGroup( RTFProperty * ) { //kDebug(30515) <<"Skip Group:" << token.type; state.ignoreGroup = true; } void RTFImport::resetState() { setPlainFormatting(); setParagraphDefaults(); setSectionDefaults(); setTableRowDefaults(); } void RTFImport::changeDestination( RTFProperty *property ) { //kDebug(30515) <<"changeDestination:" << property->name; destinationStack.push( destination ); destination.name = property->name; destination.destproc = property->cwproc; if ( property->offset ) destination.target = (RTFTextState*) ( (char *)this + property->offset ); else destination.target = &m_dummyTextState; state.brace0 = true; if (property->value) { resetState(); destination.group = 0L; } // Send OpenGroup to destination token.type = RTFTokenizer::OpenGroup; (this->*destination.destproc)(0L); } void RTFImport::addAnchor( const char *instance ) { DomNode node; node.clear( 6 ); node.addNode( "ANCHOR" ); node.setAttribute( "type", "frameset" ); node.setAttribute( "instance", instance ); node.closeNode( "ANCHOR" ); kwFormat.xmldata = node.toString(); kwFormat.id = 6; kwFormat.pos = textState->length++; kwFormat.len = 1; textState->text.append( '#' ); textState->formats << kwFormat; } void RTFImport::addFormat( DomNode &node, const KWFormat& format, const RTFFormat* baseFormat ) { // Support both (\dn, \up) and (\sub, \super) for super/sub script int vertAlign = format.fmt.vertAlign; int fontSize = (format.fmt.fontSize >> 1); int vertAlign0 = ~vertAlign; int fontSize0 = ~fontSize; // Adjust vertical alignment and font size if (\dn, \up) are used if (format.fmt.vertAlign == RTFFormat::Normal && format.fmt.baseline) { if (format.fmt.baseline < 0) vertAlign = RTFFormat::SuperScript; else // (format.baseline > 0) vertAlign = RTFFormat::SubScript; fontSize += (fontSize >> 1); } if (baseFormat) { vertAlign0 = baseFormat->vertAlign; fontSize0 = (baseFormat->fontSize >> 1); if (vertAlign0 == RTFFormat::Normal && baseFormat->baseline) { if (baseFormat->baseline < 0) vertAlign0 = RTFFormat::SuperScript; else // (baseFormat.baseline > 0) vertAlign0 = RTFFormat::SubScript; fontSize0 += (fontSize0 >> 1); } } node.addNode( "FORMAT" ); node.setAttribute( "id", (int)format.id ); if (format.len != 0) { // Add pos and len if this is not a style sheet definition node.setAttribute( "pos", (int)format.pos ); node.setAttribute( "len", (int)format.len ); } if ((format.id == 1)||(format.id == 4)) { // Normal text, store changes between format and base format if (!baseFormat || format.fmt.color != baseFormat->color) { node.addNode( "COLOR" ); node.addColor( (format.fmt.color >= colorTable.count()) ? QColor(Qt::black) : colorTable[format.fmt.color] ); node.closeNode( "COLOR" ); } if (format.fmt.bgcolor < colorTable.count() && format.fmt.bgcolor >= 0 && (!baseFormat || format.fmt.bgcolor != baseFormat->bgcolor) && colorTable[format.fmt.bgcolor].isValid()) { node.addNode( "TEXTBACKGROUNDCOLOR" ); node.addColor( colorTable[format.fmt.bgcolor] ); node.closeNode( "TEXTBACKGROUNDCOLOR" ); } if (!baseFormat || format.fmt.font != baseFormat->font) { node.addNode( "FONT" ); if (fontTable.contains( format.fmt.font )) { node.setAttribute( "name", fontTable[format.fmt.font] ); } node.closeNode( "FONT" ); } if (!baseFormat || format.fmt.bold != baseFormat->bold) { node.addNode( "WEIGHT" ); node.setAttribute( "value", (format.fmt.bold ? 75 : 50) ); node.closeNode( "WEIGHT" ); } if (fontSize != fontSize0) { node.addNode( "SIZE" ); node.setAttribute( "value", fontSize ); node.closeNode( "SIZE" ); } if (!baseFormat || format.fmt.italic != baseFormat->italic) { node.addNode( "ITALIC" ); node.setAttribute( "value", format.fmt.italic ); node.closeNode( "ITALIC" ); } if (!baseFormat || format.fmt.underline != baseFormat->underline ) { node.addNode( "UNDERLINE" ); QByteArray st,styleline,wordbyword("0"); st.setNum(format.fmt.underline); int underlinecolor = format.fmt.underlinecolor; switch (format.fmt.underline) { case RTFFormat::UnderlineNone: default: { st="0"; underlinecolor=-1; // Reset underline color break; } case RTFFormat::UnderlineSimple: { st="single"; break; } case RTFFormat::UnderlineDouble: { st="double"; break; } case RTFFormat::UnderlineThick: { st="single-bold"; styleline="solid"; break; } case RTFFormat::UnderlineWordByWord: { st="single"; styleline="solid"; wordbyword="1"; break; } case RTFFormat::UnderlineDash: { st="single"; styleline="dash"; break; } case RTFFormat::UnderlineDot: { st="single"; styleline="dot"; break; } case RTFFormat::UnderlineDashDot: { st="single"; styleline="dashdot"; break; } case RTFFormat::UnderlineDashDotDot: { st="single"; styleline="dashdotdot"; break; } case RTFFormat::UnderlineWave: { st="single"; styleline="wave"; break; } } // end of switch node.setAttribute( "value", QString::fromLatin1(st) ); node.setAttribute( "wordbyword", QString::fromLatin1(wordbyword) ); if ( !styleline.isEmpty() ) node.setAttribute( "styleline", QString::fromLatin1(styleline) ); if ( underlinecolor >= 0 && underlinecolor < colorTable.count() ) { node.setAttribute( "underlinecolor", colorTable[underlinecolor].name() ); } node.closeNode( "UNDERLINE" ); } if (!baseFormat || format.fmt.strike != baseFormat->strike || format.fmt.striked != baseFormat->striked) { node.addNode( "STRIKEOUT" ); QByteArray st; st.setNum(format.fmt.strike); if(format.fmt.striked) st="double"; node.setAttribute( "value", QString::fromLatin1(st) ); node.closeNode( "STRIKEOUT" ); } if (vertAlign != vertAlign0) { node.addNode( "VERTALIGN" ); node.setAttribute( "value", vertAlign ); node.closeNode( "VERTALIGN" ); } if (!baseFormat || format.fmt.caps != baseFormat->caps || format.fmt.smallCaps != baseFormat->smallCaps) { node.addNode( "FONTATTRIBUTE" ); QString fontattr; if ( format.fmt.caps ) fontattr="uppercase"; else if ( format.fmt.smallCaps ) fontattr="smallcaps"; else fontattr="none"; node.setAttribute( "value", fontattr ); node.closeNode( "FONTATTRIBUTE" ); } //if (!baseFormat) //{ // node.addNode( "CHARSET" ); // node.setAttribute( "value", (int)QFont::Unicode ); // node.closeNode( "CHARSET" ); //} } if (format.id == 4 || format.id == 6) { // Variable or anchor node.closeTag( true ); node.append( format.xmldata ); } node.closeNode( "FORMAT" ); } void RTFImport::addLayout( DomNode &node, const QString &name, const RTFLayout &layout, bool frameBreak ) { // Style name and alignment node.addNode( "NAME" ); node.setAttribute( "value", CheckAndEscapeXmlText(name) ); node.closeNode( "NAME" ); node.addNode( "FLOW" ); node.setAttribute( "align", alignN[layout.alignment] ); node.closeNode( "FLOW" ); // Indents if (layout.firstIndent || layout.leftIndent || layout.rightIndent) { node.addNode( "INDENTS" ); if (layout.firstIndent) node.setAttribute( "first", .05*layout.firstIndent ); if (layout.leftIndent) node.setAttribute( "left", .05*layout.leftIndent ); if (layout.rightIndent) node.setAttribute( "right", .05*layout.rightIndent ); node.closeNode( "INDENTS" ); } // Offets if (layout.spaceBefore || layout.spaceAfter) { node.addNode( "OFFSETS" ); if (layout.spaceBefore) node.setAttribute( "before", .05*layout.spaceBefore ); if (layout.spaceAfter) node.setAttribute( "after", .05*layout.spaceAfter ); node.closeNode( "OFFSETS" ); } // Linespacing QString lineSpacingType; QString lineSpacingValue; if ( layout.spaceBetweenMultiple ) { // Note: 240 is a sort of magic value for one line (Once upon a time, it meant 12pt for a single line) switch (layout.spaceBetween ) { case 240: { lineSpacingType = "single"; // ### TODO: does KWord really supports this? break; } case 360: { lineSpacingType = "oneandhalf"; break; } case 480 : { lineSpacingType = "double"; break; } default: { if ( layout.spaceBetween > 0 ) { lineSpacingType = "multiple"; lineSpacingValue.setNum( layout.spaceBetween / 240.0 ); } break; } } } else { if (layout.spaceBetween > 0) { lineSpacingType = "atleast"; lineSpacingValue.setNum( 0.05*layout.spaceBetween ); } if (layout.spaceBetween < 0) { // negative linespace means "exact" lineSpacingType = "fixed" ; lineSpacingValue.setNum( -0.05*layout.spaceBetween ); } } if ( ! lineSpacingType.isEmpty() ) { node.addNode( "LINESPACING" ); node.setAttribute( "type", lineSpacingType ); if ( ! lineSpacingValue.isEmpty() ) node.setAttribute( "spacingvalue", lineSpacingValue ); node.closeNode( "LINESPACING" ); } if (layout.keep || layout.pageBB || layout.pageBA || frameBreak || layout.keepNext) { node.addNode( "PAGEBREAKING" ); node.setAttribute( "linesTogether", boolN[layout.keep] ); node.setAttribute( "hardFrameBreak", boolN[layout.pageBB] ); node.setAttribute( "hardFrameBreakAfter", boolN[layout.pageBA || frameBreak] ); node.setAttribute( "keepWithNext", boolN[layout.keepNext] ); node.closeNode( "PAGEBREAKING" ); } // Paragraph borders for (uint i=0; i < 4; i++) { const RTFBorder &border = layout.borders[i]; if (border.style != RTFBorder::None || border.width > 0) { node.addNode( borderN[i] ); node.addColor( (border.color >= colorTable.count()) ? QColor(Qt::black) : colorTable[border.color] ); node.setAttribute( "style", (int)border.style & 0xf ); node.setAttribute( "width", (border.width < 20) ? 1 : border.width /20 ); node.closeNode( borderN[i] ); } } // Add automatic tab stop for hanging indent if (layout.firstIndent < 0 && layout.leftIndent > 0) { node.addNode( "TABULATOR" ); node.setAttribute( "type", 0 ); node.setAttribute( "ptpos", .05*layout.leftIndent ); node.closeNode( "TABULATOR" ); } // Tabulators if (!layout.tablist.isEmpty()) { for (int i=0; i < layout.tablist.count(); i++) { const RTFTab &tab = layout.tablist[i]; int l = (int)tab.leader; node.addNode( "TABULATOR" ); node.setAttribute( "type", tab.type ); node.setAttribute( "ptpos", .05*tab.position ); node.setAttribute( "filling", (l < 2) ? l : ((l == 2) ? 1 : 2) ); node.setAttribute( "width", (l == 4) ? 1. : 0.5 ); node.closeNode( "TABULATOR" ); } } } void RTFImport::addParagraph( DomNode &node, bool frameBreak ) { node.addNode( "PARAGRAPH" ); node.addNode( "TEXT" ); node.appendNode( textState->text ); node.closeNode( "TEXT" ); m_plainText.append(textState->text.toString()); m_plainText.append('\n'); // Search for style in style sheet QString name; const RTFFormat* format = &state.format; const int styleNum = state.layout.style; foreach ( RTFStyle it, styleSheet) { if ( it.layout.style == styleNum ) { if ( textState->length > 0 ) { format = &it.format; } name = it.name; break; } } kwFormat.fmt = *format; kwFormat.id = 1; kwFormat.pos = 0; kwFormat.len = textState->length; if ( name.isEmpty() ) { //kWarning(30515) << "Style name empty! Assuming Standard!"; name = "Standard"; } // Insert character formatting bool hasFormats = false; foreach ( KWFormat it, textState->formats) { if ( it.id != 1 || it.fmt != *format ) { if (!hasFormats) { node.addNode( "FORMATS" ); hasFormats = true; } addFormat( node, it, format ); } } if (hasFormats) { node.closeNode( "FORMATS" ); } // Write out layout and format node.addNode( "LAYOUT" ); addLayout( node, name, state.layout, frameBreak ); addFormat( node, kwFormat, 0L ); node.closeNode( "LAYOUT" ); node.closeNode( "PARAGRAPH" ); // Clear plain text and formats for next paragraph textState->text.clear(); textState->length = 0; textState->formats.clear(); } void RTFImport::finishTable() { //kDebug(30515) <<"Starting TFImport::finishTable..."; QByteArray emptyArray; QList cellx; int left = 0, right = 0; insertTableRow(); // Calculate maximum horizontal extents for (int i=0; i < textState->rows.count(); i++) { RTFTableRow &row = textState->rows[i]; if (row.left < left || i == 0) left = row.left; if (row.cells.last().x > right || i == 0) right = row.cells.last().x; } // Force rectangular table (fill gaps with empty cells) for (int i=0; i < textState->rows.count(); i++) { RTFTableRow &row = textState->rows[i]; if (row.left > left) { row.frameSets.prepend( emptyArray ); emptyCell.x = row.left; row.cells.prepend( emptyCell ); row.left = left; } if (row.cells.last().x < right) { row.frameSets << emptyArray; emptyCell.x = right; row.cells << emptyCell; } for (int k=0; k < row.cells.count(); k++) { if (!cellx.contains( row.cells[k].x )) cellx << row.cells[k].x; } if (!cellx.contains( row.left )) { cellx << row.left; } } // Sort vertical cell boundaries for (int k=0; k < cellx.count(); k++) { for (int l=k+1; l < cellx.count(); l++) { if (cellx[l] < cellx[k]) { int tmp = cellx[l]; cellx[l] = cellx[k]; cellx[k] = tmp; } } } int y1 = 0; // Store cell frame and table information for (int i=0; i < textState->rows.count(); i++) { RTFTableRow &row = textState->rows[i]; int h = abs( row.height ); int y2 = y1 + ((h < 400) ? 400 : h); // KWord work-around int x1 = row.left; for (int k=0; k < row.cells.count(); k++) { char buf[64]; int x2 = row.cells[k].x; int col = cellx.indexOf(x1,0); sprintf( buf, "Table %d Cell %d,%d", textState->table, i, col ); frameSets.addFrameSet( buf, 1, 0 ); sprintf( buf, "Table %d", textState->table ); frameSets.setAttribute( "grpMgr", buf ); frameSets.setAttribute( "row", (int)i ); frameSets.setAttribute( "col", col ); frameSets.setAttribute( "rows", 1 ); frameSets.setAttribute( "cols", cellx.indexOf( x2,0 ) - col ); frameSets.addFrame( x1, y1, x2, y2, (row.height < 0) ? 2 : 0, 1, 0 ); // Frame borders for (uint i=0; i < 4; i++) { RTFBorder &border = row.cells[k].borders[i]; if (border.style != RTFBorder::None || border.width > 0) { const char *id = "lrtb"; QColor c = (border.color >= colorTable.count()) ? QColor(Qt::black) : colorTable[border.color]; frameSets.addBorder( (int)id[i], c, (int)border.style & 0x0f, .05*(!border.width ? 10 : border.width) ); } } // Frame background color if (row.cells[k].bgcolor < colorTable.count()) { QColor &color = colorTable[row.cells[k].bgcolor]; frameSets.setAttribute( "bkRed", color.red() ); frameSets.setAttribute( "bkGreen", color.green() ); frameSets.setAttribute( "bkBlue", color.blue() ); } frameSets.closeNode( "FRAME" ); frameSets.append( row.frameSets[k] ); frameSets.closeNode( "FRAMESET" ); x1 = x2; } y1 = y2; } textState->table = 0; textState->rows.clear(); //kDebug(30515) <<"Quitting TFImport::finishTable..."; } void RTFImport::writeOutPart( const char *name, const DomNode& node ) { } qutim-0.2.0/plugins/mrim/coresrc/MRIMClient.cpp0000644000175000017500000012753011273054313023017 0ustar euroelessareuroelessar/***************************************************************************** MRIMClient Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 #include "MRIMClient.h" #include "proto.h" #include "../uisrc/authwidget.h" #include "../uisrc/addcontactwidget.h" #include "../uisrc/mrimsearchwidget.h" #include "../uisrc/searchresultswidget.h" #include "../uisrc/contactdetails.h" #include "../uisrc/movetogroupwidget.h" #include "../uisrc/renamewidget.h" #include "../uisrc/smswidget.h" #include "../uisrc/addnumberwidget.h" #include "../uisrc/filetransferrequest.h" #include "../uisrc/filetransferwidget.h" #include "../uisrc/editaccount.h" #include "statusmanager.h" #include "mrimeventhandler.h" #include "MRIMUtils.h" #include #include #include MRIMClient::MRIMClient(QString accountName, QString profileName, PluginSystemInterface *pluginSystem, QHBoxLayout *protoButtonLayout) : m_accountButtonMenu(0), m_statusGroup(0) { m_accountName = accountName; m_profileName = profileName; m_phoneCntCounter = 0; LoadSettings(); m_protoInstance = new MRIMProto(m_profileName,m_proxy); m_accountButton = NULL; m_protoButtonLayout = protoButtonLayout; m_pluginSystem = pluginSystem; m_isAccountItemAdded = false; m_isAddingContact = false; m_updateAccSettingsOnNextLogon = false; m_inAutoAway = false; m_contextCntMenu = NULL; m_actRemoveCnt = NULL; m_actAuthorizeCnt = NULL; m_actRequestAuthFromCnt = NULL; m_actRenameCnt = NULL; m_actMoveToGroup = NULL; m_actAddToList = NULL; m_actSearchCnts = NULL; m_actSendSms = NULL; m_actAddNumber = NULL; m_separator = NULL; m_menuTitle = NULL; m_menuLabel = NULL; m_searchCntsWidget = new MRIMSearchWidget(this); m_searchResWidget = new SearchResultsWidget(this); m_cntDetailsWidget = new ContactDetails(this); m_moveToGroupWidget = new MoveToGroupWidget; m_smsWidget = new SMSWidget(this); m_addNumberWidget = new AddNumberWidget(this); connect(m_moveToGroupWidget,SIGNAL(MoveContactToGroup(QString,QString)),this,SLOT(MoveContact(QString,QString))); connect(m_protoInstance,SIGNAL(NotifyUI(QString)),this,SLOT(HandleNotifyUI(QString))); connect(m_protoInstance,SIGNAL(LogoutReceived(LogoutReason)),this,SLOT(HandleLogoutReceived(LogoutReason))); //exception } MRIMClient::~MRIMClient() { delete m_searchResWidget; delete m_searchCntsWidget; delete m_cntDetailsWidget; delete m_moveToGroupWidget; delete m_smsWidget; delete m_protoInstance; delete m_addNumberWidget; } void MRIMClient::LoadSettings() { m_settings = new QSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "accountsettings"); m_login = m_settings->value("main/login").toString(); m_pass = m_settings->value("main/password").toString(); LoadAccountSettings(); if (m_host == "") { m_host = "mrim.mail.ru"; } if (m_port == 0) { m_port = 2042; } } void MRIMClient::LoadAccountSettings() { QSettings account_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_login,"accountsettings"); QSettings profile_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName, "mrimsettings"); bool useProfileDefaults = account_settings.value("main/useProfileDefaults",true).toBool(); QString defaultHost = profile_settings.value("main/host","mrim.mail.ru").toString(); m_host = (useProfileDefaults) ? defaultHost : account_settings.value("main/host",defaultHost).toString(); quint32 defaultPort = profile_settings.value("main/port",2042).toUInt(); m_port = (useProfileDefaults) ? defaultPort : account_settings.value("main/port",defaultPort).toUInt(); bool defaultUseProxy = profile_settings.value("main/useProxy").toBool(); bool useProxy = (useProfileDefaults) ? defaultUseProxy : account_settings.value("main/useProxy",defaultUseProxy).toBool(); bool defaultshowPhoneCnts = profile_settings.value("main/phoneCnts").toBool(); m_showPhoneCnts = (useProfileDefaults) ? defaultshowPhoneCnts : account_settings.value("main/phoneCnts",defaultshowPhoneCnts).toBool(); if (useProxy) { QNetworkProxy::ProxyType defaultProxyType = (QNetworkProxy::ProxyType)profile_settings.value("main/proxyType",QNetworkProxy::NoProxy).toUInt(); QNetworkProxy::ProxyType proxyType = (useProfileDefaults) ? defaultProxyType : (QNetworkProxy::ProxyType)account_settings.value("main/proxyType",defaultProxyType).toUInt(); m_proxy.setType(proxyType); QString defaultProxyHostName = profile_settings.value("main/proxyHost").toString(); m_proxy.setHostName((useProfileDefaults) ? defaultProxyHostName : account_settings.value("main/proxyHost",defaultProxyHostName).toString()); quint32 defaultProxyPort = profile_settings.value("main/proxyPort").toUInt(); m_proxy.setPort((useProfileDefaults) ? defaultProxyPort : account_settings.value("main/proxyPort",defaultProxyPort).toUInt()); QString defaultProxyUser = profile_settings.value("main/proxyUser").toString(); m_proxy.setUser((useProfileDefaults) ? defaultProxyUser : account_settings.value("main/proxyUser",defaultProxyUser).toString()); QString defaultPassword = profile_settings.value("main/proxyPass").toString(); m_proxy.setPassword((useProfileDefaults) ? defaultPassword : account_settings.value("main/proxyPass",defaultPassword).toString()); } else { m_proxy.setType(QNetworkProxy::NoProxy); } } const TreeModelItem MRIMClient::AccountItem() { TreeModelItem accountItem; accountItem.m_account_name = m_accountName; accountItem.m_protocol_name = "MRIM"; accountItem.m_item_name = m_accountName; accountItem.m_item_type = EAccount; accountItem.m_parent_name = ""; return accountItem; } void MRIMClient::RemoveAccountButton() { if (!m_protoButtonLayout || !m_accountButton) return; m_accountButton->setVisible(false); m_protoButtonLayout->removeWidget(m_accountButton); } void MRIMClient::ClearCL(CLItemType aDepth, bool aDeleteFromSettings) { QList* cl = m_protoInstance->GetAllCL(); if (!cl) return; TreeModelItem treeItem; treeItem.m_account_name = m_accountName; treeItem.m_protocol_name = "MRIM"; if (aDepth >= EContact) { foreach (MRIMCLItem* clItem, *cl) { treeItem.m_item_type = clItem->Type(); if (clItem->Type() == EContact) { MRIMContact* cnt = reinterpret_cast(clItem); treeItem.m_item_name = cnt->Email(); if (cnt->GroupId() != -1) { treeItem.m_parent_name = QString::number(cnt->GroupId()); } else { treeItem.m_parent_name = ""; } } m_pluginSystem->removeItemFromContactList(treeItem); if (aDeleteFromSettings) { DeleteFromLocalSettings(EContact,treeItem.m_item_name); } } } if (aDepth >= EGroup) { QList groups = m_protoInstance->GetAllGroups(); treeItem.m_item_type = EGroup; for (int i = 0; i< groups.count(); i++) { treeItem.m_item_name = groups.at(i)->Id(); treeItem.m_parent_name = m_accountName; m_pluginSystem->removeItemFromContactList(treeItem); if (aDeleteFromSettings) { DeleteFromLocalSettings(EGroup,treeItem.m_item_name); } } } if (aDepth == EAccount) { m_pluginSystem->removeItemFromContactList(AccountItem()); } } void MRIMClient::CreateAccountButton() { if (m_protoButtonLayout == NULL) return; m_accountButton = new QToolButton(); m_accountButton->setMinimumSize(QSize(22, 22)); m_accountButton->setMaximumSize(QSize(22, 22)); m_accountButton->setAutoRaise(true); m_accountButtonMenu = new QMenu(); //account menu m_statusGroup = new QActionGroup(this); //statuses group m_accountButtonMenu->setTitle(m_accountName); connect(m_statusGroup, SIGNAL(triggered(QAction*)), this, SLOT(ChangeStatusClicked(QAction*))); connect(m_accountButtonMenu, SIGNAL(triggered(QAction*)), this, SLOT(AccountMenuItemClicked(QAction*))); m_actUnreadEmails = m_accountButtonMenu->addAction(""); m_actUnreadEmails->setVisible(false); QStringList statusActions; statusActions.append(Status::Stringify(STATUS_ONLINE)); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"chat")); statusActions.append(Status::Stringify(STATUS_AWAY)); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"6")); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"38")); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"34")); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"5")); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"18")); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"19")); statusActions.append(Status::Stringify(STATUS_USER_DEFINED,"dnd")); statusActions.append(Status::Stringify(STATUS_FLAG_INVISIBLE)); QAction *statusAct = 0; foreach (QString status, statusActions) { statusAct = m_statusGroup->addAction(Status::GetIcon(status),StatusMan().GetTooltip(status)); statusAct->setData(status); } m_accountButtonMenu->addActions(m_statusGroup->actions()); m_accountButtonMenu->addSeparator(); m_actAddContact = new QAction(tr("Add contact"), this); m_actAddContact->setIcon(Icon("add_user",IconInfo::System)); m_accountButtonMenu->addAction(m_actAddContact); m_actOpenMbox = new QAction(tr("Open mailbox"), this); m_actOpenMbox->setIcon(Icon("day",IconInfo::System)); m_accountButtonMenu->addAction(m_actOpenMbox); m_actSearchCnts = new QAction(tr("Search contacts"), this); m_actSearchCnts->setIcon(Icon("search",IconInfo::System)); m_accountButtonMenu->addAction(m_actSearchCnts); m_accountButtonMenu->addSeparator(); QString offlineStatus = Status::Stringify(STATUS_OFFLINE); m_accountButtonMenu->addAction(Status::GetIcon(offlineStatus),StatusMan().GetTooltip(offlineStatus),this,SLOT(DisconnectMenuItemClicked())); m_accountButton->setToolTip(m_accountName); m_accountButton->setMenu(m_accountButtonMenu); m_accountButton->setPopupMode(QToolButton::InstantPopup); #if defined(Q_OS_MAC) m_protoButtonLayout->addWidget(m_accountButton, 0, Qt::AlignLeft); #else m_protoButtonLayout->addWidget(m_accountButton, 0, Qt::AlignRight); #endif if (!m_isAccountItemAdded) { m_pluginSystem->addItemToContactList(AccountItem(),AccountName()); m_isAccountItemAdded = true; } LoadCL(); QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrimsettings"); bool restoreStatus = settings.value("main/restoreStatus",true).toBool(); UpdateStatusIcon(m_protoInstance->CurrentStatus()); if (restoreStatus) { QSettings acc_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "accountsettings"); QString savedStatusId = acc_settings.value("main/status","STATUS_ONLINE").toString(); Status *savedStatus = StatusMan().GetCustomStatus(m_accountName,savedStatusId); ChangeStatus(*savedStatus); delete savedStatus; } } void MRIMClient::ChangeStatusClicked(QAction* action) {//status changed QString statusId = action->data().toString(); Status *status = StatusMan().GetCustomStatus(m_accountName,statusId); ChangeStatus(*status); delete status; } void MRIMClient::DisconnectMenuItemClicked() { if (m_protoInstance->IsOnline()) { Status status(STATUS_OFFLINE); ChangeStatus(status); } } void MRIMClient::SelectXStatusesClicked() { //TODO: show statuses selection widget } void MRIMClient::AccountMenuItemClicked(QAction* action) { if (action == m_actAddContact && m_protoInstance->IsOnline()) { HandleAddContact(); } if (action == m_actOpenMbox && m_protoInstance->IsOnline()) { if (m_mpopKey.length() > 0) { //TODO: make pro/win/edu selection as an option QUrl mpopUrl("http://pro.mail.ru/cgi-bin/auth?Login="+m_login+"&agent="+m_mpopKey); QDesktopServices::openUrl(mpopUrl); } else { m_pluginSystem->systemNotifiacation(AccountItem(),tr("No MPOP session available for you, sorry...")); } } if (action == m_actSearchCnts && m_protoInstance->IsOnline()) m_searchCntsWidget->show(); } void MRIMClient::HandleAddContact(QString aEmail,QString aNick) { AddContactWidget* cntAddWidget = new AddContactWidget(this); if (aEmail.length() > 0) cntAddWidget->SetEmail(aEmail,true); if (aNick.length() > 0) cntAddWidget->SetNick(aNick); cntAddWidget->FillGroups(); cntAddWidget->show(); } void MRIMClient::ChangeStatus(const Status &aNewStatus) { if (aNewStatus == m_protoInstance->CurrentStatus()) return; bool goingOnline = (!m_protoInstance->CurrentStatus().IsOnline() && MRIMProto::IsOnline(aNewStatus)); switch (aNewStatus.Get()) { case STATUS_OFFLINE: if (m_protoInstance->IsOnline()) { m_protoInstance->DisconnectFromIM(); } break; default: if (goingOnline) { if (m_updateAccSettingsOnNextLogon) { LoadSettings(); m_protoInstance->SetProxy(m_proxy); m_updateAccSettingsOnNextLogon = false; } UpdateStatusIcon(Icon("connecting",IconInfo::Status,"mrim")); ConnectAllProtoEvents(); m_protoInstance->Connect(m_login,m_pass,m_host,m_port,aNewStatus); } else { m_protoInstance->ChangeStatus(aNewStatus); } break; } } void MRIMClient::ChangeStatus( qint32 aNewStatus, const QString &aCustomID) { Status *newStatus = NULL; if (aCustomID.length() > 0) { newStatus = StatusMan().GetCustomStatus(m_accountName,aCustomID); } else { newStatus = StatusMan().GetStatus(m_accountName,aNewStatus); } ChangeStatus(*newStatus); delete newStatus; } void MRIMClient::HandleProtoStatusChanged( StatusData aNewStatusData ) { Status newStatus(aNewStatusData); Status &prevStatus = Protocol()->PreviousStatus(); qDebug()<<"Protocol status changed! Old status: "<< prevStatus.Get() << ". New status: "<setVisible(false); DisconnectAllProtoEvents(); } QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "accountsettings"); settings.setValue("main/status",newStatus.Stringify()); UpdateStatusIcon(newStatus); } void MRIMClient::HandleItemAdditionToUI(CLItemType aType, QString aParentId, QString aID, QString aName, StatusData aStatusData, bool aAuthed, bool aIsNew) {//need to add group, contact or smth else to CL QString parentID; if (aID == "phone" && !m_showPhoneCnts) return; if (aParentId == "-1") { parentID == ""; } else { parentID = aParentId; } TreeModelItem item; item.m_account_name = m_accountName; item.m_protocol_name = "MRIM"; item.m_item_name = aID; item.m_item_type = aType; if (aType == EGroup) { item.m_parent_name = m_accountName; } else { item.m_parent_name = parentID; } if (m_isAddingContact) { TreeModelItem oldItem; oldItem.m_account_name = m_accountName; oldItem.m_protocol_name = "MRIM"; oldItem.m_item_name = aID; oldItem.m_item_type = aType; oldItem.m_parent_name = ""; m_pluginSystem->removeItemFromContactList(oldItem); //m_pluginSystem->addItemToContactList(item,aName); //may loose auth icon, TODO } if (aIsNew || m_isAddingContact) { m_pluginSystem->addItemToContactList(item,aName); SaveCLItem(aType,item,aName,aAuthed,m_protoInstance->IsContactAuthedMe(item.m_item_name),""); //TODO: add phones support to all contacts m_isAddingContact = false; } else if (!aIsNew) { m_pluginSystem->setContactItemName(item,aName); } if (aType == EContact) { Status currStat(aStatusData); QIcon statusIcon; if (aID == "phone") { statusIcon=m_pluginSystem->getIcon("phone_mobile"); } else { statusIcon = currStat.GetIcon(); } m_pluginSystem->setContactItemStatus(item,statusIcon,"",currStat.GetMass()); if (!aAuthed && aID != "phone") { m_pluginSystem->setContactItemIcon(item,Icon("auth"),5); } else { m_pluginSystem->setContactItemIcon(item,QIcon(),5); } } } void MRIMClient::HandleRemoveItemFromUI(CLItemType aType,QString aParentID,QString aId) { QString parentID = aParentID; if (aParentID == "-1") { parentID == ""; } if (aType == EContact) { RemoveContactFromCL(aId); } } void MRIMClient::HandleAccountInfoRecieved(MRIMUserInfo aInfo) { TreeModelItem accountItem = AccountItem(); m_userInfo = aInfo; QString userInfoMessage; userInfoMessage.append(tr("Messages in mailbox: ")+aInfo.messagesTotal+"
"+tr("Unread messages: ")+aInfo.messagesUnread); m_pluginSystem->systemNotifiacation(accountItem,userInfoMessage); HandleMailboxStatusChanged(aInfo.messagesUnread.toUInt()); } void MRIMClient::HandleMessageRecieved(QString aContactEmail, QString aGroupId, QString aMessage, QDateTime aDate, bool/* aIsRtf*/, bool aIsAuth) { QString groupId; if (aGroupId == "-1" || aGroupId == "") { groupId == ""; } else { groupId = aGroupId; } TreeModelItem contactItem; contactItem.m_account_name = m_accountName; contactItem.m_protocol_name = "MRIM"; contactItem.m_item_name = aContactEmail; contactItem.m_item_type = EContact; contactItem.m_parent_name = groupId; if (aIsAuth) { authwidget* request = new authwidget(this); QString authText = tr("User %1 is requesting authorization:\n").arg(aContactEmail)+aMessage; request->SetupAuthRequest(authText,aContactEmail); request->show(); } else { m_pluginSystem->addMessageFromContact(contactItem,aMessage,aDate); } } void MRIMClient::HandleContactTyping(QString aContactEmail, QString aGroupId) { TreeModelItem contactItem; contactItem.m_account_name = m_accountName; contactItem.m_protocol_name = "MRIM"; contactItem.m_item_name = aContactEmail; contactItem.m_item_type = EContact; contactItem.m_parent_name = aGroupId; m_pluginSystem->contactTyping(contactItem,true); } void MRIMClient::SendMessageToContact(QString aContactEmail, QString aMessage, int aMessageIconPosition) { if (m_protoInstance && m_protoInstance->IsOnline()) m_protoInstance->SendMessageToContact(aContactEmail,aMessage,aMessageIconPosition); } void MRIMClient::HandleContactTypingStopped(QString aContactEmail, QString aGroupId) { TreeModelItem contactItem; contactItem.m_account_name = m_accountName; contactItem.m_protocol_name = "MRIM"; contactItem.m_item_name = aContactEmail; contactItem.m_item_type = EContact; contactItem.m_parent_name = aGroupId; m_pluginSystem->contactTyping(contactItem,false); } void MRIMClient::HandleMessageDelivered(QString aContactEmail, QString aGroupId, quint32 aKernelMessageId) { if (aGroupId == "-1") { aGroupId == ""; } TreeModelItem contactItem; contactItem.m_account_name = m_accountName; contactItem.m_protocol_name = "MRIM"; contactItem.m_item_name = aContactEmail; contactItem.m_item_type = EContact; contactItem.m_parent_name = aGroupId; m_pluginSystem->messageDelievered(contactItem,aKernelMessageId); } void MRIMClient::ConnectAllProtoEvents() { connect(m_protoInstance,SIGNAL(ProtoStatusChanged(StatusData)),this,SLOT(HandleProtoStatusChanged(StatusData))); connect(m_protoInstance,SIGNAL(AddItemToUI(CLItemType,QString,QString,QString,StatusData,bool,bool)),this,SLOT(HandleItemAdditionToUI(CLItemType,QString,QString,QString,StatusData,bool,bool))); connect(m_protoInstance,SIGNAL(AccountInfoRecieved(MRIMUserInfo)),this,SLOT(HandleAccountInfoRecieved(MRIMUserInfo))); connect(m_protoInstance,SIGNAL(MessageRecieved(QString,QString,QString,QDateTime,bool,bool)),this,SLOT(HandleMessageRecieved(QString,QString,QString,QDateTime,bool,bool))); connect(m_protoInstance,SIGNAL(ContactTyping(QString,QString)),this,SLOT(HandleContactTyping(QString,QString))); connect(m_protoInstance,SIGNAL(ContactTypingStopped(QString,QString)),this,SLOT(HandleContactTypingStopped(QString,QString))); connect(m_protoInstance,SIGNAL(MessageDelivered(QString,QString,quint32)),this,SLOT(HandleMessageDelivered(QString,QString,quint32))); connect(m_protoInstance,SIGNAL(AuthorizeResponseReceived(QString,QString)),this,SLOT(HandleAuthorizeResponseReceived(QString,QString))); connect(m_protoInstance,SIGNAL(MailboxStatusChanged(quint32)),this,SLOT(HandleMailboxStatusChanged(quint32))); connect(m_protoInstance,SIGNAL(MPOPKeyReceived(QString)),this,SLOT(HandleMPOPKeyReceived(QString))); connect(m_protoInstance,SIGNAL(CLOperationFailed(CLOperationError)),this,SLOT(HandleCLOperationFailed(CLOperationError))); connect(m_protoInstance,SIGNAL(SearchFinished(QList)),this,SLOT(HandleSearchFinished(QList))); connect(m_protoInstance,SIGNAL(RemoveItemFromUI(CLItemType,QString,QString)),this,SLOT(HandleRemoveItemFromUI(CLItemType,QString,QString))); connect(m_protoInstance,SIGNAL(NewCLReceived()),this,SLOT(HandleNewCLReceived())); connect(m_protoInstance,SIGNAL(FileTransferRequested(FileTransferRequest)),this,SLOT(HandleFileTransferRequest(FileTransferRequest))); } void MRIMClient::DisconnectAllProtoEvents() { disconnect(m_protoInstance,SIGNAL(ProtoStatusChanged(StatusData)),this,SLOT(HandleProtoStatusChanged(StatusData))); disconnect(m_protoInstance,SIGNAL(AddItemToUI(CLItemType,QString,QString,QString,StatusData,bool,bool)),this,SLOT(HandleItemAdditionToUI(CLItemType,QString,QString,QString,StatusData,bool,bool))); disconnect(m_protoInstance,SIGNAL(AccountInfoRecieved(MRIMUserInfo)),this,SLOT(HandleAccountInfoRecieved(MRIMUserInfo))); disconnect(m_protoInstance,SIGNAL(MessageRecieved(QString,QString,QString,QDateTime,bool,bool)),this,SLOT(HandleMessageRecieved(QString,QString,QString,QDateTime,bool,bool))); disconnect(m_protoInstance,SIGNAL(ContactTyping(QString,QString)),this,SLOT(HandleContactTyping(QString,QString))); disconnect(m_protoInstance,SIGNAL(ContactTypingStopped(QString,QString)),this,SLOT(HandleContactTypingStopped(QString,QString))); disconnect(m_protoInstance,SIGNAL(MessageDelivered(QString,QString,quint32)),this,SLOT(HandleMessageDelivered(QString,QString,quint32))); disconnect(m_protoInstance,SIGNAL(AuthorizeResponseReceived(QString,QString)),this,SLOT(HandleAuthorizeResponseReceived(QString,QString))); disconnect(m_protoInstance,SIGNAL(MailboxStatusChanged(quint32)),this,SLOT(HandleMailboxStatusChanged(quint32))); disconnect(m_protoInstance,SIGNAL(MPOPKeyReceived(QString)),this,SLOT(HandleMPOPKeyReceived(QString))); disconnect(m_protoInstance,SIGNAL(CLOperationFailed(CLOperationError)),this,SLOT(HandleCLOperationFailed(CLOperationError))); disconnect(m_protoInstance,SIGNAL(SearchFinished(QList)),this,SLOT(HandleSearchFinished(QList))); disconnect(m_protoInstance,SIGNAL(RemoveItemFromUI(CLItemType,QString,QString)),this,SLOT(HandleRemoveItemFromUI(CLItemType,QString,QString))); disconnect(m_protoInstance,SIGNAL(NewCLReceived()),this,SLOT(HandleNewCLReceived())); disconnect(m_protoInstance,SIGNAL(FileTransferRequested(FileTransferRequest)),this,SLOT(HandleFileTransferRequest(FileTransferRequest))); } void MRIMClient::HandleAuthorizeResponseReceived(QString aContactEmail, QString aGroupId) { if (aGroupId == "-1") { aGroupId == ""; } TreeModelItem accountItem = AccountItem(); QString authedMessage(tr("Authorization request accepted by ")+aContactEmail); m_pluginSystem->systemNotifiacation(accountItem,authedMessage); TreeModelItem cntItem; cntItem.m_account_name = m_accountName; cntItem.m_protocol_name = "MRIM"; cntItem.m_item_name = aContactEmail; cntItem.m_item_type = EContact; cntItem.m_parent_name = aGroupId; m_pluginSystem->setContactItemIcon(cntItem,QIcon(),5); MRIMContact* cnt = m_protoInstance->GetCnt(aContactEmail); cnt->SetAuthedMe(true); } void MRIMClient::UpdateSettings() { m_updateAccSettingsOnNextLogon = true; MRIMContactList *cl = m_protoInstance->GetContactList(); if (cl) { cl->UpdateContactList(); } } void MRIMClient::SaveCLItem(CLItemType aItemType, TreeModelItem aItem, QString aName, bool aisAuthed, bool aIsAuthedMe, QString aPhone) { QSettings clSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "contactlist"); QStringList groups = clSettings.value("cl/groups").toStringList(); QStringList contacts = clSettings.value("cl/contacts").toStringList(); if (aItemType == EGroup) { if (!groups.contains(aItem.m_item_name)) { groups<GetContactByEmail(aItem.m_item_name); QString contEntry = aItem.m_item_name; if (contEntry == "phone") { contEntry+= QString::number(m_phoneCntCounter); m_phoneCntCounter++; } if (!contacts.contains(contEntry)) { contacts<Id()); } clSettings.setValue("email",aItem.m_item_name); clSettings.setValue("name",aName); clSettings.setValue("groupId",aItem.m_parent_name); clSettings.setValue("authed",aisAuthed); clSettings.setValue("authedMe",aIsAuthedMe); clSettings.setValue("phone",aPhone); clSettings.endGroup(); } } void MRIMClient::HandleNewCLReceived() { ClearCL(EGroup); QSettings clSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "contactlist"); QFile::remove(clSettings.fileName()); } void MRIMClient::LoadCL() { QSettings clSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "contactlist"); QStringList groups = clSettings.value("cl/groups").toStringList(); QStringList contacts = clSettings.value("cl/contacts").toStringList(); foreach (QString groupId,groups) { QString id = clSettings.value(groupId+"/id").toString(); QString name = clSettings.value(groupId+"/name").toString(); //HandleItemAdditionToUI(EGroup,m_accountName,id,name,STATUS_UNDETERMINATED,true,true); m_protoInstance->AddGroup(name,id.toUInt()); } foreach (QString cntEmail,contacts) { QString email = clSettings.value(cntEmail+"/email").toString(); QString name = clSettings.value(cntEmail+"/name").toString(); QString grId = clSettings.value(cntEmail+"/groupId").toString(); bool authed = clSettings.value(cntEmail+"/authed").toBool(); bool authedMe = clSettings.value(cntEmail+"/authedMe").toBool(); Q_UNUSED(authedMe); quint32 status = STATUS_OFFLINE; if (email.contains("phone")) { email = "phone"; status = STATUS_ONLINE; } //HandleItemAdditionToUI(EContact,grId,email,name,status,authedMe,true); m_protoInstance->AddContact(email,name,grId.toUInt(),authed,true); } } void MRIMClient::HandleLogoutReceived(LogoutReason aReason) { QString logountMsg; switch (aReason) { case EAuthenticationFailed: logountMsg = tr("Server closed the connection. Authentication failed!"); break; case EAnotherClientConnected: logountMsg = tr("Server closed the connection. Another client with same login connected!"); break; case EUnknownReason: logountMsg = tr("Server closed the connection for unknown reason..."); break; } TreeModelItem accountItem = AccountItem(); m_pluginSystem->systemNotifiacation(accountItem,logountMsg); } void MRIMClient::HandleMailboxStatusChanged(quint32 aUnreadMessages) { m_actUnreadEmails->setText(tr("Unread emails: %1").arg(aUnreadMessages)); m_actUnreadEmails->setVisible(true); m_actUnreadEmails->setEnabled(false); // Deprecated // // TreeModelItem accountItem = AccountItem(); // // QString mboxStatusMsg = tr("Mailbox status changed!")+"\n"+tr("Unread messages: ")+QString::number(aUnreadMessages); // m_pluginSystem->systemNotifiacation(accountItem,mboxStatusMsg); } void MRIMClient::HandleMPOPKeyReceived(QString aMPOPKey) { m_mpopKey = aMPOPKey; } void MRIMClient::ShowCntContextPopup(const QList &aDefActList,TreeModelItem aItemData, const QPoint &aMenuPoint) { if (!m_protoInstance->IsOnline()) return; if (aItemData.m_item_type == EContact) { MRIMContact* cnt = Protocol()->GetCnt(aItemData.m_item_name); if (!m_contextCntMenu) { m_contextCntMenu = new QMenu(); connect(m_contextCntMenu, SIGNAL(triggered(QAction*)), this, SLOT(CntContextMenuClicked(QAction*))); m_menuTitle = new QWidgetAction(this); m_menuLabel = new QLabel; m_menuLabel->setAlignment(Qt::AlignCenter); m_menuTitle->setDefaultWidget(m_menuLabel); } m_contextCntMenu->clear(); m_contextCntMenu->addAction(m_menuTitle); m_menuLabel->setText(""+ Qt::escape(cnt->Name()) +""); if (cnt->InList() && cnt->HasPhone()) { if (!m_actSendSms) { m_actSendSms = new QAction(tr("Send SMS"), this); m_actSendSms->setIcon(m_pluginSystem->getIcon("phone_mobile")); } m_actSendSms->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actSendSms); } m_contextCntMenu->addAction(aDefActList.at(0)); m_contextCntMenu->addAction(aDefActList.at(1)); m_contextCntMenu->addAction(aDefActList.at(2)); if (!m_separator) { m_separator = new QAction(this); m_separator->setSeparator(true); } m_contextCntMenu->addAction(m_separator); if (cnt->InList() && !cnt->IsAuthed()) { if (!m_actAuthorizeCnt) { m_actAuthorizeCnt = new QAction(tr("Authorize contact"), this); m_actAuthorizeCnt->setIcon(m_pluginSystem->getIcon("auth")); } m_actAuthorizeCnt->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actAuthorizeCnt); } if (cnt->InList() && !cnt->IsAuthedMe()) { if (!m_actRequestAuthFromCnt) { m_actRequestAuthFromCnt = new QAction(tr("Request authorization"), this); m_actRequestAuthFromCnt->setIcon(m_pluginSystem->getIcon("auth")); } m_actRequestAuthFromCnt->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actRequestAuthFromCnt); } if (cnt->InList()) { if (!m_actRenameCnt) { m_actRenameCnt = new QAction(tr("Rename contact"), this); m_actRenameCnt->setIcon(m_pluginSystem->getIcon("edituser")); } m_actRenameCnt->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actRenameCnt); } if (!m_actRemoveCnt) { m_actRemoveCnt = new QAction(tr("Delete contact"), this); m_actRemoveCnt->setIcon(m_pluginSystem->getIcon("deleteuser")); } m_actRemoveCnt->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actRemoveCnt); if (!m_actMoveToGroup) { m_actMoveToGroup = new QAction(tr("Move to group"), this); m_actMoveToGroup->setIcon(m_pluginSystem->getIcon("moveuser")); } m_actMoveToGroup->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actMoveToGroup); if (cnt->InList() && !cnt->HasPhone()) { if (!m_actAddNumber) { m_actAddNumber = new QAction(tr("Add phone number"),this); m_actAddNumber->setIcon(m_pluginSystem->getIcon("phone_unknown")); } m_actAddNumber->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actAddNumber); } if (!cnt->InList()) { if (!m_actAddToList) { m_actAddToList = new QAction(tr("Add to list"), this); m_actAddToList->setIcon(m_pluginSystem->getIcon("add_user")); } m_actAddToList->setData(aItemData.m_item_name); m_contextCntMenu->addAction(m_actAddToList); } m_contextCntMenu->addSeparator(); int actionsCount = aDefActList.count() - 3; if ( actionsCount > 0 ) { for ( int i = 0; i < actionsCount; i++ ) { m_contextCntMenu->addAction(aDefActList.at(3 + i)); } } m_contextCntMenu->popup(aMenuPoint); } } void MRIMClient::CntContextMenuClicked(QAction* aAction) { QString cntEmail = aAction->data().toString(); MRIMContact* cnt = m_protoInstance->GetContactByEmail(cntEmail); if (!cnt || !m_protoInstance->IsOnline()) return; if (aAction == m_actRemoveCnt) { RemoveContactFromCL(cntEmail); } if (aAction == m_actAuthorizeCnt) { m_protoInstance->SendAuthorizationTo(cntEmail); } if (aAction == m_actRequestAuthFromCnt) { QString authMsg = tr("Pls authorize and add me to your contact list! Thanks! Email: ")+m_accountName; m_protoInstance->SendMessageToContact(cnt->Email(),authMsg,0,true); } if (aAction == m_actRenameCnt) { RenameWidget* renameWidget = new RenameWidget; renameWidget->show(cnt); } if (aAction == m_actAddToList) { MRIMSearchParams params; QStringList addr = cnt->Email().split("@"); params.EmailAddr = addr[0]; params.EmailDomain = addr[1]; Protocol()->StartSearch(params); } if (aAction == m_actMoveToGroup) { m_moveToGroupWidget->show(cnt->Email(),m_protoInstance->GetAllGroups()); } if (aAction == m_actSendSms) { m_smsWidget->show(cnt); } if (aAction == m_actAddNumber) { m_addNumberWidget->show(cnt); } } void MRIMClient::RemoveContactFromCL(QString aCntId) { MRIMContact* cnt = m_protoInstance->GetContactByEmail(aCntId); if (!cnt) return; QString parent = QString::number(cnt->GroupId()); if (parent == "-1") { parent == ""; } TreeModelItem contactItem; contactItem.m_account_name = m_accountName; contactItem.m_protocol_name = "MRIM"; contactItem.m_item_name = aCntId; contactItem.m_item_type = EContact; contactItem.m_parent_name = parent; if (cnt->InList()) { m_protoInstance->RemoveUserFromCL(aCntId); } m_pluginSystem->removeItemFromContactList(contactItem); DeleteFromLocalSettings(EContact,aCntId); } void MRIMClient::DeleteFromLocalSettings(CLItemType aType, QString aId) { QSettings clSettings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "contactlist"); if (aType == EContact) { QStringList contacts = clSettings.value("cl/contacts").toStringList(); contacts.removeAll(aId); clSettings.remove(aId); clSettings.setValue("cl/contacts",contacts); } else if (aType == EGroup) { QStringList groups = clSettings.value("cl/groups").toStringList(); groups.removeAll(aId); clSettings.remove(aId); clSettings.setValue("cl/contacts",groups); } } void MRIMClient::HandleCLOperationFailed(CLOperationError aClErrCode) { TreeModelItem accountItem = AccountItem(); QString clOperErrorMsg = tr("Contact list operation failed!")+"\n"; switch (aClErrCode) { case ECLNoSuchUser: clOperErrorMsg += tr("No such user!"); break; case ECLInternalServerError: clOperErrorMsg += tr("Internal server error!"); break; case ECLInvalidInfo: clOperErrorMsg += tr("Invalid info provided!"); break; case ECLUserAlreadyExists: clOperErrorMsg += tr("User already exists!"); break; case ECLGroupLimitReached: clOperErrorMsg += tr("Group limit reached!"); break; default: clOperErrorMsg += tr("Unknown error!"); break; } m_pluginSystem->systemNotifiacation(accountItem,clOperErrorMsg); } ContactAdditionalInfo MRIMClient::GetContactAdditionalInfo(QString aEmail) { ContactAdditionalInfo info; MRIMContact* cnt = m_protoInstance->GetContactByEmail(aEmail); if (cnt) { info.Nick = cnt->Name(); info.ClientName = cnt->GetUserAgent().HumanReadable(); info.AvatarPath = (cnt->HasAvatar())?cnt->BigAvatarPath() : ""; } return info; } MRIMUserInfo MRIMClient::GetUserInfo() { return m_userInfo; } void MRIMClient::HandleSearchFinished(QList aFoundList) { qint32 cntsCount = aFoundList.count(); m_searchCntsWidget->SearchFinished(cntsCount); if (cntsCount > 1) { m_searchResWidget->Reset(); m_searchResWidget->show(aFoundList,m_searchCntsWidget->ShowAvatars()); } else if (cntsCount == 1) { m_cntDetailsWidget->show(*aFoundList.at(0)); delete aFoundList.at(0); } else { TreeModelItem accountItem = AccountItem(); QString msg = tr("Sorry, no contacts found :(\n Try to change search parameters"); m_pluginSystem->systemNotifiacation(accountItem,msg); } } void MRIMClient::ShowContactDetails(QString aEmail) { m_protoInstance->RequestCntInfo(aEmail); } AccountStructure MRIMClient::GetAccountInfo() { AccountStructure account; account.account_name = m_accountName; account.protocol_icon = m_protoInstance->CurrentStatus().GetIcon(); account.protocol_name = "MRIM"; return account; } void MRIMClient::SetAutoAway() { if (!m_inAutoAway && m_protoInstance->IsOnline()) { m_inAutoAway = true; ChangeStatus(STATUS_AWAY); } } void MRIMClient::RestoreFromAutoAway() { if (m_inAutoAway && m_protoInstance->IsOnline()) { Status prevStatus(m_protoInstance->PreviousStatus().GetData()); ChangeStatus(prevStatus); m_inAutoAway = false; } } //CL translators QString MRIMClient::GetItemToolTip(const QString &aCntId) { QString toolTip; MRIMContact* cnt = m_protoInstance->GetContactByEmail(aCntId); if (cnt) { toolTip = cnt->GetTooltip(); } return toolTip; } void MRIMClient::MoveContact(QString aCntId, QString aNewGroup) { MRIMContact* cnt = m_protoInstance->GetCnt(aCntId); if (cnt && m_protoInstance->IsOnline()) { QString parent = QString::number(cnt->GroupId()); if (parent == "-1") { parent = ""; } TreeModelItem contactItem; contactItem.m_account_name = m_accountName; contactItem.m_protocol_name = "MRIM"; contactItem.m_item_name = aCntId; contactItem.m_item_type = EContact; contactItem.m_parent_name = parent; TreeModelItem contactNewItem; contactNewItem.m_account_name = m_accountName; contactNewItem.m_protocol_name = "MRIM"; contactNewItem.m_item_name = aCntId; contactNewItem.m_item_type = EContact; contactNewItem.m_parent_name = aNewGroup; m_pluginSystem->moveItemInContactList(contactItem,contactNewItem); if (cnt->InList()) { m_protoInstance->SendModifyContact(aCntId,cnt->Name(),aNewGroup.toInt(),0,MRIMProto::ENoFlags); } else { m_protoInstance->AddContact(cnt->Email(),cnt->Email(),cnt->GroupId(),true,false); } } } void MRIMClient::RenameContact(QString aEmail, QString aNewName) { m_protoInstance->GetCnt(aEmail)->Rename(aNewName); } void MRIMClient::HandleNotifyUI(QString aMessage) { m_pluginSystem->systemNotifiacation(AccountItem(),aMessage); } void MRIMClient::HandleFileTransferRequest(FileTransferRequest aReq) { FileTransferRequestWidget* frWidget = new FileTransferRequestWidget(this,aReq); frWidget->show(); } void MRIMClient::SendFileTo(QString aTo, QStringList aFiles) { FileTransferRequest req; req.UniqueId = ( (double)qrand() / (double)RAND_MAX )*MAX_INT32; req.To = aTo; req.SummarySize = 0; foreach (QString file, aFiles) { QFileInfo info(file); if (info.exists()) { req.FilesDict.insert(info.fileName(),info.size()); req.FilesInfo.append(info); req.SummarySize += info.size(); } } QSettings settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+m_profileName+"/mrim."+m_accountName, "accountsettings"); bool ok; qint32 ftPort = settings.value("ftPort").toInt(&ok); if (!ok || ftPort == 0) { ftPort = 2040; } QList IPs = QNetworkInterface::allAddresses(); foreach (QHostAddress ip, IPs) { QString hostIPString = ip.toString(); if (!ip.isNull() && !hostIPString.contains(':')) { req.IPsDict.insert(hostIPString,ftPort); } } req.IPsDict.insert(GetUserInfo().userClientEndpoint.split(':')[0],ftPort); Protocol()->SendFileTransferRequest(req); FileTransferWidget* ftWindow = new FileTransferWidget(this,req); ftWindow->show(); } void MRIMClient::ShowEditAccountWindow() { EditAccount* editAccountWidget = new EditAccount(this); editAccountWidget->show(); } void MRIMClient::UpdateStatusIcon( const Status &newStatus ) { QIcon newIcon = newStatus.GetIcon(); UpdateStatusIcon(newIcon); } void MRIMClient::UpdateStatusIcon( const QIcon &newIcon ) { m_accountButton->setIcon(newIcon); m_accountButtonMenu->setIcon(newIcon); m_pluginSystem->updateStatusIcons(); } qutim-0.2.0/plugins/mrim/coresrc/mrimclitem.cpp0000644000175000017500000000212211273054313023243 0ustar euroelessareuroelessar/***************************************************************************** MRIMCLItem Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "mrimclitem.h" #include "MRIMContactList.h" MRIMCLItem::MRIMCLItem(QString aAccount, quint32 aFlags, QString aName): m_account(aAccount), m_Flags(aFlags), m_Name(aName), m_isInUi(false) { m_isNew = true; } MRIMCLItem::~MRIMCLItem() { } qutim-0.2.0/plugins/mrim/coresrc/mrimgroup.h0000644000175000017500000000233211273054313022572 0ustar euroelessareuroelessar/***************************************************************************** MRIMGroup Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMGROUP_H #define MRIMGROUP_H #include "mrimclitem.h" class MRIMGroup: public MRIMCLItem { Q_OBJECT public: MRIMGroup(QString aAccount, quint32 aFlags, QString aId, QString aName); QString Id() const; virtual TreeModelItem GetTreeModel(); ~MRIMGroup(); private: QString m_Id; virtual void SyncWithUi(); }; #endif // MRIMGROUP_H qutim-0.2.0/plugins/mrim/coresrc/MRIMPluginSystem.h0000644000175000017500000001450311273054313023704 0ustar euroelessareuroelessar/***************************************************************************** MRIMPluginSystem Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMPROTOIMPL_H_ #define MRIMPROTOIMPL_H_ #include "../uisrc/mrimloginwidget.h" #include "../uisrc/settingswidget.h" #include "../uisrc/generalsettings.h" #include "MRIMClient.h" #include #include #include using namespace qutim_sdk_0_2; class LoginForm; class MRIMEventHandlerClass; class MRIMPluginSystem: public QObject, public ProtocolInterface { Q_INTERFACES(qutim_sdk_0_2::PluginInterface) Q_OBJECT public: MRIMPluginSystem(); virtual ~MRIMPluginSystem(); virtual bool init(PluginSystemInterface *plugin_system); inline QString Profile() { return m_profileName; } virtual void removeAccount(const QString &account_name); virtual QWidget *loginWidget(); virtual void removeLoginWidget(); virtual void applySettingsPressed(); virtual QList getAccountStatusMenu(); virtual void addAccountButtonsToLayout(QHBoxLayout *); virtual void saveLoginDataFromLoginWidget(); virtual QList getSettingsList(); virtual void removeProtocolSettings(); virtual QList getAccountList(); virtual QList getAccountStatuses(); virtual void setAutoAway(); virtual void setStatusAfterAutoAway(); virtual void itemActivated(const QString &account_name, const QString &contact_name); virtual void itemContextMenu(const QList &action_list, const QString &account_name, const QString &contact_name, int item_type, const QPoint &menu_point); virtual void sendMessageTo(const QString &account_name, const QString &contact_name, int item_type, const QString& message, int message_icon_position); virtual QStringList getAdditionalInfoAboutContact(const QString &account_name, const QString &item_name, int item_type ) const; virtual void showContactInformation(const QString &account_name, const QString &item_name, int item_type ); virtual void sendImageTo(const QString &account_name, const QString &item_name, int item_type, const QByteArray &image_raw ); virtual void sendFileTo(const QString &account_name, const QString &item_name, int item_type, const QStringList &file_names); virtual void sendTypingNotification(const QString &account_name, const QString &item_name, int item_type, int notification_type); virtual void moveItemSignalFromCL(const TreeModelItem &old_item, const TreeModelItem &new_item); virtual QString getItemToolTip(const QString &account_name, const QString &contact_name); virtual void deleteItemSignalFromCL(const QString &account_name, const QString &item_name, int type); virtual void chatWindowOpened(const QString &account_name, const QString &item_name); virtual void sendMessageToConference(const QString &conference_name, const QString &account_name, const QString &message); virtual void leaveConference(const QString &conference_name, const QString &account_name); virtual void release(); virtual QString name(); virtual QString description(); virtual QIcon *icon(); virtual void setProfileName(const QString &profile_name); virtual void conferenceItemActivated(const QString &conference_name, const QString &account_name, const QString &nickname); virtual void conferenceItemContextMenu(const QList &action_list, const QString &conference_name, const QString &account_name, const QString &nickname, const QPoint &menu_point); virtual QString getConferenceItemToolTip(const QString &conference_name, const QString &account_name, const QString &nickname); virtual void showConferenceContactInformation(const QString &conference_name, const QString &account_name, const QString &nickname); virtual void showConferenceTopicConfig(const QString &conference_name, const QString &account_name); virtual void showConferenceMenu(const QString &conference_name, const QString &account_name, const QPoint &menu_point); virtual void getMessageFromPlugins(const QList &event); virtual void editAccount(const QString &account_name); virtual void chatWindowAboutToBeOpened(const QString &account_name, const QString &item_name); virtual void chatWindowClosed(const QString &account_name, const QString &item_name); //my funcs void addAccount(QString accountName); void removeProfileDir(const QString &path); MRIMClient* FindClientInstance(QString aAccName) const; inline MRIMEventHandlerClass* GetEventHandler() const { return m_event_handler; } inline static PluginSystemInterface* PluginSystem() { return m_static_plugin_system; } inline static MRIMPluginSystem* ImplPointer() { return m_selfPointer; } signals: void UpdateClientsSettings(); private: static PluginSystemInterface* m_static_plugin_system; static MRIMPluginSystem* m_selfPointer; QHash m_clients; LoginForm* m_loginWidget; SettingsWidget* m_settingsWidget; GeneralSettings* m_generalSettingsWidget; QTreeWidgetItem* m_generalSettItem; QTreeWidgetItem* m_connectionSettItem; QHBoxLayout *m_protoButtonLayout; QString m_profileName; QString m_host; quint32 m_port; bool m_useProxy; QString m_proxyHost; quint32 m_proxyPort; QNetworkProxy::ProxyType m_proxyType; QString m_proxyUserName; QString m_proxyPass; QNetworkProxy m_sharedProxy; QIcon *m_protoIcon; MRIMEventHandlerClass* m_event_handler; }; inline MRIMPluginSystem* PluginSystemImpl() { return MRIMPluginSystem::ImplPointer(); } #endif /*MRIMPROTOIMPL_H_*/ qutim-0.2.0/plugins/mrim/coresrc/mrimeventhandler.h0000644000175000017500000000203611273054313024116 0ustar euroelessareuroelessar#ifndef MRIMEVENTHANDLER_H #define MRIMEVENTHANDLER_H #include "Status.h" #include using namespace qutim_sdk_0_2; class MRIMPluginSystem; class MRIMEventHandlerClass : public EventHandler { public: static MRIMEventHandlerClass& Instance(); MRIMEventHandlerClass(); virtual ~MRIMEventHandlerClass(); void processEvent(Event &event); void sendStatusChangedEvent(const QString& aAccount, const Status& aNewStatus); void sendConnectedEvent(const QString& aAccount, const Status& aConnectedStatus); void sendDisconnectedEvent(const QString& aAccount); private: void HandleStatusChangeEvent(Event &event); MRIMPluginSystem *m_plugin_system; qint32 m_event_account_status_changed; qint32 m_event_account_connected; qint32 m_event_account_disconnected; qint32 m_event_account_status_change; qint32 m_event_account_status_text_change; }; inline static MRIMEventHandlerClass& MRIMEventHandler() { return MRIMEventHandlerClass::Instance(); } #endif // MRIMEVENTHANDLER_H qutim-0.2.0/plugins/mrim/coresrc/MRIMProto.cpp0000644000175000017500000014470011273054313022702 0ustar euroelessareuroelessar/***************************************************************************** MRIMProto Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "MRIMProto.h" #include #include "MRIMUtils.h" #include #include #include #include #include #include "mrimeventhandler.h" #include "MRIMContactList.h" #include "MRIMPacket.h" #include #include #include const qint32 KMpopRequestPeriod = 1000*60*30; //30 mins MRIMProto::MRIMProto(QString aProfileName, QNetworkProxy aProxy) : m_clParser(NULL), m_RecvBuffer(NULL), m_PingTimer(NULL), m_addingContact(NULL), m_addingGroup(NULL), m_modifingContact(NULL), m_currentClOp(ENoOperation), m_proxy(aProxy),m_profileName(aProfileName), m_IMSocket(NULL), m_SrvRequestSocket(NULL), m_protoFeatures(0), m_currentStatus(STATUS_OFFLINE) { m_typersList = new QList; m_typingTimer = new QTimer; m_mpopTimer = new QTimer; connect(m_typingTimer,SIGNAL(timeout()),this,SLOT(TypingTimerStep())); m_doNotReconnect = true; //TODO: make it as a setting m_cntInfoRequested = false; connect(&m_currentStatus,SIGNAL(Changed()),this,SLOT(HandleChangeOfStatus())); quint8 dummy = 0; quint16 svnVer = 0; MRIMPluginSystem::PluginSystem()->getQutimVersion(dummy,dummy,dummy,svnVer); UserAgent qutimAgent(QApplication::applicationName(),QApplication::applicationVersion(),QString("%1").arg(svnVer),PROTO_VERSION_MAJOR,PROTO_VERSION_MINOR); m_userAgent.Set(qutimAgent); } MRIMProto::~MRIMProto() { delete m_typingTimer; delete m_PingTimer; delete m_mpopTimer; delete m_clParser; delete m_typersList; delete m_RecvBuffer; delete m_IMSocket; delete m_SrvRequestSocket; } void MRIMProto::Connect(QString aLogin, QString aPass, QString aHost, quint32 aPort, const Status &aStatus) { m_unreadMsgs = 0; m_msgSequenceNum = 0; m_login = aLogin; m_pass = aPass; m_IMServerSelectorHost = aHost; m_IMServerSelectorPort = aPort; m_firstStatus.Clone(aStatus); m_currentStatus = StatusData(STATUS_OFFLINE); m_prevStatus = StatusData(STATUS_OFFLINE); receiveGoodServer(); } void MRIMProto::receiveGoodServer() { m_SrvRequestSocket = new QTcpSocket(this); qDebug()<<"Using proxy: "<setProxy(m_proxy); connect(m_IMSocket, SIGNAL( connected() ), this, SLOT( connectedToIMServer() )); connect(m_IMSocket, SIGNAL( disconnected() ), this, SLOT( disconnectedFromIMServer() )); connect(m_IMSocket, SIGNAL( readyRead() ), this, SLOT( readDataFromSocket() )); #ifdef DEBUG_LEVEL_DEV qDebug()<<*m_IMServerHost; #endif m_IMSocket->connectToHost(*m_IMServerHost, m_IMServerPort); } } } void MRIMProto::disconnectedFromSrvRequestServer() {//catched disconnect event qDebug("Changing server..."); } void MRIMProto::connectedToIMServer() {//we are at IM server, start communication from HELLO MRIMPacket hello; hello.SetMsgType(MRIM_CS_HELLO); hello.SetBody(""); hello.Send(m_IMSocket); } void MRIMProto::disconnectedFromIMServer() { qDebug("Disconnected from IM server!"); StopPing(); m_prevStatus.Clone(m_currentStatus); m_currentStatus.Clear(); m_currentStatus = STATUS_OFFLINE; MRIMEventHandler().sendDisconnectedEvent(m_login); emit ProtoStatusChanged(m_currentStatus.GetData()); SetAllContactsOffline(); } void MRIMProto::SetAllContactsOffline() { if (!m_clParser) return; quint32 itemsCount = m_clParser->GetItemsCount(); for (quint32 i=0; i < itemsCount; i++) { MRIMCLItem* item = m_clParser->ItemByIndex(i); if (item == NULL) continue; if (item->Type() == EContact) { MRIMContact* contact = reinterpret_cast(item); if ( contact->Email() != "phone" ) { contact->SetStatus(STATUS_OFFLINE); } } } } void MRIMProto::readDataFromSocket() {//ready to read data if (!m_SaveBufPos && m_RecvBuffer != NULL) { delete m_RecvBuffer; m_RecvBuffer = NULL; } if (m_RecvBuffer == NULL) { m_RecvBuffer = new QBuffer(this); m_RecvBuffer->open(QIODevice::ReadWrite); m_SaveBufPos = false; } quint64 rememberPos = m_RecvBuffer->pos(); if (m_SaveBufPos) { m_RecvBuffer->seek(m_RecvBuffer->size()); } m_RecvBuffer->write(m_IMSocket->readAll()); if (!m_SaveBufPos) { m_RecvBuffer->seek(0); } else { m_RecvBuffer->seek(rememberPos); } while (true) { qint64 totalBuffSize = m_RecvBuffer->size(); qint64 bytesLeft = totalBuffSize - m_RecvBuffer->pos(); if (bytesLeft >= sizeof(mrim_packet_header_t)) { MRIMPacket* packet = NULL; TPacketErrorCodes errCode = MRIMPacket::TryMakeFromRawData(*m_RecvBuffer,packet); if (errCode == ENotEnoughBytes) { m_SaveBufPos = true; break; } if (packet != NULL) { HandleMRIMPacket(packet); } else { qDebug("Error occured while reading packet. Possibly packet is corrupted or internal error."); break; } } else { if (bytesLeft == 0) { m_SaveBufPos = false; } else if (bytesLeft > 0) { m_SaveBufPos = true; } break; } } } bool MRIMProto::HandleMRIMPacket(MRIMPacket* aPacket) { if (aPacket == NULL) return false; QDataStream out(aPacket->Data(),QIODevice::ReadOnly); out.setByteOrder(QDataStream::LittleEndian); quint32 logoutReason = 0; quint32 unreadMsgs = 0; switch (aPacket->MsgType()) { case MRIM_CS_HELLO_ACK: #ifdef DEBUG_LEVEL_DEV qDebug("HELLO_ACK packet!"); #endif out >> m_PingPeriod; SendLOGINPacket(); break; case MRIM_CS_LOGIN_ACK: #ifdef DEBUG_LEVEL_DEV qDebug("LOGIN_ACK packet! starting ping!"); #endif StartPing(); m_prevStatus.Clear(); m_prevStatus = STATUS_OFFLINE; m_currentStatus.Clone(m_firstStatus); RequestMPOPKey(); MRIMEventHandler().sendConnectedEvent(m_login,m_currentStatus); emit ProtoStatusChanged(m_currentStatus.GetData()); break; case MRIM_CS_LOGIN_REJ: #ifdef DEBUG_LEVEL_DEV qDebug("LOGIN_REJ packet! disconnecting!"); #endif m_prevStatus.Clear(); m_currentStatus.Clear(); m_prevStatus = STATUS_OFFLINE; m_currentStatus = STATUS_OFFLINE; emit LogoutReceived(EAuthenticationFailed); break; case MRIM_CS_MPOP_SESSION: #ifdef DEBUG_LEVEL_DEV qDebug("MPOP key packet!"); #endif HandleMPOPSessionAck(aPacket); break; case MRIM_CS_CONTACT_LIST2: #ifdef DEBUG_LEVEL_DEV qDebug("CONTACT_LIST2 packet!"); #endif HandleContactList(aPacket); break; case MRIM_CS_USER_STATUS: #ifdef DEBUG_LEVEL_DEV qDebug("USER_STATUS packet!"); #endif HandleUserStatusChanged(aPacket); break; case MRIM_CS_USER_INFO: #ifdef DEBUG_LEVEL_DEV qDebug("USER_INFO packet!"); #endif HandleUserInfo(aPacket); break; case MRIM_CS_MESSAGE_ACK: #ifdef DEBUG_LEVEL_DEV qDebug("MESSAGE_ACK packet!"); #endif HandleMessageAck(aPacket); break; case MRIM_CS_OFFLINE_MESSAGE_ACK: #ifdef DEBUG_LEVEL_DEV qDebug("OFFLINE_MESSAGE_ACK packet!"); #endif HandleOfflineMessageAck(aPacket); break; case MRIM_CS_ADD_CONTACT_ACK: #ifdef DEBUG_LEVEL_DEV qDebug("ADD_CONTACT_ACK packet!"); #endif HandleAddContactAck(aPacket); break; case MRIM_CS_MESSAGE_STATUS: #ifdef DEBUG_LEVEL_DEV qDebug("MESSAGE_STATUS packet!"); #endif HandleMessageStatusPacket(aPacket); break; case MRIM_CS_AUTHORIZE_ACK: #ifdef DEBUG_LEVEL_DEV qDebug("AUTHORIZE_ACK packet!"); #endif HandleAuthorizeAckPacket(aPacket); break; case MRIM_CS_LOGOUT: #ifdef DEBUG_LEVEL_DEV qDebug("LOGOUT packet!"); #endif out >> logoutReason; if (logoutReason & LOGOUT_NO_RELOGIN_FLAG) { m_doNotReconnect = true; emit LogoutReceived(EAnotherClientConnected); } else { //m_doNotReconnect = false; emit LogoutReceived(EUnknownReason); } break; case MRIM_CS_MAILBOX_STATUS: #ifdef DEBUG_LEVEL_DEV qDebug("MAILBOX_STATUS packet!"); #endif out >> unreadMsgs; m_unreadMsgs = unreadMsgs; emit MailboxStatusChanged(unreadMsgs); break; case MRIM_CS_CONNECTION_PARAMS: #ifdef DEBUG_LEVEL_DEV qDebug("CONNECTION_PARAMS packet!"); #endif //ignore it as not used break; case MRIM_CS_GET_MPOP_SESSION: #ifdef DEBUG_LEVEL_DEV qDebug("MPOP_SESSION_ACK packet!"); #endif HandleMPOPSessionAck(aPacket); break; case MRIM_CS_MODIFY_CONTACT_ACK: #ifdef DEBUG_LEVEL_DEV qDebug("MODIFY_CONTACT_ACK packet!"); #endif HandleModifyContactAck(aPacket); break; case MRIM_CS_ANKETA_INFO: #ifdef DEBUG_LEVEL_DEV qDebug("ANKETA_INFO packet!"); #endif HandleAnketaInfo(aPacket); break; case MRIM_CS_FILE_TRANSFER: #ifdef DEBUG_LEVEL_DEV qDebug("FILE_TRANSFER request packet!"); #endif HandleFileTransferRequest(aPacket); break; case MRIM_CS_SMS_ACK: { qint32 status = 0; out >> status; qDebug()<<"SMS send status: "<MsgType()); #endif break; } return true; } void MRIMProto::StartPing() { m_PingTimer = new QTimer(this); QObject::connect(m_PingTimer, SIGNAL(timeout()), this, SLOT(SendPINGPacket())); m_PingTimer->start(m_PingPeriod*1000); } void MRIMProto::StopPing() { if (!m_PingTimer) return; if (m_PingTimer->isActive()) { m_PingTimer->stop(); } } void MRIMProto::SendPINGPacket() { MRIMPacket packet; packet.SetMsgType(MRIM_CS_PING); packet.SetBody(""); packet.Send(m_IMSocket); } void MRIMProto::SendLOGINPacket() { MRIMPacket loginPacket; loginPacket.SetMsgType(MRIM_CS_LOGIN2); loginPacket.Append(m_login); loginPacket.Append(m_pass); loginPacket.Append(m_firstStatus.Get()); loginPacket.Append(m_firstStatus.Stringify()); loginPacket.Append(m_firstStatus.GetTitle(),true); loginPacket.Append(m_firstStatus.GetDescription(),true); loginPacket.Append(ProtoFeatures()); loginPacket.Append(m_userAgent.Stringify()); loginPacket.Append("ru"); //TEMP !! #if PROTO_VERSION_MINOR >= 20 loginPacket.Append(0); //NULL loginPacket.Append(0); //NULL #endif loginPacket.Append(QString("%1 %2;").arg(QApplication::applicationName()).arg(QApplication::applicationVersion())); #ifdef DEBUG_LEVEL_DEV qDebug()<<"Sending LOGIN request..."; #endif loginPacket.Send(m_IMSocket); } void MRIMProto::HandleContactList(MRIMPacket* aPacket) { emit NewCLReceived(); if (m_clParser) { delete m_clParser; } m_clParser = new MRIMContactList(m_login,*aPacket->Data()); m_clParser->Parse(); } void MRIMProto::HandleUserStatusChanged(MRIMPacket* aPacket) { if (!m_clParser || !aPacket) return; quint32 numStatus = STATUS_UNDETERMINATED, comSupport; QString statusName, statusTitle, statusDescr, email, userAgent; aPacket->Read(numStatus); aPacket->Read(&statusName); aPacket->Read(&statusTitle,true); aPacket->Read(&statusDescr,true); aPacket->Read(&email); aPacket->Read(comSupport); aPacket->Read(&userAgent); qDebug()<<"User "<take("MESSAGES.UNREAD"); userInfo.userNickname = userInfoArray->take("MRIM.NICKNAME"); //userInfo.userHasMyMail = userInfoArray->take("HAS_MYMAIL"); userInfo.userClientEndpoint = userInfoArray->take("client.endpoint"); bool ok; m_unreadMsgs = userInfo.messagesUnread.toUInt(&ok,10); if (!ok) m_unreadMsgs = 0; emit AccountInfoRecieved(userInfo); delete buff; } void MRIMProto::HandleMessageAck(MRIMPacket* aPacket) { QBuffer* buff = new QBuffer(this); buff->open(QIODevice::ReadWrite); qint64 written = buff->write(*aPacket->Data()); Q_UNUSED(written); buff->seek(0); quint32 msgId = ByteUtils::ReadToUL(*buff); quint32 flags = ByteUtils::ReadToUL(*buff); QString from = ByteUtils::ReadToString(*buff); if (flags & MESSAGE_FLAG_NOTIFY) {//typing notification MRIMContact* cnt = m_clParser->CntByEmail(from); if (cnt) { bool isAlreadyThere = false; for (quint32 i=0; i < m_typersList->count(); i++) { if (m_typersList->at(i).typingContact->Email() == cnt->Email()) { isAlreadyThere = true; TypingStruct temp; temp.typingContact = cnt; temp.secsLeft = 10; m_typersList->replace(i,temp); break; } } if (!isAlreadyThere) { TypingStruct typer; typer.typingContact=cnt; typer.secsLeft = 10; m_typersList->append(typer); if (!m_typingTimer->isActive()) { m_typingTimer->setInterval(1000); m_typingTimer->setSingleShot(false); m_typingTimer->start(); } emit ContactTyping(cnt->Email(),QString(cnt->GroupId())); } } else { //ignore not in list typers //emit ContactTyping(from->String(),""); } return; } bool isAuth = (flags & MESSAGE_FLAG_AUTHORIZE); bool isUnicode = !(flags & MESSAGE_FLAG_CP1251); QString msg = ByteUtils::ReadToString(*buff,isUnicode); bool hasRtf = (flags & MESSAGE_FLAG_RTF); if (hasRtf) {//RTF processing QString rtfMsg = ByteUtils::ReadToString(*buff,false); msg = MRIMCommonUtils::ConvertToPlainText(rtfMsg); } // if (!(flags & MESSAGE_FLAG_OFFLINE)) if (true) { if (!isAuth && !(flags & MESSAGE_FLAG_NORECV)) { SendDeliveryReport(from,msgId); } MRIMContact* cnt = m_clParser->CntByEmail(from); if (isAuth) { QByteArray authTextDecoded = QByteArray::fromBase64(msg.toAscii()); QBuffer buff(&authTextDecoded); quint32 strCount = ByteUtils::ReadToUL(buff); if (strCount < 2) msg = ""; else { QString nick = ByteUtils::ReadToString(buff,isUnicode); msg = ByteUtils::ReadToString(buff,isUnicode); msg.append(QString(" (%1)").arg(nick)); } } if (cnt) { emit MessageRecieved(cnt->Email(),QString(cnt->GroupId()),msg,QDateTime::currentDateTime(),hasRtf,isAuth); } else if (from.contains('@')) { Status stat(STATUS_UNDETERMINATED); UserAgent emptyAgent; MRIMContact* newCnt = new MRIMContact(m_login,0,from,from,-1,-1,stat,0,QString(), emptyAgent,0,true,true); m_clParser->AddItem(newCnt); emit MessageRecieved(newCnt->Email(),"-1",msg,QDateTime::currentDateTime(),hasRtf,isAuth); } else { emit NotifyUI(msg); } } delete buff; } void MRIMProto::HandleOfflineMessageAck(MRIMPacket* aPacket) { if (aPacket == 0) return; QBuffer* buff = new QBuffer(this); buff->open(QIODevice::ReadWrite); buff->write(*aPacket->Data()); buff->seek(0); quint32 uidl = ByteUtils::ReadToUL(*buff); quint32 uidl2 = ByteUtils::ReadToUL(*buff); LPString* msg = ByteUtils::ReadToLPS(*buff); if (!msg) return; MRIMOfflineMessage offMsg; bool parsedOk = ParseOfflineMessage(msg->String(),offMsg); delete msg; if (parsedOk) { bool isAuth = false; bool hasRtf = false; if (offMsg.Flags & MESSAGE_FLAG_AUTHORIZE) { isAuth = true; } if (offMsg.Flags & MESSAGE_FLAG_RTF) { hasRtf = true; offMsg.Message = MRIMCommonUtils::ConvertToPlainText(offMsg.Message); } QString msgStr = tr("Offline message ")+"("+offMsg.DateTime.toString(Qt::SystemLocaleShortDate)+")\n"+offMsg.Message; MRIMContact* cnt = m_clParser->CntByEmail(offMsg.From); if (cnt) { emit MessageRecieved(cnt->Email(),QString(cnt->GroupId()),msgStr,QDateTime::currentDateTime(),hasRtf,isAuth); } else if (offMsg.From.contains('@')) { Status stat(STATUS_UNDETERMINATED); UserAgent emptyAgent; MRIMContact* newCnt = new MRIMContact(m_login,0,offMsg.From,offMsg.From,-1,-1,stat,0,QString(),emptyAgent,0,false); if (m_clParser->AddItem(newCnt)) { emit AddItemToUI(EContact,QString::number(-1),newCnt->Email(),newCnt->Name(),stat.GetData(),false); } emit MessageRecieved(newCnt->Email(),"",offMsg.Message,QDateTime::currentDateTime(),hasRtf,isAuth); } else { emit NotifyUI(msgStr); } //respond MRIMPacket offMsgRespPacket; offMsgRespPacket.SetMsgType(MRIM_CS_DELETE_OFFLINE_MESSAGE); QByteArray packet; packet.append(ByteUtils::ConvertULToArray(uidl)); packet.append(ByteUtils::ConvertULToArray(uidl2)); offMsgRespPacket.SetBody(packet); QByteArray* rawPacket = offMsgRespPacket.ConvertToByteArray(); m_IMSocket->write(*rawPacket); delete rawPacket; } else {//do nothing:) } } bool MRIMProto::ParseOfflineMessage(QString aRawMsg, MRIMOfflineMessage& aMsg) { bool res = false; QRegExp charsetRx("charset=([\\w\\d-_]+)\\n"); QRegExp fromRx("From:\\s([a-zA-Z0-9\\-\\_\\.]+@[a-zA-Z0-9\\-\\_]+\\.+[a-zA-Z]+)\\n"); QRegExp dateRx("Date:\\s([a-zA-Z0-9, :]+)\\n"); QRegExp subjectRx("Subject:\\s(\\b[\\w\\s]+\\b)\\n"); QRegExp mrimFlagsRx("X-MRIM-Flags:\\s([0-9]+)\\n"); QRegExp boundaryRx("Boundary:\\s(\\b\\w+\\b)\\n"); QRegExp versionRx("Version:\\s([0-9\\.]+)\\n"); QRegExp msgRx("\\n\\n(.+)\\n--{boundary}--"); QDateTime dateTime; if (fromRx.indexIn(aRawMsg) == -1) return res; aMsg.From = fromRx.cap(1); if (dateRx.indexIn(aRawMsg) == -1) return res; aMsg.DateTime = QLocale("en").toDateTime(dateRx.cap(1),"ddd, dd MMM yyyy hh:mm:ss"); if (subjectRx.indexIn(aRawMsg) == -1) return res; aMsg.Subject = subjectRx.cap(1); if (mrimFlagsRx.indexIn(aRawMsg) == -1) return res; bool ok = false; aMsg.Flags = 0; aMsg.Flags = mrimFlagsRx.cap(1).toULong(&ok,16); if (boundaryRx.indexIn(aRawMsg) == -1) return res; QString boundary = boundaryRx.cap(1); if (versionRx.indexIn(aRawMsg) == -1) return res; msgRx.setPattern(msgRx.pattern().replace("{boundary}",boundary)); if (msgRx.indexIn(aRawMsg) == -1) return res; aMsg.Message = msgRx.cap(1); res = true; return res; } void MRIMProto::SendTypingToContact(QString aEmail) { if (IsOnline()) SendMessageToContact(aEmail," ",99,false,true); } void MRIMProto::SendMessageToContact(QString aEmail, QString aMessage, quint32 aKernelMsgId, bool aIsAuth, bool aIsTyping) { MRIMPacket messagePacket; messagePacket.SetMsgType(MRIM_CS_MESSAGE); messagePacket.SetSequence(m_msgSequenceNum); while (m_msgIdsLinks.count() >= MRIM_MSGQUEUE_MAX_LEN) { m_msgIdsLinks.dequeue(); } MsgIdsLink idsLink; idsLink.qutimKernelNum = aKernelMsgId; idsLink.mrimMsgSequence = m_msgSequenceNum; MRIMContact* contact = m_clParser->CntByEmail(aEmail); if (contact != NULL) { idsLink.contactEmail = contact->Email(); idsLink.groupId = contact->GroupId(); } else { idsLink.contactEmail = aEmail; idsLink.groupId = 0; } m_msgIdsLinks.enqueue(idsLink); m_msgSequenceNum++; quint32 flags = 0; if (aIsAuth) { flags |= MESSAGE_FLAG_AUTHORIZE; flags |= MESSAGE_FLAG_NORECV; } if (aIsTyping) { flags |= MESSAGE_FLAG_NOTIFY; } messagePacket.Append(flags); messagePacket.Append(aEmail); messagePacket.Append(aMessage,true); messagePacket.Append(" "); messagePacket.Send(m_IMSocket); } void MRIMProto::TypingTimerStep() { if (m_typersList->count() == 0) { m_typingTimer->stop(); return; } int count = m_typersList->count(); int i = 0; while(i < count) { TypingStruct& typer = (*m_typersList)[i]; typer.secsLeft--; if (typer.secsLeft <= 0) { emit ContactTypingStopped(typer.typingContact->Email(),QString(typer.typingContact->GroupId())); m_typersList->removeAt(i); count--; } i++; } } void MRIMProto::SendAuthorizationTo(QString aEmail) { MRIMPacket authPacket; authPacket.SetMsgType(MRIM_CS_AUTHORIZE); authPacket.Append(aEmail); MRIMContact* authedCnt = m_clParser->CntByEmail(aEmail); if (authedCnt) { authedCnt->SetAuthed(true); } authPacket.Send(m_IMSocket); } bool MRIMProto::IsInList(QString aEmail) { if (!m_clParser) return false; MRIMContact* found = m_clParser->CntByEmail(aEmail); return (found != NULL && found->GroupId() >= 0); } void MRIMProto::AddContact(QString aEmail, QString aName, quint32 aGroupId, bool aIsAuthed, bool aIsAuthedMe) { if (!m_clParser) { m_clParser = new MRIMContactList(m_login); } if (m_addingContact) delete m_addingContact; UserAgent emptyAgent; Status stat(STATUS_UNDETERMINATED); m_addingContact = new MRIMContact(m_login,0,aName,aEmail,0,aGroupId,stat,0,QString(), emptyAgent,0,false); if (!IsOnline()) {//offline addition m_addingContact->SetAuthed(aIsAuthed); m_addingContact->SetAuthedMe(aIsAuthedMe); m_clParser->AddItem(m_addingContact); m_addingContact = NULL; } else { quint32 flags = 0; MRIMPacket addContactPacket; addContactPacket.SetMsgType(MRIM_CS_ADD_CONTACT); addContactPacket.Append(flags); addContactPacket.Append(aGroupId); addContactPacket.Append(aEmail); addContactPacket.Append(aName,true); addContactPacket.Append(QString()); //phones QByteArray authMsg; authMsg.append(ByteUtils::ConvertULToArray(2)); LPString nick(m_UserInfo.userNickname,true); authMsg.append(nick.ToRaw()); LPString authText(tr("Pls authorize and add me to your contact list! Thanks!"),true); authMsg.append(authText.ToRaw()); authMsg = authMsg.toBase64(); LPString encodedAuthMsg(authMsg); addContactPacket.Append(encodedAuthMsg); //auth text addContactPacket.Append(ADD_CONTACT_ACTION_FLAG_MYMAIL_INVITE); //actions. invite user to My world on mail.ru addContactPacket.Send(m_IMSocket); } } void MRIMProto::AddGroup(QString aName, quint32 aId) { if (!m_clParser) { m_clParser = new MRIMContactList(m_login); } if (m_addingGroup) delete m_addingGroup; m_addingGroup = new MRIMGroup(m_login,0,QString::number(aId),aName); if (!IsOnline()) { m_clParser->AddItem(m_addingGroup); m_addingGroup = NULL; } else { MRIMPacket addGroupPacket; addGroupPacket.SetMsgType(MRIM_CS_ADD_CONTACT); addGroupPacket.Append(CONTACT_FLAG_GROUP); addGroupPacket.Append(0); addGroupPacket.Append(aName); addGroupPacket.Send(m_IMSocket); } } void MRIMProto::HandleAddContactAck(MRIMPacket* aPacket) { quint32 result = ByteUtils::ReadToUL(*aPacket->Data()); quint32 contId = ByteUtils::ReadToUL(*aPacket->Data(),4); #ifdef DEBUG_LEVEL_DEV qDebug()<<"New user addition to CL, contId="<Data()); if (deliveryStatus == MESSAGE_DELIVERED) { qDebug()<<"Message "<Sequence())<<" delivered"; } else { qDebug()<<"Message "<Sequence())<<" delivery ERROR!"; } for (qint32 i=0; i < m_msgIdsLinks.count(); i++) { if (m_msgIdsLinks[i].mrimMsgSequence == aPacket->Sequence()) { emit MessageDelivered(m_msgIdsLinks[i].contactEmail,QString(m_msgIdsLinks[i].groupId),m_msgIdsLinks[i].qutimKernelNum); m_msgIdsLinks.removeAt(i); break; } } } void MRIMProto::SendDeliveryReport(QString aFrom, quint32 aMsgId) { MRIMPacket deliveryPacket; deliveryPacket.SetMsgType(MRIM_CS_MESSAGE_RECV); deliveryPacket.Append(aFrom); deliveryPacket.Append(aMsgId); qDebug()<<"Sending delivery report..."; deliveryPacket.Send(m_IMSocket); } void MRIMProto::HandleAuthorizeAckPacket(MRIMPacket* aPacket) { if (!m_clParser || !aPacket) return; LPString* authedEmail = ByteUtils::ReadToLPS(*aPacket->Data()); MRIMContact* authedContact = m_clParser->CntByEmail(authedEmail->String()); if (authedContact) { authedContact->SetAuthedMe(true); emit AuthorizeResponseReceived(authedContact->Email(),QString(authedContact->GroupId())); } } void MRIMProto::SetProxy(QNetworkProxy aProxy) { m_proxy = aProxy; if (m_SrvRequestSocket) { m_SrvRequestSocket->setProxy(m_proxy); } if (m_IMSocket) { m_IMSocket->setProxy(m_proxy); } } void MRIMProto::DisconnectFromIM() { SetAllContactsOffline(); if (!m_IMSocket) return; if (m_IMSocket->isValid()) { m_IMSocket->disconnectFromHost(); } } void MRIMProto::HandleMPOPSessionAck(MRIMPacket* aPacket) { if (!aPacket) return; quint32 opStatus; QString mpopKey; aPacket->Read(opStatus); aPacket->Read(&mpopKey); if (opStatus == MRIM_GET_SESSION_SUCCESS) { emit MPOPKeyReceived(mpopKey); } m_mpopTimer->singleShot(KMpopRequestPeriod,this,SLOT(RequestMPOPKey())); } void MRIMProto::RequestMPOPKey() { if (!IsOnline()) return; MRIMPacket mpopReqPacket; mpopReqPacket.SetMsgType(MRIM_CS_GET_MPOP_SESSION); mpopReqPacket.Append(""); qDebug()<<"Sending MPOP request..."; mpopReqPacket.Send(m_IMSocket); } bool MRIMProto::IsContactAuthedByMe(QString aEmail) { if (!m_clParser) return true; MRIMContact* cnt = m_clParser->CntByEmail(aEmail); if (!cnt) return true; return cnt->IsAuthed(); } bool MRIMProto::IsContactAuthedMe(QString aEmail) { if (!m_clParser) return true; MRIMContact* cnt = m_clParser->CntByEmail(aEmail); if (!cnt) return true; return cnt->IsAuthedMe(); } MRIMContact* MRIMProto::GetContactByEmail(QString aEmail) { if (!m_clParser) return NULL; return m_clParser->CntByEmail(aEmail); } void MRIMProto::RemoveUserFromCL(QString aEmail) { SendModifyContact(aEmail,"",0,CONTACT_FLAG_REMOVED,EKeepOldValues); } void MRIMProto::SendModifyContact(QString aEmail, QString aNewName, quint32 aNewGroupId, quint32 aFlags, TModifyFlags aSpecialFlags) { if (!m_clParser || m_modifingContact) return; MRIMContact* cnt = m_clParser->CntByEmail(aEmail); if (!cnt) return; m_modifingContact = cnt; if (aFlags & CONTACT_FLAG_REMOVED) { m_currentClOp = EDelete; } else { m_currentClOp = EModify; } quint32 id = 0; quint32 grId = 0; QString name; if (aSpecialFlags & EKeepOldValues) { id = cnt->Id(); grId = cnt->GroupId(); name = cnt->Name(); } else { id = cnt->Id(); grId = aNewGroupId; if (grId == -1) grId = cnt->GroupId(); name = aNewName; } MRIMPacket modifyPacket; modifyPacket.SetMsgType(MRIM_CS_MODIFY_CONTACT); modifyPacket.Append(id); modifyPacket.Append(aFlags); modifyPacket.Append(grId); modifyPacket.Append(aEmail); modifyPacket.Append(name,true); if (cnt->HasPhone()) { QString phones = cnt->Phone().join(","); modifyPacket.Append(phones.remove('+')); } modifyPacket.Send(m_IMSocket); } void MRIMProto::HandleModifyContactAck(MRIMPacket* aPacket) { if (!m_clParser || !aPacket) return; quint32 opStatus = ByteUtils::ReadToUL(*aPacket->Data()); if (m_modifingContact) { if (opStatus == CONTACT_OPER_SUCCESS) { if (m_currentClOp == EDelete) { qDebug()<<"Delete contact operation succeeded!"; m_clParser->DeleteEntry(m_modifingContact); } else { qDebug()<<"Modify contact operation succeeded!"; //modify } m_modifingContact = NULL; m_currentClOp = ENoOperation; } else { emit CLOperationFailed(ConvertCLErrorFromNative(opStatus)); m_modifingContact = NULL; m_currentClOp = ENoOperation; } } } CLOperationError MRIMProto::ConvertCLErrorFromNative(quint32 aNativeErrorCode) { CLOperationError localErrCode = ECLUnknownError; switch (aNativeErrorCode) { case CONTACT_OPER_NO_SUCH_USER: localErrCode = ECLNoSuchUser; break; case CONTACT_OPER_INTERR: localErrCode = ECLInternalServerError; break; case CONTACT_OPER_INVALID_INFO: localErrCode = ECLInvalidInfo; break; case CONTACT_OPER_USER_EXISTS: localErrCode = ECLUserAlreadyExists; break; case CONTACT_OPER_GROUP_LIMIT: localErrCode = ECLGroupLimitReached; break; } return localErrCode; } quint32 MRIMProto::ConvertCLErrorToNative(CLOperationError aLocalErrorCode) { quint32 nativeErrCode = CONTACT_OPER_ERROR; switch (aLocalErrorCode) { case ECLNoSuchUser: nativeErrCode = CONTACT_OPER_NO_SUCH_USER; break; case ECLInternalServerError: nativeErrCode = CONTACT_OPER_INTERR; break; case ECLInvalidInfo: nativeErrCode = CONTACT_OPER_INVALID_INFO; break; case ECLUserAlreadyExists: nativeErrCode = CONTACT_OPER_USER_EXISTS; break; case ECLGroupLimitReached: nativeErrCode = CONTACT_OPER_GROUP_LIMIT; break; default: break; } return nativeErrCode; } void MRIMProto::StartSearch(MRIMSearchParams aParams) { int fieldsCount = 0; if (IsOnline()) { MRIMPacket searchPacket; searchPacket.SetMsgType(MRIM_CS_WP_REQUEST); //append pairs of param-value for search if (aParams.EmailAddr.length() > 0 && aParams.EmailDomain.length() > 0) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_USER); searchPacket.Append(aParams.EmailAddr); searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_DOMAIN); searchPacket.Append(aParams.EmailDomain); fieldsCount+=2; } else { if (aParams.Nick.length() > 0 && aParams.Nick != "*") { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_NICKNAME); searchPacket.Append(aParams.Nick); fieldsCount++; } if (aParams.Name.length() > 0 && aParams.Name != "*") { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME); searchPacket.Append(aParams.Name); fieldsCount++; } if (aParams.Surname.length() > 0 && aParams.Surname != "*") { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_LASTNAME); searchPacket.Append(aParams.Surname); fieldsCount++; } if (aParams.Sex != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_SEX); searchPacket.Append(QString::number(aParams.Sex)); fieldsCount++; } if (aParams.MinAge != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_DATE1); searchPacket.Append(QString::number(aParams.MinAge)); fieldsCount++; } if (aParams.MaxAge != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_DATE2); searchPacket.Append(QString::number(aParams.MaxAge)); fieldsCount++; } if (aParams.CityId != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_CITY_ID); searchPacket.Append(QString::number(aParams.CityId)); fieldsCount++; } if (aParams.CountryId != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID); searchPacket.Append(QString::number(aParams.CountryId)); fieldsCount++; } if (aParams.ZodiacId != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_ZODIAC); searchPacket.Append(QString::number(aParams.ZodiacId)); fieldsCount++; } if (aParams.BirthDay != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY); searchPacket.Append(QString::number(aParams.BirthDay)); fieldsCount++; } if (aParams.BirthdayMonth != -1) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH); searchPacket.Append(QString::number(aParams.BirthdayMonth)); fieldsCount++; } if (aParams.OnlineOnly == true) { searchPacket.Append(MRIM_CS_WP_REQUEST_PARAM_ONLINE); searchPacket.Append(QString::number(1)); fieldsCount++; } } if (fieldsCount > 0) { searchPacket.Send(m_IMSocket); } } } void MRIMProto::HandleAnketaInfo(MRIMPacket* aPacket) { if (!aPacket) return; QBuffer* buff = new QBuffer(this); buff->open(QIODevice::ReadWrite); qint64 written = buff->write(*aPacket->Data()); Q_UNUSED(written); buff->seek(0); QList fieldNames; quint32 opStatus = ByteUtils::ReadToUL(*buff); Q_UNUSED(opStatus); quint32 fieldsNum = ByteUtils::ReadToUL(*buff); quint32 maxRows = ByteUtils::ReadToUL(*buff); Q_UNUSED(maxRows); quint32 serverTime = ByteUtils::ReadToUL(*buff); Q_UNUSED(serverTime); QString fieldName; for (quint32 i=0; i < fieldsNum; i++) { fieldName = ByteUtils::ReadToString(*buff); fieldNames.append(fieldName); } quint32 totalFound = 0; QList foundList; QHash cntValues; QString fieldValue; while (!buff->atEnd()) { for (quint32 i=0; i < fieldsNum; i++) { fieldValue = ByteUtils::ReadToString(*buff,IsUnicodeAnketaField(fieldNames[i])); cntValues.insert(fieldNames[i],fieldValue); } MRIMSearchParams* cnt = ParseForm(cntValues); if (cnt) foundList.append(cnt); totalFound++; cntValues.clear();; } emit SearchFinished(foundList); } MRIMSearchParams* MRIMProto::ParseForm(QHash& aUnparsedForm) { QList keys = aUnparsedForm.keys(); MRIMSearchParams* contact = new MRIMSearchParams; for (int i=0; i < keys.count(); i++) { QString key = keys[i]; QString val = aUnparsedForm.value(keys[i]); bool ok = false; #ifdef DEBUG_LEVEL_DEV qDebug()<EmailAddr = val; } if (key == "Domain") { contact->EmailDomain = val; } if (key == "FirstName") { contact->Name = val; } if (key == "LastName") { contact->Surname = val; } if (key == "Nickname") { contact->Nick = val; } if (key == "Sex") { ok = false; contact->Sex = val.toInt(&ok); if (!ok) { contact->Sex = -1; } } if (key == "Country_id") { ok = false; contact->CountryId = val.toInt(&ok); if (!ok) { contact->CountryId = -1; } } if (key == "City_id") { ok = false; contact->CityId = val.toInt(&ok); if (!ok) { contact->CityId = -1; } } if (key == "BDay") { ok = false; contact->BirthDay = val.toInt(&ok); if (!ok) { contact->BirthDay = -1; } } if (key == "BMonth") { ok = false; contact->BirthdayMonth = val.toInt(&ok); if (!ok) { contact->BirthdayMonth = -1; } } if (key == "Birthday") { ok = false; contact->BirthYear = val.left(4).toInt(&ok); if (!ok) { contact->BirthYear = -1; } } if (key == "Zodiac") { ok = false; contact->ZodiacId = val.toInt(&ok); if (!ok) { contact->ZodiacId = -1; } } if (key == "Location") { contact->LocationText = val; } if (key == "mrim_status") { ok = false; contact->Status = val.toInt(&ok,16); if (!ok) { contact->Status = -1; } } } //not used values contact->MinAge = -1; contact->MaxAge = -1; return contact; } void MRIMProto::RequestCntInfo(QString aEmail) { MRIMSearchParams params; QStringList addr = aEmail.split("@"); params.EmailAddr = addr[0]; params.EmailDomain = addr[1]; m_cntInfoRequested = true; StartSearch(params); } MRIMContact* MRIMProto::GetCnt(QString aEmail) { if (!m_clParser) return NULL; return m_clParser->CntByEmail(aEmail); } void MRIMProto::HandleFileTransferRequest(MRIMPacket* aPacket) { FileTransferRequest* req = new FileTransferRequest; QBuffer* buff = new QBuffer(this); buff->open(QIODevice::ReadWrite); qint64 written = buff->write(*aPacket->Data()); Q_UNUSED(written); buff->seek(0); req->From = ByteUtils::ReadToString(*buff); req->UniqueId = ByteUtils::ReadToUL(*buff); req->SummarySize = ByteUtils::ReadToUL(*buff); ByteUtils::ReadToUL(*buff); //igonre 4 bytes QString files = ByteUtils::ReadToString(*buff); ByteUtils::ReadToString(*buff); //skip NULL string QString IPs = ByteUtils::ReadToString(*buff); QRegExp rx("[;:]"); QStringList fileList = files.split(rx,QString::SkipEmptyParts); QStringListIterator filesIterator(fileList); bool ok = true; while (filesIterator.hasNext()) { QString key = filesIterator.next(); if (!filesIterator.hasNext()) { ok = false; break; } req->FilesDict.insert(key,filesIterator.next().toUInt()); } QStringList ipList = IPs.split(rx,QString::SkipEmptyParts); QStringListIterator IPsIterator(ipList); while (IPsIterator.hasNext()) { QString key = IPsIterator.next(); if (!IPsIterator.hasNext()) { ok = false; break; } req->IPsDict.insert(key,IPsIterator.next().toUInt()); } if (!ok) { emit NotifyUI(tr("File transfer request from %1 couldn't be processed!").arg(req->From)); delete req; return; } m_fileReqsHash.insert(req->UniqueId,req); emit FileTransferRequested(*req); } void MRIMProto::SendSMS(QString aPhoneNumber, QString aText) { MRIMPacket smsPacket; smsPacket.SetMsgType(MRIM_CS_SMS); smsPacket.Append(0); if (!aPhoneNumber.contains('+')) aPhoneNumber.insert(0,'+'); smsPacket.Append(aPhoneNumber); smsPacket.Append(aText,true); smsPacket.Send(m_IMSocket); } void MRIMProto::DeclineFileTransfer(quint32 aUniqueId) { SendFileTransferAck(aUniqueId,0); //somehow decline code is zero %) } void MRIMProto::FileTransferCompleted(quint32 aUniqueId) { if (!m_fileReqsHash.contains(aUniqueId)) return; FileTransferRequest* req = m_fileReqsHash.value(aUniqueId); m_fileReqsHash.remove(aUniqueId); delete req; } void MRIMProto::SendFileTransferAck(quint32 aUniqueId, quint32 aErrorCode, QString aIPsList) { if (!m_fileReqsHash.contains(aUniqueId)) return; FileTransferRequest* req = m_fileReqsHash.value(aUniqueId); MRIMPacket ftAckPacket; ftAckPacket.SetMsgType(MRIM_CS_FILE_TRANSFER_ACK); ftAckPacket.Append(aErrorCode); ftAckPacket.Append(req->From); ftAckPacket.Append(aUniqueId); ftAckPacket.Append(aIPsList); ftAckPacket.Send(m_IMSocket); m_fileReqsHash.remove(aUniqueId); delete req; } void MRIMProto::SendFileTransferRequest(const FileTransferRequest& aReq) { FileTransferRequest* req = new FileTransferRequest; req->To = aReq.To; req->FilesDict = aReq.FilesDict; req->FilesInfo = aReq.FilesInfo; req->IPsDict = aReq.IPsDict; req->UniqueId = aReq.UniqueId; req->SummarySize = aReq.SummarySize; MRIMPacket ftPacket; ftPacket.SetMsgType(MRIM_CS_FILE_TRANSFER); ftPacket.Append(req->To); ftPacket.Append(req->UniqueId); ftPacket.Append(req->SummarySize); QString files, IPs; QHashIterator iter = QHashIterator(req->FilesDict); iter.toFront(); while (iter.hasNext()) { QHash::const_iterator item = iter.next(); files.append(item.key()); files.append(';'); files.append(QString::number(item.value())); files.append(';'); } iter = QHashIterator(req->IPsDict); iter.toFront(); while (iter.hasNext()) { QHash::const_iterator item = iter.next(); IPs.append(item.key()); IPs.append(';'); IPs.append(QString::number(item.value())); IPs.append(';'); } qint32 stringsLen = files.length() + IPs.length() + 4*3; ftPacket.Append(stringsLen); ftPacket.Append(files); ftPacket.Append(""); ftPacket.Append(IPs); ftPacket.Send(m_IMSocket); m_fileReqsHash.insert(req->UniqueId,req); } void MRIMProto::HandleChangeOfStatus() { SendStatusChangePacket(m_currentStatus); } bool MRIMProto::IsOnline() { return m_currentStatus.IsOnline(); } bool MRIMProto::IsOnline( const Status& aStatus ) { return aStatus.IsOnline(); } bool MRIMProto::IsUnicodeAnketaField(const QString& aFieldName) { QString lcName = aFieldName.toLower(); if (lcName == "firstname") return true; if (lcName == "lastname") return true; if (lcName == "nickname") return true; if (lcName == "location") return true; if (lcName == "status_title") return true; if (lcName == "status_desc") return true; return false; } void MRIMProto::HandleNewMail(MRIMPacket* aPacket) { quint32 unreadCount,date,uidl; QString from,subject; aPacket->Read(unreadCount); aPacket->Read(&from); aPacket->Read(&subject); aPacket->Read(date); //ignore aPacket->Read(uidl); //ignore QString newMailMessage = "New e-mail recieved!
From: %1
Subject: %2
"; m_unreadMsgs = unreadCount; emit MailboxStatusChanged(m_unreadMsgs); emit NotifyUI(newMailMessage.arg(from).arg(subject)); } qutim-0.2.0/plugins/mrim/coresrc/useragent.cpp0000644000175000017500000000713311273054313023105 0ustar euroelessareuroelessar#include "useragent.h" #include #include #include #include using namespace qutim_sdk_0_2; UserAgent::UserAgent( const QString &aClientID, const QString &aVersionStr, const QString &aBuildVer, quint8 nProtoMajorVer, quint8 nProtoMinorVer ) : m_clientID(aClientID), m_versionStr(aVersionStr), m_buildVer(aBuildVer), m_protoMajorVer(nProtoMajorVer), m_protoMinorVer(nProtoMinorVer) { } UserAgent::UserAgent() : m_clientID(""), m_versionStr(""), m_buildVer(""), m_protoMajorVer(0), m_protoMinorVer(0) { } UserAgent::~UserAgent() { } UserAgent* UserAgent::Parse( const QString &aUserAgentStr) { if (aUserAgentStr.isEmpty()) return new UserAgent(); QRegExp rx("((\\w+)=\\\"([\\w \\t\\.]+)\\\"*)+"); QString clientID, versionStr, buildVer; quint8 protoVerMinor = 0, protoVerMajor = 0; quint32 offset = 0; QString currParam; while ((offset = rx.indexIn(aUserAgentStr, offset)) != -1) { // qDebug()< *************************************************************************** * * * 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 "MRIMPacket.h" #include "MRIMUtils.h" #include #include #include #include MRIMPacket::MRIMPacket() : m_Header(NULL), m_Body(NULL), m_currBodyPos(0) { InitializeHeader(); } MRIMPacket::~MRIMPacket() { } void MRIMPacket::InitializeHeader() { if (m_Header == NULL) { m_Header = new mrim_packet_header_t(); m_Header->magic = CS_MAGIC; m_Header->from = 0; m_Header->dlen = 0; m_Header->fromport = 0; m_Header->proto = PROTO_VERSION; m_Header->seq = 0; m_Header->msg = 0; m_Header->reserved.fill(0,16); } } void MRIMPacket::SetHeader(QByteArray& aHeader) { #ifdef DEBUG_LEVEL_DEV qDebug("Input array size = %d",aHeader.count()); #endif QDataStream in(aHeader); in.setByteOrder(QDataStream::LittleEndian); InitializeHeader(); in >> m_Header->magic; in >> m_Header->proto; in >> m_Header->seq; in >> m_Header->msg; in >> m_Header->dlen; in >> m_Header->from; in >> m_Header->fromport; in >> m_Header->reserved; } void MRIMPacket::SetHeader(mrim_packet_header_t& aHeader) { m_Header = new mrim_packet_header_t(aHeader); } void MRIMPacket::SetBody(QByteArray& aBody) { if (m_Body != NULL) delete m_Body; m_Body = new QByteArray(aBody); m_Header->dlen=m_Body->length(); } void MRIMPacket::SetBody(QString& aBody) { if (m_Body != NULL) delete m_Body; m_Body = new QByteArray(aBody.toAscii()); m_Header->dlen=m_Body->length(); } void MRIMPacket::SetBody(const char aBody[]) { QString str(aBody); SetBody(str); } void MRIMPacket::SetMsgType(quint32 aMsgType) { m_Header->msg = aMsgType; } void MRIMPacket::SetFrom(quint32 aFrom) { m_Header->from = aFrom; } void MRIMPacket::SetFromPort(quint32 aFromPort) { m_Header->fromport = aFromPort; } void MRIMPacket::SetSequence(quint32 aSeq) { m_Header->seq = aSeq; } QByteArray* MRIMPacket::ConvertToByteArray() { QBuffer* buffer = new QBuffer(this); QDataStream stream(buffer); stream.setByteOrder(QDataStream::LittleEndian); buffer->open(QIODevice::ReadWrite); stream << m_Header->magic; stream << m_Header->proto; stream << m_Header->seq; stream << m_Header->msg; stream << m_Header->dlen; stream << m_Header->from; stream << m_Header->fromport; QByteArray* temp = new QByteArray(buffer->data()); temp->append(m_Header->reserved); temp->append(*m_Body); return temp; } TPacketErrorCodes MRIMPacket::TryMakeFromRawData(QBuffer& aRawPacket, MRIMPacket*& aOutPacket) { MRIMPacket* packet = new MRIMPacket(); QByteArray cont = aRawPacket.read(HEADER_SIZE); packet->SetHeader(cont); quint64 estimBodySize = aRawPacket.size()-aRawPacket.pos(); if ( packet->IsHeaderCorrect() && estimBodySize >= packet->DataLenght() ) { bool isSeekOk = true; if (isSeekOk) { cont = aRawPacket.read(packet->DataLenght()); packet->SetBody(cont); } else { delete packet; packet = NULL; } } else { if (packet->IsHeaderCorrect()) { delete packet; packet = NULL; aRawPacket.seek(aRawPacket.pos()-HEADER_SIZE); return ENotEnoughBytes; } delete packet; packet = NULL; return EHeaderCorrupted; } aOutPacket = packet; return ENoError; } bool MRIMPacket::IsHeaderCorrect() { if (m_Header->magic != CS_MAGIC) { return false; } return true; } void MRIMPacket::Append( const QString &aStr, bool bUnicode ) { LPString str(aStr,bUnicode); Append(str); } void MRIMPacket::Append( LPString &aStr ) { if (!m_Body) { m_Body = new QByteArray(); } m_Body->append(aStr.ToRaw()); m_Header->dlen = m_Body->length(); } void MRIMPacket::Append( const quint32 &aNum ) { if (!m_Body) { m_Body = new QByteArray(); } m_Body->append(ByteUtils::ConvertULToArray(aNum)); m_Header->dlen = m_Body->length(); } qint64 MRIMPacket::Send( QTcpSocket *aSocket ) { qint64 nRes = -1; if (!aSocket) { return nRes; } QByteArray *data = ConvertToByteArray(); nRes = aSocket->write(*data); delete data; return nRes; } MRIMPacket& MRIMPacket::operator<<( LPString &aStr ) { Append(aStr); return *this; } MRIMPacket& MRIMPacket::operator<<( const quint32 &aNum ) { Append(aNum); return *this; } qint32 MRIMPacket::Read( QString *pStr, bool bUnicode ) { if (!pStr) return -1; *pStr = ByteUtils::ReadToString(*Data(),m_currBodyPos,bUnicode); m_currBodyPos += sizeof(quint32); m_currBodyPos += pStr->size() * ((bUnicode)?2:1); return pStr->size(); } qint32 MRIMPacket::Read( quint32 &aNum ) { aNum = ByteUtils::ReadToUL(*Data(),m_currBodyPos); m_currBodyPos += sizeof(aNum); return sizeof(aNum); } qutim-0.2.0/plugins/mrim/coresrc/Status.h0000644000175000017500000000674411273054313022047 0ustar euroelessareuroelessar/***************************************************************************** Status Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 STATUS_H #define STATUS_H #include #include #include #include "proto.h" struct StatusData { StatusData(quint32 aStatus, const QString &aTitle, const QString &aDescription, const QString &aCustomID); StatusData(quint32 aStatus); friend bool operator==(const StatusData& aStatusData, const StatusData& aOtherStatusData); friend bool operator!=(const StatusData& aStatusData, const StatusData& aOtherStatusData); friend bool operator==(const StatusData& aStatusData, quint32 aOtherStatus); friend bool operator!=(const StatusData& aStatusData, quint32 aOtherStatus); quint32 m_status; QString m_customStatusID; QString m_title; QString m_descr; }; class Status : public QObject { Q_OBJECT public: Status(quint32 aStatus = STATUS_UNDETERMINATED, const QString &aTitle = QString(), const QString &aDescription = QString(), const QString &aCustomID = QString()); Status(const StatusData &aStatusData); ~Status(); StatusData GetData() const; inline bool IsOnline() const { return (m_statusData.m_status != STATUS_OFFLINE && m_statusData.m_status != STATUS_UNDETERMINATED); } quint32 GetMass(); static quint32 GetMass(quint32 aNumStatus, const QString &aCustomID = QString()); quint32 Get() const; QString GetTitle() const; QString GetDescription() const; void Set(quint32 nNewStatus, const QString &aCustomID = QString()); void SetTitle(const QString& aTitle); void SetDescription(const QString& aDescription); void SetCustomID(const QString &aCustomID); static quint32 FromString(const QString& aString); QString Stringify() const; static QString Stringify(quint32 nStatus, const QString &aCustomStatusID = QString()); QIcon GetIcon() const; static QIcon GetIcon(quint32 nStatus, const QString &aCustomStatusID = QString()); static QIcon GetIcon(const QString &aStatusName); QString GetIconPath() const; static QString GetIconPath(quint32 nStatus, const QString &aCustomStatusID = QString()); void Clear(); void Clone( const Status &aNewStatus, bool aNotifyChange = false ); Status& operator=(const StatusData &aNewStatusData); Status& operator=(quint32 aNewStatus); friend bool operator==(const Status& aStatus, const Status& aOtherStatus); friend bool operator!=(const Status& aStatus, const Status& aOtherStatus); friend bool operator==(const Status& aStatus, quint32 aOtherStatus); friend bool operator!=(const Status& aStatus, quint32 aOtherStatus); signals: void Changed(); private: StatusData m_statusData; }; #endif qutim-0.2.0/plugins/mrim/coresrc/proto.h0000644000175000017500000003457011273054313021725 0ustar euroelessareuroelessar//*************************************************************************** // $Id: proto.h,v 1.19 2009/08/01 xtazz Exp $ //*************************************************************************** #ifndef MRIM_PROTO_H #define MRIM_PROTO_H //#include #define PROTO_VERSION_MAJOR 1 #define PROTO_VERSION_MINOR 19 //20 #define PROTO_VERSION ((((quint32)(PROTO_VERSION_MAJOR))<<16)|(quint32)(PROTO_VERSION_MINOR)) #define PROTO_MAJOR(p) (((p)&0xFFFF0000)>>16) #define PROTO_MINOR(p) ((p)&0x0000FFFF) typedef struct mrim_packet_header_t { quint32 magic; quint32 proto; quint32 seq; quint32 msg; quint32 dlen; quint32 from; quint32 fromport; QByteArray reserved; } mrim_packet_header_t; #define HEADER_SIZE 44 #define CS_MAGIC 0xDEADBEEF // ���������� Magic ( C <-> S ) // UNICODE = (UTF-16LE) (>=1.17) /*************************************************************************** �������� ����� ������-������ ***************************************************************************/ #define MRIM_CS_HELLO 0x1001 // C -> S // empty #define MRIM_CS_HELLO_ACK 0x1002 // S -> C // mrim_connection_params_t #define MRIM_CS_LOGIN_ACK 0x1004 // S -> C // empty #define MRIM_CS_LOGIN_REJ 0x1005 // S -> C // LPS reason ??? #define MRIM_CS_PING 0x1006 // C -> S // empty #define MRIM_CS_MESSAGE 0x1008 // C -> S // UL flags #define MESSAGE_FLAG_OFFLINE 0x00000001 #define MESSAGE_FLAG_NORECV 0x00000004 #define MESSAGE_FLAG_AUTHORIZE 0x00000008 // X-MRIM-Flags: 00000008 #define MESSAGE_FLAG_SYSTEM 0x00000040 #define MESSAGE_FLAG_RTF 0x00000080 #define MESSAGE_FLAG_CONTACT 0x00000200 #define MESSAGE_FLAG_NOTIFY 0x00000400 #define MESSAGE_FLAG_SMS 0x00000800 #define MESSAGE_FLAG_MULTICAST 0x00001000 #define MESSAGE_SMS_DELIVERY_REPORT 0x00002000 #define MESSAGE_FLAG_ALARM 0x00004000 #define MESSAGE_FLAG_FLASH 0x00008000 #define MESSAGE_FLAG_SPAMF_SPAM 0x00020000 // ����� ����������� �� ���� - ������� ����� � ���� ������ ;������� ������������, �������� � ������ ��������� ��������� ��� �������� ������ �������� #define MESSAGE_FLAG_v1p16 0x00100000 // ��� ������������� ������� #define MESSAGE_FLAG_CP1251 0x00200000 // LPS to e-mail ANSI // LPS message ANSI/UNICODE (see flags) // LPS rtf-formatted message (>=1.1) ??? #define MAX_MULTICAST_RECIPIENTS 50 #define MESSAGE_USERFLAGS_MASK 0x000036A8 // Flags that user is allowed to set himself #define MRIM_CS_MESSAGE_ACK 0x1009 // S -> C // UL msg_id // UL flags // LPS from e-mail ANSI // LPS message UNICODE // LPS //rtf-formatted message (>=1.1) - MESSAGE_FLAG_RTF // //BASE64( - MESSAGE_FLAG_AUTHORIZE // UL parts count = 2 // LPS auth_sender_nick UNICODE // LPS auth_request_text UNICODE // ) #define MRIM_CS_MESSAGE_RECV 0x1011 // C -> S // LPS from e-mail ANSI // UL msg_id #define MRIM_CS_MESSAGE_STATUS 0x1012 // S -> C // UL status #define MESSAGE_DELIVERED 0x0000 // Message delivered directly to user #define MESSAGE_REJECTED_NOUSER 0x8001 // Message rejected - no such user #define MESSAGE_REJECTED_INTERR 0x8003 // Internal server error #define MESSAGE_REJECTED_LIMIT_EXCEEDED 0x8004 // Offline messages limit exceeded #define MESSAGE_REJECTED_TOO_LARGE 0x8005 // Message is too large #define MESSAGE_REJECTED_DENY_OFFMSG 0x8006 // User does not accept offline messages #define MESSAGE_REJECTED_DENY_OFFFLSH 0x8007 // User does not accept offline flash animation #define MRIM_CS_USER_STATUS 0x100F // S -> C // UL status #define STATUS_OFFLINE 0x00000000 #define STATUS_ONLINE 0x00000001 #define STATUS_AWAY 0x00000002 #define STATUS_UNDETERMINATED 0x00000003 #define STATUS_USER_DEFINED 0x00000004 #define STATUS_FLAG_INVISIBLE 0x80000000 // LPS spec_status_uri ANSI (>=1.14) #define SPEC_STATUS_URI_MAX 256 // LPS status_title UNICODE (>=1.14) #define STATUS_TITLE_MAX 16 // LPS status_desc UNICODE (>=1.14) #define STATUS_DESC_MAX 64 // LPS user e-mail ANSI // UL com_support (>=1.14) #define FEATURE_FLAG_RTF_MESSAGE 0x00000001 #define FEATURE_FLAG_BASE_SMILES 0x00000002 #define FEATURE_FLAG_ADVANCED_SMILES 0x00000004 #define FEATURE_FLAG_CONTACTS_EXCH 0x00000008 #define FEATURE_FLAG_WAKEUP 0x00000010 #define FEATURE_FLAG_MULTS 0x00000020 #define FEATURE_FLAG_FILE_TRANSFER 0x00000040 #define FEATURE_FLAG_VOICE 0x00000080 #define FEATURE_FLAG_VIDEO 0x00000100 #define FEATURE_FLAG_GAMES 0x00000200 #define FEATURE_FLAG_LAST 0x00000200 #define FEATURE_UA_FLAG_MASK ((FEATURE_FLAG_LAST << 1) - 1) // LPS user_agent (>=1.14) ANSI #define USER_AGENT_MAX 255 // Format: // user_agent = param *(param ) // param = pname "=" pvalue // pname = token // pvalue = token / quoted-string // // Params: // "client" - magent/jagent/??? // "name" - sys-name. // "title" - display-name. // "version" - product internal numeration. Examples: "1.2", "1.3 pre". // "build" - product internal numeration (may be positive number or time). // "protocol" - MMP protocol number by format ".". #define MY_MRIM_PROTO_FEATURES (FEATURE_FLAG_RTF_MESSAGE | FEATURE_FLAG_BASE_SMILES | FEATURE_FLAG_ADVANCED_SMILES | FEATURE_FLAG_WAKEUP | FEATURE_FLAG_FILE_TRANSFER) #define MRIM_CS_LOGOUT 0x1013 // S -> C // UL reason #define LOGOUT_NO_RELOGIN_FLAG 0x0010 // Logout due to double login #define MRIM_CS_CONNECTION_PARAMS 0x1014 // S -> C // mrim_connection_params_t #define MRIM_CS_USER_INFO 0x1015 // S -> C // (LPS key, LPS value)* X ??? // MESSAGES.TOTAL - num UNICODE // MESSAGES.UNREAD - num UNICODE // MRIM.NICKNAME - nick UNICODE // client.endpoint - ip:port UNICODE #define MRIM_CS_ADD_CONTACT 0x1019 // C -> S // UL flags (group(2) or usual(0) #define CONTACT_FLAG_REMOVED 0x00000001 #define CONTACT_FLAG_GROUP 0x00000002 #define CONTACT_FLAG_INVISIBLE 0x00000004 #define CONTACT_FLAG_VISIBLE 0x00000008 #define CONTACT_FLAG_IGNORE 0x00000010 #define CONTACT_FLAG_SHADOW 0x00000020 #define CONTACT_FLAG_AUTHORIZED 0x00000040 // ( >= 1.15) #define CONTACT_FLAG_PHONE 0x00100000 #define CONTACT_FLAG_UNICODE_NAME 0x00000200 // UL group id (unused if contact is group) // LPS contact e-mail ANSI // LPS name UNICODE // LPS custom phones ANSI // LPS BASE64( // UL parts count = 2 // LPS auth_sender_nick ??? // LPS auth_request_text ??? // ) // UL actions ( >= 1.15) #define ADD_CONTACT_ACTION_FLAG_MYMAIL_INVITE 0x00000001 //used internal in win32 agent #define CONTACT_AWAITING_AUTHORIZATION_USER 0x00000100 #define CONTACT_FLAG_TEMPORARY 0x00010000 #define MRIM_CS_ADD_CONTACT_ACK 0x101A // S -> C // UL status #define CONTACT_OPER_SUCCESS 0x0000 #define CONTACT_OPER_ERROR 0x0001 #define CONTACT_OPER_INTERR 0x0002 #define CONTACT_OPER_NO_SUCH_USER 0x0003 #define CONTACT_OPER_INVALID_INFO 0x0004 #define CONTACT_OPER_USER_EXISTS 0x0005 #define CONTACT_OPER_GROUP_LIMIT 0x6 // UL contact_id or (u_long)-1 if status is not OK #define MRIM_CS_MODIFY_CONTACT 0x101B // C -> S // UL id // UL flags - same as for MRIM_CS_ADD_CONTACT // UL group id (unused if contact is group) // LPS contact e-mail ANSI // LPS name UNICODE // LPS custom phones ANSI #define MRIM_CS_MODIFY_CONTACT_ACK 0x101C // S -> C // UL status, same as for MRIM_CS_ADD_CONTACT_ACK #define MRIM_CS_OFFLINE_MESSAGE_ACK 0x101D // S -> C // UIDL // LPS offline message ??? #define MRIM_CS_DELETE_OFFLINE_MESSAGE 0x101E // C -> S // UIDL #define MRIM_CS_AUTHORIZE 0x1020 // C -> S // LPS user e-mail ANSI #define MRIM_CS_AUTHORIZE_ACK 0x1021 // S -> C // LPS user e-mail ANSI #define MRIM_CS_CHANGE_STATUS 0x1022 // C -> S // UL new status // LPS spec_status_uri ANSI (>=1.14) // LPS status_title UNICODE (>=1.14) // LPS status_desc UNICODE (>=1.14) // UL com_support (>=1.14) (see MRIM_CS_USER_STATUS) #define MRIM_CS_GET_MPOP_SESSION 0x1024 // C -> S #define MRIM_CS_MPOP_SESSION 0x1025 // S -> C // UL status #define MRIM_GET_SESSION_FAIL 0 #define MRIM_GET_SESSION_SUCCESS 1 // LPS mpop session ??? #define MRIM_CS_FILE_TRANSFER 0x1026 // C->S // LPS TO/FROM e-mail ANSI // DWORD id_request - uniq per connect // DWORD FILESIZE // LPS: // LPS Files (FileName;FileSize;FileName;FileSize;) ANSI // LPS DESCRIPTION: // UL ? // Files (FileName;FileSize;FileName;FileSize;) UNICODE // LPS Conn (IP:Port;IP:Port;) ANSI #define MRIM_CS_FILE_TRANSFER_ACK 0x1027 // S->C // DWORD status #define FILE_TRANSFER_STATUS_OK 1 #define FILE_TRANSFER_STATUS_DECLINE 0 #define FILE_TRANSFER_STATUS_ERROR 2 #define FILE_TRANSFER_STATUS_INCOMPATIBLE_VERS 3 #define FILE_TRANSFER_MIRROR 4 // LPS TO/FROM e-mail ANSI // DWORD id_request // LPS DESCRIPTION [Conn (IP:Port;IP:Port;) ANSI] //white pages! #define MRIM_CS_WP_REQUEST 0x1029 //C->S // DWORD field // LPS value ??? #define PARAMS_NUMBER_LIMIT 50 #define PARAM_VALUE_LENGTH_LIMIT 64 //if last symbol in value eq '*' it will be replaced by LIKE '%' // params define // must be in consecutive order (0..N) to quick check in check_anketa_info_request enum { MRIM_CS_WP_REQUEST_PARAM_USER = 0,// ANSI MRIM_CS_WP_REQUEST_PARAM_DOMAIN, // ANSI MRIM_CS_WP_REQUEST_PARAM_NICKNAME, // UNICODE MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME, // UNICODE MRIM_CS_WP_REQUEST_PARAM_LASTNAME, // UNICODE MRIM_CS_WP_REQUEST_PARAM_SEX , // ANSI MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY, // not used for search MRIM_CS_WP_REQUEST_PARAM_DATE1 , // ANSI MRIM_CS_WP_REQUEST_PARAM_DATE2 , // ANSI //!!!!!!!!!!!!!!!!!!!online request param must be at end of request!!!!!!!!!!!!!!! MRIM_CS_WP_REQUEST_PARAM_ONLINE , // ANSI MRIM_CS_WP_REQUEST_PARAM_STATUS , // we do not used it, yet MRIM_CS_WP_REQUEST_PARAM_CITY_ID, // ANSI MRIM_CS_WP_REQUEST_PARAM_ZODIAC, // ANSI MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH,// ANSI MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY, // ANSI MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID, // ANSI MRIM_CS_WP_REQUEST_PARAM_MAX }; #define MRIM_CS_ANKETA_INFO 0x1028 //S->C // DWORD status #define MRIM_ANKETA_INFO_STATUS_OK 1 #define MRIM_ANKETA_INFO_STATUS_NOUSER 0 #define MRIM_ANKETA_INFO_STATUS_DBERR 2 #define MRIM_ANKETA_INFO_STATUS_RATELIMERR 3 // DWORD fields_num // DWORD max_rows // DWORD server_time sec since 1970 (unixtime) // fields set //%fields_num == 0 // values set //%fields_num == 0 // LPS value (numbers too) ??? #define MRIM_CS_MAILBOX_STATUS 0x1033 // DWORD new messages in mailbox #define MRIM_CS_GAME 0x1035 // LPS to/from e-mail ANSI // DWORD session unique per game // DWORD msg internal game message enum { GAME_BASE, GAME_CONNECTION_INVITE, GAME_CONNECTION_ACCEPT, GAME_DECLINE, GAME_INC_VERSION, GAME_NO_SUCH_GAME, GAME_JOIN, GAME_CLOSE, GAME_SPEED, GAME_SYNCHRONIZATION, GAME_USER_NOT_FOUND, GAME_ACCEPT_ACK, GAME_PING, GAME_RESULT, GAME_MESSAGES_NUMBER }; // DWORD msg_id id for ack // DWORD time_send time of client // LPS data ??? #define MRIM_CS_CONTACT_LIST2 0x1037 //S->C // UL status #define GET_CONTACTS_OK 0x0000 #define GET_CONTACTS_ERROR 0x0001 #define GET_CONTACTS_INTERR 0x0002 // DWORD status - if ...OK than this staff: // DWORD groups number // mask symbols table: // 's' - lps // 'u' - unsigned long // 'z' - zero terminated string // LPS groups fields mask ANSI // LPS contacts fields mask ANSI // group fields // contacts fields // groups mask 'us' == flags, name UNICODE // contact mask 'uussuussssus' flags, group id, e-mail ANSI, nick UNICODE, server flags, status, custom phone numbers ANSI, spec_status_uri ANSI, status_title UNICODE, status_desc UNICODE, com_support (future flags), user_agent (formated string) ANSI // uussuussssusuuus #define CONTACT_INTFLAG_NOT_AUTHORIZED 0x0001 //old packet cs_login with cs_statistic #define MRIM_CS_LOGIN2 0x1038 // C -> S // LPS login e-mail ANSI // LPS password ANSI // DWORD status // LPS spec_status_uri ANSI (>=1.14) // LPS status_title UNICODE (>=1.14) // LPS status_desc UNICODE (>=1.14) // UL com_support (>=1.14) (see MRIM_CS_USER_STATUS) // LPS user_agent ANSI (>=1.14) (see MRIM_CS_USER_STATUS) // + statistic packet data: // LPS client description ANSI #define MAX_CLIENT_DESCRIPTION 1024 #define MRIM_CS_SMS 0x1039 // C -> S // UL flags // LPS to Phone ??? // LPS message ??? #define MRIM_CS_SMS_ACK 0x1040 // S->C // UL status #define MRIM_CS_PROXY 0x1044 // LPS to e-mail ANSI // DWORD id_request // DWORD data_type #define MRIM_PROXY_TYPE_VOICE 1 #define MRIM_PROXY_TYPE_FILES 2 #define MRIM_PROXY_TYPE_CALLOUT 3 // LPS user_data ??? // LPS lps_ip_port ??? // DWORD session_id[4] #define MRIM_CS_PROXY_ACK 0x1045 //DWORD status #define PROXY_STATUS_OK 1 #define PROXY_STATUS_DECLINE 0 #define PROXY_STATUS_ERROR 2 #define PROXY_STATUS_INCOMPATIBLE_VERS 3 #define PROXY_STATUS_NOHARDWARE 4 #define PROXY_STATUS_MIRROR 5 #define PROXY_STATUS_CLOSED 6 // LPS to e-mail ANSI // DWORD id_request // DWORD data_type // LPS user_data ??? // LPS: lps_ip_port ??? // DWORD[4] Session_id #define MRIM_CS_PROXY_HELLO 0x1046 // DWORD[4] Session_id #define MRIM_CS_PROXY_HELLO_ACK 0x1047 #define MRIM_CS_NEW_MAIL 0x1048 // S->C // UL unread count // LPS from e-mail ANSI // LPS subject ??? // UL date // UL uidl typedef struct mrim_connection_params_t { quint32 ping_period; } mrim_connection_params_t; #endif // MRIM_PROTO_H qutim-0.2.0/plugins/mrim/coresrc/statusmanager.cpp0000644000175000017500000001033011273054313023757 0ustar euroelessareuroelessar#include "statusmanager.h" #include #include "MRIMPluginSystem.h" StatusManager::StatusManager() { } StatusManager::~StatusManager() { } QString StatusManager::GetTooltip( const QString& nStatusName ) { QStringList splitted(nStatusName.split('_')); if (splitted.count() < 2) return "?"; QString lowerId = splitted[1].toLower(); if (lowerId == "offline") return tr("Offline"); else if (lowerId == "dnd") return tr("Do Not Disturb"); else if (lowerId == "chat") return tr("Free For Chat"); else if (lowerId == "online") lowerId = "1"; else if (lowerId == "away") lowerId = "2"; else if (lowerId == "invisible") lowerId = "3"; return GetTooltip(lowerId.toUInt()); } QString StatusManager::GetTooltip(quint32 nStatusID ) { switch (nStatusID) { case 1: return tr("Online"); case 2: return tr("Away"); case 3: return tr("Invisible"); case 4: return tr("Sick"); case 5: return tr("At home"); case 6: return tr("Lunch"); case 7: return tr("Where am I?"); case 8: return tr("WC"); case 9: return tr("Cooking"); case 10: return tr("Walking"); case 11: return tr("I'm an alien!"); case 12: return tr("I'm a shrimp!"); case 13: return tr("I'm lost :("); case 14: return tr("Crazy %)"); case 15: return tr("Duck"); case 16: return tr("Playing"); case 17: return tr("Smoke"); case 18: return tr("At work"); case 19: return tr("On the meeting"); case 20: return tr("Beer"); case 21: return tr("Coffee"); case 22: return tr("Shovel"); case 23: return tr("Sleeping"); case 24: return tr("On the phone"); case 26: return tr("In the university"); case 27: return tr("School"); case 28: return tr("You have the wrong number!"); case 29: return tr("LOL"); case 30: return tr("Tongue"); case 32: return tr("Smiley"); case 33: return tr("Hippy"); case 34: return tr("Depression"); case 35: return tr("Crying"); case 36: return tr("Surprised"); case 37: return tr("Angry"); case 38: return tr("Evil"); case 39: return tr("Ass"); case 40: return tr("Heart"); case 41: return tr("Crescent"); case 42: return tr("Coool!"); case 43: return tr("Horns"); case 44: return tr("Figa"); case 45: return tr("F*ck you!"); case 46: return tr("Skull"); case 47: return tr("Rocket"); case 48: return tr("Ktulhu"); case 49: return tr("Goat"); case 50: return tr("Must die!!"); case 51: return tr("Squirrel"); case 52: return tr("Party!"); case 53: return tr("Music"); default: return tr("?"); } } StatusManager& StatusManager::Instance() { static StatusManager myInstance; return myInstance; } Status *StatusManager::GetStatus(const QString& aAccount, quint32 nStatus) { return GetCustomStatus(aAccount,Status::Stringify(nStatus)); } Status *StatusManager::GetCustomStatus(const QString& aAccount, const QString& nStatusName) { QSettings acc_settings(QSettings::defaultFormat(), QSettings::UserScope, "qutim/qutim."+PluginSystemImpl()->Profile()+"/mrim."+aAccount, "savedstatuses"); QString lowererStatusId = nStatusName.toLower(); Status *savedStatus = new Status(); acc_settings.beginGroup(lowererStatusId); savedStatus->Set(acc_settings.value("status",Status::FromString(lowererStatusId)).toInt(),acc_settings.value("statusName",lowererStatusId).toString()); savedStatus->SetTitle(acc_settings.value("statusTitle",GetTooltip(lowererStatusId)).toString()); savedStatus->SetDescription(acc_settings.value("statusDescr").toString()); acc_settings.endGroup(); return savedStatus; } qutim-0.2.0/plugins/mrim/coresrc/MRIMPacket.h0000644000175000017500000000473211273054313022453 0ustar euroelessareuroelessar/***************************************************************************** MRIMPacket Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMPACKET_H_ #define MRIMPACKET_H_ #include #include #include #include "proto.h" class QBuffer; class LPString; class QTcpSocket; enum TPacketErrorCodes { ENoError = 0, ENotEnoughBytes, EHeaderCorrupted, EUnknownError }; class MRIMPacket : QObject { Q_OBJECT public: MRIMPacket(); virtual ~MRIMPacket(); static TPacketErrorCodes TryMakeFromRawData(QBuffer& aRawPacket, MRIMPacket*& aOutPacket); void SetHeader(QByteArray& aHeader); void SetHeader(mrim_packet_header_t& aHeader); void SetBody(QByteArray& aBody); void SetBody(QString& aBody); void SetBody(const char aBody[]); void SetSequence(quint32 aSeq); void SetMsgType(quint32 aMsgType); void SetFrom(quint32 aFrom); void SetFromPort(quint32 aFromPort); void Append(const QString &aStr, bool bUnicode = false); void Append(LPString &aStr); void Append(const quint32 &aNum); qint32 Read(QString *pStr,bool bUnicode = false); qint32 Read(quint32 &aNum); MRIMPacket& operator<<(LPString &aStr); MRIMPacket& operator<<(const quint32 &aNum); bool IsHeaderCorrect(); inline quint32 DataLenght() { return m_Header->dlen; } inline quint32 MsgType() { return m_Header->msg; } inline quint32 Sequence() { return m_Header->seq; } inline QByteArray* Data() { return m_Body; } void InitializeHeader(); QByteArray* ConvertToByteArray(); qint64 Send(QTcpSocket *aSocket); private: mrim_packet_header_t* m_Header; mrim_connection_params_t* m_ConnectionParams; QByteArray* m_Body; quint32 m_currBodyPos; }; #endif /*MRIMPACKET_H_*/ qutim-0.2.0/plugins/mrim/coresrc/mrimclitem.h0000644000175000017500000000334511273054313022720 0ustar euroelessareuroelessar/***************************************************************************** MRIMCLItem Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMCLITEM_H #define MRIMCLITEM_H #include #include "mrimdefs.h" #include using namespace qutim_sdk_0_2; class MRIMContactList; class MRIMCLItem : public QObject { Q_OBJECT friend class MRIMContactList; public: MRIMCLItem(QString aAccount, quint32 aFlag, QString aName); ~MRIMCLItem(); inline const QString& Name() const { return m_Name; } inline CLItemType Type() const { return m_Type; } inline bool IsNew() const { return m_isNew; } inline QString Account() { return m_account; } virtual TreeModelItem GetTreeModel() = 0; inline bool IsInUi() { return m_isInUi; } protected: CLItemType m_Type; quint32 m_Flags; QString m_Name; QString m_account; bool m_isNew; bool m_isInUi; inline void SetIsInUi(bool aIsInUi) { m_isInUi = aIsInUi; } virtual void SyncWithUi() = 0; }; #endif // MRIMCLITEM_H qutim-0.2.0/plugins/mrim/coresrc/RegionListParser.cpp0000644000175000017500000000372211273054313024344 0ustar euroelessareuroelessar/***************************************************************************** RegionListParser Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "RegionListParser.h" RegionListParser::RegionListParser(QString aRelPath) {//usually will be - Resources/region.txt QFile regionsFile(aRelPath); QString codepage = "UTF8"; QTextCodec* codec = QTextCodec::codecForName(codepage.toLocal8Bit()); m_regionsList = new QList; if (codec == NULL) return; if (!regionsFile.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream fileStream(®ionsFile); fileStream.setCodec(codec); while (!fileStream.atEnd()) { QString line = fileStream.readLine(); AddRegion(line); } } RegionListParser::~RegionListParser(void) { if (m_regionsList) { delete m_regionsList; } } void RegionListParser::AddRegion(QString aStr) { QStringList strList = aStr.split(';'); LiveRegion reg; if (strList.count() > 0) { reg.id = strList[0].toUInt(); } if (strList.count() > 1) { reg.cityId = strList[1].toUInt(); } if (strList.count() > 2) { reg.countryId = strList[2].toUInt(); } if (strList.count() > 3) { reg.name = strList[3]; } m_regionsList->append(reg); } qutim-0.2.0/plugins/mrim/coresrc/mrimdefs.h0000644000175000017500000000421711273054313022363 0ustar euroelessareuroelessar/***************************************************************************** MRIM protocol definitions Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMDEFS_H #define MRIMDEFS_H #include #include #define MAX_INT32 4294836225 struct MRIMUserInfo { QString messagesTotal; QString messagesUnread; QString userNickname; bool userHasMyMail; QString userClientEndpoint; }; enum LogoutReason { EAnotherClientConnected, EAuthenticationFailed, EUnknownReason }; enum CLOperationError { ECLUnknownError, ECLNoSuchUser, ECLInternalServerError, ECLInvalidInfo, ECLUserAlreadyExists, ECLGroupLimitReached }; struct ContactAdditionalInfo { QString Nick; QString AvatarPath; QString ClientName; QString OtherInfo; }; struct MRIMSearchParams { QString EmailAddr; QString EmailDomain; QString Nick; QString Name; QString Surname; qint32 Sex; qint32 MinAge; qint32 MaxAge; qint32 CityId; qint32 CountryId; qint32 ZodiacId; qint32 BirthDay; qint32 BirthdayMonth; bool OnlineOnly; //not for search qint32 Status; QString LocationText; qint32 BirthYear; }; enum CLItemType { EAccount = 2, EGroup = 1, EContact = 0 }; struct FileTransferRequest { QString From; QString To; quint32 UniqueId; quint32 SummarySize; QHash FilesDict; QHash IPsDict; QList FilesInfo; }; #define MRIM_MSGQUEUE_MAX_LEN 10 #endif //MRIMDEFS_H qutim-0.2.0/plugins/mrim/coresrc/avatarfetcher.h0000644000175000017500000000207611273054313023375 0ustar euroelessareuroelessar#ifndef AVATARFETCHER_H #define AVATARFETCHER_H #include #include #include #include #include class AvatarFetcher : public QObject { Q_OBJECT public: static AvatarFetcher* Instance() { if (!m_instance) { m_instance = new AvatarFetcher; } return m_instance; } AvatarFetcher(); ~AvatarFetcher(); void FetchSmallAvatar(const QString& aEmail); void FetchBigAvatar(const QString& aEmail); static QString SmallAvatarPath(const QString& aEmail); static QString BigAvatarPath(const QString& aEmail); signals: void SmallAvatarFetched(QString aEmail); void BigAvatarFetched(QString aEmail); protected slots: void HandleAvatarRequestHeader(const QHttpResponseHeader& resp); void HandleAvatarFetched(int aReqId, bool aError); protected: static AvatarFetcher* m_instance; QHttp* m_headerHttp; QHttp* m_avaHttp; QHash m_smallAvatarReqIds; QHash m_bigAvatarReqIds; }; #endif // AVATARFETCHER_H qutim-0.2.0/plugins/mrim/coresrc/useragent.h0000644000175000017500000000150511273054313022547 0ustar euroelessareuroelessar#ifndef USERAGENT_H #define USERAGENT_H #include #include class QIcon; class UserAgent : public QObject { Q_OBJECT public: UserAgent(); UserAgent( const QString &aClientID, const QString &aVersionStr, const QString &aBuildVer, quint8 nProtoMajorVer, quint8 nProtoMinorVer ); ~UserAgent(); static UserAgent* Parse(const QString &aUserAgentStr); QString Stringify() const; QString HumanReadable() const; bool IsEmpty() const; QIcon GetIcon() const; void Set(const UserAgent& aNewAgent); signals: void Changed(); private: //Client ID QString m_clientID; //Client version QString m_versionStr; QString m_buildVer; //Protocol version quint8 m_protoMajorVer; quint8 m_protoMinorVer; }; #endif // USERAGENT_H qutim-0.2.0/plugins/mrim/coresrc/MRIMUtils.cpp0000644000175000017500000001422311273054313022673 0ustar euroelessareuroelessar/***************************************************************************** MRIMUtils Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 "MRIMUtils.h" #include #include #include #include #include "rtf/rtfimport.h" #include #include LPString::LPString(QString aStr, bool bUnicode) : m_RawData(NULL), m_bUnicode(bUnicode) { m_String = new QString(aStr); } LPString::LPString(QByteArray& aStr, bool bUnicode) : m_RawData(NULL), m_String(NULL), m_bUnicode(bUnicode) { ReadFromByteArray(aStr); } LPString::LPString(const char* aStr, bool bUnicode) : m_RawData(NULL), m_String(NULL), m_bUnicode(bUnicode) { QByteArray arr(aStr); ReadFromByteArray(arr); } void LPString::ReadFromByteArray(QByteArray& aArr) { QString codepage = (m_bUnicode) ? "UTF-16LE" : "CP1251"; QTextCodec* codec = QTextCodec::codecForName(codepage.toLocal8Bit()); if (codec != NULL) { delete m_String; QTextCodec::ConverterState convState(QTextCodec::IgnoreHeader); m_String = new QString(codec->toUnicode(aArr.constData(),aArr.length(),&convState)); } } QByteArray& LPString::ToRaw() { if (!m_RawData) { m_RawData = new QByteArray; } QString codepage = (m_bUnicode) ? "UTF-16LE" : "CP1251"; QTextCodec* codec = QTextCodec::codecForName(codepage.toLocal8Bit()); if (codec != NULL) { QByteArray d; QTextCodec::ConverterState convState(QTextCodec::IgnoreHeader); if (m_String->size() > 0) { d.append(codec->fromUnicode(m_String->data(),m_String->size(),&convState)); } m_RawData->append(ByteUtils::ConvertULToArray(d.length())); m_RawData->append(d); } return *m_RawData; } QString& LPString::String() { return *m_String; } LPString::~LPString() { delete m_RawData; delete m_String; } QByteArray ByteUtils::ConvertULToArray(const quint32 UL) { QByteArray packet; packet[3] = (UL / 0x1000000); packet[2] = (UL / 0x10000); packet[1] = (UL / 0x100); packet[0] = (UL % 0x100); return packet; } quint32 ByteUtils::ConvertArrayToUL(const QByteArray& arr) { bool ok; quint32 res = arr.toHex().toULong(&ok,16); res = qToBigEndian(res); return res; } quint32 ByteUtils::ReadToUL(QBuffer& aBuff) { return ConvertArrayToUL(aBuff.read(4)); } quint32 ByteUtils::ReadToUL(QByteArray& aArr, quint32 aPosInArray) { return ConvertArrayToUL(aArr.mid(aPosInArray,4)); } LPString* ByteUtils::ReadToLPS(QBuffer& aBuff, bool bUnicode) { quint32 len = ReadToUL(aBuff); QByteArray str; str.append(aBuff.read(len)); LPString* lps = new LPString(str,bUnicode); return lps; } LPString* ByteUtils::ReadToLPS(QByteArray& aArr, quint32 aPosInArray, bool bUnicode) { quint32 len = ReadToUL(aArr,aPosInArray); QByteArray str; str.append(aArr.mid(aPosInArray+sizeof(len),len)); LPString* lps = new LPString(str,bUnicode); return lps; } QString ByteUtils::ReadToString(QBuffer& aBuff, bool bUnicode) { LPString* lps = ReadToLPS(aBuff,bUnicode); QString res(lps->String()); delete lps; return res; } QString ByteUtils::ReadToString( QByteArray& aArr, quint32 aPosInArray, bool bUnicode /*= false*/ ) { LPString* lps = ReadToLPS(aArr,aPosInArray,bUnicode); QString res(lps->String()); delete lps; return res; } //MRIMCommonUtils QString MRIMCommonUtils::ConvertToPlainText(QString aRtfMsg) { QByteArray unbased = QByteArray::fromBase64(aRtfMsg.toAscii()); QByteArray arr; quint32 beLen = qToBigEndian(unbased.length()*10); arr.append(ByteUtils::ConvertULToArray(beLen)); arr.append(unbased); QByteArray uncompressed = qUncompress(arr); #ifdef DEBUG_LEVEL_DEV qDebug()<<"Unpacked length: "< 1) { QString rtfMsg = ByteUtils::ReadToString(buf,false); #ifdef DEBUG_LEVEL_DEV qDebug()<<"Unbased and unzipped rtf message: "< #include #include #include "Status.h" class StatusManager : public QObject { Q_OBJECT public: static StatusManager& Instance(); void ReadStatuses(const QString& aFileName); Status* GetStatus(const QString& aAccount, quint32 nStatus); Status* GetCustomStatus(const QString& aAccount, const QString& nStatusName); QString GetTooltip(quint32 nStatusID); QString GetTooltip(const QString& nStatusName); protected: StatusManager(); ~StatusManager(); private: }; inline StatusManager& StatusMan() { return StatusManager::Instance(); } #endif // STATUSMANAGER_H qutim-0.2.0/plugins/mrim/coresrc/MRIMUtils.h0000644000175000017500000000451411273054313022342 0ustar euroelessareuroelessar/***************************************************************************** MRIMUtils Copyright (c) 2009 by Rusanov Peter *************************************************************************** * * * 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 MRIMUTILS_H_ #define MRIMUTILS_H_ #include #include #include #include #include #include "proto.h" #include "mrimdefs.h" #include "MRIMContactList.h" #include "MRIMPluginSystem.h" class LPString { public: LPString(QString aStr, bool bUnicode = false); LPString(QByteArray& aStr, bool bUnicode = false); LPString(const char* aStr, bool bUnicode = false); virtual ~LPString(); void ReadFromByteArray(QByteArray& aArr); static LPString* ReadFromRaw(QBuffer& aBuffer); QByteArray& ToRaw(); QString& String(); private: QString* m_String; QByteArray* m_RawData; bool m_bUnicode; }; class ByteUtils { public: static QByteArray ConvertULToArray(const quint32 UL); static quint32 ConvertArrayToUL(const QByteArray& arr); static quint32 ReadToUL(QBuffer& aBuff); static quint32 ReadToUL(QByteArray& aArr, quint32 aPosInArray = 0); static LPString* ReadToLPS(QBuffer& aBuff, bool bUnicode = false); static LPString* ReadToLPS(QByteArray& aArr, quint32 aPosInArray = 0, bool bUnicode = false); static QString ReadToString(QBuffer& aBuff, bool bUnicode = false); static QString ReadToString(QByteArray& aArr, quint32 aPosInArray = 0, bool bUnicode = false); }; class MRIMCommonUtils : public QObject { Q_OBJECT public: static QString ConvertToPlainText(QString aRtfMsg); static QPoint DesktopCenter(QSize aWidgetSize); static QString GetFileSize(quint64 aSize); }; #endif /*MRIMUTILS_H_*/ qutim-0.2.0/plugins/mrim/coresrc/Status.cpp0000644000175000017500000001462011273054313022372 0ustar euroelessareuroelessar#include "Status.h" #include using namespace qutim_sdk_0_2; //StatusData class implementation StatusData::StatusData(quint32 aStatus, const QString &aTitle, const QString &aDescription, const QString &aCustomID) : m_status(aStatus), m_title(aTitle), m_descr(aDescription) { m_customStatusID = aCustomID; m_customStatusID.remove("status_"); } StatusData::StatusData( quint32 aStatus ) : m_status(aStatus) { } bool operator==( const StatusData& aStatusData, const StatusData& aOtherStatusData ) { bool numOk = (aStatusData == aOtherStatusData.m_status); bool titleOk = (aStatusData.m_title == aOtherStatusData.m_title); bool descrOk = (aStatusData.m_descr == aOtherStatusData.m_descr); bool customIDOk = (aStatusData.m_customStatusID == aOtherStatusData.m_customStatusID); return (numOk && titleOk && descrOk && customIDOk); } bool operator!=( const StatusData& aStatusData, const StatusData& aOtherStatusData ) { return !operator==(aStatusData,aOtherStatusData); } bool operator==( const StatusData& aStatusData, quint32 aOtherStatus ) { return (aStatusData.m_status == aOtherStatus); } bool operator!=( const StatusData& aStatusData, quint32 aOtherStatus ) { return (aStatusData.m_status != aOtherStatus); } //Status class implementation Status::Status(quint32 aStatus, const QString &aTitle, const QString &aDescription, const QString &aCustomID) : m_statusData(aStatus, aTitle, aDescription, aCustomID) { } Status::Status( const StatusData &aStatusData ) : m_statusData(aStatusData) { } Status::~Status() { } QIcon Status::GetIcon() const { return GetIcon(m_statusData.m_status, m_statusData.m_customStatusID); } QIcon Status::GetIcon( quint32 nStatus, const QString &aCustomStatusID ) { return GetIcon(Stringify(nStatus,aCustomStatusID)); } QIcon Status::GetIcon( const QString &aStatusName ) { return Icon(aStatusName,IconInfo::Status,"mrim"); } QString Status::GetIconPath() const { return GetIconPath(m_statusData.m_status, m_statusData.m_customStatusID); } QString Status::GetIconPath(quint32 nStatus, const QString &aCustomStatusID) { return SystemsCity::IconManager()->getIconPath(Stringify(nStatus,aCustomStatusID),IconInfo::Status,"mrim"); } QString Status::Stringify() const { return Stringify(m_statusData.m_status,m_statusData.m_customStatusID); } QString Status::Stringify( quint32 nStatus, const QString &aCustomStatusID) { quint32 nStrippedStatus = nStatus; //TODO: to cut the invisible flag QString cuttedCustomId = aCustomStatusID.toLower(); cuttedCustomId.remove("status_"); switch (nStrippedStatus) { case STATUS_ONLINE: return "STATUS_ONLINE"; case STATUS_AWAY: return "STATUS_AWAY"; case STATUS_OFFLINE: return "STATUS_OFFLINE"; case STATUS_FLAG_INVISIBLE: return "STATUS_INVISIBLE"; case STATUS_USER_DEFINED: return ("status_" + cuttedCustomId); default: return "STATUS_UNDETERMINATED"; } return QString(); } quint32 Status::FromString(const QString& aString) { QString lowerStatus = aString.toLower(); if (aString == "status_online") return STATUS_ONLINE; else if (aString == "status_away") return STATUS_AWAY; else if (aString == "status_invisible") return STATUS_FLAG_INVISIBLE; else if (aString == "status_offline") return STATUS_OFFLINE; else return STATUS_USER_DEFINED; return STATUS_UNDETERMINATED; } StatusData Status::GetData() const { return m_statusData; } quint32 Status::Get() const { return m_statusData.m_status; } void Status::Set( quint32 nNewStatus, const QString &aCustomID ) { m_statusData.m_status = nNewStatus; if (nNewStatus == STATUS_USER_DEFINED) { m_statusData.m_customStatusID = aCustomID; } emit Changed(); } QString Status::GetTitle() const { return m_statusData.m_title; } void Status::SetTitle( const QString& aTitle ) { m_statusData.m_title = aTitle; emit Changed(); } QString Status::GetDescription() const { return m_statusData.m_descr; } void Status::SetDescription( const QString& aDescription ) { m_statusData.m_descr = aDescription; emit Changed(); } Status& Status::operator=( quint32 aNewStatus ) { Set(aNewStatus); return *this; } Status& Status::operator=( const StatusData &aNewStatusData ) { m_statusData = aNewStatusData; return *this; } void Status::Clone( const Status &aNewStatus, bool aNotifyChange ) { m_statusData = aNewStatus.m_statusData; if (aNotifyChange) { emit Changed(); } } void Status::Clear() { m_statusData = StatusData(STATUS_UNDETERMINATED,"","",""); } void Status::SetCustomID( const QString &aCustomID ) { m_statusData.m_customStatusID = aCustomID; m_statusData.m_customStatusID.remove("status_"); } quint32 Status::GetMass( quint32 aNumStatus, const QString &aCustomID ) { int mass; switch (aNumStatus) { case STATUS_ONLINE: mass = 0; break; case STATUS_AWAY: mass = 2; break; case STATUS_FLAG_INVISIBLE: mass = 11; break; case STATUS_USER_DEFINED: { mass = 20; bool ok; quint32 custId = aCustomID.toUInt(&ok); if (ok) { mass = 30; mass += custId; } else if (aCustomID == "chat") { mass += 5; } } break; default: mass = 1000; break; } return mass; } quint32 Status::GetMass() { return GetMass(m_statusData.m_status,m_statusData.m_customStatusID); } bool operator==( const Status& aStatus, quint32 aOtherStatus ) { return (aStatus.m_statusData == aOtherStatus); } bool operator!=( const Status& aStatus, quint32 aOtherStatus ) { return (aStatus.m_statusData != aOtherStatus); } bool operator==( const Status& aStatus, const Status& aOtherStatus ) { return (aStatus.m_statusData == aOtherStatus.m_statusData); } bool operator!=( const Status& aStatus, const Status& aOtherStatus ) { return (aStatus.m_statusData != aOtherStatus.m_statusData); } qutim-0.2.0/plugins/mrim/Resources/0000755000175000017500000000000011273101025020703 5ustar euroelessareuroelessarqutim-0.2.0/plugins/mrim/Resources/region.txt0000644000175000017500000077513311273054313022756 0ustar euroelessareuroelessar24;0;24;Россия 25;25;24;Россия,Москва 1734;25;24;Россия,Москва,г. Зеленоград 3256;25;24;Россия,Москва,Восточный АО 1503;25;24;Россия,Москва,Восточный АО,ст. Авиамоторная 1507;25;24;Россия,Москва,Восточный АО,ст. Выхино 1435;25;24;Россия,Москва,Восточный АО,ст. Измайловская 1434;25;24;Россия,Москва,Восточный АО,ст. Измайловский парк 1506;25;24;Россия,Москва,Восточный АО,ст. Новогиреево 1436;25;24;Россия,Москва,Восточный АО,ст. Первомайская 1505;25;24;Россия,Москва,Восточный АО,ст. Перово 1324;25;24;Россия,Москва,Восточный АО,ст. Преображенская площадь 1433;25;24;Россия,Москва,Восточный АО,ст. Семеновская 1325;25;24;Россия,Москва,Восточный АО,ст. Сокольники 534;25;24;Россия,Москва,Восточный АО,ст. Улица Подбельского 1323;25;24;Россия,Москва,Восточный АО,ст. Черкизовская 1504;25;24;Россия,Москва,Восточный АО,ст. Шоссе Энтузиастов 1437;25;24;Россия,Москва,Восточный АО,ст. Щелковская 1432;25;24;Россия,Москва,Восточный АО,ст. Электрозаводская 3260;25;24;Россия,Москва,Западный АО 1422;25;24;Россия,Москва,Западный АО,ст. Багратионовская 1616;25;24;Россия,Москва,Западный АО,ст. Киевская 1418;25;24;Россия,Москва,Западный АО,ст. Крылатское 1420;25;24;Россия,Москва,Западный АО,ст. Кунцевская 1425;25;24;Россия,Москва,Западный АО,ст. Кутузовская 1419;25;24;Россия,Москва,Западный АО,ст. Молодежная 3187;25;24;Россия,Москва,Западный АО,ст. Парк Победы 1421;25;24;Россия,Москва,Западный АО,ст. Пионерская 1336;25;24;Россия,Москва,Западный АО,ст. Проспект Вернадского 1426;25;24;Россия,Москва,Западный АО,ст. Студенческая 1423;25;24;Россия,Москва,Западный АО,ст. Филевский парк 1424;25;24;Россия,Москва,Западный АО,ст. Фили 1337;25;24;Россия,Москва,Западный АО,ст. Юго-Западная 3254;25;24;Россия,Москва,Северный АО 1517;25;24;Россия,Москва,Северный АО,ст. Беговая 1614;25;24;Россия,Москва,Северный АО,ст. Белорусская 1609;25;24;Россия,Москва,Северный АО,ст. Аэропорт 1612;25;24;Россия,Москва,Северный АО,ст. Водный стадион 1611;25;24;Россия,Москва,Северный АО,ст. Войковская 1608;25;24;Россия,Москва,Северный АО,ст. Динамо 1282;25;24;Россия,Москва,Северный АО,ст. Дмитровская 1280;25;24;Россия,Москва,Северный АО,ст. Петровско-Разумовская 1518;25;24;Россия,Москва,Северный АО,ст. Полежаевская 1613;25;24;Россия,Москва,Северный АО,ст. Речной вокзал 1283;25;24;Россия,Москва,Северный АО,ст. Савеловская 1610;25;24;Россия,Москва,Северный АО,ст. Сокол 1281;25;24;Россия,Москва,Северный АО,ст. Тимирязевская 3255;25;24;Россия,Москва,Северо-восточный АО 1316;25;24;Россия,Москва,Северо-восточный АО,ст. Рижская 1276;25;24;Россия,Москва,Северо-восточный АО,ст. Алтуфьево 1317;25;24;Россия,Москва,Северо-восточный АО,ст. Алексеевская 1321;25;24;Россия,Москва,Северо-восточный АО,ст. Бабушкинская 1277;25;24;Россия,Москва,Северо-восточный АО,ст. Бибирево 1319;25;24;Россия,Москва,Северо-восточный АО,ст. Ботанический сад 1318;25;24;Россия,Москва,Северо-восточный АО,ст. ВДНХ 1279;25;24;Россия,Москва,Северо-восточный АО,ст. Владыкино 1322;25;24;Россия,Москва,Северо-восточный АО,ст. Медведково 1278;25;24;Россия,Москва,Северо-восточный АО,ст. Отрадное 1320;25;24;Россия,Москва,Северо-восточный АО,ст. Свиблово 3261;25;24;Россия,Москва,Северо-западный АО 1519;25;24;Россия,Москва,Северо-западный АО,ст. Октябрьское поле 1523;25;24;Россия,Москва,Северо-западный АО,ст. Планерная 1522;25;24;Россия,Москва,Северо-западный АО,ст. Сходненская 1521;25;24;Россия,Москва,Северо-западный АО,ст. Тушинская 1520;25;24;Россия,Москва,Северо-западный АО,ст. Щукинская 3251;25;24;Россия,Москва,Центральный АО 1429;25;24;Россия,Москва,Центральный АО,ст. Александровский сад 1428;25;24;Россия,Москва,Центральный АО,ст. Арбатская 1515;25;24;Россия,Москва,Центральный АО,ст. Баррикадная 1431;25;24;Россия,Москва,Центральный АО,ст. Бауманская 1331;25;24;Россия,Москва,Центральный АО,ст. Библиотека им. Ленина 1287;25;24;Россия,Москва,Центральный АО,ст. Боровицкая 1618;25;24;Россия,Москва,Центральный АО,ст. Добрынинская 1313;25;24;Россия,Москва,Центральный АО,ст. Китай-город 1622;25;24;Россия,Москва,Центральный АО,ст. Комсомольская 1615;25;24;Россия,Москва,Центральный АО,ст. Краснопресненская 1326;25;24;Россия,Москва,Центральный АО,ст. Красносельская 1327;25;24;Россия,Москва,Центральный АО,ст. Красные ворота 1586;25;24;Россия,Москва,Центральный АО,ст. Крестьянская застава 3132;25;24;Россия,Москва,Центральный АО,ст. Кропоткинская 1513;25;24;Россия,Москва,Центральный АО,ст. Кузнецкий мост 1621;25;24;Россия,Москва,Центральный АО,ст. Курская 1329;25;24;Россия,Москва,Центральный АО,ст. Лубянка 1501;25;24;Россия,Москва,Центральный АО,ст. Марксистская 1607;25;24;Россия,Москва,Центральный АО,ст. Маяковская 1284;25;24;Россия,Москва,Центральный АО,ст. Менделеевская 1604;25;24;Россия,Москва,Центральный АО,ст. Новокузнецкая 1624;25;24;Россия,Москва,Центральный АО,ст. Новослободская 1311;25;24;Россия,Москва,Центральный АО,ст. Октябрьская 1330;25;24;Россия,Москва,Центральный АО,ст. Охотный ряд 1619;25;24;Россия,Москва,Центральный АО,ст. Павелецкая 1617;25;24;Россия,Москва,Центральный АО,ст. Парк Культуры 1502;25;24;Россия,Москва,Центральный АО,ст. Площадь Ильича 1430;25;24;Россия,Москва,Центральный АО,ст. Площадь Революции 1288;25;24;Россия,Москва,Центральный АО,ст. Полянка 1512;25;24;Россия,Москва,Центральный АО,ст. Пролетарская 1623;25;24;Россия,Москва,Центральный АО,ст. Проспект Мира 1514;25;24;Россия,Москва,Центральный АО,ст. Пушкинская 1584;25;24;Россия,Москва,Центральный АО,ст. Римская 1289;25;24;Россия,Москва,Центральный АО,ст. Серпуховская 1427;25;24;Россия,Москва,Центральный АО,ст. Смоленская 1333;25;24;Россия,Москва,Центральный АО,ст. Спортивная 1315;25;24;Россия,Москва,Центральный АО,ст. Сухаревская 1620;25;24;Россия,Москва,Центральный АО,ст. Таганская 1606;25;24;Россия,Москва,Центральный АО,ст. Тверская 1605;25;24;Россия,Москва,Центральный АО,ст. Театральная 1312;25;24;Россия,Москва,Центральный АО,ст. Третьяковская 3253;25;24;Россия,Москва,Центральный АО,ст. Тургеневская 1516;25;24;Россия,Москва,Центральный АО,ст. Улица 1905 года 1332;25;24;Россия,Москва,Центральный АО,ст. Фрунзенская 1285;25;24;Россия,Москва,Центральный АО,ст. Цветной бульвар 1286;25;24;Россия,Москва,Центральный АО,ст. Чеховская 1328;25;24;Россия,Москва,Центральный АО,ст. Чистые пруды 1585;25;24;Россия,Москва,Центральный АО,ст. Чкаловская 3257;25;24;Россия,Москва,Юго-восточный АО 1592;25;24;Россия,Москва,Юго-восточный АО,ст. Братиславская 1511;25;24;Россия,Москва,Юго-восточный АО,ст. Волгоградский проспект 1590;25;24;Россия,Москва,Юго-восточный АО,ст. Волжская 1587;25;24;Россия,Москва,Юго-восточный АО,ст. Дубровка 1588;25;24;Россия,Москва,Юго-восточный АО,ст. Кожуховская 1509;25;24;Россия,Москва,Юго-восточный АО,ст. Кузьминки 1591;25;24;Россия,Москва,Юго-восточный АО,ст. Люблино 1593;25;24;Россия,Москва,Юго-восточный АО,ст. Марьино 1589;25;24;Россия,Москва,Юго-восточный АО,ст. Печатники 1508;25;24;Россия,Москва,Юго-восточный АО,ст. Рязанский проспект 1510;25;24;Россия,Москва,Юго-восточный АО,ст. Текстильщики 3259;25;24;Россия,Москва,Юго-западный АО 1309;25;24;Россия,Москва,Юго-западный АО,ст. Ленинский проспект 1295;25;24;Россия,Москва,Юго-западный АО,ст. Чертановская 1308;25;24;Россия,Москва,Юго-западный АО,ст. Академическая 1304;25;24;Россия,Москва,Юго-западный АО,ст. Беляево 1300;25;24;Россия,Москва,Юго-западный АО,ст. Битцевский парк 3188;25;24;Россия,Москва,Юго-западный АО,ст. Бульвар Дмитрия Донского 1305;25;24;Россия,Москва,Юго-западный АО,ст. Калужская 1595;25;24;Россия,Москва,Юго-западный АО,ст. Каховская 1303;25;24;Россия,Москва,Юго-западный АО,ст. Коньково 1334;25;24;Россия,Москва,Юго-западный АО,ст. Ленинские горы 1293;25;24;Россия,Москва,Юго-западный АО,ст. Нахимовский проспект 1306;25;24;Россия,Москва,Юго-западный АО,ст. Новые Черемушки 1307;25;24;Россия,Москва,Юго-западный АО,ст. Профсоюзная 1294;25;24;Россия,Москва,Юго-западный АО,ст. Севастопольская 1302;25;24;Россия,Москва,Юго-западный АО,ст. Теплый Стан 1335;25;24;Россия,Москва,Юго-западный АО,ст. Университет 1301;25;24;Россия,Москва,Юго-западный АО,ст. Ясенево 3258;25;24;Россия,Москва,Южный АО 1603;25;24;Россия,Москва,Южный АО,ст. Автозаводская 1298;25;24;Россия,Москва,Южный АО,ст. Аннино 1594;25;24;Россия,Москва,Южный АО,ст. Варшавская 1597;25;24;Россия,Москва,Южный АО,ст. Домодедовская 1600;25;24;Россия,Москва,Южный АО,ст. Кантемировская 1601;25;24;Россия,Москва,Южный АО,ст. Каширская 1602;25;24;Россия,Москва,Южный АО,ст. Коломенская 1596;25;24;Россия,Москва,Южный АО,ст. Красногвардейская 1291;25;24;Россия,Москва,Южный АО,ст. Нагатинская 1292;25;24;Россия,Москва,Южный АО,ст. Нагорная 1598;25;24;Россия,Москва,Южный АО,ст. Орехово 1297;25;24;Россия,Москва,Южный АО,ст. Пражская 1290;25;24;Россия,Москва,Южный АО,ст. Тульская 1299;25;24;Россия,Москва,Южный АО,ст. Улица Академика Янгеля 1599;25;24;Россия,Москва,Южный АО,ст. Царицыно 1310;25;24;Россия,Москва,Южный АО,ст. Шаболовская 1296;25;24;Россия,Москва,Южный АО,ст. Южная 226;226;24;Россия,Санкт-Петербург 1970;226;24;Россия,Санкт-Петербург,Адмиралтейский р-н 1968;226;24;Россия,Санкт-Петербург,Василеостровский р-н 1964;226;24;Россия,Санкт-Петербург,Выборгский р-н 1377;226;24;Россия,Санкт-Петербург,Зеленогорск 1965;226;24;Россия,Санкт-Петербург,Калининский р-н 1971;226;24;Россия,Санкт-Петербург,Кировский р-н 1961;226;24;Россия,Санкт-Петербург,Колпино 1975;226;24;Россия,Санкт-Петербург,Колпинский р-н 1966;226;24;Россия,Санкт-Петербург,Красногвардейский р-н 1383;226;24;Россия,Санкт-Петербург,Красное Село 1978;226;24;Россия,Санкт-Петербург,Красносельский р-н 1981;226;24;Россия,Санкт-Петербург,Кронштадский р-н 1382;226;24;Россия,Санкт-Петербург,Кронштадт 1962;226;24;Россия,Санкт-Петербург,Курортный р-н 1385;226;24;Россия,Санкт-Петербург,Ломоносов 1980;226;24;Россия,Санкт-Петербург,Ломоносовский р-н 1972;226;24;Россия,Санкт-Петербург,Московский р-н 1974;226;24;Россия,Санкт-Петербург,Невский р-н 1387;226;24;Россия,Санкт-Петербург,Павловск 1977;226;24;Россия,Санкт-Петербург,Павловский р-н 1982;226;24;Россия,Санкт-Петербург,Петергоф 1967;226;24;Россия,Санкт-Петербург,Петроградский р-н 1960;226;24;Россия,Санкт-Петербург,Петродворец 1979;226;24;Россия,Санкт-Петербург,Петродворцовый р-н 1963;226;24;Россия,Санкт-Петербург,Приморский р-н 1388;226;24;Россия,Санкт-Петербург,Пушкин 1976;226;24;Россия,Санкт-Петербург,Пушкинский р-н 1390;226;24;Россия,Санкт-Петербург,Сестрорецк 1973;226;24;Россия,Санкт-Петербург,Фрунзенский р-н 1969;226;24;Россия,Санкт-Петербург,Центральный р-н 233;233;24;Россия,Дальневосточный ФО,Саха (Якутия) 474;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Алдан 2809;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Верхоянск 2804;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Вилюйск 475;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Ленск 477;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Мирный 476;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Нерюнгри 2806;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Олекминск 3115;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Покровск 2808;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Среднеколымск 2807;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Томмот 2805;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Удачный 478;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Усть-Нера 479;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Якутск 2263;233;24;Россия,Дальневосточный ФО,Саха (Якутия),Другое 232;232;24;Россия,Дальневосточный ФО,Приморский край 2819;232;24;Россия,Дальневосточный ФО,Приморский край,Арсеньев 464;232;24;Россия,Дальневосточный ФО,Приморский край,Артем 465;232;24;Россия,Дальневосточный ФО,Приморский край,Большой Камень 466;232;24;Россия,Дальневосточный ФО,Приморский край,Владивосток 2817;232;24;Россия,Дальневосточный ФО,Приморский край,Дальнегорск 2818;232;24;Россия,Дальневосточный ФО,Приморский край,Дальнереченск 3359;232;24;Россия,Дальневосточный ФО,Приморский край,Кавалерово 467;232;24;Россия,Дальневосточный ФО,Приморский край,Камень-Рыболов 468;232;24;Россия,Дальневосточный ФО,Приморский край,Лесозаводск 469;232;24;Россия,Дальневосточный ФО,Приморский край,Лучегорск 470;232;24;Россия,Дальневосточный ФО,Приморский край,Находка 471;232;24;Россия,Дальневосточный ФО,Приморский край,Партизанск 472;232;24;Россия,Дальневосточный ФО,Приморский край,Пластун 2816;232;24;Россия,Дальневосточный ФО,Приморский край,Спасск-Дальний 473;232;24;Россия,Дальневосточный ФО,Приморский край,Уссурийск 2258;232;24;Россия,Дальневосточный ФО,Приморский край,Другое 235;235;24;Россия,Дальневосточный ФО,Хабаровский край 487;235;24;Россия,Дальневосточный ФО,Хабаровский край,Амурск 2821;235;24;Россия,Дальневосточный ФО,Хабаровский край,Бикин 488;235;24;Россия,Дальневосточный ФО,Хабаровский край,Ванино 2820;235;24;Россия,Дальневосточный ФО,Хабаровский край,Вяземский 489;235;24;Россия,Дальневосточный ФО,Хабаровский край,Комсомольск-на-Амуре 490;235;24;Россия,Дальневосточный ФО,Хабаровский край,Николаевск-на-Амуре 491;235;24;Россия,Дальневосточный ФО,Хабаровский край,Советская Гавань 3353;235;24;Россия,Дальневосточный ФО,Хабаровский край,Солнечный 492;235;24;Россия,Дальневосточный ФО,Хабаровский край,Хабаровск 2280;235;24;Россия,Дальневосточный ФО,Хабаровский край,Другое 227;227;24;Россия,Дальневосточный ФО,Амурская обл. 455;227;24;Россия,Дальневосточный ФО,Амурская обл.,Белогорск 456;227;24;Россия,Дальневосточный ФО,Амурская обл.,Благовещенск 2814;227;24;Россия,Дальневосточный ФО,Амурская обл.,Завитинск 2813;227;24;Россия,Дальневосточный ФО,Амурская обл.,Зея 2815;227;24;Россия,Дальневосточный ФО,Амурская обл.,Райчихинск 2812;227;24;Россия,Дальневосточный ФО,Амурская обл.,Свободный 2811;227;24;Россия,Дальневосточный ФО,Амурская обл.,Сковородино 457;227;24;Россия,Дальневосточный ФО,Амурская обл.,Тында 2217;227;24;Россия,Дальневосточный ФО,Амурская обл.,Шимановск 2218;227;24;Россия,Дальневосточный ФО,Амурская обл.,Другое 229;229;24;Россия,Дальневосточный ФО,Камчатская обл. 460;229;24;Россия,Дальневосточный ФО,Камчатская обл.,Елизово 2822;229;24;Россия,Дальневосточный ФО,Камчатская обл.,Ключи 459;229;24;Россия,Дальневосточный ФО,Камчатская обл.,Петропавловск-Камч. 2234;229;24;Россия,Дальневосточный ФО,Камчатская обл.,Другое 231;231;24;Россия,Дальневосточный ФО,Магаданская обл. 462;231;24;Россия,Дальневосточный ФО,Магаданская обл.,Магадан 2823;231;24;Россия,Дальневосточный ФО,Магаданская обл.,Сусуман 463;231;24;Россия,Дальневосточный ФО,Магаданская обл.,Ягодное 2246;231;24;Россия,Дальневосточный ФО,Магаданская обл.,Другое 234;234;24;Россия,Дальневосточный ФО,Сахалинская обл. 480;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Александровск-Сахалинский 2829;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Анива 2833;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Горнозаводск 2825;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Долинск 481;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Корсаков 482;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Красногорск 2826;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Курильск 2832;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Лесогорск 2836;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Макаров 2830;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Невельск 483;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Оха 2828;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Поронайск 2824;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Северо-Курильск 2827;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Томари 2831;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Углегорск 484;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Холмск 2834;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Чехов 2835;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Шахтерск 485;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Южно-Курильск 486;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Южно-Сахалинск 2264;234;24;Россия,Дальневосточный ФО,Сахалинская обл.,Другое 228;228;24;Россия,Дальневосточный ФО,Еврейская АО 458;228;24;Россия,Дальневосточный ФО,Еврейская АО,Биробиджан 2810;228;24;Россия,Дальневосточный ФО,Еврейская АО,Облучье 2226;228;24;Россия,Дальневосточный ФО,Еврейская АО,Другое 230;230;24;Россия,Дальневосточный ФО,Корякский АО 461;230;24;Россия,Дальневосточный ФО,Корякский АО,Полана 2239;230;24;Россия,Дальневосточный ФО,Корякский АО,Другое 236;236;24;Россия,Дальневосточный ФО,Чукотский АО 493;236;24;Россия,Дальневосточный ФО,Чукотский АО,Анадырь 2287;236;24;Россия,Дальневосточный ФО,Чукотский АО,Другое 3183;236;24;Россия,Приволжский ФО 237;237;24;Россия,Приволжский ФО,Башкортостан 2850;237;24;Россия,Приволжский ФО,Башкортостан,Агидель 2851;237;24;Россия,Приволжский ФО,Башкортостан,Агидель 2657;237;24;Россия,Приволжский ФО,Башкортостан,Баймак 2662;237;24;Россия,Приволжский ФО,Башкортостан,Белебей 494;237;24;Россия,Приволжский ФО,Башкортостан,Белорецк 2658;237;24;Россия,Приволжский ФО,Башкортостан,Бирск 2660;237;24;Россия,Приволжский ФО,Башкортостан,Благовещенск 2659;237;24;Россия,Приволжский ФО,Башкортостан,Давлеканово 2663;237;24;Россия,Приволжский ФО,Башкортостан,Дюртюли 495;237;24;Россия,Приволжский ФО,Башкортостан,Ишимбай 496;237;24;Россия,Приволжский ФО,Башкортостан,Кумертау 2655;237;24;Россия,Приволжский ФО,Башкортостан,Мелеуз 497;237;24;Россия,Приволжский ФО,Башкортостан,Нефтекамск 2654;237;24;Россия,Приволжский ФО,Башкортостан,Октябрьский 499;237;24;Россия,Приволжский ФО,Башкортостан,Салават 2656;237;24;Россия,Приволжский ФО,Башкортостан,Сибай 498;237;24;Россия,Приволжский ФО,Башкортостан,Стерлитамак 500;237;24;Россия,Приволжский ФО,Башкортостан,Туймазы 2661;237;24;Россия,Приволжский ФО,Башкортостан,Туймазы 501;237;24;Россия,Приволжский ФО,Башкортостан,Уфа 502;237;24;Россия,Приволжский ФО,Башкортостан,Учалы 2664;237;24;Россия,Приволжский ФО,Башкортостан,Янаул 2220;237;24;Россия,Приволжский ФО,Башкортостан,Другое 240;240;24;Россия,Приволжский ФО,Марий-Эл 509;240;24;Россия,Приволжский ФО,Марий-Эл,Волжск 510;240;24;Россия,Приволжский ФО,Марий-Эл,Звенигово 511;240;24;Россия,Приволжский ФО,Марий-Эл,Йошкар-Ола 512;240;24;Россия,Приволжский ФО,Марий-Эл,Козьмодемьянск 2247;240;24;Россия,Приволжский ФО,Марий-Эл,Другое 241;241;24;Россия,Приволжский ФО,Мордовия 513;241;24;Россия,Приволжский ФО,Мордовия,Зубова Поляна 2147;241;24;Россия,Приволжский ФО,Мордовия,Инсар 2150;241;24;Россия,Приволжский ФО,Мордовия,Ковылкино 2148;241;24;Россия,Приволжский ФО,Мордовия,Краснослободск 2910;241;24;Россия,Приволжский ФО,Мордовия,Лямбирь 515;241;24;Россия,Приволжский ФО,Мордовия,Рузаевка 514;241;24;Россия,Приволжский ФО,Мордовия,Саранск 2149;241;24;Россия,Приволжский ФО,Мордовия,Темников 2923;241;24;Россия,Приволжский ФО,Мордовия,Чамзинка 2248;241;24;Россия,Приволжский ФО,Мордовия,Другое 248;248;24;Россия,Приволжский ФО,Татарстан 2569;248;24;Россия,Приволжский ФО,Татарстан,Агрыз 2575;248;24;Россия,Приволжский ФО,Татарстан,Азнакаево 569;248;24;Россия,Приволжский ФО,Татарстан,Альметьевск 570;248;24;Россия,Приволжский ФО,Татарстан,Апастово 2571;248;24;Россия,Приволжский ФО,Татарстан,Болгар 571;248;24;Россия,Приволжский ФО,Татарстан,Бугульма 2570;248;24;Россия,Приволжский ФО,Татарстан,Буинск 572;248;24;Россия,Приволжский ФО,Татарстан,Джалиль 573;248;24;Россия,Приволжский ФО,Татарстан,Елабуга 2576;248;24;Россия,Приволжский ФО,Татарстан,Заинск 574;248;24;Россия,Приволжский ФО,Татарстан,Зеленодольск 575;248;24;Россия,Приволжский ФО,Татарстан,Казань 2577;248;24;Россия,Приволжский ФО,Татарстан,Лениногорск 2572;248;24;Россия,Приволжский ФО,Татарстан,Мамадыш 576;248;24;Россия,Приволжский ФО,Татарстан,Менделеевск 2573;248;24;Россия,Приволжский ФО,Татарстан,Мензелинск 577;248;24;Россия,Приволжский ФО,Татарстан,Набережные Челны 578;248;24;Россия,Приволжский ФО,Татарстан,Нижнекамск 579;248;24;Россия,Приволжский ФО,Татарстан,Нурлат 2574;248;24;Россия,Приволжский ФО,Татарстан,Тетюши 580;248;24;Россия,Приволжский ФО,Татарстан,Чистополь 2271;248;24;Россия,Приволжский ФО,Татарстан,Другое 249;249;24;Россия,Приволжский ФО,Удмуртия 3311;249;24;Россия,Приволжский ФО,Удмуртия,Вавож 581;249;24;Россия,Приволжский ФО,Удмуртия,Воткинск 582;249;24;Россия,Приволжский ФО,Удмуртия,Глазов 583;249;24;Россия,Приволжский ФО,Удмуртия,Игра 584;249;24;Россия,Приволжский ФО,Удмуртия,Ижевск 2665;249;24;Россия,Приволжский ФО,Удмуртия,Камбарка 585;249;24;Россия,Приволжский ФО,Удмуртия,Можга 586;249;24;Россия,Приволжский ФО,Удмуртия,Сарапул 587;249;24;Россия,Приволжский ФО,Удмуртия,Ува 2277;249;24;Россия,Приволжский ФО,Удмуртия,Другое 251;251;24;Россия,Приволжский ФО,Чувашия 2158;251;24;Россия,Приволжский ФО,Чувашия,Алатырь 2156;251;24;Россия,Приволжский ФО,Чувашия,Канаш 2151;251;24;Россия,Приволжский ФО,Чувашия,Козловка 2152;251;24;Россия,Приволжский ФО,Чувашия,Марьинский Посад 2155;251;24;Россия,Приволжский ФО,Чувашия,Новочебоксарск 2153;251;24;Россия,Приволжский ФО,Чувашия,Цивильск 592;251;24;Россия,Приволжский ФО,Чувашия,Чебоксары 2157;251;24;Россия,Приволжский ФО,Чувашия,Шумерля 2154;251;24;Россия,Приволжский ФО,Чувашия,Ядрин 2286;251;24;Россия,Приволжский ФО,Чувашия,Другое 238;238;24;Россия,Приволжский ФО,Кировская обл. 2168;238;24;Россия,Приволжский ФО,Кировская обл.,Белая Холуница 503;238;24;Россия,Приволжский ФО,Кировская обл.,Вятские Поляны 2164;238;24;Россия,Приволжский ФО,Кировская обл.,Зуевка 504;238;24;Россия,Приволжский ФО,Кировская обл.,Киров 505;238;24;Россия,Приволжский ФО,Кировская обл.,Кирово-Чепецк 2160;238;24;Россия,Приволжский ФО,Кировская обл.,Кирс 506;238;24;Россия,Приволжский ФО,Кировская обл.,Котельнич 2167;238;24;Россия,Приволжский ФО,Кировская обл.,Луза 2159;238;24;Россия,Приволжский ФО,Кировская обл.,Малмыж 2169;238;24;Россия,Приволжский ФО,Кировская обл.,Мураши 2163;238;24;Россия,Приволжский ФО,Кировская обл.,Нолинск 2170;238;24;Россия,Приволжский ФО,Кировская обл.,Омутнинск 2166;238;24;Россия,Приволжский ФО,Кировская обл.,Слободской 2165;238;24;Россия,Приволжский ФО,Кировская обл.,Советск 2162;238;24;Россия,Приволжский ФО,Кировская обл.,Сосновка 2171;238;24;Россия,Приволжский ФО,Кировская обл.,Уржум 2161;238;24;Россия,Приволжский ФО,Кировская обл.,Халтурин 507;238;24;Россия,Приволжский ФО,Кировская обл.,Яранск 2237;238;24;Россия,Приволжский ФО,Кировская обл.,Другое 242;242;24;Россия,Приволжский ФО,Нижегородская обл. 516;242;24;Россия,Приволжский ФО,Нижегородская обл.,Арзамас 517;242;24;Россия,Приволжский ФО,Нижегородская обл.,Балахна 2139;242;24;Россия,Приволжский ФО,Нижегородская обл.,Богородск 518;242;24;Россия,Приволжский ФО,Нижегородская обл.,Бор 519;242;24;Россия,Приволжский ФО,Нижегородская обл.,Вахтан 520;242;24;Россия,Приволжский ФО,Нижегородская обл.,Ветлуга 2140;242;24;Россия,Приволжский ФО,Нижегородская обл.,Володарск 2138;242;24;Россия,Приволжский ФО,Нижегородская обл.,Ворсма 521;242;24;Россия,Приволжский ФО,Нижегородская обл.,Выкса 2137;242;24;Россия,Приволжский ФО,Нижегородская обл.,Горбатов 522;242;24;Россия,Приволжский ФО,Нижегородская обл.,Городец 523;242;24;Россия,Приволжский ФО,Нижегородская обл.,Дзержинск 524;242;24;Россия,Приволжский ФО,Нижегородская обл.,Заволжье 2891;242;24;Россия,Приволжский ФО,Нижегородская обл.,Ильиногорск 525;242;24;Россия,Приволжский ФО,Нижегородская обл.,Кстово 2145;242;24;Россия,Приволжский ФО,Нижегородская обл.,Кулебаки 2143;242;24;Россия,Приволжский ФО,Нижегородская обл.,Лукоянов 2144;242;24;Россия,Приволжский ФО,Нижегородская обл.,Лысково 2146;242;24;Россия,Приволжский ФО,Нижегородская обл.,Навашино 526;242;24;Россия,Приволжский ФО,Нижегородская обл.,Нижний Новгород 527;242;24;Россия,Приволжский ФО,Нижегородская обл.,Павлово 2135;242;24;Россия,Приволжский ФО,Нижегородская обл.,Первомайск 528;242;24;Россия,Приволжский ФО,Нижегородская обл.,Саров 529;242;24;Россия,Приволжский ФО,Нижегородская обл.,Семенов 530;242;24;Россия,Приволжский ФО,Нижегородская обл.,Сергач 2141;242;24;Россия,Приволжский ФО,Нижегородская обл.,Урень 2136;242;24;Россия,Приволжский ФО,Нижегородская обл.,Чкаловск 2897;242;24;Россия,Приволжский ФО,Нижегородская обл.,Шатки 2142;242;24;Россия,Приволжский ФО,Нижегородская обл.,Шахунья 2251;242;24;Россия,Приволжский ФО,Нижегородская обл.,Другое 243;243;24;Россия,Приволжский ФО,Оренбургская обл. 2678;243;24;Россия,Приволжский ФО,Оренбургская обл.,Абдулино 2673;243;24;Россия,Приволжский ФО,Оренбургская обл.,Бугуруслан 531;243;24;Россия,Приволжский ФО,Оренбургская обл.,Бузулук 532;243;24;Россия,Приволжский ФО,Оренбургская обл.,Гай 2674;243;24;Россия,Приволжский ФО,Оренбургская обл.,Кувандык 2675;243;24;Россия,Приволжский ФО,Оренбургская обл.,Медногорск 533;243;24;Россия,Приволжский ФО,Оренбургская обл.,Новотроицк 535;243;24;Россия,Приволжский ФО,Оренбургская обл.,Оренбург 536;243;24;Россия,Приволжский ФО,Оренбургская обл.,Орск 3360;243;24;Россия,Приволжский ФО,Оренбургская обл.,Саракташ 2677;243;24;Россия,Приволжский ФО,Оренбургская обл.,Соль-Илецк 2676;243;24;Россия,Приволжский ФО,Оренбургская обл.,Сорочинск 537;243;24;Россия,Приволжский ФО,Оренбургская обл.,Тоцкое 538;243;24;Россия,Приволжский ФО,Оренбургская обл.,Ясный 2254;243;24;Россия,Приволжский ФО,Оренбургская обл.,Другое 244;244;24;Россия,Приволжский ФО,Пензенская обл. 539;244;24;Россия,Приволжский ФО,Пензенская обл.,Беднодемьяновск 2597;244;24;Россия,Приволжский ФО,Пензенская обл.,Белинский 2595;244;24;Россия,Приволжский ФО,Пензенская обл.,Городище 2593;244;24;Россия,Приволжский ФО,Пензенская обл.,Каменка 540;244;24;Россия,Приволжский ФО,Пензенская обл.,Кузнецк 2598;244;24;Россия,Приволжский ФО,Пензенская обл.,Нижний Ломов 2592;244;24;Россия,Приволжский ФО,Пензенская обл.,Никольск 541;244;24;Россия,Приволжский ФО,Пензенская обл.,Пенза 3304;244;24;Россия,Приволжский ФО,Пензенская обл.,Русский Камешкир 2596;244;24;Россия,Приволжский ФО,Пензенская обл.,Сердобск 2594;244;24;Россия,Приволжский ФО,Пензенская обл.,Сурск 2256;244;24;Россия,Приволжский ФО,Пензенская обл.,Другое 245;245;24;Россия,Приволжский ФО,Пермская обл. 2690;245;24;Россия,Приволжский ФО,Пермская обл.,Александровск 542;245;24;Россия,Приволжский ФО,Пермская обл.,Березники 2679;245;24;Россия,Приволжский ФО,Пермская обл.,Верещагино 2680;245;24;Россия,Приволжский ФО,Пермская обл.,Горнозаводск 2687;245;24;Россия,Приволжский ФО,Пермская обл.,Гремячинск 2686;245;24;Россия,Приволжский ФО,Пермская обл.,Губаха 543;245;24;Россия,Приволжский ФО,Пермская обл.,Добрянка 544;245;24;Россия,Приволжский ФО,Пермская обл.,Кизел 2681;245;24;Россия,Приволжский ФО,Пермская обл.,Красновишерск 545;245;24;Россия,Приволжский ФО,Пермская обл.,Краснокамск 546;245;24;Россия,Приволжский ФО,Пермская обл.,Кунгур 547;245;24;Россия,Приволжский ФО,Пермская обл.,Лысьва 548;245;24;Россия,Приволжский ФО,Пермская обл.,Нытва 2683;245;24;Россия,Приволжский ФО,Пермская обл.,Оса 2684;245;24;Россия,Приволжский ФО,Пермская обл.,Оханск 2682;245;24;Россия,Приволжский ФО,Пермская обл.,Очер 549;245;24;Россия,Приволжский ФО,Пермская обл.,Пермь 550;245;24;Россия,Приволжский ФО,Пермская обл.,Соликамск 2685;245;24;Россия,Приволжский ФО,Пермская обл.,Усолье 551;245;24;Россия,Приволжский ФО,Пермская обл.,Чайковский 2689;245;24;Россия,Приволжский ФО,Пермская обл.,Чердынь 2688;245;24;Россия,Приволжский ФО,Пермская обл.,Чермоз 552;245;24;Россия,Приволжский ФО,Пермская обл.,Чернушка 553;245;24;Россия,Приволжский ФО,Пермская обл.,Чусовой 2257;245;24;Россия,Приволжский ФО,Пермская обл.,Другое 246;246;24;Россия,Приволжский ФО,Самарская обл. 554;246;24;Россия,Приволжский ФО,Самарская обл.,Волжский 555;246;24;Россия,Приволжский ФО,Самарская обл.,Жигулевск 2599;246;24;Россия,Приволжский ФО,Самарская обл.,Кинель 3293;246;24;Россия,Приволжский ФО,Самарская обл.,Красный Яр 2602;246;24;Россия,Приволжский ФО,Самарская обл.,Нефтегорск 556;246;24;Россия,Приволжский ФО,Самарская обл.,Новокуйбышевск 2600;246;24;Россия,Приволжский ФО,Самарская обл.,Октябрьск 557;246;24;Россия,Приволжский ФО,Самарская обл.,Отрадный 558;246;24;Россия,Приволжский ФО,Самарская обл.,Похвистнево 559;246;24;Россия,Приволжский ФО,Самарская обл.,Самара 560;246;24;Россия,Приволжский ФО,Самарская обл.,Сызрань 561;246;24;Россия,Приволжский ФО,Самарская обл.,Тольятти 2601;246;24;Россия,Приволжский ФО,Самарская обл.,Чапаевск 562;246;24;Россия,Приволжский ФО,Самарская обл.,Шигоны 2261;246;24;Россия,Приволжский ФО,Самарская обл.,Другое 247;247;24;Россия,Приволжский ФО,Саратовская обл. 2613;247;24;Россия,Приволжский ФО,Саратовская обл.,Аркадак 2606;247;24;Россия,Приволжский ФО,Саратовская обл.,Аткарск 563;247;24;Россия,Приволжский ФО,Саратовская обл.,Балаково 564;247;24;Россия,Приволжский ФО,Саратовская обл.,Балашов 565;247;24;Россия,Приволжский ФО,Саратовская обл.,Вольск 2608;247;24;Россия,Приволжский ФО,Саратовская обл.,Ершов 2607;247;24;Россия,Приволжский ФО,Саратовская обл.,Калининск 2609;247;24;Россия,Приволжский ФО,Саратовская обл.,Красноармейск 2610;247;24;Россия,Приволжский ФО,Саратовская обл.,Красный Кут 2605;247;24;Россия,Приволжский ФО,Саратовская обл.,Маркс 566;247;24;Россия,Приволжский ФО,Саратовская обл.,Новоузенск 2603;247;24;Россия,Приволжский ФО,Саратовская обл.,Петровск 2604;247;24;Россия,Приволжский ФО,Саратовская обл.,Пугачев 2612;247;24;Россия,Приволжский ФО,Саратовская обл.,Ртищево 567;247;24;Россия,Приволжский ФО,Саратовская обл.,Саратов 2611;247;24;Россия,Приволжский ФО,Саратовская обл.,Хвалынск 568;247;24;Россия,Приволжский ФО,Саратовская обл.,Энгельс 3267;247;24;Россия,Приволжский ФО,Саратовская обл.,Энгельс-12 2262;247;24;Россия,Приволжский ФО,Саратовская обл.,Другое 250;250;24;Россия,Приволжский ФО,Ульяновская обл. 2614;250;24;Россия,Приволжский ФО,Ульяновская обл.,Барыш 588;250;24;Россия,Приволжский ФО,Ульяновская обл.,Димитровград 2615;250;24;Россия,Приволжский ФО,Ульяновская обл.,Инза 589;250;24;Россия,Приволжский ФО,Ульяновская обл.,Новоспасское 2616;250;24;Россия,Приволжский ФО,Ульяновская обл.,Новоульяновск 590;250;24;Россия,Приволжский ФО,Ульяновская обл.,Сенгилей 591;250;24;Россия,Приволжский ФО,Ульяновская обл.,Ульяновск 2278;250;24;Россия,Приволжский ФО,Ульяновская обл.,Другое 239;239;24;Россия,Приволжский ФО,Коми-Пермяцкий АО 508;239;24;Россия,Приволжский ФО,Коми-Пермяцкий АО,Кудымкар 2238;239;24;Россия,Приволжский ФО,Коми-Пермяцкий АО,Другое 3181;239;24;Россия,Северо-Западный ФО 255;255;24;Россия,Северо-Западный ФО,Карелия 1355;255;24;Россия,Северо-Западный ФО,Карелия,Беломорск 1356;255;24;Россия,Северо-Западный ФО,Карелия,Кемь 1357;255;24;Россия,Северо-Западный ФО,Карелия,Кондопога 1358;255;24;Россия,Северо-Западный ФО,Карелия,Костомукша 1359;255;24;Россия,Северо-Западный ФО,Карелия,Коткозеро 1360;255;24;Россия,Северо-Западный ФО,Карелия,Лахденпохья 1362;255;24;Россия,Северо-Западный ФО,Карелия,Лоухи 1361;255;24;Россия,Северо-Западный ФО,Карелия,Медвежьегорск 3286;255;24;Россия,Северо-Западный ФО,Карелия,Муезерский 1937;255;24;Россия,Северо-Западный ФО,Карелия,Олонец 1363;255;24;Россия,Северо-Западный ФО,Карелия,Петрозаводск 1938;255;24;Россия,Северо-Западный ФО,Карелия,Питкяранта 3287;255;24;Россия,Северо-Западный ФО,Карелия,Пряжа 1936;255;24;Россия,Северо-Западный ФО,Карелия,Пудож 1364;255;24;Россия,Северо-Западный ФО,Карелия,Сегежа 1365;255;24;Россия,Северо-Западный ФО,Карелия,Сортавала 1939;255;24;Россия,Северо-Западный ФО,Карелия,Суоярви 2201;255;24;Россия,Северо-Западный ФО,Карелия,Другое 256;256;24;Россия,Северо-Западный ФО,Коми 1366;256;24;Россия,Северо-Западный ФО,Коми,Воркута 1367;256;24;Россия,Северо-Западный ФО,Коми,Вуктыл 2202;256;24;Россия,Северо-Западный ФО,Коми,Емва 1368;256;24;Россия,Северо-Западный ФО,Коми,Инта 1940;256;24;Россия,Северо-Западный ФО,Коми,Микунь 1369;256;24;Россия,Северо-Западный ФО,Коми,Печора 1941;256;24;Россия,Северо-Западный ФО,Коми,Сосногорск 1370;256;24;Россия,Северо-Западный ФО,Коми,Сыктывкар 1371;256;24;Россия,Северо-Западный ФО,Коми,Усинск 1372;256;24;Россия,Северо-Западный ФО,Коми,Ухта 2203;256;24;Россия,Северо-Западный ФО,Коми,Другое 252;252;24;Россия,Северо-Западный ФО,Архангельская обл. 593;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Архангельск 594;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Вельск 1945;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Каргополь 595;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Коряжма 596;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Котлас 1944;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Мезень 597;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Мирный 598;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Новодвинск 1946;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Няндома 599;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Онега 600;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Пинега 601;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Северодвинск 1942;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Сольвычегодск 3239;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Холмогоры 1943;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Шенкурск 2204;252;24;Россия,Северо-Западный ФО,Архангельская обл.,Другое 253;253;24;Россия,Северо-Западный ФО,Вологодская обл. 1950;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Бабаево 1949;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Белозерск 1338;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Великий Устюг 1339;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Вологда 1951;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Вытегра 1340;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Грязовец 1952;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Кадников 2871;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Кадуй 1341;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Кириллов 1955;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Красавино 1342;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Михайловка 1947;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Никольск 1343;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Сокол 1953;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Тотьма 1954;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Устюжна 1948;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Харовск 1344;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Череповец 2205;253;24;Россия,Северо-Западный ФО,Вологодская обл.,Другое 254;254;24;Россия,Северо-Западный ФО,Калининградская обл. 2838;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Багратионовск 1345;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Балтийск 2846;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Гвардейск 2843;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Гурьевск 1346;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Гусев 1347;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Зеленоградск 1348;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Калининград 2842;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Краснознаменск 2845;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Ладушкин 2848;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Мамоново 2837;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Неман 2844;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Нестеров 1349;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Озерск 2841;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Полесск 2839;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Правдинск 1350;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Приморск 1351;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Светлогорск 1352;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Светлый 2840;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Славск 1353;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Советск 1354;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Черняховск 2231;254;24;Россия,Северо-Западный ФО,Калининградская обл.,Другое 257;257;24;Россия,Северо-Западный ФО,Ленинградская обл. 1985;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Бокситогорск 1374;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Волхов 1373;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Всеволожск 1375;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Выборг 1995;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Высоцк 1376;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Гатчина 1378;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Ивангород 1993;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Каменногорск 1379;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Кингисепп 1380;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Кириши 1381;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Кировск 1384;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Кузьмоловский 1984;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Лодейное Поле 1990;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Луга 1994;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Любань 1386;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Никольское 1987;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Новая Ладога 1996;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Отрадное 1986;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Пикалево 1983;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Подпорожье 1992;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Приморск 1988;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Приозерск 3071;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Пушкин 1989;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Светогорск 1389;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Сертолово 1991;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Сланцы 1391;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Сосновый Бор 1392;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Тихвин 1393;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Тосно 1394;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Шлиссельбург 2207;257;24;Россия,Северо-Западный ФО,Ленинградская обл.,Другое 258;258;24;Россия,Северо-Западный ФО,Мурманская обл. 1395;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Апатиты 1959;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Заполярный 1396;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Зареченск 1397;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Кандалакша 1398;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Кировск 1399;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Ковдор 1958;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Кола 1400;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Мончегорск 1401;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Мурманск 1402;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Мурмаши 1403;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Оленегорск 1404;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Полярные Зори 1956;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Полярный 1957;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Североморск 3288;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Снежногорск 2206;258;24;Россия,Северо-Западный ФО,Мурманская обл.,Другое 260;260;24;Россия,Северо-Западный ФО,Новгородская обл. 1406;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Батецкий 2001;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Боровичи 2003;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Валдай 1407;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Великий Новгород 1408;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Крестцы 2002;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Малая Вишера 1409;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Окуловка 2000;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Пестово 1997;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Сольцы 1410;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Старая Русса 1998;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Холм 1999;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Чудово 2208;260;24;Россия,Северо-Западный ФО,Новгородская обл.,Другое 261;261;24;Россия,Северо-Западный ФО,Псковская обл. 1412;261;24;Россия,Северо-Западный ФО,Псковская обл.,Великие Луки 2004;261;24;Россия,Северо-Западный ФО,Псковская обл.,Гдов 2009;261;24;Россия,Северо-Западный ФО,Псковская обл.,Дно 2005;261;24;Россия,Северо-Западный ФО,Псковская обл.,Невель 1413;261;24;Россия,Северо-Западный ФО,Псковская обл.,Новоржев 2006;261;24;Россия,Северо-Западный ФО,Псковская обл.,Опочка 2008;261;24;Россия,Северо-Западный ФО,Псковская обл.,Остров 1414;261;24;Россия,Северо-Западный ФО,Псковская обл.,Печоры 1415;261;24;Россия,Северо-Западный ФО,Псковская обл.,Порхов 1411;261;24;Россия,Северо-Западный ФО,Псковская обл.,Псков 1416;261;24;Россия,Северо-Западный ФО,Псковская обл.,Пустошка 2007;261;24;Россия,Северо-Западный ФО,Псковская обл.,Пыталово 1417;261;24;Россия,Северо-Западный ФО,Псковская обл.,Себеж 2209;261;24;Россия,Северо-Западный ФО,Псковская обл.,Другое 259;259;24;Россия,Северо-Западный ФО,Ненецкий АО 1405;259;24;Россия,Северо-Западный ФО,Ненецкий АО,Нарьян-Мар 2250;259;24;Россия,Северо-Западный ФО,Ненецкий АО,Другое 3185;259;24;Россия,Сибирский ФО 265;265;24;Россия,Сибирский ФО,Бурятия 2764;265;24;Россия,Сибирский ФО,Бурятия,Бабушкин 2760;265;24;Россия,Сибирский ФО,Бурятия,Гусиноозерск 2762;265;24;Россия,Сибирский ФО,Бурятия,Закаменск 2763;265;24;Россия,Сибирский ФО,Бурятия,Кяхта 2761;265;24;Россия,Сибирский ФО,Бурятия,Северобайкальск 1446;265;24;Россия,Сибирский ФО,Бурятия,Улан-Удэ 2222;265;24;Россия,Сибирский ФО,Бурятия,Другое 263;263;24;Россия,Сибирский ФО,Республика Алтай 1439;263;24;Россия,Сибирский ФО,Республика Алтай,Горно-Алтайск 2215;263;24;Россия,Сибирский ФО,Республика Алтай,Другое 273;273;24;Россия,Сибирский ФО,Тыва 2766;273;24;Россия,Сибирский ФО,Тыва,Ак-Довурак 1494;273;24;Россия,Сибирский ФО,Тыва,Кызыл 2768;273;24;Россия,Сибирский ФО,Тыва,Новый Шагонар 2767;273;24;Россия,Сибирский ФО,Тыва,Туран 2765;273;24;Россия,Сибирский ФО,Тыва,Чадан 2275;273;24;Россия,Сибирский ФО,Тыва,Другое 275;275;24;Россия,Сибирский ФО,Хакасия 2769;275;24;Россия,Сибирский ФО,Хакасия,Абаза 1496;275;24;Россия,Сибирский ФО,Хакасия,Абакан 1497;275;24;Россия,Сибирский ФО,Хакасия,Саяногорск 2770;275;24;Россия,Сибирский ФО,Хакасия,Сорск 2771;275;24;Россия,Сибирский ФО,Хакасия,Черногорск 2281;275;24;Россия,Сибирский ФО,Хакасия,Другое 264;264;24;Россия,Сибирский ФО,Алтайский край 1440;264;24;Россия,Сибирский ФО,Алтайский край,Алейск 1441;264;24;Россия,Сибирский ФО,Алтайский край,Барнаул 1442;264;24;Россия,Сибирский ФО,Алтайский край,Белокуриха 1443;264;24;Россия,Сибирский ФО,Алтайский край,Бийск 2728;264;24;Россия,Сибирский ФО,Алтайский край,Горняк 2731;264;24;Россия,Сибирский ФО,Алтайский край,Заринск 2729;264;24;Россия,Сибирский ФО,Алтайский край,Змеиногорск 2732;264;24;Россия,Сибирский ФО,Алтайский край,Камень-на-Оби 3292;264;24;Россия,Сибирский ФО,Алтайский край,Кулунда 2730;264;24;Россия,Сибирский ФО,Алтайский край,Новоалтайск 1444;264;24;Россия,Сибирский ФО,Алтайский край,Рубцовск 1445;264;24;Россия,Сибирский ФО,Алтайский край,Славгород 3231;264;24;Россия,Сибирский ФО,Алтайский край,Яровое 2216;264;24;Россия,Сибирский ФО,Алтайский край,Другое 268;268;24;Россия,Сибирский ФО,Красноярский край 2781;268;24;Россия,Сибирский ФО,Красноярский край,Артемовск 1469;268;24;Россия,Сибирский ФО,Красноярский край,Ачинск 2784;268;24;Россия,Сибирский ФО,Красноярский край,Боготол 2773;268;24;Россия,Сибирский ФО,Красноярский край,Бородино 2774;268;24;Россия,Сибирский ФО,Красноярский край,Дивногорск 3122;268;24;Россия,Сибирский ФО,Красноярский край,Емельяновск 2772;268;24;Россия,Сибирский ФО,Красноярский край,Енисейск 3294;268;24;Россия,Сибирский ФО,Красноярский край,Железногорск 2777;268;24;Россия,Сибирский ФО,Красноярский край,Заозерный 1470;268;24;Россия,Сибирский ФО,Красноярский край,Игарка 2778;268;24;Россия,Сибирский ФО,Красноярский край,Иланский 2782;268;24;Россия,Сибирский ФО,Красноярский край,Канск 2783;268;24;Россия,Сибирский ФО,Красноярский край,Кодинский 1471;268;24;Россия,Сибирский ФО,Красноярский край,Красноярск 1472;268;24;Россия,Сибирский ФО,Красноярский край,Лесосибирск 1473;268;24;Россия,Сибирский ФО,Красноярский край,Минусинск 2775;268;24;Россия,Сибирский ФО,Красноярский край,Назарово 2776;268;24;Россия,Сибирский ФО,Красноярский край,Сосновоборск 2780;268;24;Россия,Сибирский ФО,Красноярский край,Ужур 2779;268;24;Россия,Сибирский ФО,Красноярский край,Уяр 2785;268;24;Россия,Сибирский ФО,Красноярский край,Шарыпово 1474;268;24;Россия,Сибирский ФО,Красноярский край,Шушенское 2242;268;24;Россия,Сибирский ФО,Красноярский край,Другое 266;266;24;Россия,Сибирский ФО,Иркутская обл. 2792;266;24;Россия,Сибирский ФО,Иркутская обл.,Алзамай 1447;266;24;Россия,Сибирский ФО,Иркутская обл.,Ангарск 1448;266;24;Россия,Сибирский ФО,Иркутская обл.,Байкальск 2791;266;24;Россия,Сибирский ФО,Иркутская обл.,Бирюсинск 1450;266;24;Россия,Сибирский ФО,Иркутская обл.,Бодайбо 1451;266;24;Россия,Сибирский ФО,Иркутская обл.,Братск 2793;266;24;Россия,Сибирский ФО,Иркутская обл.,Вихоревка 2789;266;24;Россия,Сибирский ФО,Иркутская обл.,Железногорск-Илимский 2786;266;24;Россия,Сибирский ФО,Иркутская обл.,Зима 1452;266;24;Россия,Сибирский ФО,Иркутская обл.,Иркутск 2794;266;24;Россия,Сибирский ФО,Иркутская обл.,Киренск 2787;266;24;Россия,Сибирский ФО,Иркутская обл.,Нижнеудинск 1449;266;24;Россия,Сибирский ФО,Иркутская обл.,Саянск 2790;266;24;Россия,Сибирский ФО,Иркутская обл.,Свирск 1453;266;24;Россия,Сибирский ФО,Иркутская обл.,Слюдянка 2788;266;24;Россия,Сибирский ФО,Иркутская обл.,Тайшет 1454;266;24;Россия,Сибирский ФО,Иркутская обл.,Тулун 1455;266;24;Россия,Сибирский ФО,Иркутская обл.,Усолье-Сибирское 2908;266;24;Россия,Сибирский ФО,Иркутская обл.,Усольск 1456;266;24;Россия,Сибирский ФО,Иркутская обл.,Усть-Илимск 1457;266;24;Россия,Сибирский ФО,Иркутская обл.,Усть-Кут 1458;266;24;Россия,Сибирский ФО,Иркутская обл.,Хужир 1459;266;24;Россия,Сибирский ФО,Иркутская обл.,Черемхово 2795;266;24;Россия,Сибирский ФО,Иркутская обл.,Шелехов 2229;266;24;Россия,Сибирский ФО,Иркутская обл.,Другое 267;267;24;Россия,Сибирский ФО,Кемеровская обл. 2737;267;24;Россия,Сибирский ФО,Кемеровская обл.,Анжеро-Суджинск 2740;267;24;Россия,Сибирский ФО,Кемеровская обл.,Белово 2746;267;24;Россия,Сибирский ФО,Кемеровская обл.,Березовский 2739;267;24;Россия,Сибирский ФО,Кемеровская обл.,Гурьевск 2742;267;24;Россия,Сибирский ФО,Кемеровская обл.,Калтан 1460;267;24;Россия,Сибирский ФО,Кемеровская обл.,Кемерово 1461;267;24;Россия,Сибирский ФО,Кемеровская обл.,Киселевск 2738;267;24;Россия,Сибирский ФО,Кемеровская обл.,Ленинск-Кузнецкий 2745;267;24;Россия,Сибирский ФО,Кемеровская обл.,Мариинск 1462;267;24;Россия,Сибирский ФО,Кемеровская обл.,Междуреченск 1463;267;24;Россия,Сибирский ФО,Кемеровская обл.,Мыски 1464;267;24;Россия,Сибирский ФО,Кемеровская обл.,Новокузнецк 2744;267;24;Россия,Сибирский ФО,Кемеровская обл.,Осинники 3358;267;24;Россия,Сибирский ФО,Кемеровская обл.,Полысаево 1465;267;24;Россия,Сибирский ФО,Кемеровская обл.,Прокопьевск 1466;267;24;Россия,Сибирский ФО,Кемеровская обл.,Салаир 2743;267;24;Россия,Сибирский ФО,Кемеровская обл.,Тайга 2741;267;24;Россия,Сибирский ФО,Кемеровская обл.,Таштагол 1467;267;24;Россия,Сибирский ФО,Кемеровская обл.,Топки 1468;267;24;Россия,Сибирский ФО,Кемеровская обл.,Юрга 2236;267;24;Россия,Сибирский ФО,Кемеровская обл.,Другое 269;269;24;Россия,Сибирский ФО,Новосибирская обл. 1475;269;24;Россия,Сибирский ФО,Новосибирская обл.,Баган 1476;269;24;Россия,Сибирский ФО,Новосибирская обл.,Барабинск 1477;269;24;Россия,Сибирский ФО,Новосибирская обл.,Бердск 2750;269;24;Россия,Сибирский ФО,Новосибирская обл.,Болотное 1478;269;24;Россия,Сибирский ФО,Новосибирская обл.,Искитим 2752;269;24;Россия,Сибирский ФО,Новосибирская обл.,Карасук 2751;269;24;Россия,Сибирский ФО,Новосибирская обл.,Каргат 3107;269;24;Россия,Сибирский ФО,Новосибирская обл.,Краснообск 2753;269;24;Россия,Сибирский ФО,Новосибирская обл.,Куйбышев 2755;269;24;Россия,Сибирский ФО,Новосибирская обл.,Купино 1479;269;24;Россия,Сибирский ФО,Новосибирская обл.,Новосибирск 2759;269;24;Россия,Сибирский ФО,Новосибирская обл.,Обь 2756;269;24;Россия,Сибирский ФО,Новосибирская обл.,Татарск 2758;269;24;Россия,Сибирский ФО,Новосибирская обл.,Тогучин 2757;269;24;Россия,Сибирский ФО,Новосибирская обл.,Черепаново 2754;269;24;Россия,Сибирский ФО,Новосибирская обл.,Чулым 2252;269;24;Россия,Сибирский ФО,Новосибирская обл.,Другое 270;270;24;Россия,Сибирский ФО,Омская обл. 2733;270;24;Россия,Сибирский ФО,Омская обл.,Исилькуль 1480;270;24;Россия,Сибирский ФО,Омская обл.,Калачинск 1481;270;24;Россия,Сибирский ФО,Омская обл.,Марьяновка 2735;270;24;Россия,Сибирский ФО,Омская обл.,Называевск 1482;270;24;Россия,Сибирский ФО,Омская обл.,Омск 2734;270;24;Россия,Сибирский ФО,Омская обл.,Тара 2736;270;24;Россия,Сибирский ФО,Омская обл.,Тюкалинск 2253;270;24;Россия,Сибирский ФО,Омская обл.,Другое 272;272;24;Россия,Сибирский ФО,Томская обл. 1488;272;24;Россия,Сибирский ФО,Томская обл.,Асино 1489;272;24;Россия,Сибирский ФО,Томская обл.,Белый Яр 3295;272;24;Россия,Сибирский ФО,Томская обл.,Каргасок 1491;272;24;Россия,Сибирский ФО,Томская обл.,Колпашево 1492;272;24;Россия,Сибирский ФО,Томская обл.,Северск 1493;272;24;Россия,Сибирский ФО,Томская обл.,Стрежевой 1490;272;24;Россия,Сибирский ФО,Томская обл.,Томск 2273;272;24;Россия,Сибирский ФО,Томская обл.,Другое 276;276;24;Россия,Сибирский ФО,Читинская обл. 2803;276;24;Россия,Сибирский ФО,Читинская обл.,Балей 2799;276;24;Россия,Сибирский ФО,Читинская обл.,Борзя 1499;276;24;Россия,Сибирский ФО,Читинская обл.,Краснокаменск 2801;276;24;Россия,Сибирский ФО,Читинская обл.,Могоча 2800;276;24;Россия,Сибирский ФО,Читинская обл.,Нерчинск 2802;276;24;Россия,Сибирский ФО,Читинская обл.,Петровск-Забайкальский 2798;276;24;Россия,Сибирский ФО,Читинская обл.,Сретенск 2796;276;24;Россия,Сибирский ФО,Читинская обл.,Хилок 1498;276;24;Россия,Сибирский ФО,Читинская обл.,Чита 2797;276;24;Россия,Сибирский ФО,Читинская обл.,Шилка 2285;276;24;Россия,Сибирский ФО,Читинская обл.,Другое 262;262;24;Россия,Сибирский ФО,Агинский Бурятский АО 1438;262;24;Россия,Сибирский ФО,Агинский Бурятский АО,Агинское 2213;262;24;Россия,Сибирский ФО,Агинский Бурятский АО,Другое 271;271;24;Россия,Сибирский ФО,Таймырский АО 3233;271;24;Россия,Сибирский ФО,Таймырский АО,Диксон 1485;271;24;Россия,Сибирский ФО,Таймырский АО,Дудинка 1487;271;24;Россия,Сибирский ФО,Таймырский АО,Кайеркан 1483;271;24;Россия,Сибирский ФО,Таймырский АО,Норильск 1484;271;24;Россия,Сибирский ФО,Таймырский АО,Талнах 1486;271;24;Россия,Сибирский ФО,Таймырский АО,Хатанга 2269;271;24;Россия,Сибирский ФО,Таймырский АО,Другое 274;274;24;Россия,Сибирский ФО,Усть-Ордынский Бурятский АО 1495;274;24;Россия,Сибирский ФО,Усть-Ордынский Бурятский АО,Усть-Ордынский 2279;274;24;Россия,Сибирский ФО,Усть-Ордынский Бурятский АО,Другое 277;277;24;Россия,Сибирский ФО,Эвенкийский АО 1500;277;24;Россия,Сибирский ФО,Эвенкийский АО,Тура 2288;277;24;Россия,Сибирский ФО,Эвенкийский АО,Другое 3184;277;24;Россия,Уральский ФО 278;278;24;Россия,Уральский ФО,Курганская обл. 2668;278;24;Россия,Уральский ФО,Курганская обл.,Далматово 2667;278;24;Россия,Уральский ФО,Курганская обл.,Катайск 1524;278;24;Россия,Уральский ФО,Курганская обл.,Курган 2669;278;24;Россия,Уральский ФО,Курганская обл.,Куртамыш 2666;278;24;Россия,Уральский ФО,Курганская обл.,Макушино 2671;278;24;Россия,Уральский ФО,Курганская обл.,Петухово 1525;278;24;Россия,Уральский ФО,Курганская обл.,Шадринск 2670;278;24;Россия,Уральский ФО,Курганская обл.,Шумиха 2672;278;24;Россия,Уральский ФО,Курганская обл.,Щучье 2243;278;24;Россия,Уральский ФО,Курганская обл.,Другое 279;279;24;Россия,Уральский ФО,Свердловская обл. 1526;279;24;Россия,Уральский ФО,Свердловская обл.,Алапаевск 1527;279;24;Россия,Уральский ФО,Свердловская обл.,Арамиль 2691;279;24;Россия,Уральский ФО,Свердловская обл.,Артемовский 1528;279;24;Россия,Уральский ФО,Свердловская обл.,Асбест 2924;279;24;Россия,Уральский ФО,Свердловская обл.,Белоярский 2707;279;24;Россия,Уральский ФО,Свердловская обл.,Березовский 1529;279;24;Россия,Уральский ФО,Свердловская обл.,Богданович 2698;279;24;Россия,Уральский ФО,Свердловская обл.,Верхний Тагил 1530;279;24;Россия,Уральский ФО,Свердловская обл.,Верхняя Пышма 1531;279;24;Россия,Уральский ФО,Свердловская обл.,Верхняя Салда 1532;279;24;Россия,Уральский ФО,Свердловская обл.,Верхняя Синячиха 2696;279;24;Россия,Уральский ФО,Свердловская обл.,Верхняя Тура 2692;279;24;Россия,Уральский ФО,Свердловская обл.,Верхотурье 2706;279;24;Россия,Уральский ФО,Свердловская обл.,Волчанск 2709;279;24;Россия,Уральский ФО,Свердловская обл.,Дегтярск 1533;279;24;Россия,Уральский ФО,Свердловская обл.,Екатеринбург 1534;279;24;Россия,Уральский ФО,Свердловская обл.,Заречный 1535;279;24;Россия,Уральский ФО,Свердловская обл.,Ивдель 1536;279;24;Россия,Уральский ФО,Свердловская обл.,Ирбит 1537;279;24;Россия,Уральский ФО,Свердловская обл.,Каменск-Уральский 1538;279;24;Россия,Уральский ФО,Свердловская обл.,Камышлов 2708;279;24;Россия,Уральский ФО,Свердловская обл.,Карпинск 1539;279;24;Россия,Уральский ФО,Свердловская обл.,Качканар 2712;279;24;Россия,Уральский ФО,Свердловская обл.,Кировград 1540;279;24;Россия,Уральский ФО,Свердловская обл.,Краснотурьинск 2694;279;24;Россия,Уральский ФО,Свердловская обл.,Красноуральск 2693;279;24;Россия,Уральский ФО,Свердловская обл.,Красноуфимск 1541;279;24;Россия,Уральский ФО,Свердловская обл.,Кушва 2711;279;24;Россия,Уральский ФО,Свердловская обл.,Михайловск 2713;279;24;Россия,Уральский ФО,Свердловская обл.,Михайловск 1542;279;24;Россия,Уральский ФО,Свердловская обл.,Невьянск 2702;279;24;Россия,Уральский ФО,Свердловская обл.,Нижние Серги 1543;279;24;Россия,Уральский ФО,Свердловская обл.,Нижний Тагил 2695;279;24;Россия,Уральский ФО,Свердловская обл.,Нижняя Салда 2697;279;24;Россия,Уральский ФО,Свердловская обл.,Нижняя Тура 2699;279;24;Россия,Уральский ФО,Свердловская обл.,Новая Ляля 2909;279;24;Россия,Уральский ФО,Свердловская обл.,Новоуральск 1544;279;24;Россия,Уральский ФО,Свердловская обл.,Первоуральск 1545;279;24;Россия,Уральский ФО,Свердловская обл.,Полевской 1546;279;24;Россия,Уральский ФО,Свердловская обл.,Ревда 1547;279;24;Россия,Уральский ФО,Свердловская обл.,Реж 3296;279;24;Россия,Уральский ФО,Свердловская обл.,Рефтинский 2700;279;24;Россия,Уральский ФО,Свердловская обл.,Североуральск 1548;279;24;Россия,Уральский ФО,Свердловская обл.,Серов 2710;279;24;Россия,Уральский ФО,Свердловская обл.,Среднеуральск 2701;279;24;Россия,Уральский ФО,Свердловская обл.,Сухой Лог 2703;279;24;Россия,Уральский ФО,Свердловская обл.,Сысерть 1549;279;24;Россия,Уральский ФО,Свердловская обл.,Тавда 2704;279;24;Россия,Уральский ФО,Свердловская обл.,Талица 2705;279;24;Россия,Уральский ФО,Свердловская обл.,Туринск 2265;279;24;Россия,Уральский ФО,Свердловская обл.,Другое 280;280;24;Россия,Уральский ФО,Тюменская обл. 1550;280;24;Россия,Уральский ФО,Тюменская обл.,Заводоуковск 1551;280;24;Россия,Уральский ФО,Тюменская обл.,Ишим 3326;280;24;Россия,Уральский ФО,Тюменская обл.,Сургут 1552;280;24;Россия,Уральский ФО,Тюменская обл.,Тобольск 1553;280;24;Россия,Уральский ФО,Тюменская обл.,Тюмень 2748;280;24;Россия,Уральский ФО,Тюменская обл.,Ялуторовск 2276;280;24;Россия,Уральский ФО,Тюменская обл.,Другое 282;282;24;Россия,Уральский ФО,Челябинская обл. 1564;282;24;Россия,Уральский ФО,Челябинская обл.,Аша 2723;282;24;Россия,Уральский ФО,Челябинская обл.,Бакал 2724;282;24;Россия,Уральский ФО,Челябинская обл.,Верхнеуральск 2716;282;24;Россия,Уральский ФО,Челябинская обл.,Верхний Уфалей 3297;282;24;Россия,Уральский ФО,Челябинская обл.,Всеволожск 2725;282;24;Россия,Уральский ФО,Челябинская обл.,Еманжелинск 1565;282;24;Россия,Уральский ФО,Челябинская обл.,Златоуст 2722;282;24;Россия,Уральский ФО,Челябинская обл.,Карабаш 1566;282;24;Россия,Уральский ФО,Челябинская обл.,Карталы 2718;282;24;Россия,Уральский ФО,Челябинская обл.,Касли 2720;282;24;Россия,Уральский ФО,Челябинская обл.,Катав-Ивановск 1567;282;24;Россия,Уральский ФО,Челябинская обл.,Копейск 2721;282;24;Россия,Уральский ФО,Челябинская обл.,Коркино 2715;282;24;Россия,Уральский ФО,Челябинская обл.,Куса 1568;282;24;Россия,Уральский ФО,Челябинская обл.,Кыштым 1569;282;24;Россия,Уральский ФО,Челябинская обл.,Магнитогорск 1570;282;24;Россия,Уральский ФО,Челябинская обл.,Миасс 2726;282;24;Россия,Уральский ФО,Челябинская обл.,Миньяр 2717;282;24;Россия,Уральский ФО,Челябинская обл.,Нязепетровск 3100;282;24;Россия,Уральский ФО,Челябинская обл.,Озерск 1571;282;24;Россия,Уральский ФО,Челябинская обл.,Пласт 2719;282;24;Россия,Уральский ФО,Челябинская обл.,Сатка 2727;282;24;Россия,Уральский ФО,Челябинская обл.,Сим 1572;282;24;Россия,Уральский ФО,Челябинская обл.,Снежинск 3332;282;24;Россия,Уральский ФО,Челябинская обл.,Трехгорный 1573;282;24;Россия,Уральский ФО,Челябинская обл.,Троицк 1574;282;24;Россия,Уральский ФО,Челябинская обл.,Усть-Катав 1575;282;24;Россия,Уральский ФО,Челябинская обл.,Чебаркуль 1576;282;24;Россия,Уральский ФО,Челябинская обл.,Челябинск 1577;282;24;Россия,Уральский ФО,Челябинская обл.,Южноуральск 2714;282;24;Россия,Уральский ФО,Челябинская обл.,Юрюзань 2283;282;24;Россия,Уральский ФО,Челябинская обл.,Другое 281;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра 2749;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Белоярский 1554;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Игрим 1555;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Когалым 1556;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Лангепас 1561;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Мегион 1562;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нефтеюганск 1559;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нижневартовск 2852;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нягань 2853;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Нягань 2854;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Пыть-Ях 1560;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Радужный 1563;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Советский 2747;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Сургут 1557;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Урай 1558;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Ханты-Мансийск 3344;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Югорск 2282;281;24;Россия,Уральский ФО,Ханты-Мансийский АО - Югра,Другое 283;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО 3298;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Губкинский 1578;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Лабытнанги 2856;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Муравленко 1579;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Надым 1580;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Новый Уренгой 1581;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Ноябрьск 1582;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Салехард 1583;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Уренгой 2289;283;24;Россия,Уральский ФО,Ямало-Ненецкий АО,Другое 3180;283;24;Россия,Центральный ФО 284;284;24;Россия,Центральный ФО,Белгородская обл. 1625;284;24;Россия,Центральный ФО,Белгородская обл.,Алексеевка 1626;284;24;Россия,Центральный ФО,Белгородская обл.,Белгород 2172;284;24;Россия,Центральный ФО,Белгородская обл.,Валуйки 2173;284;24;Россия,Центральный ФО,Белгородская обл.,Грайворон 1627;284;24;Россия,Центральный ФО,Белгородская обл.,Губкин 2174;284;24;Россия,Центральный ФО,Белгородская обл.,Короча 2175;284;24;Россия,Центральный ФО,Белгородская обл.,Новый Оскол 1628;284;24;Россия,Центральный ФО,Белгородская обл.,Старый Оскол 1629;284;24;Россия,Центральный ФО,Белгородская обл.,Шебекино 2221;284;24;Россия,Центральный ФО,Белгородская обл.,Другое 285;285;24;Россия,Центральный ФО,Брянская обл. 1630;285;24;Россия,Центральный ФО,Брянская обл.,Брянск 3283;285;24;Россия,Центральный ФО,Брянская обл.,Дебрянск 1631;285;24;Россия,Центральный ФО,Брянская обл.,Дятьково 2013;285;24;Россия,Центральный ФО,Брянская обл.,Жуковка 2015;285;24;Россия,Центральный ФО,Брянская обл.,Злынка 1632;285;24;Россия,Центральный ФО,Брянская обл.,Карачев 1633;285;24;Россия,Центральный ФО,Брянская обл.,Клинцы 1634;285;24;Россия,Центральный ФО,Брянская обл.,Мглин 2016;285;24;Россия,Центральный ФО,Брянская обл.,Новозыбков 2018;285;24;Россия,Центральный ФО,Брянская обл.,Почеп 2017;285;24;Россия,Центральный ФО,Брянская обл.,Севск 2020;285;24;Россия,Центральный ФО,Брянская обл.,Сельцо 2014;285;24;Россия,Центральный ФО,Брянская обл.,Стародуб 2010;285;24;Россия,Центральный ФО,Брянская обл.,Сураж 2012;285;24;Россия,Центральный ФО,Брянская обл.,Трубчевск 2011;285;24;Россия,Центральный ФО,Брянская обл.,Унеча 2019;285;24;Россия,Центральный ФО,Брянская обл.,Фокино 2210;285;24;Россия,Центральный ФО,Брянская обл.,Другое 286;286;24;Россия,Центральный ФО,Владимирская обл. 1635;286;24;Россия,Центральный ФО,Владимирская обл.,Александров 1636;286;24;Россия,Центральный ФО,Владимирская обл.,Владимир 2021;286;24;Россия,Центральный ФО,Владимирская обл.,Вязники 1637;286;24;Россия,Центральный ФО,Владимирская обл.,Головино 2022;286;24;Россия,Центральный ФО,Владимирская обл.,Гороховец 1638;286;24;Россия,Центральный ФО,Владимирская обл.,Гусь-Хрустальный 2023;286;24;Россия,Центральный ФО,Владимирская обл.,Камешково 2031;286;24;Россия,Центральный ФО,Владимирская обл.,Карабаново 2024;286;24;Россия,Центральный ФО,Владимирская обл.,Киржач 1639;286;24;Россия,Центральный ФО,Владимирская обл.,Ковров 1640;286;24;Россия,Центральный ФО,Владимирская обл.,Кольчугино 2026;286;24;Россия,Центральный ФО,Владимирская обл.,Костерево 3299;286;24;Россия,Центральный ФО,Владимирская обл.,Красная Горбатка 2033;286;24;Россия,Центральный ФО,Владимирская обл.,Лакинск 2025;286;24;Россия,Центральный ФО,Владимирская обл.,Меленки 1641;286;24;Россия,Центральный ФО,Владимирская обл.,Муром 1642;286;24;Россия,Центральный ФО,Владимирская обл.,Петушки 2027;286;24;Россия,Центральный ФО,Владимирская обл.,Покров 2211;286;24;Россия,Центральный ФО,Владимирская обл.,Радужный 2028;286;24;Россия,Центральный ФО,Владимирская обл.,Собинка 2032;286;24;Россия,Центральный ФО,Владимирская обл.,Струнино 2029;286;24;Россия,Центральный ФО,Владимирская обл.,Судогда 1643;286;24;Россия,Центральный ФО,Владимирская обл.,Суздаль 2030;286;24;Россия,Центральный ФО,Владимирская обл.,Юрьев-Польский 2212;286;24;Россия,Центральный ФО,Владимирская обл.,Другое 287;287;24;Россия,Центральный ФО,Воронежская обл. 1644;287;24;Россия,Центральный ФО,Воронежская обл.,Бобров 1645;287;24;Россия,Центральный ФО,Воронежская обл.,Богучар 1646;287;24;Россия,Центральный ФО,Воронежская обл.,Борисоглебск 1647;287;24;Россия,Центральный ФО,Воронежская обл.,Бутурлиновка 1648;287;24;Россия,Центральный ФО,Воронежская обл.,Воронеж 2178;287;24;Россия,Центральный ФО,Воронежская обл.,Калач 2176;287;24;Россия,Центральный ФО,Воронежская обл.,Лиски 1649;287;24;Россия,Центральный ФО,Воронежская обл.,Нововоронеж 2177;287;24;Россия,Центральный ФО,Воронежская обл.,Новохоперск 2180;287;24;Россия,Центральный ФО,Воронежская обл.,Острогожск 1650;287;24;Россия,Центральный ФО,Воронежская обл.,Павловск 2181;287;24;Россия,Центральный ФО,Воронежская обл.,Поворино 1651;287;24;Россия,Центральный ФО,Воронежская обл.,Россошь 2179;287;24;Россия,Центральный ФО,Воронежская обл.,Семилуки 2182;287;24;Россия,Центральный ФО,Воронежская обл.,Эртиль 2224;287;24;Россия,Центральный ФО,Воронежская обл.,Другое 288;288;24;Россия,Центральный ФО,Ивановская обл. 1652;288;24;Россия,Центральный ФО,Ивановская обл.,Вичуга 2036;288;24;Россия,Центральный ФО,Ивановская обл.,Гаврилов Посад 1657;288;24;Россия,Центральный ФО,Ивановская обл.,Заволжск 1653;288;24;Россия,Центральный ФО,Ивановская обл.,Иваново 1656;288;24;Россия,Центральный ФО,Ивановская обл.,Кинешма 2040;288;24;Россия,Центральный ФО,Ивановская обл.,Комсомольск 2037;288;24;Россия,Центральный ФО,Ивановская обл.,Кохма 2043;288;24;Россия,Центральный ФО,Ивановская обл.,Наволоки 3300;288;24;Россия,Центральный ФО,Ивановская обл.,Палех 2039;288;24;Россия,Центральный ФО,Ивановская обл.,Плес 2038;288;24;Россия,Центральный ФО,Ивановская обл.,Приволжск 2042;288;24;Россия,Центральный ФО,Ивановская обл.,Пучеж 2044;288;24;Россия,Центральный ФО,Ивановская обл.,Родники 1655;288;24;Россия,Центральный ФО,Ивановская обл.,Тейково 2034;288;24;Россия,Центральный ФО,Ивановская обл.,Фурманов 1654;288;24;Россия,Центральный ФО,Ивановская обл.,Шуя 2041;288;24;Россия,Центральный ФО,Ивановская обл.,Южа 2035;288;24;Россия,Центральный ФО,Ивановская обл.,Юрьевец 2227;288;24;Россия,Центральный ФО,Ивановская обл.,Другое 289;289;24;Россия,Центральный ФО,Калужская обл. 2050;289;24;Россия,Центральный ФО,Калужская обл.,Балабаново 2051;289;24;Россия,Центральный ФО,Калужская обл.,Боровск 3301;289;24;Россия,Центральный ФО,Калужская обл.,Воротынск 2052;289;24;Россия,Центральный ФО,Калужская обл.,Жиздра 1660;289;24;Россия,Центральный ФО,Калужская обл.,Жуковка 1658;289;24;Россия,Центральный ФО,Калужская обл.,Калуга 2046;289;24;Россия,Центральный ФО,Калужская обл.,Киров 1661;289;24;Россия,Центральный ФО,Калужская обл.,Козельск 2053;289;24;Россия,Центральный ФО,Калужская обл.,Кондрово 2049;289;24;Россия,Центральный ФО,Калужская обл.,Людиново 1659;289;24;Россия,Центральный ФО,Калужская обл.,Малоярославец 2054;289;24;Россия,Центральный ФО,Калужская обл.,Медынь 2055;289;24;Россия,Центральный ФО,Калужская обл.,Мещовск 2047;289;24;Россия,Центральный ФО,Калужская обл.,Мосальск 1662;289;24;Россия,Центральный ФО,Калужская обл.,Обнинск 2057;289;24;Россия,Центральный ФО,Калужская обл.,Сосенский 2056;289;24;Россия,Центральный ФО,Калужская обл.,Спас-Демянск 2045;289;24;Россия,Центральный ФО,Калужская обл.,Сухиничи 1663;289;24;Россия,Центральный ФО,Калужская обл.,Таруса 2131;289;24;Россия,Центральный ФО,Калужская обл.,Чекалин 2048;289;24;Россия,Центральный ФО,Калужская обл.,Юхнов 2233;289;24;Россия,Центральный ФО,Калужская обл.,Другое 290;290;24;Россия,Центральный ФО,Костромская обл. 1664;290;24;Россия,Центральный ФО,Костромская обл.,Буй 1665;290;24;Россия,Центральный ФО,Костромская обл.,Волгореченск 1666;290;24;Россия,Центральный ФО,Костромская обл.,Галич 2059;290;24;Россия,Центральный ФО,Костромская обл.,Кологрив 1667;290;24;Россия,Центральный ФО,Костромская обл.,Кострома 3302;290;24;Россия,Центральный ФО,Костромская обл.,Красное-на-Волге 1668;290;24;Россия,Центральный ФО,Костромская обл.,Макарьев 2060;290;24;Россия,Центральный ФО,Костромская обл.,Мантурово 1669;290;24;Россия,Центральный ФО,Костромская обл.,Нерехта 2061;290;24;Россия,Центральный ФО,Костромская обл.,Нея 2062;290;24;Россия,Центральный ФО,Костромская обл.,Солигалич 2058;290;24;Россия,Центральный ФО,Костромская обл.,Чухлома 1670;290;24;Россия,Центральный ФО,Костромская обл.,Шарья 2240;290;24;Россия,Центральный ФО,Костромская обл.,Другое 291;291;24;Россия,Центральный ФО,Курская обл. 1671;291;24;Россия,Центральный ФО,Курская обл.,Дмитриев-Льговский 1673;291;24;Россия,Центральный ФО,Курская обл.,Железногорск 3279;291;24;Россия,Центральный ФО,Курская обл.,Железногорск 1672;291;24;Россия,Центральный ФО,Курская обл.,Курск 2187;291;24;Россия,Центральный ФО,Курская обл.,Курчатов 2188;291;24;Россия,Центральный ФО,Курская обл.,Льгов 2184;291;24;Россия,Центральный ФО,Курская обл.,Обоянь 2185;291;24;Россия,Центральный ФО,Курская обл.,Рыльск 2183;291;24;Россия,Центральный ФО,Курская обл.,Суджа 2189;291;24;Россия,Центральный ФО,Курская обл.,Фатеж 2186;291;24;Россия,Центральный ФО,Курская обл.,Щигры 2244;291;24;Россия,Центральный ФО,Курская обл.,Другое 292;292;24;Россия,Центральный ФО,Липецкая обл. 2194;292;24;Россия,Центральный ФО,Липецкая обл.,Грязи 2193;292;24;Россия,Центральный ФО,Липецкая обл.,Данков 1674;292;24;Россия,Центральный ФО,Липецкая обл.,Елец 2190;292;24;Россия,Центральный ФО,Липецкая обл.,Задонск 2195;292;24;Россия,Центральный ФО,Липецкая обл.,Лебедянь 1675;292;24;Россия,Центральный ФО,Липецкая обл.,Липецк 2192;292;24;Россия,Центральный ФО,Липецкая обл.,Усмань 2191;292;24;Россия,Центральный ФО,Липецкая обл.,Чаплыгин 2245;292;24;Россия,Центральный ФО,Липецкая обл.,Другое 293;293;24;Россия,Центральный ФО,Московская обл. 1733;293;24;Россия,Центральный ФО,Московская обл.,Апрелевка 1732;293;24;Россия,Центральный ФО,Московская обл.,Балашиха 1731;293;24;Россия,Центральный ФО,Московская обл.,Бронницы 1730;293;24;Россия,Центральный ФО,Московская обл.,Верея 2063;293;24;Россия,Центральный ФО,Московская обл.,Видное 2064;293;24;Россия,Центральный ФО,Московская обл.,Волоколамск 1729;293;24;Россия,Центральный ФО,Московская обл.,Воскресенск 1728;293;24;Россия,Центральный ФО,Московская обл.,Высоковск 1727;293;24;Россия,Центральный ФО,Московская обл.,Голицыно 2065;293;24;Россия,Центральный ФО,Московская обл.,Дедовск 1726;293;24;Россия,Центральный ФО,Московская обл.,Дзержинский 1725;293;24;Россия,Центральный ФО,Московская обл.,Дмитров 1724;293;24;Россия,Центральный ФО,Московская обл.,Долгопрудный 1723;293;24;Россия,Центральный ФО,Московская обл.,Домодедово 2066;293;24;Россия,Центральный ФО,Московская обл.,Дрезна 1722;293;24;Россия,Центральный ФО,Московская обл.,Дубна 1721;293;24;Россия,Центральный ФО,Московская обл.,Егорьевск 1720;293;24;Россия,Центральный ФО,Московская обл.,Железнодорожный 1719;293;24;Россия,Центральный ФО,Московская обл.,Жуковский 2067;293;24;Россия,Центральный ФО,Московская обл.,Зарайск 1718;293;24;Россия,Центральный ФО,Московская обл.,Звенигород 1715;293;24;Россия,Центральный ФО,Московская обл.,Ивантеевка 1717;293;24;Россия,Центральный ФО,Московская обл.,Истра 2068;293;24;Россия,Центральный ФО,Московская обл.,Калининград 2069;293;24;Россия,Центральный ФО,Московская обл.,Кашира 1716;293;24;Россия,Центральный ФО,Московская обл.,Климовск 1714;293;24;Россия,Центральный ФО,Московская обл.,Клин 1713;293;24;Россия,Центральный ФО,Московская обл.,Коломна 1712;293;24;Россия,Центральный ФО,Московская обл.,Королев 1711;293;24;Россия,Центральный ФО,Московская обл.,Красноармейск 1710;293;24;Россия,Центральный ФО,Московская обл.,Красногорск 2070;293;24;Россия,Центральный ФО,Московская обл.,Краснозаводск 2071;293;24;Россия,Центральный ФО,Московская обл.,Куровское 1709;293;24;Россия,Центральный ФО,Московская обл.,Ликино-Дулево 1708;293;24;Россия,Центральный ФО,Московская обл.,Лобня 2072;293;24;Россия,Центральный ФО,Московская обл.,Лосино-Петровский 1707;293;24;Россия,Центральный ФО,Московская обл.,Луховицы 1706;293;24;Россия,Центральный ФО,Московская обл.,Лыткарино 1705;293;24;Россия,Центральный ФО,Московская обл.,Люберцы 1704;293;24;Россия,Центральный ФО,Московская обл.,Менделеево 1703;293;24;Россия,Центральный ФО,Московская обл.,Можайск 1702;293;24;Россия,Центральный ФО,Московская обл.,Мытищи 1701;293;24;Россия,Центральный ФО,Московская обл.,Наро-Фоминск 1700;293;24;Россия,Центральный ФО,Московская обл.,Ногинск 1698;293;24;Россия,Центральный ФО,Московская обл.,Одинцово 2073;293;24;Россия,Центральный ФО,Московская обл.,Ожерелье 2074;293;24;Россия,Центральный ФО,Московская обл.,Озеры 1699;293;24;Россия,Центральный ФО,Московская обл.,Орехово-Зуево 1697;293;24;Россия,Центральный ФО,Московская обл.,Павловский Посад 1696;293;24;Россия,Центральный ФО,Московская обл.,Подольск 1695;293;24;Россия,Центральный ФО,Московская обл.,Протвино 1694;293;24;Россия,Центральный ФО,Московская обл.,Пушкино 1693;293;24;Россия,Центральный ФО,Московская обл.,Пущино 1692;293;24;Россия,Центральный ФО,Московская обл.,Раменское 1691;293;24;Россия,Центральный ФО,Московская обл.,Реутов 1690;293;24;Россия,Центральный ФО,Московская обл.,Решетников 2075;293;24;Россия,Центральный ФО,Московская обл.,Рошаль 2076;293;24;Россия,Центральный ФО,Московская обл.,Руза 1689;293;24;Россия,Центральный ФО,Московская обл.,Сергиев Посад 1688;293;24;Россия,Центральный ФО,Московская обл.,Серпухов 1687;293;24;Россия,Центральный ФО,Московская обл.,Солнечногорск 1686;293;24;Россия,Центральный ФО,Московская обл.,Ступино 2077;293;24;Россия,Центральный ФО,Московская обл.,Сходня 2078;293;24;Россия,Центральный ФО,Московская обл.,Талдом 1685;293;24;Россия,Центральный ФО,Московская обл.,Троицк 1684;293;24;Россия,Центральный ФО,Московская обл.,Фрязино 1683;293;24;Россия,Центральный ФО,Московская обл.,Химки 1682;293;24;Россия,Центральный ФО,Московская обл.,Хотьково 1681;293;24;Россия,Центральный ФО,Московская обл.,Черноголовка 1680;293;24;Россия,Центральный ФО,Московская обл.,Чехов 1679;293;24;Россия,Центральный ФО,Московская обл.,Шатура 1678;293;24;Россия,Центральный ФО,Московская обл.,Щелково 2080;293;24;Россия,Центральный ФО,Московская обл.,Щербинка 1677;293;24;Россия,Центральный ФО,Московская обл.,Электрогорск 1676;293;24;Россия,Центральный ФО,Московская обл.,Электросталь 2079;293;24;Россия,Центральный ФО,Московская обл.,Электроугли 3031;293;24;Россия,Центральный ФО,Московская обл.,Юбилейный 2081;293;24;Россия,Центральный ФО,Московская обл.,Яхрома 2249;293;24;Россия,Центральный ФО,Московская обл.,Другое 294;294;24;Россия,Центральный ФО,Орловская обл. 2083;294;24;Россия,Центральный ФО,Орловская обл.,Болхов 2082;294;24;Россия,Центральный ФО,Орловская обл.,Дмитровск-Орловский 3160;294;24;Россия,Центральный ФО,Орловская обл.,Залегощь 1736;294;24;Россия,Центральный ФО,Орловская обл.,Ливны 2084;294;24;Россия,Центральный ФО,Орловская обл.,Малоархангельск 1737;294;24;Россия,Центральный ФО,Орловская обл.,Мценск 2085;294;24;Россия,Центральный ФО,Орловская обл.,Новосиль 1735;294;24;Россия,Центральный ФО,Орловская обл.,Орел 2255;294;24;Россия,Центральный ФО,Орловская обл.,Другое 295;295;24;Россия,Центральный ФО,Рязанская обл. 1740;295;24;Россия,Центральный ФО,Рязанская обл.,Гусь-Железный 1741;295;24;Россия,Центральный ФО,Рязанская обл.,Касимов 2086;295;24;Россия,Центральный ФО,Рязанская обл.,Кораблино 2087;295;24;Россия,Центральный ФО,Рязанская обл.,Михайлов 2089;295;24;Россия,Центральный ФО,Рязанская обл.,Новомичуринск 2091;295;24;Россия,Центральный ФО,Рязанская обл.,Рыбное 2093;295;24;Россия,Центральный ФО,Рязанская обл.,Ряжск 1738;295;24;Россия,Центральный ФО,Рязанская обл.,Рязань 3305;295;24;Россия,Центральный ФО,Рязанская обл.,Сапожок 1739;295;24;Россия,Центральный ФО,Рязанская обл.,Сасово 2090;295;24;Россия,Центральный ФО,Рязанская обл.,Скопин 2088;295;24;Россия,Центральный ФО,Рязанская обл.,Спас-Клепики 2092;295;24;Россия,Центральный ФО,Рязанская обл.,Спасск-Рязанский 2094;295;24;Россия,Центральный ФО,Рязанская обл.,Шацк 3320;295;24;Россия,Центральный ФО,Рязанская обл.,Шилово 2260;295;24;Россия,Центральный ФО,Рязанская обл.,Другое 296;296;24;Россия,Центральный ФО,Смоленская обл. 2095;296;24;Россия,Центральный ФО,Смоленская обл.,Велиж 1743;296;24;Россия,Центральный ФО,Смоленская обл.,Вязьма 1744;296;24;Россия,Центральный ФО,Смоленская обл.,Гагарин 2096;296;24;Россия,Центральный ФО,Смоленская обл.,Демидов 1745;296;24;Россия,Центральный ФО,Смоленская обл.,Десногорск 1746;296;24;Россия,Центральный ФО,Смоленская обл.,Дорогубуж 2097;296;24;Россия,Центральный ФО,Смоленская обл.,Духовщина 2098;296;24;Россия,Центральный ФО,Смоленская обл.,Ельня 2099;296;24;Россия,Центральный ФО,Смоленская обл.,Починок 2100;296;24;Россия,Центральный ФО,Смоленская обл.,Рославль 2101;296;24;Россия,Центральный ФО,Смоленская обл.,Рудня 1747;296;24;Россия,Центральный ФО,Смоленская обл.,Сафоново 1742;296;24;Россия,Центральный ФО,Смоленская обл.,Смоленск 2102;296;24;Россия,Центральный ФО,Смоленская обл.,Сычевка 1748;296;24;Россия,Центральный ФО,Смоленская обл.,Ярцево 2267;296;24;Россия,Центральный ФО,Смоленская обл.,Другое 297;297;24;Россия,Центральный ФО,Тамбовская обл. 2198;297;24;Россия,Центральный ФО,Тамбовская обл.,Жердевка 2199;297;24;Россия,Центральный ФО,Тамбовская обл.,Кирсанов 1752;297;24;Россия,Центральный ФО,Тамбовская обл.,Котовск 1751;297;24;Россия,Центральный ФО,Тамбовская обл.,Мичуринск 2196;297;24;Россия,Центральный ФО,Тамбовская обл.,Моршанск 1750;297;24;Россия,Центральный ФО,Тамбовская обл.,Рассказово 3271;297;24;Россия,Центральный ФО,Тамбовская обл.,Сатинка 1749;297;24;Россия,Центральный ФО,Тамбовская обл.,Тамбов 3272;297;24;Россия,Центральный ФО,Тамбовская обл.,Тулиновка 2197;297;24;Россия,Центральный ФО,Тамбовская обл.,Уварово 2270;297;24;Россия,Центральный ФО,Тамбовская обл.,Другое 298;298;24;Россия,Центральный ФО,Тверская обл. 2103;298;24;Россия,Центральный ФО,Тверская обл.,Андреаполь 2104;298;24;Россия,Центральный ФО,Тверская обл.,Бежецк 2105;298;24;Россия,Центральный ФО,Тверская обл.,Белый 2106;298;24;Россия,Центральный ФО,Тверская обл.,Бологое 2107;298;24;Россия,Центральный ФО,Тверская обл.,Весьегонск 1753;298;24;Россия,Центральный ФО,Тверская обл.,Вышний Волочек 2108;298;24;Россия,Центральный ФО,Тверская обл.,Западная Двина 2109;298;24;Россия,Центральный ФО,Тверская обл.,Зубцов 2110;298;24;Россия,Центральный ФО,Тверская обл.,Калязин 2111;298;24;Россия,Центральный ФО,Тверская обл.,Кашин 1758;298;24;Россия,Центральный ФО,Тверская обл.,Кимры 1756;298;24;Россия,Центральный ФО,Тверская обл.,Конаково 2112;298;24;Россия,Центральный ФО,Тверская обл.,Красный Холм 1759;298;24;Россия,Центральный ФО,Тверская обл.,Кувшиново 1760;298;24;Россия,Центральный ФО,Тверская обл.,Лихославль 1761;298;24;Россия,Центральный ФО,Тверская обл.,Нелидово 2113;298;24;Россия,Центральный ФО,Тверская обл.,Осташков 1757;298;24;Россия,Центральный ФО,Тверская обл.,Ржев 2114;298;24;Россия,Центральный ФО,Тверская обл.,Старица 1754;298;24;Россия,Центральный ФО,Тверская обл.,Тверь 2115;298;24;Россия,Центральный ФО,Тверская обл.,Торжок 2116;298;24;Россия,Центральный ФО,Тверская обл.,Торопец 1755;298;24;Россия,Центральный ФО,Тверская обл.,Удомля 2272;298;24;Россия,Центральный ФО,Тверская обл.,Другое 299;299;24;Россия,Центральный ФО,Тульская обл. 2127;299;24;Россия,Центральный ФО,Тульская обл.,Алексин 2126;299;24;Россия,Центральный ФО,Тульская обл.,Белев 2118;299;24;Россия,Центральный ФО,Тульская обл.,Богородицк 2122;299;24;Россия,Центральный ФО,Тульская обл.,Болохово 2129;299;24;Россия,Центральный ФО,Тульская обл.,Венев 1762;299;24;Россия,Центральный ФО,Тульская обл.,Донской 2128;299;24;Россия,Центральный ФО,Тульская обл.,Ефремов 3354;299;24;Россия,Центральный ФО,Тульская обл.,Заокский 2124;299;24;Россия,Центральный ФО,Тульская обл.,Киреевск 1763;299;24;Россия,Центральный ФО,Тульская обл.,Климовск 2123;299;24;Россия,Центральный ФО,Тульская обл.,Липки 1764;299;24;Россия,Центральный ФО,Тульская обл.,Новомосковск 2117;299;24;Россия,Центральный ФО,Тульская обл.,Плавск 2130;299;24;Россия,Центральный ФО,Тульская обл.,Северо-Задонск 2120;299;24;Россия,Центральный ФО,Тульская обл.,Советск 2119;299;24;Россия,Центральный ФО,Тульская обл.,Сокольники 2125;299;24;Россия,Центральный ФО,Тульская обл.,Суворов 1765;299;24;Россия,Центральный ФО,Тульская обл.,Тула 1766;299;24;Россия,Центральный ФО,Тульская обл.,Узловая 2121;299;24;Россия,Центральный ФО,Тульская обл.,Щекино 1767;299;24;Россия,Центральный ФО,Тульская обл.,Ясногорск 2274;299;24;Россия,Центральный ФО,Тульская обл.,Другое 300;300;24;Россия,Центральный ФО,Ярославская обл. 3053;300;24;Россия,Центральный ФО,Ярославская обл.,Большое Село 3268;300;24;Россия,Центральный ФО,Ярославская обл.,Брейтово 1773;300;24;Россия,Центральный ФО,Ярославская обл.,Гаврилов-Ям 2132;300;24;Россия,Центральный ФО,Ярославская обл.,Данилов 3269;300;24;Россия,Центральный ФО,Ярославская обл.,Красные Ткачи 2133;300;24;Россия,Центральный ФО,Ярославская обл.,Любим 3270;300;24;Россия,Центральный ФО,Ярославская обл.,Мокеевское 1774;300;24;Россия,Центральный ФО,Ярославская обл.,Мышкин 2994;300;24;Россия,Центральный ФО,Ярославская обл.,Некоуз 1775;300;24;Россия,Центральный ФО,Ярославская обл.,Переславль-Залесский 2134;300;24;Россия,Центральный ФО,Ярославская обл.,Пошехонье 1769;300;24;Россия,Центральный ФО,Ярославская обл.,Ростов 1771;300;24;Россия,Центральный ФО,Ярославская обл.,Рыбинск 1772;300;24;Россия,Центральный ФО,Ярославская обл.,Тутаев 1770;300;24;Россия,Центральный ФО,Ярославская обл.,Углич 1768;300;24;Россия,Центральный ФО,Ярославская обл.,Ярославль 2290;300;24;Россия,Центральный ФО,Ярославская обл.,Другое 3182;300;24;Россия,Южный ФО 301;301;24;Россия,Южный ФО,Адыгея 2849;301;24;Россия,Южный ФО,Адыгея,Адыгейск 1776;301;24;Россия,Южный ФО,Адыгея,Майкоп 2214;301;24;Россия,Южный ФО,Адыгея,Другое 304;304;24;Россия,Южный ФО,Дагестан 2617;304;24;Россия,Южный ФО,Дагестан,Буйнакск 1791;304;24;Россия,Южный ФО,Дагестан,Гуниб 1788;304;24;Россия,Южный ФО,Дагестан,Дербент 2619;304;24;Россия,Южный ФО,Дагестан,Избербаш 1789;304;24;Россия,Южный ФО,Дагестан,Каспийск 2618;304;24;Россия,Южный ФО,Дагестан,Кизилюрт 1790;304;24;Россия,Южный ФО,Дагестан,Кизляр 1792;304;24;Россия,Южный ФО,Дагестан,Махачкала 2620;304;24;Россия,Южный ФО,Дагестан,Хасавюрт 2225;304;24;Россия,Южный ФО,Дагестан,Другое 305;305;24;Россия,Южный ФО,Ингушетия 3052;305;24;Россия,Южный ФО,Ингушетия,Магас 1787;305;24;Россия,Южный ФО,Ингушетия,Назрань 2228;305;24;Россия,Южный ФО,Ингушетия,Другое 306;306;24;Россия,Южный ФО,Кабардино-Балкария 2621;306;24;Россия,Южный ФО,Кабардино-Балкария,Баксан 1794;306;24;Россия,Южный ФО,Кабардино-Балкария,Майский 1793;306;24;Россия,Южный ФО,Кабардино-Балкария,Нальчик 2622;306;24;Россия,Южный ФО,Кабардино-Балкария,Нарткала 1795;306;24;Россия,Южный ФО,Кабардино-Балкария,Прохладный 2623;306;24;Россия,Южный ФО,Кабардино-Балкария,Терек 2624;306;24;Россия,Южный ФО,Кабардино-Балкария,Тырныауз 3274;306;24;Россия,Южный ФО,Кабардино-Балкария,Чегем 2230;306;24;Россия,Южный ФО,Кабардино-Балкария,Другое 307;307;24;Россия,Южный ФО,Калмыкия 2567;307;24;Россия,Южный ФО,Калмыкия,Городовиково 2568;307;24;Россия,Южный ФО,Калмыкия,Лагань 3324;307;24;Россия,Южный ФО,Калмыкия,Троицкое 1796;307;24;Россия,Южный ФО,Калмыкия,Элиста 2232;307;24;Россия,Южный ФО,Калмыкия,Другое 308;308;24;Россия,Южный ФО,Карачаево-Черкессия 1799;308;24;Россия,Южный ФО,Карачаево-Черкессия,Домбай 1798;308;24;Россия,Южный ФО,Карачаево-Черкессия,Карачаевск 2626;308;24;Россия,Южный ФО,Карачаево-Черкессия,Теберда 2625;308;24;Россия,Южный ФО,Карачаево-Черкессия,Усть-Джегута 1797;308;24;Россия,Южный ФО,Карачаево-Черкессия,Черкесск 2235;308;24;Россия,Южный ФО,Карачаево-Черкессия,Другое 311;311;24;Россия,Южный ФО,Северная Осетия - Алания 2630;311;24;Россия,Южный ФО,Северная Осетия - Алания,Алагир 2631;311;24;Россия,Южный ФО,Северная Осетия - Алания,Ардон 2628;311;24;Россия,Южный ФО,Северная Осетия - Алания,Беслан 1839;311;24;Россия,Южный ФО,Северная Осетия - Алания,Владикавказ 2629;311;24;Россия,Южный ФО,Северная Осетия - Алания,Дигора 2627;311;24;Россия,Южный ФО,Северная Осетия - Алания,Моздок 2266;311;24;Россия,Южный ФО,Северная Осетия - Алания,Другое 313;313;24;Россия,Южный ФО,Чечня 2632;313;24;Россия,Южный ФО,Чечня,Аргун 1853;313;24;Россия,Южный ФО,Чечня,Грозный 2633;313;24;Россия,Южный ФО,Чечня,Гудермес 2284;313;24;Россия,Южный ФО,Чечня,Другое 309;309;24;Россия,Южный ФО,Краснодарский край 2636;309;24;Россия,Южный ФО,Краснодарский край,Абинск 1800;309;24;Россия,Южный ФО,Краснодарский край,Анапа 1801;309;24;Россия,Южный ФО,Краснодарский край,Апшеронск 1802;309;24;Россия,Южный ФО,Краснодарский край,Армавир 1803;309;24;Россия,Южный ФО,Краснодарский край,Белореченск 1804;309;24;Россия,Южный ФО,Краснодарский край,Геленджик 1805;309;24;Россия,Южный ФО,Краснодарский край,Горячий Ключ 2637;309;24;Россия,Южный ФО,Краснодарский край,Гулькевичи 1806;309;24;Россия,Южный ФО,Краснодарский край,Динская 1807;309;24;Россия,Южный ФО,Краснодарский край,Ейск 2638;309;24;Россия,Южный ФО,Краснодарский край,Кореновск 1808;309;24;Россия,Южный ФО,Краснодарский край,Краснодар 1809;309;24;Россия,Южный ФО,Краснодарский край,Кропоткин 1810;309;24;Россия,Южный ФО,Краснодарский край,Крымск 1811;309;24;Россия,Южный ФО,Краснодарский край,Курганинск 3232;309;24;Россия,Южный ФО,Краснодарский край,Лабинск 2639;309;24;Россия,Южный ФО,Краснодарский край,Новокубанск 1812;309;24;Россия,Южный ФО,Краснодарский край,Новороссийск 1813;309;24;Россия,Южный ФО,Краснодарский край,Пластуновская 1814;309;24;Россия,Южный ФО,Краснодарский край,Приморско-Ахтарск 3102;309;24;Россия,Южный ФО,Краснодарский край,Северская 1815;309;24;Россия,Южный ФО,Краснодарский край,Славянск-на-Кубани 1816;309;24;Россия,Южный ФО,Краснодарский край,Сочи 3266;309;24;Россия,Южный ФО,Краснодарский край,Староминская 3039;309;24;Россия,Южный ФО,Краснодарский край,Тамань 1817;309;24;Россия,Южный ФО,Краснодарский край,Темрюк 2635;309;24;Россия,Южный ФО,Краснодарский край,Тимашевск 1818;309;24;Россия,Южный ФО,Краснодарский край,Тихорецк 1819;309;24;Россия,Южный ФО,Краснодарский край,Туапсе 1820;309;24;Россия,Южный ФО,Краснодарский край,Усть-Лабинск 2634;309;24;Россия,Южный ФО,Краснодарский край,Хадыженск 2241;309;24;Россия,Южный ФО,Краснодарский край,Другое 312;312;24;Россия,Южный ФО,Ставропольский край 1840;312;24;Россия,Южный ФО,Ставропольский край,Александровское 2644;312;24;Россия,Южный ФО,Ставропольский край,Благодарный 1841;312;24;Россия,Южный ФО,Ставропольский край,Буденновск 1842;312;24;Россия,Южный ФО,Ставропольский край,Георгиевск 1843;312;24;Россия,Южный ФО,Ставропольский край,Ессентуки 1844;312;24;Россия,Южный ФО,Ставропольский край,Железноводск 2647;312;24;Россия,Южный ФО,Ставропольский край,Зеленокумск 2641;312;24;Россия,Южный ФО,Ставропольский край,Изобильный 2642;312;24;Россия,Южный ФО,Ставропольский край,Ипатово 1845;312;24;Россия,Южный ФО,Ставропольский край,Кисловодск 1846;312;24;Россия,Южный ФО,Ставропольский край,Кочубеевское 3367;312;24;Россия,Южный ФО,Ставропольский край,Курсавка 3265;312;24;Россия,Южный ФО,Ставропольский край,Левокумское 1847;312;24;Россия,Южный ФО,Ставропольский край,Лермонтов 1848;312;24;Россия,Южный ФО,Ставропольский край,Минеральные Воды 1849;312;24;Россия,Южный ФО,Ставропольский край,Невинномысск 2645;312;24;Россия,Южный ФО,Ставропольский край,Нефтекумск 2643;312;24;Россия,Южный ФО,Ставропольский край,Новоалександровск 1850;312;24;Россия,Южный ФО,Ставропольский край,Новопавловск 1851;312;24;Россия,Южный ФО,Ставропольский край,Новоселицкое 1852;312;24;Россия,Южный ФО,Ставропольский край,Пятигорск 2646;312;24;Россия,Южный ФО,Ставропольский край,Светлоград 2640;312;24;Россия,Южный ФО,Ставропольский край,Ставрополь 2268;312;24;Россия,Южный ФО,Ставропольский край,Другое 302;302;24;Россия,Южный ФО,Астраханская обл. 1777;302;24;Россия,Южный ФО,Астраханская обл.,Астрахань 1778;302;24;Россия,Южный ФО,Астраханская обл.,Ахтубинск 3383;302;24;Россия,Южный ФО,Астраханская обл.,Знаменск 2578;302;24;Россия,Южный ФО,Астраханская обл.,Камызяк 2579;302;24;Россия,Южный ФО,Астраханская обл.,Нариманов 1786;302;24;Россия,Южный ФО,Астраханская обл.,Харабали 2219;302;24;Россия,Южный ФО,Астраханская обл.,Другое 303;303;24;Россия,Южный ФО,Волгоградская обл. 1779;303;24;Россия,Южный ФО,Волгоградская обл.,Волгоград 1780;303;24;Россия,Южный ФО,Волгоградская обл.,Волжский 2584;303;24;Россия,Южный ФО,Волгоградская обл.,Дубовка 1781;303;24;Россия,Южный ФО,Волгоградская обл.,Жирновск 1782;303;24;Россия,Южный ФО,Волгоградская обл.,Калач-на-Дону 1783;303;24;Россия,Южный ФО,Волгоградская обл.,Камышин 2588;303;24;Россия,Южный ФО,Волгоградская обл.,Котельниково 2591;303;24;Россия,Южный ФО,Волгоградская обл.,Котово 2587;303;24;Россия,Южный ФО,Волгоградская обл.,Краснослободск 2582;303;24;Россия,Южный ФО,Волгоградская обл.,Ленинск 2590;303;24;Россия,Южный ФО,Волгоградская обл.,Михайловка 1784;303;24;Россия,Южный ФО,Волгоградская обл.,Николаевск 2581;303;24;Россия,Южный ФО,Волгоградская обл.,Новоаннинский 2583;303;24;Россия,Южный ФО,Волгоградская обл.,Палласовка 2580;303;24;Россия,Южный ФО,Волгоградская обл.,Петров Вал 2589;303;24;Россия,Южный ФО,Волгоградская обл.,Серафимович 2585;303;24;Россия,Южный ФО,Волгоградская обл.,Суровикино 1785;303;24;Россия,Южный ФО,Волгоградская обл.,Урюпинск 2586;303;24;Россия,Южный ФО,Волгоградская обл.,Фролово 2223;303;24;Россия,Южный ФО,Волгоградская обл.,Другое 310;310;24;Россия,Южный ФО,Ростовская обл. 1821;310;24;Россия,Южный ФО,Ростовская обл.,Азов 1822;310;24;Россия,Южный ФО,Ростовская обл.,Аксай 1823;310;24;Россия,Южный ФО,Ростовская обл.,Багаевская 1824;310;24;Россия,Южный ФО,Ростовская обл.,Батайск 1825;310;24;Россия,Южный ФО,Ростовская обл.,Белая Калитва 1826;310;24;Россия,Южный ФО,Ростовская обл.,Волгодонск 1827;310;24;Россия,Южный ФО,Ростовская обл.,Гуково 2651;310;24;Россия,Южный ФО,Ростовская обл.,Донецк 1828;310;24;Россия,Южный ФО,Ростовская обл.,Зерноград 3264;310;24;Россия,Южный ФО,Ростовская обл.,Каменоломни 2652;310;24;Россия,Южный ФО,Ростовская обл.,Каменск-Шахтинский 2649;310;24;Россия,Южный ФО,Ростовская обл.,Константиновск 2648;310;24;Россия,Южный ФО,Ростовская обл.,Красный Сулин 1829;310;24;Россия,Южный ФО,Ростовская обл.,Миллерово 2653;310;24;Россия,Южный ФО,Ростовская обл.,Морозовск 1830;310;24;Россия,Южный ФО,Ростовская обл.,Новочеркасск 1831;310;24;Россия,Южный ФО,Ростовская обл.,Новошахтинск 1832;310;24;Россия,Южный ФО,Ростовская обл.,Пролетарск 1833;310;24;Россия,Южный ФО,Ростовская обл.,Ростов-на-Дону 1834;310;24;Россия,Южный ФО,Ростовская обл.,Сальск 1835;310;24;Россия,Южный ФО,Ростовская обл.,Семикаракорск 1836;310;24;Россия,Южный ФО,Ростовская обл.,Таганрог 1837;310;24;Россия,Южный ФО,Ростовская обл.,Усть-Донецкий 3263;310;24;Россия,Южный ФО,Ростовская обл.,Целина 2650;310;24;Россия,Южный ФО,Ростовская обл.,Цимлянск 1838;310;24;Россия,Южный ФО,Ростовская обл.,Шахты 2259;310;24;Россия,Южный ФО,Ростовская обл.,Другое 28;0;0;Азия 81;0;81;Азия,Азербайджан 1055;1055;81;Азия,Азербайджан,Баку 1058;1058;81;Азия,Азербайджан,Гянджа 1056;1056;81;Азия,Азербайджан,Нахичевань 1057;1057;81;Азия,Азербайджан,Ханкенди 3153;3153;81;Азия,Азербайджан,Шеки 2291;2291;81;Азия,Азербайджан,Другое 82;0;82;Азия,Армения 2932;2932;82;Азия,Армения,Абовян 1060;1060;82;Азия,Армения,Аштарак 3084;3084;82;Азия,Армения,Ванадзор 3011;3011;82;Азия,Армения,Гюмри 3306;3306;82;Азия,Армения,Дилижан 1059;1059;82;Азия,Армения,Ереван 3145;3145;82;Азия,Армения,Ханкенди 2292;2292;82;Азия,Армения,Другое 97;0;97;Азия,Афганистан 1061;1061;97;Азия,Афганистан,Кабул 2293;2293;97;Азия,Афганистан,Другое 96;0;96;Азия,Бангладеш 1062;1062;96;Азия,Бангладеш,Дакка 2294;2294;96;Азия,Бангладеш,Другое 99;0;99;Азия,Бахрейн 1063;1063;99;Азия,Бахрейн,Манама 2295;2295;99;Азия,Бахрейн,Другое 100;0;100;Азия,Бруней-Даруссалам 1064;1064;100;Азия,Бруней-Даруссалам,Бандар-Сери-Бегаван 2296;2296;100;Азия,Бруней-Даруссалам,Другое 101;0;101;Азия,Бутан 1065;1065;101;Азия,Бутан,Тхимпху 2297;2297;101;Азия,Бутан,Другое 102;0;102;Азия,Вьетнам 1066;1066;102;Азия,Вьетнам,Ханой 2298;2298;102;Азия,Вьетнам,Другое 83;0;83;Азия,Грузия 1067;1067;83;Азия,Грузия,Батуми 3158;3158;83;Азия,Грузия,Боржоми 1068;1068;83;Азия,Грузия,Поти 3129;3129;83;Азия,Грузия,Рустави 1069;1069;83;Азия,Грузия,Сухуми 1070;1070;83;Азия,Грузия,Тбилиси 2299;2299;83;Азия,Грузия,Другое 86;0;86;Азия,Израиль 3345;3345;86;Азия,Израиль,Ариэль 1071;1071;86;Азия,Израиль,Афула 2992;2992;86;Азия,Израиль,Ашдод 3175;3175;86;Азия,Израиль,Ашкелон 3363;3363;86;Азия,Израиль,Бат-Ям 2884;2884;86;Азия,Израиль,Беер-Яков 3243;3243;86;Азия,Израиль,Бейт-Шемеш 1074;1074;86;Азия,Израиль,Беэр-Шева 3348;3348;86;Азия,Израиль,Герцелия 3241;3241;86;Азия,Израиль,Димона 1075;1075;86;Азия,Израиль,Иерусалим 3350;3350;86;Азия,Израиль,Йокнеам-Иллит 2982;2982;86;Азия,Израиль,Кармиэль 2971;2971;86;Азия,Израиль,Кфар-Саба 3136;3136;86;Азия,Израиль,Назарет 1080;1080;86;Азия,Израиль,Натания 3303;3303;86;Азия,Израиль,Офаким 3050;3050;86;Азия,Израиль,Раанана 3151;3151;86;Азия,Израиль,Рамат Ган 3141;3141;86;Азия,Израиль,Реховот 3012;3012;86;Азия,Израиль,Ришон ле Цион 1081;1081;86;Азия,Израиль,Тверия 1077;1077;86;Азия,Израиль,Тель-Авив 1079;1079;86;Азия,Израиль,Хадера 1078;1078;86;Азия,Израиль,Хайфа 1076;1076;86;Азия,Израиль,Хеврон 2929;2929;86;Азия,Израиль,Цфат 2928;2928;86;Азия,Израиль,Эйлат 2300;2300;86;Азия,Израиль,Другое 95;0;95;Азия,Индия 3315;3315;95;Азия,Индия,Бангалор 1082;1082;95;Азия,Индия,Дели 1083;1083;95;Азия,Индия,Джайпур 3144;3144;95;Азия,Индия,Калькутта 3025;3025;95;Азия,Индия,Мумбаи 3277;3277;95;Азия,Индия,Панаджи 1084;1084;95;Азия,Индия,Ченнаи 2301;2301;95;Азия,Индия,Другое 103;0;103;Азия,Индонезия 1085;1085;103;Азия,Индонезия,Джакарта 2302;2302;103;Азия,Индонезия,Другое 79;0;79;Азия,Иордания 1086;1086;79;Азия,Иордания,Амман 2303;2303;79;Азия,Иордания,Другое 85;0;85;Азия,Ирак 1087;1087;85;Азия,Ирак,Багдад 2304;2304;85;Азия,Ирак,Другое 87;0;87;Азия,Иран 1088;1088;87;Азия,Иран,Тегеран 2305;2305;87;Азия,Иран,Другое 104;0;104;Азия,Йемен 1089;1089;104;Азия,Йемен,Сана 2306;2306;104;Азия,Йемен,Другое 84;0;84;Азия,Казахстан 1090;1090;84;Азия,Казахстан,Актау 1091;1091;84;Азия,Казахстан,Актюбинск 1092;1092;84;Азия,Казахстан,Алма-Ата 3242;3242;84;Азия,Казахстан,Аршалы 1093;1093;84;Азия,Казахстан,Астана 1094;1094;84;Азия,Казахстан,Атырау (Гурьев) 1095;1095;84;Азия,Казахстан,Байконур 3245;3245;84;Азия,Казахстан,Балхаш 3083;3083;84;Азия,Казахстан,Жезказган 1096;1096;84;Азия,Казахстан,Капчагай 1097;1097;84;Азия,Казахстан,Караганда 1098;1098;84;Азия,Казахстан,Кокшетау 1099;1099;84;Азия,Казахстан,Кустанай 2868;2868;84;Азия,Казахстан,Лисаковск 1100;1100;84;Азия,Казахстан,Павлодар 1101;1101;84;Азия,Казахстан,Петропавловск (Сев.-Каз. обл.) 1102;1102;84;Азия,Казахстан,Рудный 1103;1103;84;Азия,Казахстан,Семипалатинск 1104;1104;84;Азия,Казахстан,Степногорск 3166;3166;84;Азия,Казахстан,Талгар 1105;1105;84;Азия,Казахстан,Талды-Курган 2927;2927;84;Азия,Казахстан,Тараз 1106;1106;84;Азия,Казахстан,Темиртау 1107;1107;84;Азия,Казахстан,Уральск 1108;1108;84;Азия,Казахстан,Усть-Каменогорск 1109;1109;84;Азия,Казахстан,Чимкент 1110;1110;84;Азия,Казахстан,Экибастуз 2307;2307;84;Азия,Казахстан,Другое 105;0;105;Азия,Камбоджа 1111;1111;105;Азия,Камбоджа,Пномпень 2308;2308;105;Азия,Камбоджа,Другое 106;0;106;Азия,Катар 1112;1112;106;Азия,Катар,Доха 2309;2309;106;Азия,Катар,Другое 107;0;107;Азия,Кипр 1113;1113;107;Азия,Кипр,Ларнака 1114;1114;107;Азия,Кипр,Лимассол 1115;1115;107;Азия,Кипр,Никосия 2954;2954;107;Азия,Кипр,Пафос 2310;2310;107;Азия,Кипр,Другое 92;0;92;Азия,Киргизия (Кыргызстан) 1116;1116;92;Азия,Киргизия (Кыргызстан),Бишкек 1117;1117;92;Азия,Киргизия (Кыргызстан),Джалал-Абад 3027;3027;92;Азия,Киргизия (Кыргызстан),Кара-Балта 1118;1118;92;Азия,Киргизия (Кыргызстан),Каракол 1119;1119;92;Азия,Киргизия (Кыргызстан),Ош 1120;1120;92;Азия,Киргизия (Кыргызстан),Талас 2933;2933;92;Азия,Киргизия (Кыргызстан),Хайдаркен 2311;2311;92;Азия,Киргизия (Кыргызстан),Другое 76;0;76;Азия,Китай 3214;3214;76;Азия,Китай,Аомынь (Макао) 1121;1121;76;Азия,Китай,Гонконг 2869;2869;76;Азия,Китай,Гуанчжоу 3262;3262;76;Азия,Китай,Далянь 1122;1122;76;Азия,Китай,Пекин 1123;1123;76;Азия,Китай,Харбин 1124;1124;76;Азия,Китай,Шанхай 3043;3043;76;Азия,Китай,Шеньян 2312;2312;76;Азия,Китай,Другое 3215;0;3215;Азия,Кокосовые острова (Австр.) 29;0;29;Азия,Корея (КНДР) 1125;1125;29;Азия,Корея (КНДР),Пхеньян 2313;2313;29;Азия,Корея (КНДР),Другое 108;0;108;Азия,Корея, Республика 1126;1126;108;Азия,Корея, Республика,Сеул 3240;3240;108;Азия,Корея, Республика,Тейджон 2314;2314;108;Азия,Корея, Республика,Другое 88;0;88;Азия,Кувейт 1127;1127;88;Азия,Кувейт,Эль-Кувейт 2315;2315;88;Азия,Кувейт,Другое 109;0;109;Азия,Лаос 1128;1128;109;Азия,Лаос,Вьентьян 2316;2316;109;Азия,Лаос,Другое 110;0;110;Азия,Ливан 1129;1129;110;Азия,Ливан,Бейрут 2317;2317;110;Азия,Ливан,Другое 111;0;111;Азия,Малайзия 1130;1130;111;Азия,Малайзия,Джохор-Бару 1131;1131;111;Азия,Малайзия,Куала-Лумпур 2318;2318;111;Азия,Малайзия,Другое 112;0;112;Азия,Мальдивы 1132;1132;112;Азия,Мальдивы,Мале 2319;2319;112;Азия,Мальдивы,Другое 113;0;113;Азия,Монголия 1133;1133;113;Азия,Монголия,Улан-Батор 1134;1134;113;Азия,Монголия,Эрдэнэт 2320;2320;113;Азия,Монголия,Другое 114;0;114;Азия,Мьянма 1135;1135;114;Азия,Мьянма,Янгон 2321;2321;114;Азия,Мьянма,Другое 115;0;115;Азия,Непал 1136;1136;115;Азия,Непал,Катманду 2322;2322;115;Азия,Непал,Другое 116;0;116;Азия,Объединенные Арабские Эмираты 1137;1137;116;Азия,Объединенные Арабские Эмираты,Абу-Даби 1138;1138;116;Азия,Объединенные Арабские Эмираты,Дубай 1139;1139;116;Азия,Объединенные Арабские Эмираты,Шарджа 2323;2323;116;Азия,Объединенные Арабские Эмираты,Другое 117;0;117;Азия,Оман 1140;1140;117;Азия,Оман,Маскат 2324;2324;117;Азия,Оман,Другое 3216;0;3216;Азия,Остров Рождества (Австр.) 122;0;122;Азия,Пакистан 1141;1141;122;Азия,Пакистан,Исламабад 2325;2325;122;Азия,Пакистан,Другое 89;0;89;Азия,Палестина 1072;1072;89;Азия,Палестина,Ашдод 1073;1073;89;Азия,Палестина,Ашкелон 1142;1142;89;Азия,Палестина,Газа 2326;2326;89;Азия,Палестина,Другое 94;0;94;Азия,Саудовская Аравия 3250;3250;94;Азия,Саудовская Аравия,Медина 1143;1143;94;Азия,Саудовская Аравия,Эр-Рияд 2327;2327;94;Азия,Саудовская Аравия,Другое 118;0;118;Азия,Сингапур 78;0;78;Азия,Сирия 1144;1144;78;Азия,Сирия,Дамаск 2328;2328;78;Азия,Сирия,Другое 91;0;91;Азия,Таджикистан 1145;1145;91;Азия,Таджикистан,Душанбе 3307;3307;91;Азия,Таджикистан,Кайраккум 3308;3308;91;Азия,Таджикистан,Худжанд 2329;2329;91;Азия,Таджикистан,Другое 119;0;119;Азия,Таиланд 1146;1146;119;Азия,Таиланд,Бангкок 1147;1147;119;Азия,Таиланд,Пхукет 2330;2330;119;Азия,Таиланд,Другое 120;0;120;Азия,Тайвань 1148;1148;120;Азия,Тайвань,Тайбэй 2331;2331;120;Азия,Тайвань,Другое 132;0;132;Азия,Тимор 1149;1149;132;Азия,Тимор,Дили 2332;2332;132;Азия,Тимор,Другое 90;0;90;Азия,Туркмения 1150;1150;90;Азия,Туркмения,Ашхабад 3079;3079;90;Азия,Туркмения,Безмеин 2333;2333;90;Азия,Туркмения,Другое 77;0;77;Азия,Турция 1152;1152;77;Азия,Турция,Анкара 1153;1153;77;Азия,Турция,Анталия 3080;3080;77;Азия,Турция,Бурса 1151;1151;77;Азия,Турция,Мармарис 1154;1154;77;Азия,Турция,Стамбул 1155;1155;77;Азия,Турция,Трабзон 2334;2334;77;Азия,Турция,Другое 93;0;93;Азия,Узбекистан 3362;3362;93;Азия,Узбекистан,Алмалык 3137;3137;93;Азия,Узбекистан,Андижан 3273;3273;93;Азия,Узбекистан,Асака 1156;1156;93;Азия,Узбекистан,Ахангаран 1157;1157;93;Азия,Узбекистан,Бухара 3167;3167;93;Азия,Узбекистан,Джизак 3347;3347;93;Азия,Узбекистан,Кунград 1158;1158;93;Азия,Узбекистан,Навои 1159;1159;93;Азия,Узбекистан,Наманган 1160;1160;93;Азия,Узбекистан,Самарканд 1161;1161;93;Азия,Узбекистан,Ташкент 1162;1162;93;Азия,Узбекистан,Ургенч 1163;1163;93;Азия,Узбекистан,Фергана 1164;1164;93;Азия,Узбекистан,Чирчик 2335;2335;93;Азия,Узбекистан,Другое 121;0;121;Азия,Филиппины 1165;1165;121;Азия,Филиппины,Манила 3319;3319;121;Азия,Филиппины,Себу 2336;2336;121;Азия,Филиппины,Другое 98;0;98;Азия,Шри Ланка 1166;1166;98;Азия,Шри Ланка,Коломбо 2337;2337;98;Азия,Шри Ланка,Другое 75;0;75;Азия,Япония 3176;3176;75;Азия,Япония,Исесаки 3339;3339;75;Азия,Япония,Корияма 1167;1167;75;Азия,Япония,Саппоро 1168;1168;75;Азия,Япония,Токио 2338;2338;75;Азия,Япония,Другое 31;0;0;Австралия и Океания 123;0;123;Австралия и Океания,Австралия 1914;1914;123;Австралия и Океания,Австралия,Аделаида 2957;2957;123;Австралия и Океания,Австралия,Блэк Рок 1915;1915;123;Австралия и Океания,Австралия,Брисбен 3331;3331;123;Австралия и Океания,Австралия,Горокан 1916;1916;123;Австралия и Океания,Австралия,Канберра 3001;3001;123;Австралия и Океания,Австралия,Лидкомб 1917;1917;123;Австралия и Океания,Австралия,Мельбурн 3217;3217;123;Австралия и Океания,Австралия,Норфолк 3064;3064;123;Австралия и Океания,Австралия,Перт 3020;3020;123;Австралия и Океания,Австралия,Санта Люсиа 1918;1918;123;Австралия и Океания,Австралия,Сидней 3238;3238;123;Австралия и Океания,Австралия,Энеабба 2339;2339;123;Австралия и Океания,Австралия,Другое 454;0;454;Австралия и Океания,Американское Самоа 1192;1192;454;Австралия и Океания,Американское Самоа,Паго-Паго 2366;2366;454;Австралия и Океания,Американское Самоа,Другое 124;0;124;Австралия и Океания,Вануату 1919;1919;124;Австралия и Океания,Вануату,Порт-Вила 2340;2340;124;Австралия и Океания,Вануату,Другое 453;0;453;Австралия и Океания,Гуам (США) 1193;1193;453;Австралия и Океания,Гуам (США),Аганья 2368;2368;453;Австралия и Океания,Гуам (США),Другое 126;0;126;Австралия и Океания,Кирибати 1921;1921;126;Австралия и Океания,Кирибати,Баирики 2342;2342;126;Австралия и Океания,Кирибати,Другое 127;0;127;Австралия и Океания,Маршалловы Острова 1922;1922;127;Австралия и Океания,Маршалловы Острова,Маджуро 2343;2343;127;Австралия и Океания,Маршалловы Острова,Другое 128;0;128;Австралия и Океания,Микронезия (Федеративные Штаты Микронезии) 1923;1923;128;Австралия и Океания,Микронезия (Федеративные Штаты Микронезии),Паликир 2344;2344;128;Австралия и Океания,Микронезия (Федеративные Штаты Микронезии),Другое 129;0;129;Австралия и Океания,Науру 1924;1924;129;Австралия и Океания,Науру,Ярен 2345;2345;129;Австралия и Океания,Науру,Другое 3220;0;3220;Австралия и Океания,Ниуэ (Н.Зел.) 130;0;130;Австралия и Океания,Новая Зеландия 1925;1925;130;Австралия и Океания,Новая Зеландия,Веллингтон 1926;1926;130;Австралия и Океания,Новая Зеландия,Гамильтон 1928;1928;130;Австралия и Океания,Новая Зеландия,Данидин 1929;1929;130;Австралия и Океания,Новая Зеландия,Крайстчерч 3235;3235;130;Австралия и Океания,Новая Зеландия,Кромвель 1927;1927;130;Австралия и Океания,Новая Зеландия,Окленд 3323;3323;130;Австралия и Океания,Новая Зеландия,Тауранга 2346;2346;130;Австралия и Океания,Новая Зеландия,Другое 3218;0;3218;Австралия и Океания,Новая Каледония (Фр.) 3221;0;3221;Австралия и Океания,Острова Кука (Н.Зел.) 3230;0;3230;Австралия и Океания,Острова Херд и Макдональд (Австр.) 131;0;131;Австралия и Океания,Палау 1930;1930;131;Австралия и Океания,Палау,Корор 2347;2347;131;Австралия и Океания,Палау,Другое 133;0;133;Австралия и Океания,Папуа - Новая Гвинея 1931;1931;133;Австралия и Океания,Папуа - Новая Гвинея,Порт-Морсби 2348;2348;133;Австралия и Океания,Папуа - Новая Гвинея,Другое 3222;0;3222;Австралия и Океания,Питкерн (Брит.) 125;0;125;Австралия и Океания,Самоа 1920;1920;125;Австралия и Океания,Самоа,Апиа 2341;2341;125;Австралия и Океания,Самоа,Другое 3219;0;3219;Австралия и Океания,Сев. Марианские острова (США) 134;0;134;Австралия и Океания,Соломоновы Острова 1932;1932;134;Австралия и Океания,Соломоновы Острова,Хониара 2349;2349;134;Австралия и Океания,Соломоновы Острова,Другое 3223;0;3223;Австралия и Океания,Токелау (Н.Зел.) 135;0;135;Австралия и Океания,Тонга 1933;1933;135;Австралия и Океания,Тонга,Нукуалофа 2350;2350;135;Австралия и Океания,Тонга,Другое 136;0;136;Австралия и Океания,Тувалу 1934;1934;136;Австралия и Океания,Тувалу,Фунафути 2351;2351;136;Австралия и Океания,Тувалу,Другое 3224;0;3224;Австралия и Океания,Уоллис и Футуна острова (Фр.) 137;0;137;Австралия и Океания,Фиджи 1935;1935;137;Австралия и Океания,Фиджи,Сува 2352;2352;137;Австралия и Океания,Фиджи,Другое 3226;0;3226;Австралия и Океания,Французская Полинезия 3225;0;3225;Австралия и Океания,Французские Южные территории 30;0;0;Америка 138;0;138;Америка,Канада 3055;3055;138;Америка,Канада,Барлингтон 3049;3049;138;Америка,Канада,Броссард 3330;3330;138;Америка,Канада,Бурнаби 1169;1169;138;Америка,Канада,Ванкувер 3106;3106;138;Америка,Канада,Ватерлоо 1170;1170;138;Америка,Канада,Виннипег 1171;1171;138;Америка,Канада,Галифакс 1172;1172;138;Америка,Канада,Гамильтон 3365;3365;138;Америка,Канада,Денвер 1173;1173;138;Америка,Канада,Калгари 3104;3104;138;Америка,Канада,Камлупс 3366;3366;138;Америка,Канада,Каннингтон 1174;1174;138;Америка,Канада,Квебек 2964;2964;138;Америка,Канада,Кингстон 3113;3113;138;Америка,Канада,Коквитлам 1175;1175;138;Америка,Канада,Монреаль 2920;2920;138;Америка,Канада,Ниагара-Фолс 2889;2889;138;Америка,Канада,Норд-Йорк 1176;1176;138;Америка,Канада,Оттава 2903;2903;138;Америка,Канада,Порт Алберни 1177;1177;138;Америка,Канада,Ричмонд 1178;1178;138;Америка,Канада,Тимминс 2946;2946;138;Америка,Канада,Торнхилл 1179;1179;138;Америка,Канада,Торонто 1180;1180;138;Америка,Канада,Эдмонтон 2353;2353;138;Америка,Канада,Другое 139;0;139;Америка,США 407;407;139;Америка,США,Вашингтон, столица 426;426;139;Америка,США,Айдахо 427;426;139;Америка,США,Айдахо,Бойсе 2354;426;139;Америка,США,Айдахо,Другое 378;378;139;Америка,США,Айова 3109;378;139;Америка,США,Айова,Айова Сити 379;378;139;Америка,США,Айова,Де-Мойн 2963;378;139;Америка,США,Айова,Декора 2355;378;139;Америка,США,Айова,Другое 412;412;139;Америка,США,Алабама 3236;412;139;Америка,США,Алабама,Бирмингем 413;412;139;Америка,США,Алабама,Монтгомери 1181;412;139;Америка,США,Алабама,Хантсвилл 2356;412;139;Америка,США,Алабама,Другое 446;446;139;Америка,США,Аляска 1182;446;139;Америка,США,Аляска,Анкоридж 447;446;139;Америка,США,Аляска,Джуно 1183;446;139;Америка,США,Аляска,Фэрбенкс 2357;446;139;Америка,США,Аляска,Другое 434;434;139;Америка,США,Аризона 2917;434;139;Америка,США,Аризона,Темпе 1184;434;139;Америка,США,Аризона,Тусон 435;434;139;Америка,США,Аризона,Финикс 3061;434;139;Америка,США,Аризона,Чандлер 2358;434;139;Америка,США,Аризона,Другое 416;416;139;Америка,США,Арканзас 417;416;139;Америка,США,Арканзас,Литл-Рок 2359;416;139;Америка,США,Арканзас,Другое 428;428;139;Америка,США,Вайоминг 3017;428;139;Америка,США,Вайоминг,Ларами 429;428;139;Америка,США,Вайоминг,Шайенн 2360;428;139;Америка,США,Вайоминг,Другое 440;440;139;Америка,США,Вашингтон 2956;440;139;Америка,США,Вашингтон,Беллевью 2967;440;139;Америка,США,Вашингтон,Бремертон 3385;440;139;Америка,США,Вашингтон,Ванкувер 2865;440;139;Америка,США,Вашингтон,Линден 441;440;139;Америка,США,Вашингтон,Олимпия 3352;440;139;Америка,США,Вашингтон,Порт Орчард 2876;440;139;Америка,США,Вашингтон,Редмонт 3003;440;139;Америка,США,Вашингтон,Рентон 1185;440;139;Америка,США,Вашингтон,Сиэтл 2983;440;139;Америка,США,Вашингтон,Снохомиш 1186;440;139;Америка,США,Вашингтон,Такома 3152;440;139;Америка,США,Вашингтон,Фрайди Харбор 2886;440;139;Америка,США,Вашингтон,Эверет 2361;440;139;Америка,США,Вашингтон,Другое 352;352;139;Америка,США,Вермонт 353;352;139;Америка,США,Вермонт,Монтпильер 2861;352;139;Америка,США,Вермонт,Норвич 2362;352;139;Америка,США,Вермонт,Другое 394;394;139;Америка,США,Виргиния 1188;394;139;Америка,США,Виргиния,Александрия 1187;394;139;Америка,США,Виргиния,Арлингтон 2969;394;139;Америка,США,Виргиния,Даллес 1189;394;139;Америка,США,Виргиния,Манассас 3114;394;139;Америка,США,Виргиния,Норфолк 2885;394;139;Америка,США,Виргиния,Ньюпорт-Ньюс 2979;394;139;Америка,США,Виргиния,Раунд Хил 3338;394;139;Америка,США,Виргиния,Рестон 395;394;139;Америка,США,Виргиния,Ричмонд 3005;394;139;Америка,США,Виргиния,Уоррентон 2991;394;139;Америка,США,Виргиния,Херндон 2996;394;139;Америка,США,Виргиния,Центрвиль 3097;394;139;Америка,США,Виргиния,Чантилли 2981;394;139;Америка,США,Виргиния,Шарлотесвиль 2363;394;139;Америка,США,Виргиния,Другое 374;374;139;Америка,США,Висконсин 2995;374;139;Америка,США,Висконсин,Грин-Бей 375;374;139;Америка,США,Висконсин,Мадисон 2365;374;139;Америка,США,Висконсин,Другое 448;448;139;Америка,США,Гавайи 449;448;139;Америка,США,Гавайи,Гонолулу 1191;448;139;Америка,США,Гавайи,Хило 2367;448;139;Америка,США,Гавайи,Другое 390;390;139;Америка,США,Делавер 3021;390;139;Америка,США,Делавер,Вильмингтон 391;390;139;Америка,США,Делавер,Довер 2973;390;139;Америка,США,Делавер,Льюис 2369;390;139;Америка,США,Делавер,Другое 402;402;139;Америка,США,Джорджия 403;402;139;Америка,США,Джорджия,Атланта 2370;402;139;Америка,США,Джорджия,Другое 396;396;139;Америка,США,Западная Виргиния 397;396;139;Америка,США,Западная Виргиния,Чарлстон 2371;396;139;Америка,США,Западная Виргиния,Другое 370;370;139;Америка,США,Иллинойс 2911;370;139;Америка,США,Иллинойс,Вестмонт 3074;370;139;Америка,США,Иллинойс,Гарвард 371;370;139;Америка,США,Иллинойс,Спрингфилд 2930;370;139;Америка,США,Иллинойс,Урбана 1194;370;139;Америка,США,Иллинойс,Чикаго 2372;370;139;Америка,США,Иллинойс,Другое 368;368;139;Америка,США,Индиана 369;368;139;Америка,США,Индиана,Индианаполис 1195;368;139;Америка,США,Индиана,Эвансвил 2373;368;139;Америка,США,Индиана,Другое 444;444;139;Америка,США,Калифорния 2959;444;139;Америка,США,Калифорния,Анахайм 2961;444;139;Америка,США,Калифорния,Аптос 2912;444;139;Америка,США,Калифорния,Артезия 2899;444;139;Америка,США,Калифорния,Беверли Хилз 1196;444;139;Америка,США,Калифорния,Беркли 3249;444;139;Америка,США,Калифорния,Бреа 3014;444;139;Америка,США,Калифорния,Брисбейн 3048;444;139;Америка,США,Калифорния,Венис 2901;444;139;Америка,США,Калифорния,Вест-Голливуд 2926;444;139;Америка,США,Калифорния,Вестлейк Вилладж 2922;444;139;Америка,США,Калифорния,Гардена 1203;444;139;Америка,США,Калифорния,Глендейл 2978;444;139;Америка,США,Калифорния,Денвиль 2990;444;139;Америка,США,Калифорния,Дублин 3077;444;139;Америка,США,Калифорния,Дэвис 2918;444;139;Америка,США,Калифорния,Ирвайн 2881;444;139;Америка,США,Калифорния,Карсон 3247;444;139;Америка,США,Калифорния,Кипресс 3092;444;139;Америка,США,Калифорния,Коста Меса 2948;444;139;Америка,США,Калифорния,Купертино 1197;444;139;Америка,США,Калифорния,Лонг-Бич 1198;444;139;Америка,США,Калифорния,Лос-Анджелес 3058;444;139;Америка,США,Калифорния,Лос-Гатос 3328;444;139;Америка,США,Калифорния,Марина-дель-Рей 2874;444;139;Америка,США,Калифорния,Маунтин-Вью 2998;444;139;Америка,США,Калифорния,Милпитас 3087;444;139;Америка,США,Калифорния,Монтерей 2947;444;139;Америка,США,Калифорния,Окленд 2900;444;139;Америка,США,Калифорния,Пало Альто 1199;444;139;Америка,США,Калифорния,Пасадена 3335;444;139;Америка,США,Калифорния,Редвуд 2966;444;139;Америка,США,Калифорния,Розамонд 445;444;139;Америка,США,Калифорния,Сакраменто 1200;444;139;Америка,США,Калифорния,Сан-Диего 3317;444;139;Америка,США,Калифорния,Сан-Мартин 1201;444;139;Америка,США,Калифорния,Сан-Франциско 1202;444;139;Америка,США,Калифорния,Сан-Хосе 2878;444;139;Америка,США,Калифорния,Саннивейл 2925;444;139;Америка,США,Калифорния,Санта-Барбара 2875;444;139;Америка,США,Калифорния,Санта-Клара 1204;444;139;Америка,США,Калифорния,Санта-Круз 2859;444;139;Америка,США,Калифорния,Санта-Моника 3157;444;139;Америка,США,Калифорния,Студио Сити 3146;444;139;Америка,США,Калифорния,Торранс 2970;444;139;Америка,США,Калифорния,Тысяча Дубов 2949;444;139;Америка,США,Калифорния,Универсал-Сити 3057;444;139;Америка,США,Калифорния,Форт Брэгг 3032;444;139;Америка,США,Калифорния,Фостер-Сити 3381;444;139;Америка,США,Калифорния,Фремонт 3028;444;139;Америка,США,Калифорния,Фуллертон 2858;444;139;Америка,США,Калифорния,Эмервиль 3040;444;139;Америка,США,Калифорния,Эскондидо 2374;444;139;Америка,США,Калифорния,Другое 388;388;139;Америка,США,Канзас 3041;388;139;Америка,США,Канзас,Лоуренс 389;388;139;Америка,США,Канзас,Топика 2375;388;139;Америка,США,Канзас,Другое 408;408;139;Америка,США,Кентукки 3004;408;139;Америка,США,Кентукки,Лексингтон 1205;408;139;Америка,США,Кентукки,Луисвилл 409;408;139;Америка,США,Кентукки,Франкфорт 2376;408;139;Америка,США,Кентукки,Другое 430;430;139;Америка,США,Колорадо 1206;430;139;Америка,США,Колорадо,Боулдер 3095;430;139;Америка,США,Колорадо,Грили 431;430;139;Америка,США,Колорадо,Денвер 1207;430;139;Америка,США,Колорадо,Колорадо-Спрингс 3046;430;139;Америка,США,Колорадо,Литлтон 2377;430;139;Америка,США,Колорадо,Другое 358;358;139;Америка,США,Коннектикут 2968;358;139;Америка,США,Коннектикут,Дариен 3018;358;139;Америка,США,Коннектикут,Денбери 2882;358;139;Америка,США,Коннектикут,Стэмфорд 359;358;139;Америка,США,Коннектикут,Хартфорд 3047;358;139;Америка,США,Коннектикут,Шелтон 2378;358;139;Америка,США,Коннектикут,Другое 418;418;139;Америка,США,Луизиана 419;418;139;Америка,США,Луизиана,Батон-Руж 1208;418;139;Америка,США,Луизиана,Новый Орлеан 2408;418;139;Америка,США,Луизиана,Другое 354;354;139;Америка,США,Массачусетс 2931;354;139;Америка,США,Массачусетс,Аттлеборо 3334;354;139;Америка,США,Массачусетс,Билерика 355;354;139;Америка,США,Массачусетс,Бостон 3059;354;139;Америка,США,Массачусетс,Вестгемптон 2919;354;139;Америка,США,Массачусетс,Вобурн 2902;354;139;Америка,США,Массачусетс,Дедхэм 1209;354;139;Америка,США,Массачусетс,Кеймбридж 3336;354;139;Америка,США,Массачусетс,Нидхем 2985;354;139;Америка,США,Массачусетс,Ньютонвиль 3022;354;139;Америка,США,Массачусетс,Уолтхэм 2407;354;139;Америка,США,Массачусетс,Другое 376;376;139;Америка,США,Миннесота 1210;376;139;Америка,США,Миннесота,Миннеаполис 2980;376;139;Америка,США,Миннесота,Плимут 377;376;139;Америка,США,Миннесота,Сент-Пол 3035;376;139;Америка,США,Миннесота,Эден Прейри 2406;376;139;Америка,США,Миннесота,Другое 414;414;139;Америка,США,Миссисипи 415;414;139;Америка,США,Миссисипи,Джэксон 2405;414;139;Америка,США,Миссисипи,Другое 380;380;139;Америка,США,Миссури 381;380;139;Америка,США,Миссури,Джефферсон-Сити 3062;380;139;Америка,США,Миссури,Канзас Сити 3038;380;139;Америка,США,Миссури,Ли Саммит 1211;380;139;Америка,США,Миссури,Сент-Луис 2895;380;139;Америка,США,Миссури,Эллисвил 2404;380;139;Америка,США,Миссури,Другое 372;372;139;Америка,США,Мичиган 3357;372;139;Америка,США,Мичиган,Вест Блюмфельд 1212;372;139;Америка,США,Мичиган,Гранд-Рапидс 1213;372;139;Америка,США,Мичиган,Детройт 3103;372;139;Америка,США,Мичиган,Каламазу 373;372;139;Америка,США,Мичиган,Лансинг 2987;372;139;Америка,США,Мичиган,Новай 2887;372;139;Америка,США,Мичиган,Сагино 2403;372;139;Америка,США,Мичиган,Другое 424;424;139;Америка,США,Монтана 1214;424;139;Америка,США,Монтана,Грейт-Фолс 425;424;139;Америка,США,Монтана,Хелина 2402;424;139;Америка,США,Монтана,Другое 348;348;139;Америка,США,Мэн 349;348;139;Америка,США,Мэн,Огаста 3000;348;139;Америка,США,Мэн,Ярмут 2401;348;139;Америка,США,Мэн,Другое 392;392;139;Америка,США,Мэриленд 393;392;139;Америка,США,Мэриленд,Аннаполис 1215;392;139;Америка,США,Мэриленд,Балтимор 3143;392;139;Америка,США,Мэриленд,Гринбелт 3337;392;139;Америка,США,Мэриленд,Колледж Парк 2904;392;139;Америка,США,Мэриленд,Маунт Эйри 3329;392;139;Америка,США,Мэриленд,Роквилль 2400;392;139;Америка,США,Мэриленд,Другое 386;386;139;Америка,США,Небраска 387;386;139;Америка,США,Небраска,Линкольн 1216;386;139;Америка,США,Небраска,Омаха 2399;386;139;Америка,США,Небраска,Другое 438;438;139;Америка,США,Невада 439;438;139;Америка,США,Невада,Карсон-Сити 1217;438;139;Америка,США,Невада,Лас-Вегас 2890;438;139;Америка,США,Невада,Рено 2398;438;139;Америка,США,Невада,Другое 362;362;139;Америка,США,Нью-Джерси 1219;362;139;Америка,США,Нью-Джерси,Атлантик-Сити 1218;362;139;Америка,США,Нью-Джерси,Ньюарк 3276;362;139;Америка,США,Нью-Джерси,Оклин 3073;362;139;Америка,США,Нью-Джерси,Принстон 2955;362;139;Америка,США,Нью-Джерси,Рузерфорд 3349;362;139;Америка,США,Нью-Джерси,Сомервиль 363;362;139;Америка,США,Нью-Джерси,Трентон 3078;362;139;Америка,США,Нью-Джерси,Хакеттстоун 3248;362;139;Америка,США,Нью-Джерси,Черри Хилл 2397;362;139;Америка,США,Нью-Джерси,Другое 360;360;139;Америка,США,Нью-Йорк 3134;360;139;Америка,США,Нью-Йорк,Баффало 3081;360;139;Америка,США,Нью-Йорк,Бингхэмптон 2997;360;139;Америка,США,Нью-Йорк,Бруклин 2999;360;139;Америка,США,Нью-Йорк,Варвик 3139;360;139;Америка,США,Нью-Йорк,Ирвингтон 3060;360;139;Америка,США,Нью-Йорк,Итака 1220;360;139;Америка,США,Нью-Йорк,Нью-Йорк 361;360;139;Америка,США,Нью-Йорк,Олбани 2914;360;139;Америка,США,Нью-Йорк,Погкипси 3056;360;139;Америка,США,Нью-Йорк,Саратога Спрингс 2396;360;139;Америка,США,Нью-Йорк,Другое 432;432;139;Америка,США,Нью-Мексико 1222;432;139;Америка,США,Нью-Мексико,Альбукерке 433;432;139;Америка,США,Нью-Мексико,Санта-Фе 2395;432;139;Америка,США,Нью-Мексико,Другое 350;350;139;Америка,США,Нью-Хэмпшир 2989;350;139;Америка,США,Нью-Хэмпшир,Амхерст 351;350;139;Америка,США,Нью-Хэмпшир,Конкорд 2950;350;139;Америка,США,Нью-Хэмпшир,Лондондерри 1221;350;139;Америка,США,Нью-Хэмпшир,Манчестер 3111;350;139;Америка,США,Нью-Хэмпшир,Рочестер 2898;350;139;Америка,США,Нью-Хэмпшир,Салем 2938;350;139;Америка,США,Нью-Хэмпшир,Хадсон 2394;350;139;Америка,США,Нью-Хэмпшир,Другое 366;366;139;Америка,США,Огайо 2953;366;139;Америка,США,Огайо,Варрен 3112;366;139;Америка,США,Огайо,Гроув Сити 1223;366;139;Америка,США,Огайо,Кливленд 367;366;139;Америка,США,Огайо,Колумбус 2951;366;139;Америка,США,Огайо,Лавленд 2862;366;139;Америка,США,Огайо,Оберлин 3034;366;139;Америка,США,Огайо,Рейнольдсбург 2860;366;139;Америка,США,Огайо,Цинциннати 2393;366;139;Америка,США,Огайо,Другое 420;420;139;Америка,США,Оклахома 421;420;139;Америка,США,Оклахома,Оклахома-Сити 1224;420;139;Америка,США,Оклахома,Талса 2392;420;139;Америка,США,Оклахома,Другое 442;442;139;Америка,США,Орегон 2877;442;139;Америка,США,Орегон,Кламат-Фолс 2945;442;139;Америка,США,Орегон,Коттедж-Гроув 1225;442;139;Америка,США,Орегон,Портленд 443;442;139;Америка,США,Орегон,Сейлем 1226;442;139;Америка,США,Орегон,Юджин 2391;442;139;Америка,США,Орегон,Другое 364;364;139;Америка,США,Пенсильвания 3316;364;139;Америка,США,Пенсильвания,Вифлием 3282;364;139;Америка,США,Пенсильвания,Колледжвиль 2972;364;139;Америка,США,Пенсильвания,Нью Фридом 1227;364;139;Америка,США,Пенсильвания,Питтсбург 2893;364;139;Америка,США,Пенсильвания,Рандор 3110;364;139;Америка,США,Пенсильвания,Слиппери Рок 1228;364;139;Америка,США,Пенсильвания,Филадельфия 365;364;139;Америка,США,Пенсильвания,Харрисберг 2390;364;139;Америка,США,Пенсильвания,Другое 450;450;139;Америка,США,Пуэрто-Рико 451;450;139;Америка,США,Пуэрто-Рико,Понсе 3093;450;139;Америка,США,Пуэрто-Рико,Сан-Хуан 2389;450;139;Америка,США,Пуэрто-Рико,Другое 356;356;139;Америка,США,Род-Айленд 357;356;139;Америка,США,Род-Айленд,Провиденс 2388;356;139;Америка,США,Род-Айленд,Другое 382;382;139;Америка,США,Северная Дакота 383;382;139;Америка,США,Северная Дакота,Бисмарк 2387;382;139;Америка,США,Северная Дакота,Другое 398;398;139;Америка,США,Северная Каролина 2960;398;139;Америка,США,Северная Каролина,Вильмингтон 2915;398;139;Америка,США,Северная Каролина,Дурхам 399;398;139;Америка,США,Северная Каролина,Роли 2386;398;139;Америка,США,Северная Каролина,Другое 410;410;139;Америка,США,Теннесси 2863;410;139;Америка,США,Теннесси,Мемфис 411;410;139;Америка,США,Теннесси,Нашвилл 1229;410;139;Америка,США,Теннесси,Ноксвилл 2385;410;139;Америка,США,Теннесси,Другое 422;422;139;Америка,США,Техас 3085;422;139;Америка,США,Техас,Бедфорд 2913;422;139;Америка,США,Техас,Брейди 1233;422;139;Америка,США,Техас,Даллас 2916;422;139;Америка,США,Техас,Ирвинг 3123;422;139;Америка,США,Техас,Кингсвилл 2873;422;139;Америка,США,Техас,Конрой 3096;422;139;Америка,США,Техас,Корпус Кристи 423;422;139;Америка,США,Техас,Остин 1232;422;139;Америка,США,Техас,Сан-Антонио 3023;422;139;Америка,США,Техас,Уайли 1231;422;139;Америка,США,Техас,Хьюстон 1230;422;139;Америка,США,Техас,Эль-Пасо 2384;422;139;Америка,США,Техас,Другое 406;406;139;Америка,США,Федеральный округ Колумбия 2383;406;139;Америка,США,Федеральный округ Колумбия,Другое 404;404;139;Америка,США,Флорида 2879;404;139;Америка,США,Флорида,Бока-Рейтон 2880;404;139;Америка,США,Флорида,Гейнсвил 3086;404;139;Америка,США,Флорида,Джексонвиль 3002;404;139;Америка,США,Флорида,Киссимми 3124;404;139;Америка,США,Флорида,Корал Гейблс 2894;404;139;Америка,США,Флорида,Корал-Спрингс 3290;404;139;Америка,США,Флорида,Лейк-Ворт 1234;404;139;Америка,США,Флорида,Майами 1236;404;139;Америка,США,Флорида,Орландо 3372;404;139;Америка,США,Флорида,Пинеллас Парк 2952;404;139;Америка,США,Флорида,Пунта-Горда 3340;404;139;Америка,США,Флорида,Сарасота 1235;404;139;Америка,США,Флорида,Сент-Питерсберг 405;404;139;Америка,США,Флорида,Таллахасси 2962;404;139;Америка,США,Флорида,Форт Лаудердейл 2382;404;139;Америка,США,Флорида,Другое 384;384;139;Америка,США,Южная Дакота 385;384;139;Америка,США,Южная Дакота,Пирр 2381;384;139;Америка,США,Южная Дакота,Другое 400;400;139;Америка,США,Южная Каролина 401;400;139;Америка,США,Южная Каролина,Колумбия 3090;400;139;Америка,США,Южная Каролина,Спартанбург 1237;400;139;Америка,США,Южная Каролина,Чарлстон 2380;400;139;Америка,США,Южная Каролина,Другое 436;436;139;Америка,США,Юта 3036;436;139;Америка,США,Юта,Кейсвилл 3024;436;139;Америка,США,Юта,Линдон 3108;436;139;Америка,США,Юта,Орем 2866;436;139;Америка,США,Юта,Сент-Джордж 437;436;139;Америка,США,Юта,Солт-Лейк-Сити 2379;436;139;Америка,США,Юта,Другое 3200;0;3200;Америка,Ангилья (Брит.) 140;0;140;Америка,Антигуа и Барбуда 1238;1238;140;Америка,Антигуа и Барбуда,Сент-Джонс 2442;2442;140;Америка,Антигуа и Барбуда,Другое 141;0;141;Америка,Аргентина 1239;1239;141;Америка,Аргентина,Буэнос-Айрес 2441;2441;141;Америка,Аргентина,Другое 3202;0;3202;Америка,Аруба (Нид.) 142;0;142;Америка,Багамы 1240;1240;142;Америка,Багамы,Нассау 2440;2440;142;Америка,Багамы,Другое 143;0;143;Америка,Барбадос 1241;1241;143;Америка,Барбадос,Бриджтаун 2439;2439;143;Америка,Барбадос,Другое 146;0;146;Америка,Белиз 1242;1242;146;Америка,Белиз,Бельмопан 2438;2438;146;Америка,Белиз,Другое 3203;0;3203;Америка,Бермуды (Брит.) 144;0;144;Америка,Боливия 1243;1243;144;Америка,Боливия,Ла-Пас 2437;2437;144;Америка,Боливия,Другое 145;0;145;Америка,Бразилия 1244;1244;145;Америка,Бразилия,Бразилиа 3094;3094;145;Америка,Бразилия,Пассо Фундо 1245;1245;145;Америка,Бразилия,Рио-де-Жанейро 1246;1246;145;Америка,Бразилия,Сан-Паулу 2436;2436;145;Америка,Бразилия,Другое 147;0;147;Америка,Венесуэла 1247;1247;147;Америка,Венесуэла,Каракас 2435;2435;147;Америка,Венесуэла,Другое 3204;0;3204;Америка,Виргинские острова (Брит.) 452;0;452;Америка,Виргинские острова (США) 1190;1190;452;Америка,Виргинские острова (США),Шарлотта-Амалия 2364;2364;452;Америка,Виргинские острова (США),Другое 149;0;149;Америка,Гаити 1248;1248;149;Америка,Гаити,Порт-о-Пренс 2434;2434;149;Америка,Гаити,Другое 148;0;148;Америка,Гайана 1249;1249;148;Америка,Гайана,Джоржтаун 2433;2433;148;Америка,Гайана,Другое 3205;0;3205;Америка,Гваделупа (Фр.) 173;0;173;Америка,Гватемала 1250;1250;173;Америка,Гватемала,Гватемала 2432;2432;173;Америка,Гватемала,Другое 150;0;150;Америка,Гондурас 1251;1251;150;Америка,Гондурас,Тегусигальпа 2431;2431;150;Америка,Гондурас,Другое 151;0;151;Америка,Гренада 1252;1252;151;Америка,Гренада,Сент-Джорджес 2430;2430;151;Америка,Гренада,Другое 152;0;152;Америка,Гренландия (Дат.) 1253;1253;152;Америка,Гренландия (Дат.),Уманак 2429;2429;152;Америка,Гренландия (Дат.),Другое 153;0;153;Америка,Доминика 1254;1254;153;Америка,Доминика,Розо 2428;2428;153;Америка,Доминика,Другое 154;0;154;Америка,Доминиканская Республика 1255;1255;154;Америка,Доминиканская Республика,Санто-Доминго 2427;2427;154;Америка,Доминиканская Республика,Другое 155;0;155;Америка,Колумбия 1256;1256;155;Америка,Колумбия,Богота 2426;2426;155;Америка,Колумбия,Другое 156;0;156;Америка,Коста-Рика 1257;1257;156;Америка,Коста-Рика,Сан-Хосе 2425;2425;156;Америка,Коста-Рика,Другое 157;0;157;Америка,Куба 1258;1258;157;Америка,Куба,Гавана 2424;2424;157;Америка,Куба,Другое 3208;0;3208;Америка,Мартиника (Фр.) 158;0;158;Америка,Мексика 1259;1259;158;Америка,Мексика,Акапулько 1260;1260;158;Америка,Мексика,Мехико 2423;2423;158;Америка,Мексика,Другое 3209;0;3209;Америка,Монтсеррат (Брит) 3201;0;3201;Америка,Нидерландские Антилы 159;0;159;Америка,Никарагуа 1261;1261;159;Америка,Никарагуа,Манагуа 2422;2422;159;Америка,Никарагуа,Другое 3207;0;3207;Америка,Остров Кайман (Брит.) 3211;0;3211;Америка,Острова Теркс и Кайкос (Брит.) 160;0;160;Америка,Панама 1262;1262;160;Америка,Панама,Панама 2421;2421;160;Америка,Панама,Другое 161;0;161;Америка,Парагвай 1263;1263;161;Америка,Парагвай,Асунсьон 2420;2420;161;Америка,Парагвай,Другое 162;0;162;Америка,Перу 1264;1264;162;Америка,Перу,Лима 2419;2419;162;Америка,Перу,Другое 163;0;163;Америка,Сальвадор 1265;1265;163;Америка,Сальвадор,Сан-Сальвадор 2418;2418;163;Америка,Сальвадор,Другое 164;0;164;Америка,Сент-Винсент и Гренадины 1266;1266;164;Америка,Сент-Винсент и Гренадины,Кингстаун 2417;2417;164;Америка,Сент-Винсент и Гренадины,Другое 165;0;165;Америка,Сент-Китс и Невис 1267;1267;165;Америка,Сент-Китс и Невис,Бастер 2416;2416;165;Америка,Сент-Китс и Невис,Другое 166;0;166;Америка,Сент-Люсия 1268;1268;166;Америка,Сент-Люсия,Кастри 2415;2415;166;Америка,Сент-Люсия,Другое 3210;0;3210;Америка,Сент-Пьер и Микелон (Фр.) 167;0;167;Америка,Суринам 1269;1269;167;Америка,Суринам,Парамарибо 2414;2414;167;Америка,Суринам,Другое 168;0;168;Америка,Тринидат и Тобаго 1270;1270;168;Америка,Тринидат и Тобаго,Порт-оф-Спейн 2413;2413;168;Америка,Тринидат и Тобаго,Другое 169;0;169;Америка,Уругвай 1271;1271;169;Америка,Уругвай,Монтевидео 2412;2412;169;Америка,Уругвай,Другое 3212;0;3212;Америка,Фолклендские острова (Брит.) 3206;0;3206;Америка,Французская Гвиана 170;0;170;Америка,Чили 1272;1272;170;Америка,Чили,Сантьяго 2411;2411;170;Америка,Чили,Другое 171;0;171;Америка,Эквадор 1273;1273;171;Америка,Эквадор,Гуаякиль 1274;1274;171;Америка,Эквадор,Кито 2410;2410;171;Америка,Эквадор,Другое 3213;0;3213;Америка,Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.) 172;0;172;Америка,Ямайка 1275;1275;172;Америка,Ямайка,Кингстон 2409;2409;172;Америка,Ямайка,Другое 27;0;0;Африка 174;0;174;Африка,Алжир 1854;1854;174;Африка,Алжир,Алжир 2495;2495;174;Африка,Алжир,Другое 175;0;175;Африка,Ангола 1855;1855;175;Африка,Ангола,Луанда 2494;2494;175;Африка,Ангола,Другое 176;0;176;Африка,Бенин 1856;1856;176;Африка,Бенин,Котону 1857;1857;176;Африка,Бенин,Порто-Ново 2493;2493;176;Африка,Бенин,Другое 177;0;177;Африка,Ботсвана 1858;1858;177;Африка,Ботсвана,Габороне 2492;2492;177;Африка,Ботсвана,Другое 3228;0;3228;Африка,Британская территория в Индийском океане 178;0;178;Африка,Буркина-Фасо 1859;1859;178;Африка,Буркина-Фасо,Уагадугу 2491;2491;178;Африка,Буркина-Фасо,Другое 179;0;179;Африка,Бурунди 1860;1860;179;Африка,Бурунди,Бужумбуру 2490;2490;179;Африка,Бурунди,Другое 180;0;180;Африка,Габон 1861;1861;180;Африка,Габон,Либревиль 2489;2489;180;Африка,Габон,Другое 181;0;181;Африка,Гамбия 1862;1862;181;Африка,Гамбия,Банжул 2488;2488;181;Африка,Гамбия,Другое 182;0;182;Африка,Гана 1863;1863;182;Африка,Гана,Аккра 2487;2487;182;Африка,Гана,Другое 183;0;183;Африка,Гвинея 1864;1864;183;Африка,Гвинея,Конакри 2486;2486;183;Африка,Гвинея,Другое 184;0;184;Африка,Гвинея-Бисау 1865;1865;184;Африка,Гвинея-Бисау,Бисау 2485;2485;184;Африка,Гвинея-Бисау,Другое 185;0;185;Африка,Джибути 1866;1866;185;Африка,Джибути,Джибути 2484;2484;185;Африка,Джибути,Другое 186;0;186;Африка,Египет 3312;3312;186;Африка,Египет,Дахаб 1867;1867;186;Африка,Египет,Каир 1868;1868;186;Африка,Египет,Хургада 2483;2483;186;Африка,Египет,Другое 187;0;187;Африка,Замбия 1869;1869;187;Африка,Замбия,Лусака 2482;2482;187;Африка,Замбия,Другое 3198;0;3198;Африка,Зап. Сахара 23;0;23;Африка,Зимбабве 1870;1870;23;Африка,Зимбабве,Хараре 2481;2481;23;Африка,Зимбабве,Другое 188;0;188;Африка,Кабо-Верде 1871;1871;188;Африка,Кабо-Верде,Прая 2480;2480;188;Африка,Кабо-Верде,Другое 189;0;189;Африка,Камерун 1872;1872;189;Африка,Камерун,Яунде 2479;2479;189;Африка,Камерун,Другое 190;0;190;Африка,Кения 1873;1873;190;Африка,Кения,Найроби 2478;2478;190;Африка,Кения,Другое 191;0;191;Африка,Коморы 1874;1874;191;Африка,Коморы,Морони 2477;2477;191;Африка,Коморы,Другое 193;0;193;Африка,Конго (Заир) 1875;1875;193;Африка,Конго (Заир),Киншаса 2476;2476;193;Африка,Конго (Заир),Другое 192;0;192;Африка,Конго, Республика 1876;1876;192;Африка,Конго, Республика,Браззавиль 2475;2475;192;Африка,Конго, Республика,Другое 194;0;194;Африка,Кот-д`Ивуар 1877;1877;194;Африка,Кот-д`Ивуар,Ямусукро 2474;2474;194;Африка,Кот-д`Ивуар,Другое 195;0;195;Африка,Лесото 1878;1878;195;Африка,Лесото,Масеру 2473;2473;195;Африка,Лесото,Другое 196;0;196;Африка,Либерия 1879;1879;196;Африка,Либерия,Монровия 2472;2472;196;Африка,Либерия,Другое 197;0;197;Африка,Ливия 1880;1880;197;Африка,Ливия,Триполи 2471;2471;197;Африка,Ливия,Другое 198;0;198;Африка,Маврикий 1881;1881;198;Африка,Маврикий,Порт-Луи 2470;2470;198;Африка,Маврикий,Другое 199;0;199;Африка,Мавритания 1882;1882;199;Африка,Мавритания,Нуакшот 2469;2469;199;Африка,Мавритания,Другое 200;0;200;Африка,Мадагаскар 1883;1883;200;Африка,Мадагаскар,Антананариву 2468;2468;200;Африка,Мадагаскар,Другое 3229;0;3229;Африка,Майотт (Фр.) 201;0;201;Африка,Малави 1884;1884;201;Африка,Малави,Лилонгве 2467;2467;201;Африка,Малави,Другое 202;0;202;Африка,Мали 1885;1885;202;Африка,Мали,Бамако 2466;2466;202;Африка,Мали,Другое 203;0;203;Африка,Марокко 1886;1886;203;Африка,Марокко,Агадир 1887;1887;203;Африка,Марокко,Рабат 2465;2465;203;Африка,Марокко,Другое 204;0;204;Африка,Мозамбик 1888;1888;204;Африка,Мозамбик,Мапуту 2464;2464;204;Африка,Мозамбик,Другое 205;0;205;Африка,Намибия 1889;1889;205;Африка,Намибия,Виндхук 2463;2463;205;Африка,Намибия,Другое 206;0;206;Африка,Нигер 1890;1890;206;Африка,Нигер,Ниамей 2462;2462;206;Африка,Нигер,Другое 207;0;207;Африка,Нигерия 1891;1891;207;Африка,Нигерия,Абуджа 2461;2461;207;Африка,Нигерия,Другое 3227;0;3227;Африка,Остров Буве (Норв.) 3197;0;3197;Африка,Реюньон (Фр.) 208;0;208;Африка,Руанда 1892;1892;208;Африка,Руанда,Кигали 2460;2460;208;Африка,Руанда,Другое 209;0;209;Африка,Сан-Томе и Принсипи 1893;1893;209;Африка,Сан-Томе и Принсипи,Сан-Томе 2459;2459;209;Африка,Сан-Томе и Принсипи,Другое 210;0;210;Африка,Свазиленд 1894;1894;210;Африка,Свазиленд,Мбабане 2458;2458;210;Африка,Свазиленд,Другое 3199;0;3199;Африка,Святая Елена (Брит.) 211;0;211;Африка,Сейшелы 1895;1895;211;Африка,Сейшелы,Виктория 2457;2457;211;Африка,Сейшелы,Другое 212;0;212;Африка,Сенегал 1896;1896;212;Африка,Сенегал,Дакар 2456;2456;212;Африка,Сенегал,Другое 213;0;213;Африка,Сомали 1897;1897;213;Африка,Сомали,Могадишо 2455;2455;213;Африка,Сомали,Другое 214;0;214;Африка,Судан 1898;1898;214;Африка,Судан,Хартум 2454;2454;214;Африка,Судан,Другое 215;0;215;Африка,Сьерра-Леоне 1899;1899;215;Африка,Сьерра-Леоне,Фритаун 2453;2453;215;Африка,Сьерра-Леоне,Другое 216;0;216;Африка,Танзания 1900;1900;216;Африка,Танзания,Дар-эс-Салам 1901;1901;216;Африка,Танзания,Додома 2452;2452;216;Африка,Танзания,Другое 217;0;217;Африка,Того 1902;1902;217;Африка,Того,Ломе 2451;2451;217;Африка,Того,Другое 218;0;218;Африка,Тунис 1903;1903;218;Африка,Тунис,Тунис 2450;2450;218;Африка,Тунис,Другое 219;0;219;Африка,Уганда 1904;1904;219;Африка,Уганда,Кампала 2449;2449;219;Африка,Уганда,Другое 220;0;220;Африка,Центральноафриканская Республика 1905;1905;220;Африка,Центральноафриканская Республика,Банги 2448;2448;220;Африка,Центральноафриканская Республика,Другое 222;0;222;Африка,Чад 1906;1906;222;Африка,Чад,Нджамена 2447;2447;222;Африка,Чад,Другое 223;0;223;Африка,Экваториальная Гвинея 1907;1907;223;Африка,Экваториальная Гвинея,Малабо 2446;2446;223;Африка,Экваториальная Гвинея,Другое 221;0;221;Африка,Эритрея 1908;1908;221;Африка,Эритрея,Асмэра 2445;2445;221;Африка,Эритрея,Другое 224;0;224;Африка,Эфиопия 1909;1909;224;Африка,Эфиопия,Аддис-Абеба 2444;2444;224;Африка,Эфиопия,Другое 225;0;225;Африка,Южно-Африканская Республика (ЮАР) 1910;1910;225;Африка,Южно-Африканская Республика (ЮАР),Дурбан 1913;1913;225;Африка,Южно-Африканская Республика (ЮАР),Йоханнесбург 1912;1912;225;Африка,Южно-Африканская Республика (ЮАР),Кейптаун 3033;3033;225;Африка,Южно-Африканская Республика (ЮАР),Пайнтаун 1911;1911;225;Африка,Южно-Африканская Республика (ЮАР),Претория 2443;2443;225;Африка,Южно-Африканская Республика (ЮАР),Другое 26;0;0;Европа 39;0;39;Европа,Украина 314;314;39;Европа,Украина,Киев 315;315;39;Европа,Украина,Винницкая обл. 614;315;39;Европа,Украина,Винницкая обл.,Винница 615;315;39;Европа,Украина,Винницкая обл.,Хмельник 2566;315;39;Европа,Украина,Винницкая обл.,Другое 316;316;39;Европа,Украина,Волынская обл. 2940;316;39;Европа,Украина,Волынская обл.,Ковель 616;316;39;Европа,Украина,Волынская обл.,Луцк 2565;316;39;Европа,Украина,Волынская обл.,Другое 317;317;39;Европа,Украина,Днепропетровская обл. 617;317;39;Европа,Украина,Днепропетровская обл.,Днепродзержинск 618;317;39;Европа,Украина,Днепропетровская обл.,Днепропетровск 619;317;39;Европа,Украина,Днепропетровская обл.,Кривой Рог 620;317;39;Европа,Украина,Днепропетровская обл.,Никополь 621;317;39;Европа,Украина,Днепропетровская обл.,Новомосковск 622;317;39;Европа,Украина,Днепропетровская обл.,Орджоникидзе 623;317;39;Европа,Украина,Днепропетровская обл.,Павлоград 2564;317;39;Европа,Украина,Днепропетровская обл.,Другое 318;318;39;Европа,Украина,Донецкая обл. 624;318;39;Европа,Украина,Донецкая обл.,Артемовск 625;318;39;Европа,Украина,Донецкая обл.,Горловка 626;318;39;Европа,Украина,Донецкая обл.,Донецк 627;318;39;Европа,Украина,Донецкая обл.,Дружковка 628;318;39;Европа,Украина,Донецкая обл.,Енакиево 629;318;39;Европа,Украина,Донецкая обл.,Константиновка 630;318;39;Европа,Украина,Донецкая обл.,Краматорск 2944;318;39;Европа,Украина,Донецкая обл.,Красноармейск 631;318;39;Европа,Украина,Донецкая обл.,Макеевка 632;318;39;Европа,Украина,Донецкая обл.,Мариуполь 633;318;39;Европа,Украина,Донецкая обл.,Николаевка 634;318;39;Европа,Украина,Донецкая обл.,Славянск 635;318;39;Европа,Украина,Донецкая обл.,Харцызск 2563;318;39;Европа,Украина,Донецкая обл.,Другое 319;319;39;Европа,Украина,Житомирская обл. 636;319;39;Европа,Украина,Житомирская обл.,Бердичев 637;319;39;Европа,Украина,Житомирская обл.,Житомир 2942;319;39;Европа,Украина,Житомирская обл.,Коростень 638;319;39;Европа,Украина,Житомирская обл.,Коростышев 2907;319;39;Европа,Украина,Житомирская обл.,Малин 639;319;39;Европа,Украина,Житомирская обл.,Новоград-Волынский 2562;319;39;Европа,Украина,Житомирская обл.,Другое 320;320;39;Европа,Украина,Закарпатская обл. 640;320;39;Европа,Украина,Закарпатская обл.,Берегово 641;320;39;Европа,Украина,Закарпатская обл.,Воловец 3119;320;39;Европа,Украина,Закарпатская обл.,Мукачево 3162;320;39;Европа,Украина,Закарпатская обл.,Свалява 642;320;39;Европа,Украина,Закарпатская обл.,Ужгород 643;320;39;Европа,Украина,Закарпатская обл.,Хуст 2561;320;39;Европа,Украина,Закарпатская обл.,Другое 321;321;39;Европа,Украина,Запорожская обл. 644;321;39;Европа,Украина,Запорожская обл.,Бердянск 3128;321;39;Европа,Украина,Запорожская обл.,Гуляйполе 645;321;39;Европа,Украина,Запорожская обл.,Запорожье 646;321;39;Европа,Украина,Запорожская обл.,Мелитополь 3121;321;39;Европа,Украина,Запорожская обл.,Приморск 3378;321;39;Европа,Украина,Запорожская обл.,Энергодар 2560;321;39;Европа,Украина,Запорожская обл.,Другое 322;322;39;Европа,Украина,Ивано-Франковская обл. 3379;322;39;Европа,Украина,Ивано-Франковская обл.,Галич 647;322;39;Европа,Украина,Ивано-Франковская обл.,Ивано-Франковск 3170;322;39;Европа,Украина,Ивано-Франковская обл.,Яремче 2559;322;39;Европа,Украина,Ивано-Франковская обл.,Другое 323;323;39;Европа,Украина,Киевская обл. 648;323;39;Европа,Украина,Киевская обл.,Белая Церковь 649;323;39;Европа,Украина,Киевская обл.,Борисполь 651;323;39;Европа,Украина,Киевская обл.,Бровары 650;323;39;Европа,Украина,Киевская обл.,Васильков 652;323;39;Европа,Украина,Киевская обл.,Ирпень 3341;323;39;Европа,Украина,Киевская обл.,Переяслав-Хмельницкий 653;323;39;Европа,Украина,Киевская обл.,Славутич 654;323;39;Европа,Украина,Киевская обл.,Фастов 655;323;39;Европа,Украина,Киевская обл.,Чернобыль 2558;323;39;Европа,Украина,Киевская обл.,Другое 324;324;39;Европа,Украина,Кировоградская обл. 656;324;39;Европа,Украина,Кировоградская обл.,Александрия 657;324;39;Европа,Украина,Кировоградская обл.,Кировоград 658;324;39;Европа,Украина,Кировоградская обл.,Светловодск 2557;324;39;Европа,Украина,Кировоградская обл.,Другое 325;325;39;Европа,Украина,Крым 659;325;39;Европа,Украина,Крым,Алушта 2984;325;39;Европа,Украина,Крым,Армянск 3042;325;39;Европа,Украина,Крым,Балаклава 660;325;39;Европа,Украина,Крым,Бахчисарай 662;325;39;Европа,Украина,Крым,Гурзуф 3382;325;39;Европа,Украина,Крым,Джанкой 663;325;39;Европа,Украина,Крым,Евпатория 667;325;39;Европа,Украина,Крым,Керчь 666;325;39;Европа,Украина,Крым,Коктебель 668;325;39;Европа,Украина,Крым,Мысовое 669;325;39;Европа,Украина,Крым,Саки 665;325;39;Европа,Украина,Крым,Севастополь 661;325;39;Европа,Украина,Крым,Симферополь 3370;325;39;Европа,Украина,Крым,Старый Крым 670;325;39;Европа,Украина,Крым,Судак 664;325;39;Европа,Украина,Крым,Феодосия 3148;325;39;Европа,Украина,Крым,Черноморское 671;325;39;Европа,Украина,Крым,Ялта 2556;325;39;Европа,Украина,Крым,Другое 326;326;39;Европа,Украина,Луганская обл. 672;326;39;Европа,Украина,Луганская обл.,Алчевск 673;326;39;Европа,Украина,Луганская обл.,Антрацит 674;326;39;Европа,Украина,Луганская обл.,Лисичанск 675;326;39;Европа,Украина,Луганская обл.,Луганск 3364;326;39;Европа,Украина,Луганская обл.,Молодогвардейск 676;326;39;Европа,Украина,Луганская обл.,Петровское 677;326;39;Европа,Украина,Луганская обл.,Ровеньки 678;326;39;Европа,Украина,Луганская обл.,Рубежное 679;326;39;Европа,Украина,Луганская обл.,Северодонецк 680;326;39;Европа,Украина,Луганская обл.,Стаханов 2555;326;39;Европа,Украина,Луганская обл.,Другое 327;327;39;Европа,Украина,Львовская обл. 3284;327;39;Европа,Украина,Львовская обл.,Дрогобыч 681;327;39;Европа,Украина,Львовская обл.,Львов 682;327;39;Европа,Украина,Львовская обл.,Трускавец 2554;327;39;Европа,Украина,Львовская обл.,Другое 328;328;39;Европа,Украина,Николаевская обл. 3322;328;39;Европа,Украина,Николаевская обл.,Вознесенск 2870;328;39;Европа,Украина,Николаевская обл.,Жовтневое 683;328;39;Европа,Украина,Николаевская обл.,Николаев 3118;328;39;Европа,Украина,Николаевская обл.,Очаков 3325;328;39;Европа,Украина,Николаевская обл.,Южноукраинск 2553;328;39;Европа,Украина,Николаевская обл.,Другое 329;329;39;Европа,Украина,Одесская обл. 684;329;39;Европа,Украина,Одесская обл.,Белгород-Днестровский 685;329;39;Европа,Украина,Одесская обл.,Измаил 689;329;39;Европа,Украина,Одесская обл.,Ильичевск 686;329;39;Европа,Украина,Одесская обл.,Одесса 688;329;39;Европа,Украина,Одесская обл.,Рени 687;329;39;Европа,Украина,Одесская обл.,Слободка 2552;329;39;Европа,Украина,Одесская обл.,Другое 330;330;39;Европа,Украина,Полтавская обл. 690;330;39;Европа,Украина,Полтавская обл.,Гадяч 691;330;39;Европа,Украина,Полтавская обл.,Комсомольск 693;330;39;Европа,Украина,Полтавская обл.,Кременчуг 694;330;39;Европа,Украина,Полтавская обл.,Лубны 695;330;39;Европа,Украина,Полтавская обл.,Миргород 692;330;39;Европа,Украина,Полтавская обл.,Полтава 2551;330;39;Европа,Украина,Полтавская обл.,Другое 331;331;39;Европа,Украина,Ровенская обл. 696;331;39;Европа,Украина,Ровенская обл.,Здолбунов 697;331;39;Европа,Украина,Ровенская обл.,Ровно 3361;331;39;Европа,Украина,Ровенская обл.,Сарны 2550;331;39;Европа,Украина,Ровенская обл.,Другое 332;332;39;Европа,Украина,Сумская обл. 3356;332;39;Европа,Украина,Сумская обл.,Бурынь 698;332;39;Европа,Украина,Сумская обл.,Конотоп 700;332;39;Европа,Украина,Сумская обл.,Ромны 699;332;39;Европа,Украина,Сумская обл.,Сумы 701;332;39;Европа,Украина,Сумская обл.,Шостка 2549;332;39;Европа,Украина,Сумская обл.,Другое 333;333;39;Европа,Украина,Тернопольская обл. 702;333;39;Европа,Украина,Тернопольская обл.,Бережаны 3171;333;39;Европа,Украина,Тернопольская обл.,Борщев 703;333;39;Европа,Украина,Тернопольская обл.,Тернополь 704;333;39;Европа,Украина,Тернопольская обл.,Чортков 2548;333;39;Европа,Украина,Тернопольская обл.,Другое 334;334;39;Европа,Украина,Харьковская обл. 705;334;39;Европа,Украина,Харьковская обл.,Изюм 3346;334;39;Европа,Украина,Харьковская обл.,Купянск 3351;334;39;Европа,Украина,Харьковская обл.,Купянск 706;334;39;Европа,Украина,Харьковская обл.,Лозовая 708;334;39;Европа,Украина,Харьковская обл.,Мерефа 707;334;39;Европа,Украина,Харьковская обл.,Харьков 709;334;39;Европа,Украина,Харьковская обл.,Чугуев 2547;334;39;Европа,Украина,Харьковская обл.,Другое 335;335;39;Европа,Украина,Херсонская обл. 710;335;39;Европа,Украина,Херсонская обл.,Геническ 711;335;39;Европа,Украина,Херсонская обл.,Каховка 712;335;39;Европа,Украина,Херсонская обл.,Новая Каховка 3280;335;39;Европа,Украина,Херсонская обл.,Скадовск 713;335;39;Европа,Украина,Херсонская обл.,Херсон 2546;335;39;Европа,Украина,Херсонская обл.,Другое 336;336;39;Европа,Украина,Хмельницкая обл. 714;336;39;Европа,Украина,Хмельницкая обл.,Каменец-Подольский 715;336;39;Европа,Украина,Хмельницкая обл.,Красилов 2941;336;39;Европа,Украина,Хмельницкая обл.,Нетишин 716;336;39;Европа,Украина,Хмельницкая обл.,Полонное 3120;336;39;Европа,Украина,Хмельницкая обл.,Сатанов 2943;336;39;Европа,Украина,Хмельницкая обл.,Славута 717;336;39;Европа,Украина,Хмельницкая обл.,Хмельницкий 3155;336;39;Европа,Украина,Хмельницкая обл.,Чемировцы 2542;336;39;Европа,Украина,Хмельницкая обл.,Другое 337;337;39;Европа,Украина,Черкасская обл. 3169;337;39;Европа,Украина,Черкасская обл.,Золотоноша 3016;337;39;Европа,Украина,Черкасская обл.,Канев 3333;337;39;Европа,Украина,Черкасская обл.,Полонное 718;337;39;Европа,Украина,Черкасская обл.,Умань 719;337;39;Европа,Украина,Черкасская обл.,Христиновка 720;337;39;Европа,Украина,Черкасская обл.,Черкассы 2545;337;39;Европа,Украина,Черкасская обл.,Другое 338;338;39;Европа,Украина,Черниговская обл. 721;338;39;Европа,Украина,Черниговская обл.,Нежин 722;338;39;Европа,Украина,Черниговская обл.,Прилуки 723;338;39;Европа,Украина,Черниговская обл.,Чернигов 2544;338;39;Европа,Украина,Черниговская обл.,Другое 339;339;39;Европа,Украина,Черновицкая обл. 724;339;39;Европа,Украина,Черновицкая обл.,Черновцы 2543;339;39;Европа,Украина,Черновицкая обл.,Другое 40;0;40;Европа,Австрия 602;602;40;Европа,Австрия,Бад Халл 604;604;40;Европа,Австрия,Брегенц 603;603;40;Европа,Австрия,Вена 608;608;40;Европа,Австрия,Грац 606;606;40;Европа,Австрия,Зальцбург 3099;3099;40;Европа,Австрия,Зель-ам-Зее 605;605;40;Европа,Австрия,Инсбрук 3174;3174;40;Европа,Австрия,Кирхберг 609;609;40;Европа,Австрия,Клагенфурт 607;607;40;Европа,Австрия,Линц 610;610;40;Европа,Австрия,Обдах 611;611;40;Европа,Австрия,Щтубайтал 2541;2541;40;Европа,Австрия,Другое 32;0;32;Европа,Албания 612;612;32;Европа,Албания,Тирана 2540;2540;32;Европа,Албания,Другое 33;0;33;Европа,Андорра 613;613;33;Европа,Андорра,Андорра-ла-Велья 2539;2539;33;Европа,Андорра,Другое 340;0;340;Европа,Белоруссия 341;341;340;Европа,Белоруссия,Минск 342;342;340;Европа,Белоруссия,Брестская обл. 725;342;340;Европа,Белоруссия,Брестская обл.,Барановичи 726;342;340;Европа,Белоруссия,Брестская обл.,Белоозерск 727;342;340;Европа,Белоруссия,Брестская обл.,Береза 728;342;340;Европа,Белоруссия,Брестская обл.,Брест 3172;342;340;Европа,Белоруссия,Брестская обл.,Дрогичин 729;342;340;Европа,Белоруссия,Брестская обл.,Кобрин 730;342;340;Европа,Белоруссия,Брестская обл.,Ляховичи 731;342;340;Европа,Белоруссия,Брестская обл.,Малорита 732;342;340;Европа,Белоруссия,Брестская обл.,Пинск 2538;342;340;Европа,Белоруссия,Брестская обл.,Другое 343;343;340;Европа,Белоруссия,Витебская обл. 733;343;340;Европа,Белоруссия,Витебская обл.,Браслав 735;343;340;Европа,Белоруссия,Витебская обл.,Витебск 734;343;340;Европа,Белоруссия,Витебская обл.,Новолукомоль 736;343;340;Европа,Белоруссия,Витебская обл.,Новополоцк 737;343;340;Европа,Белоруссия,Витебская обл.,Орша 738;343;340;Европа,Белоруссия,Витебская обл.,Толочин 2537;343;340;Европа,Белоруссия,Витебская обл.,Другое 344;344;340;Европа,Белоруссия,Гомельская обл. 739;344;340;Европа,Белоруссия,Гомельская обл.,Гомель 740;344;340;Европа,Белоруссия,Гомельская обл.,Жлобин 741;344;340;Европа,Белоруссия,Гомельская обл.,Мозырь 742;344;340;Европа,Белоруссия,Гомельская обл.,Речица 743;344;340;Европа,Белоруссия,Гомельская обл.,Рогачев 744;344;340;Европа,Белоруссия,Гомельская обл.,Светлогорск 2536;344;340;Европа,Белоруссия,Гомельская обл.,Другое 345;345;340;Европа,Белоруссия,Гродненская обл. 745;345;340;Европа,Белоруссия,Гродненская обл.,Волковыск 746;345;340;Европа,Белоруссия,Гродненская обл.,Гродно 747;345;340;Европа,Белоруссия,Гродненская обл.,Лида 3244;345;340;Европа,Белоруссия,Гродненская обл.,Слоним 748;345;340;Европа,Белоруссия,Гродненская обл.,Сморгонь 2535;345;340;Европа,Белоруссия,Гродненская обл.,Другое 346;346;340;Европа,Белоруссия,Минская обл. 3149;346;340;Европа,Белоруссия,Минская обл.,Березино 749;346;340;Европа,Белоруссия,Минская обл.,Борисов 750;346;340;Европа,Белоруссия,Минская обл.,Вилейка 751;346;340;Европа,Белоруссия,Минская обл.,Жодино 752;346;340;Европа,Белоруссия,Минская обл.,Марьина Горка 753;346;340;Европа,Белоруссия,Минская обл.,Молодечно 2896;346;340;Европа,Белоруссия,Минская обл.,Слуцк 754;346;340;Европа,Белоруссия,Минская обл.,Смолевичи 755;346;340;Европа,Белоруссия,Минская обл.,Солигорск 756;346;340;Европа,Белоруссия,Минская обл.,Червень 2534;346;340;Европа,Белоруссия,Минская обл.,Другое 347;347;340;Европа,Белоруссия,Могилевская обл. 757;347;340;Европа,Белоруссия,Могилевская обл.,Бобруйск 758;347;340;Европа,Белоруссия,Могилевская обл.,Могилев 759;347;340;Европа,Белоруссия,Могилевская обл.,Осиповичи 2533;347;340;Европа,Белоруссия,Могилевская обл.,Другое 38;0;38;Европа,Бельгия 760;760;38;Европа,Бельгия,Антверпен 767;767;38;Европа,Бельгия,Арлон 762;762;38;Европа,Бельгия,Брюгге 761;761;38;Европа,Бельгия,Брюссель 763;763;38;Европа,Бельгия,Гент 769;769;38;Европа,Бельгия,Лувен 765;765;38;Европа,Бельгия,Льеж 764;764;38;Европа,Бельгия,Монс 3117;3117;38;Европа,Бельгия,Мортсель 766;766;38;Европа,Бельгия,Намюр 768;768;38;Европа,Бельгия,Хасселт 2532;2532;38;Европа,Бельгия,Другое 41;0;41;Европа,Болгария 3098;3098;41;Европа,Болгария,Банско 792;792;41;Европа,Болгария,Благоевград 770;770;41;Европа,Болгария,Бургас 771;771;41;Европа,Болгария,Бяла 773;773;41;Европа,Болгария,Варна 776;776;41;Европа,Болгария,Велико-Тырново 788;788;41;Европа,Болгария,Видин 789;789;41;Европа,Болгария,Враца 796;796;41;Европа,Болгария,Габрово 777;777;41;Европа,Болгария,Димитровград 781;781;41;Европа,Болгария,Каварна 786;786;41;Европа,Болгария,Кырджали 791;791;41;Европа,Болгария,Кюстендил 793;793;41;Европа,Болгария,Лазарджик 795;795;41;Европа,Болгария,Ловеч 787;787;41;Европа,Болгария,Михайловград 790;790;41;Европа,Болгария,Перник 3133;3133;41;Европа,Болгария,Пирдоп 794;794;41;Европа,Болгария,Плевен 782;782;41;Европа,Болгария,Пловдив 780;780;41;Европа,Болгария,Разград 779;779;41;Европа,Болгария,Русе 774;774;41;Европа,Болгария,Силистра 784;784;41;Европа,Болгария,Сливен 772;772;41;Европа,Болгария,София 775;775;41;Европа,Болгария,Толбухин 3116;3116;41;Европа,Болгария,Тырново 785;785;41;Европа,Болгария,Хасково 778;778;41;Европа,Болгария,Шумен 783;783;41;Европа,Болгария,Ямбол 2531;2531;41;Европа,Болгария,Другое 42;0;42;Европа,Босния и Герцеговина 797;797;42;Европа,Босния и Герцеговина,Баня-Лука 799;799;42;Европа,Босния и Герцеговина,Зеница 798;798;42;Европа,Босния и Герцеговина,Сараево 800;800;42;Европа,Босния и Герцеговина,Тузла 2530;2530;42;Европа,Босния и Герцеговина,Другое 43;0;43;Европа,Ватикан 45;0;45;Европа,Великобритания 802;802;45;Европа,Великобритания,Абердин 3075;3075;45;Европа,Великобритания,Айслворт 801;801;45;Европа,Великобритания,Алнвик 804;804;45;Европа,Великобритания,Бидефорд 803;803;45;Европа,Великобритания,Бирмингем 805;805;45;Европа,Великобритания,Блоксвич 3168;3168;45;Европа,Великобритания,Бостон 806;806;45;Европа,Великобритания,Брайтон 807;807;45;Европа,Великобритания,Бредфорд 808;808;45;Европа,Великобритания,Бристоль 809;809;45;Европа,Великобритания,Вилленхолл 3131;3131;45;Европа,Великобритания,Воррингтон 810;810;45;Европа,Великобритания,Вудбридж 3342;3342;45;Европа,Великобритания,Гилфорд 811;811;45;Европа,Великобритания,Глазго 812;812;45;Европа,Великобритания,Дадли 813;813;45;Европа,Великобритания,Дарем 814;814;45;Европа,Великобритания,Дуглас 3089;3089;45;Европа,Великобритания,Кардиф 815;815;45;Европа,Великобритания,Кембридж 816;816;45;Европа,Великобритания,Кентербери 817;817;45;Европа,Великобритания,Ливерпуль 818;818;45;Европа,Великобритания,Лидс 819;819;45;Европа,Великобритания,Лондон 820;820;45;Европа,Великобритания,Манчестер 2976;2976;45;Европа,Великобритания,Митчем 2988;2988;45;Европа,Великобритания,Мэйденхед 821;821;45;Европа,Великобритания,Ноттингем 3088;3088;45;Европа,Великобритания,Ньюпорт 822;822;45;Европа,Великобритания,Оксфорд 823;823;45;Европа,Великобритания,Плимут 824;824;45;Европа,Великобритания,Портсмут 825;825;45;Европа,Великобритания,Престон 3343;3343;45;Европа,Великобритания,Райд 2867;2867;45;Европа,Великобритания,Ридинг 2986;2986;45;Европа,Великобритания,Сент-Албанс 826;826;45;Европа,Великобритания,Стаффорд 3063;3063;45;Европа,Великобритания,Стокпорт 827;827;45;Европа,Великобритания,Уэймут 3140;3140;45;Европа,Великобритания,Челтенхэм 828;828;45;Европа,Великобритания,Честер 829;829;45;Европа,Великобритания,Шеффилд 830;830;45;Европа,Великобритания,Эдинбург 2529;2529;45;Европа,Великобритания,Другое 44;0;44;Европа,Венгрия 831;831;44;Европа,Венгрия,Будапешт 832;832;44;Европа,Венгрия,Геделле 836;836;44;Европа,Венгрия,Дебрецен 835;835;44;Европа,Венгрия,Мишкольц 834;834;44;Европа,Венгрия,Сегед 833;833;44;Европа,Венгрия,Шиофок 2528;2528;44;Европа,Венгрия,Другое 46;0;46;Европа,Германия 3007;3007;46;Европа,Германия,Аахен 837;837;46;Европа,Германия,Аугсбург 838;838;46;Европа,Германия,Баден-Баден 3371;3371;46;Европа,Германия,Бамберг 839;839;46;Европа,Германия,Бергиш-Гладбах 840;840;46;Европа,Германия,Берлин 841;841;46;Европа,Германия,Билефельд 3163;3163;46;Европа,Германия,Бовенден 842;842;46;Европа,Германия,Бонн 843;843;46;Европа,Германия,Браденбург 3015;3015;46;Европа,Германия,Брауншвейг 844;844;46;Европа,Германия,Бремен 2921;2921;46;Европа,Германия,Варштайн 845;845;46;Европа,Германия,Веймар 846;846;46;Европа,Германия,Вупперталь 847;847;46;Европа,Германия,Гамбург 848;848;46;Европа,Германия,Ганновер 849;849;46;Европа,Германия,Гарделеген 3010;3010;46;Европа,Германия,Гейдельберг 850;850;46;Европа,Германия,Гота 851;851;46;Европа,Германия,Дармштадт 3072;3072;46;Европа,Германия,Дессау 852;852;46;Европа,Германия,Детмольд 853;853;46;Европа,Германия,Дортмунд 854;854;46;Европа,Германия,Дрезден 855;855;46;Европа,Германия,Дюссельдорф 3082;3082;46;Европа,Германия,Иффецхайм 3309;3309;46;Европа,Германия,Кассел 856;856;46;Европа,Германия,Кельн 857;857;46;Европа,Германия,Киль 3138;3138;46;Европа,Германия,Кобленц 858;858;46;Европа,Германия,Крефельд 859;859;46;Европа,Германия,Лейпциг 2872;2872;46;Европа,Германия,Лимбург 2965;2965;46;Европа,Германия,Линген 3135;3135;46;Европа,Германия,Любек 3156;3156;46;Европа,Германия,Мангейм 3192;3192;46;Европа,Германия,Меерсбург 860;860;46;Европа,Германия,Мюнстер 861;861;46;Европа,Германия,Мюнхен 2864;2864;46;Европа,Германия,Нойштадт 862;862;46;Европа,Германия,Нюрнберг 3009;3009;46;Европа,Германия,Оффенбург 2993;2993;46;Европа,Германия,Падерборн 863;863;46;Европа,Германия,Равенсбург 864;864;46;Европа,Германия,Регенсбург 865;865;46;Европа,Германия,Рейнен 866;866;46;Европа,Германия,Росток 3191;3191;46;Европа,Германия,Саарбрюкен 2974;2974;46;Европа,Германия,Санкт-Августин 3127;3127;46;Европа,Германия,Тюринген 867;867;46;Европа,Германия,Фрайберг 868;868;46;Европа,Германия,Фрайбург 869;869;46;Европа,Германия,Франкфурт-на-Майне 3373;3373;46;Европа,Германия,Хемнитц 3313;3313;46;Европа,Германия,Хильден 870;870;46;Европа,Германия,Штутгарт 3045;3045;46;Европа,Германия,Эрланген 2906;2906;46;Европа,Германия,Эшборн 2527;2527;46;Европа,Германия,Другое 3193;0;3193;Европа,Гернси (Брит.) 47;0;47;Европа,Гибралтар (Брит.) 48;0;48;Европа,Греция 871;871;48;Европа,Греция,Афины 873;873;48;Европа,Греция,Ираклион 3147;3147;48;Европа,Греция,Корфу 872;872;48;Европа,Греция,Салоники 3178;3178;48;Европа,Греция,Халкидики 2526;2526;48;Европа,Греция,Другое 49;0;49;Европа,Дания 3006;3006;49;Европа,Дания,Архус 874;874;49;Европа,Дания,Копенгаген 875;875;49;Европа,Дания,Оденсе 3285;3285;49;Европа,Дания,Ольборг 876;876;49;Европа,Дания,Сванеке 3126;3126;49;Европа,Дания,Скиве 2525;2525;49;Европа,Дания,Другое 3194;0;3194;Европа,Джерси (Брит.) 50;0;50;Европа,Ирландия 3377;3377;50;Европа,Ирландия,Виклоу 3067;3067;50;Европа,Ирландия,Голвей 877;877;50;Европа,Ирландия,Дублин 3065;3065;50;Европа,Ирландия,Килларней 3066;3066;50;Европа,Ирландия,Корк 878;878;50;Европа,Ирландия,Лимерик 3069;3069;50;Европа,Ирландия,Нейс 3068;3068;50;Европа,Ирландия,Типперэри 2524;2524;50;Европа,Ирландия,Другое 51;0;51;Европа,Исландия 879;879;51;Европа,Исландия,Рейкьявик 2523;2523;51;Европа,Исландия,Другое 34;0;34;Европа,Испания 880;880;34;Европа,Испания,Аликанте 3125;3125;34;Европа,Испания,Альмерия 881;881;34;Европа,Испания,Барселона 890;890;34;Европа,Испания,Бильбао 3076;3076;34;Европа,Испания,Бланес 882;882;34;Европа,Испания,Валенсия 3070;3070;34;Европа,Испания,Ибица 888;888;34;Европа,Испания,Кадис 886;886;34;Европа,Испания,Картахена 891;891;34;Европа,Испания,Ла-Корунья 3310;3310;34;Европа,Испания,Лорет де Мар 883;883;34;Европа,Испания,Мадрид 884;884;34;Европа,Испания,Малага 885;885;34;Европа,Испания,Марбелья 892;892;34;Европа,Испания,Овьедо 3179;3179;34;Европа,Испания,Пальма де Майорка 3177;3177;34;Европа,Испания,Сан-Агустин 3289;3289;34;Европа,Испания,Санта-Крус-де-Тенерифе 889;889;34;Европа,Испания,Сарагоса 887;887;34;Европа,Испания,Севилья 893;893;34;Европа,Испания,Хихон 2522;2522;34;Европа,Испания,Другое 52;0;52;Европа,Италия 3318;3318;52;Европа,Италия,Аоста 3278;3278;52;Европа,Италия,Беллариа 906;906;52;Европа,Италия,Болонья 894;894;52;Европа,Италия,Брешиа 895;895;52;Европа,Италия,Венеция 905;905;52;Европа,Италия,Верона 896;896;52;Европа,Италия,Генуя 897;897;52;Европа,Италия,Лекко 3369;3369;52;Европа,Италия,Ливорно 3327;3327;52;Европа,Италия,Марсала 898;898;52;Европа,Италия,Милан 899;899;52;Европа,Италия,Модена 907;907;52;Европа,Италия,Неаполь 908;908;52;Европа,Италия,Перуджа 900;900;52;Европа,Италия,Пиза 901;901;52;Европа,Италия,Рим 3368;3368;52;Европа,Италия,Сан-Ремо 3384;3384;52;Европа,Италия,Сиракуза 3252;3252;52;Европа,Италия,Терамо 902;902;52;Европа,Италия,Триест 903;903;52;Европа,Италия,Турин 3130;3130;52;Европа,Италия,Фано 904;904;52;Европа,Италия,Флоренция 2521;2521;52;Европа,Италия,Другое 53;0;53;Европа,Латвия 2939;2939;53;Европа,Латвия,Айзкраукле 3054;3054;53;Европа,Латвия,Валка 909;909;53;Европа,Латвия,Даугавпилс 2934;2934;53;Европа,Латвия,Екабпилс 913;913;53;Европа,Латвия,Елгава 2935;2935;53;Европа,Латвия,Кокнесе 912;912;53;Европа,Латвия,Лиепая 2905;2905;53;Европа,Латвия,Резекне 911;911;53;Европа,Латвия,Рига 2936;2936;53;Европа,Латвия,Саласпилс 2937;2937;53;Европа,Латвия,Смилтене 910;910;53;Европа,Латвия,Юрмала 2520;2520;53;Европа,Латвия,Другое 54;0;54;Европа,Литва 914;914;54;Европа,Литва,Вильнюс 915;915;54;Европа,Литва,Висагинас 916;916;54;Европа,Литва,Каунас 918;918;54;Европа,Литва,Клайпеда 919;919;54;Европа,Литва,Паланга 3173;3173;54;Европа,Литва,Пеневежис 917;917;54;Европа,Литва,Шауляй 2519;2519;54;Европа,Литва,Другое 55;0;55;Европа,Лихтенштейн 920;920;55;Европа,Лихтенштейн,Вадуц 2518;2518;55;Европа,Лихтенштейн,Другое 56;0;56;Европа,Люксембург 3376;3376;56;Европа,Люксембург,Бетцдорф 921;921;56;Европа,Люксембург,Люксембург 2517;2517;56;Европа,Люксембург,Другое 57;0;57;Европа,Македония 3142;3142;57;Европа,Македония,Битола 922;922;57;Европа,Македония,Скопье 2516;2516;57;Европа,Македония,Другое 58;0;58;Европа,Мальта 923;923;58;Европа,Мальта,Валлетта 3154;3154;58;Европа,Мальта,Мзида 924;924;58;Европа,Мальта,Слима 2515;2515;58;Европа,Мальта,Другое 59;0;59;Европа,Молдавия 925;925;59;Европа,Молдавия,Бельцы 926;926;59;Европа,Молдавия,Бендеры 3234;3234;59;Европа,Молдавия,Дубоссары 3275;3275;59;Европа,Молдавия,Кахул 927;927;59;Европа,Молдавия,Кишинев 3321;3321;59;Европа,Молдавия,Резина 928;928;59;Европа,Молдавия,Рыбница 929;929;59;Европа,Молдавия,Тирасполь 3281;3281;59;Европа,Молдавия,Чадыр-Лунга 2514;2514;59;Европа,Молдавия,Другое 36;0;36;Европа,Монако 930;930;36;Европа,Монако,Монте-Карло 2513;2513;36;Европа,Монако,Другое 60;0;60;Европа,Нидерланды 931;931;60;Европа,Нидерланды,Амстердам 933;933;60;Европа,Нидерланды,Бреда 932;932;60;Европа,Нидерланды,Гаага 934;934;60;Европа,Нидерланды,Гауда 935;935;60;Европа,Нидерланды,Делфт 2977;2977;60;Европа,Нидерланды,Донген 3030;3030;60;Европа,Нидерланды,Зволле 3091;3091;60;Европа,Нидерланды,Ниймеген 936;936;60;Европа,Нидерланды,Роттердам 937;937;60;Европа,Нидерланды,Утрехт 3044;3044;60;Европа,Нидерланды,Эйндховен 3380;3380;60;Европа,Нидерланды,Эншеде 2512;2512;60;Европа,Нидерланды,Другое 61;0;61;Европа,Норвегия 3190;3190;61;Европа,Норвегия,Кристиансанд 2857;2857;61;Европа,Норвегия,Лиллехаммер 938;938;61;Европа,Норвегия,Осло 3355;3355;61;Европа,Норвегия,Ставангер 939;939;61;Европа,Норвегия,Тронхейм 2511;2511;61;Европа,Норвегия,Другое 3195;0;3195;Европа,Остров Мэн (Брит.) 62;0;62;Европа,Польша 940;940;62;Европа,Польша,Белосток 941;941;62;Европа,Польша,Варшава 3164;3164;62;Европа,Польша,Вроцлав 942;942;62;Европа,Польша,Гданьск 943;943;62;Европа,Польша,Гливице 3237;3237;62;Европа,Польша,Закопане 3165;3165;62;Европа,Польша,Зелена Гура 944;944;62;Европа,Польша,Катовице 945;945;62;Европа,Польша,Краков 3008;3008;62;Европа,Польша,Лодзь 3150;3150;62;Европа,Польша,Ольштын 946;946;62;Европа,Польша,Познань 947;947;62;Европа,Польша,Радом 948;948;62;Европа,Польша,Сопот 2958;2958;62;Европа,Польша,Тыхы 2510;2510;62;Европа,Польша,Другое 35;0;35;Европа,Португалия 949;949;35;Европа,Португалия,Лиссабон 950;950;35;Европа,Португалия,Порто 2509;2509;35;Европа,Португалия,Другое 63;0;63;Европа,Румыния 952;952;63;Европа,Румыния,Брашов 951;951;63;Европа,Румыния,Бухарест 954;954;63;Европа,Румыния,Констанца 955;955;63;Европа,Румыния,Плоешти 953;953;63;Европа,Румыния,Яссы 2508;2508;63;Европа,Румыния,Другое 64;0;64;Европа,Сан-Марино 956;956;64;Европа,Сан-Марино,Сан-Марино 2507;2507;64;Европа,Сан-Марино,Другое 74;0;74;Европа,Сербия и Черногория 957;957;74;Европа,Сербия и Черногория,Белград 960;960;74;Европа,Сербия и Черногория,Ниш 958;958;74;Европа,Сербия и Черногория,Нови-Сад 959;959;74;Европа,Сербия и Черногория,Сараево 2506;2506;74;Европа,Сербия и Черногория,Другое 65;0;65;Европа,Словакия 961;961;65;Европа,Словакия,Братислава 962;962;65;Европа,Словакия,Кошице 3101;3101;65;Европа,Словакия,Липтов 963;963;65;Европа,Словакия,Попрад 964;964;65;Европа,Словакия,Прешов 965;965;65;Европа,Словакия,Ружемберок 966;966;65;Европа,Словакия,Тврдошин 2505;2505;65;Европа,Словакия,Другое 66;0;66;Европа,Словения 968;968;66;Европа,Словения,Копар 967;967;66;Европа,Словения,Любляна 969;969;66;Европа,Словения,Марибор 2504;2504;66;Европа,Словения,Другое 67;0;67;Европа,Фарерские о-ва (Дания) 970;970;67;Европа,Фарерские о-ва (Дания),Торсхавн 2503;2503;67;Европа,Фарерские о-ва (Дания),Другое 68;0;68;Европа,Финляндия 2888;2888;68;Европа,Финляндия,Вантаа 971;971;68;Европа,Финляндия,Васа 979;979;68;Европа,Финляндия,Котка 972;972;68;Европа,Финляндия,Коувола 980;980;68;Европа,Финляндия,Лахти 973;973;68;Европа,Финляндия,Оулу 3375;3375;68;Европа,Финляндия,Риихимяки 3159;3159;68;Европа,Финляндия,Руовеси 974;974;68;Европа,Финляндия,Тампере 975;975;68;Европа,Финляндия,Турку 976;976;68;Европа,Финляндия,Хельсинки 977;977;68;Европа,Финляндия,Эспо 978;978;68;Европа,Финляндия,Ювяскюля 2502;2502;68;Европа,Финляндия,Другое 37;0;37;Европа,Франция 996;996;37;Европа,Франция,Авиньон 983;983;37;Европа,Франция,Бержерак 997;997;37;Европа,Франция,Блуа 984;984;37;Европа,Франция,Бордо 998;998;37;Европа,Франция,Дижон 987;987;37;Европа,Франция,Канн 988;988;37;Европа,Франция,Кастр 993;993;37;Европа,Франция,Клермон-Ферран 3037;3037;37;Европа,Франция,Лилль 989;989;37;Европа,Франция,Лион 985;985;37;Европа,Франция,Марсель 991;991;37;Европа,Франция,Мец 3161;3161;37;Европа,Франция,Мобеж 990;990;37;Европа,Франция,Нанси 994;994;37;Европа,Франция,Нант 995;995;37;Европа,Франция,Ницца 999;999;37;Европа,Франция,Орлеан 981;981;37;Европа,Франция,Париж 3374;3374;37;Европа,Франция,Перпиньян 992;992;37;Европа,Франция,Руан 982;982;37;Европа,Франция,Страсбург 986;986;37;Европа,Франция,Тулуза 3314;3314;37;Европа,Франция,Шамбери 2501;2501;37;Европа,Франция,Другое 69;0;69;Европа,Хорватия 1003;1003;69;Европа,Хорватия,Дубровник 1000;1000;69;Европа,Хорватия,Загреб 1001;1001;69;Европа,Хорватия,Задар 1004;1004;69;Европа,Хорватия,Риека 1002;1002;69;Европа,Хорватия,Сплит 2500;2500;69;Европа,Хорватия,Другое 70;0;70;Европа,Чехия 1005;1005;70;Европа,Чехия,Брно 3291;3291;70;Европа,Чехия,Гавличкув-Брод 1007;1007;70;Европа,Чехия,Градец-Кралове 1008;1008;70;Европа,Чехия,Карлови-Вари 3019;3019;70;Европа,Чехия,Кладрубы 1010;1010;70;Европа,Чехия,Лоуни 1009;1009;70;Европа,Чехия,Острава 1015;1015;70;Европа,Чехия,Пльзень 3105;3105;70;Европа,Чехия,Правчицка Брана 1006;1006;70;Европа,Чехия,Прага 3246;3246;70;Европа,Чехия,Тачов 1011;1011;70;Европа,Чехия,Тршебич 1012;1012;70;Европа,Чехия,Усти-над-Лабем 1014;1014;70;Европа,Чехия,Ческе-Будеевице 1013;1013;70;Европа,Чехия,Яблонец-над-Нисоу 2499;2499;70;Европа,Чехия,Другое 71;0;71;Европа,Швейцария 1016;1016;71;Европа,Швейцария,Арау 1019;1019;71;Европа,Швейцария,Баден 1017;1017;71;Европа,Швейцария,Базель 1018;1018;71;Европа,Швейцария,Берн 1020;1020;71;Европа,Швейцария,Биль 1021;1021;71;Европа,Швейцария,Винтертур 1022;1022;71;Европа,Швейцария,Давос 3189;3189;71;Европа,Швейцария,Делемонт 1023;1023;71;Европа,Швейцария,Женева 1024;1024;71;Европа,Швейцария,Золотурн 1025;1025;71;Европа,Швейцария,Лозанна 1026;1026;71;Европа,Швейцария,Локарно 1027;1027;71;Европа,Швейцария,Лугано 1028;1028;71;Европа,Швейцария,Люцерн 1029;1029;71;Европа,Швейцария,Монтре 1030;1030;71;Европа,Швейцария,Цюрих 2498;2498;71;Европа,Швейцария,Другое 72;0;72;Европа,Швеция 2883;2883;72;Европа,Швеция,Арбога 1031;1031;72;Европа,Швеция,Гетеборг 1032;1032;72;Европа,Швеция,Кальмар 1037;1037;72;Европа,Швеция,Лахольм 1036;1036;72;Европа,Швеция,Лулео 1042;1042;72;Европа,Швеция,Лунд 1033;1033;72;Европа,Швеция,Мальме 1034;1034;72;Европа,Швеция,Стокгольм 1041;1041;72;Европа,Швеция,Умео 1039;1039;72;Европа,Швеция,Фалун 1043;1043;72;Европа,Швеция,Хельсинборг 1040;1040;72;Европа,Швеция,Хернесанд 1038;1038;72;Европа,Швеция,Эстерсунд 2497;2497;72;Европа,Швеция,Другое 3196;0;3196;Европа,Шпицберген (Норв.) 73;0;73;Европа,Эстония 3013;3013;73;Европа,Эстония,Валга 1044;1044;73;Европа,Эстония,Кейла 1045;1045;73;Европа,Эстония,Кохтла-Ярве 1046;1046;73;Европа,Эстония,Маарду 1047;1047;73;Европа,Эстония,Мыйзакюла 1048;1048;73;Европа,Эстония,Нарва 1049;1049;73;Европа,Эстония,Пярну 1050;1050;73;Европа,Эстония,Раквере 1051;1051;73;Европа,Эстония,Силламяэ 1052;1052;73;Европа,Эстония,Таллин 1053;1053;73;Европа,Эстония,Тарту 1054;1054;73;Европа,Эстония,Хаапсалу 2496;2496;73;Европа,Эстония,Другое qutim-0.2.0/plugins/mrim/Resources/statuses.xml0000644000175000017500000000612411273054313023312 0ustar euroelessareuroelessar 4 Sick 5 At home 6 Eat 7 Where am I? 8 WC 9 Cooking 10 Walking 11 I'm an alien! 12 I'm a shrimp! 13 I'm lost :( 14 Crazy %) 15 Duck 16 Playing 17 Smoke 18 At work 19 On the meeting 20 Beer 21 Coffee 22 Shovel 23 Sleeping 24 On the phone 26 In the university 27 School 28 You have the wrong number 29 LOL 30 Tongue 32 Smiley 33 Hippy 34 Sad 35 Crying 36 Surprised 37 Angry 38 Vampire 39 Ass 40 Heart 41 Crescent 42 Coool! 43 Horns 44 Figa 45 F*ck you! 46 Skull 47 Rocket 48 Ktulhu 49 Goat 50 Must die!! 51 Squirrel 52 Party! 53 Music qutim-0.2.0/plugins/jabber/0000755000175000017500000000000011273101002017205 5ustar euroelessareuroelessarqutim-0.2.0/plugins/jabber/libs/0000755000175000017500000000000011273101002020136 5ustar euroelessareuroelessarqutim-0.2.0/plugins/jabber/libs/config.h.win0000644000175000017500000000000011273054312022351 0ustar euroelessareuroelessarqutim-0.2.0/plugins/jabber/libs/config.win.h0000644000175000017500000000000211273054312022353 0ustar euroelessareuroelessar qutim-0.2.0/plugins/jabber/libs/gloox/0000755000175000017500000000000011273101002021266 5ustar euroelessareuroelessarqutim-0.2.0/plugins/jabber/libs/gloox/rosteritemdata.h0000644000175000017500000001246711273054312024513 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef ROSTERITEMBASE_H__ #define ROSTERITEMBASE_H__ #include "gloox.h" #include "jid.h" #include "tag.h" #include #include namespace gloox { /** * @brief A class holding roster item data. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API RosterItemData { public: /** * Constructs a new item of the roster. * @param jid The JID of the contact. * @param name The displayed name of the contact. * @param groups A list of groups the contact belongs to. */ RosterItemData( const std::string& jid, const std::string& name, const StringList& groups ) : m_jid( jid ), m_name( name ), m_groups( groups ), m_subscription( S10nNone ), m_changed( false ), m_remove( false ) {} /** * Constructs a new item of the roster, scheduled for removal. * @param jid The JID of the contact to remove. */ RosterItemData( const std::string& jid ) : m_jid( jid ), m_subscription( S10nNone ), m_changed( false ), m_remove( true ) {} /** * Virtual destructor. */ virtual ~RosterItemData() {} /** * Returns the contact's bare JID. * @return The contact's bare JID. */ const std::string& jid() const { return m_jid; } /** * Sets the displayed name of a contact/roster item. * @param name The contact's new name. */ void setName( const std::string& name ) { m_name = name; m_changed = true; } /** * Retrieves the displayed name of a contact/roster item. * @return The contact's name. */ const std::string& name() const { return m_name; } /** * Sets the current subscription status of the contact. * @param subscription The current subscription. * @param ask Whether a subscription request is pending. */ void setSubscription( const std::string& subscription, const std::string& ask ) { m_sub = subscription; m_ask = ask; if( subscription == "from" && ask.empty() ) m_subscription = S10nFrom; else if( subscription == "from" && !ask.empty() ) m_subscription = S10nFromOut; else if( subscription == "to" && ask.empty() ) m_subscription = S10nTo; else if( subscription == "to" && !ask.empty() ) m_subscription = S10nToIn; else if( subscription == "none" && ask.empty() ) m_subscription = S10nNone; else if( subscription == "none" && !ask.empty() ) m_subscription = S10nNoneOut; else if( subscription == "both" ) m_subscription = S10nBoth; } /** * Returns the current subscription type between the remote and the local entity. * @return The subscription type. */ SubscriptionType subscription() const { return m_subscription; } /** * Sets the groups this RosterItem belongs to. * @param groups The groups to set for this item. */ void setGroups( const StringList& groups ) { m_groups = groups; m_changed = true; } /** * Returns the groups this RosterItem belongs to. * @return The groups this item belongs to. */ const StringList& groups() const { return m_groups; } /** * Whether the item has unsynchronized changes. * @return @b True if the item has unsynchronized changes, @b false otherwise. */ bool changed() const { return m_changed; } /** * Whether the item is scheduled for removal. * @return @b True if the item is subject to a removal or scheduled for removal, @b false * otherwise. */ bool remove() const { return m_remove; } /** * Removes the 'changed' flag from the item. */ void setSynchronized() { m_changed = false; } /** * Retruns a Tag representation of the roster item data. * @return A Tag representation. */ Tag* tag() const { Tag* i = new Tag( "item" ); i->addAttribute( "jid", m_jid ); if( m_remove ) i->addAttribute( "subscription", "remove" ); else { i->addAttribute( "name", m_name ); StringList::const_iterator it = m_groups.begin(); for( ; it != m_groups.end(); ++it ) new Tag( i, "group", (*it) ); i->addAttribute( "subscription", m_sub ); i->addAttribute( "ask", m_ask ); } return i; } protected: std::string m_jid; std::string m_name; StringList m_groups; SubscriptionType m_subscription; std::string m_sub; std::string m_ask; bool m_changed; bool m_remove; }; } #endif // ROSTERITEMBASE_H__ qutim-0.2.0/plugins/jabber/libs/gloox/connectionbase.h0000644000175000017500000001166011273054312024450 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef CONNECTIONBASE_H__ #define CONNECTIONBASE_H__ #include "gloox.h" #include "connectiondatahandler.h" #include namespace gloox { /** * @brief An abstract base class for a connection. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API ConnectionBase { public: /** * Constructor. * @param cdh An object derived from @ref ConnectionDataHandler that will receive * received data. */ ConnectionBase( ConnectionDataHandler* cdh ) : m_handler( cdh ), m_state( StateDisconnected ), m_port( -1 ) {} /** * Virtual destructor. */ virtual ~ConnectionBase() { cleanup(); } /** * Used to initiate the connection. * @return Returns the connection state. */ virtual ConnectionError connect() = 0; /** * Use this periodically to receive data from the socket. * @param timeout The timeout to use for select in microseconds. Default of -1 means blocking. * @return The state of the connection. */ virtual ConnectionError recv( int timeout = -1 ) = 0; /** * Use this function to send a string of data over the wire. The function returns only after * all data has been sent. * @param data The data to send. * @return @b True if the data has been sent (no guarantee of receipt), @b false * in case of an error. */ virtual bool send( const std::string& data ) = 0; /** * Use this function to put the connection into 'receive mode', i.e. this function returns only * when the connection is terminated. * @return Returns a value indicating the disconnection reason. */ virtual ConnectionError receive() = 0; /** * Disconnects an established connection. NOOP if no active connection exists. */ virtual void disconnect() = 0; /** * This function is called after a disconnect to clean up internal state. It is also called by * ConnectionBase's destructor. */ virtual void cleanup() {} /** * Returns the current connection state. * @return The state of the connection. */ ConnectionState state() const { return m_state; } /** * Use this function to register a new ConnectionDataHandler. There can be only one * ConnectionDataHandler at any one time. * @param cdh The new ConnectionDataHandler. */ void registerConnectionDataHandler( ConnectionDataHandler* cdh ) { m_handler = cdh; } /** * Sets the server to connect to. * @param server The server to connect to. Either IP or fully qualified domain name. * @param port The port to connect to. */ void setServer( const std::string &server, int port = -1 ) { m_server = server; m_port = port; } /** * Returns the currently set server/IP. * @return The server host/IP. */ const std::string& server() const { return m_server; } /** * Returns the currently set port. * @return The server port. */ int port() const { return m_port; } /** * Returns the local port. * @return The local port. */ virtual int localPort() const { return -1; } /** * Returns the locally bound IP address. * @return The locally bound IP address. */ virtual const std::string localInterface() const { return EmptyString; } /** * Returns current connection statistics. * @param totalIn The total number of bytes received. * @param totalOut The total number of bytes sent. */ virtual void getStatistics( long int &totalIn, long int &totalOut ) = 0; /** * This function returns a new instance of the current ConnectionBase-derived object. * The idea is to be able to 'clone' ConnectionBase-derived objects without knowing of * what type they are exactly. * @return A new Connection* instance. */ virtual ConnectionBase* newInstance() const = 0; protected: /** A handler for incoming data and connect/disconnect events. */ ConnectionDataHandler* m_handler; /** Holds the current connection state. */ ConnectionState m_state; /** Holds the server's name/address. */ std::string m_server; /** Holds the port to connect to. */ int m_port; }; } #endif // CONNECTIONBASE_H__ qutim-0.2.0/plugins/jabber/libs/gloox/eventdispatcher.h0000644000175000017500000000466611273054312024656 0ustar euroelessareuroelessar/* Copyright (c) 2008-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef EVENTDISPATCHER_H__ #define EVENTDISPATCHER_H__ #include "event.h" #include #include namespace gloox { class EventHandler; /** * @brief An Event dispatcher. * * @author Jakob Schroeter * @since 1.0 */ class EventDispatcher { public: /** * Creates a new EventDispatcher object. You should not need to use this class directly. */ EventDispatcher(); /** * Virtual Destructor. */ virtual ~EventDispatcher(); /** * Looks for handlers for the given Event, and removes the handlers if requested. * @param event The Event to dispatch. * @param context An identifier that limits the EventHandlers that will get notified to * those that are specifically interested in this context. * @param remove Whether or not to remove the context from the list of known contexts. Useful for * IQ IDs. */ void dispatch( const Event& event, const std::string& context, bool remove ); /** * Looks for handlers for the given Event, identified by its type. * @param event The event to dispatch. */ void dispatch( const Event& event ); /** * Registers the given EventHandler to be notified about Events with the given context. * The context will usually be an IQ ID. * @param eh The EventHandler to register. * @param context The context to register the EventHandler for. */ void registerEventHandler( EventHandler* eh, const std::string& context ); /** * Removes the given EventHandler. * @param eh The EventHandler to remove. */ void removeEventHandler( EventHandler* eh ); private: typedef std::multimap ContextHandlerMap; typedef std::multimap TypeHandlerMap; ContextHandlerMap m_contextHandlers; TypeHandlerMap m_typeHandlers; }; } #endif // EVENTDISPATCHER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/mucroomconfighandler.h0000644000175000017500000002045711273054312025667 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef MUCROOMCONFIGHANDLER_H__ #define MUCROOMCONFIGHANDLER_H__ #include "gloox.h" #include "jid.h" #include #include namespace gloox { class MUCRoom; class DataForm; /** * An item in a list of MUC room users. Lists of these items are * used when manipulating the lists of members, admins, owners, etc. * of a room. * * @author Jakob Schroeter * @since 1.0 */ class MUCListItem { public: /** * Constructs a new object using the given JID. * @param jid The item's JID. */ MUCListItem( const JID& jid ) : m_jid( jid ), m_affiliation( AffiliationInvalid ), m_role( RoleInvalid ) {} /** * Creates a new object, setting JID, affiliation, role, and nick. * @param jid The item's JID. * @param role The item's role. * @param affiliation The item's affiliation. * @param nick The item's nick. */ MUCListItem( const JID& jid, MUCRoomRole role, MUCRoomAffiliation affiliation, const std::string& nick ) : m_jid( jid ), m_nick( nick ), m_affiliation( affiliation ), m_role( role ) {} /** * Creates a new object, using nick, affiliation and a reason. * @param nick The item's nick. * @param affiliation The item's affiliation. * @param reason A reason. */ MUCListItem( const std::string& nick, MUCRoomAffiliation affiliation, const std::string& reason ) : m_nick( nick ), m_affiliation( affiliation ), m_role( RoleInvalid ), m_reason( reason ) {} /** * Creates a new object, using nick, role and a reason. * @param nick The item's nick. * @param role The item's role. * @param reason A reason. */ MUCListItem( const std::string& nick, MUCRoomRole role, const std::string& reason ) : m_nick( nick ), m_affiliation( AffiliationInvalid ), m_role( role ), m_reason( reason ) {} /** * Destructor. Deletes the @c jid member. */ ~MUCListItem() {} /** * Returns the item's JID. * @return The item's JID. */ const JID& jid() const { return m_jid; } /** * Returns the item's nick. * @return The item's nick. */ const std::string& nick() const { return m_nick; } /** * Returns the item's affiliation. * @return The item's affiliation. */ MUCRoomAffiliation affiliation() const { return m_affiliation; } /** * Returns the item's role. * @return The item's role. */ MUCRoomRole role() const { return m_role; } /** * Returns the reason. * @return The reason. */ const std::string& reason() const { return m_reason; } private: JID m_jid; /**< Pointer to the occupant's JID if available, 0 otherwise. */ std::string m_nick; /**< The occupant's nick in the room. */ MUCRoomAffiliation m_affiliation; /**< The occupant's affiliation. */ MUCRoomRole m_role; /**< The occupant's role. */ std::string m_reason; /**< Use this only when **setting** the item's role/affiliation to * specify a reason for the role/affiliation change. This field is * empty in items fetched from the MUC service. */ }; /** * A list of MUCListItems. */ typedef std::list MUCListItemList; /** * Available operations on a room. */ enum MUCOperation { RequestUniqueName, /**< Request a unique room name. */ CreateInstantRoom, /**< Create an instant room. */ CancelRoomCreation, /**< Cancel room creation process. */ RequestRoomConfig, /**< Request room configuration form. */ SendRoomConfig, /**< Send room configuration */ DestroyRoom, /**< Destroy room. */ GetRoomInfo, /**< Fetch room info. */ GetRoomItems, /**< Fetch room items (e.g., current occupants). */ SetRNone, /**< Set a user's role to None. */ SetVisitor, /**< Set a user's role to Visitor. */ SetParticipant, /**< Set a user's role to Participant. */ SetModerator, /**< Set a user's role to Moderator. */ SetANone, /**< Set a user's affiliation to None. */ SetOutcast, /**< Set a user's affiliation to Outcast. */ SetMember, /**< Set a user's affiliation to Member. */ SetAdmin, /**< Set a user's affiliation to Admin. */ SetOwner, /**< Set a user's affiliation to Owner. */ RequestVoiceList, /**< Request the room's Voice List. */ StoreVoiceList, /**< Store the room's Voice List. */ RequestBanList, /**< Request the room's Ban List. */ StoreBanList, /**< Store the room's Ban List. */ RequestMemberList, /**< Request the room's Member List. */ StoreMemberList, /**< Store the room's Member List. */ RequestModeratorList, /**< Request the room's Moderator List. */ StoreModeratorList, /**< Store the room's Moderator List. */ RequestOwnerList, /**< Request the room's Owner List. */ StoreOwnerList, /**< Store the room's Owner List. */ RequestAdminList, /**< Request the room's Admin List. */ StoreAdminList, /**< Store the room's Admin List. */ InvalidOperation /**< Invalid operation. */ }; /** * @brief An abstract interface that can be implemented for MUC room configuration. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API MUCRoomConfigHandler { public: /** * Virtual Destructor. */ virtual ~MUCRoomConfigHandler() {} /** * This function is called in response to MUCRoom::requestList() if the list was * fetched successfully. * @param room The room for which the list arrived. * @param items The requestd list's items. * @param operation The type of the list. */ virtual void handleMUCConfigList( MUCRoom* room, const MUCListItemList& items, MUCOperation operation ) = 0; /** * This function is called when the room's configuration form arrives. This usually happens * after a call to MUCRoom::requestRoomConfig(). Use * MUCRoom::setRoomConfig() to send the configuration back to the * room. * @param room The room for which the config form arrived. * @param form The configuration form. */ virtual void handleMUCConfigForm( MUCRoom* room, const DataForm& form ) = 0; /** * This function is called in response to MUCRoom::kick(), MUCRoom::storeList(), * MUCRoom::ban(), and others, to indcate the end of the operation. * @param room The room for which the operation ended. * @param success Whether or not the operation was successful. * @param operation The finished operation. */ virtual void handleMUCConfigResult( MUCRoom* room, bool success, MUCOperation operation ) = 0; /** * This function is called when a Voice request or a Registration request arrive through * the room that need to be approved/rejected by the room admin. Use MUCRoom::createDataForm() * to have a Tag created that answers the request. * @param room The room the request arrived from. * @param form A DataForm containing the request. */ virtual void handleMUCRequest( MUCRoom* room, const DataForm& form ) = 0; }; } #endif // MUCROOMCONFIGHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/privacylisthandler.h0000644000175000017500000000644511273054312025372 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef PRIVACYLISTHANDLER_H__ #define PRIVACYLISTHANDLER_H__ #include "privacyitem.h" #include "gloox.h" #include #include namespace gloox { /** * The possible results of an operation on a privacy list. */ enum PrivacyListResult { ResultStoreSuccess, /**< Storing was successful. */ ResultActivateSuccess, /**< Activation was successful. */ ResultDefaultSuccess, /**< Setting the default list was successful. */ ResultRemoveSuccess, /**< Removing a list was successful. */ ResultRequestNamesSuccess, /**< Requesting the list names was successful. */ ResultRequestListSuccess, /**< The list was requested successfully. */ ResultConflict, /**< A conflict occurred when activating a list or setting the default * list. */ ResultItemNotFound, /**< The requested list does not exist. */ ResultBadRequest, /**< Bad request. */ ResultUnknownError /**< An unknown error occured. */ }; /** * @brief A virtual interface that allows to retrieve Privacy Lists. * * @author Jakob Schroeter * @since 0.3 */ class GLOOX_API PrivacyListHandler { public: /** * A list of PrivacyItems. */ typedef std::list PrivacyList; /** * Virtual Destructor. */ virtual ~PrivacyListHandler() {} /** * Reimplement this function to retrieve the list of privacy list names after requesting it using * PrivacyManager::requestListNames(). * @param active The name of the active list. * @param def The name of the default list. * @param lists All the lists. */ virtual void handlePrivacyListNames( const std::string& active, const std::string& def, const StringList& lists ) = 0; /** * Reimplement this function to retrieve the content of a privacy list after requesting it using * PrivacyManager::requestList(). * @param name The name of the list. * @param items A list of PrivacyItem's. */ virtual void handlePrivacyList( const std::string& name, const PrivacyList& items ) = 0; /** * Reimplement this function to be notified about new or changed lists. * @param name The name of the new or changed list. */ virtual void handlePrivacyListChanged( const std::string& name ) = 0; /** * Reimplement this function to receive results of stores etc. * @param id The ID of the request, as returned by the initiating function. * @param plResult The result of an operation. */ virtual void handlePrivacyListResult( const std::string& id, PrivacyListResult plResult ) = 0; }; } #endif // PRIVACYLISTHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/sha.h0000644000175000017500000000415511273054312022232 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef SHA_H__ #define SHA_H__ #include "macros.h" #include namespace gloox { /** * @brief An implementation of SHA1. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API SHA { public: /** * Constructs a new SHA object. */ SHA(); /** * Virtual Destructor. */ virtual ~SHA(); /** * Resets the internal state. */ void reset(); /** * Finalizes the hash computation. */ void finalize(); /** * Returns the message digest in hex notation. Finalizes the hash if finalize() * has not been called before. * @return The message digest. */ const std::string hex(); /** * Returns the raw binary message digest. Finalizes the hash if finalize() * has not been called before. * @return The message raw binary digest. */ const std::string binary(); /** * Provide input to SHA1. * @param data The data to compute the digest of. * @param length The size of the data in bytes. */ void feed( const unsigned char* data, unsigned length ); /** * Provide input to SHA1. * @param data The data to compute the digest of. */ void feed( const std::string& data ); private: void process(); void pad(); inline unsigned shift( int bits, unsigned word ); void init(); unsigned H[5]; unsigned Length_Low; unsigned Length_High; unsigned char Message_Block[64]; int Message_Block_Index; bool m_finished; bool m_corrupted; }; } #endif // SHA_H__ qutim-0.2.0/plugins/jabber/libs/gloox/rosterlistener.h0000644000175000017500000001605011273054312024540 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef ROSTERLISTENER_H__ #define ROSTERLISTENER_H__ #include "rosteritem.h" #include #include namespace gloox { class IQ; class Presence; /** * A map of JID/RosterItem pairs. */ typedef std::map Roster; /** * @brief A virtual interface which can be reimplemented to receive roster updates. * * A class implementing this interface and being registered as RosterListener with the * RosterManager object receives notifications about all the changes in the server-side * roster. Only one RosterListener per Roster at a time is possible. * * @author Jakob Schroeter * @since 0.3 */ class GLOOX_API RosterListener { public: /** * Virtual Destructor. */ virtual ~RosterListener() {} /** * Reimplement this function if you want to be notified about new items * on the server-side roster (items subject to a so-called Roster Push). * This function will be called regardless who added the item, either this * resource or another. However, it will not be called for JIDs for which * presence is received without them being on the roster. * @param jid The new item's full address. */ virtual void handleItemAdded( const JID& jid ) = 0; /** * Reimplement this function if you want to be notified about items * which authorised subscription. * @param jid The authorising item's full address. */ virtual void handleItemSubscribed( const JID& jid ) = 0; /** * Reimplement this function if you want to be notified about items that * were removed from the server-side roster (items subject to a so-called Roster Push). * This function will be called regardless who deleted the item, either this resource or * another. * @param jid The removed item's full address. */ virtual void handleItemRemoved( const JID& jid ) = 0; /** * Reimplement this function if you want to be notified about items that * were modified on the server-side roster (items subject to a so-called Roster Push). * A roster push is initiated if a second resource of this JID modifies an item stored on the * server-side contact list. This can include modifying the item's name, its groups, or the * subscription status. These changes are pushed by the server to @b all connected resources. * This is why this function will be called if you modify a roster item locally and synchronize * it with the server. * @param jid The modified item's full address. */ virtual void handleItemUpdated( const JID& jid ) = 0; /** * Reimplement this function if you want to be notified about items which * removed subscription authorization. * @param jid The item's full address. */ virtual void handleItemUnsubscribed( const JID& jid ) = 0; /** * Reimplement this function if you want to receive the whole server-side roster * on the initial roster push. After successful authentication, RosterManager asks the * server for the full server-side roster. Invocation of this method announces its arrival. * Roster item status is set to 'unavailable' until incoming presence info updates it. A full * roster push only happens once per connection. * @param roster The full roster. */ virtual void handleRoster( const Roster& roster ) = 0; /** * This function is called on every status change of an item in the roster. * If the presence is of type Unavailable, then the resource has already been * removed from the RosterItem. * @param item The roster item. * @param resource The resource that changed presence. * @param presence The item's new presence. * @param msg The status change message. * @since 0.9 */ virtual void handleRosterPresence( const RosterItem& item, const std::string& resource, Presence::PresenceType presence, const std::string& msg ) = 0; /** * This function is called on every status change of a JID that matches the Client's * own JID. * If the presence is of type Unavailable, then the resource has already been * removed from the RosterItem. * @param item The self item. * @param resource The resource that changed presence. * @param presence The item's new presence. * @param msg The status change message. * @since 0.9 */ virtual void handleSelfPresence( const RosterItem& item, const std::string& resource, Presence::PresenceType presence, const std::string& msg ) = 0; /** * This function is called when an entity wishes to subscribe to this entity's presence. * If the handler is registered as a asynchronous handler for subscription requests, * the return value of this function is ignored. In this case you should use * RosterManager::ackSubscriptionRequest() to answer the request. * @param jid The requesting item's address. * @param msg A message sent along with the request. * @return Return @b true to allow subscription and subscribe to the remote entity's * presence, @b false to ignore the request. */ virtual bool handleSubscriptionRequest( const JID& jid, const std::string& msg ) = 0; /** * This function is called when an entity unsubscribes from this entity's presence. * If the handler is registered as a asynchronous handler for subscription requests, * the return value of this function is ignored. In this case you should use * RosterManager::unsubscribe() if you want to unsubscribe yourself from the contct's * presence and to remove the contact from the roster. * @param jid The item's address. * @param msg A message sent along with the request. * @return Return @b true to unsubscribe from the remote entity, @b false to ignore. */ virtual bool handleUnsubscriptionRequest( const JID& jid, const std::string& msg ) = 0; /** * This function is called whenever presence from an entity is received which is not in * the roster. * @param presence The full presence stanza. */ virtual void handleNonrosterPresence( const Presence& presence ) = 0; /** * This function is called if the server returned an error. * @param iq The error stanza. */ virtual void handleRosterError( const IQ& iq ) = 0; }; } #endif // ROSTERLISTENER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/chatstate.cpp0000644000175000017500000000307111273054312023766 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "chatstate.h" #include "tag.h" #include "util.h" namespace gloox { /* chat state type values */ static const char* stateValues [] = { "active", "composing", "paused", "inactive", "gone" }; static inline ChatStateType chatStateType( const std::string& type ) { return (ChatStateType)util::lookup2( type, stateValues ); } ChatState::ChatState( const Tag* tag ) : StanzaExtension( ExtChatState ) { if( tag ) m_state = chatStateType( tag->name() ); } const std::string& ChatState::filterString() const { static const std::string filter = "/message/active[@xmlns='" + XMLNS_CHAT_STATES + "']" "|/message/composing[@xmlns='" + XMLNS_CHAT_STATES + "']" "|/message/paused[@xmlns='" + XMLNS_CHAT_STATES + "']" "|/message/inactive[@xmlns='" + XMLNS_CHAT_STATES + "']" "|/message/gone[@xmlns='" + XMLNS_CHAT_STATES + "']"; return filter; } Tag* ChatState::tag() const { if( m_state == ChatStateInvalid ) return 0; return new Tag( util::lookup2( m_state, stateValues ), XMLNS, XMLNS_CHAT_STATES ); } } qutim-0.2.0/plugins/jabber/libs/gloox/client.h0000644000175000017500000004135011273054312022733 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef CLIENT_H__ #define CLIENT_H__ #include "clientbase.h" #include "presence.h" #include namespace gloox { class Capabilities; class RosterManager; class NonSaslAuth; class IQ; /** * @brief This class implements a basic Jabber Client. * * It supports @ref sasl_auth as well as TLS (Encryption), which can be * switched on/off separately. They are used automatically if the server supports them. * * To use, create a new Client instance and feed it connection credentials, either in the Constructor or * afterwards using the setters. You should then register packet handlers implementing the corresponding * Interfaces (ConnectionListener, PresenceHandler, MessageHandler, IqHandler, SubscriptionHandler), * and call @ref connect() to establish the connection to the server.
* * @note While the MessageHandler interface is still available (and will be in future versions) * it is now recommended to use the new @link gloox::MessageSession MessageSession @endlink for any * serious messaging. * * Simple usage example: * @code * using namespace gloox; * * void TestProg::doIt() * { * Client* j = new Client( "user@server/resource", "password" ); * j->registerPresenceHandler( this ); * j->disco()->setVersion( "TestProg", "1.0" ); * j->disco()->setIdentity( "client", "bot" ); * j->connect(); * } * * virtual void TestProg::presenceHandler( Presence* presence ) * { * // handle incoming presence packets here * } * @endcode * * However, you can skip the presence handling stuff if you make use of the RosterManager. * * By default, the library handles a few (incoming) IQ namespaces on the application's behalf. These * include: * @li jabber:iq:roster: by default the server-side roster is fetched and handled. Use * @ref rosterManager() and @ref RosterManager to interact with the Roster. * @li XEP-0092 (Software Version): If no version is specified, a name of "based on gloox" with * gloox's current version is announced. * @li XEP-0030 (Service Discovery): All supported/available services are announced. No items are * returned. * @note As of gloox 0.9, by default a priority of 0 is sent along with the initial presence. * @note As of gloox 0.9, initial presence is automatically sent. Presence: available, Priority: 0. * To disable sending of initial Presence use setPresence() with a value of Unavailable * prior to connecting. * * @section sasl_auth SASL Authentication * * Besides the simple, IQ-based authentication (XEP-0078), gloox supports several SASL (Simple * Authentication and Security Layer, RFC 2222) authentication mechanisms. * @li DIGEST-MD5: This mechanism is preferred over all other mechanisms if username and password are * provided to the Client instance. It is secure even without TLS encryption. * @li PLAIN: This mechanism is used if DIGEST-MD5 is not available. It is @b not secure without * encryption. * @li ANONYMOUS This mechanism is used if neither username nor password are set. The server generates * random, temporary username and resource and may restrict available services. * @li EXTERNAL This mechanism is currently only available if client certificate and private key * are provided. The server tries to figure out who the client is by external means -- for instance, * using the provided certificate or even the IP address. (The restriction to certificate/key * availability is likely to be lifted in the future.) * * Of course, all these mechanisms are not tried unless the server offers them. * * @author Jakob Schroeter */ class GLOOX_API Client : public ClientBase { public: friend class NonSaslAuth; friend class Parser; /** * Constructs a new Client which can be used for account registration only. * SASL and TLS are on by default. The port will be determined by looking up SRV records. * Alternatively, you can set the port explicitly by calling @ref setPort(). * @param server The server to connect to. */ Client( const std::string& server ); /** * Constructs a new Client. * SASL and TLS are on by default. This should be the default constructor for most use cases. * The server address will be taken from the JID. The actual host will be resolved using SRV * records. The domain part of the JID is used as a fallback in case no SRV record is found, or * you can set the server address separately by calling @ref setServer(). * @param jid A full Jabber ID used for connecting to the server. * @param password The password used for authentication. * @param port The port to connect to. The default of -1 means to look up the port via DNS SRV. */ Client( const JID& jid, const std::string& password, int port = -1 ); /** * Virtual destructor. */ virtual ~Client(); /** * Use this function to bind an additional resource or to @b re-try to bind a * resource in case previous binding failed and you were notified by means of * ConnectionListener::onResourceBindError(). Use hasResourceBind() to find out if the * server supports binding of multiple resources. bindResource() is a NOOP if it doesn't. * @note ConnectionListener::onResourceBound() and ConnectionListener::onResourceBindError() * will be called in case of success and failure, respectively. * @param resource The resource identifier to bind. May be empty. In that case * the server will assign a unique resource identifier. * @return Returns @b true if binding of multiple resources is supported, @b false * otherwise. A return value of @b true does not indicate that the resource was * successfully bound. * @note It is not necessary to call this function to bind the initial, main, resource. * @since 1.0 */ bool bindResource( const std::string& resource ) { return bindOperation( resource, true ); } /** * Use this function to select a resource identifier that has been bound * previously by means of bindResource(). It is not necessary to call this function * if only one resource is bound. Use hasResourceBind() to find out if the * server supports binding of multiple resources. selectResource() is a NOOP if it doesn't. * @param resource A resource string that has been bound previously. * @note If the resource string has not been bound previously, future sending of * stanzas will fail. */ bool selectResource( const std::string& resource ); /** * This function can be used to find out whether the server supports binding of multiple * resources. * @return @b True if binding of multiple resources is supported by the server, * @b false otherwise. */ bool hasResourceBind() const { return ((m_streamFeatures & StreamFeatureUnbind) == StreamFeatureUnbind); } /** * Use this function to unbind a resource identifier that has been bound * previously by means of bindResource(). Use hasResourceBind() to find out if the * server supports binding of multiple resources. unbindResource() is a NOOP if it doesn't. * @param resource A resource string that has been bound previously. * @note Servers are encouraged to terminate the connection should the only bound * resource be unbound. */ bool unbindResource( const std::string& resource ) { return bindOperation( resource, false ); } /** * Returns the current prepped main resource. * @return The resource used to connect. */ const std::string& resource() const { return m_jid.resource(); } /** * Returns the current priority. * @return The priority of the current resource. */ int priority() const { return m_presence.priority(); } /** * Sets the username to use to connect to the XMPP server. * @param username The username to authenticate with. */ void setUsername( const std::string &username ); /** * Sets the main resource to use to connect to the XMPP server. * @param resource The resource to use to log into the server. */ void setResource( const std::string &resource ) { m_jid.setResource( resource ); } /** * Sends directed presence to the given JID. This is a NOOP if there's no active connection. * To broadcast presence use setPresence( Presence::PresenceType, int, const std::string& ). * @param to The JID to send directed Presence to. * @param pres The presence to send. * @param priority The priority to include. Legal values: -128 <= priority <= 127 * @param status The optional status message to include. * @note This function does not include any presence extensions (as added by * means of addPresenceExtension()) to the stanza. */ void setPresence( const JID& to, Presence::PresenceType pres, int priority, const std::string& status = EmptyString ); /** * Use this function to set the entity's presence, that is, to broadcast presence to all * subscribed entities. To send directed presence, use * setPresence( const JID&, Presence::PresenceType, int, const std::string& ). * If used prior to establishing a connection, the set values will be sent with * the initial presence stanza. * If used while a connection already is established, a presence stanza will be * sent out immediately. * @param pres The Presence value to set. * @param priority An optional priority value. Legal values: -128 <= priority <= 127 * @param status An optional message describing the presence state. * @since 0.9 */ void setPresence( Presence::PresenceType pres, int priority, const std::string& status = EmptyString ); /** * Use this function to broadcast the entity's presence to all * subscribed entities. This is a NOOP if there's no active connection. * To send directed presence, use * setPresence( const JID&, Presence::PresenceType, int, const std::string& ). * If used while a connection already is established a repective presence stanza will be * sent out immediately. Use presence() to modify the Presence object. * @note When login is finished, initial presence will be sent automatically. * So you do not need to call this function after login. * @since 1.0 */ void setPresence() { sendPresence( m_presence ); } /** * Returns the current presence. * @return The current presence. */ Presence& presence() { return m_presence; } /** * This is a temporary hack to enforce Non-SASL login. You should not need to use it. * @param force Whether to force non-SASL auth. Default @b true. * @deprecated Please update the server to properly support SASL instead. */ GLOOX_DEPRECATED void setForceNonSasl( bool force = true ) { m_forceNonSasl = force; } /** * Disables the automatic roster management. * You have to keep track of incoming presence yourself if * you want to have a roster. */ void disableRoster(); /** * This function gives access to the @c RosterManager object. * @return A pointer to the RosterManager. */ RosterManager* rosterManager() { return m_rosterManager; } /** * Disconnects from the server. */ void disconnect(); /** * Initiates a login attempt (currently SASL External not supported). * This is useful after registering a new account. Simply use setUsername() and setPassword(), * and call login(). * @return @b True if a login attempt could be started, @b false otherwise. A return * value of @b true does not indicate that login was successful. */ bool login(); protected: /** * Initiates non-SASL login. */ void nonSaslLogin(); private: /** * @brief This is an implementation of a resource binding StanzaExtension. * * @author Jakob Schroeter * @since 1.0 */ class ResourceBind : public StanzaExtension { public: /** * Constructs a new object with the given resource string. * @param resource The resource to set. * @param bind Indicates whether this is an bind or unbind request. * Defaults to @b true (bind). */ ResourceBind( const std::string& resource, bool bind = true ); /** * Constructs a new object from the given Tag. * @param tag The Tag to parse. */ ResourceBind( const Tag* tag ); /** * Destructor. */ ~ResourceBind(); /** * Returns the requested resource. * @return The requested resource. */ const std::string& resource() const { return m_resource; } /** * Returns the assigned JID. * @return The assigned JID. */ const JID& jid() const { return m_jid; } /** * Use this function to find out whether the extension contains a * bind or unbind request. * @return @b True if the extension contains an unbind request, @b false otherwise. */ bool unbind() const { return !m_bind; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new ResourceBind( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new ResourceBind( *this ); } private: std::string m_resource; JID m_jid; bool m_bind; }; /** * @brief This is an implementation of a session creating StanzaExtension. * * @author Jakob Schroeter * @since 1.0 */ class SessionCreation : public StanzaExtension { public: /** * Constructs a new object. */ SessionCreation() : StanzaExtension( ExtSessionCreation ) {} /** * Destructor. */ ~SessionCreation() {} // reimplemented from StanzaExtension virtual const std::string& filterString() const { return EmptyString; } // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { (void)tag; return 0; } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return 0; } }; virtual void handleStartNode() {} virtual bool handleNormalNode( Tag* tag ); virtual void disconnect( ConnectionError reason ); virtual void handleIqIDForward( const IQ& iq, int context ); int getStreamFeatures( Tag* tag ); int getSaslMechs( Tag* tag ); int getCompressionMethods( Tag* tag ); void processResourceBind( const IQ& iq ); void processCreateSession( const IQ& iq ); void sendPresence( Presence& pres ); void createSession(); void negotiateCompression( StreamFeature method ); void connected(); virtual void rosterFilled(); virtual void cleanup(); bool bindOperation( const std::string& resource, bool bind ); void init(); enum TrackContext { CtxResourceBind = 1000, // must be higher than the last element in ClientBase's TrackContext CtxResourceUnbind, CtxSessionEstablishment }; RosterManager* m_rosterManager; NonSaslAuth* m_auth; Presence m_presence; bool m_resourceBound; bool m_forceNonSasl; bool m_manageRoster; int m_streamFeatures; }; } #endif // CLIENT_H__ qutim-0.2.0/plugins/jabber/libs/gloox/bytestream.h0000644000175000017500000001313011273054312023627 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef BYTESTREAM_H__ #define BYTESTREAM_H__ #include "jid.h" #include "logsink.h" #include namespace gloox { class BytestreamDataHandler; /** * @brief An abstraction of a single bytestream. * * Used as a base class for InBand Bytestreams as well as SOCKS5 Bytestreams. * You should not need to use this class directly. * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API Bytestream { public: /** * Available stream types. */ enum StreamType { S5B, /**< SOCKS5 Bytestream */ IBB /**< In-Band Bytestream */ }; /** * Creates a new Bytestream. * @param type The stream type. * @param logInstance A Logsink to use for logging. Obtain it from ClientBase::logInstance(). * @param initiator The initiator of the stream (usually the sender). * @param target The target of the stream (usually the receiver). * @param sid The stream's ID. */ Bytestream( StreamType type, LogSink& logInstance, const JID& initiator, const JID& target, const std::string& sid ) : m_handler( 0 ), m_logInstance( logInstance ), m_initiator( initiator ), m_target( target ), m_type( type ), m_sid( sid ), m_open( false ) {} /** * Virtual destructor. */ virtual ~Bytestream() {} /** * Returns whether the bytestream is open, that is, accepted by both parties and ready * to send/receive data. * @return Whether or not the bytestream is open. */ bool isOpen() const { return m_open; } /** * This function starts the connection process. * @return @b True if a connection to a remote entity could be established, @b false * otherwise. * @note If @b false is returned you should pass this Bytestream object * to SIProfileFT::dispose() for deletion. * @note Make sure you have a BytestreamDataHandler registered (using * registerBytestreamDataHandler()) before calling this function. */ virtual bool connect() = 0; /** * Closes the bytestream. */ virtual void close() = 0; /** * Use this function to send a chunk of data over an open bytestream. * If the stream is not open or has been closed again * (by the remote entity or locally), nothing is sent and @b false is returned. * This function does any base64 encoding for you, if necessary. * @param data The block of data to send. * @return @b True if the data has been sent (no guarantee of receipt), @b false * in case of an error. */ virtual bool send( const std::string& data ) = 0; /** * Call this function repeatedly to receive data. You should even do this * if you use the bytestream to merely @b send data. May be a NOOP, depending on the actual * stream type. * @param timeout The timeout to use for select in microseconds. Default of -1 means blocking. * @return The state of the connection. */ virtual ConnectionError recv( int timeout = -1 ) = 0; /** * Lets you retrieve the stream's ID. * @return The stream's ID. */ const std::string& sid() const { return m_sid; } /** * Returns the stream's type. * @return The stream's type. */ StreamType type() const { return m_type; } /** * Returns the target entity's JID. If this bytestream is remote-initiated, this is * the local JID. If it is local-initiated, this is the remote entity's JID. * @return The target's JID. */ const JID& target() const { return m_target; } /** * Returns the initiating entity's JID. If this bytestream is remote-initiated, this is * the remote entity's JID. If it is local-initiated, this is the local JID. * @return The initiator's JID. */ const JID& initiator() const { return m_initiator; } /** * Use this function to register an object that will receive any notifications from * the Bytestream instance. Only one BytestreamDataHandler can be registered * at any one time. * @param bdh The BytestreamDataHandler-derived object to receive notifications. */ void registerBytestreamDataHandler( BytestreamDataHandler* bdh ) { m_handler = bdh; } /** * Removes the registered BytestreamDataHandler. */ void removeBytestreamDataHandler() { m_handler = 0; } protected: /** A handler for incoming data and open/close events. */ BytestreamDataHandler* m_handler; /** A LogSink instance to use for logging. */ const LogSink& m_logInstance; /** The initiator's JID. */ const JID m_initiator; /** The target's JID. */ const JID m_target; /** The stream type. */ StreamType m_type; /** The stream ID. */ std::string m_sid; /** Indicates whether or not the stream is open. */ bool m_open; private: Bytestream& operator=( const Bytestream& ); }; } #endif // BYTESTREAM_H__ qutim-0.2.0/plugins/jabber/libs/gloox/dataformfieldcontainer.h0000644000175000017500000000754411273054312026170 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef DATAFORMFIELDCONTAINER_H__ #define DATAFORMFIELDCONTAINER_H__ #include "dataformfield.h" #include #include namespace gloox { class DataFormField; /** * @brief An abstract base class for a XEP-0004 Data Form. * * You shouldn't need to use this class directly. Use DataForm instead. * * @author Jakob Schroeter * @since 0.7 */ class GLOOX_API DataFormFieldContainer { public: /** * Creates a new FieldContainer. */ DataFormFieldContainer(); /** * Creates a new FieldContainer, copying all fields from the given FieldContainer. * @param dffc The FieldContainer to copy. */ DataFormFieldContainer( const DataFormFieldContainer& dffc ); /** * Virtual destructor. */ virtual ~DataFormFieldContainer(); /** * A list of XEP-0004 Data Form Fields. */ typedef std::list FieldList; /** * Use this function to check whether this form contains a field with the given name. * @param field The name of the field (the content of the 'var' attribute). * @return Whether or not the form contains the named field. */ bool hasField( const std::string& field ) const { return DataFormFieldContainer::field( field ) != 0; } /** * Use this function to fetch a pointer to a field of the form. If no such field exists, * 0 is returned. * @param field The name of the field (the content of the 'var' attribute). * @return A copy of the field with the given name if it exists, 0 otherwise. */ DataFormField* field( const std::string& field ) const; /** * Use this function to retrieve the list of fields of a form. * @return The list of fields the form contains. */ FieldList& fields() { return m_fields; } /** * Use this function to retrieve the const list of fields of a form. * @return The const list of fields the form contains. */ const FieldList& fields() const { return m_fields; } /** * Use this function to set the fields the form contains. * @param fields The list of fields. * @note Any previously set fields will be deleted. Always set all fields, not a delta. */ virtual void setFields( FieldList& fields ) { m_fields = fields; } /** * Use this function to add a single field to the list of existing fields. * @param field The field to add. * @since 0.9 */ virtual void addField( DataFormField* field ) { m_fields.push_back( field ); } /** * Adds a single new Field and returns a pointer to that field. * @param type The field's type. * @param name The field's name (the value of the 'var' attribute). * @param value The field's value. * @param label The field's label. * @since 0.9.4 */ DataFormField* addField( DataFormField::FieldType type, const std::string& name, const std::string& value = EmptyString, const std::string& label = EmptyString ) { DataFormField* field = new DataFormField( name, value, label, type ); m_fields.push_back( field ); return field; } protected: FieldList m_fields; }; } #endif // DATAFORMFIELDCONTAINER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/search.h0000644000175000017500000001502511273054312022722 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef SEARCH_H__ #define SEARCH_H__ #include "gloox.h" #include "searchhandler.h" #include "discohandler.h" #include "iqhandler.h" #include "stanzaextension.h" #include "dataform.h" #include namespace gloox { class ClientBase; class IQ; class Disco; /** * @brief An implementation of XEP-0055 (Jabber Search) * * To perform a search in a directory (e.g., a User Directory): * * @li Inherit from SearchHandler and implement the virtual functions. * @li Create a new Search object. * @li Ask the directory for the supported fields using fetchSearchFields(). Depending on the directory, * the result can be either an integer (bit-wise ORed supported fields) or a DataForm. * @li Search by either using a DataForm or the SearchFieldStruct. * @li The results can be either a (empty) list of SearchFieldStructs or a DataForm. * * @author Jakob Schroeter * @since 0.8.5 */ class GLOOX_API Search : public IqHandler { public: /** * Creates a new Search object. * @param parent The ClientBase to use. */ Search( ClientBase* parent ); /** * Virtual Destructor. */ ~Search(); /** * Use this function to check which fields the directory supports. * @param directory The (user) directory to fetch the available/searchable fields from. * @param sh The SearchHandler to notify about the results. */ void fetchSearchFields( const JID& directory, SearchHandler* sh ); /** * Initiates a search on the given directory, with the given data form. The given SearchHandler * is notified about the results. * @param directory The (user) directory to search. * @param form The DataForm contains the phrases the user wishes to search for. * Search will delete the form eventually. * @param sh The SearchHandler to notify about the results. */ void search( const JID& directory, DataForm* form, SearchHandler* sh ); /** * Initiates a search on the given directory, with the given phrases. The given SearchHandler * is notified about the results. * @param directory The (user) directory to search. * @param fields Bit-wise ORed FieldEnum values describing the valid (i.e., set) fields in * the @b values parameter. * @param values Contains the phrases to search for. * @param sh The SearchHandler to notify about the results. */ void search( const JID& directory, int fields, const SearchFieldStruct& values, SearchHandler* sh ); // reimplemented from IqHandler. virtual bool handleIq( const IQ& iq ) { (void)iq; return false; } // reimplemented from IqHandler. virtual void handleIqID( const IQ& iq, int context ); protected: enum IdType { FetchSearchFields, DoSearch }; typedef std::map TrackMap; TrackMap m_track; ClientBase* m_parent; Disco* m_disco; private: #ifdef SEARCH_TEST public: #endif /** * @brief A wrapping class for the XEP-0055 <query> element. * * @author Jakob Schroeter * @since 1.0 */ class Query : public StanzaExtension { public: /** * Creates a new object that can be used to carry out a search. * @param form A DataForm containing the search terms. */ Query( DataForm* form ); /** * Creates a new object that can be used to carry out a search. * @param fields Bit-wise ORed FieldEnum values describing the valid (i.e., set) * fields in the @b values parameter. * @param values Contains the phrases to search for. */ Query( int fields, const SearchFieldStruct& values ); /** * Creates a new object that can be used to request search fields. * Optionally, it can parse the given Tag. * @param tag The Tag to parse. */ Query( const Tag* tag = 0 ); /** * Virtual Destructor. */ virtual ~Query(); /** * Returns the contained search form, if any. * @return The search form. May be 0. */ const DataForm* form() const { return m_form; } /** * Returns the search instructions, if given * @return The search instructions. */ const std::string& instructions() const { return m_instructions; } /** * Returns the search fields, if set. * @return The search fields. */ int fields() const { return m_fields; } /** * Returns the search's result, if available in legacy form. Use form() otherwise. * @return The search's result. */ const SearchResultList& result() const { return m_srl; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new Query( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { Query* q = new Query(); q->m_form = m_form ? new DataForm( *m_form ) : 0; q->m_fields = m_fields; q->m_values = m_values; q->m_instructions = m_instructions; SearchResultList::const_iterator it = m_srl.begin(); for( ; it != m_srl.end(); ++it ) q->m_srl.push_back( new SearchFieldStruct( *(*it) ) ); return q; } private: #ifdef SEARCH_TEST public: #endif DataForm* m_form; int m_fields; SearchFieldStruct m_values; std::string m_instructions; SearchResultList m_srl; }; }; } #endif // SEARCH_H__ qutim-0.2.0/plugins/jabber/libs/gloox/instantmucroom.cpp0000644000175000017500000000131711273054312025071 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "instantmucroom.h" #include "clientbase.h" #include "jid.h" namespace gloox { InstantMUCRoom::InstantMUCRoom( ClientBase* parent, const JID& nick, MUCRoomHandler* mrh ) : MUCRoom( parent, nick, mrh, 0 ) { } InstantMUCRoom::~InstantMUCRoom() { } } qutim-0.2.0/plugins/jabber/libs/gloox/md5.h0000644000175000017500000000760411273054312022146 0ustar euroelessareuroelessar/* Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. L. Peter Deutsch ghost@aladdin.com */ /* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321, whose text is available at http://www.ietf.org/rfc/rfc1321.txt The code is derived from the text of the RFC, including the test suite (section A.5) but excluding the rest of Appendix A. It does not include any code or documentation that is identified in the RFC as being copyrighted. The original and principal author of md5.h is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 2002-04-13 lpd Removed support for non-ANSI compilers; removed references to Ghostscript; clarified derivation from RFC 1321; now handles byte order either statically or dynamically. 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); added conditionalization for C++ compilation from Martin Purschke . 1999-05-03 lpd Original version. */ #ifndef MD5_H__ #define MD5_H__ #include "macros.h" #include namespace gloox { /** * @brief An MD% implementation. * * This is an implementation of the Message Digest Algorithm as decribed in RFC 1321. * The original code has been taken from an implementation by L. Peter Deutsch. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API MD5 { public: /** * Constructs a new MD5 object. */ MD5(); /** * Virtual Destructor. */ virtual ~MD5(); /** * Use this function to feed the hash. * @param data The data to hash. * @param bytes The size of @c data in bytes. */ void feed( const unsigned char* data, int bytes ); /** * Use this function to feed the hash. * @param data The data to hash. */ void feed( const std::string& data ); /** * This function is used to finalize the hash operation. Use it after the last feed() and * before calling hex(). */ void finalize(); /** * Use this function to retrieve the hash value in hex. * @return The hash in hex notation. */ const std::string hex(); /** * Use this function to retrieve the raw binary hash. * @return The raw binary hash. */ const std::string binary(); /** * Use this function to reset the hash. */ void reset(); private: struct MD5State { unsigned int count[2]; /* message length in bits, lsw first */ unsigned int abcd[4]; /* digest buffer */ unsigned char buf[64]; /* accumulate block */ } m_state; void init(); void process( const unsigned char* data ); static const unsigned char pad[64]; bool m_finished; }; } #endif // MD5_H__ qutim-0.2.0/plugins/jabber/libs/gloox/mucroomhandler.h0000644000175000017500000002603211273054312024474 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef MUCROOMHANDLER_H__ #define MUCROOMHANDLER_H__ #include "gloox.h" #include "presence.h" #include "disco.h" #include namespace gloox { class JID; class MUCRoom; class Message; class DataForm; /** * Describes a participant in a MUC room. */ struct MUCRoomParticipant { JID* nick; /**< Pointer to a JID holding the participant's full JID * in the form @c room\@service/nick.
* @note The MUC server @b may change the chosen nickname. * If the @b self member of this struct is true, one should * check the resource of this member if the actual nickname * is important. */ MUCRoomAffiliation affiliation; /**< The participant's affiliation with the room. */ MUCRoomRole role; /**< The participant's role with the room. */ JID* jid; /**< Pointer to the occupant's full JID in a non-anonymous room or * in a semi-anonymous room if the user (of gloox) has a role of * moderator. * 0 if the MUC service doesn't provide the JID. */ int flags; /**< ORed MUCUserFlag values. Indicate conditions like: user has * been kicked or banned from the room. Also may indicate that * this struct refers to this instance's user. * (MUC servers send presence to all room occupants, including * the originator of the presence.) */ std::string reason; /**< If the presence change is the result of an action where the * actor can provide a reason for the action, this reason is stored * here. Examples: Kicking, banning, leaving the room. */ JID* actor; /**< If the presence change is the result of an action of a room * member, a pointer to the actor's JID is stored here, if the * actor chose to disclose his or her identity. Examples: Kicking * and banning. * 0 if the identity is not disclosed. */ std::string newNick; /**< In case of a nickname change, this holds the new nick, while the * nick member holds the old room nick (in JID form). @c newNick is only * set if @c flags contains @b UserNickChanged. If @c flags contains * @b UserSelf as well, a foregoing nick change request (using * MUCRoom::setNick()) can be considered acknowledged. In any case * the user's presence sent with the nick change acknowledgement * is of type @c unavailable. Another presence of type @c available * (or whatever the user's presence was at the time of the nick change * request) will follow (not necessarily immediately) coming from the * user's new nickname. Empty if there is no nick change in progress. */ std::string status; /**< If the presence packet contained a status message, it is stored * here. */ JID* alternate; /**< If @c flags contains UserRoomDestroyed, and if the user who * destroyed the room specified an alternate room, this member holds * a pointer to the alternate room's JID, else it is 0. */ }; /** * @brief This interface enables inheriting classes to be notified about certain events in a MUC room. * * See MUCRoom for examples how to use this interface. * * @note This interface does not notify about room configuration related events. Use * MUCRoomConfigHandler for that puprose. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API MUCRoomHandler { public: /** * Virtual Destructor. */ virtual ~MUCRoomHandler() {} /** * This function is called whenever a room occupant enters the room, changes presence * inside the room, or leaves the room. * @note The MUCRoomParticipant struct, including pointers to JIDs, will be cleaned up after * this function returned. * @param room The room. * @param participant A struct describing the occupant's status and/or action. * @param presence The occupant's full presence. */ virtual void handleMUCParticipantPresence( MUCRoom* room, const MUCRoomParticipant participant, const Presence& presence ) = 0; /** * This function is called when a message arrives through the room. * @note This may be a private message! If the message is private, and you want to answer * it privately, you should create a new MessageSession to the user's full room nick and use * that for any further private communication with the user. * @param room The room the message came from. * @param msg The entire Message. * @param priv Indicates whether this is a private message. * @note The sender's nick name can be obtained with this call: * @code * const std::string nick = msg.from().resource(); * @endcode * @note The message may contain an extension of type DelayedDelivery describing the * date/time when the message was originally sent. The presence of such an extension * usually indicates that the message is sent as part of the room history. This extension * can be obtained with this call: * @code * const DelayedDelivery* dd = msg.when(); // may be 0 if no such extension exists * @endcode */ virtual void handleMUCMessage( MUCRoom* room, const Message& msg, bool priv ) = 0; /** * This function is called if the room that was just joined didn't exist prior to the attempted * join. Therfore the room was created by MUC service. To accept the default configuration of * the room assigned by the MUC service, return @b true from this function. The room will be opened * by the MUC service and available for other users to join. If you don't want to accept the default * room configuration, return @b false from this function. The room will stay locked until it is * either fully configured, created as an instant room, or creation is canceled. * * If you returned false from this function you should use one of the following options: * @li use MUCRoom::cancelRoomCreation() to abort creation and delete the room, * @li use MUCRoom::acknowledgeInstantRoom() to accept the room's default configuration, or * @li use MUCRoom::requestRoomConfig() to request the room's configuration form. * * @param room The room. * @return @b True to accept the default room configuration, @b false to keep the room locked * until configured manually by the room owner. */ virtual bool handleMUCRoomCreation( MUCRoom* room ) = 0; /** * This function is called when the room subject has been changed. * @param room The room. * @param nick The nick of the occupant that changed the room subject. * @note With some MUC services the nick may be empty when a room is first entered. * @param subject The new room subject. */ virtual void handleMUCSubject( MUCRoom* room, const std::string& nick, const std::string& subject ) = 0; /** * This function is called when the user invited somebody (e.g., by using MUCRoom::invite()) * to the room, but the invitation was declined by that person. * @param room The room. * @param invitee The JID if the person that declined the invitation. * @param reason An optional reason for declining the invitation. */ virtual void handleMUCInviteDecline( MUCRoom* room, const JID& invitee, const std::string& reason ) = 0; /** * This function is called when an error occurs in the room or when entering the room. * @note The following error conditions are specified for MUC: * @li @b Not @b Authorized: Password required. * @li @b Forbidden: Access denied, user is banned. * @li @b Item @b Not @b Found: The room does not exist. * @li @b Not @b Allowed: Room creation is restricted. * @li @b Not @b Acceptable: Room nicks are locked down. * @li @b Registration @b Required: User is not on the member list. * @li @b Conflict: Desired room nickname is in use or registered by another user. * @li @b Service @b Unavailable: Maximum number of users has been reached. * * Other errors might appear, depending on the service implementation. * @param room The room. * @param error The error. */ virtual void handleMUCError( MUCRoom* room, StanzaError error ) = 0; /** * This function usually (see below) is called in response to a call to MUCRoom::getRoomInfo(). * @param room The room. * @param features ORed MUCRoomFlag's. * @param name The room's name as returned by Service Discovery. * @param infoForm A DataForm containing extended room information. May be 0 if the service * doesn't support extended room information. See Section 15.5 of XEP-0045 for defined * field types. You should not delete the form. * * @note This function may be called without a prior call to MUCRoom::getRoomInfo(). This * happens if the room config is changed, e.g. by a room admin. */ virtual void handleMUCInfo( MUCRoom* room, int features, const std::string& name, const DataForm* infoForm ) = 0; /** * This function is called in response to a call to MUCRoom::getRoomItems(). * @param room The room. * @param items A map of room participants. The key is the name, the value is the occupant's * room JID. The map may be empty if such info is private. */ virtual void handleMUCItems( MUCRoom* room, const Disco::ItemList& items ) = 0; }; } #endif// MUCROOMHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/registration.h0000644000175000017500000002627711273054312024202 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef REGISTRATION_H__ #define REGISTRATION_H__ #include "iqhandler.h" #include "registrationhandler.h" #include "dataform.h" #include "jid.h" #include "oob.h" #include #include namespace gloox { class ClientBase; class Stanza; /** * Holds all the possible fields a server may require for registration according * to Section 14.1, XEP-0077. */ struct RegistrationFields { std::string username; /**< Desired username. */ std::string nick; /**< User's nickname. */ std::string password; /**< User's password. */ std::string name; /**< User's name. */ std::string first; /**< User's first name.*/ std::string last; /**< User's last name. */ std::string email; /**< User's email address. */ std::string address; /**< User's address. */ std::string city; /**< User's city. */ std::string state; /**< User's state. */ std::string zip; /**< User's ZIP code. */ std::string phone; /**< User's phone number. */ std::string url; /**< User's homepage URL (or other URL). */ std::string date; /**< Date (?) */ std::string misc; /**< Misc (?) */ std::string text; /**< Text (?)*/ }; /** * @brief This class is an implementation of XEP-0077 (In-Band Registration). * * Derive your object from @ref RegistrationHandler and implement the * virtual functions offered by that interface. Then use it like this: * @code * void MyClass::myFunc() * { * m_client = new Client( "example.org" ); * m_client->disableRoster(); // a roster is not necessary for registration * m_client->registerConnectionListener( this ); * * m_reg = new Registration( c ); * m_reg->registerRegistrationHandler( this ); * * m_client->connect(); * } * * void MyClass::onConnect() * { * m_reg->fetchRegistrationFields(); * } * @endcode * * In RegistrationHandler::handleRegistrationFields() you should check which information the server * requires to open a new account. You might not always get away with just username and password. * Then call createAccount() with a filled-in RegistrationFields and an @c int representing the bit-wise * ORed fields you want to have included in the registration attempt. For your convenience you can * use the 'fields' argument of handleRegistrationFields(). ;) It's your responsibility to make * sure at least those fields the server requested are filled in. * * Check @c tests/register_test.cpp for an example. * * @author Jakob Schroeter * @since 0.2 */ class GLOOX_API Registration : public IqHandler { public: /** * The possible fields of a XEP-0077 account registration. */ enum fieldEnum { FieldUsername = 1, FieldNick = 2, FieldPassword = 4, FieldName = 8, FieldFirst = 16, FieldLast = 32, FieldEmail = 64, FieldAddress = 128, FieldCity = 256, FieldState = 512, FieldZip = 1024, FieldPhone = 2048, FieldUrl = 4096, FieldDate = 8192, FieldMisc = 16384, FieldText = 32768 }; /** * @brief A wrapping class for the XEP-0077 <query> element. * * @author Jakob Schroeter * @since 1.0 */ class Query : public StanzaExtension { public: /** * Creates a new object that can be used to carry out a registration. * @param form A DataForm containing the registration terms. */ Query( DataForm* form ); /** * Creates a new object that can be used to carry out a registration. * @param del Whether or not to remove the account. */ Query( bool del = false ); /** * Creates a new object that can be used to carry out a registration. * @param fields Bit-wise ORed fieldEnum values describing the valid (i.e., set) * fields in the @b values parameter. * @param values Contains the registration fields. */ Query( int fields, const RegistrationFields& values ); /** * Creates a new object from the given Tag. * @param tag The Tag to parse. */ Query( const Tag* tag ); /** * Virtual Destructor. */ virtual ~Query(); /** * Returns the contained registration form, if any. * @return The registration form. May be 0. */ const DataForm* form() const { return m_form; } /** * Returns the registration instructions, if given * @return The registration instructions. */ const std::string& instructions() const { return m_instructions; } /** * Returns the registration fields, if set. * @return The registration fields. */ int fields() const { return m_fields; } /** * */ const RegistrationFields& values() const { return m_values; } /** * Indicates whether the account is already registered. * @return @b True if the <registered> element is present, @b false otherwise. */ bool registered() const { return m_reg; } /** * Indicates whether the account shall be removed. * @return @b True if the <remove> element is present, @b false otherwise. */ bool remove() const { return m_del; } /** * Returns an optional OOB object. * @return A pointer to an OOB object, if present, 0 otherwise. */ const OOB* oob() const { return m_oob; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new Query( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { Query* q = new Query(); q->m_form = m_form ? new DataForm( *m_form ) : 0; q->m_fields = m_fields; q->m_values = m_values; q->m_instructions = m_instructions; q->m_oob = new OOB( *m_oob ); q->m_del = m_del; q->m_reg = m_reg; return q; } private: DataForm* m_form; int m_fields; RegistrationFields m_values; std::string m_instructions; OOB* m_oob; bool m_del; bool m_reg; }; /** * Constructor. * @param parent The ClientBase which is used for establishing a connection. * @param to The server or service to authenticate with. If empty the currently connected * server will be used. */ Registration( ClientBase* parent, const JID& to ); /** * Constructor. Registration will be attempted with the ClientBase's connected host. * @param parent The ClientBase which is used for establishing a connection. */ Registration( ClientBase* parent ); /** * Virtual destructor. */ virtual ~Registration(); /** * Use this function to request the registration fields the server requires. * The required fields are returned asynchronously to the object registered as * @ref RegistrationHandler by calling @ref RegistrationHandler::handleRegistrationFields(). */ void fetchRegistrationFields(); /** * Attempts to register an account with the given credentials. Only the fields OR'ed in * @c fields will be sent. This can only be called with an unauthenticated parent (@ref Client). * @note It is recommended to use @ref fetchRegistrationFields to find out which fields the * server requires. * @param fields The fields to use to generate the registration request. OR'ed * @ref fieldEnum values. * @param values The struct contains the values which shall be used for the registration. * @return Returns @b true if the registration request was sent successfully, @b false * otherwise. In that case either there's no connected ClientBase available, or * prepping of the username failed (i.e. the username is not valid for use in XMPP). */ bool createAccount( int fields, const RegistrationFields& values ); /** * Attempts to register an account with the given credentials. This can only be called with an * unauthenticated parent (@ref Client). * @note According to XEP-0077, if the server sends both old-style fields and data form, * implementations SHOULD prefer data forms. * @param form The DataForm containing the registration credentials. */ void createAccount( DataForm* form ); /** * Tells the server to remove the currently authenticated account from the server. */ void removeAccount(); /** * Tells the server to change the password for the current account. * @param username The username to change the password for. You might want to use * Client::username() to get the current prepped username. * @param password The new password. */ void changePassword( const std::string& username, const std::string& password ); /** * Registers the given @c rh as RegistrationHandler. Only one handler is possible at a time. * @param rh The RegistrationHandler to register. */ void registerRegistrationHandler( RegistrationHandler* rh ); /** * Un-registers the current RegistrationHandler. */ void removeRegistrationHandler(); // reimplemented from IqHandler. virtual bool handleIq( const IQ& iq ) { (void)iq; return false; } // reimplemented from IqHandler. virtual void handleIqID( const IQ& iq, int context ); private: #ifdef REGISTRATION_TEST public: #endif enum IdType { FetchRegistrationFields, CreateAccount, RemoveAccount, ChangePassword }; Registration operator=( const Registration& ); void init(); ClientBase* m_parent; const JID m_to; RegistrationHandler* m_registrationHandler; }; } #endif // REGISTRATION_H__ qutim-0.2.0/plugins/jabber/libs/gloox/compressiondefault.cpp0000644000175000017500000000344511273054312025721 0ustar euroelessareuroelessar/* * Copyright (c) 2009 by Jakob Schroeter * This file is part of the gloox library. http://camaya.net/gloox * * This software is distributed under a license. The full license * agreement can be found in the file LICENSE in this distribution. * This software may not be copied, modified, sold or distributed * other than expressed in the named license agreement. * * This software is distributed without any warranty. */ #include "compressiondefault.h" #include "compressiondatahandler.h" #include "config.h" #if defined( HAVE_ZLIB ) # define HAVE_COMPRESSION # include "compressionzlib.h" #endif // #if defined( HAVE_LZW ) // # define HAVE_COMPRESSION // # include "compressionlzw.h" // #endif namespace gloox { CompressionDefault::CompressionDefault( CompressionDataHandler* cdh, Method method ) : CompressionBase( cdh ), m_impl( 0 ) { switch( method ) { case MethodZlib: #ifdef HAVE_ZLIB m_impl = new CompressionZlib( cdh ); #endif break; case MethodLZW: #ifdef HAVE_LZW m_impl = new CompressionLZW( cdh ); #endif break; default: break; } } CompressionDefault::~CompressionDefault() { delete m_impl; } bool CompressionDefault::init() { return m_impl ? m_impl->init() : false; } int CompressionDefault::types() { int types = 0; #ifdef HAVE_ZLIB types |= MethodZlib; #endif #ifdef HAVE_LZW types |= MethodLZW; #endif return types; } void CompressionDefault::compress( const std::string& data ) { if( m_impl ) m_impl->compress( data ); } void CompressionDefault::decompress( const std::string& data ) { if( m_impl ) m_impl->decompress( data ); } void CompressionDefault::cleanup() { if( m_impl ) m_impl->cleanup(); } } qutim-0.2.0/plugins/jabber/libs/gloox/featureneg.cpp0000644000175000017500000000270411273054312024135 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "featureneg.h" #include "dataform.h" #include "tag.h" namespace gloox { FeatureNeg::FeatureNeg( DataForm* form ) : StanzaExtension( ExtFeatureNeg ), m_form( form ) { } FeatureNeg::FeatureNeg( const Tag* tag ) : StanzaExtension( ExtFeatureNeg ), m_form( 0 ) { if( !tag || tag->name() != "feature" || tag->xmlns() != XMLNS_FEATURE_NEG ) return; const Tag* f = tag->findTag( "feature/x[@xmlns='" + XMLNS_X_DATA + "']" ); if( f ) m_form = new DataForm( f ); } FeatureNeg::~FeatureNeg() { delete m_form; } const std::string& FeatureNeg::filterString() const { static const std::string filter = "/message/feature[@xmlns='" + XMLNS_FEATURE_NEG + "']" "|/iq/feature[@xmlns='" + XMLNS_FEATURE_NEG + "']" ; return filter; } Tag* FeatureNeg::tag() const { if( !m_form ) return 0; Tag* t = new Tag( "feature" ); t->setXmlns( XMLNS_FEATURE_NEG ); t->addChild( m_form->tag() ); return t; } } qutim-0.2.0/plugins/jabber/libs/gloox/privacymanager.h0000644000175000017500000001524211273054312024466 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef PRIVACYMANAGER_H__ #define PRIVACYMANAGER_H__ #include "iqhandler.h" #include "privacylisthandler.h" #include "stanzaextension.h" #include namespace gloox { class ClientBase; /** * @brief This class implements a manager for privacy lists as defined in section 10 of RFC 3921. * * @author Jakob Schroeter * @since 0.3 */ class GLOOX_API PrivacyManager : public IqHandler { public: /** * Constructs a new PrivacyManager. * @param parent The ClientBase to use for communication. */ PrivacyManager( ClientBase* parent ); /** * Virtual destructor. */ virtual ~PrivacyManager(); /** * Stores the given list on the server. If a list with the given name exists, the existing * list is overwritten. * @param name The list's name. * @param list A non empty list of privacy items which describe the list. */ std::string store( const std::string& name, const PrivacyListHandler::PrivacyList& list ); /** * Triggers the request of the privacy lists currently stored on the server. */ std::string requestListNames() { return operation( PLRequestNames, EmptyString ); } /** * Triggers the retrieval of the named privacy lists. * @param name The name of the list to retrieve. */ std::string requestList( const std::string& name ) { return operation( PLRequestList, name ); } /** * Removes a list by its name. * @param name The name of the list to remove. */ std::string removeList( const std::string& name ) { return operation( PLRemove, name ); } /** * Sets the named list as the default list, i.e. active by default after login. * @param name The name of the list to set as default. */ std::string setDefault( const std::string& name ) { return operation( PLDefault, name ); } /** * This function declines the use of any default list. */ std::string unsetDefault() { return operation( PLUnsetDefault, EmptyString ); } /** * Sets the named list as active, i.e. active for this session * @param name The name of the list to set active. */ std::string setActive( const std::string& name ) { return operation( PLActivate, name ); } /** * This function declines the use of any active list. */ std::string unsetActive() { return operation( PLUnsetActivate, EmptyString ); } /** * Use this function to register an object as PrivacyListHandler. * Only one PrivacyListHandler at a time is possible. * @param plh The object to register as handler for privacy list related events. */ void registerPrivacyListHandler( PrivacyListHandler* plh ) { m_privacyListHandler = plh; } /** * Use this function to clear the registered PrivacyListHandler. */ void removePrivacyListHandler() { m_privacyListHandler = 0; } // reimplemented from IqHandler. virtual bool handleIq( const IQ& iq ); // reimplemented from IqHandler. virtual void handleIqID( const IQ& iq, int context ); private: enum IdType { PLRequestNames, PLRequestList, PLActivate, PLDefault, PLUnsetActivate, PLUnsetDefault, PLRemove, PLStore }; class Query : public StanzaExtension { public: /** * Creates a new query for storing or requesting a * privacy list. * @param context The context of the list. * @param name The list's name. * @param list The list's (optional) content. */ Query( IdType context, const std::string& name, const PrivacyListHandler::PrivacyList& list = PrivacyListHandler::PrivacyList() ); /** * Creates a new query from the given Tag. * @param tag The Tag to parse. */ Query( const Tag* tag = 0 ); /** * Virtual destructor. */ virtual ~Query(); /** * Returns the name of the active list, if given. * @return The active list's name. */ const std::string& active() const { return m_active; } /** * Returns the name of the default list, if given. * @return The default list's name. */ const std::string& def() const { return m_default; } /** * Returns a list of privacy items, if given. * @return A list of PrivacyItems. */ const PrivacyListHandler::PrivacyList& items() const { return m_items; } /** * Returns a list of list names. * @return A list of list names. */ const StringList& names() const { return m_names; } /** * A convenience function that returns the first name of the list that * names() would return, or an empty string. * @return A list name. */ const std::string& name() const { if( m_names.empty()) return EmptyString; else return (*m_names.begin()); } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new Query( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new Query( *this ); } private: IdType m_context; StringList m_names; std::string m_default; std::string m_active; PrivacyListHandler::PrivacyList m_items; }; std::string operation( IdType context, const std::string& name ); ClientBase* m_parent; PrivacyListHandler* m_privacyListHandler; }; } #endif // PRIVACYMANAGER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/annotationshandler.h0000644000175000017500000000316311273054312025350 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef ANNOTATIONSHANDLER_H__ #define ANNOTATIONSHANDLER_H__ #include "macros.h" #include #include namespace gloox { /** * This describes a single note item. */ struct AnnotationsListItem { std::string jid; /**< The JID of the roster item this note is about */ std::string cdate; /**< Creation date of this note. */ std::string mdate; /**< Date of last modification of this note. */ std::string note; /**< The note. */ }; /** * A list of note items. */ typedef std::list AnnotationsList; /** * @brief A virtual interface which can be reimplemented to receive notes with help of * the Annotations object. * * @author Jakob Schroeter * @since 0.3 */ class GLOOX_API AnnotationsHandler { public: /** * Virtual destructor. */ virtual ~AnnotationsHandler() {} /** * This function is called when notes arrive from the server. * @param aList A list of notes. */ virtual void handleAnnotations( const AnnotationsList &aList ) = 0; }; } #endif // ANNOTATIONSHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/adhoccommandprovider.h0000644000175000017500000000465611273054312025655 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef ADHOCCOMMANDPROVIDER_H__ #define ADHOCCOMMANDPROVIDER_H__ #include "tag.h" #include "jid.h" #include "adhoc.h" #include #include #include namespace gloox { /** * @brief A virtual interface for an Ad-hoc Command Provider according to XEP-0050. * * Derived classes can be registered as Command Providers with the Adhoc object. * * @author Jakob Schroeter */ class GLOOX_API AdhocCommandProvider { public: /** * Virtual destructor. */ virtual ~AdhocCommandProvider() {} /** * This function is called when an Ad-hoc Command needs to be handled. * The callee is responsible for the whole command execution, i.e. session * handling etc. * @param from The sender of the command request. * @param command The name of the command to be executed. * @param sessionID The session ID. Either newly generated or taken from the command. * When responding, its value must be passed to Adhoc::Command's constructor. */ virtual void handleAdhocCommand( const JID& from, const Adhoc::Command& command, const std::string& sessionID ) = 0; /** * This function gets called for each registered command when a remote * entity requests the list of available commands. * @param from The requesting entity. * @param command The command's name. * @return @b True if the remote entity is allowed to see the command, @b false if not. * @note The return value of this function does not influence * the execution of a command. That is, you have to * implement additional access control at the execution * stage. * @note This function should not block. */ virtual bool handleAdhocAccessRequest( const JID& from, const std::string& command ) { (void)from; (void)command; return true; } }; } #endif // ADHOCCOMMANDPROVIDER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/messagefilter.h0000644000175000017500000000476711273054312024322 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef MESSAGEFILTER_H__ #define MESSAGEFILTER_H__ #include "messagesession.h" namespace gloox { class Message; /** * @brief Virtual base class for message filters. * * A message filter is fed with all messages passing through a MessageSession. It can * modify the XML/XMPP structure and/or the message content at will. Messages arriving * from the server as well as messages sent to the server can be altered. * * Messages to be sent out are presented to the filter via the decorate() function, incoming * messages can be filtered in the -- filter() method. * * @author Jakob Schroeter * @since 0.8 */ class GLOOX_API MessageFilter { public: /** * Constructor. * @param parent The MessageSession to attach to. */ MessageFilter( MessageSession* parent ); /** * Virtual Destructor. */ virtual ~MessageFilter(); /** * Attaches this MessageFilter to the given MessageSession and hooks it into * the session's filter chain. * If this filter was attached to a different MessageSession before, it is * unregistered there prior to registering it with the new session. * @param session The MessageSession to hook into. */ virtual void attachTo( MessageSession* session ); /** * This function receives a message right before it is sent out (there may be other filters * which get to see the message after this filter, though). * @param msg The tag to decorate. It contains the message to be sent. */ virtual void decorate( Message& msg ) = 0; /** * This function receives a message stanza right after it was received (there may be other filters * which got to see the stanza before this filter, though). * @param msg The complete message stanza. */ virtual void filter( Message& msg ) = 0; protected: void send( Message& msg ) { if( m_parent ) m_parent->send( msg ); } MessageSession* m_parent; }; } #endif // MESSAGEFILTER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/nickname.cpp0000644000175000017500000000202711273054312023573 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "nickname.h" #include "tag.h" namespace gloox { Nickname::Nickname( const Tag* tag ) : StanzaExtension( ExtNickname ) { if( tag ) m_nick = tag->cdata(); } const std::string& Nickname::filterString() const { static const std::string filter = "/presence/nick[@xmlns='" + XMLNS_NICKNAME + "']" "|/message/nick[@xmlns='" + XMLNS_NICKNAME + "']"; return filter; } Tag* Nickname::tag() const { if( m_nick.empty() ) return 0; Tag* n = new Tag( "nick", XMLNS, XMLNS_NICKNAME ); n->setCData( m_nick ); return n; } } qutim-0.2.0/plugins/jabber/libs/gloox/compressionzlib.h0000644000175000017500000000312711273054312024677 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef COMPRESSIONZLIB_H__ #define COMPRESSIONZLIB_H__ #include "compressionbase.h" #include "mutex.h" #include "config.h" #ifdef HAVE_ZLIB #include #include namespace gloox { /** * An implementation of CompressionBase using zlib. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API CompressionZlib : public CompressionBase { public: /** * Contructor. * @param cdh The CompressionDataHandler to receive de/compressed data. */ CompressionZlib( CompressionDataHandler* cdh ); /** * Virtual Destructor. */ virtual ~CompressionZlib(); // reimplemented from CompressionBase virtual bool init(); // reimplemented from CompressionBase virtual void compress( const std::string& data ); // reimplemented from CompressionBase virtual void decompress( const std::string& data ); // reimplemented from CompressionBase virtual void cleanup(); private: z_stream m_zinflate; z_stream m_zdeflate; util::Mutex m_compressMutex; }; } #endif // HAVE_ZLIB #endif // COMPRESSIONZLIB_H__ qutim-0.2.0/plugins/jabber/libs/gloox/adhochandler.h0000644000175000017500000000457711273054312024103 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef ADHOCHANDLER_H__ #define ADHOCHANDLER_H__ #include "adhoc.h" namespace gloox { /** * @brief A virtual interface for an Ad-hoc Command users according to XEP-0050. * * Derived classes can be registered with the Adhoc object to receive notifications * about Adhoc Commands remote entities support. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API AdhocHandler { public: /** * Virtual destructor. */ virtual ~AdhocHandler() {} /** * This function is called in response to a call to Adhoc::checkSupport(). * @param remote The queried remote entity's JID. * @param support Whether the remote entity supports Adhoc Commands. */ virtual void handleAdhocSupport( const JID& remote, bool support ) = 0; /** * This function is called in response to a call to Adhoc::getCommands() * and delivers a list of supported commands. * @param remote The queried remote entity's JID. * @param commands A map of supported commands and their human-readable name. * The map may be empty. */ virtual void handleAdhocCommands( const JID& remote, const StringMap& commands ) = 0; /** * This function is called in response to a call to Adhoc::getCommands() or * Adhoc::checkSupport() or Adhoc::execute() in case the respective request returned * an error. * @param remote The queried remote entity's JID. * @param error The error condition. May be 0. */ virtual void handleAdhocError( const JID& remote, const Error* error ) = 0; /** * This function is called in response to a remote command execution. * @param remote The remote entity's JID. * @param command The command being executed. */ virtual void handleAdhocExecutionResult( const JID& remote, const Adhoc::Command& command ) = 0; }; } #endif // ADHOCHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/parser.h0000644000175000017500000000657111273054312022757 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef PARSER_H__ #define PARSER_H__ #include "gloox.h" #include "taghandler.h" #include "tag.h" #include namespace gloox { /** * @brief This class implements an XML parser. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API Parser { public: /** * Constructs a new Parser object. * @param ph The object to send incoming Tags to. * @param deleteRoot Indicates whether a parsed Tag should be * deleted after pushing it upstream. Defaults to @p true. */ Parser( TagHandler* ph, bool deleteRoot = true ); /** * Virtual destructor. */ virtual ~Parser(); /** * Use this function to feed the parser with more XML. * @param data Raw xml to parse. It may be modified if backbuffering is necessary. * @return Returns @b -1 if parsing was successful. If a parse error occured, the * character position where the error was occured is returned. */ int feed( std::string& data ); /** * Resets internal state. * @param deleteRoot Whether to delete the m_root member. For * internal use only. */ void cleanup( bool deleteRoot = true ); private: enum ParserInternalState { Initial, InterTag, TagOpening, TagOpeningSlash, TagOpeningLt, TagInside, TagNameCollect, TagNameComplete, TagNameAlmostComplete, TagAttribute, TagAttributeComplete, TagAttributeEqual, TagClosing, TagClosingSlash, TagValueApos, TagAttributeValue, TagPreamble, TagCDATASection }; enum ForwardScanState { ForwardFound, ForwardNotFound, ForwardInsufficientSize }; enum DecodeState { DecodeValid, DecodeInvalid, DecodeInsufficient }; void addTag(); void addAttribute(); void addCData(); bool closeTag(); bool isWhitespace( unsigned char c ); bool isValid( unsigned char c ); void streamEvent( Tag* tag ); ForwardScanState forwardScan( std::string::size_type& pos, const std::string& data, const std::string& needle ); DecodeState decode( std::string::size_type& pos, const std::string& data ); TagHandler* m_tagHandler; Tag* m_current; Tag* m_root; StringMap* m_xmlnss; ParserInternalState m_state; Tag::AttributeList m_attribs; std::string m_tag; std::string m_cdata; std::string m_attrib; std::string m_value; std::string m_xmlns; std::string m_tagPrefix; std::string m_attribPrefix; std::string m_backBuffer; int m_preamble; bool m_quote; bool m_haveTagPrefix; bool m_haveAttribPrefix; bool m_attribIsXmlns; bool m_deleteRoot; }; } #endif // PARSER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/xhtmlim.cpp0000644000175000017500000000233611273054312023473 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "xhtmlim.h" #include "tag.h" namespace gloox { XHtmlIM::XHtmlIM( const Tag* xhtml ) : StanzaExtension( ExtXHtmlIM ), m_xhtml( 0 ) { if( !xhtml|| xhtml->name() != "html" || xhtml->xmlns() != XMLNS_XHTML_IM ) return; if( !xhtml->hasChild( "body", XMLNS, "http://www.w3.org/1999/xhtml" ) ) return; m_xhtml = xhtml->clone(); } XHtmlIM::~XHtmlIM() { delete m_xhtml; } const std::string& XHtmlIM::filterString() const { static const std::string filter = "/message/html[@xmlns='" + XMLNS_XHTML_IM + "']"; return filter; } Tag* XHtmlIM::tag() const { return m_xhtml->clone(); } StanzaExtension* XHtmlIM::clone() const { XHtmlIM* x = new XHtmlIM(); x->m_xhtml = m_xhtml ? m_xhtml->clone() : 0; return 0; } } qutim-0.2.0/plugins/jabber/libs/gloox/connectionsocks5proxy.cpp0000644000175000017500000002470711273054312026410 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "config.h" #include "gloox.h" #include "connectionsocks5proxy.h" #include "dns.h" #include "logsink.h" #include "prep.h" #include "base64.h" #include "util.h" #include #include #include #if ( !defined( _WIN32 ) && !defined( _WIN32_WCE ) ) || defined( __SYMBIAN32__ ) # include #endif #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) # include #elif defined( _WIN32_WCE ) # include #endif namespace gloox { ConnectionSOCKS5Proxy::ConnectionSOCKS5Proxy( ConnectionBase* connection, const LogSink& logInstance, const std::string& server, int port, bool ip ) : ConnectionBase( 0 ), m_connection( connection ), m_logInstance( logInstance ), m_s5state( S5StateDisconnected ), m_ip( ip ) { // FIXME check return value? prep::idna( server, m_server ); m_port = port; if( m_connection ) m_connection->registerConnectionDataHandler( this ); } ConnectionSOCKS5Proxy::ConnectionSOCKS5Proxy( ConnectionDataHandler* cdh, ConnectionBase* connection, const LogSink& logInstance, const std::string& server, int port, bool ip ) : ConnectionBase( cdh ), m_connection( connection ), m_logInstance( logInstance ), m_s5state( S5StateDisconnected ), m_ip( ip ) { // FIXME check return value? prep::idna( server, m_server ); m_port = port; if( m_connection ) m_connection->registerConnectionDataHandler( this ); } ConnectionSOCKS5Proxy::~ConnectionSOCKS5Proxy() { if( m_connection ) delete m_connection; } ConnectionBase* ConnectionSOCKS5Proxy::newInstance() const { ConnectionBase* conn = m_connection ? m_connection->newInstance() : 0; return new ConnectionSOCKS5Proxy( m_handler, conn, m_logInstance, m_server, m_port, m_ip ); } void ConnectionSOCKS5Proxy::setConnectionImpl( ConnectionBase* connection ) { if( m_connection ) delete m_connection; m_connection = connection; } ConnectionError ConnectionSOCKS5Proxy::connect() { // FIXME CHECKME if( m_connection && m_connection->state() == StateConnected && m_handler ) { m_state = StateConnected; m_s5state = S5StateConnected; return ConnNoError; } if( m_connection && m_handler ) { m_state = StateConnecting; m_s5state = S5StateConnecting; return m_connection->connect(); } return ConnNotConnected; } void ConnectionSOCKS5Proxy::disconnect() { if( m_connection ) m_connection->disconnect(); cleanup(); } ConnectionError ConnectionSOCKS5Proxy::recv( int timeout ) { if( m_connection ) return m_connection->recv( timeout ); else return ConnNotConnected; } ConnectionError ConnectionSOCKS5Proxy::receive() { if( m_connection ) return m_connection->receive(); else return ConnNotConnected; } bool ConnectionSOCKS5Proxy::send( const std::string& data ) { // if( m_s5state != S5StateConnected ) // { // printf( "p data sent: " ); // const char* x = data.c_str(); // for( unsigned int i = 0; i < data.length(); ++i ) // printf( "%02X ", (const char)x[i] ); // printf( "\n" ); // } if( m_connection ) return m_connection->send( data ); return false; } void ConnectionSOCKS5Proxy::cleanup() { m_state = StateDisconnected; m_s5state = S5StateDisconnected; if( m_connection ) m_connection->cleanup(); } void ConnectionSOCKS5Proxy::getStatistics( long int &totalIn, long int &totalOut ) { if( m_connection ) m_connection->getStatistics( totalIn, totalOut ); else { totalIn = 0; totalOut = 0; } } void ConnectionSOCKS5Proxy::handleReceivedData( const ConnectionBase* /*connection*/, const std::string& data ) { // if( m_s5state != S5StateConnected ) // { // printf( "data recv: " ); // const char* x = data.c_str(); // for( unsigned int i = 0; i < data.length(); ++i ) // printf( "%02X ", (const char)x[i] ); // printf( "\n" ); // } if( !m_connection || !m_handler ) return; ConnectionError connError = ConnNoError; switch( m_s5state ) { case S5StateConnecting: if( data.length() != 2 || data[0] != 0x05 ) connError = ConnIoError; if( data[1] == 0x00 ) // no auth { negotiate(); } else if( data[1] == 0x02 && !m_proxyUser.empty() && !m_proxyPwd.empty() ) // user/password auth { m_logInstance.dbg( LogAreaClassConnectionSOCKS5Proxy, "authenticating to socks5 proxy as user " + m_proxyUser ); m_s5state = S5StateAuthenticating; char* d = new char[3 + m_proxyUser.length() + m_proxyPwd.length()]; size_t pos = 0; d[pos++] = 0x01; d[pos++] = (char)m_proxyUser.length(); strncpy( d + pos, m_proxyUser.c_str(), m_proxyUser.length() ); pos += m_proxyUser.length(); d[pos++] = (char)m_proxyPwd.length(); strncpy( d + pos, m_proxyPwd.c_str(), m_proxyPwd.length() ); pos += m_proxyPwd.length(); if( !send( std::string( d, pos ) ) ) { cleanup(); m_handler->handleDisconnect( this, ConnIoError ); } delete[] d; } else { if( data[1] == (char)(unsigned char)0xFF && !m_proxyUser.empty() && !m_proxyPwd.empty() ) connError = ConnProxyNoSupportedAuth; else connError = ConnProxyAuthRequired; } break; case S5StateNegotiating: if( data.length() >= 6 && data[0] == 0x05 ) { if( data[1] == 0x00 ) { m_state = StateConnected; m_s5state = S5StateConnected; m_handler->handleConnect( this ); } else // connection refused connError = ConnConnectionRefused; } else connError = ConnIoError; break; case S5StateAuthenticating: if( data.length() == 2 && data[0] == 0x01 && data[1] == 0x00 ) negotiate(); else connError = ConnProxyAuthFailed; break; case S5StateConnected: m_handler->handleReceivedData( this, data ); break; default: break; } if( connError != ConnNoError ) { m_connection->disconnect(); m_handler->handleDisconnect( this, connError ); } } void ConnectionSOCKS5Proxy::negotiate() { m_s5state = S5StateNegotiating; char* d = new char[m_ip ? 10 : 6 + m_server.length() + 1]; size_t pos = 0; d[pos++] = 0x05; // SOCKS version 5 d[pos++] = 0x01; // command CONNECT d[pos++] = 0x00; // reserved int port = m_port; std::string server = m_server; if( m_ip ) // IP address { d[pos++] = 0x01; // IPv4 address std::string s; const size_t j = server.length(); size_t l = 0; for( size_t k = 0; k < j && l < 4; ++k ) { if( server[k] != '.' ) s += server[k]; if( server[k] == '.' || k == j-1 ) { d[pos++] = static_cast( atoi( s.c_str() ) & 0xFF ); s = EmptyString; ++l; } } } else // hostname { if( port == -1 ) { const DNS::HostMap& servers = DNS::resolve( m_server, m_logInstance ); if( servers.size() ) { const std::pair< std::string, int >& host = *servers.begin(); server = host.first; port = host.second; } } d[pos++] = 0x03; // hostname d[pos++] = (char)m_server.length(); strncpy( d + pos, m_server.c_str(), m_server.length() ); pos += m_server.length(); } int nport = htons( port ); d[pos++] = static_cast( nport ); d[pos++] = static_cast( nport >> 8 ); std::string message = "Requesting socks5 proxy connection to " + server + ":" + util::int2string( port ); m_logInstance.dbg( LogAreaClassConnectionSOCKS5Proxy, message ); if( !send( std::string( d, pos ) ) ) { cleanup(); m_handler->handleDisconnect( this, ConnIoError ); } delete[] d; } void ConnectionSOCKS5Proxy::handleConnect( const ConnectionBase* /*connection*/ ) { if( m_connection ) { std::string server = m_server; int port = m_port; if( port == -1 ) { const DNS::HostMap& servers = DNS::resolve( m_server, m_logInstance ); if( !servers.empty() ) { const std::pair< std::string, int >& host = *servers.begin(); server = host.first; port = host.second; } } m_logInstance.dbg( LogAreaClassConnectionSOCKS5Proxy, "Attempting to negotiate socks5 proxy connection" ); const bool auth = !m_proxyUser.empty() && !m_proxyPwd.empty(); const char d[4] = { 0x05, // SOCKS version 5 static_cast( auth ? 0x02 // two methods : 0x01 ), // one method 0x00, // method: no auth 0x02 // method: username/password auth }; if( !send( std::string( d, auth ? 4 : 3 ) ) ) { cleanup(); if( m_handler ) m_handler->handleDisconnect( this, ConnIoError ); } } } void ConnectionSOCKS5Proxy::handleDisconnect( const ConnectionBase* /*connection*/, ConnectionError reason ) { cleanup(); m_logInstance.dbg( LogAreaClassConnectionSOCKS5Proxy, "socks5 proxy connection closed" ); if( m_handler ) m_handler->handleDisconnect( this, reason ); } } qutim-0.2.0/plugins/jabber/libs/gloox/mucroom.cpp0000644000175000017500000011254311273054312023474 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "mucroom.h" #include "clientbase.h" #include "dataform.h" #include "presence.h" #include "disco.h" #include "mucmessagesession.h" #include "message.h" #include "error.h" #include "util.h" #include "tag.h" namespace gloox { // ---- MUCRoom::MUCAdmin ---- /* Error type values */ static const char* affiliationValues [] = { "none", "outcast", "member", "owner", "admin" }; /* Stanza error values */ static const char* roleValues [] = { "none", "visitor", "participant", "moderator", }; /** Strings indicating the type of history to request. */ const char* historyTypeValues[] = { "maxchars", "maxstanzas", "seconds", "since" }; static inline MUCRoomAffiliation affiliationType( const std::string& type ) { return (MUCRoomAffiliation)util::lookup( type, affiliationValues ); } static inline MUCRoomRole roleType( const std::string& type ) { return (MUCRoomRole)util::lookup( type, roleValues ); } MUCRoom::MUCAdmin::MUCAdmin( MUCRoomRole role, const std::string& nick, const std::string& reason ) : StanzaExtension( ExtMUCAdmin ), m_affiliation( AffiliationInvalid ), m_role( role ) { m_list.push_back( MUCListItem( nick, role, reason ) ); } MUCRoom::MUCAdmin::MUCAdmin( MUCRoomAffiliation affiliation, const std::string& nick, const std::string& reason ) : StanzaExtension( ExtMUCAdmin ), m_affiliation( affiliation ), m_role( RoleInvalid ) { m_list.push_back( MUCListItem( nick, affiliation, reason ) ); } MUCRoom::MUCAdmin::MUCAdmin( MUCOperation operation, const MUCListItemList& jids ) : StanzaExtension( ExtMUCAdmin ), m_list( jids ), m_affiliation( AffiliationInvalid ), m_role( RoleInvalid ) { switch( operation ) { case StoreVoiceList: case RequestVoiceList: m_role = RoleParticipant; break; case StoreModeratorList: case RequestModeratorList: m_role = RoleModerator; break; case StoreBanList: case RequestBanList: m_affiliation = AffiliationOutcast; break; case StoreMemberList: case RequestMemberList: m_affiliation = AffiliationMember; break; case StoreOwnerList: case RequestOwnerList: m_affiliation = AffiliationOwner; break; case StoreAdminList: case RequestAdminList: m_affiliation = AffiliationAdmin; break; default: return; break; } if( m_list.empty() ) m_list.push_back( MUCListItem( JID() ) ); } MUCRoom::MUCAdmin::MUCAdmin( const Tag* tag ) : StanzaExtension( ExtMUCAdmin ), m_affiliation( AffiliationInvalid ), m_role( RoleInvalid ) { if( !tag || tag->name() != "query" || tag->xmlns() != XMLNS_MUC_ADMIN ) return; const TagList& items = tag->findChildren( "item" ); TagList::const_iterator it = items.begin(); for( ; it != items.end(); ++it ) { m_list.push_back( MUCListItem( JID( (*it)->findAttribute( "jid" ) ), roleType( (*it)->findAttribute( "role" ) ), affiliationType( (*it)->findAttribute( "affiliation" ) ), (*it)->findAttribute( "nick" ) ) ); if( m_role == RoleInvalid ) m_role = roleType( (*it)->findAttribute( "role" ) ); if( m_affiliation == AffiliationInvalid ) m_affiliation = affiliationType( (*it)->findAttribute( "affiliation" ) ); } } MUCRoom::MUCAdmin::~MUCAdmin() { } const std::string& MUCRoom::MUCAdmin::filterString() const { static const std::string filter = "/iq/query[@xmlns='" + XMLNS_MUC_ADMIN + "']"; return filter; } Tag* MUCRoom::MUCAdmin::tag() const { Tag* t = new Tag( "query" ); t->setXmlns( XMLNS_MUC_ADMIN ); if( m_list.empty() || ( m_affiliation == AffiliationInvalid && m_role == RoleInvalid ) ) return t; MUCListItemList::const_iterator it = m_list.begin(); for( ; it != m_list.end(); ++it ) { Tag* i = new Tag( t, "item" ); if( (*it).jid() ) i->addAttribute( "jid", (*it).jid().bare() ); if( !(*it).nick().empty() ) i->addAttribute( "nick", (*it).nick() ); MUCRoomRole rol = RoleInvalid; if( (*it).role() != RoleInvalid ) rol = (*it).role(); else if( m_role != RoleInvalid ) rol = m_role; if( rol != RoleInvalid ) i->addAttribute( "role", util::lookup( rol, roleValues ) ); MUCRoomAffiliation aff = AffiliationInvalid; if( (*it).affiliation() != AffiliationInvalid ) aff = (*it).affiliation(); else if( m_affiliation != AffiliationInvalid ) aff = m_affiliation; if( aff != AffiliationInvalid ) i->addAttribute( "affiliation", util::lookup( aff, affiliationValues ) ); if( !(*it).reason().empty() ) new Tag( i, "reason", (*it).reason() ); } return t; } // ---- ~MUCRoom::MUCAdmin ---- // ---- MUCRoom::MUCOwner ---- MUCRoom::MUCOwner::MUCOwner( QueryType type, DataForm* form ) : StanzaExtension( ExtMUCOwner ), m_type( type ), m_form( form ) { m_valid = true; if( m_form ) return; switch( type ) { case TypeCancelConfig: m_form = new DataForm( TypeCancel ); break; case TypeInstantRoom: m_form = new DataForm( TypeSubmit ); break; default: break; } } MUCRoom::MUCOwner::MUCOwner( const JID& alternate, const std::string& reason, const std::string& password ) : StanzaExtension( ExtMUCOwner ), m_type( TypeDestroy ), m_jid( alternate ), m_reason( reason ), m_pwd( password ), m_form( 0 ) { m_valid = true; } MUCRoom::MUCOwner::MUCOwner( const Tag* tag ) : StanzaExtension( ExtMUCOwner ), m_type( TypeIncomingTag ), m_form( 0 ) { if( !tag || tag->name() != "query" || tag->xmlns() != XMLNS_MUC_OWNER ) return; const TagList& l = tag->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { const std::string& name = (*it)->name(); if( name == "x" && (*it)->xmlns() == XMLNS_X_DATA ) { m_form = new DataForm( (*it) ); break; } else if( name == "destroy" ) { m_type = TypeDestroy; m_jid = (*it)->findAttribute( "jid" ); m_pwd = (*it)->findCData( "/query/destroy/password" ); m_reason = (*it)->findCData( "/query/destroy/reason" ); break; } } m_valid = true; } MUCRoom::MUCOwner::~MUCOwner() { delete m_form; } const std::string& MUCRoom::MUCOwner::filterString() const { static const std::string filter = "/iq/query[@xmlns='" + XMLNS_MUC_OWNER + "']"; return filter; } Tag* MUCRoom::MUCOwner::tag() const { if( !m_valid ) return 0; Tag* t = new Tag( "query" ); t->setXmlns( XMLNS_MUC_OWNER ); switch( m_type ) { case TypeInstantRoom: case TypeSendConfig: case TypeCancelConfig: case TypeIncomingTag: if( m_form ) t->addChild( m_form->tag() ); break; case TypeDestroy: { Tag* d = new Tag( t, "destroy" ); if( m_jid ) d->addAttribute( "jid", m_jid.bare() ); if( !m_reason.empty() ) new Tag( d, "reason", m_reason ); if( !m_pwd.empty() ) new Tag( d, "password", m_pwd ); break; } case TypeRequestConfig: case TypeCreate: default: break; } return t; } // ---- ~MUCRoom::MUCOwner ---- // ---- MUCRoom::MUCUser ---- MUCRoom::MUCUser::MUCUser( MUCUserOperation operation, const std::string& to, const std::string& reason, const std::string& thread ) : StanzaExtension( ExtMUCUser ), m_affiliation( AffiliationInvalid ), m_role( RoleInvalid ), m_jid( new std::string( to ) ), m_actor( 0 ), m_thread( thread.empty() ? 0 : new std::string( thread ) ), m_reason( new std::string( reason ) ), m_newNick( 0 ), m_password( 0 ), m_alternate( 0 ), m_operation( operation ), m_flags( 0 ), m_del( false ), m_continue( !thread.empty() ) { } MUCRoom::MUCUser::MUCUser( const Tag* tag ) : StanzaExtension( ExtMUCUser ), m_affiliation( AffiliationInvalid ), m_role( RoleInvalid ), m_jid( 0 ), m_actor( 0 ), m_thread( 0 ), m_reason( 0 ), m_newNick( 0 ), m_password( 0 ), m_alternate( 0 ), m_operation( OpNone ), m_flags( 0 ), m_del( false ), m_continue( false ) { if( !tag || tag->name() != "x" || tag->xmlns() != XMLNS_MUC_USER ) return; const Tag* t = 0; const TagList& l = tag->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { if( (*it)->name() == "item" ) { m_affiliation = getEnumAffiliation( (*it)->findAttribute( "affiliation" ) ); m_role = getEnumRole( (*it)->findAttribute( "role" ) ); if( (*it)->hasAttribute( "jid" ) ) m_jid = new std::string( (*it)->findAttribute( "jid" ) ); if( ( t = (*it)->findChild( "actor" ) ) ) m_actor = new std::string( t->findAttribute( "jid" ) ); if( ( t = (*it)->findChild( "reason" ) ) ) m_reason = new std::string( t->cdata() ); if( (*it)->hasAttribute( "nick" ) ) m_newNick = new std::string( (*it)->findAttribute( "nick" ) ); } else if( (*it)->name() == "status" ) { const std::string& code = (*it)->findAttribute( "code" ); if( code == "100" ) m_flags |= FlagNonAnonymous; else if( code == "101" ) m_flags |= UserAffiliationChangedWNR; else if( code == "110" ) m_flags |= UserSelf; else if( code == "170" ) m_flags |= FlagPublicLogging; else if( code == "201" ) m_flags |= UserNewRoom; else if( code == "210" ) m_flags |= UserNickAssigned; else if( code == "301" ) m_flags |= UserBanned; else if( code == "303" ) m_flags |= UserNickChanged; else if( code == "307" ) m_flags |= UserKicked; else if( code == "321" ) m_flags |= UserAffiliationChanged; else if( code == "322" ) m_flags |= UserMembershipRequired; else if( code == "332" ) m_flags |= UserRoomShutdown; } else if( (*it)->name() == "destroy" ) { m_del = true; if( (*it)->hasAttribute( "jid" ) ) m_alternate = new std::string( (*it)->findAttribute( "jid" ) ); if( ( t = (*it)->findChild( "reason" ) ) ) m_reason = new std::string( t->cdata() ); m_flags |= UserRoomDestroyed; } else if( (*it)->name() == "invite" ) { m_operation = OpInviteFrom; m_jid = new std::string( (*it)->findAttribute( "from" ) ); if( m_jid->empty() ) { m_operation = OpInviteTo; m_jid->assign( (*it)->findAttribute( "to" ) ); } if( (*it)->hasChild( "reason" ) ) m_reason = new std::string( (*it)->findChild( "reason" )->cdata() ); if( (*it)->hasChild( "continue" ) ) { m_continue = true; m_thread = new std::string( (*it)->findChild( "continue" )->findAttribute( "thread" ) ); } } else if( (*it)->name() == "decline" ) { m_operation = OpDeclineFrom; m_jid = new std::string( (*it)->findAttribute( "from" ) ); if( m_jid->empty() ) { m_operation = OpDeclineTo; m_jid->assign( (*it)->findAttribute( "from" ) ); } if( (*it)->hasChild( "reason" ) ) m_reason = new std::string( (*it)->findChild( "reason" )->cdata() ); } else if( (*it)->name() == "password" ) { m_password = new std::string( (*it)->cdata() ); } } } MUCRoom::MUCUser::~MUCUser() { delete m_jid; delete m_actor; delete m_thread; delete m_reason; delete m_newNick; delete m_password; delete m_alternate; } MUCRoomRole MUCRoom::MUCUser::getEnumRole( const std::string& role ) { if( role == "moderator" ) return RoleModerator; if( role == "participant" ) return RoleParticipant; if( role == "visitor" ) return RoleVisitor; return RoleNone; } MUCRoomAffiliation MUCRoom::MUCUser::getEnumAffiliation( const std::string& affiliation ) { if( affiliation == "owner" ) return AffiliationOwner; if( affiliation == "admin" ) return AffiliationAdmin; if( affiliation == "member" ) return AffiliationMember; if( affiliation == "outcast" ) return AffiliationOutcast; return AffiliationNone; } const std::string& MUCRoom::MUCUser::filterString() const { static const std::string filter = "/presence/x[@xmlns='" + XMLNS_MUC_USER + "']" "|/message/x[@xmlns='" + XMLNS_MUC_USER + "']"; return filter; } Tag* MUCRoom::MUCUser::tag() const { Tag* t = new Tag( "x" ); t->setXmlns( XMLNS_MUC_USER ); if( m_affiliation != AffiliationInvalid || m_role != RoleInvalid ) { Tag* i = new Tag( t, "item" ); if( m_jid ) i->addAttribute( "jid", *m_jid ); if( m_role != RoleInvalid ) i->addAttribute( "role", util::lookup( m_role, roleValues ) ); if( m_affiliation != AffiliationInvalid ) i->addAttribute( "affiliation", util::lookup( m_affiliation, affiliationValues ) ); if( m_actor ) new Tag( i, "actor", "jid", *m_actor ); if( m_flags & FlagNonAnonymous ) new Tag( t, "status", "code", "100" ); if( m_flags & UserAffiliationChangedWNR ) new Tag( t, "status", "code", "101" ); if( m_flags & UserSelf ) new Tag( t, "status", "code", "110" ); if( m_flags & FlagPublicLogging ) new Tag( t, "status", "code", "170" ); if( m_flags & UserNewRoom ) new Tag( t, "status", "code", "201" ); if( m_flags & UserNickAssigned ) new Tag( t, "status", "code", "210" ); if( m_flags & UserBanned ) new Tag( t, "status", "code", "301" ); if( m_flags & UserNickChanged ) new Tag( t, "status", "code", "303" ); if( m_flags & UserKicked ) new Tag( t, "status", "code", "307" ); if( m_flags & UserAffiliationChanged ) new Tag( t, "status", "code", "321" ); if( m_flags & UserMembershipRequired ) new Tag( t, "status", "code", "322" ); if( m_flags & UserRoomShutdown ) new Tag( t, "status", "code", "332" ); } else if( m_del ) { Tag* d = new Tag( t, "destroy" ); if( m_alternate ) d->addAttribute( "jid", *m_alternate ); if( m_reason ) new Tag( d, "reason", *m_reason ); } else if( m_operation != OpNone && m_jid ) { Tag* d = 0; if( m_operation == OpInviteTo ) d = new Tag( t, "invite", "to", *m_jid ); else if( m_operation == OpInviteFrom ) d = new Tag( t, "invite", "from", *m_jid ); else if( m_operation == OpDeclineTo ) d = new Tag( t, "decline", "to", *m_jid ); else if( m_operation == OpDeclineFrom ) d = new Tag( t, "decline", "from", *m_jid ); if( m_reason ) new Tag( d, "reason", *m_reason ); if( m_continue ) { Tag* c = new Tag( d, "continue" ); if( m_thread ) c->addAttribute( "thread", *m_thread ); } if( m_password ) new Tag( t, "password", *m_password ); } return t; } // ---- ~MUCRoom::MUCUser ---- // ---- MUCRoom::MUC ---- MUCRoom::MUC::MUC( const std::string& password, MUCRoom::HistoryRequestType historyType, const std::string& historySince, int historyValue ) : StanzaExtension( ExtMUC ), m_password( password.empty() ? 0 : new std::string( password ) ), m_historySince( new std::string( historySince ) ), m_historyType( historyType ), m_historyValue( historyValue ) { } MUCRoom::MUC::MUC( const Tag* tag ) : StanzaExtension( ExtMUC ), m_password( 0 ), m_historySince( 0 ), m_historyType( HistoryUnknown ), m_historyValue( 0 ) { if( !tag || tag->name() != "x" || tag->xmlns() != XMLNS_MUC_USER ) return; const TagList& l = tag->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { if( (*it)->name() == "history" ) { if( (*it)->hasAttribute( "seconds" ) ) m_historyValue = atoi( (*it)->findAttribute( "seconds" ).c_str() ); else if( (*it)->hasAttribute( "maxstanzas" ) ) m_historyValue = atoi( (*it)->findAttribute( "maxstanzas" ).c_str() ); else if( (*it)->hasAttribute( "maxchars" ) ) m_historyValue = atoi( (*it)->findAttribute( "maxchars" ).c_str() ); else if( (*it)->hasAttribute( "since" ) ) m_historySince = new std::string( (*it)->findAttribute( "since" ) ); } else if( (*it)->name() == "password" ) { m_password = new std::string( (*it)->cdata() ); } } } MUCRoom::MUC::~MUC() { delete m_password; delete m_historySince; } const std::string& MUCRoom::MUC::filterString() const { static const std::string filter = "/presence/x[@xmlns='" + XMLNS_MUC + "']"; return filter; } Tag* MUCRoom::MUC::tag() const { Tag* t = new Tag( "x" ); t->setXmlns( XMLNS_MUC ); if( m_historyType != HistoryUnknown ) { const std::string& histStr = util::lookup( m_historyType, historyTypeValues ); Tag* h = new Tag( t, "history" ); if( m_historyType == HistorySince && m_historySince ) h->addAttribute( histStr, *m_historySince ); else h->addAttribute( histStr, m_historyValue ); } if( m_password ) new Tag( t, "password", *m_password ); return t; } // ---- ~MUCRoom::MUC ---- // --- MUCRoom ---- MUCRoom::MUCRoom( ClientBase* parent, const JID& nick, MUCRoomHandler* mrh, MUCRoomConfigHandler* mrch ) : m_parent( parent ), m_nick( nick ), m_joined( false ), m_roomHandler( mrh ), m_roomConfigHandler( mrch ), m_affiliation( AffiliationNone ), m_role( RoleNone ), m_historyType( HistoryUnknown ), m_historyValue( 0 ), m_flags( 0 ), m_creationInProgress( false ), m_configChanged( false ), m_publishNick( false ), m_publish( false ), m_unique( false ) { if( m_parent ) { m_parent->registerStanzaExtension( new MUCAdmin() ); m_parent->registerStanzaExtension( new MUCOwner() ); m_parent->registerStanzaExtension( new MUCUser() ); m_parent->registerStanzaExtension( new MUC() ); m_parent->registerStanzaExtension( new DelayedDelivery() ); } } MUCRoom::~MUCRoom() { if( m_joined ) leave(); if( m_parent ) { if( m_publish ) m_parent->disco()->removeNodeHandler( this, XMLNS_MUC_ROOMS ); m_parent->removeIDHandler( this ); // m_parent->removeStanzaExtension( ExtMUCAdmin ); // don't remove, other rooms might need it // m_parent->removeStanzaExtension( ExtMUCOwner ); m_parent->removePresenceHandler( m_nick.bareJID(), this ); m_parent->disco()->removeDiscoHandler( this ); } } void MUCRoom::join( Presence::PresenceType type, const std::string& status, int priority ) { if( m_joined || !m_parent ) return; m_parent->registerPresenceHandler( m_nick.bareJID(), this ); m_session = new MUCMessageSession( m_parent, m_nick.bareJID() ); m_session->registerMessageHandler( this ); Presence pres( type, m_nick.full(), status, priority ); pres.addExtension( new MUC( m_password, m_historyType, m_historySince, m_historyValue ) ); m_joined = true; m_parent->send( pres ); } void MUCRoom::leave( const std::string& msg ) { if( !m_joined ) return; if( m_parent ) { Presence pres( Presence::Unavailable, m_nick.full(), msg ); m_parent->send( pres ); m_parent->removePresenceHandler( m_nick.bareJID(), this ); m_parent->disposeMessageSession( m_session ); } m_session = 0; m_joined = false; } void MUCRoom::destroy( const std::string& reason, const JID& alternate, const std::string& password ) { if( !m_parent ) return; const std::string& id = m_parent->getID(); IQ iq( IQ::Set, m_nick.bareJID(), id ); iq.addExtension( new MUCOwner( alternate, reason, password ) ); m_parent->send( iq, this, DestroyRoom ); } void MUCRoom::send( const std::string& message ) { if( m_session && m_joined ) m_session->send( message ); } void MUCRoom::setSubject( const std::string& subject ) { if( m_session && m_joined ) m_session->setSubject( subject ); } void MUCRoom::setNick( const std::string& nick ) { if( m_parent && m_joined ) { m_newNick = nick; Presence p( Presence::Available, m_nick.bare() + "/" + m_newNick ); m_parent->send( p ); } else m_nick.setResource( nick ); } void MUCRoom::getRoomInfo() { if( m_parent ) m_parent->disco()->getDiscoInfo( m_nick.bare(), EmptyString, this, GetRoomInfo ); } void MUCRoom::getRoomItems() { if( m_parent ) m_parent->disco()->getDiscoItems( m_nick.bare(), EmptyString, this, GetRoomItems ); } void MUCRoom::setPresence( Presence::PresenceType presence, const std::string& msg ) { if( m_parent && presence != Presence::Unavailable && m_joined ) { Presence p( presence, m_nick.full(), msg ); m_parent->send( p ); } } void MUCRoom::invite( const JID& invitee, const std::string& reason, const std::string& thread ) { if( !m_parent || !m_joined ) return; Message msg( Message::Normal, m_nick.bareJID() ); msg.addExtension( new MUCUser( OpInviteTo, invitee.bare(), reason, thread ) ); m_parent->send( msg ); } Message* MUCRoom::declineInvitation( const JID& room, const JID& invitor, const std::string& reason ) { Message* msg = new Message( Message::Normal, room.bare() ); msg->addExtension( new MUCUser( OpDeclineTo, invitor.bare(), reason ) ); return msg; } void MUCRoom::setPublish( bool publish, bool publishNick ) { m_publish = publish; m_publishNick = publishNick; if( !m_parent ) return; if( m_publish ) m_parent->disco()->registerNodeHandler( this, XMLNS_MUC_ROOMS ); else m_parent->disco()->removeNodeHandler( this, XMLNS_MUC_ROOMS ); } void MUCRoom::addHistory( const std::string& message, const JID& from, const std::string& stamp ) { if( !m_joined || !m_parent ) return; Message m( Message::Groupchat, m_nick.bareJID(), message ); m.addExtension( new DelayedDelivery( from, stamp ) ); m_parent->send( m ); } void MUCRoom::setRequestHistory( int value, MUCRoom::HistoryRequestType type ) { m_historyType = type; m_historySince = EmptyString; m_historyValue = value; } void MUCRoom::setRequestHistory( const std::string& since ) { m_historyType = HistorySince; m_historySince = since; m_historyValue = 0; } Message* MUCRoom::createDataForm( const JID& room, const DataForm* df ) { Message* m = new Message( Message::Normal, room.bare() ); m->addExtension( df ); return m; } void MUCRoom::requestVoice() { if( !m_parent || !m_joined ) return; DataForm* df = new DataForm( TypeSubmit ); df->addField( DataFormField::TypeNone, "FORM_TYPE", XMLNS_MUC_REQUEST ); df->addField( DataFormField::TypeTextSingle, "muc#role", "participant", "Requested role" ); Message m( Message::Normal, m_nick.bare() ); m.addExtension( df ); m_parent->send( m ); } void MUCRoom::setRole( const std::string& nick, MUCRoomRole role, const std::string& reason ) { if( !m_parent || !m_joined || nick.empty() || role == RoleInvalid ) return; MUCOperation action = InvalidOperation; switch( role ) { case RoleNone: action = SetRNone; break; case RoleVisitor: action = SetVisitor; break; case RoleParticipant: action = SetParticipant; break; case RoleModerator: action = SetModerator; break; default: break; } IQ iq( IQ::Set, m_nick.bareJID() ); iq.addExtension( new MUCAdmin( role, nick, reason ) ); m_parent->send( iq, this, action ); } void MUCRoom::setAffiliation( const std::string& nick, MUCRoomAffiliation affiliation, const std::string& reason ) { if( !m_parent || !m_joined || nick.empty() || affiliation == AffiliationInvalid ) return; MUCOperation action = InvalidOperation; switch( affiliation ) { case AffiliationOutcast: action = SetOutcast; break; case AffiliationNone: action = SetANone; break; case AffiliationMember: action = SetMember; break; case AffiliationAdmin: action = SetAdmin; break; case AffiliationOwner: action = SetOwner; break; default: break; } IQ iq( IQ::Set, m_nick.bareJID() ); iq.addExtension( new MUCAdmin( affiliation, nick, reason ) ); m_parent->send( iq, this, action ); } void MUCRoom::requestList( MUCOperation operation ) { if( !m_parent || !m_joined || !m_roomConfigHandler ) return; IQ iq( IQ::Get, m_nick.bareJID() ); iq.addExtension( new MUCAdmin( operation ) ); m_parent->send( iq, this, operation ); } void MUCRoom::storeList( const MUCListItemList items, MUCOperation operation ) { if( !m_parent || !m_joined ) return; IQ iq( IQ::Set, m_nick.bareJID() ); iq.addExtension( new MUCAdmin( operation , items ) ); m_parent->send( iq, this, operation ); } void MUCRoom::handlePresence( const Presence& presence ) { if( ( presence.from().bare() != m_nick.bare() ) || !m_roomHandler ) return; if( presence.subtype() == Presence::Error ) { if( m_newNick.empty() ) { m_parent->removePresenceHandler( m_nick.bareJID(), this ); m_parent->disposeMessageSession( m_session ); m_joined = false; m_session = 0; } else m_newNick = ""; m_roomHandler->handleMUCError( this, presence.error() ? presence.error()->error() : StanzaErrorUndefined ); } else { const MUCUser* mu = presence.findExtension( ExtMUCUser ); if( !mu ) return; MUCRoomParticipant party; party.nick = new JID( presence.from() ); party.status = presence.status(); party.affiliation = mu->affiliation(); party.role = mu->role(); party.jid = mu->jid() ? new JID( *(mu->jid()) ) : 0; party.actor = mu->actor() ? new JID( *(mu->actor()) ) : 0; party.reason = mu->reason() ? *(mu->reason()) : EmptyString; party.newNick = mu->newNick() ? *(mu->newNick()) : EmptyString; party.alternate = mu->alternate() ? new JID( *(mu->alternate()) ) : 0; party.flags = mu->flags(); if( party.flags & FlagNonAnonymous ) setNonAnonymous(); if( party.flags & UserSelf ) { m_role = party.role; m_affiliation = party.affiliation; } if( party.flags & UserNewRoom ) { m_creationInProgress = true; if( instantRoomHook() || m_roomHandler->handleMUCRoomCreation( this ) ) acknowledgeInstantRoom(); } if( party.flags & UserNickAssigned ) m_nick.setResource( presence.from().resource() ); if( party.flags & UserNickChanged && !party.newNick.empty() && m_nick.resource() == presence.from().resource() && party.newNick == m_newNick ) party.flags |= UserSelf; if( party.flags & UserNickChanged && party.flags & UserSelf && !party.newNick.empty() ) m_nick.setResource( party.newNick ); if( m_roomHandler ) m_roomHandler->handleMUCParticipantPresence( this, party, presence ); delete party.nick; } } void MUCRoom::instantRoom( int context ) { if( !m_creationInProgress || !m_parent || !m_joined ) return; IQ iq( IQ::Set, m_nick.bareJID() ); iq.addExtension( new MUCOwner( context == CreateInstantRoom ? MUCOwner::TypeInstantRoom : MUCOwner::TypeCancelConfig ) ); m_parent->send( iq, this, context ); m_creationInProgress = false; } void MUCRoom::requestRoomConfig() { if( !m_parent || !m_joined ) return; IQ iq( IQ::Get, m_nick.bareJID() ); iq.addExtension( new MUCOwner( MUCOwner::TypeRequestConfig ) ); m_parent->send( iq, this, RequestRoomConfig ); if( m_creationInProgress ) m_creationInProgress = false; } void MUCRoom::setRoomConfig( DataForm* form ) { if( !m_parent || !m_joined ) return; IQ iq( IQ::Set, m_nick.bareJID() ); iq.addExtension( new MUCOwner( MUCOwner::TypeSendConfig, form ) ); m_parent->send( iq, this, SendRoomConfig ); } void MUCRoom::setNonAnonymous() { m_flags |= FlagNonAnonymous; m_flags &= ~( FlagSemiAnonymous | FlagFullyAnonymous ); } void MUCRoom::setSemiAnonymous() { m_flags &= ~( FlagNonAnonymous | FlagFullyAnonymous ); m_flags |= FlagSemiAnonymous; } void MUCRoom::setFullyAnonymous() { m_flags &= ~( FlagNonAnonymous | FlagSemiAnonymous ); m_flags |= FlagFullyAnonymous; } void MUCRoom::handleMessage( const Message& msg, MessageSession* /*session*/ ) { if( !m_roomHandler ) return; if( msg.subtype() == Message::Error ) { m_roomHandler->handleMUCError( this, msg.error() ? msg.error()->error() : StanzaErrorUndefined ); } else { const MUCUser* mu = msg.findExtension( ExtMUCUser ); if( mu ) { const int flags = mu->flags(); if( flags & FlagNonAnonymous ) setNonAnonymous(); if( flags & FlagPublicLogging ) { m_flags &= ~FlagPublicLoggingOff; m_flags |= FlagPublicLogging; } if( flags & FlagPublicLoggingOff ) { m_flags &= ~FlagPublicLogging; m_flags |= FlagPublicLoggingOff; } if( flags & FlagSemiAnonymous ) setSemiAnonymous(); if( flags & FlagFullyAnonymous ) setFullyAnonymous(); if( mu->operation() == OpDeclineFrom && mu->jid() ) m_roomHandler->handleMUCInviteDecline( this, JID( *(mu->jid()) ), mu->reason() ? *(mu->reason()) : EmptyString ); } const DataForm* df = msg.findExtension( ExtDataForm ); if( m_roomConfigHandler && df ) { m_roomConfigHandler->handleMUCRequest( this, *df ); return; } if( !msg.subject().empty() ) { m_roomHandler->handleMUCSubject( this, msg.from().resource(), msg.subject() ); } else if( !msg.body().empty() ) { std::string when; bool privMsg = false; bool history = false; if( msg.when() ) { when = msg.when()->stamp(); history = true; } if( msg.subtype() & ( Message::Chat | Message::Normal ) ) privMsg = true; m_roomHandler->handleMUCMessage( this, msg, privMsg ); } } } void MUCRoom::handleIqID( const IQ& iq, int context ) { if( !m_roomConfigHandler ) return; switch( iq.subtype() ) { case IQ::Result: handleIqResult( iq, context ); break; case IQ::Error: handleIqError( iq, context ); break; default: break; } } void MUCRoom::handleIqResult( const IQ& iq, int context ) { switch( context ) { case SetRNone: case SetVisitor: case SetParticipant: case SetModerator: case SetANone: case SetOutcast: case SetMember: case SetAdmin: case SetOwner: case CreateInstantRoom: case CancelRoomCreation: case DestroyRoom: case StoreVoiceList: case StoreBanList: case StoreMemberList: case StoreModeratorList: case StoreAdminList: m_roomConfigHandler->handleMUCConfigResult( this, true, (MUCOperation)context ); break; case RequestRoomConfig: { const MUCOwner* mo = iq.findExtension( ExtMUCOwner ); if( !mo ) break; if( mo->form() ) m_roomConfigHandler->handleMUCConfigForm( this, *(mo->form()) ); break; } case RequestVoiceList: case RequestBanList: case RequestMemberList: case RequestModeratorList: case RequestOwnerList: case RequestAdminList: { const MUCAdmin* ma = iq.findExtension( ExtMUCAdmin ); if( !ma ) break; m_roomConfigHandler->handleMUCConfigList( this, ma->list(), (MUCOperation)context ); break; } default: break; } } void MUCRoom::handleIqError( const IQ& /*iq*/, int context ) { switch( context ) { case SetRNone: case SetVisitor: case SetParticipant: case SetModerator: case SetANone: case SetOutcast: case SetMember: case SetAdmin: case SetOwner: case CreateInstantRoom: case CancelRoomCreation: case RequestRoomConfig: case DestroyRoom: case RequestVoiceList: case StoreVoiceList: case RequestBanList: case StoreBanList: case RequestMemberList: case StoreMemberList: case RequestModeratorList: case StoreModeratorList: case RequestOwnerList: case StoreOwnerList: case RequestAdminList: case StoreAdminList: m_roomConfigHandler->handleMUCConfigResult( this, false, (MUCOperation)context ); break; } } void MUCRoom::handleDiscoInfo( const JID& /*from*/, const Disco::Info& info, int context ) { switch( context ) { case GetRoomInfo: { int oldflags = m_flags; m_flags = 0; if( oldflags & FlagPublicLogging ) m_flags |= FlagPublicLogging; std::string name; const StringList& l = info.features(); StringList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { if( (*it) == "muc_hidden" ) m_flags |= FlagHidden; else if( (*it) == "muc_membersonly" ) m_flags |= FlagMembersOnly; else if( (*it) == "muc_moderated" ) m_flags |= FlagModerated; else if( (*it) == "muc_nonanonymous" ) setNonAnonymous(); else if( (*it) == "muc_open" ) m_flags |= FlagOpen; else if( (*it) == "muc_passwordprotected" ) m_flags |= FlagPasswordProtected; else if( (*it) == "muc_persistent" ) m_flags |= FlagPersistent; else if( (*it) == "muc_public" ) m_flags |= FlagPublic; else if( (*it) == "muc_semianonymous" ) setSemiAnonymous(); else if( (*it) == "muc_temporary" ) m_flags |= FlagTemporary; else if( (*it) == "muc_fullyanonymous" ) setFullyAnonymous(); else if( (*it) == "muc_unmoderated" ) m_flags |= FlagUnmoderated; else if( (*it) == "muc_unsecured" ) m_flags |= FlagUnsecured; } const Disco::IdentityList& il = info.identities(); if( il.size() ) name = il.front()->name(); if( m_roomHandler ) m_roomHandler->handleMUCInfo( this, m_flags, name, info.form() ); break; } default: break; } } void MUCRoom::handleDiscoItems( const JID& /*from*/, const Disco::Items& items, int context ) { if( !m_roomHandler ) return; switch( context ) { case GetRoomItems: { m_roomHandler->handleMUCItems( this, items.items() ); break; } default: break; } } void MUCRoom::handleDiscoError( const JID& /*from*/, const Error* /*error*/, int context ) { if( !m_roomHandler ) return; switch( context ) { case GetRoomInfo: m_roomHandler->handleMUCInfo( this, 0, EmptyString, 0 ); break; case GetRoomItems: m_roomHandler->handleMUCItems( this, Disco::ItemList() ); break; default: break; } } StringList MUCRoom::handleDiscoNodeFeatures( const JID& /*from*/, const std::string& /*node*/ ) { return StringList(); } Disco::IdentityList MUCRoom::handleDiscoNodeIdentities( const JID& /*from*/, const std::string& /*node*/ ) { return Disco::IdentityList(); } Disco::ItemList MUCRoom::handleDiscoNodeItems( const JID& /*from*/, const JID& /*to*/, const std::string& node ) { Disco::ItemList l; if( node == XMLNS_MUC_ROOMS && m_publish ) { l.push_back( new Disco::Item( m_nick.bareJID(), EmptyString, m_publishNick ? m_nick.resource() : EmptyString ) ); } return l; } } qutim-0.2.0/plugins/jabber/libs/gloox/util.h0000644000175000017500000002160311273054312022431 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef UTIL_H__ #define UTIL_H__ #include "gloox.h" #include #include #include #include #include namespace gloox { /** * @brief A namespace holding a couple utility functions. */ namespace util { #define lookup( a, b ) _lookup( a, b, sizeof(b)/sizeof(char*) ) #define lookup2( a, b ) _lookup2( a, b, sizeof(b)/sizeof(char*) ) #define deflookup( a, b, c ) _lookup( a, b, sizeof(b)/sizeof(char*), c ) #define deflookup2( a, b, c ) _lookup2( a, b, sizeof(b)/sizeof(char*), c ) /** * Finds the enumerated value associated with a string value. * @param str String to search for. * @param values Array of String/Code pairs to look into. * @param size The array's size. * @param def Default value returned in case the lookup failed. * @return The associated enum code. */ GLOOX_API unsigned _lookup( const std::string& str, const char* values[], unsigned size, int def = -1 ); /** * Finds the string associated with an enumerated type. * @param code Code of the string to search for. * @param values Array of String/Code pairs to look into. * @param size The array's size. * @param def Default value returned in case the lookup failed. * @return The associated string (empty in case there's no match). */ GLOOX_API const std::string _lookup( unsigned code, const char* values[], unsigned size, const std::string& def = EmptyString ); /** * Finds the ORable enumerated value associated with a string value. * @param str String to search for. * @param values Array of String/Code pairs to look into. * @param size The array's size. * @param def The default value to return if the lookup failed. * @return The associated enum code. */ GLOOX_API unsigned _lookup2( const std::string& str, const char* values[], unsigned size, int def = -1 ); /** * Finds the string associated with an ORable enumerated type. * @param code Code of the string to search for. * @param values Array of String/Code pairs to look into. * @param size The array's size. * @param def The default value to return if the lookup failed. * @return The associated string (empty in case there's no match). */ GLOOX_API const std::string _lookup2( unsigned code, const char* values[], unsigned size, const std::string& def = EmptyString ); /** * A convenience function that executes the given function on each object in a given list. * @param t The object to execute the function on. * @param f The function to execute. */ template< typename T, typename F > inline void ForEach( T& t, F f ) { for( typename T::iterator it = t.begin(); it != t.end(); ++it ) ( (*it)->*f )(); } /** * A convenience function that executes the given function on each object in a given list, * passing the given argument. * @param t The object to execute the function on. * @param f The function to execute. * @param d An argument to pass to the function. */ template< typename T, typename F, typename D > inline void ForEach( T& t, F f, D& d ) { for( typename T::iterator it = t.begin(); it != t.end(); ++it ) ( (*it)->*f )( d ); } /** * A convenience function that executes the given function on each object in a given list, * passing the given arguments. * @param t The object to execute the function on. * @param f The function to execute. * @param d1 An argument to pass to the function. * @param d2 An argument to pass to the function. */ template< typename T, typename F, typename D1, typename D2 > inline void ForEach( T& t, F f, D1& d1, D2& d2 ) { for( typename T::iterator it = t.begin(); it != t.end(); ++it ) ( (*it)->*f )( d1, d2 ); } /** * A convenience function that executes the given function on each object in a given list, * passing the given arguments. * @param t The object to execute the function on. * @param f The function to execute. * @param d1 An argument to pass to the function. * @param d2 An argument to pass to the function. * @param d3 An argument to pass to the function. */ template< typename T, typename F, typename D1, typename D2, typename D3 > inline void ForEach( T& t, F f, D1& d1, D2& d2, D3& d3 ) { for( typename T::iterator it = t.begin(); it != t.end(); ++it ) ( (*it)->*f )( d1, d2, d3 ); } /** * Delete all elements from a list of pointers. * @param L List of pointers to delete. */ template< typename T > inline void clearList( std::list< T* >& L ) { typename std::list< T* >::iterator it = L.begin(); typename std::list< T* >::iterator it2; while( it != L.end() ) { it2 = it++; delete (*it2); L.erase( it2 ); } } /** * Delete all associated values from a map (not the key elements). * @param M Map of pointer values to delete. */ template< typename Key, typename T > inline void clearMap( std::map< Key, T* >& M ) { typename std::map< Key, T* >::iterator it = M.begin(); typename std::map< Key, T* >::iterator it2; while( it != M.end() ) { it2 = it++; delete (*it2).second; M.erase( it2 ); } } /** * Delete all associated values from a map (not the key elements). * Const key type version. * @param M Map of pointer values to delete. */ template< typename Key, typename T > inline void clearMap( std::map< const Key, T* >& M ) { typename std::map< const Key, T* >::iterator it = M.begin(); typename std::map< const Key, T* >::iterator it2; while( it != M.end() ) { it2 = it++; delete (*it2).second; M.erase( it2 ); } } /** * Does some fancy escaping. (& --> &amp;, etc). * @param what A string to escape. * @return The escaped string. */ GLOOX_API const std::string escape( std::string what ); /** * Checks whether the given input is valid UTF-8. * @param data The data to check for validity. * @return @@b True if the input is valid UTF-8, @b false otherwise. */ GLOOX_API bool checkValidXMLChars( const std::string& data ); /** * Custom log2() implementation. * @param n Figure to take the logarithm from. * @return The logarithm to the basis of 2. */ GLOOX_API int internalLog2( unsigned int n ); /** * Replace all instances of one substring of arbitrary length * with another substring of arbitrary length. Replacement happens * in place (so make a copy first if you don't want the original modified). * @param target The string to process. Changes are made "in place". * @param find The sub-string to find within the target string * @param replace The sub-string to substitute for the find string. * @todo Look into merging with util::escape() and Parser::decode(). */ GLOOX_API void replaceAll( std::string& target, const std::string& find, const std::string& replace ); /** * Converts a long int to its string representation. * @param value The long integer value. * @param base The integer's base. * @return The long int's string represenation. */ static inline const std::string long2string( long int value, const int base = 10 ) { int add = 0; if( base < 2 || base > 16 || value == 0 ) return "0"; else if( value < 0 ) { ++add; value = -value; } int len = (int)( log( (double)( value ? value : 1 ) ) / log( (double)base ) ) + 1; const char digits[] = "0123456789ABCDEF"; char* num = (char*)calloc( len + 1 + add, sizeof( char ) ); num[len--] = '\0'; if( add ) num[0] = '-'; while( value && len > -1 ) { num[len-- + add] = digits[(int)( value % base )]; value /= base; } const std::string result( num ); free( num ); return result; } /** * Converts an int to its string representation. * @param value The integer value. * @return The int's string represenation. */ static inline const std::string int2string( int value ) { return long2string( value ); } } } #endif // UTIL_H__ qutim-0.2.0/plugins/jabber/libs/gloox/stanza.h0000644000175000017500000001170211273054312022753 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef STANZA_H__ #define STANZA_H__ #include "gloox.h" #include "tag.h" #include "jid.h" #include "stanzaextension.h" namespace gloox { class Error; /** * @brief This is the base class for XMPP stanza abstractions. * * @author Jakob Schroeter * @since 0.4 */ class GLOOX_API Stanza { public: /** * Virtual destructor. */ virtual ~Stanza(); /** * Sets the 'from' address of the Stanza. This useful for @link gloox::Component Components @endlink. * @param from The from address. */ void setFrom( const JID& from ) { m_from = from; } /** * Returns the JID the stanza comes from. * @return The origin of the stanza. */ const JID& from() const { return m_from; } /** * Returns the receiver of the stanza. * @return The stanza's destination. */ const JID& to() const { return m_to; } /** * Returns the id of the stanza, if set. * @return The ID of the stanza. */ const std::string& id() const { return m_id; } /** * A convenience function that returns the stanza error condition, if any. * @return The stanza error condition, may be 0. */ const Error* error() const; /** * Retrieves the value of the xml:lang attribute of this stanza. * Default is 'en'. * @return The stanza's default language. */ const std::string& xmlLang() const { return m_xmllang; } /** * Use this function to add a StanzaExtension to this Stanza. * @param se The StanzaExtension to add. * @note The Stanza will become the owner of the StanzaExtension and * will take care of deletion. * @since 0.9 */ void addExtension( const StanzaExtension* se ); /** * Finds a StanzaExtension of a particular type. * @param type StanzaExtensionType to search for. * @return A pointer to the StanzaExtension, or 0 if none was found. */ const StanzaExtension* findExtension( int type ) const; /** * Finds a StanzaExtension of a particular type. * Example: * @code * const MyExtension* c = presence.findExtension( ExtMyExt ); * @endcode * @param type The extension type to look for. * @return The static_cast' type, or 0 if none was found. */ template< class T > inline const T* findExtension( int type ) const { return static_cast( findExtension( type ) ); } /** * Returns the list of the Stanza's extensions. * @return The list of the Stanza's extensions. */ const StanzaExtensionList& extensions() const { return m_extensionList; } /** * Removes (deletes) all the stanza's extensions. */ void removeExtensions(); /** * Creates a Tag representation of the Stanza. The Tag is completely * independent of the Stanza and will not be updated when the Stanza * is modified. * @return A pointer to a Tag representation. It is the job of the * caller to delete the Tag. */ virtual Tag* tag() const = 0; protected: /** * Creates a new Stanza, taking from and to addresses from the given Tag. * @param tag The Tag to create the Stanza from. * @since 1.0 */ Stanza( Tag* tag ); /** * Creates a new Stanza object and initializes the receiver's JID. * @param to The receipient of the Stanza. * @since 1.0 */ Stanza( const JID& to ); StanzaExtensionList m_extensionList; std::string m_id; std::string m_xmllang; JID m_from; JID m_to; static const std::string& findLang( const StringMap* map, const std::string& defaultData, const std::string& lang ); static void setLang( StringMap** map, std::string& defaultLang, const Tag* tag ); static void setLang( StringMap** map, std::string& defaultLang, const std::string& data, const std::string& xmllang ); static void getLangs( const StringMap* map, const std::string& defaultData, const std::string& name, Tag* tag ); private: Stanza( const Stanza& ); }; } #endif // STANZA_H__ qutim-0.2.0/plugins/jabber/libs/gloox/COPYING0000644000175000017500000000007411273064557022351 0ustar euroelessareuroelessarsee the file LICENSE for the license of this distribution. qutim-0.2.0/plugins/jabber/libs/gloox/mucroom.h0000644000175000017500000011457611273054312023151 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef MUCROOM_H__ #define MUCROOM_H__ #include "discohandler.h" #include "disconodehandler.h" #include "dataform.h" #include "presencehandler.h" #include "iqhandler.h" #include "messagehandler.h" #include "mucroomhandler.h" #include "mucroomconfighandler.h" #include "jid.h" #include "stanzaextension.h" #include namespace gloox { class ClientBase; class MUCMessageSession; class Message; /** * @brief This is an implementation of XEP-0045 (Multi-User Chat). * * Usage is pretty simple: * * Derrive an object from MUCRoomHandler and implement its virtuals: * @code * class MyClass : public MUCRoomHandler * { * ... * }; * @endcode * * Then create a new MUCRoom object and pass it a valid ClientBase, the desired full room JID, * your MUCRoomHandler-derived object, and an optional MUCRoomConfigHandler-derived object. * @code * void MyOtherClass::joinRoom( const std::string& room, const std::string& service, * const std::string& nick ) * { * MyClass* myHandler = new MyClass(...); * JID roomJID( room + "@" + service + "/" + nick ); * m_room = new MUCRoom( m_clientbase, roomJID, myHandler, 0 ); * m_room->join(); * } * @endcode * * When joining the room was successful, the various MUCRoomHandler functions will start to * be called. If joining was not successful, MUCRoomHandler::handleMUCError() will be called, * giving a hint at the reason for the failure. * * To set up your own room, or to configure an existing room, you should also derive a * class from MUCRoomConfigHandler and register it with the MUCRoom (either by using it * with MUCRoom's constructor, or by calling registerMUCRoomConfigHandler()). * * To quickly create an instant room, see InstantMUCRoom. * * To quickly create an instant room to turn a one-to-one chat into a multi-user chat, * see UniqueMUCRoom. * * To send a private message to a room participant, use * @link MessageSession gloox::MessageSession @endlink with the participant's full room JID * (room\@service/nick). * * XEP version: 1.21 * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API MUCRoom : private DiscoHandler, private PresenceHandler, public IqHandler, private MessageHandler, private DiscoNodeHandler { public: /** * Allowable history request types. To disable sending of history, use any value except * HistoryUnknown and specify a zero-length time span (using setRequestHistory()). */ enum HistoryRequestType { HistoryMaxChars, /**< Limit the total number of characters in the history to "X" * (where the character count is the characters of the complete * XML stanzas, not only their XML character data). */ HistoryMaxStanzas, /**< Limit the total number of messages in the history to "X". */ HistorySeconds, /**< Send only the messages received in the last "X" seconds. */ HistorySince, /**< Send only the messages received since the datetime specified * (which MUST conform to the DateTime profile specified in Jabber * Date and Time Profiles (XEP-0082)). */ HistoryUnknown /**< It is up to the service to decide how much history to send. * This is the default. */ }; /** * Available operations. */ enum MUCUserOperation { OpNone, /**< No operation. */ OpInviteTo, /**< Invitation being sent to soemone. */ OpInviteFrom, /**< Invitation received from someone. */ OpDeclineTo, /**< Someone's invitation declined. */ OpDeclineFrom /**< Someone declined an invitation. */ }; /** * @brief An abstraction of a MUC query. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 1.0 */ class MUC : public StanzaExtension { public: /** * Creates a new MUC object. * @param password An optional room password. * @param historyType The type of room history to request. * @param historySince A string describing the amount of room history. * @param historyValue The amount of requested room history. */ MUC( const std::string& password, HistoryRequestType historyType = HistoryUnknown, const std::string& historySince = EmptyString, int historyValue = 0 ); /** * Constructs a new MUCUser object from the given Tag. * @param tag The Tag to parse. */ MUC( const Tag* tag = 0 ); /** * Virtual destructor. */ virtual ~MUC(); /** * Returns a pointer to the current password, or 0. * @return A pointer to the current password, or 0. */ const std::string* password() const { return m_password; } /** * Returns a pointer to the description of the amount of room history requested. * @return A pointer to the description of the amount of room history requested. */ const std::string* historySince() const { return m_historySince; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new MUC( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { MUC* m = new MUC(); m->m_password = m_password ? new std::string( *m_password ) : 0; m->m_historySince = m_historySince ? new std::string( *m_historySince ) : 0; m->m_historyType = m_historyType; m->m_historyValue = m_historyValue; return m; } private: std::string* m_password; std::string* m_historySince; HistoryRequestType m_historyType; int m_historyValue; }; /** * @brief An abstraction of a MUC user query. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 1.0 */ class MUCUser : public StanzaExtension { public: /** * Constructor. * @param operation An operation to perform. * @param to The recipient. * @param reason The reason for the operation. * @param thread If this is an invitation, and if the invitation is part of * a transformation of a one-to-one chat to a MUC, include the one-to-one chat's * thread ID here. Defaults to the empty string (i.e. not a continuation). */ MUCUser( MUCUserOperation operation, const std::string& to, const std::string& reason, const std::string& thread = EmptyString ); /** * Constructs a new MUCUser object from the given Tag. * @param tag The Tag to parse. */ MUCUser( const Tag* tag = 0 ); /** * Virtual destructor. */ virtual ~MUCUser(); /** * Returns the current room flags. * @return The current room flags. */ int flags() const { return m_flags; } /** * Returns the user's current room affiliation. * @return The user's current room affiliation. */ MUCRoomAffiliation affiliation() const { return m_affiliation; } /** * Returns the user's current room role. * @return The user's current room role. */ MUCRoomRole role() const { return m_role; } /** * */ const std::string* jid() const { return m_jid; } /** * */ const std::string* actor() const { return m_actor; } /** * */ const std::string* password() const { return m_password; } /** * */ const std::string* thread() const { return m_thread; } /** * */ const std::string* reason() const { return m_reason; } /** * */ const std::string* newNick() const { return m_newNick; } /** * Returns an alternate venue, if set. * @return An alternate venue, if set. */ const std::string* alternate() const { return m_alternate; } /** * Whether or not the 'continue' flag is set. * @return Whether or not the 'continue' flag is set. */ bool continued() const { return m_continue; } /** * Returns the current operation. * @return The current operation. */ MUCUserOperation operation() const { return m_operation; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new MUCUser( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { MUCUser* m = new MUCUser(); m->m_affiliation = m_affiliation; m->m_role = m_role; m->m_jid = m_jid ? new std::string( *m_jid ) : 0; m->m_actor = m_actor ? new std::string( *m_actor ) : 0; m->m_thread = m_thread ? new std::string( *m_thread ) : 0; m->m_reason = m_reason ? new std::string( *m_reason ) : 0; m->m_newNick = m_newNick ? new std::string( *m_newNick ) : 0; m->m_password = m_password ? new std::string( *m_password ) : 0; m->m_alternate = m_alternate ? new std::string( *m_alternate ) : 0; m->m_operation = m_operation; m->m_flags = m_flags; m->m_del = m_del; m->m_continue = m_continue; return m; } private: static MUCRoomAffiliation getEnumAffiliation( const std::string& affiliation ); static MUCRoomRole getEnumRole( const std::string& role ); MUCRoomAffiliation m_affiliation; MUCRoomRole m_role; std::string* m_jid; std::string* m_actor; std::string* m_thread; std::string* m_reason; std::string* m_newNick; std::string* m_password; std::string* m_alternate; MUCUserOperation m_operation; int m_flags; bool m_del; bool m_continue; }; /** * Creates a new abstraction of a Multi-User Chat room. The room is not joined automatically. * Use join() to join the room, use leave() to leave it. * @param parent The ClientBase object to use for the communication. * @param nick The room's name and service plus the desired nickname in the form * room\@service/nick. * @param mrh The MUCRoomHandler that will listen to room events. May be 0 and may be specified * later using registerMUCRoomHandler(). However, without one, MUC is no joy. * @param mrch The MUCRoomConfigHandler that will listen to room config result. Defaults to 0 * initially. However, at the latest you need one when you create a new room which is not an * instant room. You can set a MUCRoomConfigHandler using registerMUCRoomConfigHandler(). */ MUCRoom( ClientBase* parent, const JID& nick, MUCRoomHandler* mrh, MUCRoomConfigHandler* mrch = 0 ); /** * Virtual Destructor. */ virtual ~MUCRoom(); /** * Use this function to set a password to use when joining a (password protected) * room. * @param password The password to use for this room. * @note This function does not password-protect a room. */ void setPassword( const std::string& password ) { m_password = password; } /** * A convenience function that returns the room's name. * @return The room's name. */ const std::string name() const { return m_nick.username(); } /** * A convenience function that returns the name/address of the MUC service the room is running on * (e.g., conference.jabber.org). * @return The MUC service's name/address. */ const std::string service() const { return m_nick.server(); } /** * A convenience function that returns the user's nickname in the room. * @return The user's nickname. */ const std::string nick() const { return m_nick.resource(); } /** * Join this room. * @param type The presence to join with, defaults to Available. * @param status The presence's optional status text. * @param priority The presence's optional priority, defaults to 0. * ClientBase will automatically include the default Presence extensions added using * @link gloox::ClientBase::addPresenceExtension() ClientBase::addPresenceExtension() @endlink. */ virtual void join( Presence::PresenceType type = Presence::Available, const std::string& status = EmptyString, int priority = 0 ); /** * Leave this room. * @param msg An optional msg indicating the reason for leaving the room. Default: empty. */ void leave( const std::string& msg = EmptyString ); /** * Sends a chat message to the room. * @param message The message to send. */ void send( const std::string& message ); /** * Sets the subject of the room to the given string. * The MUC service may decline the request to set a new subject. You should * not assume the subject was set successfully util it is acknowledged via the MUCRoomHandler. * @param subject The new subject. */ void setSubject( const std::string& subject ); /** * Returns the user's current affiliation with this room. * @return The user's current affiliation. */ MUCRoomAffiliation affiliation() const { return m_affiliation; } /** * Returns the user's current role in this room. * @return The user's current role. */ MUCRoomRole role() const { return m_role; } /** * Use this function to change the user's nickname in the room. * The MUC service may decline the request to set a new nickname. You should not assume * the nick change was successful until it is acknowledged via the MUCRoomHandler. * @param nick The user's new nickname. */ void setNick( const std::string& nick ); /** * Use this function to set the user's presence in this room. It is not possible to * use Unavailable with this function. * @param presence The user's new presence. * @param msg An optional status message. Default: empty. */ void setPresence( Presence::PresenceType presence, const std::string& msg = EmptyString ); /** * Use this function to invite another user to this room. * @param invitee The (bare) JID of the user to invite. * @param reason The user-supplied reason for the invitation. * @param thread If this invitation is part of a transformation of a * one-to-one chat to a MUC, include the one-to-one chat's thread ID here. Defaults * to the empty string (i.e. not a continuation). */ void invite( const JID& invitee, const std::string& reason, const std::string& thread = EmptyString ); /** * Use this function to request basic room info, possibly prior to joining it. * Results are announced using the MUCRoomHandler. */ void getRoomInfo(); /** * Use this function to request information about the current room occupants, * possibly prior to joining it. The room ay be configured not to disclose such * information. * Results are announced using the MUCRoomHandler. */ void getRoomItems(); /** * The MUC spec enables other entities to discover via Service Discovery which rooms * an entity is in. By default, gloox does not publish such info for privacy reasons. * This function can be used to enable publishing the info for @b this room. * @param publish Whether to enable other entities to discover the user's presence in * @b this room. * @param publishNick Whether to publish the nickname used in the room. This parameter * is ignored if @c publish is @b false. */ void setPublish( bool publish, bool publishNick ); /** * Use this function to register a (new) MUCRoomHandler with this room. There can be only one * MUCRoomHandler per room at any one time. * @param mrl The MUCRoomHandler to register. */ void registerMUCRoomHandler( MUCRoomHandler* mrl ) { m_roomHandler = mrl; } /** * Use this function to remove the registered MUCRoomHandler. */ void removeMUCRoomHandler() { m_roomHandler = 0; } /** * Use this function to register a (new) MUCRoomConfigHandler with this room. There can * be only one MUCRoomConfigHandler per room at any one time. * @param mrch The MUCRoomConfigHandler to register. */ void registerMUCRoomConfigHandler( MUCRoomConfigHandler* mrch ) { m_roomConfigHandler = mrch; } /** * Use this function to remove the registered MUCRoomConfigHandler. */ void removeMUCRoomConfigHandler() { m_roomConfigHandler = 0; } /** * Use this function to add history to a (newly created) room. The use case from the MUC spec * is to add history to a room that was created in the process of a transformation of a * one-to-one chat to a multi-user chat. * @param message A reason for declining the invitation. * @param from The JID of the original author of this part of the history. * @param stamp The datetime of the original message in the format: 20061224T12:15:23Z * @note You should not attempt to use this function before * MUCRoomHandler::handleMUCParticipantPresence() was called for the first time. */ void addHistory( const std::string& message, const JID& from, const std::string& stamp ); /** * Use this function to request room history. Set @c value to zero to disable the room * history request. You should not use HistorySince type with this function. * History is sent only once after entering a room. You should use this function before joining. * @param value Represents either the number of requested characters, the number of requested * message stanzas, or the number seconds, depending on the value of @c type. * @param type * @note If this function is not used to request a specific amount of room history, it is up * to the MUC service to decide how much history to send. */ void setRequestHistory( int value, HistoryRequestType type ); /** * Use this function to request room history since specific datetime. * History is sent only once after entering a room. You should use this function before joining. * @param since A string representing a datetime conforming to the DateTime profile specified * in Jabber Date and Time Profiles (XEP-0082). * @note If this function is not used to request a specific amount of room history, it is up * to the MUC service to decide how much history to send. */ void setRequestHistory( const std::string& since ); /** * This static function allows to formally decline a MUC * invitation received via the MUCInvitationListener. * @param room The JID of the room the invitation came from. * @param invitor The JID of the invitor. * @param reason An optional reason for the decline. * @return A pointer to a Message. You will have to send (and * possibly delete) this Message manually. */ static Message* declineInvitation( const JID& room, const JID& invitor, const std::string& reason = EmptyString); /** * It is not possible for a visitor to speak in a moderated room. Use this function to request * voice from the moderator. */ void requestVoice(); /** * Use this function to kick a user from the room. * Depending on service and/or room configuration and role/affiliation * this may not always succeed. Usually, a role of 'moderator' is necessary. * @note This is a convenience function. It directly uses setRole() with a MUCRoomRole of RoleNone. * @param nick The nick of the user to be kicked. * @param reason An optional reason for the kick. */ void kick( const std::string& nick, const std::string& reason = EmptyString ) { setRole( nick, RoleNone, reason ); } /** * Use this function to ban a user from the room. * Depending on service and/or room configuration and role/affiliation * this may not always succeed. Usually, an affiliation of admin is necessary. * @note This is a convenience function. It directly uses setAffiliation() with a MUCRoomAffiliation * of RoleOutcast. * @param nick The nick of the user to be banned. * @param reason An optional reason for the ban. */ void ban( const std::string& nick, const std::string& reason ) { setAffiliation( nick, AffiliationOutcast, reason ); } /** * Use this function to grant voice to a user in a moderated room. * Depending on service and/or room configuration and role/affiliation * this may not always succeed. Usually, a role of 'moderator' is necessary. * @note This is a convenience function. It directly uses setRole() with a MUCRoomRole * of RoleParticipant. * @param nick The nick of the user to be granted voice. * @param reason An optional reason for the grant. */ void grantVoice( const std::string& nick, const std::string& reason ) { setRole( nick, RoleParticipant, reason ); } /** * Use this function to create a Tag that approves a voice request or registration request * delivered via MUCRoomConfigHandler::handleMUCVoiceRequest(). You will need to send this * Tag off manually using Client/ClientBase. * @param room The room's JID. This is needed because you can use this function outside of * room context (e.g, if the admin is not in the room). * @param df The filled-in DataForm from the voice/registration request. The form object * will be owned by the returned Message. */ static Message* createDataForm( const JID& room, const DataForm* df ); /** * Use this function to revoke voice from a user in a moderated room. * Depending on service and/or room configuration and role/affiliation * this may not always succeed. Usually, a role of 'moderator' is necessary. * @note This is a convenience function. It directly uses setRole() with a MUCRoomRole * of RoleVisitor. * @param nick The nick of the user. * @param reason An optional reason for the revoke. */ void revokeVoice( const std::string& nick, const std::string& reason ) { setRole( nick, RoleVisitor, reason ); } /** * Use this function to change the role of a user in the room. * Usually, at least moderator privileges are required to succeed. * @param nick The nick of the user who's role shall be modfified. * @param role The user's new role in the room. * @param reason An optional reason for the role change. */ void setRole( const std::string& nick, MUCRoomRole role, const std::string& reason = EmptyString ); /** * Use this function to change the affiliation of a user in the room. * Usually, at least admin privileges are required to succeed. * @param nick The nick of the user who's affiliation shall be modfified. * @param affiliation The user's new affiliation in the room. * @param reason An optional reason for the affiliation change. */ void setAffiliation( const std::string& nick, MUCRoomAffiliation affiliation, const std::string& reason ); /** * Use this function to request the room's configuration form. * It can be used either after MUCRoomHandler::handleMUCRoomCreation() was called, * or at any later time. * * Usually owner privileges are required for this action to * succeed. * * Use setRoomConfig() to send the modified room config back. */ void requestRoomConfig(); /** * After requesting (using requestRoomConfig()) and * editing/filling in the room's configuration, * use this function to send it back to the server. * @param form The form to send. The function will delete the * object pointed to. */ void setRoomConfig( DataForm* form ); /** * Use this function to accept the room's default configuration. This function is useful * only after MUCRoomHandler::handleMUCRoomCreation() was called. This is a NOOP at * any other time. */ void acknowledgeInstantRoom() { instantRoom( CreateInstantRoom ); } /** * Use this function to cancel the creation of a room. This function is useful only after * MUCRoomHandler::handleMUCRoomCreation() was called. This is a NOOP at any other time. */ void cancelRoomCreation() { instantRoom( CancelRoomCreation ); } /** * Use this function to destroy the room. All the occupants will be removed from the room. * @param reason An optional reason for the destruction. * @param alternate A pointer to a JID of an alternate venue (e.g., another MUC room). * May be 0. * @param password An optional password for the alternate venue. * * Usually owner privileges are required for this action to succeed. */ void destroy( const std::string& reason = EmptyString, const JID& alternate = JID(), const std::string& password = EmptyString ); /** * Use this function to request a particluar list of room occupants. * @note There must be a MUCRoomConfigHandler registered with this room for this * function to be executed. * @param operation The following types of lists are available: * @li Voice List: List of people having voice in a moderated room. Use RequestVoiceList. * @li Members List: List of members of a room. Use RequestMemberList. * @li Ban List: List of people banned from the room. Use RequestBanList. * @li Moderator List: List of room moderators. Use RequestModeratorList. * @li Admin List: List of room admins. Use RequestAdminList. * @li Owner List: List of room owners. Use RequestOwnerList. * Any other value of @c operation will be ignored. */ void requestList( MUCOperation operation ); /** * Use this function to store a (modified) list for the room. * @param items The list of items. Example:
* You want to set the Voice List. The privilege of Voice refers to the role of Participant. * Furthermore, you only store the delta of the original (Voice)List. (Optionally, you could * probably store the whole list, however, remeber to include those items that were modified, * too.) * You want to, say, add one occupant to the Voice List, and remove another one. * Therefore you store: * @li GuyOne, role participant -- this guy gets voice granted, he/she is now a participant. * @li GuyTwo, role visitor -- this guy gets voice revoked, he/she is now a mere visitor * (Visitor is the Role "below" Participant in the privileges hierarchy). * * For operations modifying Roles, you should specifiy only the new Role in the MUCListItem * structure, for those modifying Affiliations, you should only specify the new Affiliation, * respectively. The nickname is mandatory in the MUCListItem structure. Items without nickname * will be ignored. * * You may specify a reason for the role/affiliation change in the MUCListItem structure. * You should not specify a JID in the MUCListItem structure, it will be ignored. * * @param operation See requestList() for a list of available list types. Any other value will * be ignored. */ void storeList( const MUCListItemList items, MUCOperation operation ); /** * Returns the currently known room flags. * @return ORed MUCRoomFlag's describing the current room configuration. */ int flags() const { return m_flags; } // reimplemented from DiscoHandler virtual void handleDiscoInfo( const JID& from, const Disco::Info& info, int context ); // reimplemented from DiscoHandler // reimplemented from DiscoHandler virtual void handleDiscoItems( const JID& from, const Disco::Items& items, int context ); // reimplemented from DiscoHandler virtual void handleDiscoError( const JID& from, const Error* error, int context ); // reimplemented from PresenceHandler virtual void handlePresence( const Presence& presence ); // reimplemented from MessageHandler virtual void handleMessage( const Message& msg, MessageSession* session = 0 ); // reimplemented from IqHandler virtual bool handleIq( const IQ& iq ) { (void)iq; return false; } // reimplemented from IqHandler virtual void handleIqID( const IQ& iq, int context ); // reimplemented from DiscoNodeHandler virtual StringList handleDiscoNodeFeatures( const JID& from, const std::string& node ); // reimplemented from DiscoNodeHandler virtual Disco::IdentityList handleDiscoNodeIdentities( const JID& from, const std::string& node ); // reimplemented from DiscoNodeHandler virtual Disco::ItemList handleDiscoNodeItems( const JID& from, const JID& to, const std::string& node = EmptyString ); protected: /** * Sets the room's name. * @param name The room's name. */ void setName( const std::string& name ) { m_nick.setUsername( name ); } /** * Acknowledges instant room creation w/o a call to the MUCRoomConfigHandler. * @return Whether an instant room is being created. */ virtual bool instantRoomHook() const { return false; } ClientBase* m_parent; JID m_nick; bool m_joined; private: #ifdef MUCROOM_TEST public: #endif /** * @brief An abstraction of a MUC owner query. * * @author Jakob Schroeter * @since 1.0 */ class MUCOwner : public StanzaExtension { public: /** * Describes available query types for the muc#owner namespace. */ enum QueryType { TypeCreate, /**< Create a room. */ TypeRequestConfig, /**< Request room config. */ TypeSendConfig, /**< Submit configuration form to MUC service. */ TypeCancelConfig, /**< Cancel room configuration. */ TypeInstantRoom, /**< Request an instant room */ TypeDestroy, /**< Destroy the room. */ TypeIncomingTag /**< The Query has been created from an incoming Tag. */ }; /** * Creates a new MUCOwner object for the given query, possibly including * the given DataForm. * @param type The intended query type. * @param form An optional pointer to a DataForm. Necessity depends on the query type. */ MUCOwner( QueryType type, DataForm* form = 0 ); /** * Creates a new query that destroys the current room. * @param alternate An optional alternate discussion venue. * @param reason An optional reason for the room destruction. * @param password An optional password for the new room. */ MUCOwner( const JID& alternate = JID(), const std::string& reason = EmptyString, const std::string& password = EmptyString); /** * Creates a new MUCOwner object from the given Tag. * @param tag A Tag to parse. */ MUCOwner( const Tag* tag ); /** * Virtual destructor. */ virtual ~MUCOwner(); /** * Returns a pointer to a DataForm, included in the MUCOwner object. May be 0. * @return A pointer to a configuration form. */ const DataForm* form() const { return m_form; } // reimplemented from StanzaExtension const std::string& filterString() const; // reimplemented from StanzaExtension StanzaExtension* newInstance( const Tag* tag ) const { return new MUCOwner( tag ); } // reimplemented from StanzaExtension Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { MUCOwner* m = new MUCOwner(); m->m_type = m_type; m->m_jid = m_jid; m->m_reason = m_reason; m->m_pwd = m_pwd; m->m_form = m_form ? new DataForm( *m_form ) : 0; return m; } private: QueryType m_type; JID m_jid; std::string m_reason; std::string m_pwd; DataForm* m_form; }; /** * @brief An abstraction of a MUC admin query. * * @author Jakob Schroeter * @since 1.0 */ class MUCAdmin : public StanzaExtension { public: /** * Creates a new object that can be used to change the role of a room participant. * @param role The participant's new role. * @param nick The participant's nick. * @param reason An optional reason for the role change. */ MUCAdmin( MUCRoomRole role, const std::string& nick, const std::string& reason = EmptyString ); /** * Creates a new object that can be used to change the affiliation of a room participant. * @param affiliation The participant's new affiliation. * @param nick The participant's nick. * @param reason An optional reason for the role change. */ MUCAdmin( MUCRoomAffiliation affiliation, const std::string& nick, const std::string& reason = EmptyString ); /** * Creates a new object that can be used to request or store a role/affiliation * list. * @param operation The MUCOperation to carry out. Only the Request* and Store* * operations are valid. Any other value will be ignored. * @param jids A list of bare JIDs. Only the JID member of the MUCListItem * structure should be set. The type of the list will be determined from the * @c operation parameter. */ MUCAdmin( MUCOperation operation, const MUCListItemList& jids = MUCListItemList() ); /** * Constructs a new MUCAdmin object from the given Tag. * @param tag The Tag to parse. */ MUCAdmin( const Tag* tag = 0 ); /** * Virtual destructor. */ virtual ~MUCAdmin(); /** * Returns the contained list of MUC items. * @return The contained list of MUC items. */ const MUCListItemList& list() const { return m_list; } // reimplemented from StanzaExtension const std::string& filterString() const; // reimplemented from StanzaExtension StanzaExtension* newInstance( const Tag* tag ) const { return new MUCAdmin( tag ); } // reimplemented from StanzaExtension Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new MUCAdmin( *this ); } private: MUCListItemList m_list; MUCRoomAffiliation m_affiliation; MUCRoomRole m_role; }; void handleIqResult( const IQ& iq, int context ); void handleIqError( const IQ& iq, int context ); void setNonAnonymous(); void setSemiAnonymous(); void setFullyAnonymous(); void acknowledgeRoomCreation(); void instantRoom( int context ); MUCRoomHandler* m_roomHandler; MUCRoomConfigHandler* m_roomConfigHandler; MUCMessageSession* m_session; typedef std::list ParticipantList; ParticipantList m_participants; std::string m_password; std::string m_newNick; MUCRoomAffiliation m_affiliation; MUCRoomRole m_role; HistoryRequestType m_historyType; std::string m_historySince; int m_historyValue; int m_flags; bool m_creationInProgress; bool m_configChanged; bool m_publishNick; bool m_publish; bool m_unique; }; } #endif // MUCROOM_H__ qutim-0.2.0/plugins/jabber/libs/gloox/delayeddelivery.h0000644000175000017500000000725711273054312024640 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef DELAYEDDELIVERY_H__ #define DELAYEDDELIVERY_H__ #include "gloox.h" #include "jid.h" #include "stanzaextension.h" #include namespace gloox { class Tag; /** * @brief This is an implementation of XEP-0203 (Delayed Delivery). * * The class also implements the deprecated XEP-0091 (Delayed Delivery) in a read-only fashion. * It understands both XEP formats for input, but any output will conform to XEP-0203. * * XEP Version: 0.1 * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API DelayedDelivery : public StanzaExtension { public: /** * Constructs a new object and fills it according to the parameters. * @param from The JID of the original sender or the entity that delayed the sending. * @param stamp The datetime stamp of the original send. * @param reason An optional natural language reason for the delay. */ DelayedDelivery( const JID& from, const std::string stamp, const std::string& reason = "" ); /** * Constructs a new object from the given Tag. * @param tag The Tag to parse. */ DelayedDelivery( const Tag* tag = 0 ); /** * Virtual Destructor. */ virtual ~DelayedDelivery(); /** * Returns the datetime when the stanza was originally sent. * The format MUST adhere to the dateTime format specified in XEP-0082 and MUST * be expressed in UTC. * @return The original datetime. */ const std::string& stamp() const { return m_stamp; } /** * Sets the original datetime. * @param stamp The original datetime. */ void setStamp( const std::string& stamp ) { m_stamp = stamp; } /** * Returns the JID of the original sender of the stanza or the entity that * delayed the sending. * The format MUST adhere to the dateTime format specified in XEP-0082 and MUST * be expressed in UTC. * @return The JID. */ const JID& from() const { return m_from; } /** * Sets the JID of the origianl sender or the entity that delayed the sending. * @param from The JID. */ void setFrom( const JID& from ) { m_from = from; } /** * Returns a natural language reason for the delay. * @return A natural language reason for the delay. */ const std::string& reason() const { return m_reason; } /** * Sets the reason for the delay. * @param reason The reason for the delay. */ void setReason( const std::string& reason ) { m_reason = reason; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new DelayedDelivery( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new DelayedDelivery( *this ); } private: JID m_from; std::string m_stamp; std::string m_reason; bool m_valid; }; } #endif // DELAYEDDELIVERY_H__ qutim-0.2.0/plugins/jabber/libs/gloox/gpgencrypted.cpp0000644000175000017500000000257011273054312024504 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "gpgencrypted.h" #include "tag.h" namespace gloox { GPGEncrypted::GPGEncrypted( const std::string& encrypted ) : StanzaExtension( ExtGPGEncrypted ), m_encrypted( encrypted ), m_valid( true ) { if( m_encrypted.empty() ) m_valid = false; } GPGEncrypted::GPGEncrypted( const Tag* tag ) : StanzaExtension( ExtGPGEncrypted ), m_valid( false ) { if( tag && tag->name() == "x" && tag->hasAttribute( XMLNS, XMLNS_X_GPGENCRYPTED ) ) { m_valid = true; m_encrypted = tag->cdata(); } } GPGEncrypted::~GPGEncrypted() { } const std::string& GPGEncrypted::filterString() const { static const std::string filter = "/message/x[@xmlns='" + XMLNS_X_GPGENCRYPTED + "']"; return filter; } Tag* GPGEncrypted::tag() const { if( !m_valid ) return 0; Tag* x = new Tag( "x", m_encrypted ); x->addAttribute( XMLNS, XMLNS_X_GPGENCRYPTED ); return x; } } qutim-0.2.0/plugins/jabber/libs/gloox/dns.cpp0000644000175000017500000003241311273054312022574 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "config.h" #include "gloox.h" #include "dns.h" #include "util.h" #ifndef _WIN32_WCE # include #endif #include #if ( !defined( _WIN32 ) && !defined( _WIN32_WCE ) ) || defined( __SYMBIAN32__ ) # include # include # include # include # include # include # include # include # include #endif #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) # include #elif defined( _WIN32_WCE ) # include #endif #ifdef HAVE_WINDNS_H # include #endif #define SRV_COST (RRFIXEDSZ+0) #define SRV_WEIGHT (RRFIXEDSZ+2) #define SRV_PORT (RRFIXEDSZ+4) #define SRV_SERVER (RRFIXEDSZ+6) #define SRV_FIXEDSZ (RRFIXEDSZ+6) #ifndef T_SRV # define T_SRV 33 #endif // mingw #ifndef DNS_TYPE_SRV # define DNS_TYPE_SRV 33 #endif #ifndef NS_CMPRSFLGS # define NS_CMPRSFLGS 0xc0 #endif #ifndef C_IN # define C_IN 1 #endif #ifndef INVALID_SOCKET # define INVALID_SOCKET -1 #endif #define XMPP_PORT 5222 namespace gloox { #if defined( HAVE_RES_QUERYDOMAIN ) && defined( HAVE_DN_SKIPNAME ) && defined( HAVE_RES_QUERY ) DNS::HostMap DNS::resolve( const std::string& service, const std::string& proto, const std::string& domain, const LogSink& logInstance ) { buffer srvbuf; bool error = false; const std::string dname = "_" + service + "._" + proto; if( !domain.empty() ) srvbuf.len = res_querydomain( dname.c_str(), const_cast( domain.c_str() ), C_IN, T_SRV, srvbuf.buf, NS_PACKETSZ ); else srvbuf.len = res_query( dname.c_str(), C_IN, T_SRV, srvbuf.buf, NS_PACKETSZ ); if( srvbuf.len < 0 ) return defaultHostMap( domain, logInstance ); HEADER* hdr = (HEADER*)srvbuf.buf; unsigned char* here = srvbuf.buf + NS_HFIXEDSZ; if( ( hdr->tc ) || ( srvbuf.len < NS_HFIXEDSZ ) ) error = true; if( hdr->rcode >= 1 && hdr->rcode <= 5 ) error = true; if( ntohs( hdr->ancount ) == 0 ) error = true; if( ntohs( hdr->ancount ) > NS_PACKETSZ ) error = true; int cnt; for( cnt = ntohs( hdr->qdcount ); cnt > 0; --cnt ) { int strlen = dn_skipname( here, srvbuf.buf + srvbuf.len ); here += strlen + NS_QFIXEDSZ; } unsigned char* srv[NS_PACKETSZ]; int srvnum = 0; for( cnt = ntohs( hdr->ancount ); cnt > 0; --cnt ) { int strlen = dn_skipname( here, srvbuf.buf + srvbuf.len ); here += strlen; srv[srvnum++] = here; here += SRV_FIXEDSZ; here += dn_skipname( here, srvbuf.buf + srvbuf.len ); } if( error ) { return defaultHostMap( domain, logInstance ); } // (q)sort here HostMap servers; for( cnt = 0; cnt < srvnum; ++cnt ) { char srvname[NS_MAXDNAME]; srvname[0] = '\0'; if( dn_expand( srvbuf.buf, srvbuf.buf + NS_PACKETSZ, srv[cnt] + SRV_SERVER, srvname, NS_MAXDNAME ) < 0 || !(*srvname) ) continue; unsigned char* c = srv[cnt] + SRV_PORT; servers.insert( std::make_pair( (char*)srvname, ntohs( c[1] << 8 | c[0] ) ) ); } if( !servers.size() ) return defaultHostMap( domain, logInstance ); return servers; } #elif defined( _WIN32 ) && defined( HAVE_WINDNS_H ) DNS::HostMap DNS::resolve( const std::string& service, const std::string& proto, const std::string& domain, const LogSink& logInstance ) { const std::string dname = "_" + service + "._" + proto + "." + domain; bool error = false; DNS::HostMap servers; DNS_RECORD* pRecord = NULL; DNS_STATUS status = DnsQuery_UTF8( dname.c_str(), DNS_TYPE_SRV, DNS_QUERY_STANDARD, NULL, &pRecord, NULL ); if( status == ERROR_SUCCESS ) { DNS_RECORD* pRec = pRecord; do { if( pRec->wType == DNS_TYPE_SRV ) { servers[pRec->Data.SRV.pNameTarget] = pRec->Data.SRV.wPort; } pRec = pRec->pNext; } while( pRec != NULL ); DnsRecordListFree( pRecord, DnsFreeRecordList ); } else { logInstance.warn( LogAreaClassDns, "DnsQuery_UTF8() failed: " + util::int2string( status ) ); error = true; } if( error || !servers.size() ) { servers = defaultHostMap( domain, logInstance ); } return servers; } #else DNS::HostMap DNS::resolve( const std::string& /*service*/, const std::string& /*proto*/, const std::string& domain, const LogSink& logInstance ) { logInstance.warn( LogAreaClassDns, "Notice: gloox does not support SRV " "records on this platform. Using A records instead." ); return defaultHostMap( domain, logInstance ); } #endif DNS::HostMap DNS::defaultHostMap( const std::string& domain, const LogSink& logInstance ) { HostMap server; logInstance.warn( LogAreaClassDns, "Notice: no SRV record found for " + domain + ", using default port." ); if( !domain.empty() ) server[domain] = XMPP_PORT; return server; } #ifdef HAVE_GETADDRINFO void DNS::resolve( struct addrinfo** res, const std::string& service, const std::string& proto, const std::string& domain, const LogSink& logInstance ) { logInstance.dbg( LogAreaClassDns, "Resolving: _" + service + "._" + proto + "." + domain ); struct addrinfo hints; if( proto == "tcp" ) hints.ai_socktype = SOCK_STREAM; else if( proto == "udp" ) hints.ai_socktype = SOCK_DGRAM; else { logInstance.err( LogAreaClassDns, "Unknown/Invalid protocol: " + proto ); } memset( &hints, '\0', sizeof( hints ) ); hints.ai_flags = AI_ADDRCONFIG | AI_CANONNAME; hints.ai_socktype = SOCK_STREAM; int e = getaddrinfo( domain.c_str(), service.c_str(), &hints, res ); if( e ) logInstance.err( LogAreaClassDns, "getaddrinfo() failed" ); } int DNS::connect( const std::string& host, const LogSink& logInstance ) { struct addrinfo* results = 0; resolve( &results, host, logInstance ); if( !results ) { logInstance.err( LogAreaClassDns, "host not found: " + host ); return -ConnDnsError; } struct addrinfo* runp = results; while( runp ) { int fd = DNS::connect( runp, logInstance ); if( fd >= 0 ) return fd; runp = runp->ai_next; } freeaddrinfo( results ); return -ConnConnectionRefused; } int DNS::connect( struct addrinfo* res, const LogSink& logInstance ) { if( !res ) return -1; int fd = getSocket( res->ai_family, res->ai_socktype, res->ai_protocol, logInstance ); if( fd < 0 ) return fd; if( ::connect( fd, res->ai_addr, res->ai_addrlen ) == 0 ) { char ip[NI_MAXHOST]; char port[NI_MAXSERV]; if( getnameinfo( res->ai_addr, sizeof( sockaddr ), ip, sizeof( ip ), port, sizeof( port ), NI_NUMERICHOST | NI_NUMERICSERV ) ) { //FIXME do we need to handle this? How? Can it actually happen at all? // printf( "could not get numeric hostname"); } if( res->ai_canonname ) logInstance.dbg( LogAreaClassDns, "Connecting to " + std::string( res->ai_canonname ) + " (" + ip + "), port " + port ); else logInstance.dbg( LogAreaClassDns, "Connecting to " + ip + ":" + port ); return fd; } std::string message = "connect() failed. " #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) "WSAGetLastError: " + util::int2string( ::WSAGetLastError() ); #else "errno: " + util::int2string( errno ); #endif logInstance.dbg( LogAreaClassDns, message ); closeSocket( fd, logInstance ); return -ConnConnectionRefused; } #else int DNS::connect( const std::string& host, const LogSink& logInstance ) { HostMap hosts = resolve( host, logInstance ); if( hosts.size() == 0 ) return -ConnDnsError; HostMap::const_iterator it = hosts.begin(); for( ; it != hosts.end(); ++it ) { int fd = DNS::connect( (*it).first, (*it).second, logInstance ); if( fd >= 0 ) return fd; } return -ConnConnectionRefused; } #endif int DNS::getSocket( const LogSink& logInstance ) { #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) WSADATA wsaData; if( WSAStartup( MAKEWORD( 1, 1 ), &wsaData ) != 0 ) { logInstance.dbg( LogAreaClassDns, "WSAStartup() failed. WSAGetLastError: " + util::int2string( ::WSAGetLastError() ) ); return -ConnDnsError; } #endif int protocol = IPPROTO_TCP; struct protoent* prot; if( ( prot = getprotobyname( "tcp" ) ) != 0 ) { protocol = prot->p_proto; } else { std::string message = "getprotobyname( \"tcp\" ) failed. " #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) "WSAGetLastError: " + util::int2string( ::WSAGetLastError() ) #else "errno: " + util::int2string( errno ); #endif + ". Falling back to IPPROTO_TCP: " + util::int2string( IPPROTO_TCP ); logInstance.dbg( LogAreaClassDns, message ); // Do not return an error. We'll fall back to IPPROTO_TCP. } return getSocket( PF_INET, SOCK_STREAM, protocol, logInstance ); } int DNS::getSocket( int af, int socktype, int proto, const LogSink& logInstance ) { #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) SOCKET fd; #else int fd; #endif if( ( fd = socket( af, socktype, proto ) ) == INVALID_SOCKET ) { std::string message = "getSocket( " + util::int2string( af ) + ", " + util::int2string( socktype ) + ", " + util::int2string( proto ) + " ) failed. " #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) "WSAGetLastError: " + util::int2string( ::WSAGetLastError() ); #else "errno: " + util::int2string( errno ); #endif logInstance.dbg( LogAreaClassDns, message ); cleanup( logInstance ); return -ConnConnectionRefused; } #ifdef HAVE_SETSOCKOPT int timeout = 5000; setsockopt( fd, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout, sizeof( timeout ) ); setsockopt( fd, SOL_SOCKET, SO_REUSEADDR, (char*)&timeout, sizeof( timeout ) ); #endif return (int)fd; } int DNS::connect( const std::string& host, int port, const LogSink& logInstance ) { int fd = getSocket( logInstance ); if( fd < 0 ) return fd; struct hostent* h; if( ( h = gethostbyname( host.c_str() ) ) == 0 ) { logInstance.dbg( LogAreaClassDns, "gethostbyname() failed for " + host + "." ); cleanup( logInstance ); return -ConnDnsError; } struct sockaddr_in target; target.sin_family = AF_INET; target.sin_port = htons( static_cast( port ) ); if( h->h_length != sizeof( struct in_addr ) ) { logInstance.dbg( LogAreaClassDns, "gethostbyname() returned unexpected structure." ); cleanup( logInstance ); return -ConnDnsError; } else { memcpy( &target.sin_addr, h->h_addr, sizeof( struct in_addr ) ); } logInstance.dbg( LogAreaClassDns, "Connecting to " + host + " (" + inet_ntoa( target.sin_addr ) + ":" + util::int2string( port ) + ")" ); memset( target.sin_zero, '\0', 8 ); if( ::connect( fd, (struct sockaddr *)&target, sizeof( struct sockaddr ) ) == 0 ) { logInstance.dbg( LogAreaClassDns, "Connected to " + host + " (" + inet_ntoa( target.sin_addr ) + ":" + util::int2string( port ) + ")" ); return fd; } std::string message = "Connection to " + host + " (" + inet_ntoa( target.sin_addr ) + ":" + util::int2string( port ) + ") failed. " #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) "WSAGetLastError: " + util::int2string( ::WSAGetLastError() ); #else "errno: " + util::int2string( errno ); #endif logInstance.dbg( LogAreaClassDns, message ); closeSocket( fd, logInstance ); return -ConnConnectionRefused; } void DNS::closeSocket( int fd, const LogSink& logInstance ) { #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) int result = closesocket( fd ); #else int result = close( fd ); #endif if( result != 0 ) { std::string message = "closeSocket() failed. " #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) "WSAGetLastError: " + util::int2string( ::WSAGetLastError() ); #else "errno: " + util::int2string( errno ); #endif logInstance.dbg( LogAreaClassDns, message ); } } void DNS::cleanup( const LogSink& logInstance ) { #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) if( WSACleanup() != 0 ) { logInstance.dbg( LogAreaClassDns, "WSACleanup() failed. WSAGetLastError: " + util::int2string( ::WSAGetLastError() ) ); } #else (void)logInstance; #endif } } qutim-0.2.0/plugins/jabber/libs/gloox/messagesession.cpp0000644000175000017500000000546511273054312025047 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "messagesession.h" #include "messagefilter.h" #include "messagehandler.h" #include "clientbase.h" #include "disco.h" #include "message.h" #include "util.h" namespace gloox { MessageSession::MessageSession( ClientBase* parent, const JID& jid, bool wantUpgrade, int types, bool honorTID ) : m_parent( parent ), m_target( jid ), m_messageHandler( 0 ), m_types( types ), m_wantUpgrade( wantUpgrade ), m_hadMessages( false ), m_honorThreadID( honorTID ) { if( m_parent ) m_parent->registerMessageSession( this ); } MessageSession::~MessageSession() { util::clearList( m_messageFilterList ); } void MessageSession::handleMessage( Message& msg ) { if( m_wantUpgrade && msg.from().bare() == m_target.full() ) setResource( msg.from().resource() ); if( !m_hadMessages ) { m_hadMessages = true; if( msg.thread().empty() ) { m_thread = "gloox" + m_parent->getID(); msg.setThread( m_thread ); } else m_thread = msg.thread(); } MessageFilterList::const_iterator it = m_messageFilterList.begin(); for( ; it != m_messageFilterList.end(); ++it ) (*it)->filter( msg ); if( m_messageHandler && !msg.body().empty() ) m_messageHandler->handleMessage( msg, this ); } void MessageSession::send( const std::string& message, const std::string& subject, const StanzaExtensionList& sel ) { if( !m_hadMessages ) { m_thread = "gloox" + m_parent->getID(); m_hadMessages = true; } Message m( Message::Chat, m_target.full(), message, subject, m_thread ); m.setID( m_parent->getID() ); decorate( m ); if( sel.size() ) { StanzaExtensionList::const_iterator it = sel.begin(); for( ; it != sel.end(); ++it ) m.addExtension( (*it)); } m_parent->send( m ); } void MessageSession::send( const Message& msg ) { m_parent->send( msg ); } void MessageSession::decorate( Message& msg ) { util::ForEach( m_messageFilterList, &MessageFilter::decorate, msg ); } void MessageSession::resetResource() { m_wantUpgrade = true; m_target.setResource( EmptyString ); } void MessageSession::setResource( const std::string& resource ) { m_target.setResource( resource ); } void MessageSession::disposeMessageFilter( MessageFilter* mf ) { removeMessageFilter( mf ); delete mf; } } qutim-0.2.0/plugins/jabber/libs/gloox/compressiondefault.h0000644000175000017500000000376311273054312025371 0ustar euroelessareuroelessar/* * Copyright (c) 2009 by Jakob Schroeter * This file is part of the gloox library. http://camaya.net/gloox * * This software is distributed under a license. The full license * agreement can be found in the file LICENSE in this distribution. * This software may not be copied, modified, sold or distributed * other than expressed in the named license agreement. * * This software is distributed without any warranty. */ #ifndef COMPRESSIONDEFAULT_H__ #define COMPRESSIONDEFAULT_H__ #include "compressionbase.h" namespace gloox { class CompressionDataHandler; /** * @brief This is an abstraction of the various Compression implementations. * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API CompressionDefault : public CompressionBase { public: /** * Supported ctypes. */ enum Method { MethodZlib = 1, /**< Zlib compression. */ MethodLZW = 2 /**< LZW compression. */ }; /** * Constructs a new compression wrapper. * @param cdh The CompressionDataHandler to handle de/compressed data. * @param method The desired compression method. */ CompressionDefault( CompressionDataHandler* cdh, Method method = MethodZlib ); /** * Virtual Destructor. */ virtual ~CompressionDefault(); /** * Returns an int holding the available compression types, ORed. * @return An int holding the available compression types, ORed. */ static int types(); // reimplemented from CompressionBase virtual bool init(); // reimplemented from CompressionBase virtual void compress( const std::string& data ); // reimplemented from CompressionBase virtual void decompress( const std::string& data ); // reimplemented from CompressionBase virtual void cleanup(); private: CompressionBase* m_impl; }; } #endif // COMPRESSIONDEFAULT_H__ qutim-0.2.0/plugins/jabber/libs/gloox/glooxversion.h0000644000175000017500000000072211273054312024211 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #define GLOOXVERSION 0x010000 qutim-0.2.0/plugins/jabber/libs/gloox/bytestreamhandler.h0000644000175000017500000000636411273054312025200 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef BYTESTREAMHANDLER_H__ #define BYTESTREAMHANDLER_H__ #include "macros.h" #include "jid.h" #include "bytestream.h" #include "iq.h" namespace gloox { /** * @brief A virtual interface that allows to receive new incoming Bytestream requests * from remote entities. * * You should not need to use this interface directly. * * See SIProfileFT on how to implement file transfer in general. * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API BytestreamHandler { public: /** * Virtual destructor. */ virtual ~BytestreamHandler() {} /** * Notifies the implementor of a new incoming bytestream request. * You have to call either * BytestreamManager::acceptBytestream() or * BytestreamManager::rejectBytestream(), to accept or reject the bytestream * request, respectively. * @param sid The bytestream's id, to be passed to BytestreamManager::acceptBytestream() * and BytestreamManager::rejectBytestream(), respectively. * @param from The remote initiator of the bytestream request. */ virtual void handleIncomingBytestreamRequest( const std::string& sid, const JID& from ) = 0; /** * Notifies the implementor of a new incoming bytestream. The bytestream is not yet ready to * send data. * To initialize the bytestream and to prepare it for data transfer, register a * BytestreamDataHandler with it and call its connect() method. * To not block your application while the data transfer lasts, you most * likely want to put the bytestream into its own thread or process (before calling connect() on it). * It is safe to do so without additional synchronization. * When you are finished using the bytestream, use SIProfileFT::dispose() to get rid of it. * @param bs The bytestream. */ virtual void handleIncomingBytestream( Bytestream* bs ) = 0; /** * Notifies the implementor of successful establishing of an outgoing bytestream request. * The stream has been accepted by the remote entity and is ready to send data. * The BytestreamHandler does @b not become the owner of the Bytestream object. * Use SIProfileFT::dispose() to get rid of the bytestream object after it has been closed. * @param bs The new bytestream. */ virtual void handleOutgoingBytestream( Bytestream* bs ) = 0; /** * Notifies the handler of errors occuring when a bytestream was requested. * For example, if the remote entity does not implement SOCKS5 bytestreams. * @param iq The error stanza. * @param sid The request's SID. */ virtual void handleBytestreamError( const IQ& iq, const std::string& sid ) = 0; }; } #endif // BYTESTREAMHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/dataformitem.h0000644000175000017500000000331711273054312024132 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef DATAFORMITEM_H__ #define DATAFORMITEM_H__ #include "dataformfieldcontainer.h" namespace gloox { /** * @brief An abstraction of an <item> element in a XEP-0004 Data Form of type result. * * There are some constraints regarding usage of this element you should be aware of. Check XEP-0004 * section 3.4. This class does not enforce correct usage at this point. * * @author Jakob Schroeter * @since 0.7 */ class GLOOX_API DataFormItem : public DataFormFieldContainer { public: /** * Creates an empty 'item' element you can add fields to. */ DataFormItem(); /** * Creates a 'item' element and fills it with the 'field' elements contained in the given Tag. * The Tag's root element must be a 'item' element. Its child element should be 'field' elements. * @param tag The tag to read the 'field' elements from. * @since 0.8.5 */ DataFormItem( const Tag* tag ); /** * Virtual destructor. */ virtual ~DataFormItem(); /** * Creates and returns a Tag representation of the current object. * @return A Tag representation of the current object. */ virtual Tag* tag() const; }; } #endif // DATAFORMITEM_H__ qutim-0.2.0/plugins/jabber/libs/gloox/connectiontlsserver.cpp0000644000175000017500000000241511273054312026120 0ustar euroelessareuroelessar/* * Copyright (c) 2009 by Jakob Schroeter * This file is part of the gloox library. http://camaya.net/gloox * * This software is distributed under a license. The full license * agreement can be found in the file LICENSE in this distribution. * This software may not be copied, modified, sold or distributed * other than expressed in the named license agreement. * * This software is distributed without any warranty. */ #include "connectiontlsserver.h" namespace gloox { ConnectionTLSServer::ConnectionTLSServer( ConnectionDataHandler* cdh, ConnectionBase* conn, const LogSink& log ) : ConnectionTLS( cdh, conn, log ) { } ConnectionTLSServer::ConnectionTLSServer( ConnectionBase* conn, const LogSink& log ) : ConnectionTLS( conn, log ) { } ConnectionTLSServer::~ConnectionTLSServer() { } TLSBase* ConnectionTLSServer::getTLSBase( TLSHandler* th, const std::string server ) { return new TLSDefault( th, server, TLSDefault::VerifyingServer ); } ConnectionBase* ConnectionTLSServer::newInstance() const { ConnectionBase* newConn = 0; if( m_connection ) newConn = m_connection->newInstance(); return new ConnectionTLSServer( m_handler, newConn, m_log ); } } qutim-0.2.0/plugins/jabber/libs/gloox/socks5bytestreamserver.cpp0000644000175000017500000001367311273054312026555 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "socks5bytestreamserver.h" #include "connectiontcpserver.h" #include "mutexguard.h" #include "util.h" namespace gloox { SOCKS5BytestreamServer::SOCKS5BytestreamServer( const LogSink& logInstance, int port, const std::string& ip ) : m_tcpServer( 0 ), m_logInstance( logInstance ), m_ip( ip ), m_port( port ) { m_tcpServer = new ConnectionTCPServer( this, m_logInstance, m_ip, m_port ); } SOCKS5BytestreamServer::~SOCKS5BytestreamServer() { if( m_tcpServer ) delete m_tcpServer; ConnectionMap::const_iterator it = m_connections.begin(); for( ; it != m_connections.end(); ++it ) delete (*it).first; } ConnectionError SOCKS5BytestreamServer::listen() { if( m_tcpServer ) return m_tcpServer->connect(); return ConnNotConnected; } ConnectionError SOCKS5BytestreamServer::recv( int timeout ) { if( !m_tcpServer ) return ConnNotConnected; ConnectionError ce = m_tcpServer->recv( timeout ); if( ce != ConnNoError ) return ce; ConnectionMap::const_iterator it = m_connections.begin(); ConnectionMap::const_iterator it2; while( it != m_connections.end() ) { it2 = it++; (*it2).first->recv( timeout ); } util::clearList( m_oldConnections ); return ConnNoError; } void SOCKS5BytestreamServer::stop() { if( m_tcpServer ) { m_tcpServer->disconnect(); m_tcpServer->cleanup(); } } int SOCKS5BytestreamServer::localPort() const { if( m_tcpServer ) return m_tcpServer->localPort(); return m_port; } const std::string SOCKS5BytestreamServer::localInterface() const { if( m_tcpServer ) return m_tcpServer->localInterface(); return m_ip; } ConnectionBase* SOCKS5BytestreamServer::getConnection( const std::string& hash ) { util::MutexGuard mg( m_mutex ); ConnectionMap::iterator it = m_connections.begin(); for( ; it != m_connections.end(); ++it ) { if( (*it).second.hash == hash ) { ConnectionBase* conn = (*it).first; conn->registerConnectionDataHandler( 0 ); m_connections.erase( it ); return conn; } } return 0; } void SOCKS5BytestreamServer::registerHash( const std::string& hash ) { util::MutexGuard mg( m_mutex ); m_hashes.push_back( hash ); } void SOCKS5BytestreamServer::removeHash( const std::string& hash ) { util::MutexGuard mg( m_mutex ); m_hashes.remove( hash ); } void SOCKS5BytestreamServer::handleIncomingConnection( ConnectionBase* /*server*/, ConnectionBase* connection ) { connection->registerConnectionDataHandler( this ); ConnectionInfo ci; ci.state = StateUnnegotiated; m_connections[connection] = ci; } void SOCKS5BytestreamServer::handleReceivedData( const ConnectionBase* connection, const std::string& data ) { ConnectionMap::iterator it = m_connections.find( const_cast( connection ) ); if( it == m_connections.end() ) return; switch( (*it).second.state ) { case StateDisconnected: (*it).first->disconnect(); break; case StateUnnegotiated: { char c[2]; c[0] = 0x05; c[1] = (char)(unsigned char)0xFF; (*it).second.state = StateDisconnected; if( data.length() >= 3 && data[0] == 0x05 ) { unsigned int sz = ( data.length() - 2 < static_cast( data[1] ) ) ? static_cast( data.length() - 2 ) : static_cast( data[1] ); for( unsigned int i = 2; i < sz + 2; ++i ) { if( data[i] == 0x00 ) { c[1] = 0x00; (*it).second.state = StateAuthAccepted; break; } } } (*it).first->send( std::string( c, 2 ) ); break; } case StateAuthmethodAccepted: // place to implement any future auth support break; case StateAuthAccepted: { std::string reply = data; if( reply.length() < 2 ) reply.resize( 2 ); reply[0] = 0x05; reply[1] = 0x01; // general SOCKS server failure (*it).second.state = StateDisconnected; if( data.length() == 47 && data[0] == 0x05 && data[1] == 0x01 && data[2] == 0x00 && data[3] == 0x03 && data[4] == 0x28 && data[45] == 0x00 && data[46] == 0x00 ) { const std::string hash = data.substr( 5, 40 ); HashMap::const_iterator ith = m_hashes.begin(); for( ; ith != m_hashes.end() && (*ith) != hash; ++ith ) ; if( ith != m_hashes.end() ) { reply[1] = 0x00; (*it).second.hash = hash; (*it).second.state = StateDestinationAccepted; } } (*it).first->send( reply ); break; } case StateDestinationAccepted: case StateActive: // should not happen break; } } void SOCKS5BytestreamServer::handleConnect( const ConnectionBase* /*connection*/ ) { // should never happen, TCP connection is already established } void SOCKS5BytestreamServer::handleDisconnect( const ConnectionBase* connection, ConnectionError /*reason*/ ) { m_connections.erase( const_cast( connection ) ); m_oldConnections.push_back( connection ); } } qutim-0.2.0/plugins/jabber/libs/gloox/vcardupdate.h0000644000175000017500000000435011273054312023756 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef VCARDUPDATE_H__ #define VCARDUPDATE_H__ #include "gloox.h" #include "stanzaextension.h" #include namespace gloox { class Tag; /** * @brief This is an abstraction of a vcard-temp:x:update namespace element, as used in XEP-0153 * (vCard-Based Avatars). * * XEP version: 1.0 * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API VCardUpdate : public StanzaExtension { public: /** * Constructs an empty VCardUpdate object. */ VCardUpdate(); /** * Constructs a new object with the given hash. * @param hash The current avatar's SHA hash. */ VCardUpdate( const std::string& hash ); /** * Constructs an VCardUpdate object from the given Tag. To be recognized properly, the Tag should * have a name of 'x' in the @c vcard-temp:x:update namespace. * @param tag The Tag to parse. */ VCardUpdate( const Tag* tag ); /** * Virtual destructor. */ virtual ~VCardUpdate(); /** * Returns the avatar's hash. * @return The avatar's SHA hash. */ const std::string& hash() const { return m_hash; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new VCardUpdate( tag ); } // reimplemented from StanzaExtension Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new VCardUpdate( *this ); } private: std::string m_hash; bool m_notReady; bool m_noImage; bool m_valid; }; } #endif // VCARDUPDATE_H__ qutim-0.2.0/plugins/jabber/libs/gloox/resource.h0000644000175000017500000000541711273054312023310 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef RESOURCE_H__ #define RESOURCE_H__ #include "presence.h" #include "util.h" #include namespace gloox { class Presence; /** * @brief Holds resource attributes. * * This holds the information of a single resource of a contact that is online. * * @author Jakob Schroeter * @since 0.8 */ class GLOOX_API Resource { friend class RosterItem; public: /** * Constructor. * @param priority The resource's priority. * @param msg The resource's status message. * @param presence The resource's presence status. */ Resource( int priority, const std::string& msg, Presence::PresenceType presence ) : m_priority( priority ), m_message( msg ), m_presence( presence ) {} /** * Virtual destrcutor. */ virtual ~Resource() { util::clearList( m_extensions ); } /** * Lets you fetch the resource's priority. * @return The resource's priority. */ int priority() const { return m_priority; } /** * Lets you fetch the resource's status message. * @return The resource's status message. */ const std::string& message() const { return m_message; } /** * Lets you fetch the resource's last presence. * @return The resource's presence status. */ Presence::PresenceType presence() const { return m_presence; } /** * Returns the StanzaExtensions that were sent with the last presence stanza * by the resource. * @return A list of stanza extensions. */ const StanzaExtensionList& extensions() const { return m_extensions; } private: void setPriority( int priority ) { m_priority = priority; } void setMessage( std::string message ) { m_message = message; } void setStatus( Presence::PresenceType presence ) { m_presence = presence; } void setExtensions( const StanzaExtensionList& exts ) { StanzaExtensionList::const_iterator it = exts.begin(); for( ; it != exts.end(); ++it ) { m_extensions.push_back( (*it)->clone() ); } } int m_priority; std::string m_message; std::string m_name; Presence::PresenceType m_presence; StanzaExtensionList m_extensions; }; } #endif // RESOURCE_H__ qutim-0.2.0/plugins/jabber/libs/gloox/logsink.h0000644000175000017500000000713711273054312023130 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef LOGSINK_H__ #define LOGSINK_H__ #include "gloox.h" #include "loghandler.h" #include // #include namespace gloox { /** * @brief An implementation of log sink and source. * * To log the output of your Client or Component, use ClientBase's * @link ClientBase::logInstance() logInstance() @endlink to get hold of the LogSink * object for that ClientBase. Register your LogHandler with that instance. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 0.8 */ class GLOOX_API LogSink { public: /** * Constructor. */ LogSink(); /** * Virtual destructor. */ virtual ~LogSink(); /** * Use this function to log a message with given LogLevel and LogIdentifier. * dbg(), warn(), and err() are alternative shortcuts. * @param level The severity of the logged event. * @param area The part of the program/library the message comes from. * @param message The actual log message. */ void log( LogLevel level, LogArea area, const std::string& message ) const; /** * Use this function to log a debug message with given LogIdentifier. * This is a convenience wrapper around log(). * @param area The part of the program/library the message comes from. * @param message The actual log message. */ void dbg( LogArea area, const std::string& message ) const { log( LogLevelDebug, area, message ); } /** * Use this function to log a warning message with given LogIdentifier. * This is a convenience wrapper around log(). * @param area The part of the program/library the message comes from. * @param message The actual log message. */ void warn( LogArea area, const std::string& message ) const { log( LogLevelWarning, area, message ); } /** * Use this function to log a error message with given LogIdentifier. * This is a convenience wrapper around log(). * @param area The part of the program/library the message comes from. * @param message The actual log message. */ void err( LogArea area, const std::string& message ) const { log( LogLevelError, area, message ); } /** * Registers @c lh as object that receives all debug messages of the specified type. * Suitable for logging to a file, etc. * @param level The LogLevel for this handler. * @param areas Bit-wise ORed LogAreas the LogHandler wants to be informed about. * @param lh The object to receive exchanged data. */ void registerLogHandler( LogLevel level, int areas, LogHandler* lh ); /** * Removes the given object from the list of log handlers. * @param lh The object to remove from the list. */ void removeLogHandler( LogHandler* lh ); private: struct LogInfo { LogLevel level; int areas; }; LogSink( const LogSink& /*copy*/ ); typedef std::map LogHandlerMap; LogHandlerMap m_logHandlers; }; } #endif // LOGSINK_H__ qutim-0.2.0/plugins/jabber/libs/gloox/client.cpp0000644000175000017500000004011411273054312023263 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "config.h" #include "client.h" #include "capabilities.h" #include "rostermanager.h" #include "disco.h" #include "error.h" #include "logsink.h" #include "nonsaslauth.h" #include "prep.h" #include "stanzaextensionfactory.h" #include "stanzaextension.h" #include "tag.h" #include "tlsbase.h" #include "util.h" #if !defined( _WIN32 ) && !defined( _WIN32_WCE ) # include #endif #include namespace gloox { // ---- Client::ResourceBind ---- Client::ResourceBind::ResourceBind( const std::string& resource, bool bind ) : StanzaExtension( ExtResourceBind ), m_jid( JID() ), m_bind( bind ) { prep::resourceprep( resource, m_resource ); m_valid = true; } Client::ResourceBind::ResourceBind( const Tag* tag ) : StanzaExtension( ExtResourceBind ), m_resource( EmptyString ), m_bind( true ) { if( !tag ) return; if( tag->name() == "unbind" ) m_bind = false; else if( tag->name() == "bind" ) m_bind = true; else return; if( tag->hasChild( "jid" ) ) m_jid.setJID( tag->findChild( "jid" )->cdata() ); else if( tag->hasChild( "resource" ) ) m_resource = tag->findChild( "resource" )->cdata(); m_valid = true; } Client::ResourceBind::~ResourceBind() { } const std::string& Client::ResourceBind::filterString() const { static const std::string filter = "/iq/bind[@xmlns='" + XMLNS_STREAM_BIND + "']" "|/iq/unbind[@xmlns='" + XMLNS_STREAM_BIND + "']"; return filter; } Tag* Client::ResourceBind::tag() const { if( !m_valid ) return 0; Tag* t = new Tag( m_bind ? "bind" : "unbind" ); t->setXmlns( XMLNS_STREAM_BIND ); if( m_bind && m_resource.empty() && m_jid ) new Tag( t, "jid", m_jid.full() ); else new Tag( t, "resource", m_resource ); return t; } // ---- ~Client::ResourceBind ---- // ---- Client::SessionCreation ---- Tag* Client::SessionCreation::tag() const { Tag* t = new Tag( "session" ); t->setXmlns( XMLNS_STREAM_SESSION ); return t; } // ---- Client::SessionCreation ---- // ---- Client ---- Client::Client( const std::string& server ) : ClientBase( XMLNS_CLIENT, server ), m_rosterManager( 0 ), m_auth( 0 ), m_presence( Presence::Available, JID() ), m_resourceBound( false ), m_forceNonSasl( false ), m_manageRoster( true ), m_streamFeatures( 0 ) { m_jid.setServer( server ); init(); } Client::Client( const JID& jid, const std::string& password, int port ) : ClientBase( XMLNS_CLIENT, password, EmptyString, port ), m_rosterManager( 0 ), m_auth( 0 ), m_presence( Presence::Available, JID() ), m_resourceBound( false ), m_forceNonSasl( false ), m_manageRoster( true ), m_streamFeatures( 0 ) { m_jid = jid; m_server = m_jid.serverRaw(); init(); } Client::~Client() { delete m_rosterManager; delete m_auth; } void Client::init() { m_rosterManager = new RosterManager( this ); m_disco->setIdentity( "client", "bot" ); registerStanzaExtension( new ResourceBind( 0 ) ); registerStanzaExtension( new Capabilities() ); m_presenceExtensions.push_back( new Capabilities( m_disco ) ); } void Client::setUsername( const std::string &username ) { m_jid.setUsername( username ); } bool Client::handleNormalNode( Tag* tag ) { if( tag->name() == "features" && tag->xmlns() == XMLNS_STREAM ) { m_streamFeatures = getStreamFeatures( tag ); if( m_tls == TLSRequired && !m_encryptionActive && ( !m_encryption || !( m_streamFeatures & StreamFeatureStartTls ) ) ) { logInstance().err( LogAreaClassClient, "Client is configured to require" " TLS but either the server didn't offer TLS or" " TLS support is not compiled in." ); disconnect( ConnTlsNotAvailable ); } else if( m_tls > TLSDisabled && m_encryption && !m_encryptionActive && ( m_streamFeatures & StreamFeatureStartTls ) ) { notifyStreamEvent( StreamEventEncryption ); startTls(); } else if( m_compress && m_compression && !m_compressionActive && ( m_streamFeatures & StreamFeatureCompressZlib ) ) { notifyStreamEvent( StreamEventCompression ); logInstance().warn( LogAreaClassClient, "The server offers compression, but negotiating Compression at this stage is not recommended. See XEP-0170 for details. We'll continue anyway." ); negotiateCompression( StreamFeatureCompressZlib ); } else if( m_sasl ) { if( m_authed ) { if( m_streamFeatures & StreamFeatureBind ) { notifyStreamEvent( StreamEventResourceBinding ); bindResource( resource() ); } } else if( !username().empty() && !password().empty() ) { if( !login() ) { logInstance().err( LogAreaClassClient, "The server doesn't support" " any auth mechanisms we know about" ); disconnect( ConnNoSupportedAuth ); } } else if( !m_clientCerts.empty() && !m_clientKey.empty() && m_streamFeatures & SaslMechExternal && m_availableSaslMechs & SaslMechExternal ) { notifyStreamEvent( StreamEventAuthentication ); startSASL( SaslMechExternal ); } #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) else if( m_streamFeatures & SaslMechGssapi && m_availableSaslMechs & SaslMechGssapi ) { notifyStreamEvent( StreamEventAuthentication ); startSASL( SaslMechGssapi ); } else if( m_streamFeatures & SaslMechNTLM && m_availableSaslMechs & SaslMechNTLM ) { notifyStreamEvent( StreamEventAuthentication ); startSASL( SaslMechNTLM ); } #endif else if( m_streamFeatures & SaslMechAnonymous && m_availableSaslMechs & SaslMechAnonymous ) { notifyStreamEvent( StreamEventAuthentication ); startSASL( SaslMechAnonymous ); } else { notifyStreamEvent( StreamEventFinished ); connected(); } } else if( m_compress && m_compression && !m_compressionActive && ( m_streamFeatures & StreamFeatureCompressZlib ) ) { notifyStreamEvent( StreamEventCompression ); negotiateCompression( StreamFeatureCompressZlib ); } // else if( ( m_streamFeatures & StreamFeatureCompressDclz ) // && m_connection->initCompression( StreamFeatureCompressDclz ) ) // { // negotiateCompression( StreamFeatureCompressDclz ); // } else if( m_streamFeatures & StreamFeatureIqAuth ) { notifyStreamEvent( StreamEventAuthentication ); nonSaslLogin(); } else { logInstance().err( LogAreaClassClient, "fallback: the server doesn't " "support any auth mechanisms we know about" ); disconnect( ConnNoSupportedAuth ); } } else { const std::string& name = tag->name(), xmlns = tag->findAttribute( XMLNS ); if( name == "proceed" && xmlns == XMLNS_STREAM_TLS ) { logInstance().dbg( LogAreaClassClient, "starting TLS handshake..." ); if( m_encryption ) { m_encryptionActive = true; m_encryption->handshake(); } } else if( name == "failure" ) { if( xmlns == XMLNS_STREAM_TLS ) { logInstance().err( LogAreaClassClient, "TLS handshake failed (server-side)!" ); disconnect( ConnTlsFailed ); } else if( xmlns == XMLNS_COMPRESSION ) { logInstance().err( LogAreaClassClient, "Stream compression init failed!" ); disconnect( ConnCompressionFailed ); } else if( xmlns == XMLNS_STREAM_SASL ) { logInstance().err( LogAreaClassClient, "SASL authentication failed!" ); processSASLError( tag ); disconnect( ConnAuthenticationFailed ); } } else if( name == "compressed" && xmlns == XMLNS_COMPRESSION ) { logInstance().dbg( LogAreaClassClient, "Stream compression initialized" ); m_compressionActive = true; header(); } else if( name == "challenge" && xmlns == XMLNS_STREAM_SASL ) { logInstance().dbg( LogAreaClassClient, "Processing SASL challenge" ); processSASLChallenge( tag->cdata() ); } else if( name == "success" && xmlns == XMLNS_STREAM_SASL ) { logInstance().dbg( LogAreaClassClient, "SASL authentication successful" ); processSASLSuccess(); setAuthed( true ); header(); } else return false; } return true; } int Client::getStreamFeatures( Tag* tag ) { if( tag->name() != "features" || tag->xmlns() != XMLNS_STREAM ) return 0; int features = 0; if( tag->hasChild( "starttls", XMLNS, XMLNS_STREAM_TLS ) ) features |= StreamFeatureStartTls; if( tag->hasChild( "mechanisms", XMLNS, XMLNS_STREAM_SASL ) ) features |= getSaslMechs( tag->findChild( "mechanisms" ) ); if( tag->hasChild( "bind", XMLNS, XMLNS_STREAM_BIND ) ) features |= StreamFeatureBind; if( tag->hasChild( "unbind", XMLNS, XMLNS_STREAM_BIND ) ) features |= StreamFeatureUnbind; if( tag->hasChild( "session", XMLNS, XMLNS_STREAM_SESSION ) ) features |= StreamFeatureSession; if( tag->hasChild( "auth", XMLNS, XMLNS_STREAM_IQAUTH ) ) features |= StreamFeatureIqAuth; if( tag->hasChild( "register", XMLNS, XMLNS_STREAM_IQREGISTER ) ) features |= StreamFeatureIqRegister; if( tag->hasChild( "compression", XMLNS, XMLNS_STREAM_COMPRESS ) ) features |= getCompressionMethods( tag->findChild( "compression" ) ); if( features == 0 ) features = StreamFeatureIqAuth; return features; } int Client::getSaslMechs( Tag* tag ) { int mechs = SaslMechNone; const std::string mech = "mechanism"; if( tag->hasChildWithCData( mech, "DIGEST-MD5" ) ) mechs |= SaslMechDigestMd5; if( tag->hasChildWithCData( mech, "PLAIN" ) ) mechs |= SaslMechPlain; if( tag->hasChildWithCData( mech, "ANONYMOUS" ) ) mechs |= SaslMechAnonymous; if( tag->hasChildWithCData( mech, "EXTERNAL" ) ) mechs |= SaslMechExternal; if( tag->hasChildWithCData( mech, "GSSAPI" ) ) mechs |= SaslMechGssapi; if( tag->hasChildWithCData( mech, "NTLM" ) ) mechs |= SaslMechNTLM; return mechs; } int Client::getCompressionMethods( Tag* tag ) { int meths = 0; if( tag->hasChildWithCData( "method", "zlib" ) ) meths |= StreamFeatureCompressZlib; if( tag->hasChildWithCData( "method", "lzw" ) ) meths |= StreamFeatureCompressDclz; return meths; } bool Client::login() { bool retval = true; if( m_streamFeatures & SaslMechDigestMd5 && m_availableSaslMechs & SaslMechDigestMd5 && !m_forceNonSasl ) { notifyStreamEvent( StreamEventAuthentication ); startSASL( SaslMechDigestMd5 ); } else if( m_streamFeatures & SaslMechPlain && m_availableSaslMechs & SaslMechPlain && !m_forceNonSasl ) { notifyStreamEvent( StreamEventAuthentication ); startSASL( SaslMechPlain ); } else if( m_streamFeatures & StreamFeatureIqAuth || m_forceNonSasl ) { notifyStreamEvent( StreamEventAuthentication ); nonSaslLogin(); } else retval = false; return retval; } void Client::handleIqIDForward( const IQ& iq, int context ) { switch( context ) { case CtxResourceUnbind: // we don't store known resources anyway break; case CtxResourceBind: processResourceBind( iq ); break; case CtxSessionEstablishment: processCreateSession( iq ); break; default: break; } } bool Client::bindOperation( const std::string& resource, bool bind ) { if( !( m_streamFeatures & StreamFeatureUnbind ) && m_resourceBound ) return false; IQ iq( IQ::Set, JID(), getID() ); iq.addExtension( new ResourceBind( resource, bind ) ); send( iq, this, bind ? CtxResourceBind : CtxResourceUnbind ); return true; } bool Client::selectResource( const std::string& resource ) { if( !( m_streamFeatures & StreamFeatureUnbind ) ) return false; m_selectedResource = resource; return true; } void Client::processResourceBind( const IQ& iq ) { switch( iq.subtype() ) { case IQ::Result: { const ResourceBind* rb = iq.findExtension( ExtResourceBind ); if( !rb || !rb->jid() ) { notifyOnResourceBindError( 0 ); break; } m_jid = rb->jid(); m_resourceBound = true; m_selectedResource = m_jid.resource(); notifyOnResourceBind( m_jid.resource() ); if( m_streamFeatures & StreamFeatureSession ) createSession(); else connected(); break; } case IQ::Error: { notifyOnResourceBindError( iq.error() ); break; } default: break; } } void Client::createSession() { notifyStreamEvent( StreamEventSessionCreation ); IQ iq( IQ::Set, JID(), getID() ); iq.addExtension( new SessionCreation() ); send( iq, this, CtxSessionEstablishment ); } void Client::processCreateSession( const IQ& iq ) { switch( iq.subtype() ) { case IQ::Result: connected(); break; case IQ::Error: notifyOnSessionCreateError( iq.error() ); break; default: break; } } void Client::negotiateCompression( StreamFeature method ) { Tag* t = new Tag( "compress", XMLNS, XMLNS_COMPRESSION ); if( method == StreamFeatureCompressZlib ) new Tag( t, "method", "zlib" ); if( method == StreamFeatureCompressDclz ) new Tag( t, "method", "lzw" ); send( t ); } void Client::setPresence( Presence::PresenceType pres, int priority, const std::string& status ) { m_presence.setPresence( pres ); m_presence.setPriority( priority ); m_presence.addStatus( status ); sendPresence( m_presence ); } void Client::setPresence( const JID& to, Presence::PresenceType pres, int priority, const std::string& status ) { Presence p( pres, to, status, priority ); sendPresence( p ); } void Client::sendPresence( Presence& pres ) { if( state() < StateConnected ) return; send( pres ); } void Client::disableRoster() { m_manageRoster = false; delete m_rosterManager; m_rosterManager = 0; } void Client::nonSaslLogin() { if( !m_auth ) m_auth = new NonSaslAuth( this ); m_auth->doAuth( m_sid ); } void Client::connected() { if( m_authed ) { if( m_manageRoster ) { notifyStreamEvent( StreamEventRoster ); m_rosterManager->fill(); } else rosterFilled(); } else { notifyStreamEvent( StreamEventFinished ); notifyOnConnect(); } } void Client::rosterFilled() { sendPresence( m_presence ); notifyStreamEvent( StreamEventFinished ); notifyOnConnect(); } void Client::disconnect() { disconnect( ConnUserDisconnected ); } void Client::disconnect( ConnectionError reason ) { m_resourceBound = false; m_authed = false; m_streamFeatures = 0; ClientBase::disconnect( reason ); } void Client::cleanup() { m_authed = false; m_resourceBound = false; m_streamFeatures = 0; } } qutim-0.2.0/plugins/jabber/libs/gloox/messagefilter.cpp0000644000175000017500000000156511273054312024646 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "messagefilter.h" namespace gloox { MessageFilter::MessageFilter( MessageSession* parent ) : m_parent( 0 ) { if( parent ) attachTo( parent ); } MessageFilter::~MessageFilter() { } void MessageFilter::attachTo( MessageSession* session ) { if( m_parent ) m_parent->removeMessageFilter( this ); if( session ) session->registerMessageFilter( this ); m_parent = session; } } qutim-0.2.0/plugins/jabber/libs/gloox/oob.h0000644000175000017500000000512211273054312022231 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef OOB_H__ #define OOB_H__ #include "gloox.h" #include "stanzaextension.h" #include namespace gloox { class Tag; /** * @brief This is an abstraction of a jabber:x:oob namespace element or a jabber:iq:oob namespace element * as specified in XEP-0066. * * XEP version: 1.5 * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API OOB : public StanzaExtension { public: /** * Constructs an OOB StanzaExtension from teh given URL and description. * @param url The out-of-band URL. * @param description The URL's optional description. * @param iqext Whether this object extends an IQ or a Presence/Message stanza (results in * either jabber:iq:oob or jabber:x:oob namespaced element). */ OOB( const std::string& url, const std::string& description, bool iqext ); /** * Constructs an OOB object from the given Tag. To be recognized properly, the Tag must * have either a name of 'x' in the jabber:x:oob namespace, or a name of 'query' in the * jabber:iq:oob namespace. * @param tag The Tag to parse. */ OOB( const Tag* tag ); /** * Virtual destructor. */ virtual ~OOB(); /** * Returns the out-of-band URL. * @return The out-of-band URL. */ const std::string& url() const { return m_url; } /** * Returns the URL's description. * @return The URL's description. */ const std::string& desc() const { return m_desc; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new OOB( tag ); } // reimplemented from StanzaExtension Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new OOB( *this ); } private: std::string m_xmlns; std::string m_url; std::string m_desc; bool m_iqext; bool m_valid; }; } #endif // OOB_H__ qutim-0.2.0/plugins/jabber/libs/gloox/siprofilefthandler.h0000644000175000017500000000766211273054312025351 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef SIPROFILEFTHANDLER_H__ #define SIPROFILEFTHANDLER_H__ #include "jid.h" #include namespace gloox { class JID; class IQ; class Bytestream; /** * @brief An abstract base class to handle file transfer (FT) requests. * * See SIProfileFT for more information regarding file transfer. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API SIProfileFTHandler { public: /** * Virtual destructor. */ virtual ~SIProfileFTHandler() {} /** * This function is called to handle incoming file transfer requests, i.e. a remote entity requested * to send a file to you. You should use either SIProfileFT::acceptFT() or * SIProfileFT::declineFT() to accept or reject the request, respectively. * @param from The file transfer requestor. * @param to The file transfer recipient. Usuall oneself. Used in component scenario. * @param sid The requested stream's ID. This sid MUST be supplied to SIProfileFT::acceptFT() * and SIProfileFT::declineFT(), respectively. * @param name The file name. * @param size The file size. * @param hash The file content's MD5 sum. * @param date The file's last modification time. * @param mimetype The file's mime-type. * @param desc The file's description. * @param stypes An ORed list of @link gloox::SIProfileFT::StreamType SIProfileFT::StreamType @endlink * indicating the StreamTypes the initiator supports. */ virtual void handleFTRequest( const JID& from, const JID& to, const std::string& sid, const std::string& name, long size, const std::string& hash, const std::string& date, const std::string& mimetype, const std::string& desc, int stypes ) = 0; /** * This function is called to handle a request error or decline. * @param iq The complete error stanza. * @param sid The request's SID. */ virtual void handleFTRequestError( const IQ& iq, const std::string& sid ) = 0; /** * This function is called to pass a negotiated bytestream (SOCKS5 or IBB). * The bytestream is not yet open and not ready to send/receive data. * @note To initialize the bytestream and to prepare it for data transfer * do the following, preferable in that order: * @li register a BytestreamDataHandler with the Bytestream, * @li set up a separate thread for the bytestream or integrate it into * your main loop, * @li call its connect() method and check the return value. * To not block your application while the data transfer and/or the connection * attempts last, you most likely want to put the bytestream into its own * thread or process (before calling connect() on it). It is safe to do so * without additional synchronization. * @param bs The bytestream. */ virtual void handleFTBytestream( Bytestream* bs ) = 0; /** * This function is called if the contact chose OOB as the mechanism. * @param from The remote contact's JID. * @param to The local recipient's JID. Usually oneself. Used in component scenario. * @param sid The stream's ID. * @return The file's URL. */ virtual const std::string handleOOBRequestResult( const JID& from, const JID& to, const std::string& sid ) = 0; }; } #endif // SIPROFILEFTHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/tlsgnutlsserver.h0000644000175000017500000000400411273054312024736 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef TLSGNUTLSSERVER_H__ #define TLSGNUTLSSERVER_H__ #include "tlsgnutlsbase.h" #include "config.h" #ifdef HAVE_GNUTLS #include #include namespace gloox { /** * @brief This class implements (stream) encryption using GnuTLS server-side. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 1.0 */ class GnuTLSServer : public GnuTLSBase { public: /** * Constructor. * @param th The TLSHandler to handle TLS-related events. */ GnuTLSServer( TLSHandler* th ); /** * Virtual destructor. */ virtual ~GnuTLSServer(); // reimplemented from TLSBase virtual bool init( const std::string& clientKey = EmptyString, const std::string& clientCerts = EmptyString, const StringList& cacerts = StringList() ); // reimplemented from TLSBase virtual void cleanup(); private: // reimplemented from TLSBase virtual void setCACerts( const StringList& cacerts ); // reimplemented from TLSBase virtual void setClientCert( const std::string& clientKey, const std::string& clientCerts ); virtual void getCertInfo(); void generateDH(); gnutls_certificate_credentials_t m_x509cred; // gnutls_priority_t m_priorityCache; gnutls_dh_params_t m_dhParams; gnutls_rsa_params_t m_rsaParams; const int m_dhBits; }; } #endif // HAVE_GNUTLS #endif // TLSGNUTLSSERVER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/compressionbase.h0000644000175000017500000000413111273054312024645 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef COMPRESSIONBASE_H__ #define COMPRESSIONBASE_H__ #include "gloox.h" #include "compressiondatahandler.h" #include namespace gloox { /** * @brief This is an abstract base class for stream compression implementations. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API CompressionBase { public: /** * Contructor. * @param cdh A CompressionDataHandler-derived object that will be notified * about finished de/compression. */ CompressionBase( CompressionDataHandler* cdh ) : m_handler( cdh ), m_valid( false ) {} /** * Virtual Destructor. */ virtual ~CompressionBase() {} /** * This function initializes the compression module. * it is mandatory to be called. * @return @b True if the module was initialized successfully, false otherwise. */ virtual bool init() = 0; /** * Compresses the given chunk of data. * @param data The original (uncompressed) data. */ virtual void compress( const std::string& data ) = 0; /** * Decompresses the given chunk of data. * @param data The compressed data. */ virtual void decompress( const std::string& data ) = 0; /** * Performs internal cleanup. * @since 1.0 */ virtual void cleanup() = 0; protected: /** A handler for compressed/uncompressed data. */ CompressionDataHandler* m_handler; /** Whether the compression module can be used. */ bool m_valid; }; } #endif // COMPRESSIONBASE_H__ qutim-0.2.0/plugins/jabber/libs/gloox/oob.cpp0000644000175000017500000000362711273054312022574 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "oob.h" #include "tag.h" namespace gloox { OOB::OOB( const std::string& url, const std::string& description, bool iqext ) : StanzaExtension( ExtOOB ), m_url( url ), m_desc( description ), m_iqext( iqext ), m_valid( true ) { if( m_url.empty() ) m_valid = false; } OOB::OOB( const Tag* tag ) : StanzaExtension( ExtOOB ), m_iqext( false ), m_valid( false ) { if( tag && ( ( tag->name() == "x" && tag->hasAttribute( XMLNS, XMLNS_X_OOB ) ) || ( tag && tag->name() == "query" && tag->hasAttribute( XMLNS, XMLNS_IQ_OOB ) ) ) ) { if( tag->name() == "query" ) m_iqext = true; } else return; if( tag->hasChild( "url" ) ) { m_valid = true; m_url = tag->findChild( "url" )->cdata(); } if( tag->hasChild( "desc" ) ) m_desc = tag->findChild( "desc" )->cdata(); } OOB::~OOB() { } const std::string& OOB::filterString() const { static const std::string filter = "/presence/x[@xmlns='" + XMLNS_X_OOB + "']" "|/message/x[@xmlns='" + XMLNS_X_OOB + "']" "|/iq/query[@xmlns='" + XMLNS_IQ_OOB + "']"; return filter; } Tag* OOB::tag() const { if( !m_valid ) return 0; Tag* t = 0; if( m_iqext ) t = new Tag( "query", XMLNS, XMLNS_IQ_OOB ); else t = new Tag( "x", XMLNS, XMLNS_X_OOB ); new Tag( t, "url", m_url ); if( !m_desc.empty() ) new Tag( t, "desc", m_desc ); return t; } } qutim-0.2.0/plugins/jabber/libs/gloox/subscription.h0000644000175000017500000000602711273054312024203 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef SUBSCRIPTION_H__ #define SUBSCRIPTION_H__ #include "stanza.h" #include namespace gloox { class JID; /** * @brief An abstraction of a subscription stanza. * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API Subscription : public Stanza { public: friend class ClientBase; /** * Describes the different valid message types. */ enum S10nType { Subscribe, /**> A subscription request. */ Subscribed, /**< A subscription notification. */ Unsubscribe, /**< An unsubscription request. */ Unsubscribed, /**< An unsubscription notification. */ Invalid /**< The stanza is invalid. */ }; /** * Creates a Subscription request. * @param type The presence type. * @param to The intended receiver. Use an empty JID to create a broadcast packet. * @param status An optional status message (e.g. "please authorize me"). * @param xmllang An optional xml:lang for the status message. */ Subscription( S10nType type, const JID& to, const std::string& status = EmptyString, const std::string& xmllang = EmptyString ); /** * Destructor. */ virtual ~Subscription(); /** * Returns the subscription stanza's type. * @return The subscription stanza's type. * */ S10nType subtype() const { return m_subtype; } /** * Returns the status text of a presence stanza for the given language if available. * If the requested language is not available, the default status text (without a xml:lang * attribute) will be returned. * @param lang The language identifier for the desired language. It must conform to * section 2.12 of the XML specification and RFC 3066. If empty, the default body * will be returned, if any. * @return The status text set by the sender. */ const std::string status( const std::string& lang = "default" ) const { return findLang( m_stati, m_status, lang ); } // reimplemented from Stanza virtual Tag* tag() const; private: #ifdef SUBSCRIPTION_TEST public: #endif /** * Creates a Subscription request from the given Tag. The original Tag will be ripped off. * @param tag The Tag to parse. */ Subscription( Tag* tag ); S10nType m_subtype; StringMap* m_stati; std::string m_status; }; } #endif // SUBSCRIPTION_H__ qutim-0.2.0/plugins/jabber/libs/gloox/simanager.h0000644000175000017500000001774511273054312023436 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef SIMANAGER_H__ #define SIMANAGER_H__ #include "iqhandler.h" namespace gloox { class ClientBase; class SIProfileHandler; class SIHandler; /** * @brief This class manages streams initiated using XEP-0095. * * You need only one SIManager object per ClientBase instance. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API SIManager : public IqHandler { public: /** * SI error conditions. */ enum SIError { NoValidStreams, /**< None of the stream types are acceptable */ BadProfile, /**< Profile is not understood. */ RequestRejected /**< SI request was rejected. */ }; class SI : public StanzaExtension { public: /** * Constructs a new SI object from the given Tag. * @param tag The Tag to parse. */ SI( const Tag* tag = 0 ); /** * Constructs a new SI object, wrapping the given Tags. * @param tag1 Tag 1. * @param tag2 Tag 2. */ SI( Tag* tag1, Tag* tag2, const std::string& id = EmptyString, const std::string& mimetype = EmptyString, const std::string& profile = EmptyString ); /** * Virtual destructor. */ virtual ~SI(); /** * Returns the current profile namespace. * @return The profile namespace. */ const std::string& profile() const { return m_profile; }; /** * Returns the mime-type. * @return The mime-type. */ const std::string& mimetype() const { return m_mimetype; }; /** * Returns the SI's ID. * @return The SI's id. */ const std::string& id() const { return m_id; }; /** * Returns the first SI child tag. * @return The first SI child tag. * @todo Use real objects. */ const Tag* tag1() const { return m_tag1; }; /** * Returns the second SI child tag. * @return The second SI child tag. * @todo Use real objects. */ const Tag* tag2() const { return m_tag2; }; // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new SI( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { SI* s = new SI(); s->m_tag1 = m_tag1 ? m_tag1->clone() : 0; s->m_tag2 = m_tag2 ? m_tag2->clone() : 0; s->m_id = m_id; s->m_mimetype = m_mimetype; s->m_profile = m_profile; return s; } private: Tag* m_tag1; Tag* m_tag2; std::string m_id; std::string m_mimetype; std::string m_profile; }; /** * Constructor. * @param parent The ClientBase to use for communication. * @param advertise Whether to advertise SI capabilities by disco. Defaults to true. */ SIManager( ClientBase* parent, bool advertise = true ); /** * Virtual destructor. */ virtual ~SIManager(); /** * Starts negotiating a stream with a remote entity. * @param sih The SIHandler to handle the result of this request. * @param to The entity to talk to. * @param profile The SI profile to use. See XEP-0095 for more info. * @param child1 The first of the two allowed children of the SI offer. See * XEP-0095 for more info. * @param child2 The second of the two allowed children of the SI offer. See * XEP-0095 for more info. Defaults to 0. * @param mimetype The stream's/file's mime-type. Defaults to 'binary/octet-stream'. * @param from An optional 'from' address to stamp outgoing requests with. * Used in component scenario only. Defaults to empty JID. * @param sid Optionally specify a stream ID (SID). If empty, one will be generated. * @return The requested stream's ID (SID). Empty if SIHandler or ClientBase are invalid. * @note The SIManager claims ownership of the Tags supplied to this function, and will * delete them after use. */ const std::string requestSI( SIHandler* sih, const JID& to, const std::string& profile, Tag* child1, Tag* child2 = 0, const std::string& mimetype = "binary/octet-stream", const JID& from = JID(), const std::string& sid = EmptyString ); /** * Call this function to accept an SI request previously announced by means of * SIProfileHandler::handleSIRequest(). * @param to The requestor. * @param id The request's id, as passed to SIProfileHandler::handleSIRequest(). * @param child1 The <feature/> child of the SI request. See XEP-0095 for details. * @param child2 The profile-specific child of the SI request. May be 0. See XEP-0095 * for details. * @param from An optional 'from' address to stamp outgoing stanzas with. * Used in component scenario only. Defaults to empty JID. * @note The SIManager claims ownership of the Tags supplied to this function, and will * delete them after use. */ void acceptSI( const JID& to, const std::string& id, Tag* child1, Tag* child2 = 0, const JID& from = JID() ); /** * Call this function to decline an SI request previously announced by means of * SIProfileHandler::handleSIRequest(). * @param to The requestor. * @param id The request's id, as passed to SIProfileHandler::handleSIRequest(). * @param reason The reason for the reject. * @param text An optional human-readable text explaining the decline. */ void declineSI( const JID& to, const std::string& id, SIError reason, const std::string& text = EmptyString ); /** * Registers the given SIProfileHandler to handle requests for the * given SI profile namespace. The profile will be advertised by disco (unless disabled in * the ctor). * @param profile The complete profile namespace, e.g. * http://jabber.org/protocol/si/profile/file-transfer. * @param sih The profile handler. */ void registerProfile( const std::string& profile, SIProfileHandler* sih ); /** * Un-registers the given profile. * @param profile The profile's namespace to un-register. */ void removeProfile( const std::string& profile ); // reimplemented from IqHandler. virtual bool handleIq( const IQ& iq ); // reimplemented from IqHandler. virtual void handleIqID( const IQ& iq, int context ); private: #ifdef SIMANAGER_TEST public: #endif enum TrackContext { OfferSI }; struct TrackStruct { std::string sid; std::string profile; SIHandler* sih; }; typedef std::map TrackMap; TrackMap m_track; ClientBase* m_parent; typedef std::map HandlerMap; HandlerMap m_handlers; bool m_advertise; }; } #endif // SIMANAGER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/clientbase.h0000644000175000017500000011674711273054312023603 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef CLIENTBASE_H__ #define CLIENTBASE_H__ #include "macros.h" #include "gloox.h" #include "eventdispatcher.h" #include "iqhandler.h" #include "jid.h" #include "logsink.h" #include "mutex.h" #include "taghandler.h" #include "statisticshandler.h" #include "tlshandler.h" #include "compressiondatahandler.h" #include "connectiondatahandler.h" #include "parser.h" #include #include #include #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) #include #define SECURITY_WIN32 #include #endif namespace gloox { class Disco; class EventHandler; class Event; class Tag; class IQ; class Message; class Presence; class Subscription; class MessageSessionHandler; class ConnectionListener; class MessageHandler; class MessageSession; class PresenceHandler; class SubscriptionHandler; class MUCInvitationHandler; class TagHandler; class TLSBase; class ConnectionBase; class CompressionBase; class StanzaExtensionFactory; /** * @brief This is the common base class for a Jabber/XMPP Client and a Jabber Component. * * It manages connection establishing, authentication, filter registration and invocation. * You should normally use Client for client connections and Component for component connections. * * @author Jakob Schroeter * @since 0.3 */ class GLOOX_API ClientBase : public TagHandler, public ConnectionDataHandler, public CompressionDataHandler, public TLSHandler, public IqHandler { friend class RosterManager; public: /** * Constructs a new ClientBase. * You should not need to use this class directly. Use Client or Component instead. * @param ns The namespace which qualifies the stream. Either jabber:client or jabber:component:* * @param server The server to connect to. * @param port The port to connect to. The default of -1 means to look up the port via DNS SRV * or to use a default port of 5222 as defined in XMPP Core. */ ClientBase( const std::string& ns, const std::string& server, int port = -1 ); /** * Constructs a new ClientBase. * You should not need to use this class directly. Use Client or Component instead. * @param ns The namespace which qualifies the stream. Either jabber:client or jabber:component:* * @param password The password to use for further authentication. * @param server The server to connect to. * @param port The port to connect to. The default of -1 means to look up the port via DNS SRV * or to use a default port of 5222 as defined in XMPP: Core. */ ClientBase( const std::string& ns, const std::string& password, const std::string& server, int port = -1 ); /** * Virtual destrcuctor. */ virtual ~ClientBase(); /** * Initiates the connection to a server. This function blocks as long as a connection is * established. * You can have the connection block 'til the end of the connection, or you can have it return * immediately. If you choose the latter, its your responsibility to call @ref recv() every now * and then to actually receive data from the socket and to feed the parser. * @param block @b True for blocking, @b false for non-blocking connect. Defaults to @b true. * @return @b False if prerequisits are not met (server not set) or if the connection was refused, * @b true otherwise. * @note Since 0.9 @link ConnectionListener::onDisconnect() onDisconnect() @endlink is called * in addition to a return value of @b false. */ bool connect( bool block = true ); /** * Use this periodically to receive data from the socket and to feed the parser. You need to use * this only if you chose to connect in non-blocking mode. * @param timeout The timeout in microseconds to use for select. Default of -1 means blocking * until data was available. * @return The state of the connection. */ ConnectionError recv( int timeout = -1 ); /** * Reimplement this function to provide a username for connection purposes. * @return The username. */ virtual const std::string& username() const { return m_jid.username(); } /** * Returns the current Jabber ID. If an authorization ID has been set (using setAuthzid()) * this authzid is returned. * @return A reference to the Jabber ID. * @note If you change the server part of the JID, the server of the connection is not synced. * You have to do that manually using @ref setServer(). */ const JID& jid() { return m_authzid ? m_authzid : m_jid; } /** * Switches usage of SASL on/off. Default: on. SASL should only be disabled if there are * problems with using it. * @param sasl Whether to switch SASL usage on or off. */ void setSasl( bool sasl ) { m_sasl = sasl; } /** * Sets the TLS policy. Default: TLS will be used if available. TLS should only be * disabled if there are problems with using it. * @param tls The TLS policy. */ void setTls( TLSPolicy tls ) { m_tls = tls; } /** * Switches usage of Stream Compression on/off (if available). Default: on if available. Stream * Compression should only be disabled if there are problems with using it. * @param compression Whether to switch Stream Compression usage on or off. */ void setCompression( bool compression ) { m_compress = compression; } /** * Sets the port to connect to. This is not necessary if either the default port (5222) is used * or SRV records exist which will be resolved. * @param port The port to connect to. */ void setPort( int port ) { m_port = port; } /** * Sets the XMPP server to connect to. * @param server The server to connect to. Either IP or fully qualified domain name. * @note If you change the server, the server part of the JID is not synced. You have to do that * manually using @ref jid() and @ref JID::setServer(). * @note This function also sets the server of the Connection(Base) in use. */ void setServer( const std::string &server ); /** * Sets the password to use to connect to the XMPP server. * @param password The password to use for authentication. */ void setPassword( const std::string &password ) { m_password = password; } /** * Returns the current prepped server. * @return The server used to connect. */ const std::string& server() const { return m_server; } /** * Returns whether SASL is currently enabled (not necessarily used). * @return The current SASL status. */ bool sasl() const { return m_sasl; } /** * Returns whether TLS is currently enabled (not necessarily used). * @return The current TLS status. */ TLSPolicy tls() const { return m_tls; } /** * Returns whether Stream Compression is currently enabled (not necessarily used). * @return The current Stream Compression status. */ bool compression() const { return m_compress; } /** * Returns the port. The default of -1 means that the actual port will be looked up using * SRV records, or the XMPP default port of 5222 will be used. * @return The port used to connect. */ int port() const { return m_port; } /** * Returns the current password. * @return The password used to connect. */ virtual const std::string& password() const { return m_password; } /** * This function gives access to the @c Disco object. * @return A pointer to the Disco object. */ virtual Disco* disco() const { return m_disco; } /** * Creates a string which is unique in the current instance and * can be used as an ID for queries. * @return A unique string suitable for query IDs. */ const std::string getID(); /** * Sends the given Tag over an established connection. * The ClientBase object becomes the owner of this Tag and will delete it after sending it. * You should not rely on the existance of the Tag after it's been sent. If you still need * it after sending it, use Tag::clone() to create a deep copy. * @param tag The Tag to send. */ void send( Tag* tag ); /** * Sends the given IQ stanza. The given IqHandler is registered to be notified of replies. This, * of course, only works for IQs of type get or set. An ID is added if necessary. * @param iq The IQ stanza to send. * @param ih The handler to register for replies. * @param context A value that allows for restoring context. * @param del Whether or not delete the IqHandler object after its being called. * Default: @b false. */ void send( IQ& iq, IqHandler* ih, int context, bool del = false ); /** * A convenience function that sends the given IQ stanza. * @param iq The IQ stanza to send. */ void send( const IQ& iq ); /** * A convenience function that sends the given Message stanza. * @param msg The Message stanza to send. */ void send( const Message& msg ); /** * A convenience function that sends the given Subscription stanza. * @param sub The Subscription stanza to send. */ void send( const Subscription& sub ); /** * A convenience function that sends the given Presence stanza. * @param pres The Presence stanza to send. */ void send( Presence& pres ); /** * Returns whether authentication has taken place and was successful. * @return @b True if authentication has been carried out @b and was successful, @b false otherwise. */ bool authed() const { return m_authed; } /** * Returns the current connection status. * @return The status of the connection. */ ConnectionState state() const; /** * Retrieves the value of the xml:lang attribute of the initial stream. * Default is 'en', i.e. if not changed by a call to @ref setXmlLang(). */ const std::string& xmlLang() const { return m_xmllang; } /** * Sets the value for the xml:lang attribute of the initial stream. * @param xmllang The language identifier for the stream. It must conform to * section 2.12 of the XML specification and RFC 3066. * Default is 'en'. */ void setXmlLang( const std::string& xmllang ) { m_xmllang = xmllang; } /** * This function returns the concrete connection implementation currently in use. * @return The concrete connection implementation. * @since 0.9 */ ConnectionBase* connectionImpl() const { return m_connection; } /** * Use this function if you have a class implementing a UDP, SCTP (or whatever) * connection. This should be called before calling connect(). If there already is a * connection implementation set (either manually or automatically), it gets deleted. * @param cb The connection to use. * @since 0.9 */ void setConnectionImpl( ConnectionBase* cb ); /** * This function returns the concrete encryption implementation currently in use. * @return The concrete encryption implementation. * @since 0.9 */ TLSBase* encryptionImpl() const { return m_encryption; } /** * Use this function if you have a class supporting hardware encryption (or whatever). * This should be called before calling connect(). If there already is a * encryption implementation set (either manually or automatically), it gets deleted. * @param tb The encryption implementation to use. * @since 0.9 */ void setEncryptionImpl( TLSBase* tb ); /** * This function returns the concrete compression implementation currently in use. * @return The concrete compression implementation. * @since 0.9 */ CompressionBase* compressionImpl() const { return m_compression; } /** * Use this function if you have a class supporting some fancy compression algorithm. * This should be called before calling connect(). If there already is a * compression implementation set (either manually or automatically), it gets deleted. * @param cb The compression implementation to use. * @since 0.9 */ void setCompressionImpl( CompressionBase* cb ); /** * Sends a whitespace ping to the server. * @since 0.9 */ void whitespacePing(); /** * Sends a XMPP Ping (XEP-0199) to the given JID. * @param to Then entity to ping. * @param eh An EventHandler to inform about the reply. * @since 0.9 */ void xmppPing( const JID& to, EventHandler* eh ); /** * Use this function to set an authorization ID (authzid). Provided the server supports it * and the user has sufficient rights, they could then authenticate as bob@example.net but * act as alice@example.net. * @param authzid The JID to authorize as. Only the bare JID is used. * @since 0.9 */ void setAuthzid( const JID& authzid ) { m_authzid = authzid; } /** * Use this function to set an authentication ID (authcid) for SASL PLAIN. * The default authcid is the username, i.e. the JID's node part. This should work in most cases. * If this is not what you want to use for authentication, use this function. * @param authcid The authentication ID. * @since 1.0 * @note Right now this is used for SASL PLAIN authentication only. */ void setAuthcid( const std::string& authcid ) { m_authcid = authcid; } /** * Use this function to limit SASL mechanisms gloox can use. By default, all * supported mechanisms are allowed. To exclude one (or more) mechanisms, remove * it from SaslMechAll like so: * @code * int mymechs = SaslMechAll ^ SaslMechDigestMd5; * @endcode * @param mechanisms Bitwise ORed @ref SaslMechanism. * @since 0.9 */ void setSASLMechanisms( int mechanisms ) { m_availableSaslMechs = mechanisms; } /** * Registers a new StanzaExtension with the StanzaExtensionFactory. * @param ext The extension to register. */ void registerStanzaExtension( StanzaExtension* ext ); /** * Removes the given StanzaExtension type from the StanzaExtensionFactory. * @param ext The extension type. * @return @b True if the given type was found (and removed), @b false otherwise. */ bool removeStanzaExtension( int ext ); /** * Registers @c cl as object that receives connection notifications. * @param cl The object to receive connection notifications. */ void registerConnectionListener( ConnectionListener* cl ); /** * Registers @c ih as object that receives notifications for IQ stanzas * that contain StanzaExtensions of the given type. The number of handlers * per extension type is not limited. * @param ih The object to receive IQ stanza notifications. * @param exttype The extension type. See StanzaExtension and * @link gloox::StanzaExtensionType StanzaExtensionType @endlink. * @since 1.0 */ void registerIqHandler( IqHandler* ih, int exttype ); /** * Removes the given IqHandler from the list of handlers of pending operations, added * using trackID(). Necessary, for example, when closing a GUI element that has an * operation pending. * @param ih The IqHandler to remove. * @since 0.8.7 */ void removeIDHandler( IqHandler* ih ); /** * Registers @c mh as object that receives Message stanza notifications. * @param mh The object to receive Message stanza notifications. */ void registerMessageHandler( MessageHandler* mh ); /** * Removes the given object from the list of message handlers. * @param mh The object to remove from the list. */ void removeMessageHandler( MessageHandler* mh ); /** * Registers the given MessageSession to receive Messages incoming from the session's * target JID. * @note The ClientBase instance becomes the owner of the MessageSession, it will be deleted * in ClientBase's destructor. To get rid of the session before that, use disposeMessageSession(). * @param session The MessageSession to register. * @note Since a MessageSession automatically registers itself with the ClientBase, there is no * need to call this function directly. */ void registerMessageSession( MessageSession* session ); /** * Removes the given MessageSession from the list of MessageSessions and deletes it. * @param session The MessageSession to be deleted. */ void disposeMessageSession( MessageSession* session ); /** * Registers @c ph as object that receives Presence stanza notifications. * @param ph The object to receive Presence stanza notifications. */ void registerPresenceHandler( PresenceHandler* ph ); /** * Registers a new PresenceHandler for the given JID. Presences received for this * particular JID will not be forwarded to the generic PresenceHandler (and therefore * the Roster). * This functionality is primarily intended for the MUC implementation. * @param jid The JID to 'watch'. * @param ph The PresenceHandler to inform about presence changes from @c jid. * @since 0.9 */ void registerPresenceHandler( const JID& jid, PresenceHandler* ph ); /** * Registers @c sh as object that receives Subscription stanza notifications. * @param sh The object to receive Subscription stanza notifications. */ void registerSubscriptionHandler( SubscriptionHandler* sh ); /** * Registers @c th as object that receives incoming packts with a given root tag * qualified by the given namespace. * @param th The object to receive Subscription packet notifications. * @param tag The element's name. * @param xmlns The element's namespace. */ void registerTagHandler( TagHandler* th, const std::string& tag, const std::string& xmlns ); /** * Registers @c sh as object that receives up-to-date connection statistics each time * a Stanza is received or sent. Alternatively, you can use getStatistics() manually. * Only one StatisticsHandler per ClientBase at a time is possible. * @param sh The StatisticsHandler to register. */ void registerStatisticsHandler( StatisticsHandler* sh ); /** * Removes the given object from the list of connection listeners. * @param cl The object to remove from the list. */ void removeConnectionListener( ConnectionListener* cl ); /** * Removes the given IQ handler for the given extension type. * @param ih The IqHandler. * @param exttype The extension type. See * @link gloox::StanzaExtensionType StanzaExtensionType @endlink. * @since 1.0 */ void removeIqHandler( IqHandler* ih, int exttype ); /** * Removes the given object from the list of presence handlers. * @param ph The object to remove from the list. */ void removePresenceHandler( PresenceHandler* ph ); /** * Removes the given object from the list of presence handlers for the given JID. * @param jid The JID to remove the PresenceHandler(s) for. * @param ph The PresenceHandler to remove from the list. If @c ph is 0, * all handlers for the given JID will be removed. */ void removePresenceHandler( const JID& jid, PresenceHandler* ph ); /** * Removes the given object from the list of subscription handlers. * @param sh The object to remove from the list. */ void removeSubscriptionHandler( SubscriptionHandler* sh ); /** * Removes the given object from the list of tag handlers for the given element and namespace. * @param th The object to remove from the list. * @param tag The element to remove the handler for. * @param xmlns The namespace qualifying the element. */ void removeTagHandler( TagHandler* th, const std::string& tag, const std::string& xmlns ); /** * Removes the current StatisticsHandler. */ void removeStatisticsHandler(); /** * Use this function to set a number of trusted root CA certificates which shall be * used to verify a servers certificate. * @param cacerts A list of absolute paths to CA root certificate files in PEM format. */ void setCACerts( const StringList& cacerts ) { m_cacerts = cacerts; } /** * Use this function to set the user's certificate and private key. The certificate will * be presented to the server upon request and can be used for SASL EXTERNAL authentication. * The user's certificate file should be a bundle of more than one certificate in PEM format. * The first one in the file should be the user's certificate, each cert following that one * should have signed the previous one. * @note These certificates are not necessarily the same as those used to verify the server's * certificate. * @param clientKey The absolute path to the user's private key in PEM format. * @param clientCerts A path to a certificate bundle in PEM format. */ void setClientCert( const std::string& clientKey, const std::string& clientCerts ); /** * Use this function to register a MessageSessionHandler with the Client. * Optionally the MessageSessionHandler can receive only MessageSessions with a given * message type. There can be only one handler per message type.
* A MessageSession will be created for every incoming * message stanza if there is no MessageHandler registered for the originating JID. * @param msh The MessageSessionHandler that will receive the newly created MessageSession. * @param types ORed StanzaSubType's that describe the desired message types the handler * shall receive. Only StanzaMessage* types are valid. A value of 0 means any type (default). */ void registerMessageSessionHandler( MessageSessionHandler* msh, int types = 0 ); /** * Returns the LogSink instance for this ClientBase and all related objects. * @return The LogSink instance used in the current ClientBase. */ LogSink& logInstance() { return m_logInstance; } /** * Use this function to retrieve the type of the stream error after it occurs and you received a * ConnectionError of type @b ConnStreamError from the ConnectionListener. * @return The StreamError. * @note The return value is only meaningful when called from ConnectionListener::onDisconnect(). */ StreamError streamError() const { return m_streamError; } /** * Returns the text of a stream error for the given language if available. * If the requested language is not available, the default text (without a xml:lang * attribute) will be returned. * @param lang The language identifier for the desired language. It must conform to * section 2.12 of the XML specification and RFC 3066. If empty, the default body * will be returned, if any. * @return The describing text of a stream error. Empty if no stream error occured. */ const std::string& streamErrorText( const std::string& lang = "default" ) const; /** * In case the defined-condition element of an stream error contains XML character data you can * use this function to retrieve it. RFC 3920 only defines one condition (see-other-host)where * this is possible. * @return The cdata of the stream error's text element (only for see-other-host). */ const std::string& streamErrorCData() const { return m_streamErrorCData; } /** * This function can be used to retrieve the application-specific error condition of a stream error. * @return The application-specific error element of a stream error. 0 if no respective element was * found or no error occured. */ const Tag* streamErrorAppCondition() const { return m_streamErrorAppCondition; } /** * Use this function to retrieve the type of the authentication error after it occurs and you * received a ConnectionError of type @b ConnAuthenticationFailed from the ConnectionListener. * @return The type of the authentication, if any, @b AuthErrorUndefined otherwise. */ AuthenticationError authError() const { return m_authError; } /** * Returns a StatisticsStruct containing byte and stanza counts for the current * active connection. * @return A struct containing the current connection's statistics. */ StatisticsStruct getStatistics(); /** * Registers a MUCInvitationHandler with the ClientBase. * @param mih The MUCInvitationHandler to register. */ void registerMUCInvitationHandler( MUCInvitationHandler* mih ); /** * Removes the currently registered MUCInvitationHandler. */ void removeMUCInvitationHandler(); /** * Adds a StanzaExtension that will be sent with every Presence stanza * sent. Capabilities are included by default if you are using a Client. * @param se A StanzaExtension to add. If an extension of the same type * has been added previously it will be replaced by the new one. * Use removePresenceExtension() to remove an extension. */ void addPresenceExtension( StanzaExtension* se ); /** * Removes the StanzaExtension of the given type from the list of Presence * StanzaExtensions. * Use addPresenceExtension() to replace an already added type. */ bool removePresenceExtension( int type ); /** * Returns the current list of Presence StanzaExtensions. * @return The current list of Presence StanzaExtensions. */ const StanzaExtensionList& presenceExtensions() const { return m_presenceExtensions; } // reimplemented from ParserHandler virtual void handleTag( Tag* tag ); // reimplemented from CompressionDataHandler virtual void handleCompressedData( const std::string& data ); // reimplemented from CompressionDataHandler virtual void handleDecompressedData( const std::string& data ); // reimplemented from ConnectionDataHandler virtual void handleReceivedData( const ConnectionBase* connection, const std::string& data ); // reimplemented from ConnectionDataHandler virtual void handleConnect( const ConnectionBase* connection ); // reimplemented from ConnectionDataHandler virtual void handleDisconnect( const ConnectionBase* connection, ConnectionError reason ); // reimplemented from TLSHandler virtual void handleEncryptedData( const TLSBase* base, const std::string& data ); // reimplemented from TLSHandler virtual void handleDecryptedData( const TLSBase* base, const std::string& data ); // reimplemented from TLSHandler virtual void handleHandshakeResult( const TLSBase* base, bool success, CertInfo &certinfo ); protected: /** * This function is called when resource binding yieled an error. * @param error A pointer to an Error object that contains more * information. May be 0. */ void notifyOnResourceBindError( const Error* error ); /** * This function is called when binding a resource succeeded. * @param resource The bound resource. */ void notifyOnResourceBind( const std::string& resource ); /** * This function is called when session creation yieled an error. * @param error A pointer to an Error object that contains more * information. May be 0. */ void notifyOnSessionCreateError( const Error* error ); /** * This function is called when the TLS handshake completed correctly. The return * value is used to determine whether or not the client accepted the server's * certificate. If @b false is returned the connection is closed. * @param info Information on the server's certificate. * @return @b True if the certificate seems trustworthy, @b false otherwise. */ bool notifyOnTLSConnect( const CertInfo& info ); /** * This function is called to notify about successful connection. */ void notifyOnConnect(); /** * This function is used to notify subscribers of stream events. * @param event The event to publish. */ void notifyStreamEvent( StreamEvent event ); /** * Disconnects the underlying stream and broadcasts the given reason. * @param reason The reason for the disconnect. */ virtual void disconnect( ConnectionError reason ); /** * Sends the stream header. */ void header(); /** * Tells ClientBase that authentication was successful (or not). * @param authed Whether or not authentication was successful. */ void setAuthed( bool authed ) { m_authed = authed; } /** * If authentication failed, this function tells ClientBase * the reason. * @param e The reason for the authentication failure. */ void setAuthFailure( AuthenticationError e ) { m_authError = e; } /** * Implementors of this function can check if they support the advertized stream version. * The return value indicates whether or not the stream can be handled. A default * implementation is provided. * @param version The advertized stream version. * @return @b True if the stream can be handled, @b false otherwise. */ virtual bool checkStreamVersion( const std::string& version ); /** * Starts authentication using the given SASL mechanism. * @param type A SASL mechanism to use for authentication. */ void startSASL( SaslMechanism type ); /** * Releases SASL related resources. */ void processSASLSuccess(); /** * Processes the given SASL challenge and sends a response. * @param challenge The SASL challenge to process. */ void processSASLChallenge( const std::string& challenge ); /** * Examines the given Tag for SASL errors. * @param tag The Tag to parse. */ void processSASLError( Tag* tag ); /** * Sets the domain to use in SASL NTLM authentication. * @param domain The domain. */ void setNTLMDomain( const std::string& domain ) { m_ntlmDomain = domain; } /** * Starts the TLS handshake. */ void startTls(); /** * Indicates whether or not TLS is supported. * @return @b True if TLS is supported, @b false otherwise. */ bool hasTls(); JID m_jid; /**< The 'self' JID. */ JID m_authzid; /**< An optional authorization ID. See setAuthzid(). */ std::string m_authcid; /**< An alternative authentication ID. See setAuthcid(). */ ConnectionBase* m_connection; /**< The transport connection. */ TLSBase* m_encryption; /**< Used for connection encryption. */ CompressionBase* m_compression; /**< Used for connection compression. */ Disco* m_disco; /**< The local Service Discovery client. */ /** A list of permanent presence extensions. */ StanzaExtensionList m_presenceExtensions; std::string m_selectedResource; /**< The currently selected resource. * See Client::selectResource() and Client::binRessource(). */ std::string m_clientCerts; /**< TLS client certificates. */ std::string m_clientKey; /**< TLS client private key. */ std::string m_namespace; /**< Default namespace. */ std::string m_password; /**< Client's password. */ std::string m_xmllang; /**< Default value of the xml:lang attribute. */ std::string m_server; /**< The server to connect to, if different from the * JID's server. */ std::string m_sid; /**< The stream ID. */ bool m_compressionActive; /**< Indicates whether or not stream compression * is currently activated. */ bool m_encryptionActive; /**< Indicates whether or not stream encryption * is currently activated. */ bool m_compress; /**< Whether stream compression * is desired at all. */ bool m_authed; /**< Whether authentication has been completed successfully. */ bool m_block; /**< Whether blocking connection is wanted. */ bool m_sasl; /**< Whether SASL authentication is wanted. */ TLSPolicy m_tls; /**< The current TLS policy. */ int m_port; /**< The port to connect to, if not to be determined * by querying the server's SRV records. */ int m_availableSaslMechs; /**< The SASL mechanisms the server offered. */ private: #ifdef CLIENTBASE_TEST public: #endif /** * @brief This is an implementation of an XMPP Ping (XEP-199). * * @author Jakob Schroeter * @since 1.0 */ class Ping : public StanzaExtension { public: /** * Constructs a new object. */ Ping(); /** * Destructor. */ virtual ~Ping(); // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { (void)tag; return new Ping(); } // reimplemented from StanzaExtension virtual Tag* tag() const { return new Tag( "ping", "xmlns", XMLNS_XMPP_PING ); } // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new Ping(); } }; ClientBase( const ClientBase& ); ClientBase& operator=( const ClientBase& ); /** * This function is called right after the opening <stream:stream> was received. */ virtual void handleStartNode() = 0; /** * This function is called for each Tag. Only stream initiation/negotiation should * be done here. * @param tag A Tag to handle. */ virtual bool handleNormalNode( Tag* tag ) = 0; virtual void rosterFilled() = 0; virtual void cleanup() {} virtual void handleIqIDForward( const IQ& iq, int context ) { (void) iq; (void) context; } void parse( const std::string& data ); void init(); void handleStreamError( Tag* tag ); TLSBase* getDefaultEncryption(); CompressionBase* getDefaultCompression(); void notifyIqHandlers( IQ& iq ); void notifyMessageHandlers( Message& msg ); void notifyPresenceHandlers( Presence& presence ); void notifySubscriptionHandlers( Subscription& s10n ); void notifyTagHandlers( Tag* tag ); void notifyOnDisconnect( ConnectionError e ); void send( const std::string& xml ); void addFrom( Tag* tag ); void addNamespace( Tag* tag ); // reimplemented from IqHandler virtual bool handleIq( const IQ& iq ); // reimplemented from IqHandler virtual void handleIqID( const IQ& iq, int context ); struct TrackStruct { IqHandler* ih; int context; bool del; }; struct TagHandlerStruct { TagHandler* th; std::string xmlns; std::string tag; }; struct JidPresHandlerStruct { JID* jid; PresenceHandler* ph; }; enum TrackContext { XMPPPing }; typedef std::list ConnectionListenerList; typedef std::multimap IqHandlerMapXmlns; typedef std::multimap IqHandlerMap; typedef std::map IqTrackMap; typedef std::map MessageHandlerMap; typedef std::list MessageSessionList; typedef std::list MessageHandlerList; typedef std::list PresenceHandlerList; typedef std::list PresenceJidHandlerList; typedef std::list SubscriptionHandlerList; typedef std::list TagHandlerList; ConnectionListenerList m_connectionListeners; IqHandlerMapXmlns m_iqNSHandlers; IqHandlerMap m_iqExtHandlers; IqTrackMap m_iqIDHandlers; MessageSessionList m_messageSessions; MessageHandlerList m_messageHandlers; PresenceHandlerList m_presenceHandlers; PresenceJidHandlerList m_presenceJidHandlers; SubscriptionHandlerList m_subscriptionHandlers; TagHandlerList m_tagHandlers; StringList m_cacerts; StatisticsHandler * m_statisticsHandler; MUCInvitationHandler * m_mucInvitationHandler; MessageSessionHandler * m_messageSessionHandlerChat; MessageSessionHandler * m_messageSessionHandlerGroupchat; MessageSessionHandler * m_messageSessionHandlerHeadline; MessageSessionHandler * m_messageSessionHandlerNormal; util::Mutex m_iqHandlerMapMutex; Parser m_parser; LogSink m_logInstance; StanzaExtensionFactory* m_seFactory; EventDispatcher m_dispatcher; AuthenticationError m_authError; StreamError m_streamError; StringMap m_streamErrorText; std::string m_streamErrorCData; Tag* m_streamErrorAppCondition; StatisticsStruct m_stats; SaslMechanism m_selectedSaslMech; std::string m_ntlmDomain; bool m_autoMessageSession; #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) CredHandle m_credHandle; CtxtHandle m_ctxtHandle; #endif }; } #endif // CLIENTBASE_H__ qutim-0.2.0/plugins/jabber/libs/gloox/sihandler.h0000644000175000017500000000367411273054312023435 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef SIHANDLER_H__ #define SIHANDLER_H__ #include "macros.h" #include "simanager.h" #include namespace gloox { class IQ; class Tag; class JID; /** * @brief An abstract base class to handle results of outgoing SI requests, i.e. you requested a stream * (using SIManager::requestSI()) to send a file to a remote entity. * * You should usually not need to use this class directly, unless your profile is not supported * by gloox. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API SIHandler { public: /** * Virtual destructor. */ virtual ~SIHandler() {} /** * This function is called to handle results of outgoing SI requests, i.e. you requested a stream * (using SIManager::requestSI()) to send a file to a remote entity. * @param from The remote SI receiver. * @param to The SI requestor. Usually oneself. Used in component scenario. * @param sid The stream ID. * @param si The request's complete SI. */ virtual void handleSIRequestResult( const JID& from, const JID& to, const std::string& sid, const SIManager::SI& si ) = 0; /** * This function is called to handle a request error or decline. * @param iq The complete error stanza. * @param sid The request's SID. */ virtual void handleSIRequestError( const IQ& iq, const std::string& sid ) = 0; }; } #endif // SIHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/tag.cpp0000644000175000017500000010327711273054312022572 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "tag.h" #include "util.h" #include #include namespace gloox { // ---- Tag::Attribute ---- Tag::Attribute::Attribute( Tag* parent, const std::string& name, const std::string& value, const std::string& xmlns ) : m_parent( parent ) { if( m_parent ) m_parent->addAttribute( this ); init( name, value, xmlns ); } Tag::Attribute::Attribute( const std::string& name, const std::string& value, const std::string& xmlns ) : m_parent( 0 ) { init( name, value, xmlns ); } Tag::Attribute::Attribute( const Attribute& attr ) : m_parent( attr.m_parent ), m_name( attr.m_name ), m_value( attr.m_value ), m_xmlns( attr.m_xmlns ), m_prefix( attr.m_prefix ) { } void Tag::Attribute::init( const std::string& name, const std::string& value, const std::string& xmlns ) { if( util::checkValidXMLChars( xmlns ) ) m_xmlns = xmlns; else return; if( util::checkValidXMLChars( value ) ) m_value = value; else return; if( util::checkValidXMLChars( name ) ) m_name = name; else return; } bool Tag::Attribute::setValue( const std::string& value ) { if( !util::checkValidXMLChars( value ) ) return false; m_value = value; return true; } bool Tag::Attribute::setXmlns( const std::string& xmlns ) { if( !util::checkValidXMLChars( xmlns ) ) return false; m_xmlns = xmlns; return true; } bool Tag::Attribute::setPrefix( const std::string& prefix ) { if( !util::checkValidXMLChars( prefix ) ) return false; m_prefix = prefix; return true; } const std::string& Tag::Attribute::xmlns() const { if( !m_xmlns.empty() ) return m_xmlns; if( m_parent ) return m_parent->xmlns( m_prefix ); return EmptyString; } const std::string& Tag::Attribute::prefix() const { if( !m_prefix.empty() ) return m_prefix; if( m_parent ) return m_parent->prefix( m_xmlns ); return EmptyString; } const std::string Tag::Attribute::xml() const { if( m_name.empty() ) return EmptyString; std::string xml; xml += ' '; if( !m_prefix.empty() ) { xml += m_prefix; xml += ':'; } xml += m_name; xml += "='"; xml += util::escape( m_value ); xml += '\''; return xml; } // ---- ~Tag::Attribute ---- // ---- Tag ---- Tag::Tag( const std::string& name, const std::string& cdata ) : m_parent( 0 ), m_children( 0 ), m_cdata( 0 ), m_attribs( 0 ), m_nodes( 0 ), m_xmlnss( 0 ) { addCData( cdata ); // implicitly UTF-8 checked if( util::checkValidXMLChars( name ) ) m_name = name; } Tag::Tag( Tag* parent, const std::string& name, const std::string& cdata ) : m_parent( parent ), m_children( 0 ), m_cdata( 0 ), m_attribs( 0 ), m_nodes( 0 ), m_xmlnss( 0 ) { if( m_parent ) m_parent->addChild( this ); addCData( cdata ); // implicitly UTF-8 checked if( util::checkValidXMLChars( name ) ) m_name = name; } Tag::Tag( const std::string& name, const std::string& attrib, const std::string& value ) : m_parent( 0 ), m_children( 0 ), m_cdata( 0 ), m_attribs( 0 ), m_nodes( 0 ), m_name( name ), m_xmlnss( 0 ) { addAttribute( attrib, value ); // implicitly UTF-8 checked if( util::checkValidXMLChars( name ) ) m_name = name; } Tag::Tag( Tag* parent, const std::string& name, const std::string& attrib, const std::string& value ) : m_parent( parent ), m_children( 0 ), m_cdata( 0 ), m_attribs( 0 ), m_nodes( 0 ), m_name( name ), m_xmlnss( 0 ) { if( m_parent ) m_parent->addChild( this ); addAttribute( attrib, value ); // implicitly UTF-8 checked if( util::checkValidXMLChars( name ) ) m_name = name; } Tag::Tag( Tag* tag ) : m_parent( 0 ), m_children( 0 ), m_cdata( 0 ), m_attribs( 0 ), m_nodes( 0 ), m_xmlnss( 0 ) { if( !tag ) return; m_children = tag->m_children; m_cdata = tag->m_cdata; m_attribs = tag->m_attribs; m_nodes = tag->m_nodes; m_name = tag->m_name; m_xmlns = tag->m_xmlns; m_xmlnss = tag->m_xmlnss; tag->m_nodes = 0; tag->m_cdata = 0; tag->m_attribs = 0; tag->m_children = 0; tag->m_xmlnss = 0; if( m_attribs ) { AttributeList::iterator it = m_attribs->begin(); while( it != m_attribs->end() ) (*it++)->m_parent = this; } if( m_children ) { TagList::iterator it = m_children->begin(); while( it != m_children->end() ) (*it++)->m_parent = this; } } Tag::~Tag() { if( m_cdata ) util::clearList( *m_cdata ); if( m_attribs ) util::clearList( *m_attribs ); if( m_children ) util::clearList( *m_children ); if( m_nodes ) util::clearList( *m_nodes ); delete m_cdata; delete m_attribs; delete m_children; delete m_nodes; delete m_xmlnss; m_parent = 0; } bool Tag::operator==( const Tag& right ) const { if( m_name != right.m_name || m_xmlns != right.m_xmlns ) return false; if( m_cdata && right.m_cdata ) { StringPList::const_iterator ct = m_cdata->begin(); StringPList::const_iterator ct_r = right.m_cdata->begin(); while( ct != m_cdata->end() && ct_r != right.m_cdata->end() && *(*ct) == *(*ct_r) ) { ++ct; ++ct_r; } if( ct != m_cdata->end() ) return false; } else if( m_cdata || right.m_cdata ) return false; if( m_children && right.m_children ) { TagList::const_iterator it = m_children->begin(); TagList::const_iterator it_r = right.m_children->begin(); while( it != m_children->end() && it_r != right.m_children->end() && *(*it) == *(*it_r) ) { ++it; ++it_r; } if( it != m_children->end() ) return false; } else if( m_children || right.m_children ) return false; if( m_attribs && right.m_attribs ) { AttributeList::const_iterator at = m_attribs->begin(); AttributeList::const_iterator at_r = right.m_attribs->begin(); while( at != m_attribs->end() && at_r != right.m_attribs->end() && *(*at) == *(*at_r) ) { ++at; ++at_r; } if( at != m_attribs->end() ) return false; } else if( m_attribs || right.m_attribs ) return false; return true; } const std::string Tag::xml() const { if( m_name.empty() ) return EmptyString; std::string xml = "<"; if( !m_prefix.empty() ) { xml += m_prefix; xml += ':'; } xml += m_name; if( m_attribs && !m_attribs->empty() ) { AttributeList::const_iterator it_a = m_attribs->begin(); for( ; it_a != m_attribs->end(); ++it_a ) { xml += (*it_a)->xml(); } } if( !m_nodes || m_nodes->empty() ) xml += "/>"; else { xml += '>'; NodeList::const_iterator it_n = m_nodes->begin(); for( ; it_n != m_nodes->end(); ++it_n ) { switch( (*it_n)->type ) { case TypeTag: xml += (*it_n)->tag->xml(); break; case TypeString: xml += util::escape( *((*it_n)->str) ); break; } } xml += "'; } return xml; } bool Tag::addAttribute( Attribute* attr ) { if( !attr ) return false; if( !(*attr) ) { delete attr; return false; } if( !m_attribs ) m_attribs = new AttributeList(); AttributeList::iterator it = m_attribs->begin(); for( ; it != m_attribs->end(); ++it ) { if( (*it)->name() == attr->name() && ( (*it)->xmlns() == attr->xmlns() || (*it)->prefix() == attr->prefix() ) ) { delete (*it); (*it) = attr; return true; } } m_attribs->push_back( attr ); return true; } bool Tag::addAttribute( const std::string& name, const std::string& value ) { if( name.empty() || value.empty() ) return false; return addAttribute( new Attribute( name, value ) ); } bool Tag::addAttribute( const std::string& name, int value ) { if( name.empty() ) return false; return addAttribute( name, util::int2string( value ) ); } bool Tag::addAttribute( const std::string& name, long value ) { if( name.empty() ) return false; return addAttribute( name, util::long2string( value ) ); } void Tag::setAttributes( const AttributeList& attributes ) { if( !m_attribs ) m_attribs = new AttributeList( attributes ); else { util::clearList( *m_attribs ); *m_attribs = attributes; } AttributeList::iterator it = m_attribs->begin(); for( ; it != m_attribs->end(); ++it ) (*it)->m_parent = this; } void Tag::addChild( Tag* child ) { if( !child ) return; if( !m_nodes ) m_nodes = new NodeList(); if( !m_children ) m_children = new TagList(); m_children->push_back( child ); child->m_parent = this; m_nodes->push_back( new Node( TypeTag, child ) ); } void Tag::addChildCopy( const Tag* child ) { if( !child ) return; addChild( child->clone() ); } bool Tag::setCData( const std::string& cdata ) { if( cdata.empty() || !util::checkValidXMLChars( cdata ) ) return false; if( !m_cdata ) m_cdata = new StringPList(); else util::clearList( *m_cdata ); if( !m_nodes ) m_nodes = new NodeList(); else { NodeList::iterator it = m_nodes->begin(); NodeList::iterator t; while( it != m_nodes->end() ) { if( (*it)->type == TypeString ) { t = it++; delete (*t); m_nodes->erase( t ); } } } return addCData( cdata ); } bool Tag::addCData( const std::string& cdata ) { if( cdata.empty() || !util::checkValidXMLChars( cdata ) ) return false; if( !m_cdata ) m_cdata = new StringPList(); if( !m_nodes ) m_nodes = new NodeList(); std::string* str = new std::string( cdata ); m_cdata->push_back( str ); m_nodes->push_back( new Node( TypeString, str ) ); return true; } const std::string Tag::cdata() const { if( !m_cdata ) return EmptyString; std::string str; StringPList::const_iterator it = m_cdata->begin(); for( ; it != m_cdata->end(); ++it ) str += *(*it); return str; } const TagList& Tag::children() const { static const TagList empty; return m_children ? *m_children : empty; } const Tag::AttributeList& Tag::attributes() const { static const AttributeList empty; return m_attribs ? *m_attribs : empty; } bool Tag::setXmlns( const std::string& xmlns, const std::string& prefix ) { if( !util::checkValidXMLChars( xmlns ) || !util::checkValidXMLChars( prefix ) ) return false; if( prefix.empty() ) { m_xmlns = xmlns; return addAttribute( XMLNS, m_xmlns ); } else { if( !m_xmlnss ) m_xmlnss = new StringMap(); (*m_xmlnss)[prefix] = xmlns; return addAttribute( XMLNS + ":" + prefix, xmlns ); } } const std::string& Tag::xmlns() const { return xmlns( m_prefix ); } const std::string& Tag::xmlns( const std::string& prefix ) const { if( prefix.empty() ) { return hasAttribute( XMLNS ) ? findAttribute( XMLNS ) : m_xmlns; } if( m_xmlnss ) { StringMap::const_iterator it = m_xmlnss->find( prefix ); if( it != m_xmlnss->end() ) return (*it).second; } return m_parent ? m_parent->xmlns( prefix ) : EmptyString; } bool Tag::setPrefix( const std::string& prefix ) { if( !util::checkValidXMLChars( prefix ) ) return false; m_prefix = prefix; return true; } const std::string& Tag::prefix( const std::string& xmlns ) const { if( xmlns.empty() || !m_xmlnss ) return EmptyString; StringMap::const_iterator it = m_xmlnss->begin(); for( ; it != m_xmlnss->end(); ++it ) { if( (*it).second == xmlns ) return (*it).first; } return EmptyString; } const std::string& Tag::findAttribute( const std::string& name ) const { if( !m_attribs ) return EmptyString; AttributeList::const_iterator it = m_attribs->begin(); for( ; it != m_attribs->end(); ++it ) if( (*it)->name() == name ) return (*it)->value(); return EmptyString; } bool Tag::hasAttribute( const std::string& name, const std::string& value ) const { if( name.empty() || !m_attribs ) return false; AttributeList::const_iterator it = m_attribs->begin(); for( ; it != m_attribs->end(); ++it ) if( (*it)->name() == name ) return value.empty() || (*it)->value() == value; return false; } bool Tag::hasChild( const std::string& name, const std::string& attr, const std::string& value ) const { if( attr.empty() ) return findChild( name ) ? true : false; else return findChild( name, attr, value ) ? true : false; } Tag* Tag::findChild( const std::string& name ) const { if( !m_children ) return 0; TagList::const_iterator it = m_children->begin(); while( it != m_children->end() && (*it)->name() != name ) ++it; return it != m_children->end() ? (*it) : 0; } Tag* Tag::findChild( const std::string& name, const std::string& attr, const std::string& value ) const { if( !m_children || name.empty() ) return 0; TagList::const_iterator it = m_children->begin(); while( it != m_children->end() && ( (*it)->name() != name || !(*it)->hasAttribute( attr, value ) ) ) ++it; return it != m_children->end() ? (*it) : 0; } bool Tag::hasChildWithCData( const std::string& name, const std::string& cdata ) const { if( !m_children || name.empty() || cdata.empty() ) return 0; TagList::const_iterator it = m_children->begin(); while( it != m_children->end() && ( (*it)->name() != name || ( !cdata.empty() && (*it)->cdata() != cdata ) ) ) ++it; return it != m_children->end(); } Tag* Tag::findChildWithAttrib( const std::string& attr, const std::string& value ) const { if( !m_children || attr.empty() ) return 0; TagList::const_iterator it = m_children->begin(); while( it != m_children->end() && !(*it)->hasAttribute( attr, value ) ) ++it; return it != m_children->end() ? (*it) : 0; } Tag* Tag::clone() const { Tag* t = new Tag( m_name ); t->m_xmlns = m_xmlns; t->m_prefix = m_prefix; if( m_attribs ) { t->m_attribs = new AttributeList(); Tag::AttributeList::const_iterator at = m_attribs->begin(); Attribute* attr; for( ; at != m_attribs->end(); ++at ) { attr = new Attribute( *(*at) ); attr->m_parent = t; t->m_attribs->push_back( attr ); } } if( m_xmlnss ) { t->m_xmlnss = new StringMap( *m_xmlnss ); } if( m_nodes ) { Tag::NodeList::const_iterator nt = m_nodes->begin(); for( ; nt != m_nodes->end(); ++nt ) { switch( (*nt)->type ) { case TypeTag: t->addChild( (*nt)->tag->clone() ); break; case TypeString: t->addCData( *((*nt)->str) ); break; } } } return t; } TagList Tag::findChildren( const std::string& name, const std::string& xmlns ) const { return m_children ? findChildren( *m_children, name, xmlns ) : TagList(); } TagList Tag::findChildren( const TagList& list, const std::string& name, const std::string& xmlns ) const { TagList ret; TagList::const_iterator it = list.begin(); for( ; it != list.end(); ++it ) { if( (*it)->name() == name && ( xmlns.empty() || (*it)->xmlns() == xmlns ) ) ret.push_back( (*it) ); } return ret; } void Tag::removeChild( const std::string& name, const std::string& xmlns ) { if( name.empty() || !m_children || !m_nodes ) return; TagList l = findChildren( name, xmlns ); TagList::iterator it = l.begin(); TagList::iterator it2; while( it != l.end() ) { it2 = it++; NodeList::iterator itn = m_nodes->begin(); for( ; itn != m_nodes->end(); ++itn ) { if( (*itn)->type == TypeTag && (*itn)->tag == (*it2) ) { delete (*itn); m_nodes->erase( itn ); break; } } m_children->remove( (*it2) ); delete (*it2); } } void Tag::removeChild( Tag* tag ) { if( m_children ) m_children->remove( tag ); if( !m_nodes ) return; NodeList::iterator it = m_nodes->begin(); for( ; it != m_nodes->end(); ++it ) { if( (*it)->type == TypeTag && (*it)->tag == tag ) { delete (*it); m_nodes->erase( it ); return; } } } void Tag::removeAttribute( const std::string& attr, const std::string& value, const std::string& xmlns ) { if( attr.empty() || !m_attribs ) return; AttributeList::iterator it = m_attribs->begin(); AttributeList::iterator it2; while( it != m_attribs->end() ) { it2 = it++; if( (*it2)->name() == attr && ( value.empty() || (*it2)->value() == value ) && ( xmlns.empty() || (*it2)->xmlns() == xmlns ) ) { delete (*it2); m_attribs->erase( it2 ); } } } const std::string Tag::findCData( const std::string& expression ) const { const ConstTagList& l = findTagList( expression ); return !l.empty() ? l.front()->cdata() : EmptyString; } const Tag* Tag::findTag( const std::string& expression ) const { const ConstTagList& l = findTagList( expression ); return !l.empty() ? l.front() : 0; } ConstTagList Tag::findTagList( const std::string& expression ) const { ConstTagList l; if( expression == "/" || expression == "//" ) return l; if( m_parent && expression.length() >= 2 && expression[0] == '/' && expression[1] != '/' ) return m_parent->findTagList( expression ); unsigned len = 0; Tag* p = parse( expression, len ); // if( p ) // printf( "parsed tree: %s\n", p->xml().c_str() ); l = evaluateTagList( p ); delete p; return l; } ConstTagList Tag::evaluateTagList( Tag* token ) const { ConstTagList result; if( !token ) return result; // printf( "evaluateTagList called in Tag %s and Token %s (type: %s)\n", name().c_str(), // token->name().c_str(), token->findAttribute( TYPE ).c_str() ); TokenType tokenType = (TokenType)atoi( token->findAttribute( TYPE ).c_str() ); switch( tokenType ) { case XTUnion: add( result, evaluateUnion( token ) ); break; case XTElement: { // printf( "in XTElement, token: %s\n", token->name().c_str() ); if( token->name() == name() || token->name() == "*" ) { // printf( "found %s\n", name().c_str() ); const TagList& tokenChildren = token->children(); if( tokenChildren.size() ) { bool predicatesSucceeded = true; TagList::const_iterator cit = tokenChildren.begin(); for( ; cit != tokenChildren.end(); ++cit ) { if( (*cit)->hasAttribute( "predicate", "true" ) ) { predicatesSucceeded = evaluatePredicate( (*cit) ); if( !predicatesSucceeded ) return result; } } bool hasElementChildren = false; cit = tokenChildren.begin(); for( ; cit != tokenChildren.end(); ++cit ) { if( (*cit)->hasAttribute( "predicate", "true" ) || (*cit)->hasAttribute( "number", "true" ) ) continue; hasElementChildren = true; // printf( "checking %d children of token %s\n", tokenChildren.size(), token->name().c_str() ); if( m_children && !m_children->empty() ) { TagList::const_iterator it = m_children->begin(); for( ; it != m_children->end(); ++it ) { add( result, (*it)->evaluateTagList( (*cit) ) ); } } else if( atoi( (*cit)->findAttribute( TYPE ).c_str() ) == XTDoubleDot && m_parent ) { (*cit)->addAttribute( TYPE, XTDot ); add( result, m_parent->evaluateTagList( (*cit) ) ); } } if( !hasElementChildren ) result.push_back( this ); } else { // printf( "adding %s to result set\n", name().c_str() ); result.push_back( this ); } } // else // printf( "found %s != %s\n", token->name().c_str(), name().c_str() ); break; } case XTDoubleSlash: { // printf( "in XTDoubleSlash\n" ); Tag* t = token->clone(); // printf( "original token: %s\ncloned token: %s\n", token->xml().c_str(), n->xml().c_str() ); t->addAttribute( TYPE, XTElement ); add( result, evaluateTagList( t ) ); const ConstTagList& res2 = allDescendants(); ConstTagList::const_iterator it = res2.begin(); for( ; it != res2.end(); ++it ) { add( result, (*it)->evaluateTagList( t ) ); } delete t; break; } case XTDot: { const TagList& tokenChildren = token->children(); if( !tokenChildren.empty() ) { add( result, evaluateTagList( tokenChildren.front() ) ); } else result.push_back( this ); break; } case XTDoubleDot: { // printf( "in XTDoubleDot\n" ); if( m_parent ) { const TagList& tokenChildren = token->children(); if( tokenChildren.size() ) { Tag* testtoken = tokenChildren.front(); if( testtoken->name() == "*" ) { add( result, m_parent->evaluateTagList( testtoken ) ); } else { Tag* t = token->clone(); t->addAttribute( TYPE, XTElement ); t->m_name = m_parent->m_name; add( result, m_parent->evaluateTagList( t ) ); delete t; } } else { result.push_back( m_parent ); } } } case XTInteger: { const TagList& l = token->children(); if( !l.size() ) break; const ConstTagList& res = evaluateTagList( l.front() ); int pos = atoi( token->name().c_str() ); // printf( "checking index %d\n", pos ); if( pos > 0 && pos <= (int)res.size() ) { ConstTagList::const_iterator it = res.begin(); while ( --pos ) { ++it; } result.push_back( *it ); } break; } default: break; } return result; } bool Tag::evaluateBoolean( Tag* token ) const { if( !token ) return false; bool result = false; TokenType tokenType = (TokenType)atoi( token->findAttribute( TYPE ).c_str() ); switch( tokenType ) { case XTAttribute: if( token->name() == "*" && m_attribs && m_attribs->size() ) result = true; else result = hasAttribute( token->name() ); break; case XTOperatorEq: result = evaluateEquals( token ); break; case XTOperatorLt: break; case XTOperatorLtEq: break; case XTOperatorGtEq: break; case XTOperatorGt: break; case XTUnion: case XTElement: { Tag* t = new Tag( "." ); t->addAttribute( TYPE, XTDot ); t->addChild( token ); result = !evaluateTagList( t ).empty(); t->removeChild( token ); delete t; break; } default: break; } return result; } bool Tag::evaluateEquals( Tag* token ) const { if( !token || token->children().size() != 2 ) return false; bool result = false; TagList::const_iterator it = token->children().begin(); Tag* ch1 = (*it); Tag* ch2 = (*++it); TokenType tt1 = (TokenType)atoi( ch1->findAttribute( TYPE ).c_str() ); TokenType tt2 = (TokenType)atoi( ch2->findAttribute( TYPE ).c_str() ); switch( tt1 ) { case XTAttribute: switch( tt2 ) { case XTInteger: case XTLiteral: result = ( findAttribute( ch1->name() ) == ch2->name() ); break; case XTAttribute: result = ( hasAttribute( ch1->name() ) && hasAttribute( ch2->name() ) && findAttribute( ch1->name() ) == findAttribute( ch2->name() ) ); break; default: break; } break; case XTInteger: case XTLiteral: switch( tt2 ) { case XTAttribute: result = ( ch1->name() == findAttribute( ch2->name() ) ); break; case XTLiteral: case XTInteger: result = ( ch1->name() == ch2->name() ); break; default: break; } break; default: break; } return result; } ConstTagList Tag::allDescendants() const { ConstTagList result; if( !m_children ) return result; TagList::const_iterator it = m_children->begin(); for( ; it != m_children->end(); ++it ) { result.push_back( (*it) ); add( result, (*it)->allDescendants() ); } return result; } ConstTagList Tag::evaluateUnion( Tag* token ) const { ConstTagList result; if( !token ) return result; const TagList& l = token->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { add( result, evaluateTagList( (*it) ) ); } return result; } void Tag::closePreviousToken( Tag** root, Tag** current, Tag::TokenType& type, std::string& tok ) const { if( !tok.empty() ) { addToken( root, current, type, tok ); type = XTElement; tok = EmptyString; } } Tag* Tag::parse( const std::string& expression, unsigned& len, Tag::TokenType border ) const { Tag* root = 0; Tag* current = root; std::string token; // XPathError error = XPNoError; // XPathState state = Init; // int expected = 0; // bool run = true; // bool ws = false; Tag::TokenType type = XTElement; char c; for( ; len < expression.length(); ++len ) { c = expression[len]; if( type == XTLiteralInside && c != '\'' ) { token += c; continue; } switch( c ) { case '/': closePreviousToken( &root, ¤t, type, token ); if( len < expression.length()-1 && expression[len+1] == '/' ) { // addToken( &root, ¤t, XTDoubleSlash, "//" ); type = XTDoubleSlash; ++len; } // else // { // if( !current ) // addToken( &root, ¤t, XTSlash, "/" ); // } break; case ']': closePreviousToken( &root, ¤t, type, token ); return root; case '[': { closePreviousToken( &root, ¤t, type, token ); Tag* t = parse( expression, ++len, XTRightBracket ); if( !addPredicate( &root, ¤t, t ) ) delete t; break; } case '(': { closePreviousToken( &root, ¤t, type, token ); Tag* t = parse( expression, ++len, XTRightParenthesis ); if( current ) { // printf( "added %s to %s\n", t->xml().c_str(), current->xml().c_str() ); t->addAttribute( "argument", "true" ); current->addChild( t ); } else { root = t; // printf( "made %s new root\n", t->xml().c_str() ); } break; } case ')': closePreviousToken( &root, ¤t, type, token ); ++len; return root; case '\'': if( type == XTLiteralInside ) if( expression[len - 2] == '\\' ) token[token.length() - 2] = c; else type = XTLiteral; else type = XTLiteralInside; break; case '@': type = XTAttribute; break; case '.': token += c; if( token.size() == 1 ) { if( len < expression.length()-1 && expression[len+1] == '.' ) { type = XTDoubleDot; ++len; token += c; } else { type = XTDot; } } break; case '*': // if( !root || ( current && ( current->tokenType() == XTSlash // || current->tokenType() == XTDoubleSlash ) ) ) // { // addToken( &root, ¤t, type, "*" ); // break; // } addToken( &root, ¤t, type, "*" ); type = XTElement; break; case '+': case '>': case '<': case '=': case '|': { closePreviousToken( &root, ¤t, type, token ); std::string s( 1, c ); Tag::TokenType ttype = getType( s ); if( ttype <= border ) return root; Tag* t = parse( expression, ++len, ttype ); addOperator( &root, ¤t, t, ttype, s ); if( border == XTRightBracket ) return root; break; } default: token += c; } } if( !token.empty() ) addToken( &root, ¤t, type, token ); // if( error != XPNoError ) // printf( "error: %d\n", error ); return root; } void Tag::addToken( Tag **root, Tag **current, Tag::TokenType type, const std::string& token ) const { Tag* t = new Tag( token ); if( t->isNumber() && !t->children().size() ) type = XTInteger; t->addAttribute( TYPE, type ); if( *root ) { // printf( "new current %s, type: %d\n", token.c_str(), type ); (*current)->addChild( t ); *current = t; } else { // printf( "new root %s, type: %d\n", token.c_str(), type ); *current = *root = t; } } void Tag::addOperator( Tag** root, Tag** current, Tag* arg, Tag::TokenType type, const std::string& token ) const { Tag* t = new Tag( token ); t->addAttribute( TYPE, type ); // printf( "new operator: %s (arg1: %s, arg2: %s)\n", t->name().c_str(), (*root)->xml().c_str(), // arg->xml().c_str() ); t->addAttribute( "operator", "true" ); t->addChild( *root ); t->addChild( arg ); *current = *root = t; } bool Tag::addPredicate( Tag **root, Tag **current, Tag* token ) const { if( !*root || !*current ) return false; if( ( token->isNumber() && !token->children().size() ) || token->name() == "+" ) { // printf( "found Index %s, full: %s\n", token->name().c_str(), token->xml().c_str() ); if( !token->hasAttribute( "operator", "true" ) ) { token->addAttribute( TYPE, XTInteger ); } if( *root == *current ) { *root = token; // printf( "made Index new root\n" ); } else { (*root)->removeChild( *current ); (*root)->addChild( token ); // printf( "added Index somewhere between root and current\n" ); } token->addChild( *current ); // printf( "added Index %s, full: %s\n", token->name().c_str(), token->xml().c_str() ); } else { token->addAttribute( "predicate", "true" ); (*current)->addChild( token ); } return true; } Tag::TokenType Tag::getType( const std::string& c ) { if( c == "|" ) return XTUnion; if( c == "<" ) return XTOperatorLt; if( c == ">" ) return XTOperatorGt; if( c == "*" ) return XTOperatorMul; if( c == "+" ) return XTOperatorPlus; if( c == "=" ) return XTOperatorEq; return XTNone; } bool Tag::isWhitespace( const char c ) { return ( c == 0x09 || c == 0x0a || c == 0x0d || c == 0x20 ); } bool Tag::isNumber() const { if( m_name.empty() ) return false; std::string::size_type l = m_name.length(); std::string::size_type i = 0; while( i < l && isdigit( m_name[i] ) ) ++i; return i == l; } void Tag::add( ConstTagList& one, const ConstTagList& two ) { ConstTagList::const_iterator it = two.begin(); for( ; it != two.end(); ++it ) if( std::find( one.begin(), one.end(), (*it) ) == one.end() ) one.push_back( (*it) ); } } qutim-0.2.0/plugins/jabber/libs/gloox/socks5bytestreamserver.h0000644000175000017500000001016411273054312026212 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef SOCKS5BYTESTREAMSERVER_H__ #define SOCKS5BYTESTREAMSERVER_H__ #include "macros.h" #include "connectionhandler.h" #include "logsink.h" #include "mutex.h" namespace gloox { class ConnectionTCPServer; /** * @brief A server listening for SOCKS5 bytestreams. * * @note You can use a single SOCKS5BytestreamServer instance with multiple Client objects. * * @note It is safe to put a SOCKS5BytestreamServer instance into a separate thread. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API SOCKS5BytestreamServer : public ConnectionHandler, public ConnectionDataHandler { friend class SOCKS5BytestreamManager; public: /** * Constructs a new SOCKS5BytestreamServer. * @param logInstance A LogSink to use. * @param port The local port to listen on. * @param ip The local IP to bind to. If empty, the server will listen on all local interfaces. */ SOCKS5BytestreamServer( const LogSink& logInstance, int port, const std::string& ip = EmptyString ); /** * Destructor. */ ~SOCKS5BytestreamServer(); /** * Starts listening on the specified interface and port. * @return Returns @c ConnNoError on success, @c ConnIoError on failure (e.g. if the port * is already in use). */ ConnectionError listen(); /** * Call this function repeatedly to check for incoming connections and to negotiate * them. * @param timeout The timeout to use for select in microseconds. * @return The state of the listening socket. */ ConnectionError recv( int timeout ); /** * Stops listening and unbinds from the interface and port. */ void stop(); /** * Expose our TCP Connection localPort * Returns the local port. * @return The local port. */ int localPort() const; /** * Expose our TCP Connection localInterface * Returns the locally bound IP address. * @return The locally bound IP address. */ const std::string localInterface() const; // reimplemented from ConnectionHandler virtual void handleIncomingConnection( ConnectionBase* server, ConnectionBase* connection ); // reimplemented from ConnectionDataHandler virtual void handleReceivedData( const ConnectionBase* connection, const std::string& data ); // reimplemented from ConnectionDataHandler virtual void handleConnect( const ConnectionBase* connection ); // reimplemented from ConnectionDataHandler virtual void handleDisconnect( const ConnectionBase* connection, ConnectionError reason ); private: SOCKS5BytestreamServer& operator=( const SOCKS5BytestreamServer& ); void registerHash( const std::string& hash ); void removeHash( const std::string& hash ); ConnectionBase* getConnection( const std::string& hash ); enum NegotiationState { StateDisconnected, StateUnnegotiated, StateAuthmethodAccepted, StateAuthAccepted, StateDestinationAccepted, StateActive }; struct ConnectionInfo { NegotiationState state; std::string hash; }; typedef std::map ConnectionMap; ConnectionMap m_connections; typedef std::list ConnectionList; ConnectionList m_oldConnections; typedef std::list HashMap; HashMap m_hashes; ConnectionTCPServer* m_tcpServer; util::Mutex m_mutex; const LogSink& m_logInstance; std::string m_ip; int m_port; }; } #endif // SOCKS5BYTESTREAMSERVER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/dataformfield.h0000644000175000017500000002221011273054312024250 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef DATAFORMFIELD_H__ #define DATAFORMFIELD_H__ #include "gloox.h" #include #include namespace gloox { class Tag; /** * @brief An abstraction of a single field in a XEP-0004 Data Form. * * @author Jakob Schroeter * @since 0.7 */ class GLOOX_API DataFormField { public: /** * Describes the possible types of a Data Form Field. */ enum FieldType { TypeBoolean, /**< The field enables an entity to gather or provide an either-or * choice between two options. The default value is "false". */ TypeFixed, /**< The field is intended for data description (e.g., * human-readable text such as "section" headers) rather than data * gathering or provision. The <value/> child SHOULD NOT contain * newlines (the \\n and \\r characters); instead an application SHOULD * generate multiple fixed fields, each with one <value/> child. */ TypeHidden, /**< The field is not shown to the entity providing information, but * instead is returned with the form. */ TypeJidMulti, /**< The field enables an entity to gather or provide multiple Jabber * IDs.*/ TypeJidSingle, /**< The field enables an entity to gather or provide a single Jabber * ID.*/ TypeListMulti, /**< The field enables an entity to gather or provide one or more options * from among many. */ TypeListSingle, /**< The field enables an entity to gather or provide one option from * among many. */ TypeTextMulti, /**< The field enables an entity to gather or provide multiple lines of * text. */ TypeTextPrivate, /**< The field enables an entity to gather or provide a single line or * word of text, which shall be obscured in an interface * (e.g., *****). */ TypeTextSingle, /**< The field enables an entity to gather or provide a single line or * word of text, which may be shown in an interface. This field type is * the default and MUST be assumed if an entity receives a field type it * does not understand.*/ TypeNone, /**< The field is child of either a <reported> or <item> * element or has no type attribute. */ TypeInvalid /**< The field is invalid. Only possible if the field was created from * a Tag not correctly describing a Data Form Field. */ }; public: /** * Constructs a new DataForm field. * @param type The type of the field. Default: text-single. */ DataFormField( FieldType type = TypeTextSingle ); /** * Constructs a new DataForm field and fills it with the given values. * @param name The field's name (the value of the 'var' attribute). * @param value The field's value. * @param label The field's label. * @param type The field's type. * @since 0.9 */ DataFormField( const std::string& name, const std::string& value = EmptyString, const std::string& label = EmptyString, FieldType type = TypeTextSingle ); /** * Constructs a new Data Form Field from an existing tag that describes a field. * @param tag The tag to parse. */ DataFormField( const Tag* tag ); /** * Virtual destructor. */ virtual ~DataFormField(); /** * Use this function to retrieve the optional values of a field. * @return The options of a field. */ const StringMultiMap& options() const { return m_options; } /** * Use this function to create a Tag representation of the form field. This is usually called by * DataForm. * @return A Tag hierarchically describing the form field, or NULL if the field is invalid (i.e. * created from a Tag not correctly describing a Data Form Field). */ virtual Tag* tag() const; /** * Use this function to retrieve the name of the field (the content of the 'var' attribute). * @return The name of the field. */ const std::string& name() const { return m_name; } /** * Sets the name (the content of the 'var' attribute) of the field. The name identifies the * field uniquely in the form. * @param name The new name of the field. * @note Fields of type other than 'fixed' MUST have a name, if it is 'fixed', it MAY. */ void setName( const std::string& name ) { m_name = name; } /** * Use this function to set the optional values of the field. The key of the map * will be used as the label of the option, while the value will be used as ... the * value. ;) * @param options The optional values of a list* or *multi type of field. */ void setOptions( const StringMultiMap& options ) { m_options = options; } /** * Adds a single option to the list of options. * @param label The label of the option. * @param value The value of the option. * @since 0.9.4 */ void addOption( const std::string& label, const std::string& value ) { m_options.insert( std::make_pair( label, value ) ); } /** * Use this function to determine whether or not this field is required. * @return Whether or not this field is required. */ bool required() const { return m_required; } /** * Use this field to set this field to be required. * @param required Whether or not this field is required. */ void setRequired( bool required ) { m_required = required; } /** * Use this function to retrieve the describing label of this field. * @return The describing label of this field. */ const std::string& label() const { return m_label; } /** * Use this function to set the describing label of this field. * @param label The describing label of this field. */ void setLabel( const std::string& label ) { m_label = label; } /** * Use this function to retrieve the description of this field. * @return The description of this field */ const std::string& description() const { return m_desc; } /** * Use this function to set the description of this field. * @param desc The description of this field. */ void setDescription( const std::string& desc ) { m_desc = desc; } /** * Use this function to retrieve the value of this field. * @return The value of this field. */ const std::string& value() const { return ( m_values.size() > 0 ) ? m_values.front() : EmptyString; } /** * Use this function to set the value of this field. * @param value The new value of this field. */ void setValue( const std::string& value ) { m_values.clear(); addValue( value ); } /** * Use this function to retrieve the values of this field, if its of type 'text-multi'. * @return The value of this field. */ const StringList& values() const { return m_values; } /** * Use this function to set multiple values of this field, if it is of type 'text-multi'. If its not, * use @ref setValue() instead. * @param values The new values of this field. */ void setValues( const StringList& values ) { m_values = values; } /** * Adds a single value to the list of values. * @param value The value to add. */ void addValue( const std::string& value ) { m_values.push_back( value ); } /** * Use this function to retrieve the type of this field. * @return The type of this field. */ FieldType type() const { return m_type; } /** * Converts to @b true if the FormBase is valid, @b false otherwise. */ operator bool() const { return m_type != TypeInvalid; } private: FieldType m_type; StringMultiMap m_options; StringList m_values; std::string m_name; std::string m_desc; std::string m_label; bool m_required; }; } #endif // DATAFORMFIELD_H__ qutim-0.2.0/plugins/jabber/libs/gloox/uniquemucroom.h0000644000175000017500000000650411273054312024367 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef UNIQUEMUCROOM_H__ #define UNIQUEMUCROOM_H__ #include "instantmucroom.h" #include "stanzaextension.h" namespace gloox { /** * @brief This class implements a unique MUC room. * * A unique MUC room is a room with a non-human-readable name. It is primarily intended * to be used when converting one-to-one chats to multi-user chats. * * XEP version: 1.21 * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API UniqueMUCRoom : public InstantMUCRoom { public: /** * Creates a new abstraction of a @b unique Multi-User Chat room. The room is not joined * automatically. Use join() to join the room, use leave() to leave it. See MUCRoom for * detailed info. * @param parent The ClientBase object to use for the communication. * @param nick The service to create the room on plus the desired nickname in the form * @b service/nick. * @param mrh The MUCRoomHandler that will listen to room events. May be 0 and may be specified * later using registerMUCRoomHandler(). However, without one, MUC is no joy. * @note To subsequently configure the room, use MUCRoom::registerMUCRoomConfigHandler(). */ UniqueMUCRoom( ClientBase* parent, const JID& nick, MUCRoomHandler* mrh ); /** * Virtual Destructor. */ virtual ~UniqueMUCRoom(); // reimplemented from MUCRoom virtual void join(); private: #ifdef UNIQUEMUCROOM_TEST public: #endif /** * @brief A stanza extension wrapping MUC's <unique> element. * * @author Jakob Schroeter * @since 1.0 */ class Unique : public StanzaExtension { public: /** * Creates a new object from the given Tag. * @param tag The Tag to parse. */ Unique( const Tag* tag = 0 ); /** *Virtual Destructor. */ virtual ~Unique() {} /** * Returns the unique name created by the server. * @return The server-created unique room name. */ const std::string& name() const { return m_name; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new Unique( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new Unique( *this ); } private: std::string m_name; }; // reimplemented from MUCRoom (IqHandler) void handleIqID( const IQ& iq, int context ); }; } #endif // UNIQUEMUCROOM_H__ qutim-0.2.0/plugins/jabber/libs/gloox/instantmucroom.h0000644000175000017500000000351411273054312024537 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef INSTANTMUCROOM_H__ #define INSTANTMUCROOM_H__ #include "mucroom.h" namespace gloox { /** * @brief This class implements an instant MUC room. * * XEP version: 1.21 * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API InstantMUCRoom : public MUCRoom { public: /** * Creates a new abstraction of a @b unique Multi-User Chat room. The room is not joined * automatically. Use join() to join the room, use leave() to leave it. See MUCRoom for * detailed info. * @param parent The ClientBase object to use for the communication. * @param nick The room's name and service plus the desired nickname in the form * room\@service/nick. * @param mrh The MUCRoomHandler that will listen to room events. May be 0 and may be specified * later using registerMUCRoomHandler(). However, without one, MUC is no joy. * @note To subsequently configure the room, use MUCRoom::registerMUCRoomConfigHandler(). */ InstantMUCRoom( ClientBase* parent, const JID& nick, MUCRoomHandler* mrh ); /** * Virtual Destructor. */ virtual ~InstantMUCRoom(); protected: // reimplemented from MUCRoom (acknowledges instant room creation w/o a // call to the MUCRoomConfigHandler) virtual bool instantRoomHook() const { return true; } }; } #endif // INSTANTMUCROOM_H__ qutim-0.2.0/plugins/jabber/libs/gloox/stanzaextensionfactory.cpp0000644000175000017500000000373611273054312026643 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "stanzaextensionfactory.h" #include "gloox.h" #include "util.h" #include "stanza.h" #include "stanzaextension.h" #include "tag.h" namespace gloox { StanzaExtensionFactory::StanzaExtensionFactory() { } StanzaExtensionFactory::~StanzaExtensionFactory() { util::clearList( m_extensions ); } void StanzaExtensionFactory::registerExtension( StanzaExtension* ext ) { if( !ext ) return; SEList::iterator it = m_extensions.begin(); SEList::iterator it2; while( it != m_extensions.end() ) { it2 = it++; if( ext->extensionType() == (*it2)->extensionType() ) { delete (*it2); m_extensions.erase( it2 ); } } m_extensions.push_back( ext ); } bool StanzaExtensionFactory::removeExtension( int ext ) { SEList::iterator it = m_extensions.begin(); for( ; it != m_extensions.end(); ++it ) { if( (*it)->extensionType() == ext ) { delete (*it); m_extensions.erase( it ); return true; } } return false; } void StanzaExtensionFactory::addExtensions( Stanza& stanza, Tag* tag ) { ConstTagList::const_iterator it; SEList::const_iterator ite = m_extensions.begin(); for( ; ite != m_extensions.end(); ++ite ) { const ConstTagList& match = tag->findTagList( (*ite)->filterString() ); it = match.begin(); for( ; it != match.end(); ++it ) { StanzaExtension* se = (*ite)->newInstance( (*it) ); if( se ) stanza.addExtension( se ); } } } } qutim-0.2.0/plugins/jabber/libs/gloox/lastactivity.h0000644000175000017500000001114711273054312024176 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef LASTACTIVITY_H__ #define LASTACTIVITY_H__ #include "iqhandler.h" #include namespace gloox { class JID; class ClientBase; class LastActivityHandler; /** * @brief This is an implementation of XEP-0012 (Last Activity) for both clients and components. * * LastActivity can be used to query remote entities about their last activity time as well * as answer incoming last-activity-queries. * * XEP Version: 2.0 * * @author Jakob Schroeter * @since 0.6 */ class GLOOX_API LastActivity : public IqHandler { public: /** * @brief This is an abstraction of a LastActivity Query that * can be used in XEP-0012 as well as XEP-0256. * * XEP-Version: 2.0 (XEP-0012) * XEP-Version: 0.1 (XEP-0256) * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API Query : public StanzaExtension { public: /** * Constructs a new Query object from the given Tag. * @param tag The Tag to parse. */ Query( const Tag* tag = 0 ); /** * Constructs a new Query object from the given long. * @param status A status message. * @param seconds The number of seconds since last activity. */ Query( const std::string& status, long seconds ); /** * Virtual destructor. */ virtual ~Query(); /** * Returns the number of seconds since last activity. * @return The number of seconds since last activity. * -1 if last activity is unknown. */ long seconds() const { return m_seconds; } /** * Returns the last status message if the user is offline * and specified a status message when logging off. * @return The last status message, if any. */ const std::string& status() const { return m_status; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new Query( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { return new Query( *this ); } private: long m_seconds; std::string m_status; }; /** * Constructs a new LastActivity object. * @param parent The ClientBase object to use for communication. */ LastActivity( ClientBase* parent ); /** * Virtual destructor. */ virtual ~LastActivity(); /** * Queries the given JID for their last activity. The result can be received by reimplementing * @ref LastActivityHandler::handleLastActivityResult() and * @ref LastActivityHandler::handleLastActivityError(). */ void query( const JID& jid ); /** * Use this function to register an object as handler for incoming results of Last-Activity queries. * Only one handler is possible at a time. * @param lah The object to register as handler. */ void registerLastActivityHandler( LastActivityHandler* lah ) { m_lastActivityHandler = lah; } /** * Use this function to un-register the LastActivityHandler set earlier. */ void removeLastActivityHandler() { m_lastActivityHandler = 0; } /** * Use this function to reset the idle timer. By default the number of seconds since the * instantiation will be used. */ void resetIdleTimer(); // reimplemented from IqHandler virtual bool handleIq( const IQ& iq ); // reimplemented from IqHandler virtual void handleIqID( const IQ& iq, int context ); private: #ifdef LASTACTIVITY_TEST public: #endif LastActivityHandler* m_lastActivityHandler; ClientBase* m_parent; time_t m_active; }; } #endif // LASTACTIVITY_H__ qutim-0.2.0/plugins/jabber/libs/gloox/registrationhandler.h0000644000175000017500000001332611273054312025527 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef REGISTRATIONHANDLER_H__ #define REGISTRATIONHANDLER_H__ #include "oob.h" #include namespace gloox { class OOB; class JID; class DataForm; /** * Possible results of a XEP-0077 operation. */ enum RegistrationResult { RegistrationSuccess = 0, /**< The last operation (account registration, account * deletion or password change) was successful. */ RegistrationNotAcceptable, /**< 406: Not all necessary information provided */ RegistrationConflict, /**< 409: Username alreday exists. */ RegistrationNotAuthorized, /**< Account removal: Unregistered entity waits too long * before authentication or performs tasks other than * authentication after registration.
* Password change: The server or service does not consider * the channel safe enough to enable a password change. */ RegistrationBadRequest, /**< Account removal: The <remove/> element was not * the only child element of the <query/> element. * Should not happen when only gloox functions are being * used.
* Password change: The password change request does not * contain complete information (both <username/> and * <password/> are required). */ RegistrationForbidden, /**< Account removal: The sender does not have sufficient * permissions to cancel the registration. */ RegistrationRequired, /**< Account removal: The entity sending the remove * request was not previously registered. */ RegistrationUnexpectedRequest, /**< Account removal: The host is an instant messaging * server and the IQ get does not contain a 'from' * address because the entity is not registered with * the server.
* Password change: The host is an instant messaging * server and the IQ set does not contain a 'from' * address because the entity is not registered with * the server. */ RegistrationNotAllowed, /**< Password change: The server or service does not allow * password changes. */ RegistrationUnknownError /**< An unknown error condition occured. */ }; /** * @brief A virtual interface that receives events from an Registration object. * * Derived classes can be registered as RegistrationHandlers with an * Registration object. Incoming results for operations initiated through * the Registration object are forwarded to this handler. * * @author Jakob Schroeter * @since 0.2 */ class GLOOX_API RegistrationHandler { public: /** * Virtual Destructor. */ virtual ~RegistrationHandler() {} /** * Reimplement this function to receive results of the * @ref Registration::fetchRegistrationFields() function. * @param from The server or service the registration fields came from. * @param fields The OR'ed fields the server requires. From @ref Registration::fieldEnum. * @param instructions Any additional information the server sends along. */ virtual void handleRegistrationFields( const JID& from, int fields, std::string instructions ) = 0; /** * This function is called if @ref Registration::createAccount() was called on an authenticated * stream and the server lets us know about this. */ virtual void handleAlreadyRegistered( const JID& from ) = 0; /** * This funtion is called to notify about the result of an operation. * @param from The server or service the result came from. * @param regResult The result of the last operation. */ virtual void handleRegistrationResult( const JID& from, RegistrationResult regResult ) = 0; /** * This function is called additionally to @ref handleRegistrationFields() if the server * supplied a data form together with legacy registration fields. * @param from The server or service the data form came from. * @param form The DataForm containing registration information. */ virtual void handleDataForm( const JID& from, const DataForm& form ) = 0; /** * This function is called if the server does not offer in-band registration * but wants to refer the user to an external URL. * @param from The server or service the referal came from. * @param oob The OOB object describing the external URL. */ virtual void handleOOB( const JID& from, const OOB& oob ) = 0; }; } #endif // REGISTRATIONHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/connectiontcpserver.h0000644000175000017500000000420711273054312025552 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef CONNECTIONTCPSERVER_H__ #define CONNECTIONTCPSERVER_H__ #include "gloox.h" #include "connectiontcpbase.h" #include "logsink.h" #include namespace gloox { class ConnectionHandler; /** * @brief This is an implementation of a simple listening TCP connection. * * You should not need to use this class directly. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API ConnectionTCPServer : public ConnectionTCPBase { public: /** * Constructs a new ConnectionTCPServer object. * @param ch An ConnectionHandler-derived object that will handle incoming connections. * @param logInstance The log target. Obtain it from ClientBase::logInstance(). * @param ip The local IP address to listen on. This must @b not be a hostname. * Leave this empty to listen on all local interfaces. * @param port The port to listen on. */ ConnectionTCPServer( ConnectionHandler* ch, const LogSink& logInstance, const std::string& ip, int port ); /** * Virtual destructor */ virtual ~ConnectionTCPServer(); // reimplemented from ConnectionBase virtual ConnectionError recv( int timeout = -1 ); /** * This function actually starts @c listening on the port given in the * constructor. */ // reimplemented from ConnectionBase virtual ConnectionError connect(); // reimplemented from ConnectionBase virtual ConnectionBase* newInstance() const; private: ConnectionTCPServer &operator=( const ConnectionTCPServer & ); ConnectionHandler* m_connectionHandler; }; } #endif // CONNECTIONTCPSERVER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/md5.cpp0000644000175000017500000003375011273054312022502 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ /* This class is based on a C implementation of the MD5 algorithm written by L. Peter Deutsch. The full notice as shipped with the original verson is included below. */ /* Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. L. Peter Deutsch ghost@aladdin.com */ /* $Id: md5.c,v 1.6 2002/04/13 19:20:28 lpd Exp $ */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321, whose text is available at http://www.ietf.org/rfc/rfc1321.txt The code is derived from the text of the RFC, including the test suite (section A.5) but excluding the rest of Appendix A. It does not include any code or documentation that is identified in the RFC as being copyrighted. The original and principal author of md5.c is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order either statically or dynamically; added missing #include in library. 2002-03-11 lpd Corrected argument list for main(), and added int return type, in test program and T value program. 2002-02-21 lpd Added missing #include in test program. 2000-07-03 lpd Patched to eliminate warnings about "constant is unsigned in ANSI C, signed in traditional"; made test program self-checking. 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). 1999-05-03 lpd Original version. */ #include "config.h" #include "md5.h" #include #include #include // [s]print[f] namespace gloox { // #undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */ // #ifdef ARCH_IS_BIG_ENDIAN // # define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1) // #else // # define BYTE_ORDER 0 // #endif #undef BYTE_ORDER #define BYTE_ORDER 0 #define T_MASK ((unsigned int)~0) #define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87) #define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9) #define T3 0x242070db #define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111) #define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050) #define T6 0x4787c62a #define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec) #define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe) #define T9 0x698098d8 #define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850) #define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e) #define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841) #define T13 0x6b901122 #define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c) #define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71) #define T16 0x49b40821 #define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d) #define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf) #define T19 0x265e5a51 #define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855) #define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2) #define T22 0x02441453 #define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e) #define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437) #define T25 0x21e1cde6 #define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829) #define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278) #define T28 0x455a14ed #define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa) #define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07) #define T31 0x676f02d9 #define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375) #define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd) #define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e) #define T35 0x6d9d6122 #define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3) #define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb) #define T38 0x4bdecfa9 #define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f) #define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f) #define T41 0x289b7ec6 #define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805) #define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a) #define T44 0x04881d05 #define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6) #define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a) #define T47 0x1fa27cf8 #define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a) #define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb) #define T50 0x432aff97 #define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58) #define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6) #define T53 0x655b59c3 #define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d) #define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82) #define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e) #define T57 0x6fa87e4f #define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f) #define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb) #define T60 0x4e0811a1 #define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d) #define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca) #define T63 0x2ad7d2bb #define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e) const unsigned char MD5::pad[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; MD5::MD5() : m_finished( false ) { init(); } MD5::~MD5() { } void MD5::process( const unsigned char* data /*[64]*/ ) { unsigned int a = m_state.abcd[0]; unsigned int b = m_state.abcd[1]; unsigned int c = m_state.abcd[2]; unsigned int d = m_state.abcd[3]; unsigned int t; #if BYTE_ORDER > 0 /* Define storage only for big-endian CPUs. */ unsigned int X[16]; #else /* Define storage for little-endian or both types of CPUs. */ unsigned int xbuf[16]; const unsigned int *X; #endif { #if BYTE_ORDER == 0 /* * Determine dynamically whether this is a big-endian or * little-endian machine, since we can use a more efficient * algorithm on the latter. */ static const int w = 1; if( *((const unsigned char *)&w) ) /* dynamic little-endian */ #endif #if BYTE_ORDER <= 0 /* little-endian */ { /* * On little-endian machines, we can process properly aligned * data without copying it. */ if( !((data - (const unsigned char*)0) & 3) ) { /* data are properly aligned */ X = (const unsigned int*)data; } else { /* not aligned */ memcpy( xbuf, data, 64 ); X = xbuf; } } #endif #if BYTE_ORDER == 0 else // dynamic big-endian #endif #if BYTE_ORDER >= 0 // big-endian { /* * On big-endian machines, we must arrange the bytes in the * right order. */ const unsigned char* xp = data; int i; # if BYTE_ORDER == 0 X = xbuf; // (dynamic only) # else # define xbuf X /* (static only) */ # endif for( i = 0; i < 16; ++i, xp += 4 ) xbuf[i] = xp[0] + ( xp[1] << 8 ) + ( xp[2] << 16 ) + ( xp[3] << 24 ); } #endif } #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) /* Round 1. */ /* Let [abcd k s i] denote the operation a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ #define F(x, y, z) (((x) & (y)) | (~(x) & (z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + F(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 7, T1); SET(d, a, b, c, 1, 12, T2); SET(c, d, a, b, 2, 17, T3); SET(b, c, d, a, 3, 22, T4); SET(a, b, c, d, 4, 7, T5); SET(d, a, b, c, 5, 12, T6); SET(c, d, a, b, 6, 17, T7); SET(b, c, d, a, 7, 22, T8); SET(a, b, c, d, 8, 7, T9); SET(d, a, b, c, 9, 12, T10); SET(c, d, a, b, 10, 17, T11); SET(b, c, d, a, 11, 22, T12); SET(a, b, c, d, 12, 7, T13); SET(d, a, b, c, 13, 12, T14); SET(c, d, a, b, 14, 17, T15); SET(b, c, d, a, 15, 22, T16); #undef SET /* Round 2. */ /* Let [abcd k s i] denote the operation a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ #define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + G(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 1, 5, T17); SET(d, a, b, c, 6, 9, T18); SET(c, d, a, b, 11, 14, T19); SET(b, c, d, a, 0, 20, T20); SET(a, b, c, d, 5, 5, T21); SET(d, a, b, c, 10, 9, T22); SET(c, d, a, b, 15, 14, T23); SET(b, c, d, a, 4, 20, T24); SET(a, b, c, d, 9, 5, T25); SET(d, a, b, c, 14, 9, T26); SET(c, d, a, b, 3, 14, T27); SET(b, c, d, a, 8, 20, T28); SET(a, b, c, d, 13, 5, T29); SET(d, a, b, c, 2, 9, T30); SET(c, d, a, b, 7, 14, T31); SET(b, c, d, a, 12, 20, T32); #undef SET /* Round 3. */ /* Let [abcd k s t] denote the operation a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ #define H(x, y, z) ((x) ^ (y) ^ (z)) #define SET(a, b, c, d, k, s, Ti)\ t = a + H(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 5, 4, T33); SET(d, a, b, c, 8, 11, T34); SET(c, d, a, b, 11, 16, T35); SET(b, c, d, a, 14, 23, T36); SET(a, b, c, d, 1, 4, T37); SET(d, a, b, c, 4, 11, T38); SET(c, d, a, b, 7, 16, T39); SET(b, c, d, a, 10, 23, T40); SET(a, b, c, d, 13, 4, T41); SET(d, a, b, c, 0, 11, T42); SET(c, d, a, b, 3, 16, T43); SET(b, c, d, a, 6, 23, T44); SET(a, b, c, d, 9, 4, T45); SET(d, a, b, c, 12, 11, T46); SET(c, d, a, b, 15, 16, T47); SET(b, c, d, a, 2, 23, T48); #undef SET /* Round 4. */ /* Let [abcd k s t] denote the operation a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ #define I(x, y, z) ((y) ^ ((x) | ~(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + I(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 6, T49); SET(d, a, b, c, 7, 10, T50); SET(c, d, a, b, 14, 15, T51); SET(b, c, d, a, 5, 21, T52); SET(a, b, c, d, 12, 6, T53); SET(d, a, b, c, 3, 10, T54); SET(c, d, a, b, 10, 15, T55); SET(b, c, d, a, 1, 21, T56); SET(a, b, c, d, 8, 6, T57); SET(d, a, b, c, 15, 10, T58); SET(c, d, a, b, 6, 15, T59); SET(b, c, d, a, 13, 21, T60); SET(a, b, c, d, 4, 6, T61); SET(d, a, b, c, 11, 10, T62); SET(c, d, a, b, 2, 15, T63); SET(b, c, d, a, 9, 21, T64); #undef SET /* Then perform the following additions. (That is increment each of the four registers by the value it had before this block was started.) */ m_state.abcd[0] += a; m_state.abcd[1] += b; m_state.abcd[2] += c; m_state.abcd[3] += d; } void MD5::init() { m_finished = false; m_state.count[0] = 0; m_state.count[1] = 0; m_state.abcd[0] = 0x67452301; m_state.abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; m_state.abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; m_state.abcd[3] = 0x10325476; } void MD5::feed( const std::string& data ) { feed( (const unsigned char*)data.c_str(), (int)data.length() ); } void MD5::feed( const unsigned char* data, int bytes ) { const unsigned char* p = data; int left = bytes; int offset = ( m_state.count[0] >> 3 ) & 63; unsigned int nbits = (unsigned int)( bytes << 3 ); if( bytes <= 0 ) return; /* Update the message length. */ m_state.count[1] += bytes >> 29; m_state.count[0] += nbits; if( m_state.count[0] < nbits ) m_state.count[1]++; /* Process an initial partial block. */ if( offset ) { int copy = ( offset + bytes > 64 ? 64 - offset : bytes ); memcpy( m_state.buf + offset, p, copy ); if( offset + copy < 64 ) return; p += copy; left -= copy; process( m_state.buf ); } /* Process full blocks. */ for( ; left >= 64; p += 64, left -= 64 ) process( p ); /* Process a final partial block. */ if( left ) memcpy( m_state.buf, p, left ); } void MD5::finalize() { if( m_finished ) return; unsigned char data[8]; /* Save the length before padding. */ for( int i = 0; i < 8; ++i ) data[i] = (unsigned char)( m_state.count[i >> 2] >> ( ( i & 3 ) << 3 ) ); /* Pad to 56 bytes mod 64. */ feed( pad, ( ( 55 - ( m_state.count[0] >> 3 ) ) & 63 ) + 1 ); /* Append the length. */ feed( data, 8 ); m_finished = true; } const std::string MD5::hex() { if( !m_finished ) finalize(); char buf[33]; for( int i = 0; i < 16; ++i ) sprintf( buf + i * 2, "%02x", (unsigned char)( m_state.abcd[i >> 2] >> ( ( i & 3 ) << 3 ) ) ); return std::string( buf, 32 ); } const std::string MD5::binary() { if( !m_finished ) finalize(); unsigned char digest[16]; for( int i = 0; i < 16; ++i ) digest[i] = (unsigned char)( m_state.abcd[i >> 2] >> ( ( i & 3 ) << 3 ) ); return std::string( (char*)digest, 16 ); } void MD5::reset() { init(); } } qutim-0.2.0/plugins/jabber/libs/gloox/mutex.h0000644000175000017500000000330711273054312022617 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef MUTEX_H__ #define MUTEX_H__ #include "macros.h" namespace gloox { namespace util { /** * @brief A simple implementation of mutex as a wrapper around a pthread mutex * or a win32 critical section. * * If you locked a mutex you MUST unlock it within the same thread. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API Mutex { public: /** * Contructs a new simple mutex. */ Mutex(); /** * Destructor */ ~Mutex(); /** * Locks the mutex. */ void lock(); /** * Tries to lock the mutex. * @return @b True if the attempt was successful, @b false otherwise. * @note This function also returns @b true if mutex support is not available, ie. if gloox * is compiled without pthreads on non-Windows platforms. Make sure threads/mutexes are available * if your code relies on trylock(). */ bool trylock(); /** * Releases the mutex. */ void unlock(); private: class MutexImpl; Mutex& operator=( const Mutex& ); MutexImpl* m_mutex; }; } } #endif // MUTEX_H__ qutim-0.2.0/plugins/jabber/libs/gloox/flexoffhandler.h0000644000175000017500000000537211273054312024450 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef FLEXOFFHANDLER_H__ #define FLEXOFFHANDLER_H__ #include "disco.h" #include "gloox.h" namespace gloox { /** * Describes the possible results of a message retrieval or deletion request. */ enum FlexibleOfflineResult { FomrRemoveSuccess, /**< Message(s) were removed successfully. */ FomrRequestSuccess, /**< Message(s) were fetched successfully. */ FomrForbidden, /**< The requester is a JID other than an authorized resource of the * user. Something wnet serieously wrong */ FomrItemNotFound, /**< The requested node (message ID) does not exist. */ FomrUnknownError /**< An error occurred which is not specified in XEP-0013. */ }; /** * @brief Implementation of this virtual interface allows for retrieval of offline messages following * XEP-0030. * * @author Jakob Schroeter * @since 0.7 */ class GLOOX_API FlexibleOfflineHandler { public: /** * Virtual Destructor. */ virtual ~FlexibleOfflineHandler() {} /** * This function is called to indicate whether the server supports XEP-0013 or not. * Call @ref FlexibleOffline::checkSupport() to trigger the check. * @param support Whether the server support XEP-0013 or not. */ virtual void handleFlexibleOfflineSupport( bool support ) = 0; /** * This function is called to announce the number of available offline messages. * Call @ref FlexibleOffline::getMsgCount() to trigger the check. * @param num The number of stored offline messages. */ virtual void handleFlexibleOfflineMsgNum( int num ) = 0; /** * This function is called when the offline message headers arrive. * Call @ref FlexibleOffline::fetchHeaders() to trigger the check. * @param headers A map of ID/sender pairs describing the offline messages. */ virtual void handleFlexibleOfflineMessageHeaders( const Disco::ItemList& headers ) = 0; /** * This function is called to indicate the result of a fetch or delete instruction. * @param foResult The result of the operation. */ virtual void handleFlexibleOfflineResult( FlexibleOfflineResult foResult ) = 0; }; } #endif // FLEXOFFHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/iq.cpp0000644000175000017500000000304311273054312022416 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "iq.h" #include "util.h" namespace gloox { static const char * iqTypeStringValues[] = { "get", "set", "result", "error" }; static inline const char* typeString( IQ::IqType type ) { return iqTypeStringValues[type]; } IQ::IQ( Tag* tag ) : Stanza( tag ), m_subtype( Invalid ) { if( !tag || tag->name() != "iq" ) return; m_subtype = (IQ::IqType)util::lookup( tag->findAttribute( TYPE ), iqTypeStringValues ); } IQ::IQ( IqType type, const JID& to, const std::string& id ) : Stanza( to ), m_subtype( type ) { m_id = id; } IQ::~IQ() { } Tag* IQ::tag() const { if( m_subtype == Invalid ) return 0; Tag* t = new Tag( "iq" ); if( m_to ) t->addAttribute( "to", m_to.full() ); if( m_from ) t->addAttribute( "from", m_from.full() ); if( !m_id.empty() ) t->addAttribute( "id", m_id ); t->addAttribute( TYPE, typeString( m_subtype ) ); StanzaExtensionList::const_iterator it = m_extensionList.begin(); for( ; it != m_extensionList.end(); ++it ) t->addChild( (*it)->tag() ); return t; } } qutim-0.2.0/plugins/jabber/libs/gloox/sha.cpp0000644000175000017500000001233511273054312022564 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "config.h" #include "sha.h" #include "gloox.h" #include namespace gloox { SHA::SHA() { init(); } SHA::~SHA() { } void SHA::init() { Length_Low = 0; Length_High = 0; Message_Block_Index = 0; H[0] = 0x67452301; H[1] = 0xEFCDAB89; H[2] = 0x98BADCFE; H[3] = 0x10325476; H[4] = 0xC3D2E1F0; m_finished = false; m_corrupted = false; } void SHA::reset() { init(); } const std::string SHA::hex() { if( m_corrupted ) return EmptyString; finalize(); char buf[41]; for( int i = 0; i < 20; ++i ) sprintf( buf + i * 2, "%02x", (unsigned char)( H[i >> 2] >> ( ( 3 - ( i & 3 ) ) << 3 ) ) ); return std::string( buf, 40 ); } const std::string SHA::binary() { if( !m_finished ) finalize(); unsigned char digest[20]; for( int i = 0; i < 20; ++i ) digest[i] = (unsigned char)( H[i >> 2] >> ( ( 3 - ( i & 3 ) ) << 3 ) ); return std::string( (char*)digest, 20 ); } void SHA::finalize() { if( !m_finished ) { pad(); m_finished = true; } } void SHA::feed( const unsigned char* data, unsigned length ) { if( !length ) return; if( m_finished || m_corrupted ) { m_corrupted = true; return; } while( length-- && !m_corrupted ) { Message_Block[Message_Block_Index++] = ( *data & 0xFF ); Length_Low += 8; Length_Low &= 0xFFFFFFFF; if( Length_Low == 0 ) { Length_High++; Length_High &= 0xFFFFFFFF; if( Length_High == 0 ) { m_corrupted = true; } } if( Message_Block_Index == 64 ) { process(); } ++data; } } void SHA::feed( const std::string& data ) { feed( (const unsigned char*)data.c_str(), (int)data.length() ); } void SHA::process() { const unsigned K[] = { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 }; int t; unsigned temp; unsigned W[80]; unsigned A, B, C, D, E; for( t = 0; t < 16; t++ ) { W[t] = ((unsigned) Message_Block[t * 4]) << 24; W[t] |= ((unsigned) Message_Block[t * 4 + 1]) << 16; W[t] |= ((unsigned) Message_Block[t * 4 + 2]) << 8; W[t] |= ((unsigned) Message_Block[t * 4 + 3]); } for( t = 16; t < 80; ++t ) { W[t] = shift( 1, W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16] ); } A = H[0]; B = H[1]; C = H[2]; D = H[3]; E = H[4]; for( t = 0; t < 20; ++t ) { temp = shift( 5, A ) + ( ( B & C ) | ( ( ~B ) & D ) ) + E + W[t] + K[0]; temp &= 0xFFFFFFFF; E = D; D = C; C = shift( 30, B ); B = A; A = temp; } for( t = 20; t < 40; ++t ) { temp = shift( 5, A ) + ( B ^ C ^ D ) + E + W[t] + K[1]; temp &= 0xFFFFFFFF; E = D; D = C; C = shift( 30, B ); B = A; A = temp; } for( t = 40; t < 60; ++t ) { temp = shift( 5, A ) + ( ( B & C ) | ( B & D ) | ( C & D ) ) + E + W[t] + K[2]; temp &= 0xFFFFFFFF; E = D; D = C; C = shift( 30, B ); B = A; A = temp; } for( t = 60; t < 80; ++t ) { temp = shift( 5, A ) + ( B ^ C ^ D ) + E + W[t] + K[3]; temp &= 0xFFFFFFFF; E = D; D = C; C = shift( 30, B ); B = A; A = temp; } H[0] = ( H[0] + A ) & 0xFFFFFFFF; H[1] = ( H[1] + B ) & 0xFFFFFFFF; H[2] = ( H[2] + C ) & 0xFFFFFFFF; H[3] = ( H[3] + D ) & 0xFFFFFFFF; H[4] = ( H[4] + E ) & 0xFFFFFFFF; Message_Block_Index = 0; } void SHA::pad() { Message_Block[Message_Block_Index++] = 0x80; if( Message_Block_Index > 55 ) { while( Message_Block_Index < 64 ) { Message_Block[Message_Block_Index++] = 0; } process(); } while( Message_Block_Index < 56 ) { Message_Block[Message_Block_Index++] = 0; } Message_Block[56] = static_cast( ( Length_High >> 24 ) & 0xFF ); Message_Block[57] = static_cast( ( Length_High >> 16 ) & 0xFF ); Message_Block[58] = static_cast( ( Length_High >> 8 ) & 0xFF ); Message_Block[59] = static_cast( ( Length_High ) & 0xFF ); Message_Block[60] = static_cast( ( Length_Low >> 24 ) & 0xFF ); Message_Block[61] = static_cast( ( Length_Low >> 16 ) & 0xFF ); Message_Block[62] = static_cast( ( Length_Low >> 8 ) & 0xFF ); Message_Block[63] = static_cast( ( Length_Low ) & 0xFF ); process(); } unsigned SHA::shift( int bits, unsigned word ) { return ( ( word << bits ) & 0xFFFFFFFF) | ( ( word & 0xFFFFFFFF ) >> ( 32-bits ) ); } } qutim-0.2.0/plugins/jabber/libs/gloox/pubsubitem.h0000644000175000017500000000340511273054312023633 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef PUBSUBITEM_H__ #define PUBSUBITEM_H__ #include "gloox.h" #include namespace gloox { class Tag; namespace PubSub { /** * @brief Abstracts a PubSub Item (XEP-0060). * * XEP Version: 1.12 * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API Item { public: /** * Constructs a new empty Item. */ Item(); /** * Constructs a new Item from the given Tag. * @param tag The Tag to parse. */ Item( const Tag* tag ); /** * Copy constructor. * @param item The Item to be copied. */ Item( const Item& item ); /** * Destructor. */ ~Item(); /** * Returns the Item's payload. * @return The layload. */ const Tag* payload() const { return m_payload; } /** * Returns the item ID. * @return The item ID. */ const std::string& id() const { return m_id; } /** * Creates and returns a Tag representation of the Item. * @return An XML representation of the Item. */ Tag* tag() const; private: Tag* m_payload; std::string m_id; }; } } #endif // PUBSUBITEM_H__ qutim-0.2.0/plugins/jabber/libs/gloox/lastactivityhandler.h0000644000175000017500000000331711273054312025534 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef LASTACTIVITYHANDLER_H__ #define LASTACTIVITYHANDLER_H__ #include "gloox.h" #include "jid.h" namespace gloox { /** * @brief This is an virtual interface that, once reimplemented, allows to receive the * results of Last-Activity-queries to other entities. * * @author Jakob Schroeter * @since 0.6 */ class GLOOX_API LastActivityHandler { public: /** * Virtual Destructor. */ virtual ~LastActivityHandler() {} /** * This function is called when a positive result of a query arrives. * @param jid The JID of the queried contact. * @param seconds The idle time or time of last presence of the contact. (Depends * on the JID, check the spec.) * @param status If the contact is offline, this is the last presence status message. May be empty. */ virtual void handleLastActivityResult( const JID& jid, long seconds, const std::string& status ) = 0; /** * This function is called when an error is returned by the queried antity. * @param jid The queried entity's address. * @param error The reported error. */ virtual void handleLastActivityError( const JID& jid, StanzaError error ) = 0; }; } #endif // LASTACTIVITYHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/stanza.cpp0000644000175000017500000000607111273054312023311 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "stanza.h" #include "error.h" #include "jid.h" #include "util.h" #include "stanzaextension.h" #include "stanzaextensionfactory.h" #include namespace gloox { Stanza::Stanza( const JID& to ) : m_xmllang( "default" ), m_to( to ) { } Stanza::Stanza( Tag* tag ) : m_xmllang( "default" ) { if( !tag ) return; m_from.setJID( tag->findAttribute( "from" ) ); m_to.setJID( tag->findAttribute( "to" ) ); m_id = tag->findAttribute( "id" ); } Stanza::~Stanza() { removeExtensions(); } const Error* Stanza::error() const { return findExtension( ExtError ); } void Stanza::addExtension( const StanzaExtension* se ) { m_extensionList.push_back( se ); } const StanzaExtension* Stanza::findExtension( int type ) const { StanzaExtensionList::const_iterator it = m_extensionList.begin(); for( ; it != m_extensionList.end() && (*it)->extensionType() != type; ++it ) ; return it != m_extensionList.end() ? (*it) : 0; } void Stanza::removeExtensions() { util::clearList( m_extensionList ); } void Stanza::setLang( StringMap** map, std::string& defaultLang, const Tag* tag ) { const std::string& lang = tag ? tag->findAttribute( "xml:lang" ) : EmptyString; setLang( map, defaultLang, tag ? tag->cdata() : EmptyString, lang ); } void Stanza::setLang( StringMap** map, std::string& defaultLang, const std::string& data, const std::string& xmllang ) { if( data.empty() ) return; if( xmllang.empty() ) defaultLang = data; else { if( !*map ) *map = new StringMap(); (**map)[xmllang] = data; } } const std::string& Stanza::findLang( const StringMap* map, const std::string& defaultData, const std::string& lang ) { if( map && lang != "default" ) { StringMap::const_iterator it = map->find( lang ); if( it != map->end() ) return (*it).second; } return defaultData; } void Stanza::getLangs( const StringMap* map, const std::string& defaultData, const std::string& name, Tag* tag ) { if( !defaultData.empty() ) new Tag( tag, name, defaultData ); if( !map ) return; StringMap::const_iterator it = map->begin(); for( ; it != map->end(); ++it ) { Tag* t = new Tag( tag, name, "xml:lang", (*it).first ); t->setCData( (*it).second ); } } } qutim-0.2.0/plugins/jabber/libs/gloox/tlsschannel.h0000644000175000017500000000514011273054312023770 0ustar euroelessareuroelessar/* * Copyright (c) 2007-2009 by Jakob Schroeter * This file is part of the gloox library. http://camaya.net/gloox * * This software is distributed under a license. The full license * agreement can be found in the file LICENSE in this distribution. * This software may not be copied, modified, sold or distributed * other than expressed in the named license agreement. * * This software is distributed without any warranty. */ #ifndef TLSSCHANNEL_H__ #define TLSSCHANNEL_H__ #include "tlsbase.h" #include "config.h" #ifdef HAVE_WINTLS #include #define SECURITY_WIN32 #include #include #include namespace gloox { /** * This class implements a TLS backend using SChannel. * * @author Jakob Schroeter * @since 0.9 */ class SChannel : public TLSBase { public: /** * Constructor. * @param th The TLSHandler to handle TLS-related events. * @param server The server to use in certificate verification. */ SChannel( TLSHandler* th, const std::string& server ); /** * Virtual destructor. */ virtual ~SChannel(); // reimplemented from TLSBase virtual bool init( const std::string& /*clientKey*/ = EmptyString, const std::string& /*clientCerts*/ = EmptyString, const StringList& /*cacerts*/ = StringList() ) { return true; } // reimplemented from TLSBase virtual bool encrypt( const std::string& data ); // reimplemented from TLSBase virtual int decrypt( const std::string& data ); // reimplemented from TLSBase virtual void cleanup(); // reimplemented from TLSBase virtual bool handshake(); // reimplemented from TLSBase virtual void setCACerts( const StringList& cacerts ); // reimplemented from TLSBase virtual void setClientCert( const std::string& clientKey, const std::string& clientCerts ); private: void handshakeStage( const std::string& data ); void setSizes(); int filetime2int( FILETIME t ); void validateCert(); void connectionInfos(); void certData(); void setCertinfos(); CredHandle m_credHandle; CtxtHandle m_context; SecPkgContext_StreamSizes m_sizes; size_t m_header_max; size_t m_message_max; size_t m_trailer_max; std::string m_buffer; bool m_cleanedup; // windows error outputs // void print_error( int errorcode, const char* place = 0 ); }; } #endif // HAVE_WINTLS #endif // TLSSCHANNEL_H__ qutim-0.2.0/plugins/jabber/libs/gloox/tlsopensslclient.cpp0000644000175000017500000000175711273054312025424 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "tlsopensslclient.h" #ifdef HAVE_OPENSSL namespace gloox { OpenSSLClient::OpenSSLClient( TLSHandler* th, const std::string& server ) : OpenSSLBase( th, server ) { } OpenSSLClient::~OpenSSLClient() { } bool OpenSSLClient::setType() { m_ctx = SSL_CTX_new( SSLv23_client_method() ); // FIXME: use TLSv1_client_method() as soon as OpenSSL/gtalk combo is fixed! if( !m_ctx ) return false; return true; } int OpenSSLClient::handshakeFunction() { return SSL_connect( m_ssl ); } } #endif // HAVE_OPENSSL qutim-0.2.0/plugins/jabber/libs/gloox/flexoff.cpp0000644000175000017500000001346211273054312023444 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "flexoff.h" #include "dataform.h" #include "disco.h" #include "error.h" #include namespace gloox { // ---- FlexibleOffline::Offline ---- FlexibleOffline::Offline::Offline( const Tag* /*tag*/ ) : StanzaExtension( ExtFlexOffline ) { // FIXME what to do here? } FlexibleOffline::Offline::Offline( int context, const StringList& msgs ) : StanzaExtension( ExtFlexOffline ), m_context( context ), m_msgs( msgs ) { } FlexibleOffline::Offline::~Offline() { } const std::string& FlexibleOffline::Offline::filterString() const { static const std::string filter = "/iq/offline[@xmlns='" + XMLNS_OFFLINE + "']"; return filter; } Tag* FlexibleOffline::Offline::tag() const { Tag* t = new Tag( "offline" ); t->setXmlns( XMLNS_OFFLINE ); if( m_msgs.empty() ) new Tag( t, m_context == FORequestMsgs ? "fetch" : "purge" ); else { const std::string action = m_context == FORequestMsgs ? "view" : "remove"; StringList::const_iterator it = m_msgs.begin(); for( ; it != m_msgs.end(); ++it ) { Tag* i = new Tag( t, "item", "action", action ); i->addAttribute( "node", (*it) ); } } return t; } // ---- ~FlexibleOffline::Offline ---- // ---- FlexibleOffline ---- FlexibleOffline::FlexibleOffline( ClientBase* parent ) : m_parent( parent ), m_flexibleOfflineHandler( 0 ) { if( m_parent ) m_parent->registerStanzaExtension( new Offline() ); } FlexibleOffline::~FlexibleOffline() { if( m_parent ) m_parent->removeIDHandler( this ); } void FlexibleOffline::checkSupport() { m_parent->disco()->getDiscoInfo( m_parent->jid().server(), EmptyString, this, FOCheckSupport ); } void FlexibleOffline::getMsgCount() { m_parent->disco()->getDiscoInfo( m_parent->jid().server(), XMLNS_OFFLINE, this, FORequestNum ); } void FlexibleOffline::fetchHeaders() { m_parent->disco()->getDiscoItems( m_parent->jid().server(), XMLNS_OFFLINE, this, FORequestHeaders ); } void FlexibleOffline::messageOperation( int context, const StringList& msgs ) { const std::string& id = m_parent->getID(); IQ::IqType iqType = context == FORequestMsgs ? IQ::Get : IQ::Set; IQ iq( iqType, JID(), id ); iq.addExtension( new Offline( context, msgs ) ); m_parent->send( iq, this, context ); } void FlexibleOffline::registerFlexibleOfflineHandler( FlexibleOfflineHandler* foh ) { m_flexibleOfflineHandler = foh; } void FlexibleOffline::removeFlexibleOfflineHandler() { m_flexibleOfflineHandler = 0; } void FlexibleOffline::handleDiscoInfo( const JID& /*from*/, const Disco::Info& info, int context ) { if( !m_flexibleOfflineHandler ) return; switch( context ) { case FOCheckSupport: m_flexibleOfflineHandler->handleFlexibleOfflineSupport( info.hasFeature( XMLNS_OFFLINE ) ); break; case FORequestNum: int num = -1; if( info.form() && info.form()->hasField( "number_of_messages" ) ) num = atoi( info.form()->field( "number_of_messages" )->value().c_str() ); m_flexibleOfflineHandler->handleFlexibleOfflineMsgNum( num ); break; } } void FlexibleOffline::handleDiscoItems( const JID& /*from*/, const Disco::Items& items, int context ) { if( context == FORequestHeaders && m_flexibleOfflineHandler ) { if( items.node() == XMLNS_OFFLINE ) m_flexibleOfflineHandler->handleFlexibleOfflineMessageHeaders( items.items() ); } } void FlexibleOffline::handleDiscoError( const JID& /*from*/, const Error* /*error*/, int /*context*/ ) { } void FlexibleOffline::handleIqID( const IQ& iq, int context ) { if( !m_flexibleOfflineHandler ) return; switch( context ) { case FORequestMsgs: switch( iq.subtype() ) { case IQ::Result: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrRequestSuccess ); break; case IQ::Error: switch( iq.error()->error() ) { case StanzaErrorForbidden: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrForbidden ); break; case StanzaErrorItemNotFound: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrItemNotFound ); break; default: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrUnknownError ); break; } break; default: break; } break; case FORemoveMsgs: switch( iq.subtype() ) { case IQ::Result: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrRemoveSuccess ); break; case IQ::Error: switch( iq.error()->error() ) { case StanzaErrorForbidden: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrForbidden ); break; case StanzaErrorItemNotFound: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrItemNotFound ); break; default: m_flexibleOfflineHandler->handleFlexibleOfflineResult( FomrUnknownError ); break; } break; default: break; } break; } } } qutim-0.2.0/plugins/jabber/libs/gloox/privatexml.h0000644000175000017500000001071311273054312023647 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef PRIVATEXML_H__ #define PRIVATEXML_H__ #include "iqhandler.h" #include "privatexmlhandler.h" #include #include #include namespace gloox { class ClientBase; class Tag; class Stanza; /** * @brief This class implements XEP-0049 (Private XML Storage). * * @author Jakob Schroeter */ class GLOOX_API PrivateXML : public IqHandler { public: /** * Constructor. * Creates a new PrivateXML client that registers as IqHandler * with @c ClientBase. * @param parent The ClientBase used for XMPP communication */ PrivateXML( ClientBase* parent ); /** * Virtual destructor. */ virtual ~PrivateXML(); /** * Use this function to request the private XML stored in the given namespace. * @param tag Child element of the query element used to identify the requested XML fragment. * @param xmlns The namespace which qualifies the tag. * @param pxh The handler to receive the result. * @return The ID of the sent query. */ std::string requestXML( const std::string& tag, const std::string& xmlns, PrivateXMLHandler* pxh ); /** * Use this function to store private XML stored in the given namespace. * @param tag The XML to store. This is the complete tag including the unique namespace. * It is deleted automatically after sending it. * @param pxh The handler to receive the result. * @return The ID of the sent query. */ std::string storeXML( const Tag* tag, PrivateXMLHandler* pxh ); // reimplemented from IqHandler. virtual bool handleIq( const IQ& iq ) { (void)iq; return false; } // reimplemented from IqHandler. virtual void handleIqID( const IQ& iq, int context ); protected: ClientBase* m_parent; private: #ifdef PRIVATEXML_TEST public: #endif /** * @brief An implementation of the Private XML Storage protocol as StanzaExtension. * * @author Jakob Schroeter * @since 1.0 */ class Query : public StanzaExtension { public: /** * Constructs a new Query object suitable for use with Private XML Storage. * @param tag The private XML's element name. * @param xmlns The private XML's namespace. */ Query( const std::string& tag, const std::string& xmlns ) : StanzaExtension( ExtPrivateXML ) { m_privateXML = new Tag( tag, XMLNS, xmlns ); } /** * Constructs a new Query object suitable for storing an XML fragment in * Private XML Storage. * @param tag The private XML element to store. The Query object will own the Tag. */ Query( const Tag* tag = 0 ); /** * Destructor. */ ~Query() { delete m_privateXML; } /** * Returns the private XML fragment. The Tag is owned by the Query object. * @return The stored private XML fragment. */ const Tag* privateXML() const { return m_privateXML; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new Query( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { Query* q = new Query(); q->m_privateXML = m_privateXML ? m_privateXML->clone() : 0; return q; } private: const Tag* m_privateXML; }; enum IdType { RequestXml, StoreXml }; typedef std::map TrackMap; TrackMap m_track; }; } #endif // PRIVATEXML_H__ qutim-0.2.0/plugins/jabber/libs/gloox/annotations.cpp0000644000175000017500000000427611273054312024353 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "annotations.h" #include "clientbase.h" namespace gloox { Annotations::Annotations( ClientBase* parent ) : PrivateXML( parent ), m_annotationsHandler( 0 ) { } Annotations::~Annotations() { } void Annotations::storeAnnotations( const AnnotationsList& aList ) { Tag* s = new Tag( "storage", XMLNS, XMLNS_ANNOTATIONS ); AnnotationsList::const_iterator it = aList.begin(); for( ; it != aList.end(); ++it ) { Tag* n = new Tag( s, "note", (*it).note ); n->addAttribute( "jid", (*it).jid ); n->addAttribute( "cdate", (*it).cdate ); n->addAttribute( "mdate", (*it).mdate ); } storeXML( s, this ); } void Annotations::requestAnnotations() { requestXML( "storage", XMLNS_ANNOTATIONS, this ); } void Annotations::handlePrivateXML( const Tag* xml ) { if( !xml ) return; AnnotationsList aList; const TagList& l = xml->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { if( (*it)->name() == "note" ) { const std::string& jid = (*it)->findAttribute( "jid" ); const std::string& note = (*it)->cdata(); if( !jid.empty() && !note.empty() ) { const std::string& cdate = (*it)->findAttribute( "cdate" ); const std::string& mdate = (*it)->findAttribute( "mdate" ); AnnotationsListItem item; item.jid = jid; item.cdate = cdate; item.mdate = mdate; item.note = note; aList.push_back( item ); } } } if( m_annotationsHandler ) m_annotationsHandler->handleAnnotations( aList ); } void Annotations::handlePrivateXMLResult( const std::string& /*uid*/, PrivateXMLResult /*result*/ ) { } } qutim-0.2.0/plugins/jabber/libs/gloox/tlsopensslbase.h0000644000175000017500000000507311273054312024520 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef TLSOPENSSLBASE_H__ #define TLSOPENSSLBASE_H__ #include "tlsbase.h" #include "config.h" #ifdef HAVE_OPENSSL #include namespace gloox { /** * This is a common base class for client and server-side TLS * stream encryption implementations using OpenSSL. * * @author Jakob Schroeter * @since 1.0 */ class OpenSSLBase : public TLSBase { public: /** * Constructor. * @param th The TLSHandler to handle TLS-related events. * @param server The server to use in certificate verification. */ OpenSSLBase( TLSHandler* th, const std::string& server = EmptyString ); /** * Virtual destructor. */ virtual ~OpenSSLBase(); // reimplemented from TLSBase virtual bool init( const std::string& clientKey = EmptyString, const std::string& clientCerts = EmptyString, const StringList& cacerts = StringList() ); // reimplemented from TLSBase virtual bool encrypt( const std::string& data ); // reimplemented from TLSBase virtual int decrypt( const std::string& data ); // reimplemented from TLSBase virtual void cleanup(); // reimplemented from TLSBase virtual bool handshake(); // reimplemented from TLSBase virtual void setCACerts( const StringList& cacerts ); // reimplemented from TLSBase virtual void setClientCert( const std::string& clientKey, const std::string& clientCerts ); protected: virtual bool setType() = 0; virtual int handshakeFunction() = 0; SSL* m_ssl; SSL_CTX* m_ctx; BIO* m_ibio; BIO* m_nbio; private: void pushFunc(); virtual bool privateInit() { return true; } enum TLSOperation { TLSHandshake, TLSWrite, TLSRead }; void doTLSOperation( TLSOperation op ); int openSSLTime2UnixTime( const char* time_string ); std::string m_recvBuffer; std::string m_sendBuffer; char* m_buf; const int m_bufsize; }; } #endif // HAVE_OPENSSL #endif // TLSOPENSSLBASE_H__ qutim-0.2.0/plugins/jabber/libs/gloox/tlsgnutlsserver.cpp0000644000175000017500000001074311273054312025300 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "tlsgnutlsserver.h" #ifdef HAVE_GNUTLS #include namespace gloox { GnuTLSServer::GnuTLSServer( TLSHandler* th ) : GnuTLSBase( th ), m_dhBits( 1024 ) { } GnuTLSServer::~GnuTLSServer() { gnutls_certificate_free_credentials( m_x509cred ); gnutls_dh_params_deinit( m_dhParams ); } void GnuTLSServer::cleanup() { GnuTLSBase::cleanup(); init(); } bool GnuTLSServer::init( const std::string& clientKey, const std::string& clientCerts, const StringList& cacerts ) { const int protocolPriority[] = { #ifdef GNUTLS_TLS1_2 GNUTLS_TLS1_2, #endif GNUTLS_TLS1_1, GNUTLS_TLS1, 0 }; const int kxPriority[] = { GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_DHE_DSS, 0 }; const int cipherPriority[] = { GNUTLS_CIPHER_AES_256_CBC, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_3DES_CBC, GNUTLS_CIPHER_ARCFOUR, 0 }; const int compPriority[] = { GNUTLS_COMP_ZLIB, GNUTLS_COMP_NULL, 0 }; const int macPriority[] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 }; if( m_initLib && gnutls_global_init() != 0 ) return false; if( gnutls_certificate_allocate_credentials( &m_x509cred ) < 0 ) return false; setClientCert( clientKey, clientCerts ); setCACerts( cacerts ); generateDH(); gnutls_certificate_set_dh_params( m_x509cred, m_dhParams ); gnutls_certificate_set_rsa_export_params( m_x509cred, m_rsaParams); // gnutls_priority_init( &m_priorityCache, "NORMAL", 0 ); if( gnutls_init( m_session, GNUTLS_SERVER ) != 0 ) return false; // gnutls_priority_set( m_session, m_priorityCache ); gnutls_protocol_set_priority( *m_session, protocolPriority ); gnutls_cipher_set_priority( *m_session, cipherPriority ); gnutls_compression_set_priority( *m_session, compPriority ); gnutls_kx_set_priority( *m_session, kxPriority ); gnutls_mac_set_priority( *m_session, macPriority ); gnutls_credentials_set( *m_session, GNUTLS_CRD_CERTIFICATE, m_x509cred ); gnutls_certificate_server_set_request( *m_session, GNUTLS_CERT_REQUEST ); gnutls_dh_set_prime_bits( *m_session, m_dhBits ); gnutls_transport_set_ptr( *m_session, (gnutls_transport_ptr_t)this ); gnutls_transport_set_push_function( *m_session, pushFunc ); gnutls_transport_set_pull_function( *m_session, pullFunc ); m_valid = true; return true; } void GnuTLSServer::setCACerts( const StringList& cacerts ) { m_cacerts = cacerts; StringList::const_iterator it = m_cacerts.begin(); for( ; it != m_cacerts.end(); ++it ) gnutls_certificate_set_x509_trust_file( m_x509cred, (*it).c_str(), GNUTLS_X509_FMT_PEM ); } void GnuTLSServer::setClientCert( const std::string& clientKey, const std::string& clientCerts ) { m_clientKey = clientKey; m_clientCerts = clientCerts; if( !m_clientKey.empty() && !m_clientCerts.empty() ) { gnutls_certificate_set_x509_key_file( m_x509cred, m_clientCerts.c_str(), m_clientKey.c_str(), GNUTLS_X509_FMT_PEM ); } } void GnuTLSServer::generateDH() { gnutls_dh_params_init( &m_dhParams ); gnutls_dh_params_generate2( m_dhParams, m_dhBits ); gnutls_rsa_params_init( &m_rsaParams ); gnutls_rsa_params_generate2( m_rsaParams, 512 ); } void GnuTLSServer::getCertInfo() { m_certInfo.status = CertOk; const char* info; info = gnutls_compression_get_name( gnutls_compression_get( *m_session ) ); if( info ) m_certInfo.compression = info; info = gnutls_mac_get_name( gnutls_mac_get( *m_session ) ); if( info ) m_certInfo.mac = info; info = gnutls_cipher_get_name( gnutls_cipher_get( *m_session ) ); if( info ) m_certInfo.cipher = info; info = gnutls_protocol_get_name( gnutls_protocol_get_version( *m_session ) ); if( info ) m_certInfo.protocol = info; m_valid = true; } } #endif // HAVE_GNUTLS qutim-0.2.0/plugins/jabber/libs/gloox/base64.cpp0000644000175000017500000000636511273054312023103 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "base64.h" namespace gloox { namespace Base64 { static const std::string alphabet64( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ); static const char pad = '='; static const char np = (char)std::string::npos; static char table64vals[] = { 62, np, np, np, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, np, np, np, np, np, np, np, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, np, np, np, np, np, np, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 }; inline char table64( unsigned char c ) { return ( c < 43 || c > 122 ) ? np : table64vals[c-43]; } const std::string encode64( const std::string& input ) { std::string encoded; char c; const std::string::size_type length = input.length(); encoded.reserve( length * 2 ); for( std::string::size_type i = 0; i < length; ++i ) { c = static_cast( ( input[i] >> 2 ) & 0x3f ); encoded += alphabet64[c]; c = static_cast( ( input[i] << 4 ) & 0x3f ); if( ++i < length ) c = static_cast( c | static_cast( ( input[i] >> 4 ) & 0x0f ) ); encoded += alphabet64[c]; if( i < length ) { c = static_cast( ( input[i] << 2 ) & 0x3c ); if( ++i < length ) c = static_cast( c | static_cast( ( input[i] >> 6 ) & 0x03 ) ); encoded += alphabet64[c]; } else { ++i; encoded += pad; } if( i < length ) { c = static_cast( input[i] & 0x3f ); encoded += alphabet64[c]; } else { encoded += pad; } } return encoded; } const std::string decode64( const std::string& input ) { char c, d; const std::string::size_type length = input.length(); std::string decoded; decoded.reserve( length ); for( std::string::size_type i = 0; i < length; ++i ) { c = table64(input[i]); ++i; d = table64(input[i]); c = static_cast( ( c << 2 ) | ( ( d >> 4 ) & 0x3 ) ); decoded += c; if( ++i < length ) { c = input[i]; if( pad == c ) break; c = table64(input[i]); d = static_cast( ( ( d << 4 ) & 0xf0 ) | ( ( c >> 2 ) & 0xf ) ); decoded += d; } if( ++i < length ) { d = input[i]; if( pad == d ) break; d = table64(input[i]); c = static_cast( ( ( c << 6 ) & 0xc0 ) | d ); decoded += c; } } return decoded; } } } qutim-0.2.0/plugins/jabber/libs/gloox/tlsgnutlsserveranon.cpp0000644000175000017500000000627011273054312026154 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "tlsgnutlsserveranon.h" #ifdef HAVE_GNUTLS #include namespace gloox { GnuTLSServerAnon::GnuTLSServerAnon( TLSHandler* th ) : GnuTLSBase( th ), m_dhBits( 1024 ) { } GnuTLSServerAnon::~GnuTLSServerAnon() { gnutls_anon_free_server_credentials( m_anoncred ); gnutls_dh_params_deinit( m_dhParams ); } void GnuTLSServerAnon::cleanup() { GnuTLSBase::cleanup(); init(); } bool GnuTLSServerAnon::init( const std::string&, const std::string&, const StringList& ) { const int protocolPriority[] = { GNUTLS_TLS1, 0 }; const int kxPriority[] = { GNUTLS_KX_ANON_DH, 0 }; const int cipherPriority[] = { GNUTLS_CIPHER_AES_256_CBC, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_3DES_CBC, GNUTLS_CIPHER_ARCFOUR, 0 }; const int compPriority[] = { GNUTLS_COMP_ZLIB, GNUTLS_COMP_NULL, 0 }; const int macPriority[] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 }; if( m_initLib && gnutls_global_init() != 0 ) return false; if( gnutls_anon_allocate_server_credentials( &m_anoncred ) < 0 ) return false; generateDH(); gnutls_anon_set_server_dh_params( m_anoncred, m_dhParams ); if( gnutls_init( m_session, GNUTLS_SERVER ) != 0 ) return false; gnutls_protocol_set_priority( *m_session, protocolPriority ); gnutls_cipher_set_priority( *m_session, cipherPriority ); gnutls_compression_set_priority( *m_session, compPriority ); gnutls_kx_set_priority( *m_session, kxPriority ); gnutls_mac_set_priority( *m_session, macPriority ); gnutls_credentials_set( *m_session, GNUTLS_CRD_ANON, m_anoncred ); gnutls_dh_set_prime_bits( *m_session, m_dhBits ); gnutls_transport_set_ptr( *m_session, (gnutls_transport_ptr_t)this ); gnutls_transport_set_push_function( *m_session, pushFunc ); gnutls_transport_set_pull_function( *m_session, pullFunc ); m_valid = true; return true; } void GnuTLSServerAnon::generateDH() { gnutls_dh_params_init( &m_dhParams ); gnutls_dh_params_generate2( m_dhParams, m_dhBits ); } void GnuTLSServerAnon::getCertInfo() { m_certInfo.status = CertOk; const char* info; info = gnutls_compression_get_name( gnutls_compression_get( *m_session ) ); if( info ) m_certInfo.compression = info; info = gnutls_mac_get_name( gnutls_mac_get( *m_session ) ); if( info ) m_certInfo.mac = info; info = gnutls_cipher_get_name( gnutls_cipher_get( *m_session ) ); if( info ) m_certInfo.cipher = info; info = gnutls_protocol_get_name( gnutls_protocol_get_version( *m_session ) ); if( info ) m_certInfo.protocol = info; m_valid = true; } } #endif // HAVE_GNUTLS qutim-0.2.0/plugins/jabber/libs/gloox/connectionsocks5proxy.h0000644000175000017500000001570411273054312026052 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef CONNECTIONSOCKS5PROXY_H__ #define CONNECTIONSOCKS5PROXY_H__ #include "gloox.h" #include "connectionbase.h" #include "logsink.h" #include namespace gloox { /** * @brief This is an implementation of a simple SOCKS5 Proxying connection (RFC 1928 + RFC 1929). * * To use with a SOCKS5 proxy: * * @code * Client* c = new Client( ... ); * c->setConnectionImpl( new ConnectionSOCKS5Proxy( c, * new ConnectionTCPClient( c->logInstance(), proxyHost, proxyPort ), * c->logInstance(), xmppHost, xmppPort ) ); * @endcode * * Make sure to pass the proxy host/port to the transport connection (ConnectionTCPClient in this case), * and the XMPP host/port to the proxy connection. * * The reason why ConnectionSOCKS5Proxy doesn't manage its own ConnectionTCPClient is that it allows it * to be used with other transports (like IPv6 or chained HTTP/SOCKS5 proxies). * * @note This class is also used by the SOCKS5 bytestreams implementation (with slightly different * semantics). * * @note Simple @b plain-text username/password authentication is supported. GSSAPI authentication * is not supported. * * @author Jakob Schroeter * @since 0.9 */ class GLOOX_API ConnectionSOCKS5Proxy : public ConnectionBase, public ConnectionDataHandler { public: /** * Constructs a new ConnectionSOCKS5Proxy object. * @param connection A transport connection. It should be configured to connect to * the proxy host and port, @b not to the (XMPP) host. ConnectionSOCKS5Proxy will own the * transport connection and delete it in its destructor. * @param logInstance The log target. Obtain it from ClientBase::logInstance(). * @param server A server to connect to. This is the XMPP server's address, @b not the proxy. * @param port The proxy's port to connect to. This is the (XMPP) server's port, @b not the proxy's. * The default of -1 means that SRV records will be used to find out about the actual host:port. * @param ip Indicates whether @c server is an IP address (true) or a host name (false). * @note To properly use this object, you have to set a ConnectionDataHandler using * registerConnectionDataHandler(). This is not necessary if this object is * part of a 'connection chain', e.g. with ConnectionHTTPProxy. */ ConnectionSOCKS5Proxy( ConnectionBase* connection, const LogSink& logInstance, const std::string& server, int port = -1, bool ip = false ); /** * Constructs a new ConnectionSOCKS5Proxy object. * @param cdh A ConnectionDataHandler-derived object that will handle incoming data. * @param connection A transport connection. It should be configured to connect to * the proxy host and port, @b not to the (XMPP) host. ConnectionSOCKS5Proxy will own the * transport connection and delete it in its destructor. * @param logInstance The log target. Obtain it from ClientBase::logInstance(). * @param server A server to connect to. This is the XMPP server's address, @b not the proxy. * @param port The proxy's port to connect to. This is the (XMPP) server's port, @b not the proxy's. * The default of -1 means that SRV records will be used to find out about the actual host:port. * @param ip Indicates whether @c server is an IP address (true) or a host name (false). */ ConnectionSOCKS5Proxy( ConnectionDataHandler* cdh, ConnectionBase* connection, const LogSink& logInstance, const std::string& server, int port = -1, bool ip = false ); /** * Virtual destructor */ virtual ~ConnectionSOCKS5Proxy(); // reimplemented from ConnectionBase virtual ConnectionError connect(); // reimplemented from ConnectionBase virtual ConnectionError recv( int timeout = -1 ); // reimplemented from ConnectionBase virtual bool send( const std::string& data ); // reimplemented from ConnectionBase virtual ConnectionError receive(); // reimplemented from ConnectionBase virtual void disconnect(); // reimplemented from ConnectionBase virtual void cleanup(); // reimplemented from ConnectionBase virtual void getStatistics( long int &totalIn, long int &totalOut ); // reimplemented from ConnectionDataHandler virtual void handleReceivedData( const ConnectionBase* connection, const std::string& data ); // reimplemented from ConnectionDataHandler virtual void handleConnect( const ConnectionBase* connection ); // reimplemented from ConnectionDataHandler virtual void handleDisconnect( const ConnectionBase* connection, ConnectionError reason ); // reimplemented from ConnectionDataHandler virtual ConnectionBase* newInstance() const; /** * Sets the server to proxy to. * @param host The server hostname (IP address). * @param port The server port. The default of -1 means that SRV records will be used * to find out about the actual host:port. * @param ip Indicates whether @c host is an IP address (true) or a host name (false). */ void setServer( const std::string& host, int port = -1, bool ip = false ) { m_server = host; m_port = port; m_ip = ip; } /** * Sets proxy authorization credentials. * @param user The user name to use for proxy authorization. * @param password The password to use for proxy authorization. */ void setProxyAuth( const std::string& user, const std::string& password ) { m_proxyUser = user; m_proxyPwd = password; } /** * Sets the underlying transport connection. A possibly existing connection will be deleted. * @param connection The ConnectionBase to replace the current connection, if any. */ void setConnectionImpl( ConnectionBase* connection ); private: enum Socks5State { S5StateDisconnected, S5StateConnecting, S5StateNegotiating, S5StateAuthenticating, S5StateConnected }; ConnectionSOCKS5Proxy &operator=( const ConnectionSOCKS5Proxy& ); void negotiate(); ConnectionBase* m_connection; const LogSink& m_logInstance; Socks5State m_s5state; std::string m_proxyUser; std::string m_proxyPwd; std::string m_proxyHandshakeBuffer; bool m_ip; }; } #endif // CONNECTIONSOCKS5PROXY_H__ qutim-0.2.0/plugins/jabber/libs/gloox/util.cpp0000644000175000017500000000666611273054312023000 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "util.h" #include "gloox.h" namespace gloox { namespace util { int internalLog2( unsigned int n ) { int pos = 0; if ( n >= 1<<16 ) { n >>= 16; pos += 16; } if ( n >= 1<< 8 ) { n >>= 8; pos += 8; } if ( n >= 1<< 4 ) { n >>= 4; pos += 4; } if ( n >= 1<< 2 ) { n >>= 2; pos += 2; } if ( n >= 1<< 1 ) { pos += 1; } return ( (n == 0) ? (-1) : pos ); } unsigned _lookup( const std::string& str, const char* values[], unsigned size, int def ) { unsigned i = 0; for( ; i < size && str != values[i]; ++i ) ; return ( i == size && def >= 0 ) ? (unsigned)def : i; } const std::string _lookup( unsigned code, const char* values[], unsigned size, const std::string& def ) { return code < size ? std::string( values[code] ) : def; } unsigned _lookup2( const std::string& str, const char* values[], unsigned size, int def ) { return 1 << _lookup( str, values, size, def <= 0 ? def : (int)internalLog2( def ) ); } const std::string _lookup2( unsigned code, const char* values[], unsigned size, const std::string& def ) { const unsigned i = (unsigned)internalLog2( code ); return i < size ? std::string( values[i] ) : def; } static const char escape_chars[] = { '&', '<', '>', '\'', '"' }; static const std::string escape_seqs[] = { "amp;", "lt;", "gt;", "apos;", "quot;" }; static const unsigned escape_size = 5; const std::string escape( std::string what ) { for( size_t val, i = 0; i < what.length(); ++i ) { for( val = 0; val < escape_size; ++val ) { if( what[i] == escape_chars[val] ) { what[i] = '&'; what.insert( i+1, escape_seqs[val] ); i += escape_seqs[val].length(); break; } } } return what; } bool checkValidXMLChars( const std::string& data ) { if( data.empty() ) return true; std::string::const_iterator it = data.begin(); for( ; it != data.end() && ( (unsigned char)(*it) == 0x09 || (unsigned char)(*it) == 0x0a || (unsigned char)(*it) == 0x0d || ( (unsigned char)(*it) >= 0x20 && (unsigned char)(*it) != 0xc0 && (unsigned char)(*it) != 0xc1 && (unsigned char)(*it) < 0xf5 ) ); ++it ) ; return ( it == data.end() ); } void replaceAll( std::string& target, const std::string& find, const std::string& replace ) { std::string::size_type findSize = find.size(); std::string::size_type replaceSize = replace.size(); if( findSize == 0 ) return; std::string::size_type index = target.find( find, 0 ); while( index != std::string::npos ) { target.replace( index, findSize, replace ); index = target.find( find, index+replaceSize ); } } } } qutim-0.2.0/plugins/jabber/libs/gloox/simanager.cpp0000644000175000017500000001573711273054312023770 0ustar euroelessareuroelessar/* Copyright (c) 2007-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "simanager.h" #include "siprofilehandler.h" #include "sihandler.h" #include "clientbase.h" #include "disco.h" #include "error.h" namespace gloox { // ---- SIManager::SI ---- SIManager::SI::SI( const Tag* tag ) : StanzaExtension( ExtSI ), m_tag1( 0 ), m_tag2( 0 ) { if( !tag || tag->name() != "si" || tag->xmlns() != XMLNS_SI ) return; m_valid = true; m_id = tag->findAttribute( "id" ); m_mimetype = tag->findAttribute( "mime-type" ); m_profile = tag->findAttribute( "profile" ); Tag* c = tag->findChild( "file", "xmlns", XMLNS_SI_FT ); if ( c ) m_tag1 = c->clone(); c = tag->findChild( "feature", "xmlns", XMLNS_FEATURE_NEG ); if( c ) m_tag2 = c->clone(); } SIManager::SI::SI( Tag* tag1, Tag* tag2, const std::string& id, const std::string& mimetype, const std::string& profile ) : StanzaExtension( ExtSI ), m_tag1( tag1 ), m_tag2( tag2 ), m_id( id ), m_mimetype( mimetype ), m_profile( profile ) { m_valid = true; } SIManager::SI::~SI() { delete m_tag1; delete m_tag2; } const std::string& SIManager::SI::filterString() const { static const std::string filter = "/iq/si[@xmlns='" + XMLNS_SI + "']"; return filter; } Tag* SIManager::SI::tag() const { if( !m_valid ) return 0; Tag* t = new Tag( "si" ); t->setXmlns( XMLNS_SI ); if( !m_id.empty() ) t->addAttribute( "id", m_id ); if( !m_mimetype.empty() ) t->addAttribute( "mime-type", m_mimetype.empty() ? "binary/octet-stream" : m_mimetype ); if( !m_profile.empty() ) t->addAttribute( "profile", m_profile ); if( m_tag1 ) t->addChildCopy( m_tag1 ); if( m_tag2 ) t->addChildCopy( m_tag2 ); return t; } // ---- ~SIManager::SI ---- // ---- SIManager ---- SIManager::SIManager( ClientBase* parent, bool advertise ) : m_parent( parent ), m_advertise( advertise ) { if( m_parent ) { m_parent->registerStanzaExtension( new SI() ); m_parent->registerIqHandler( this, ExtSI ); if( m_parent->disco() && m_advertise ) m_parent->disco()->addFeature( XMLNS_SI ); } } SIManager::~SIManager() { if( m_parent ) { m_parent->removeIqHandler( this, ExtSI ); m_parent->removeIDHandler( this ); if( m_parent->disco() && m_advertise ) m_parent->disco()->removeFeature( XMLNS_SI ); } } const std::string SIManager::requestSI( SIHandler* sih, const JID& to, const std::string& profile, Tag* child1, Tag* child2, const std::string& mimetype, const JID& from, const std::string& sid ) { if( !m_parent || !sih ) return EmptyString; const std::string& id = m_parent->getID(); const std::string& sidToUse = sid.empty() ? m_parent->getID() : sid; IQ iq( IQ::Set, to, id ); iq.addExtension( new SI( child1, child2, sidToUse, mimetype, profile ) ); if( from ) iq.setFrom( from ); TrackStruct t; t.sid = sidToUse; t.profile = profile; t.sih = sih; m_track[id] = t; m_parent->send( iq, this, OfferSI ); return sidToUse; } void SIManager::acceptSI( const JID& to, const std::string& id, Tag* child1, Tag* child2, const JID& from ) { IQ iq( IQ::Result, to, id ); iq.addExtension( new SI( child1, child2 ) ); if( from ) iq.setFrom( from ); m_parent->send( iq ); } void SIManager::declineSI( const JID& to, const std::string& id, SIError reason, const std::string& text ) { IQ iq( IQ::Error, to, id ); Error* error; if( reason == NoValidStreams || reason == BadProfile ) { Tag* appError = 0; if( reason == NoValidStreams ) appError = new Tag( "no-valid-streams", XMLNS, XMLNS_SI ); else if( reason == BadProfile ) appError = new Tag( "bad-profile", XMLNS, XMLNS_SI ); error = new Error( StanzaErrorTypeCancel, StanzaErrorBadRequest, appError ); } else { error = new Error( StanzaErrorTypeCancel, StanzaErrorForbidden ); if( !text.empty() ) error->text( text ); } iq.addExtension( error ); m_parent->send( iq ); } void SIManager::registerProfile( const std::string& profile, SIProfileHandler* sih ) { if( !sih || profile.empty() ) return; m_handlers[profile] = sih; if( m_parent && m_advertise && m_parent->disco() ) m_parent->disco()->addFeature( profile ); } void SIManager::removeProfile( const std::string& profile ) { if( profile.empty() ) return; m_handlers.erase( profile ); if( m_parent && m_advertise && m_parent->disco() ) m_parent->disco()->removeFeature( profile ); } bool SIManager::handleIq( const IQ& iq ) { TrackMap::iterator itt = m_track.find( iq.id() ); if( itt != m_track.end() ) return false; const SI* si = iq.findExtension( ExtSI ); if( !si || si->profile().empty() ) return false; HandlerMap::const_iterator it = m_handlers.find( si->profile() ); if( it != m_handlers.end() && (*it).second ) { (*it).second->handleSIRequest( iq.from(), iq.to(), iq.id(), *si ); return true; } return false; } void SIManager::handleIqID( const IQ& iq, int context ) { switch( iq.subtype() ) { case IQ::Result: if( context == OfferSI ) { TrackMap::iterator it = m_track.find( iq.id() ); if( it != m_track.end() ) { const SI* si = iq.findExtension( ExtSI ); if( !si /*|| si->profile().empty()*/ ) return; // Tag* si = iq.query(); // Tag* ptag = 0; // Tag* fneg = 0; // if( si && si->name() == "si" && si->xmlns() == XMLNS_SI ) // { // ptag = si->findChildWithAttrib( XMLNS, (*it).second.profile ); // fneg = si->findChild( "feature", XMLNS, XMLNS_FEATURE_NEG ); // } // FIXME: remove above commented code and // check corectness of last 3 params! (*it).second.sih->handleSIRequestResult( iq.from(), iq.to(), (*it).second.sid, *si ); m_track.erase( it ); } } break; case IQ::Error: if( context == OfferSI ) { TrackMap::iterator it = m_track.find( iq.id() ); if( it != m_track.end() ) { (*it).second.sih->handleSIRequestError( iq, (*it).second.sid ); m_track.erase( it ); } } break; default: break; } } } qutim-0.2.0/plugins/jabber/libs/gloox/vcardmanager.h0000644000175000017500000001131511273054312024105 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef VCARDMANAGER_H__ #define VCARDMANAGER_H__ #include "gloox.h" #include "iqhandler.h" namespace gloox { class ClientBase; class VCard; class VCardHandler; /** * @brief A VCardManager can be used to fetch an entities VCard as well as for setting * one's own VCard. * * You need only one VCardManager per Client/ClientBase. * * @section sec_fetch Fetching a VCard * * Create a VCardManager and have a VCardHandler ready. Then simply call fetchVCard() * and wait for the result. * @code * class MyClass : public VCardHandler * { * public: * MyClass() * { * m_myClass = new MyClass(); * m_vcardManager = new VCardManager( m_client ); * }; * * ... * * void fetchVCard( const JID& jid ) * { * m_vcardManager->fetchVCard( jid, this ); * }; * * virtual void handleVCard( const JID& jid, const VCard* vcard ); * { * printf( "received vcard\n" ); * }; * * virtual void handleVCardResult( VCardContext context, const JID& jid, * StanzaError se ) * { * printf( "vcard operation result received\n" ); * }; * * ... * * private: * VCardManager* m_vcardManager; * }; * @endcode * * @section sec_store Storing one's own VCard * * @note Some, if not many, servers do not implement support for all the fields specified * in XEP-0054. Therefore it is possible that you cannot retrieve fields you stored previously. * * Similar to the above, you need a VCardManager and a VCardHandler. Then construct * your VCard and call storeVCard(). * @code * void storeMyVCard() * { * VCard* v = new VCard(); * v->setFormattedname( "Me" ); * v->setNickname( "Myself" ); * ... * m_vcardManager->storeVCard( v, this ); * }; * @endcode * * This implementation supports more than one address, address label, email address and telephone number. * * @note Currently, this implementation lacks support for the following fields: * AGENT, CATEGORIES, SOUND, KEY * * When cleaning up, delete your VCardManager instance @b before deleting the Client/ClientBase instance. * * @author Jakob Schroeter * @since 0.8 */ class GLOOX_API VCardManager : public IqHandler { public: /** * Constructor. * @param parent The ClientBase object to use for communication. */ VCardManager( ClientBase* parent ); /** * Virtual destructor. */ virtual ~VCardManager(); /** * Use this function to fetch the VCard of a remote entity or yourself. * The result will be announced by calling handleVCard() the VCardHandler. * @param jid The entity's JID. Should be a bare JID unless you want to fetch the VCard of, e.g., a MUC item. * @param vch The VCardHandler that will receive the result of the VCard fetch. */ void fetchVCard( const JID& jid, VCardHandler* vch ); /** * Use this function to store or update your own VCard on the server. Remember to * always send a full VCard, not a delta of changes. * If you, for any reason, pass a foreign VCard to this function, your own will be * overwritten. * @param vcard Your VCard to store. * @param vch The VCardHandler that will receive the result of the VCard store. */ void storeVCard( VCard* vcard, VCardHandler* vch ); /** * Use this function, e.g. from your VCardHandler-derived class's dtor, to cancel any * outstanding operations (fetchVCard(), storeVCard()). Calling this function even * if no operations are pending is just fine. * @param vch The VCardHandler to remove from any queues. * @since 0.9 */ void cancelVCardOperations( VCardHandler* vch ); // reimplemented from IqHandler. virtual bool handleIq( const IQ& iq ) { (void)iq; return false; } // reimplemented from IqHandler. virtual void handleIqID( const IQ& iq, int context ); private: typedef std::map TrackMap; ClientBase* m_parent; TrackMap m_trackMap; }; } #endif // VCARDMANAGER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/registration.cpp0000644000175000017500000002516511273054312024530 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "registration.h" #include "clientbase.h" #include "stanza.h" #include "error.h" #include "prep.h" #include "oob.h" namespace gloox { // Registration::Query ---- Registration::Query::Query( DataForm* form ) : StanzaExtension( ExtRegistration ), m_form( form ), m_fields( 0 ), m_oob( 0 ), m_del( false ), m_reg( false ) { } Registration::Query::Query( bool del ) : StanzaExtension( ExtRegistration ), m_form( 0 ), m_fields( 0 ), m_oob( 0 ), m_del( del ), m_reg( false ) { } Registration::Query::Query( int fields, const RegistrationFields& values ) : StanzaExtension( ExtRegistration ), m_form( 0 ), m_fields( fields ), m_values( values ), m_oob( 0 ), m_del( false ), m_reg( false ) { } Registration::Query::Query( const Tag* tag ) : StanzaExtension( ExtRegistration ), m_form( 0 ), m_fields( 0 ), m_oob( 0 ), m_del( false ), m_reg( false ) { if( !tag || tag->name() != "query" || tag->xmlns() != XMLNS_REGISTER ) return; const TagList& l = tag->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { const std::string& name = (*it)->name(); if( name == "instructions" ) m_instructions = (*it)->cdata(); else if( name == "remove" ) m_del = true; else if( name == "registered" ) m_reg = true; else if( name == "username" ) { m_fields |= FieldUsername; m_values.username = (*it)->cdata(); } else if( name == "nick" ) { m_fields |= FieldNick; m_values.nick = (*it)->cdata(); } else if( name == "password" ) { m_fields |= FieldPassword; m_values.password = (*it)->cdata(); } else if( name == "name" ) { m_fields |= FieldName; m_values.name = (*it)->cdata(); } else if( name == "first" ) { m_fields |= FieldFirst; m_values.first = (*it)->cdata(); } else if( name == "last" ) { m_fields |= FieldLast; m_values.last = (*it)->cdata(); } else if( name == "email" ) { m_fields |= FieldEmail; m_values.email = (*it)->cdata(); } else if( name == "address" ) { m_fields |= FieldAddress; m_values.address = (*it)->cdata(); } else if( name == "city" ) { m_fields |= FieldCity; m_values.city = (*it)->cdata(); } else if( name == "state" ) { m_fields |= FieldState; m_values.state = (*it)->cdata(); } else if( name == "zip" ) { m_fields |= FieldZip; m_values.zip = (*it)->cdata(); } else if( name == "phone" ) { m_fields |= FieldPhone; m_values.phone = (*it)->cdata(); } else if( name == "url" ) { m_fields |= FieldUrl; m_values.url = (*it)->cdata(); } else if( name == "date" ) { m_fields |= FieldDate; m_values.date = (*it)->cdata(); } else if( name == "misc" ) { m_fields |= FieldMisc; m_values.misc = (*it)->cdata(); } else if( name == "text" ) { m_fields |= FieldText; m_values.text = (*it)->cdata(); } else if( !m_form && name == "x" && (*it)->xmlns() == XMLNS_X_DATA ) m_form = new DataForm( (*it) ); else if( !m_oob && name == "x" && (*it)->xmlns() == XMLNS_X_OOB ) m_oob = new OOB( (*it) ); } } Registration::Query::~Query() { delete m_form; delete m_oob; } const std::string& Registration::Query::filterString() const { static const std::string filter = "/iq/query[@xmlns='" + XMLNS_REGISTER + "']"; return filter; } Tag* Registration::Query::tag() const { Tag* t = new Tag( "query" ); t->setXmlns( XMLNS_REGISTER ); if( !m_instructions.empty() ) new Tag( t, "instructions", m_instructions ); if ( m_reg ) new Tag( t, "registered" ); if( m_form ) t->addChild( m_form->tag() ); else if( m_oob ) t->addChild( m_oob->tag() ); else if( m_del ) new Tag( t, "remove" ); else if( m_fields ) { if( m_fields & FieldUsername ) new Tag( t, "username", m_values.username ); if( m_fields & FieldNick ) new Tag( t, "nick", m_values.nick ); if( m_fields & FieldPassword ) new Tag( t, "password", m_values.password ); if( m_fields & FieldName ) new Tag( t, "name", m_values.name ); if( m_fields & FieldFirst ) new Tag( t, "first", m_values.first ); if( m_fields & FieldLast ) new Tag( t, "last", m_values.last ); if( m_fields & FieldEmail ) new Tag( t, "email", m_values.email ); if( m_fields & FieldAddress ) new Tag( t, "address", m_values.address ); if( m_fields & FieldCity ) new Tag( t, "city", m_values.city ); if( m_fields & FieldState ) new Tag( t, "state", m_values.state ); if( m_fields & FieldZip ) new Tag( t, "zip", m_values.zip ); if( m_fields & FieldPhone ) new Tag( t, "phone", m_values.phone ); if( m_fields & FieldUrl ) new Tag( t, "url", m_values.url ); if( m_fields & FieldDate ) new Tag( t, "date", m_values.date ); if( m_fields & FieldMisc ) new Tag( t, "misc", m_values.misc ); if( m_fields & FieldText ) new Tag( t, "text", m_values.text ); } return t; } // ---- ~Registration::Query ---- // ---- Registration ---- Registration::Registration( ClientBase* parent, const JID& to ) : m_parent( parent ), m_to( to ), m_registrationHandler( 0 ) { init(); } Registration::Registration( ClientBase* parent ) : m_parent( parent ), m_registrationHandler( 0 ) { init(); } void Registration::init() { if( m_parent ) { m_parent->registerIqHandler( this, ExtRegistration ); m_parent->registerStanzaExtension( new Query() ); } } Registration::~Registration() { if( m_parent ) { m_parent->removeIqHandler( this, ExtRegistration ); m_parent->removeIDHandler( this ); m_parent->removeStanzaExtension( ExtRegistration ); } } void Registration::fetchRegistrationFields() { if( !m_parent || m_parent->state() != StateConnected ) return; IQ iq( IQ::Get, m_to ); iq.addExtension( new Query() ); m_parent->send( iq, this, FetchRegistrationFields ); } bool Registration::createAccount( int fields, const RegistrationFields& values ) { std::string username; if( !m_parent || !prep::nodeprep( values.username, username ) ) return false; IQ iq( IQ::Set, m_to ); iq.addExtension( new Query( fields, values ) ); m_parent->send( iq, this, CreateAccount ); return true; } void Registration::createAccount( DataForm* form ) { if( !m_parent || !form ) return; IQ iq( IQ::Set, m_to ); iq.addExtension( new Query( form ) ); m_parent->send( iq, this, CreateAccount ); } void Registration::removeAccount() { if( !m_parent || !m_parent->authed() ) return; IQ iq( IQ::Set, m_to ); iq.addExtension( new Query( true ) ); m_parent->send( iq, this, RemoveAccount ); } void Registration::changePassword( const std::string& username, const std::string& password ) { if( !m_parent || !m_parent->authed() || username.empty() ) return; int fields = FieldUsername | FieldPassword; RegistrationFields rf; rf.username = username; rf.password = password; createAccount( fields, rf ); } void Registration::registerRegistrationHandler( RegistrationHandler* rh ) { m_registrationHandler = rh; } void Registration::removeRegistrationHandler() { m_registrationHandler = 0; } void Registration::handleIqID( const IQ& iq, int context ) { if( !m_registrationHandler ) return; if( iq.subtype() == IQ::Result ) { switch( context ) { case FetchRegistrationFields: { const Query* q = iq.findExtension( ExtRegistration ); if( !q ) return; if( q->registered() ) m_registrationHandler->handleAlreadyRegistered( iq.from() ); if( q->form() ) m_registrationHandler->handleDataForm( iq.from(), *(q->form()) ); if( q->oob() ) m_registrationHandler->handleOOB( iq.from(), *(q->oob()) ); m_registrationHandler->handleRegistrationFields( iq.from(), q->fields(), q->instructions() ); break; } case CreateAccount: case ChangePassword: case RemoveAccount: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationSuccess ); break; } } else if( iq.subtype() == IQ::Error ) { const Error* e = iq.error(); if( !e ) return; switch( e->error() ) { case StanzaErrorConflict: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationConflict ); break; case StanzaErrorNotAcceptable: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationNotAcceptable ); break; case StanzaErrorBadRequest: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationBadRequest ); break; case StanzaErrorForbidden: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationForbidden ); break; case StanzaErrorRegistrationRequired: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationRequired ); break; case StanzaErrorUnexpectedRequest: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationUnexpectedRequest ); break; case StanzaErrorNotAuthorized: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationNotAuthorized ); break; case StanzaErrorNotAllowed: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationNotAllowed ); break; default: m_registrationHandler->handleRegistrationResult( iq.from(), RegistrationUnknownError ); break; } } } } qutim-0.2.0/plugins/jabber/libs/gloox/tlsopensslserver.h0000644000175000017500000000247711273054312025121 0ustar euroelessareuroelessar/* Copyright (c) 2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef TLSOPENSSLSERVER_H__ #define TLSOPENSSLSERVER_H__ #include "tlsopensslbase.h" #include "config.h" #ifdef HAVE_OPENSSL #include namespace gloox { /** * This class implements a TLS server backend using OpenSSL. * * @author Jakob Schroeter * @since 1.0 */ class OpenSSLServer : public OpenSSLBase { public: /** * Constructor. * @param th The TLSHandler to handle TLS-related events. */ OpenSSLServer( TLSHandler* th ); /** * Virtual destructor. */ virtual ~OpenSSLServer(); private: // reimplemented from OpenSSLBase virtual bool privateInit(); // reimplemented from OpenSSLBase virtual bool setType(); // reimplemented from OpenSSLBase virtual int handshakeFunction(); }; } #endif // HAVE_OPENSSL #endif // TLSOPENSSLSERVER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/search.cpp0000644000175000017500000001313611273054312023256 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "search.h" #include "clientbase.h" #include "dataform.h" #include "iq.h" namespace gloox { // Search::Query ---- Search::Query::Query( DataForm* form ) : StanzaExtension( ExtSearch ), m_form( form ), m_fields( 0 ) { } Search::Query::Query( int fields, const SearchFieldStruct& values ) : StanzaExtension( ExtSearch ), m_form( 0 ), m_fields( fields ), m_values( values ) { } Search::Query::Query( const Tag* tag ) : StanzaExtension( ExtSearch ), m_form( 0 ), m_fields( 0 ) { if( !tag || tag->name() != "query" || tag->xmlns() != XMLNS_SEARCH ) return; const TagList& l = tag->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { if( (*it)->name() == "instructions" ) { m_instructions = (*it)->cdata(); } else if( (*it)->name() == "item" ) { m_srl.push_back( new SearchFieldStruct( (*it) ) ); } else if( (*it)->name() == "first" ) m_fields |= SearchFieldFirst; else if( (*it)->name() == "last" ) m_fields |= SearchFieldLast; else if( (*it)->name() == "email" ) m_fields |= SearchFieldEmail; else if( (*it)->name() == "nick" ) m_fields |= SearchFieldNick; else if( !m_form && (*it)->name() == "x" && (*it)->xmlns() == XMLNS_X_DATA ) m_form = new DataForm( (*it) ); } } Search::Query::~Query() { delete m_form; SearchResultList::iterator it = m_srl.begin(); for( ; it != m_srl.end(); ++it ) delete (*it); } const std::string& Search::Query::filterString() const { static const std::string filter = "/iq/query[@xmlns='" + XMLNS_SEARCH + "']"; return filter; } Tag* Search::Query::tag() const { Tag* t = new Tag( "query" ); t->setXmlns( XMLNS_SEARCH ); if( m_form ) t->addChild( m_form->tag() ); else if( m_fields ) { if( !m_instructions.empty() ) new Tag( t, "instructions", m_instructions ); if( m_fields & SearchFieldFirst ) new Tag( t, "first", m_values.first() ); if( m_fields & SearchFieldLast ) new Tag( t, "last", m_values.last() ); if( m_fields & SearchFieldNick ) new Tag( t, "nick", m_values.nick() ); if( m_fields & SearchFieldEmail ) new Tag( t, "email", m_values.email() ); } else if( !m_srl.empty() ) { SearchResultList::const_iterator it = m_srl.begin(); for( ; it != m_srl.end(); ++it ) { t->addChild( (*it)->tag() ); } } return t; } // ---- ~Search::Query ---- // ---- Search ---- Search::Search( ClientBase* parent ) : m_parent( parent ) { if( m_parent ) m_parent->registerStanzaExtension( new Query() ); } Search::~Search() { if( m_parent ) { m_parent->removeIDHandler( this ); m_parent->removeStanzaExtension( ExtRoster ); } } void Search::fetchSearchFields( const JID& directory, SearchHandler* sh ) { if( !m_parent || !directory || !sh ) return; const std::string& id = m_parent->getID(); IQ iq( IQ::Get, directory, id ); iq.addExtension( new Query() ); m_track[id] = sh; m_parent->send( iq, this, FetchSearchFields ); } void Search::search( const JID& directory, DataForm* form, SearchHandler* sh ) { if( !m_parent || !directory || !sh ) return; const std::string& id = m_parent->getID(); IQ iq( IQ::Set, directory, id ); iq.addExtension( new Query( form ) ); m_track[id] = sh; m_parent->send( iq, this, DoSearch ); } void Search::search( const JID& directory, int fields, const SearchFieldStruct& values, SearchHandler* sh ) { if( !m_parent || !directory || !sh ) return; const std::string& id = m_parent->getID(); IQ iq( IQ::Set, directory ); iq.addExtension( new Query( fields, values ) ); m_track[id] = sh; m_parent->send( iq, this, DoSearch ); } void Search::handleIqID( const IQ& iq, int context ) { TrackMap::iterator it = m_track.find( iq.id() ); if( it != m_track.end() ) { switch( iq.subtype() ) { case IQ::Result: { const Query* q = iq.findExtension( ExtSearch ); if( !q ) return; switch( context ) { case FetchSearchFields: { if( q->form() ) { (*it).second->handleSearchFields( iq.from(), q->form() ); } else { (*it).second->handleSearchFields( iq.from(), q->fields(), q->instructions() ); } break; } case DoSearch: { if( q->form() ) { (*it).second->handleSearchResult( iq.from(), q->form() ); } else { (*it).second->handleSearchResult( iq.from(), q->result() ); } break; } } break; } case IQ::Error: (*it).second->handleSearchError( iq.from(), iq.error() ); break; default: break; } m_track.erase( it ); } return; } } qutim-0.2.0/plugins/jabber/libs/gloox/softwareversion.cpp0000644000175000017500000000324111273054312025245 0ustar euroelessareuroelessar/* Copyright (c) 2008-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "softwareversion.h" #include "tag.h" namespace gloox { SoftwareVersion::SoftwareVersion( const std::string& name, const std::string& version, const std::string& os ) : StanzaExtension( ExtVersion ), m_name( name ), m_version( version ), m_os( os ) { } SoftwareVersion::SoftwareVersion( const Tag* tag ) : StanzaExtension( ExtVersion ) { if( !tag ) return; Tag* t = tag->findChild( "name" ); if( t ) m_name = t->cdata(); t = tag->findChild( "version" ); if( t ) m_version = t->cdata(); t = tag->findChild( "os" ); if( t ) m_os = t->cdata(); } SoftwareVersion::~SoftwareVersion() { } const std::string& SoftwareVersion::filterString() const { static const std::string filter = "/iq/query[@xmlns='" + XMLNS_VERSION + "']"; return filter; } Tag* SoftwareVersion::tag() const { Tag* t = new Tag( "query" ); t->setXmlns( XMLNS_VERSION ); if( !m_name.empty() ) new Tag( t, "name", m_name ); if( !m_version.empty() ) new Tag( t, "version", m_version ); if( !m_os.empty() ) new Tag( t, "os", m_os ); return t; } } qutim-0.2.0/plugins/jabber/libs/gloox/annotations.h0000644000175000017500000001013311273054312024005 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef ANNOTATIONS_H__ #define ANNOTATIONS_H__ #include "macros.h" #include "annotationshandler.h" #include "privatexml.h" #include "privatexmlhandler.h" #include #include namespace gloox { class Tag; /** * @brief This is an implementation of XEP-0145 (Annotations). * * You can use this class to store arbitrary notes about a roster item on the server * (and to retrieve them later on). * To retrieve all stored annotations for the current user's roster you have to create * a class which inherits from AnnotationsHandler. This handler receives retrieved notes. * * @code * class MyClass : public AnnotationsHandler * { * public: * // ... * void myFuncRetrieve(); * void myFuncStore(); * void handleAnnotations( const AnnotationsList &aList ); * * private: * Annotations* m_notes; * AnnotationsList m_list; * }; * * void MyClass::myFuncRetrieve() * { * [...] * m_notes = new Annotations( m_client ); * m_notes->requestAnnotations(); * } * * void MyClass::handleAnnotations( const AnnotationsList &aList ) * { * m_list = aList; * } * @endcode * * To store an additional note you have to fetch the currently stored notes first, * add your new note to the list of notes, and transfer them all together back to the * server. This protocol does not support storage of 'deltas', that is, when saving * notes all previously saved notes are overwritten. * * @code * void MyClass::myFuncStore() * { * annotationsListItem item; * item.jid = "me@example.com"; * item.cdate = "2006-02-04T15:23:21Z"; * item.note = "some guy at example.com"; * m_list.push_back( item ); * * item.jid = "abc@def.com"; * item.cdate = "2006-01-24T15:23:21Z"; * item.mdate = "2006-02-04T05:11:46Z"; * item.note = "some other guy"; * m_list.push_back( item ); * * m_notes->storeAnnotations( m_list ); * } * @endcode * * @author Jakob Schroeter * @since 0.3 */ class GLOOX_API Annotations : public PrivateXML, public PrivateXMLHandler { public: /** * Constructs a new Annotations object. * @param parent The ClientBase to use for communication. */ Annotations( ClientBase* parent ); /** * Virtual destructor. */ virtual ~Annotations(); /** * Use this function to store notes (annotations to contacts in a roster) on the server. * Make sure you store the whole set of annotations, not a 'delta'. * @param aList A list of notes to store. */ void storeAnnotations( const AnnotationsList& aList ); /** * Use this function to initiate retrieval of annotations. Use registerAnnotationsHandler() * to register an object which will receive the lists of notes. */ void requestAnnotations(); /** * Use this function to register a AnnotationsHandler. * @param ah The AnnotationsHandler which shall receive retrieved notes. */ void registerAnnotationsHandler( AnnotationsHandler* ah ) { m_annotationsHandler = ah; } /** * Use this function to un-register the AnnotationsHandler. */ void removeAnnotationsHandler() { m_annotationsHandler = 0; } // reimplemented from PrivateXMLHandler virtual void handlePrivateXML( const Tag* xml ); // reimplemented from PrivateXMLHandler virtual void handlePrivateXMLResult( const std::string& uid, PrivateXMLResult pxResult ); private: AnnotationsHandler* m_annotationsHandler; }; } #endif // ANNOTATIONS_H__ qutim-0.2.0/plugins/jabber/libs/gloox/loghandler.h0000644000175000017500000000247611273054312023602 0ustar euroelessareuroelessar/* Copyright (c) 2005-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef LOGHANDLER_H__ #define LOGHANDLER_H__ #include "gloox.h" #include namespace gloox { /** * @brief A virtual interface which can be reimplemented to receive debug and log messages. * * @ref handleLog() is called for log messages. * * @author Jakob Schroeter * @since 0.5 */ class GLOOX_API LogHandler { public: /** * Virtual Destructor. */ virtual ~LogHandler() {} /** * Reimplement this function if you want to receive the chunks of the conversation * between gloox and server or other debug info from gloox. * @param level The log message's severity. * @param area The log message's origin. * @param message The log message. */ virtual void handleLog( LogLevel level, LogArea area, const std::string& message ) = 0; }; } #endif // LOGHANDLER_H__ qutim-0.2.0/plugins/jabber/libs/gloox/gpgsigned.cpp0000644000175000017500000000262711273054312023763 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #include "gpgsigned.h" #include "tag.h" namespace gloox { GPGSigned::GPGSigned( const std::string& signature ) : StanzaExtension( ExtGPGSigned ), m_signature( signature ), m_valid( true ) { if( m_signature.empty() ) m_valid = false; } GPGSigned::GPGSigned( const Tag* tag ) : StanzaExtension( ExtGPGSigned ), m_valid( false ) { if( tag && tag->name() == "x" && tag->hasAttribute( XMLNS, XMLNS_X_GPGSIGNED ) ) { m_valid = true; m_signature = tag->cdata(); } } GPGSigned::~GPGSigned() { } const std::string& GPGSigned::filterString() const { static const std::string filter = "/presence/x[@xmlns='" + XMLNS_X_GPGSIGNED + "']" "|/message/x[@xmlns='" + XMLNS_X_GPGSIGNED + "']"; return filter; } Tag* GPGSigned::tag() const { if( !m_valid ) return 0; Tag* x = new Tag( "x", m_signature ); x->addAttribute( XMLNS, XMLNS_X_GPGSIGNED ); return x; } } qutim-0.2.0/plugins/jabber/libs/gloox/adhoc.h0000644000175000017500000004363411273054312022542 0ustar euroelessareuroelessar/* Copyright (c) 2004-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef ADHOC_H__ #define ADHOC_H__ #include "dataform.h" #include "disco.h" #include "disconodehandler.h" #include "discohandler.h" #include "iqhandler.h" #include "stanzaextension.h" #include #include #include namespace gloox { class ClientBase; class Stanza; class AdhocHandler; class AdhocCommandProvider; /** * @brief This class implements a provider for XEP-0050 (Ad-hoc Commands). * * The current, not complete, implementation is probably best suited for fire-and-forget * type of commands. Any additional feature, like multiple stages, etc., would have to be * added separately. * * To offer commands to remote entities, use this class as follows:
* Create a class that will handle command execution requests and derive it from * AdhocCommandProvider. Instantiate an Adhoc object and register your * AdhocCommandProvider-derived object with the Adhoc object using * registerAdhocCommandProvider(). The additional parameters to that method are the internal * name of the command as used in the code, and the public name of the command as it * will be shown to an end user: * @code * MyClass::someFunc() * { * Adhoc* m_adhoc = new Adhoc( m_client ); * * // this might be a bot monitoring a weather station, for example * m_adhoc->registerAdhocCommandProvider( this, "getTemp", "Retrieve current temperature" ); * m_adhoc->registerAdhocCommandProvider( this, "getPressure", "Retrieve current air pressure" ); * [...] * } * @endcode * In this example, MyClass is AdhocCommandProvider-derived so it is obviously the command handler, too. * * And that's about it you can do with the Adhoc class. Of course you can have a AdhocCommandProvider * handle more than one command, just register it with the Adhoc object for every desired command, * like shown above. * * What the Adhoc object does when you install a new command is tell the supplied Disco object * to advertise these commands to clients using the 'Service Discovery' protocol to learn about * this implementation's features. These clients can then call and execute the command. Of course you * are free to implement access restrictions to not let anyone mess with your bot, for example. * However, the commands offered using Service Discovery are publically visible in any case. * * To execute commands offered by a remote entity:
* ...TBC... * * XEP version: 1.2 * @author Jakob Schroeter */ class GLOOX_API Adhoc : public DiscoNodeHandler, public DiscoHandler, public IqHandler { public: /** * @brief An abstraction of an Adhoc Command element (from Adhoc Commands, XEP-0050) * as a StanzaExtension. * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API Command : public StanzaExtension { friend class Adhoc; public: /** * Specifies the action to undertake with the given command. */ enum Action { Execute = 1, /**< The command should be executed or continue to be executed. * This is the default value. */ Cancel = 2, /**< The command should be canceled. */ Previous = 4, /**< The command should be digress to the previous stage of * execution. */ Next = 8, /**< The command should progress to the next stage of * execution. */ Complete = 16, /**< The command should be completed (if possible). */ InvalidAction = 32 /**< The action is unknown or invalid. */ }; /** * Describes the current status of a command. */ enum Status { Executing, /**< The command is being executed. */ Completed, /**< The command has completed. The command session has ended. */ Canceled, /**< The command has been canceled. The command session has ended. */ InvalidStatus /**< The status is unknown or invalid. */ }; /** * An abstraction of a command note. * * @author Jakob Schroeter * @since 1.0 */ class GLOOX_API Note { friend class Command; public: /** * Specifies the severity of a note. */ enum Severity { Info, /**< The note is informational only. This is not really an * exceptional condition. */ Warning, /**< The note indicates a warning. Possibly due to illogical * (yet valid) data. */ Error, /**< The note indicates an error. The text should indicate the * reason for the error. */ InvalidSeverity /**< The note type is unknown or invalid. */ }; /** * A convenience constructor. * @param sev The note's severity. * @param note The note's content. */ Note( Severity sev, const std::string& note ) : m_severity( sev ), m_note( note ) {} /** * Destructor. */ ~Note() {} /** * Returns the note's severity. * @return The note's severity. */ Severity severity() const { return m_severity; } /** * Returns the note's content. * @return The note's content. */ const std::string& content() const { return m_note; } /** * Returns a Tag representation of the Note. * @return A Tag representation. */ Tag* tag() const; private: #ifdef ADHOC_COMMANDS_TEST public: #endif /** * Constructs a new Note from the given Tag. * @param tag The Tag to parse. */ Note( const Tag* tag ); Severity m_severity; /**< The note's severity. */ std::string m_note; /**< The note's content. */ }; /** * A list of command notes. */ typedef std::list NoteList; /** * Creates a Command object that can be used to perform the provided Action. * This constructor is used best to continue execution of a multi stage command * (for which the session ID must be known). * @param node The node (command) to perform the action on. * @param sessionid The session ID of an already running adhoc command session. * @param action The action to perform. * @param form An optional DataForm to include in the request. Will be deleted in Command's * destructor. */ Command( const std::string& node, const std::string& sessionid, Action action, DataForm* form = 0 ); /** * Creates a Command object that can be used to perform the provided Action. * This constructor is used best to reply to an execute request. * @param node The node (command) to perform the action on. * @param sessionid The (possibly newly created) session ID of the adhoc command session. * @param status The execution status. * @param form An optional DataForm to include in the reply. Will be deleted in Command's * destructor. */ Command( const std::string& node, const std::string& sessionid, Status status, DataForm* form = 0 ); /** * Creates a Command object that can be used to perform the provided Action. * This constructor is used best to reply to a multi stage command that is not yet completed * (for which the session ID must be known). * @param node The node (command) to perform the action on. * @param sessionid The (possibly newly created) session ID of the adhoc command session. * @param status The execution status. * @param executeAction The action to execute. * @param allowedActions Allowed reply actions. * @param form An optional DataForm to include in the reply. Will be deleted in Command's * destructor. */ Command( const std::string& node, const std::string& sessionid, Status status, Action executeAction, int allowedActions = Complete, DataForm* form = 0 ); /** * Creates a Command object that can be used to perform the provided Action. * This constructor is used best to execute the initial step of a command * (single or multi stage). * @param node The node (command) to perform the action on. * @param action The action to perform. * @param form An optional DataForm to include in the request. Will be deleted in Command's * destructor. */ Command( const std::string& node, Action action, DataForm* form = 0 ); /** * Creates a Command object from the given Tag. * @param tag A <command> tag in the adhoc commands' namespace. */ Command( const Tag* tag = 0 ); /** * Virtual destructor. */ virtual ~Command(); /** * Returns the node identifier (the command). * @return The node identifier. */ const std::string& node() const { return m_node; } /** * Returns the command's session ID, if any. * @return The command's session ID. */ const std::string& sessionID() const { return m_sessionid; } /** * Returns the execution status for a command. Only valid for execution * results. * @return The execution status for a command. */ Status status() const { return m_status; } /** * Returns the command's action. * @return The command's action. */ Action action() const { return m_action; } /** * Returns the ORed actions that are allowed to be executed on the * current stage. * @return An int containing the ORed actions. */ int actions() const { return m_actions; } /** * Returns the list of notes associated with the command. * @return The list of notes. */ const NoteList& notes() const { return m_notes; } /** * Use this function to add a note to the command. * @param note A pointer to a Note object. The Command will own * the Note. */ void addNote( const Note* note ) { m_notes.push_back( note ); } /** * Returns the command's embedded DataForm. * @return The command's embedded DataForm. May be 0. */ const DataForm* form() const { return m_form; } // reimplemented from StanzaExtension virtual const std::string& filterString() const; // reimplemented from StanzaExtension virtual StanzaExtension* newInstance( const Tag* tag ) const { return new Command( tag ); } // reimplemented from StanzaExtension virtual Tag* tag() const; // reimplemented from StanzaExtension virtual StanzaExtension* clone() const { Command* c = new Command(); NoteList::const_iterator it = m_notes.begin(); for( ; it != m_notes.end(); ++it ) c->m_notes.push_back( new Note( *(*it) ) ); c->m_node = m_node; c->m_sessionid = m_sessionid; c->m_form = m_form ? static_cast( m_form->clone() ) : 0; c->m_action = m_action; c->m_status = m_status; c->m_actions = m_actions; return c; } private: #ifdef ADHOC_COMMANDS_TEST public: #endif NoteList m_notes; std::string m_node; std::string m_sessionid; DataForm* m_form; Action m_action; Status m_status; int m_actions; }; /** * Constructor. * Creates a new Adhoc client that registers as IqHandler with a ClientBase. * @param parent The ClientBase used for XMPP communication. */ Adhoc( ClientBase* parent ); /** * Virtual destructor. */ virtual ~Adhoc(); /** * This function queries the given remote entity for Adhoc Commands support. * @param remote The remote entity's JID. * @param ah The object handling the result of this request. */ void checkSupport( const JID& remote, AdhocHandler* ah ); /** * Retrieves a list of commands from the remote entity. You should check whether the remote * entity actually supports Adhoc Commands by means of checkSupport(). * @param remote The remote entity's JID. * @param ah The object handling the result of this request. */ void getCommands( const JID& remote, AdhocHandler* ah ); /** * Executes or continues the given command on the given remote entity. * To construct the @c command object, it is recommended to use either * Command( const std::string&, Action ) to begin execution of a command, or * Command( const std::string&, const std::string&, Action ) to continue execution * of a command. * @param remote The remote entity's JID. * @param command The command to execute. * @param ah The object handling the result of this request. */ void execute( const JID& remote, const Adhoc::Command* command, AdhocHandler* ah ); /** * Use this function to respond to an execution request submitted by means * of AdhocCommandProvider::handleAdhocCommand(). * It is recommended to use * Command( const std::string&, const std::string&, Status, DataForm* ) * to construct the @c command object. * Optionally, an Error object can be included. In that case the IQ sent is of type @c error. * @param remote The requester's JID. * @param command The response. The Adhoc object will own and delete the * command object pointed to. * @param error An optional Error obejct to include. */ void respond( const JID& remote, const Adhoc::Command* command, const Error* error = 0 ); /** * Using this function, you can register a AdhocCommandProvider -derived object as * handler for a specific Ad-hoc Command as defined in XEP-0050. * @param acp The obejct to register as handler for the specified command. * @param command The node name of the command. Will be announced in disco#items. * @param name The natural-language name of the command. Will be announced in disco#items. */ void registerAdhocCommandProvider( AdhocCommandProvider* acp, const std::string& command, const std::string& name ); /** * Use this function to unregister an adhoc command previously registered using * registerAdhocCommandProvider(). * @param command The command to unregister. */ void removeAdhocCommandProvider( const std::string& command ); // reimplemented from DiscoNodeHandler virtual StringList handleDiscoNodeFeatures( const JID& from, const std::string& node ); // reimplemented from DiscoNodeHandler virtual Disco::IdentityList handleDiscoNodeIdentities( const JID& from, const std::string& node ); // reimplemented from DiscoNodeHandler virtual Disco::ItemList handleDiscoNodeItems( const JID& from, const JID& to, const std::string& node ); // reimplemented from IqHandler virtual bool handleIq( const IQ& iq ); // reimplemented from IqHandler virtual void handleIqID( const IQ& iq, int context ); // reimplemented from DiscoHandler virtual void handleDiscoInfo( const JID& from, const Disco::Info& info, int context ); // reimplemented from DiscoHandler virtual void handleDiscoItems( const JID& from, const Disco::Items& items, int context ); // reimplemented from DiscoHandler virtual void handleDiscoError( const JID& from, const Error* error, int context ); private: #ifdef ADHOC_TEST public: #endif typedef std::map AdhocCommandProviderMap; AdhocCommandProviderMap m_adhocCommandProviders; enum AdhocContext { CheckAdhocSupport, FetchAdhocCommands, ExecuteAdhocCommand }; struct TrackStruct { JID remote; AdhocContext context; std::string session; AdhocHandler* ah; }; typedef std::map AdhocTrackMap; AdhocTrackMap m_adhocTrackMap; ClientBase* m_parent; StringMap m_items; StringMap m_activeSessions; }; } #endif // ADHOC_H__ qutim-0.2.0/plugins/jabber/libs/gloox/vcard.h0000644000175000017500000004656611273054312022572 0ustar euroelessareuroelessar/* Copyright (c) 2006-2009 by Jakob Schroeter This file is part of the gloox library. http://camaya.net/gloox This software is distributed under a license. The full license agreement can be found in the file LICENSE in this distribution. This software may not be copied, modified, sold or distributed other than expressed in the named license agreement. This software is distributed without any warranty. */ #ifndef VCARD_H__ #define VCARD_H__ #include "gloox.h" #include "stanzaextension.h" namespace gloox { class Tag; /** * @brief A VCard abstraction. * * See @link gloox::VCardManager VCardManager @endlink for info on how to * fetch VCards. * * @author Jakob Schroeter * @since 0.8 */ class GLOOX_API VCard : public StanzaExtension { public: /** * Addressing type indicators. * @note @c AddrTypeDom and @c AddrTypeIntl are mutually exclusive. If both are present, * @c AddrTypeDom takes precendence. * @note Also note that not all adress types are applicable everywhere. For example, * @c AddrTypeIsdn does not make sense for a postal address. Check XEP-0054 * for details. */ enum AddressType { AddrTypeHome = 1, /**< Home address. */ AddrTypeWork = 2, /**< Work address. */ AddrTypePref = 4, /**< Preferred address. */ AddrTypeX400 = 8, /**< X.400 address. */ AddrTypeInet = 16, /**< Internet address. */ AddrTypeParcel = 32, /**< Parcel address. */ AddrTypePostal = 64, /**< Postal address. */ AddrTypeDom = 128, /**< Domestic(?) address. */ AddrTypeIntl = 256, /**< International(?) address. */ AddrTypeVoice = 512, /**< Voice number. */ AddrTypeFax = 1024, /**< Fax number. */ AddrTypePager = 2048, /**< Pager. */ AddrTypeMsg = 4096, /**< MSG(?) */ AddrTypeCell = 8192, /**< Cell phone number. */ AddrTypeVideo = 16384, /**< Video chat(?). */ AddrTypeBbs = 32768, /**< BBS. */ AddrTypeModem = 65536, /**< Modem. */ AddrTypeIsdn = 131072, /**< ISDN. */ AddrTypePcs = 262144 /**< PCS. */ }; /** * A person's full name. */ struct Name { std::string family; /**< Family name. */ std::string given; /**< Given name. */ std::string middle; /**< Middle name. */ std::string prefix; /**< Name prefix. */ std::string suffix; /**< Name suffix. */ }; /** * Classifies the VCard. */ enum VCardClassification { ClassNone = 0, /**< Not classified. */ ClassPublic = 1, /**< Public. */ ClassPrivate = 2, /**< Private. */ ClassConfidential = 4 /**< Confidential. */ }; /** * Describes an email field. */ struct Email { std::string userid; /**< Email address. */ bool home; /**< Whether this is a personal address. */ bool work; /**< Whether this is a work address. */ bool internet; /**< Whether this is an internet address(?). */ bool pref; /**< Whether this is the preferred address. */ bool x400; /**< Whether this is an X.400 address. */ }; /** * A list of email fields. */ typedef std::list EmailList; /** * Describes a telephone number entry. */ struct Telephone { std::string number; /**< The phone number. */ bool home; /**< Whether this is a personal number. */ bool work; /**< Whether this is a work number. */ bool voice; /**< Whether this is a voice number. */ bool fax; /**< Whether this is a fax number. */ bool pager; /**< Whether this is a pager. */ bool msg; /**< MSG(?) */ bool cell; /**< Whether this is a cell phone. */ bool video; /**< Whether this is a video chat(?). */ bool bbs; /**< Whether this is a BBS. */ bool modem; /**< Whether this is a modem. */ bool isdn; /**< Whether this is a ISDN line(?) */ bool pcs; /**< PCS(?) */ bool pref; /**< Whether this is the preferred number. */ }; /** * A list of telephone entries. */ typedef std::list TelephoneList; /** * Describes an address entry. */ struct Address { std::string pobox; /**< Pobox. */ std::string extadd; /**< Extended address. */ std::string street; /**< Street. */ std::string locality; /**< Locality. */ std::string region; /**< Region. */ std::string pcode; /**< Postal code. */ std::string ctry; /**< Country. */ bool home; /**< Whether this is a personal address. */ bool work; /**< Whether this is a work address. */ bool postal; /**< Whether this is a postal address(?). */ bool parcel; /**< Whether this is a arcel address(?). */ bool pref; /**< Whether this is the preferred address. */ bool dom; /**< Whether this is a domestic(?) address. */ bool intl; /**< Whether this is an international(?) address. */ }; /** * Describes an address label. */ struct Label { StringList lines; /**< A list of lines. */ bool home; /**< Whether this is a personal address. */ bool work; /**< Whether this is a work address. */ bool postal; /**< Whether this is a postal address(?). */ bool parcel; /**< Whether this is a arcel address(?). */ bool pref; /**< Whether this is the preferred address. */ bool dom; /**< Whether this is a domestic(?) address. */ bool intl; /**< Whether this is an international(?) address. */ }; /** * Describes geo information. */ struct Geo { std::string latitude; /**< Longitude. */ std::string longitude; /**< Latitude. */ }; /** * Describes organization information. */ struct Org { std::string name; /**< The organizations name. */ StringList units; /**< A list of units in the organization * (the VCard's owner belongs to?). */ }; /** * Describes photo/logo information. */ struct Photo { std::string extval; /**< The photo is not stored inside the VCard. This is a hint (URL?) * where to look for it. */ std::string binval; /**< This is the photo (binary). */ std::string type; /**< This is a hint at the mime-type. May be forged! */ }; /** * A list of address entries. */ typedef std::list
AddressList; /** * A list of address labels. */ typedef std::list