- 1 Sim-IM 0.9.4.4
- 2 Sim-IM 0.9.5
- 3 Sim-IM 0.9.6
- 3.1 Semi-port to qt4 using qt3support
- 3.2 Architecture changes
- 4 Sim-IM 0.9.7 and later
- 5 Sim-IM 1.0
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.
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
- Bug #15110 ICQ: Sim-IM user's Avatar/Photo is not visible in non-Sim-IM clients Assigned to dirihle
- Task #4291 Move from autoconf/automake to cmake. Partly done
- Task #4294 Remove non-free media content from the project source code (see Bug #8843)
- Task #4297 KDE spell check should work
- Task #4298 Correct processing of connection troubles and correct reconnect
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 listfixed by int32 (Dmitry Karasik)
Bug #11493 ICQ: Impossible to change value of "Allow other to view my status from the web" optionfixed by dushistov_ea
- Bug #9129 ICQ: Filetransfer is broken In progress by dirihle and noragen
- 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 Groupmanagement
Bug #11669 Unable to connect password protected HTTPS Proxyfixed by Alex Masterov
Bug #10426 Jabber: Some messages is received twice.fixed by reklov
Jabber: Impossible to move some contacts from one group to anotherfixed by Shaplov
Bug #10994 Sim-IM loose configure files when disk is fullfixed by Shaplov
Sim-IM loose configure files when pressing Cancel while changing profilefixed 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 0.9.4.3/4 ? needs testing)fixed by chehrlic (Christian Ehrlicher) Bug #12348 AIM: Messages does not arrive ICQ6-Users (but it seems to work with SIM 0.9.4.3/4 ? 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 SMSfixed 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.
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
- 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 ==> crashfixed by Shaplov
- Bug #14122 new ICQ connection -> old account loose in/visible grouping
Bug #14121 moving User in another group looses auth-statusfiexed 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
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::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 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.
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
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
- Port to QT4.x