summaryrefslogtreecommitdiff
path: root/docs/design.txt
blob: 66790b6a8cae112046993413e8a4d3f42215777c (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117

 Irssi's hierarchy is something like this:


         sub1 sub2
            \ /
       xxx  IRC       COMMON ICQ  yyy
        |____|___________|____|____|
                   |
                  GUI (gtk/gnome, qt/kde, text, none)
                   |
         sub1 sub2 |
            \ /    |
       xxx  IRC    |  COMMON ICQ  yyy
        |____|_____|_____|____|____|
                   |
               COMMON UI
                   |
         sub1 sub2 |
            \ /    |
       xxx  IRC    |    ICQ  yyy
        |____|_____|_____|____|
                   |
                 CORE
                 /  \
        lib-config  lib-popt


 (IRC, ICQ, xxx and yyy are chat protocols ..)
 (sub1 and sub2 are submodules of IRC module, like DCC and flood protect)


 Chat protocols and frontends are kept in separate modules. Common UI
 and GUI modules also have the common parts which don't know anything
 about the chat protocols. This should allow implementing modules to
 whatever chat protocols and with whatever frontends easily.


 ** lib-popt

   CORE depends on this for command line parameter handling.
   (distributed with irssi)


 ** lib-config

   Irssi depends on this for reading and saving configuration.
   (created by me for irssi)


 ** CORE module

 Provides some functionality that all other modules can use:
   - signal handling
   - keeping list of settings
   - keeping list of /commands
   - keeping track of loaded modules
   - networking functions (with nonblocking connects, IPv6 support)
   - handles connecting to servers
   - raw logging of server's input/output data
   - /EVAL support
   - fgets() like function line_split() without any maximum line limits
   - command line parameter handling
   - miscellaneous useful little functions
   - handles logging


 ** COMMON UI module

   - knows basics about windows and window items (=channels, queries, ..)
   - printtext() - parsing texts and feeding it for GUI to print.
   - themes
   - translation tables
   - text hilighting
   - command history
   - user interface (/commands) for CORE's functionality


 ** GUI modules

   - all the rest of the functionality needed for a working client.


 ** IRC module

   * CORE

     - IRC specific /commands
     - flood protecting commands sent to server
     - creating IRC masks based on nick/address for bans, ignores, etc.
     - keeps list of channels, nicks, channel modes, bans, etc.
     - keeps list of servers, server settings, irc networks,
       server reconnections and irc network splits
     - redirection of commands' replies
     - lag detection
     - ctcp support and flood protection
     - Handles ignoring people

   * DCC

     - DCC chat, send and get

   * FLOOD

     - detects private or channel flooding and sends "flood" signal
     - automatic ignoring when flooding

   * NOTIFYLIST

     - handles notifylist


 ** IRC UI module

   - placing channels and queries in windows
   - nick completion
   - printing infomation of some events