From Sim-Im
Jump to navigation Jump to search


We are not planning to release any bugfix releases of 0.9.4.x branch. If you are interested in porting bug-fixes from 0.9.5 branch into 0.9.4.x, please contact the development team via Mailing lists.

Sim-IM 0.9.5

General layout: Finish all tasks that were started by WRAR team, fix all known bugs that crashes or spoils something (if fix is possible without great architecture changes), or works totally wrong. Other bugs are optional, but also good to fix.


  • Task #4286 Internal unicode usage: use QString and QByteArray where ever is possible. Partly done by Chehrlic.
  • Task #4289 ICQ: Support for new avatar approach in ICQ 5.1 and QIP. Partly done by Chehrlic and dirihle
    • Bug #15110 ICQ: Sim-IM user's Avatar/Photo is not visible in non-Sim-IM clients Done by dirihle
  • Task #4291 Move from autoconf/automake to cmake. Partly done
    • Task #4292 Implement creating source tarball via cpack Almost done by dirihle
    • Task #4293 Make i18n messages processing autoconf/automake independant Partly done by Shaplov
  • Task #4297 KDE spell check should work
    • Bug #5995 KDE spell check: Marked misspelled words is sent to recipient coloured in red color
    • Bug #5994 KDE spell check tries to analyse html tags of formatted message
    • Bug #12254 KDE spell check highlights all words in message in some cases.
  • Task #4298 Correct processing of connection troubles and correct reconnect
    • Bug #10945 Sim-IM can't connect the network after changing of network address
    • Task #4299 Go to inactive status when connection to the server is lost
    • Task #4300 Go to incative status when OS reports network down. Partly done by dirihle


  • Bug #10650 Impossible to add Non-IM contact: fixed by Vooft (Mikheev N.)
  • Bug #11757 ICQ: Users from ignore list can't be deleted from contact list fixed by int32 (Dmitry Karasik)
  • Bug #11493 ICQ: Impossible to change value of "Allow other to view my status from the web" option fixed by dushistov_ea
  • Bug #9129 ICQ: Filetransfer is broken Almost done by dirihle and noragen
  • Bug #11669 Unable to connect password protected HTTPS Proxy fixed by Alex Masterov
  • Bug #10426 Jabber: Some messages is received twice. fixed by reklov
  • Jabber: Impossible to move some contacts from one group to another fixed by Shaplov
  • Bug #10994 Sim-IM loose configure files when disk is full fixed by Shaplov
  • Sim-IM loose configure files when pressing Cancel while changing profile fixed by Shaplov THIS HAS TO BE REVALIDATED DUE TO CHANGE OF LOGINDLG.CPP
  • Bug #11221 Send button for "Authorization request" is always disabled, when request is sending from message window menu. fixed by Noragen
  • Bug #12255 Update button in userinfo/settings window is not re-enabling after updating.
  • Bug #12313 ICQ: Messages does not arrive ICQ6-Users (but it seems to work with SIM ? needs testing) fixed by chehrlic (Christian Ehrlicher)
  • Bug #12348 AIM: Messages does not arrive ICQ6-Users (but it seems to work with SIM ? needs testing) fixed by Dirihle
  • Bug #14123 New profile -> contact Msg's are not displayed until self send, due to creation of history file
  • Bug #10530 ICQ: Impossible to send SMS fixed by Shaplov
  • Bug #9681 Jabber: Problems with bold and underlined text in messages from gaim/pidgin
  • Bug #9051 ICQ: Jabber groups is created on ICQ server when using ICQ and Jabber together
  • Bug #12257 Jabber: Sim-IM crashes when trying to send contact (Contact List menu option). fixed by Chehrlic (Christian Ehrlicher)
  • Bug #6969 Yahoo search and add does not work. fixed by dirihle
  • Bug #9236 Online contacts shown as offline after period of time (OSCAR-Specs-Problem, only non-authorized contacts seems to be affected) fixed needs testing by chehrlic (Christian Ehrlicher)
  • Bug #12314 ICQ: Change Passwords is not possible fixed by dirihle
  • Bug #12316 Jabber: Change Passwords is not possible
  • Bug #12319 Server-stored Non-IM contacts are afaik are not added to contactlist... (not processed?)
  • Bug #12320 Yahoo/MSN joined with ICQ contacts, cannot be put in visible/invisible list ==> crash fixed by Shaplov
  • Bug #14122 new ICQ connection -> old account loose in/visible grouping
  • Bug #14121 moving User in another group looses auth-status fixed by dirihle
  • Bug #14120 ICQ6-User is only after auth and sim-restart visible in SIM


Bug #XXXXX — Bugs/tasks that blocks release. Can't release without fixing them

Bug #XXXXX — Normal bugs/tasks. Should be fixed if there is no serious problems.

Bug #XXXXX — Optional bugs/tasks. We can release without fixing them, though would be good to fix them anyway.

Bug #XXXXX — Fixed bug/finished task


  • Bug #12259 MSN, Yahoo and OSCAR plugin can't be used together. Non-IM-Contacts conflicting, too. We should at least warn a user when creating new connection. ==>fix Group management

Sim-IM 0.9.6

Semi-port to qt4 using qt3support

We should do (or at last try as much as possible) Sim-IM buildable both with qt3 and with qt4 (using qt3support).

Qt3support is a library that provides backward compatibility classes that allows to build qt3 code with qt4, without great changes. Also it provides specific script that parses and the code and change qt3 staff with qt3support and qt4 staff. To build the code with both qt3 and qt4 we should make these changes revertable. Here are general types of changes made by qt3support script, and the ways this changes may be done revertable:

Usage of Compatibility Classes

QXxxxxxx -> Q3Xxxxxxx: Qt4 provides a number of Q3 Compatibility Classes which differs from Qt3 ones just by adding "3" to the name of the classes. So thats what qt3support script does, just changes class names. To make code, changed in that way, buildable with qt3 we should rename these class names back to Qt3 notation. This can be done by simple #define Q3PopupMenu QPopupMenu in qt3-specific .h file.

Const's Namespace Changes

WType_Popup -> Qt::WType_Popup. The second difference between Qt3 and Qt4's Qt3Support is changes of namespaces of different consts. All Qt3 consts are located in common namespace, and in Qt4 they were moved to different namespaces, mostly in Qt-namespace. So when qt3support parses code, it adds namespaces to conts's names. To make code buildable by both frameworks we should create Compatibility Consts, that will be replaced by preprocessor to qt3 const or to qt4 before building the code. Just add #define Q3WType_Popup WType_Popup into qt3-specific .h file and #define Q3WType_Popup Qt::WType_Popup into qt4-specific .h file.

Incompatibility in class names

QIconSet -> QIcon Names of some classes were changed, while moving from qt3 to qt4, though classes remans method-compatible. For example qt3support script changes class name QIconSet into QIcon. Everything else remains the same. To make this code qt3 buildable we should create specific compatibility class-name ourself, Q3IconSet for example, which will be replaced by the real name required by each framework: #define Q3IconSet QIconSet in qt3-specific .h file, and #define Q3IconSet QIcon in qt4-specific .h file

QString issues

QString::utf8 is widely used in Sim-IM, and not recommended to use in qt4 as not reentant. Qt4 recomeds to use QString::toUtf8 instead. But there is no such method in qt3. So we should create Compatibility class Q4String, witch will emulate toUtf8 method for qt3 builds, and use that method instead of utf8

QCString issues

QCString has compatibility class Q3CString in qt3support, but we should better not to use it at all. We should replace all QCStrings by QStrings and QByteArrays, depending on context.

Other issues

All other issues can be bypassed by writing code twice, and enclose in #ifdef QT3 ..... #else .... #endif. Hope there will be not too much code enclosed in such ifdef's

Architecture changes

Get rid of static casts

We should remove all static casts between static structures and all void * function arguments.

Step-by-step incoming/outgoing message processing

1. All messages should be sent and received only via event system. Procedure that sends message should know nothing about client that sends that message, only client's id.

2. Handle message receiveing(sending) as multistep event. Each plugin will be able to bind to some step, do something (may be change some message properties), and then pass message through, hold it, or remove it. For example:

0. Jabber: Incomming message: start processing.
1. Antispam: Known contact: pass
2. History: Logs message into file: pass
3. Soud: Says ku-ku: pass
4. Contact list: Show blinking message: hold (till user says 'open')
4.1. (User press 'open')
5. Contaner: shows new message: pass
6. (no other actions: finished)

In this way user list for example should not know anything about container, it just passes message to the next element of the queue, may be setting some flag, like "open in new container".

In this way we can also write "robot" plugin that will bind between steps 2 and 3, and do something if this message. belongs to him, fetch this message away and nobody will be bothered by ku-ku.

And so on. (History plugin might be binded to all levels to mark changes of the state (for example that message were read) in history file)

  • Create TextMessage abstract class:
    • This class should be inherited by protocol specific TextMessages classes
    • All interaction with message: showing, creating new message to send, etc should be done via virtual functions of that class
    • All plugins are able to get incoming message and do something with sending message (which are represented by this class), if they want to by using existing event system (so will need to add some events for it)
  • After TextMessage class is implemented we will be able:
    • Rewrite history plugin
    • Create spam-filter plugin

Sim-IM 0.9.7 and later

  • Create Contat protocol independent generic class
  • Create Group protocol independent generic class
  • Create Protocol protocol independent generic class
  • Create Profile abstract class
  • Try to separate parsing code from UI-specific code
  • Something else

Sim-IM 1.0

  • Port to QT4.x