Please find attached the log of today's meeting. Topics: Mainly GUI and plugin 
clarifications.

Arne

-- 
Dipl.-Inform. Arne Schmitz              Phone   +49 (0)241 80-21817
Computer Graphics Group                 Fax     +49 (0)241 80-22899
RWTH Aachen University                  http://www.rwth-graphics.de
Ahornstrasse 55, 52074 Aachen, Germany
* Du sprichst jetzt in #licq
* Das Thema für #licq ist: Meeting Today | http://www.frappr.com/licq | Licq 
1.3.2 | http://www.licq.org | If you can't get your answer here, use the 
mailing list: licq-main@lists.sourceforge.net | licq.org's new SSH fingerprint: 
1e:3f:35:a6:f3:01:8b:23:68:dd:da:12:3d:b3:28:62
* Das Thema für #licq wurde gesetzt durch emostar um Tue Jun  6 06:02:26 2006
* CTCP VERSION von freenode-connect empfangen
* tirramissu hat die Verbindung getrennt (Remote closed the connection)
* tirramissu ([EMAIL PROTECTED]) hat #licq betreten
* Camael ([EMAIL PROTECTED]) hat #licq betreten
Camael alright, think I'm too late for the meeting ...
erijo Camael: no, it hasn't started yet...
Camael normally I'm at university at that time - when does it actually start?
erijo today i think it will start when emostar returns
Camael alright :)
erijo to quote: 11:36 <@emostar> instead of 20:00 perhaps 21:00, i'm going out 
for a lil bit after work
erijo and i think he's gmt+9
Camael hm ... "if you cannot say a good thing about it better say nothing" (or 
however this saying is in english) ...
Agrajag- that would make it now wouldn't it? it's 21:25 gmt+9 now isn't it?
erijo it is
Camael didn't have the time to follow the development of Licq. how far is the 
new version now?
erijo i'd say not that far
Camael the problem is that it's quite hard to get an impression of the progress 
because jon copied the whole old source into the new branch (which is not the 
best idea in my eyes)...
erijo As a programmer it is tempting to start from scratch, but i think jon did 
the right call when deciding to base the new api on the old codebase. It's 
easier to work with something that compiles and runs. You don't have to rewrite 
everything at once, instead you can do it piece by piece.
Camael yes, but it was jon who said the the source is (a) full of obsolete code 
and (b) not that lucid anymore... this will create nothing but long search 
times for a certain part in the source, even longer trash killing and a much 
longer debugging... if the new and the old engine would base on the same idea 
this wasn't a problem but I think the paradigm is somehow new
Rapp i agree wit erijo 
Rapp with
Agrajag- i think once the new api stuff is figured out, the "trash killing" and 
debugging shouldn't be too hard. i imagine once the icq protocol is taken out 
of the daemon there wont be so much obsolete code
Camael hm ... hopefully. another problem is that it's quite hard to get into 
the structure of the code for programmers (except jon)... however
Rapp yup, the rest is pretty straight forward i guess
Rapp well, any foreign code is difficult to manage at first. but i found it 
relatively easy after a short time to figure out some stuff in the innards of 
licq. although i haven't come around to fix the two or three things, i always 
wanted to fix...
Agrajag- i think the new protocol api will make it a lot easier to understand 
anyway
erijo i belive that it's psychological good to always have a fully working licq 
(even if it isn't actually working and you're just fooling yourself)
Rapp i think the old licq "only" has some high level design problems, not so 
much code readability
erijo Rapp: there are places... :)
Rapp ah, well...
Rapp :)
Camael erijo: maybe ... although experience showed me the opposite :)
Rapp anyway -- one should also not fall for the over-engineering trap. good 
SW-engineering is important, but sometimes you just have to start with 
something that plainly works and is maintainable.
Rapp the rest is then a process of re-engineering
Rapp and that's what we do with licq
Rapp and i think it is a good way to do it.
Camael hm, yes ... it might depent on the success that one had with this 
technique
Camael :)
erijo i agree. a "good" api in a year is better than "the perfect" in three ;)
Camael yes, but the "perfect" api might have a lifetime of 10 years while the 
"good" lives 5 :)
Rapp Camael, yes, of course. if you become leader of a project like 
¨relational database written in gw-basic" you better start from scratch. it 
depends on the setting which tool you should choose. i for one think that licq 
is not such a case where we need a restart.
Rapp just rip the stupid icq protocol out of the daemon and everything will 
look better :)
Camael hehe, too easy to be the wrong way :)
erijo a "good" api can always evolve into "the perfect" one...
Agrajag- ok i can't stay up any later, gotta go to bed, gotta get to work early 
tomorrow. cya guys
Camael apropos easyness: think one should start thinking about the design of 
the new frontend. because the backend and the frontend are more or less 
independant from the users way maybe some people should make first drafts about 
it so everything is in a good state of development when the backend is ready
Rapp Agrajag-, cu
Camael see you
erijo Agrajag-: cu
erijo Camael: you mean qt-gui-ng?
Camael yup
Camael it's kinda antiquated regarding the look and the usability
erijo agree
erijo but first someone has to come up with a good idea for how plugins can 
alter the gui
Camael hm ... I don't really think that this depends on creating first stuff 
about the new gui.... 
Camael but of course it's important ... has someone had a godd idea already?
Camael godd -> good
erijo not that i know
erijo there was some talk about xml, but that might be a bit too complex
Camael hm ... someone in the mailing list wrote that a kind of XML meta GUI API 
would be a bad idea which is propably true. jon once suggested to let the 
plugins only modify specific places (users menu, toolbar ...). this would be 
the easiest and most efficient thing but would make plugins not THAT cool 
anymore :) (I'm thinking about "contactlist nicer" or a better history window 
or stuff like this).
Rapp what exactly are the requirements? what needs to be altered in the gui?
erijo Rapp: that is the central question
Camael ... this question is still a task in the mailing list I think
erijo yup, i tried starting a thread, but...
Camael the problem is that basically everything could be altered. eg someone 
doesn't like the standard chat window -> install a plugin which delivers a new 
chat window in IRC style or so ...
Camael so what can be done answering this question is "what MINIMALLY should a 
plugin be able to alter"
Rapp hm
Camael but the question is whether this will help, because if you now say 
"let's give it the possibility to add entries to the main menu" what shall 
happen then? a window must pop up
Rapp i think things like that should be provided only later
Rapp i think the most important things are:
Rapp 1. giving an option tab in the configuration dialog for each plugin
Rapp (or something similar)
Rapp 2. allowing plugins to install hooks, e.g. in the context menu or the 
message window of a contact
Rapp 3. allowing plugins to maybe represent a button or something in the 
message window (similar to above, e.g. for encryption plugins)
Camael sorry, have to go now. see you later 
Rapp cu
erijo cu
* Camael has to go buying things
Rapp is there anything else to talk about? and where is emostar today? :)
erijo should we create an abstract LicqGui class with all required operations, 
and require qt-gui, gkt-gui, html-gui etc. to implement concrete classes?
Rapp hm
Rapp would be a solution, maybe
Rapp how is this handled at the moment?
Rapp actually i think it would be quite a good idea, maybe
Rapp what kind of operations would we need?
erijo we could create a minimalistic gui package
Rapp do the current GUIs communicate via the pipe?
Rapp or is there some more sophisticated communication ATM?
erijo in trunk there is a pipe
erijo in newapi no
erijo all communication is done by sending events
erijo i.e. calling functions
Rapp yes, i see
Rapp should be faster :) if that is a problem...
Rapp i think the following:
Rapp 1. a gui plugin needs to support some basic authentication and message 
receive/sending stuff
Rapp that could be done of course in form of some aptly named functions that 
are called by the daemon / plugin router,
Rapp 2. the question is, where do for example the histories go? is there a 
history plugin? is it part of the user objects?
Rapp (i would guess something like that)
erijo i would like to see support for "meta users", so this is how i see it: 
erijo a message is received by the daemon from the a icq protocol plugin 
instance. The daemon replaces the user object with the meta user object
erijo the message is then sent to all plugins that have registered to receive 
messages, e.g. a history plugin
erijo this way you can have a "text file history" and e.g. a "mysql history"
Rapp don't forget the decryption plugins....
Rapp we had that last week, too
Rapp decryption plugins would have to be synchronous
Rapp since decryption may depend on interactive passphrase input
Rapp a decrypt plugin would have to be able to store the incoming messages, or 
otherwise the pipeline might be: icq -> daemon -> history -> decrypt [-> 
optional decrypted history replacement] -> gui
erijo yes, but if the decrypt plugin returns something to stop further 
processing the daemon wont send it to the history plugin. Then, when the 
decryption is done, the decrypt plugin would ask the daemon to continue 
processing
erijo i assume that you don't want to store encrypted messages?
Rapp no, i think i want them decrypted. that what other users told me, too. in 
case they loose the key or something
Rapp our idea last week was:
Rapp store a flag (ENCRYPTED) in the message
Rapp and delay all messages after that, until the decryption plugin has 
decrypted all encrypted messages (deleting the flag)
Rapp so the history may store E messages temporarily
Rapp but according to jon the flow of messages must be in order of arrival
Rapp so we have to process the messages in a deterministic pipeline.
Rapp at least for each contact!
Rapp multiple contacts could possibly be processed asynchronously
erijo something like this:
Rapp the history plugin might also store incoming messages, even if the decrypt 
plugin stalls while waiting for user input
erijo the decrypt plugin is the first to receive an incoming message
erijo if the message is encrypted it's marked with ENCRYPTED flag
erijo the message continues down the pipe
Rapp mhm
erijo the history plugin stores it
erijo the gui skips it, waiting for the decrypted one
erijo when the decryption is done, the decrypt plugin sends it down the pipe 
again
erijo since the unique id of the message is the same, all plugins know that 
this is an updated version
Rapp yes, that is a possible solution
erijo the history plugin replaces the previous stored one
erijo the gui shows this one
Rapp exactly.
Rapp plus the gui should delay display of messages, until the decrypted one has 
arrived. although i htink this might lead to problems
Rapp but otherwise order of packages might get disturbed.
Rapp one *might* display "Message encrypted!" in the gui or something
Rapp maybe with a hotspot to force decryption...
Rapp i meant: order of messages
erijo this is only a problem if a user sends an encrypted message followed by 
an unencrypted one
erijo in that case, do as you said is a good idea
erijo *doing
Rapp yes, but you never know, it might happen.
Rapp plus we definitely have to have an option to skip the decryption if 
necessary, e.g. if someone forgot the password
Rapp with my proposed flow it would be possible to cancel the decryption dialog 
and still see following unencrypted messages
Rapp but anyway, your pipeline flow is i think great. combined with the above 
described behavior of the gui, i think it should work.
erijo am i correct in assuming that you only enter the password for the first 
message (per session)?
Rapp no, not necessarily. e.g. gpg-agent uses the qt-pinentry module to ask for 
the passphrase every N minutes (i.e. it caches the phrase for N minutes)
Rapp some people even prefer to not cache it at all
erijo k
Rapp also gpg-agent might use an attached smart-card to decrypt.
Rapp which the user can plug off any time
Rapp (also i guess no licq user uses this :)
erijo what if we replace the encryption flag with an encryption-pending and an 
encryption-failed flag?
Rapp well
Rapp why that?
Rapp oh, i see
erijo i would leave it to the gui to do whatever it thinks is best
Rapp yes, the user could tell licq to never try to decrypt the message again.
Rapp or what would you like to achieve with that?
erijo (just a note: i meant decryption-pending etc...)
Rapp yes, of course
erijo if you just have encrypted, the gui can't tell if it can assume that a 
decrypted will arrive
erijo but maybe this is an implementation detail and not worth discussing now?
erijo better to focus on the main flow
Rapp yes, it is a detail, but the order of the plugins is still important and 
more high-level. but i think this is discussed enough
erijo as long as the gui knows that the message is encrypted, it can do 
whatever it likes. And, as long as message have a timestamp, the gui can chose 
to display a "Message encrypted!" placeholder if an clear-text message is 
received before the decrypted
Rapp yep
erijo but the decryptplugin has to be able to ask for a password. So we're back 
to that issue again...
Rapp that is not hte issue of the decryptplugin
Rapp that is the issue of the encryption library
Rapp e.g. gpg-agent is called by gpgme
Rapp and gpg-agent chooses an input method, e.g. a qt-dialog
Rapp we do not have to know anything about that
Rapp the only important thing is, that the decryption plugin runs as its own 
thread, because the input is blocking!
erijo this wouldn't work with a html gui
Rapp yes, true. that is the problem of the html gui :)
erijo nor a console gui
Rapp that i don't know. gpg-agent can also ask a passphrase on the console. but 
i am not sure if that works in a multi-threaded program
Rapp anyhow: we cannot even do anything about it, because gpgme handles all 
that stuff.
Rapp that is the good and the bad about gpgme
erijo it isn't possible to pass a password to the decrypt function?
Rapp other libraries might do it differently... but i think gpgme will be the 
most used plugin
Rapp hmmmm
Rapp lemme see
Rapp oh, yes, we can set a passphrase callback
Rapp although gpgme advises to let the backend engine (e.g. gpg) use its own 
passphrase agent
Rapp *slap*
Rapp man i am stupid
erijo if $DISPLAY is set then let gpgme handle it, else send a message asking 
the gui to ask the user
Rapp this solves also a current problem of blocking the qt-gui....
Rapp exactly
Rapp ok, i have got to leave
Rapp will you send a log of this session to the list, or shall i do this?
erijo please do :)
Rapp ok. then cu next week or so

Attachment: pgpCHO3ELwucx.pgp
Description: PGP signature

_______________________________________________
Licq-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/licq-devel

Reply via email to