src/eric7/Network/IRC/IrcNetworkManager.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
19 19
20 class IrcIdentity: 20 class IrcIdentity:
21 """ 21 """
22 Class implementing the IRC identity object. 22 Class implementing the IRC identity object.
23 """ 23 """
24
24 DefaultIdentityName = "0default" 25 DefaultIdentityName = "0default"
25 DefaultIdentityDisplay = QCoreApplication.translate( 26 DefaultIdentityDisplay = QCoreApplication.translate(
26 "IrcIdentity", "Default Identity") 27 "IrcIdentity", "Default Identity"
27 28 )
28 DefaultAwayMessage = QCoreApplication.translate( 29
29 "IrcIdentity", "Gone away for now.") 30 DefaultAwayMessage = QCoreApplication.translate("IrcIdentity", "Gone away for now.")
30 DefaultQuitMessage = QCoreApplication.translate( 31 DefaultQuitMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric IDE")
31 "IrcIdentity", "IRC for eric IDE") 32 DefaultPartMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric IDE")
32 DefaultPartMessage = QCoreApplication.translate( 33
33 "IrcIdentity", "IRC for eric IDE")
34
35 def __init__(self, name): 34 def __init__(self, name):
36 """ 35 """
37 Constructor 36 Constructor
38 37
39 @param name name of the identity (string) 38 @param name name of the identity (string)
40 """ 39 """
41 super().__init__() 40 super().__init__()
42 41
43 self.__name = name 42 self.__name = name
44 self.__realName = "" 43 self.__realName = ""
45 self.__nickNames = [] 44 self.__nickNames = []
46 self.__serviceName = "" 45 self.__serviceName = ""
47 self.__password = "" 46 self.__password = ""
48 self.__ident = Utilities.getUserName() 47 self.__ident = Utilities.getUserName()
49 48
50 self.__rememberPosOnAway = True 49 self.__rememberPosOnAway = True
51 self.__awayMessage = IrcIdentity.DefaultAwayMessage 50 self.__awayMessage = IrcIdentity.DefaultAwayMessage
52 51
53 self.__quitMessage = IrcIdentity.DefaultQuitMessage 52 self.__quitMessage = IrcIdentity.DefaultQuitMessage
54 self.__partMessage = IrcIdentity.DefaultPartMessage 53 self.__partMessage = IrcIdentity.DefaultPartMessage
55 54
56 def save(self, settings): 55 def save(self, settings):
57 """ 56 """
58 Public method to save the identity data. 57 Public method to save the identity data.
59 58
60 @param settings reference to the settings object (QSettings) 59 @param settings reference to the settings object (QSettings)
61 """ 60 """
62 # no need to save the name because that is the group key 61 # no need to save the name because that is the group key
63 settings.setValue("Ident", self.__ident) 62 settings.setValue("Ident", self.__ident)
64 settings.setValue("RealName", self.__realName) 63 settings.setValue("RealName", self.__realName)
67 settings.setValue("Password", self.__password) 66 settings.setValue("Password", self.__password)
68 settings.setValue("QuitMessage", self.__quitMessage) 67 settings.setValue("QuitMessage", self.__quitMessage)
69 settings.setValue("PartMessage", self.__partMessage) 68 settings.setValue("PartMessage", self.__partMessage)
70 settings.setValue("RememberAwayPosition", self.__rememberPosOnAway) 69 settings.setValue("RememberAwayPosition", self.__rememberPosOnAway)
71 settings.setValue("AwayMessage", self.__awayMessage) 70 settings.setValue("AwayMessage", self.__awayMessage)
72 71
73 def load(self, settings): 72 def load(self, settings):
74 """ 73 """
75 Public method to load the identity data. 74 Public method to load the identity data.
76 75
77 @param settings reference to the settings object (QSettings) 76 @param settings reference to the settings object (QSettings)
78 """ 77 """
79 self.__ident = settings.value("Ident", Utilities.getUserName()) 78 self.__ident = settings.value("Ident", Utilities.getUserName())
80 self.__realName = settings.value("RealName", "") 79 self.__realName = settings.value("RealName", "")
81 self.__nickNames = Preferences.toList(settings.value("NickNames", [])) 80 self.__nickNames = Preferences.toList(settings.value("NickNames", []))
82 self.__serviceName = settings.value("ServiceName", "") 81 self.__serviceName = settings.value("ServiceName", "")
83 self.__password = settings.value("Password", "") 82 self.__password = settings.value("Password", "")
84 self.__quitMessage = settings.value( 83 self.__quitMessage = settings.value(
85 "QuitMessage", IrcIdentity.DefaultQuitMessage) 84 "QuitMessage", IrcIdentity.DefaultQuitMessage
85 )
86 self.__partMessage = settings.value( 86 self.__partMessage = settings.value(
87 "PartMessage", IrcIdentity.DefaultPartMessage) 87 "PartMessage", IrcIdentity.DefaultPartMessage
88 )
88 self.__rememberPosOnAway = Preferences.toBool( 89 self.__rememberPosOnAway = Preferences.toBool(
89 settings.value("RememberAwayPosition", True)) 90 settings.value("RememberAwayPosition", True)
91 )
90 self.__awayMessage = settings.value( 92 self.__awayMessage = settings.value(
91 "AwayMessage", IrcIdentity.DefaultAwayMessage) 93 "AwayMessage", IrcIdentity.DefaultAwayMessage
92 94 )
95
93 def setName(self, name): 96 def setName(self, name):
94 """ 97 """
95 Public method to set the identity name. 98 Public method to set the identity name.
96 99
97 @param name identity name (string) 100 @param name identity name (string)
98 """ 101 """
99 self.__name = name 102 self.__name = name
100 103
101 def getName(self): 104 def getName(self):
102 """ 105 """
103 Public method to get the identity name. 106 Public method to get the identity name.
104 107
105 @return identity name (string) 108 @return identity name (string)
106 """ 109 """
107 return self.__name 110 return self.__name
108 111
109 def setIdent(self, name): 112 def setIdent(self, name):
110 """ 113 """
111 Public method to set the real identity name. 114 Public method to set the real identity name.
112 115
113 @param name real identity name (string) 116 @param name real identity name (string)
114 """ 117 """
115 self.__ident = name 118 self.__ident = name
116 119
117 def getIdent(self): 120 def getIdent(self):
118 """ 121 """
119 Public method to get the real identity name. 122 Public method to get the real identity name.
120 123
121 @return real identity name (string) 124 @return real identity name (string)
122 """ 125 """
123 return self.__ident 126 return self.__ident
124 127
125 def setRealName(self, name): 128 def setRealName(self, name):
126 """ 129 """
127 Public method to set the real name of the identity. 130 Public method to set the real name of the identity.
128 131
129 @param name real name (string) 132 @param name real name (string)
130 """ 133 """
131 self.__realName = name 134 self.__realName = name
132 135
133 def getRealName(self): 136 def getRealName(self):
134 """ 137 """
135 Public method to get the real name. 138 Public method to get the real name.
136 139
137 @return real name (string) 140 @return real name (string)
138 """ 141 """
139 return self.__realName 142 return self.__realName
140 143
141 def setNickNames(self, names): 144 def setNickNames(self, names):
142 """ 145 """
143 Public method to set the nick names of the identity. 146 Public method to set the nick names of the identity.
144 147
145 @param names nick names (list of string) 148 @param names nick names (list of string)
146 """ 149 """
147 self.__nickNames = names[:] 150 self.__nickNames = names[:]
148 151
149 def getNickNames(self): 152 def getNickNames(self):
150 """ 153 """
151 Public method to get the nick names. 154 Public method to get the nick names.
152 155
153 @return nick names (list of string) 156 @return nick names (list of string)
154 """ 157 """
155 return self.__nickNames 158 return self.__nickNames
156 159
157 def setServiceName(self, name): 160 def setServiceName(self, name):
158 """ 161 """
159 Public method to set the service name of the identity used for 162 Public method to set the service name of the identity used for
160 identification. 163 identification.
161 164
162 @param name service name (string) 165 @param name service name (string)
163 """ 166 """
164 self.__serviceName = name 167 self.__serviceName = name
165 168
166 def getServiceName(self): 169 def getServiceName(self):
167 """ 170 """
168 Public method to get the service name of the identity used for 171 Public method to get the service name of the identity used for
169 identification. 172 identification.
170 173
171 @return service name (string) 174 @return service name (string)
172 """ 175 """
173 return self.__serviceName 176 return self.__serviceName
174 177
175 def setPassword(self, password): 178 def setPassword(self, password):
176 """ 179 """
177 Public method to set a new password. 180 Public method to set a new password.
178 181
179 @param password password to set (string) 182 @param password password to set (string)
180 """ 183 """
181 self.__password = pwConvert(password, encode=True) 184 self.__password = pwConvert(password, encode=True)
182 185
183 def getPassword(self): 186 def getPassword(self):
184 """ 187 """
185 Public method to get the password. 188 Public method to get the password.
186 189
187 @return password (string) 190 @return password (string)
188 """ 191 """
189 return pwConvert(self.__password, encode=False) 192 return pwConvert(self.__password, encode=False)
190 193
191 def setQuitMessage(self, message): 194 def setQuitMessage(self, message):
192 """ 195 """
193 Public method to set the QUIT message. 196 Public method to set the QUIT message.
194 197
195 @param message QUIT message (string) 198 @param message QUIT message (string)
196 """ 199 """
197 if message: 200 if message:
198 self.__quitMessage = message 201 self.__quitMessage = message
199 else: 202 else:
200 self.__quitMessage = IrcIdentity.DefaultQuitMessage 203 self.__quitMessage = IrcIdentity.DefaultQuitMessage
201 204
202 def getQuitMessage(self): 205 def getQuitMessage(self):
203 """ 206 """
204 Public method to get the QUIT message. 207 Public method to get the QUIT message.
205 208
206 @return QUIT message (string) 209 @return QUIT message (string)
207 """ 210 """
208 return self.__quitMessage 211 return self.__quitMessage
209 212
210 def setPartMessage(self, message): 213 def setPartMessage(self, message):
211 """ 214 """
212 Public method to set the PART message. 215 Public method to set the PART message.
213 216
214 @param message PART message (string) 217 @param message PART message (string)
215 """ 218 """
216 if message: 219 if message:
217 self.__partMessage = message 220 self.__partMessage = message
218 else: 221 else:
219 self.__partMessage = IrcIdentity.DefaultPartMessage 222 self.__partMessage = IrcIdentity.DefaultPartMessage
220 223
221 def getPartMessage(self): 224 def getPartMessage(self):
222 """ 225 """
223 Public method to get the PART message. 226 Public method to get the PART message.
224 227
225 @return PART message (string) 228 @return PART message (string)
226 """ 229 """
227 return self.__partMessage 230 return self.__partMessage
228 231
229 def setRememberAwayPosition(self, remember): 232 def setRememberAwayPosition(self, remember):
230 """ 233 """
231 Public method to set to remember the chat position upon AWAY. 234 Public method to set to remember the chat position upon AWAY.
232 235
233 @param remember flag indicating to remember the chat position (boolean) 236 @param remember flag indicating to remember the chat position (boolean)
234 """ 237 """
235 self.__rememberPosOnAway = remember 238 self.__rememberPosOnAway = remember
236 239
237 def rememberAwayPosition(self): 240 def rememberAwayPosition(self):
238 """ 241 """
239 Public method to get a flag indicating to remember the chat position 242 Public method to get a flag indicating to remember the chat position
240 upon AWAY. 243 upon AWAY.
241 244
242 @return flag indicating to remember the chat position (boolean) 245 @return flag indicating to remember the chat position (boolean)
243 """ 246 """
244 return self.__rememberPosOnAway 247 return self.__rememberPosOnAway
245 248
246 def setAwayMessage(self, message): 249 def setAwayMessage(self, message):
247 """ 250 """
248 Public method to set the AWAY message. 251 Public method to set the AWAY message.
249 252
250 @param message AWAY message (string) 253 @param message AWAY message (string)
251 """ 254 """
252 if message: 255 if message:
253 self.__awayMessage = message 256 self.__awayMessage = message
254 else: 257 else:
255 self.__awayMessage = IrcIdentity.DefaultAwayMessage 258 self.__awayMessage = IrcIdentity.DefaultAwayMessage
256 259
257 def getAwayMessage(self): 260 def getAwayMessage(self):
258 """ 261 """
259 Public method to get the AWAY message. 262 Public method to get the AWAY message.
260 263
261 @return AWAY message (string) 264 @return AWAY message (string)
262 """ 265 """
263 return self.__awayMessage 266 return self.__awayMessage
264 267
265 @classmethod 268 @classmethod
266 def createDefaultIdentity(cls): 269 def createDefaultIdentity(cls):
267 """ 270 """
268 Class method to create the default identity. 271 Class method to create the default identity.
269 272
270 @return default identity (IrcIdentity) 273 @return default identity (IrcIdentity)
271 """ 274 """
272 userName = Utilities.getUserName() 275 userName = Utilities.getUserName()
273 realName = Utilities.getRealName() 276 realName = Utilities.getRealName()
274 if not realName: 277 if not realName:
282 285
283 class IrcServer: 286 class IrcServer:
284 """ 287 """
285 Class implementing the IRC identity object. 288 Class implementing the IRC identity object.
286 """ 289 """
290
287 DefaultPort = 6667 291 DefaultPort = 6667
288 DefaultSslPort = 6697 292 DefaultSslPort = 6697
289 293
290 def __init__(self, name): 294 def __init__(self, name):
291 """ 295 """
292 Constructor 296 Constructor
293 297
294 @param name name of the server (string) 298 @param name name of the server (string)
295 """ 299 """
296 super().__init__() 300 super().__init__()
297 301
298 self.__server = name 302 self.__server = name
299 self.__port = IrcServer.DefaultPort 303 self.__port = IrcServer.DefaultPort
300 self.__ssl = False 304 self.__ssl = False
301 self.__password = "" 305 self.__password = ""
302 306
303 def save(self, settings): 307 def save(self, settings):
304 """ 308 """
305 Public method to save the server data. 309 Public method to save the server data.
306 310
307 @param settings reference to the settings object (QSettings) 311 @param settings reference to the settings object (QSettings)
308 """ 312 """
309 settings.setValue("Name", self.__server) 313 settings.setValue("Name", self.__server)
310 settings.setValue("Port", self.__port) 314 settings.setValue("Port", self.__port)
311 settings.setValue("SSL", self.__ssl) 315 settings.setValue("SSL", self.__ssl)
312 settings.setValue("Password", self.__password) 316 settings.setValue("Password", self.__password)
313 317
314 def load(self, settings): 318 def load(self, settings):
315 """ 319 """
316 Public method to load the server data. 320 Public method to load the server data.
317 321
318 @param settings reference to the settings object (QSettings) 322 @param settings reference to the settings object (QSettings)
319 """ 323 """
320 self.__server = settings.value("Name", "") 324 self.__server = settings.value("Name", "")
321 self.__port = int(settings.value("Port", IrcServer.DefaultPort)) 325 self.__port = int(settings.value("Port", IrcServer.DefaultPort))
322 self.__ssl = Preferences.toBool(settings.value("SSL", False)) 326 self.__ssl = Preferences.toBool(settings.value("SSL", False))
323 self.__password = settings.value("Password", "") 327 self.__password = settings.value("Password", "")
324 328
325 def getName(self): 329 def getName(self):
326 """ 330 """
327 Public method to get the server name. 331 Public method to get the server name.
328 332
329 @return server name (string) 333 @return server name (string)
330 """ 334 """
331 return self.__server 335 return self.__server
332 336
333 def setName(self, name): 337 def setName(self, name):
334 """ 338 """
335 Public method to set the server name. 339 Public method to set the server name.
336 340
337 @param name server name (string) 341 @param name server name (string)
338 """ 342 """
339 self.__server = name 343 self.__server = name
340 344
341 def getPort(self): 345 def getPort(self):
342 """ 346 """
343 Public method to get the server port number. 347 Public method to get the server port number.
344 348
345 @return port number (integer) 349 @return port number (integer)
346 """ 350 """
347 return self.__port 351 return self.__port
348 352
349 def setPort(self, port): 353 def setPort(self, port):
350 """ 354 """
351 Public method to set the server port number. 355 Public method to set the server port number.
352 356
353 @param port server port number (integer) 357 @param port server port number (integer)
354 """ 358 """
355 self.__port = port 359 self.__port = port
356 360
357 def useSSL(self): 361 def useSSL(self):
358 """ 362 """
359 Public method to check for SSL usage. 363 Public method to check for SSL usage.
360 364
361 @return flag indicating SSL usage (boolean) 365 @return flag indicating SSL usage (boolean)
362 """ 366 """
363 return self.__ssl 367 return self.__ssl
364 368
365 def setUseSSL(self, on): 369 def setUseSSL(self, on):
366 """ 370 """
367 Public method to set the SSL usage. 371 Public method to set the SSL usage.
368 372
369 @param on flag indicating SSL usage (boolean) 373 @param on flag indicating SSL usage (boolean)
370 """ 374 """
371 self.__ssl = on 375 self.__ssl = on
372 376
373 def setPassword(self, password): 377 def setPassword(self, password):
374 """ 378 """
375 Public method to set a new password. 379 Public method to set a new password.
376 380
377 @param password password to set (string) 381 @param password password to set (string)
378 """ 382 """
379 self.__password = pwConvert(password, encode=True) 383 self.__password = pwConvert(password, encode=True)
380 384
381 def getPassword(self): 385 def getPassword(self):
382 """ 386 """
383 Public method to get the password. 387 Public method to get the password.
384 388
385 @return password (string) 389 @return password (string)
386 """ 390 """
387 return pwConvert(self.__password, encode=False) 391 return pwConvert(self.__password, encode=False)
388 392
389 393
390 class IrcChannel: 394 class IrcChannel:
391 """ 395 """
392 Class implementing the IRC channel object. 396 Class implementing the IRC channel object.
393 """ 397 """
398
394 def __init__(self, name): 399 def __init__(self, name):
395 """ 400 """
396 Constructor 401 Constructor
397 402
398 @param name name of the network (string) 403 @param name name of the network (string)
399 """ 404 """
400 super().__init__() 405 super().__init__()
401 406
402 self.__name = name 407 self.__name = name
403 self.__key = "" 408 self.__key = ""
404 self.__autoJoin = False 409 self.__autoJoin = False
405 410
406 def save(self, settings): 411 def save(self, settings):
407 """ 412 """
408 Public method to save the channel data. 413 Public method to save the channel data.
409 414
410 @param settings reference to the settings object (QSettings) 415 @param settings reference to the settings object (QSettings)
411 """ 416 """
412 # no need to save the channel name because that is the group key 417 # no need to save the channel name because that is the group key
413 settings.setValue("Key", self.__key) 418 settings.setValue("Key", self.__key)
414 settings.setValue("AutoJoin", self.__autoJoin) 419 settings.setValue("AutoJoin", self.__autoJoin)
415 420
416 def load(self, settings): 421 def load(self, settings):
417 """ 422 """
418 Public method to load the network data. 423 Public method to load the network data.
419 424
420 @param settings reference to the settings object (QSettings) 425 @param settings reference to the settings object (QSettings)
421 """ 426 """
422 self.__key = settings.value("Key", "") 427 self.__key = settings.value("Key", "")
423 self.__autoJoin = Preferences.toBool(settings.value("AutoJoin", False)) 428 self.__autoJoin = Preferences.toBool(settings.value("AutoJoin", False))
424 429
425 def getName(self): 430 def getName(self):
426 """ 431 """
427 Public method to get the channel name. 432 Public method to get the channel name.
428 433
429 @return channel name (string) 434 @return channel name (string)
430 """ 435 """
431 return self.__name 436 return self.__name
432 437
433 def setKey(self, key): 438 def setKey(self, key):
434 """ 439 """
435 Public method to set a new channel key. 440 Public method to set a new channel key.
436 441
437 @param key channel key to set (string) 442 @param key channel key to set (string)
438 """ 443 """
439 self.__key = pwConvert(key, encode=True) 444 self.__key = pwConvert(key, encode=True)
440 445
441 def getKey(self): 446 def getKey(self):
442 """ 447 """
443 Public method to get the channel key. 448 Public method to get the channel key.
444 449
445 @return channel key (string) 450 @return channel key (string)
446 """ 451 """
447 return pwConvert(self.__key, encode=False) 452 return pwConvert(self.__key, encode=False)
448 453
449 def autoJoin(self): 454 def autoJoin(self):
450 """ 455 """
451 Public method to check the auto join status. 456 Public method to check the auto join status.
452 457
453 @return flag indicating if the channel should be 458 @return flag indicating if the channel should be
454 joined automatically (boolean) 459 joined automatically (boolean)
455 """ 460 """
456 return self.__autoJoin 461 return self.__autoJoin
457 462
458 def setAutoJoin(self, enable): 463 def setAutoJoin(self, enable):
459 """ 464 """
460 Public method to set the auto join status of the channel. 465 Public method to set the auto join status of the channel.
461 466
462 @param enable flag indicating if the channel should be 467 @param enable flag indicating if the channel should be
463 joined automatically (boolean) 468 joined automatically (boolean)
464 """ 469 """
465 self.__autoJoin = enable 470 self.__autoJoin = enable
466 471
467 472
468 class IrcNetwork: 473 class IrcNetwork:
469 """ 474 """
470 Class implementing the IRC network object. 475 Class implementing the IRC network object.
471 """ 476 """
477
472 def __init__(self, name): 478 def __init__(self, name):
473 """ 479 """
474 Constructor 480 Constructor
475 481
476 @param name name of the network (string) 482 @param name name of the network (string)
477 """ 483 """
478 super().__init__() 484 super().__init__()
479 485
480 self.__name = name 486 self.__name = name
481 self.__identity = "" 487 self.__identity = ""
482 self.__server = None 488 self.__server = None
483 self.__channels = {} 489 self.__channels = {}
484 self.__autoConnect = False 490 self.__autoConnect = False
485 491
486 def save(self, settings): 492 def save(self, settings):
487 """ 493 """
488 Public method to save the network data. 494 Public method to save the network data.
489 495
490 @param settings reference to the settings object (QSettings) 496 @param settings reference to the settings object (QSettings)
491 """ 497 """
492 # no need to save the network name because that is the group key 498 # no need to save the network name because that is the group key
493 settings.setValue("Identity", self.__identity) 499 settings.setValue("Identity", self.__identity)
494 settings.setValue("AutoConnect", self.__autoConnect) 500 settings.setValue("AutoConnect", self.__autoConnect)
495 501
496 settings.beginGroup("Server") 502 settings.beginGroup("Server")
497 self.__server.save(settings) 503 self.__server.save(settings)
498 settings.endGroup() 504 settings.endGroup()
499 505
500 settings.beginGroup("Channels") 506 settings.beginGroup("Channels")
501 for key in self.__channels: 507 for key in self.__channels:
502 settings.beginGroup(key) 508 settings.beginGroup(key)
503 self.__channels[key].save(settings) 509 self.__channels[key].save(settings)
504 settings.endGroup() 510 settings.endGroup()
505 settings.endGroup() 511 settings.endGroup()
506 512
507 def load(self, settings): 513 def load(self, settings):
508 """ 514 """
509 Public method to load the network data. 515 Public method to load the network data.
510 516
511 @param settings reference to the settings object (QSettings) 517 @param settings reference to the settings object (QSettings)
512 """ 518 """
513 self.__identity = settings.value("Identity", "") 519 self.__identity = settings.value("Identity", "")
514 self.__autoConnect = Preferences.toBool( 520 self.__autoConnect = Preferences.toBool(settings.value("AutoConnect", False))
515 settings.value("AutoConnect", False)) 521
516
517 settings.beginGroup("Server") 522 settings.beginGroup("Server")
518 self.__server = IrcServer("") 523 self.__server = IrcServer("")
519 self.__server.load(settings) 524 self.__server.load(settings)
520 settings.endGroup() 525 settings.endGroup()
521 526
522 settings.beginGroup("Channels") 527 settings.beginGroup("Channels")
523 for key in settings.childGroups(): 528 for key in settings.childGroups():
524 self.__channels[key] = IrcChannel(key) 529 self.__channels[key] = IrcChannel(key)
525 settings.beginGroup(key) 530 settings.beginGroup(key)
526 self.__channels[key].load(settings) 531 self.__channels[key].load(settings)
527 settings.endGroup() 532 settings.endGroup()
528 settings.endGroup() 533 settings.endGroup()
529 534
530 def setName(self, name): 535 def setName(self, name):
531 """ 536 """
532 Public method to set the network name. 537 Public method to set the network name.
533 538
534 @param name network name (string) 539 @param name network name (string)
535 """ 540 """
536 self.__name = name 541 self.__name = name
537 542
538 def getName(self): 543 def getName(self):
539 """ 544 """
540 Public method to get the network name. 545 Public method to get the network name.
541 546
542 @return network name (string) 547 @return network name (string)
543 """ 548 """
544 return self.__name 549 return self.__name
545 550
546 def setIdentityName(self, name): 551 def setIdentityName(self, name):
547 """ 552 """
548 Public method to set the name of the identity. 553 Public method to set the name of the identity.
549 554
550 @param name identity name (string) 555 @param name identity name (string)
551 """ 556 """
552 self.__identity = name 557 self.__identity = name
553 558
554 def getIdentityName(self): 559 def getIdentityName(self):
555 """ 560 """
556 Public method to get the name of the identity. 561 Public method to get the name of the identity.
557 562
558 @return identity name (string) 563 @return identity name (string)
559 """ 564 """
560 return self.__identity 565 return self.__identity
561 566
562 def getServerName(self): 567 def getServerName(self):
563 """ 568 """
564 Public method to get the server name. 569 Public method to get the server name.
565 570
566 @return server name (string) 571 @return server name (string)
567 """ 572 """
568 if self.__server: 573 if self.__server:
569 return self.__server.getName() 574 return self.__server.getName()
570 else: 575 else:
571 return "" 576 return ""
572 577
573 def getServer(self): 578 def getServer(self):
574 """ 579 """
575 Public method to get the server object. 580 Public method to get the server object.
576 581
577 @return reference to the server (IrcServer) 582 @return reference to the server (IrcServer)
578 """ 583 """
579 return self.__server 584 return self.__server
580 585
581 def setServer(self, server): 586 def setServer(self, server):
582 """ 587 """
583 Public method to set the server. 588 Public method to set the server.
584 589
585 @param server server object to set (IrcServer) 590 @param server server object to set (IrcServer)
586 """ 591 """
587 self.__server = server 592 self.__server = server
588 593
589 def setChannels(self, channels): 594 def setChannels(self, channels):
590 """ 595 """
591 Public method to set the list of channels. 596 Public method to set the list of channels.
592 597
593 @param channels list of channels for the network (list of IrcChannel) 598 @param channels list of channels for the network (list of IrcChannel)
594 """ 599 """
595 self.__channels = {} 600 self.__channels = {}
596 for channel in channels: 601 for channel in channels:
597 self.__channels[channel.getName()] = channel 602 self.__channels[channel.getName()] = channel
598 603
599 def getChannels(self): 604 def getChannels(self):
600 """ 605 """
601 Public method to get the channels. 606 Public method to get the channels.
602 607
603 @return list of channels for the network (list of IrcChannel) 608 @return list of channels for the network (list of IrcChannel)
604 """ 609 """
605 return list(copy.deepcopy(self.__channels).values()) 610 return list(copy.deepcopy(self.__channels).values())
606 611
607 def getChannelNames(self): 612 def getChannelNames(self):
608 """ 613 """
609 Public method to get the list of channels. 614 Public method to get the list of channels.
610 615
611 @return list of channel names (list of string) 616 @return list of channel names (list of string)
612 """ 617 """
613 return sorted(self.__channels.keys()) 618 return sorted(self.__channels.keys())
614 619
615 def getChannel(self, channelName): 620 def getChannel(self, channelName):
616 """ 621 """
617 Public method to get a channel. 622 Public method to get a channel.
618 623
619 @param channelName name of the channel to retrieve (string) 624 @param channelName name of the channel to retrieve (string)
620 @return reference to the channel (IrcChannel) 625 @return reference to the channel (IrcChannel)
621 """ 626 """
622 if channelName in self.__channels: 627 if channelName in self.__channels:
623 return self.__channels[channelName] 628 return self.__channels[channelName]
624 else: 629 else:
625 return None 630 return None
626 631
627 def setChannel(self, channel): 632 def setChannel(self, channel):
628 """ 633 """
629 Public method to set a channel. 634 Public method to set a channel.
630 635
631 @param channel channel object to set (IrcChannel) 636 @param channel channel object to set (IrcChannel)
632 """ 637 """
633 channelName = channel.getName() 638 channelName = channel.getName()
634 if channelName in self.__channels: 639 if channelName in self.__channels:
635 self.__channels[channelName] = channel 640 self.__channels[channelName] = channel
636 641
637 def addChannel(self, channel): 642 def addChannel(self, channel):
638 """ 643 """
639 Public method to add a channel. 644 Public method to add a channel.
640 645
641 @param channel channel object to add (IrcChannel) 646 @param channel channel object to add (IrcChannel)
642 """ 647 """
643 channelName = channel.getName() 648 channelName = channel.getName()
644 if channelName not in self.__channels: 649 if channelName not in self.__channels:
645 self.__channels[channelName] = channel 650 self.__channels[channelName] = channel
646 651
647 def deleteChannel(self, channelName): 652 def deleteChannel(self, channelName):
648 """ 653 """
649 Public method to delete the given channel. 654 Public method to delete the given channel.
650 655
651 @param channelName name of the channel to be deleted (string) 656 @param channelName name of the channel to be deleted (string)
652 """ 657 """
653 if channelName in self.__channels: 658 if channelName in self.__channels:
654 del self.__channels[channelName] 659 del self.__channels[channelName]
655 660
656 def setAutoConnect(self, enable): 661 def setAutoConnect(self, enable):
657 """ 662 """
658 Public method to set the auto connect flag. 663 Public method to set the auto connect flag.
659 664
660 @param enable flag indicate to connect to the network at start-up. 665 @param enable flag indicate to connect to the network at start-up.
661 """ 666 """
662 self.__autoConnect = enable 667 self.__autoConnect = enable
663 668
664 def autoConnect(self): 669 def autoConnect(self):
665 """ 670 """
666 Public method to check, if the network should be connected to at 671 Public method to check, if the network should be connected to at
667 start-up. 672 start-up.
668 673
669 @return flag indicating an auto connect (boolean) 674 @return flag indicating an auto connect (boolean)
670 """ 675 """
671 return self.__autoConnect 676 return self.__autoConnect
672 677
673 @classmethod 678 @classmethod
674 def createDefaultNetwork(cls, ssl=False): 679 def createDefaultNetwork(cls, ssl=False):
675 """ 680 """
676 Class method to create the default network. 681 Class method to create the default network.
677 682
678 @param ssl flag indicating to create a SSL network configuration 683 @param ssl flag indicating to create a SSL network configuration
679 (boolean) 684 (boolean)
680 @return default network object (IrcNetwork) 685 @return default network object (IrcNetwork)
681 """ 686 """
682 # network 687 # network
683 networkName = "libera.chat (SSL)" if ssl else "libera.chat" 688 networkName = "libera.chat (SSL)" if ssl else "libera.chat"
684 network = IrcNetwork(networkName) 689 network = IrcNetwork(networkName)
685 network.setIdentityName(IrcIdentity.DefaultIdentityName) 690 network.setIdentityName(IrcIdentity.DefaultIdentityName)
686 691
687 # server 692 # server
688 serverName = "irc.libera.chat" 693 serverName = "irc.libera.chat"
689 server = IrcServer(serverName) 694 server = IrcServer(serverName)
690 if ssl: 695 if ssl:
691 server.setPort(IrcServer.DefaultSslPort) 696 server.setPort(IrcServer.DefaultSslPort)
692 server.setUseSSL(True) 697 server.setUseSSL(True)
693 else: 698 else:
694 server.setPort(IrcServer.DefaultPort) 699 server.setPort(IrcServer.DefaultPort)
695 network.setServer(server) 700 network.setServer(server)
696 701
697 # channel 702 # channel
698 channel = IrcChannel("#eric-ide") 703 channel = IrcChannel("#eric-ide")
699 channel.setAutoJoin(False) 704 channel.setAutoJoin(False)
700 network.addChannel(channel) 705 network.addChannel(channel)
701 706
702 # auto connect 707 # auto connect
703 network.setAutoConnect(False) 708 network.setAutoConnect(False)
704 709
705 return network 710 return network
706 711
707 712
708 class IrcNetworkManager(QObject): 713 class IrcNetworkManager(QObject):
709 """ 714 """
710 Class implementing the IRC identity object. 715 Class implementing the IRC identity object.
711 716
712 @signal dataChanged() emitted after some data has changed 717 @signal dataChanged() emitted after some data has changed
713 @signal networksChanged() emitted after a network object has changed 718 @signal networksChanged() emitted after a network object has changed
714 @signal identitiesChanged() emitted after an identity object has changed 719 @signal identitiesChanged() emitted after an identity object has changed
715 """ 720 """
721
716 dataChanged = pyqtSignal() 722 dataChanged = pyqtSignal()
717 networksChanged = pyqtSignal() 723 networksChanged = pyqtSignal()
718 identitiesChanged = pyqtSignal() 724 identitiesChanged = pyqtSignal()
719 725
720 def __init__(self, parent=None): 726 def __init__(self, parent=None):
721 """ 727 """
722 Constructor 728 Constructor
723 729
724 @param parent reference to the parent object (QObject) 730 @param parent reference to the parent object (QObject)
725 """ 731 """
726 super().__init__(parent) 732 super().__init__(parent)
727 733
728 self.__loaded = False 734 self.__loaded = False
729 self.__saveTimer = AutoSaver(self, self.save) 735 self.__saveTimer = AutoSaver(self, self.save)
730 736
731 self.__settings = Preferences.getSettings() 737 self.__settings = Preferences.getSettings()
732 738
733 self.__networks = {} 739 self.__networks = {}
734 self.__identities = {} 740 self.__identities = {}
735 741
736 self.dataChanged.connect(self.__saveTimer.changeOccurred) 742 self.dataChanged.connect(self.__saveTimer.changeOccurred)
737 743
738 def close(self): 744 def close(self):
739 """ 745 """
740 Public method to close the open search engines manager. 746 Public method to close the open search engines manager.
741 """ 747 """
742 self.__saveTimer.saveIfNeccessary() 748 self.__saveTimer.saveIfNeccessary()
743 749
744 def save(self): 750 def save(self):
745 """ 751 """
746 Public slot to save the IRC data. 752 Public slot to save the IRC data.
747 """ 753 """
748 if not self.__loaded: 754 if not self.__loaded:
749 return 755 return
750 756
751 # save IRC data 757 # save IRC data
752 self.__settings.beginGroup("IRC") 758 self.__settings.beginGroup("IRC")
753 759
754 # identities 760 # identities
755 self.__settings.remove("Identities") 761 self.__settings.remove("Identities")
756 self.__settings.beginGroup("Identities") 762 self.__settings.beginGroup("Identities")
757 for key in self.__identities: 763 for key in self.__identities:
758 self.__settings.beginGroup(key) 764 self.__settings.beginGroup(key)
759 self.__identities[key].save(self.__settings) 765 self.__identities[key].save(self.__settings)
760 self.__settings.endGroup() 766 self.__settings.endGroup()
761 self.__settings.endGroup() 767 self.__settings.endGroup()
762 768
763 # networks 769 # networks
764 self.__settings.remove("Networks") 770 self.__settings.remove("Networks")
765 self.__settings.beginGroup("Networks") 771 self.__settings.beginGroup("Networks")
766 for key in self.__networks: 772 for key in self.__networks:
767 self.__settings.beginGroup(key) 773 self.__settings.beginGroup(key)
768 self.__networks[key].save(self.__settings) 774 self.__networks[key].save(self.__settings)
769 self.__settings.endGroup() 775 self.__settings.endGroup()
770 self.__settings.endGroup() 776 self.__settings.endGroup()
771 777
772 self.__settings.endGroup() 778 self.__settings.endGroup()
773 779
774 def __load(self): 780 def __load(self):
775 """ 781 """
776 Private slot to load the IRC data. 782 Private slot to load the IRC data.
777 """ 783 """
778 if self.__loaded: 784 if self.__loaded:
779 return 785 return
780 786
781 # load IRC data 787 # load IRC data
782 self.__settings.beginGroup("IRC") 788 self.__settings.beginGroup("IRC")
783 789
784 # identities 790 # identities
785 self.__settings.beginGroup("Identities") 791 self.__settings.beginGroup("Identities")
786 for key in self.__settings.childGroups(): 792 for key in self.__settings.childGroups():
787 self.__identities[key] = IrcIdentity(key) 793 self.__identities[key] = IrcIdentity(key)
788 self.__settings.beginGroup(key) 794 self.__settings.beginGroup(key)
789 self.__identities[key].load(self.__settings) 795 self.__identities[key].load(self.__settings)
790 self.__settings.endGroup() 796 self.__settings.endGroup()
791 self.__settings.endGroup() 797 self.__settings.endGroup()
792 798
793 # networks 799 # networks
794 self.__settings.beginGroup("Networks") 800 self.__settings.beginGroup("Networks")
795 for key in self.__settings.childGroups(): 801 for key in self.__settings.childGroups():
796 self.__networks[key] = IrcNetwork(key) 802 self.__networks[key] = IrcNetwork(key)
797 self.__settings.beginGroup(key) 803 self.__settings.beginGroup(key)
798 self.__networks[key].load(self.__settings) 804 self.__networks[key].load(self.__settings)
799 self.__settings.endGroup() 805 self.__settings.endGroup()
800 self.__settings.endGroup() 806 self.__settings.endGroup()
801 807
802 self.__settings.endGroup() 808 self.__settings.endGroup()
803 809
804 if not self.__identities or not self.__networks: 810 if not self.__identities or not self.__networks:
805 # data structures got corrupted; load defaults 811 # data structures got corrupted; load defaults
806 self.__loadDefaults() 812 self.__loadDefaults()
807 813
808 if IrcIdentity.DefaultIdentityName not in self.__identities: 814 if IrcIdentity.DefaultIdentityName not in self.__identities:
809 self.__loadDefaults(identityOnly=True) 815 self.__loadDefaults(identityOnly=True)
810 816
811 self.__loaded = True 817 self.__loaded = True
812 818
813 def __loadDefaults(self, identityOnly=False): 819 def __loadDefaults(self, identityOnly=False):
814 """ 820 """
815 Private method to load default values. 821 Private method to load default values.
816 822
817 @param identityOnly flag indicating to just load the default 823 @param identityOnly flag indicating to just load the default
818 identity (boolean) 824 identity (boolean)
819 """ 825 """
820 if not identityOnly: 826 if not identityOnly:
821 self.__networks = {} 827 self.__networks = {}
822 self.__identities = {} 828 self.__identities = {}
823 829
824 # identity 830 # identity
825 identity = IrcIdentity.createDefaultIdentity() 831 identity = IrcIdentity.createDefaultIdentity()
826 self.__identities[identity.getName()] = identity 832 self.__identities[identity.getName()] = identity
827 833
828 if not identityOnly: 834 if not identityOnly:
829 network = IrcNetwork.createDefaultNetwork() 835 network = IrcNetwork.createDefaultNetwork()
830 self.__networks[network.getName()] = network 836 self.__networks[network.getName()] = network
831 network = IrcNetwork.createDefaultNetwork(True) 837 network = IrcNetwork.createDefaultNetwork(True)
832 self.__networks[network.getName()] = network 838 self.__networks[network.getName()] = network
833 839
834 self.dataChanged.emit() 840 self.dataChanged.emit()
835 841
836 ################################################################## 842 ##################################################################
837 ## Identity related methods below 843 ## Identity related methods below
838 ################################################################## 844 ##################################################################
839 845
840 def getIdentity(self, name, create=False): 846 def getIdentity(self, name, create=False):
841 """ 847 """
842 Public method to get an identity object. 848 Public method to get an identity object.
843 849
844 @param name name of the identity to get (string) 850 @param name name of the identity to get (string)
845 @param create flag indicating to create a new object, 851 @param create flag indicating to create a new object,
846 if none exists (boolean) 852 if none exists (boolean)
847 @return reference to the identity (IrcIdentity) 853 @return reference to the identity (IrcIdentity)
848 """ 854 """
849 if not name: 855 if not name:
850 return None 856 return None
851 857
852 if not self.__loaded: 858 if not self.__loaded:
853 self.__load() 859 self.__load()
854 860
855 if name in self.__identities: 861 if name in self.__identities:
856 return self.__identities[name] 862 return self.__identities[name]
857 elif create: 863 elif create:
858 ircId = IrcIdentity(name) 864 ircId = IrcIdentity(name)
859 self.__identities[name] = ircId 865 self.__identities[name] = ircId
860 866
861 self.dataChanged.emit() 867 self.dataChanged.emit()
862 868
863 return ircId 869 return ircId
864 else: 870 else:
865 return None 871 return None
866 872
867 def getIdentities(self): 873 def getIdentities(self):
868 """ 874 """
869 Public method to get a copy of all identities. 875 Public method to get a copy of all identities.
870 876
871 @return dictionary of all identities (dict of IrcIdentity) 877 @return dictionary of all identities (dict of IrcIdentity)
872 """ 878 """
873 return copy.deepcopy(self.__identities) 879 return copy.deepcopy(self.__identities)
874 880
875 def setIdentities(self, identities): 881 def setIdentities(self, identities):
876 """ 882 """
877 Public method to set the identities. 883 Public method to set the identities.
878 884
879 @param identities dictionary of all identities (dict of IrcIdentity) 885 @param identities dictionary of all identities (dict of IrcIdentity)
880 """ 886 """
881 self.__identities = copy.deepcopy(identities) 887 self.__identities = copy.deepcopy(identities)
882 self.identityChanged() 888 self.identityChanged()
883 889
884 # Check all networks, if the identity they use is still available. 890 # Check all networks, if the identity they use is still available.
885 # If it isn't, change them to use the default identity. 891 # If it isn't, change them to use the default identity.
886 for network in self.__networks.values(): 892 for network in self.__networks.values():
887 if network.getIdentityName() not in self.__identities: 893 if network.getIdentityName() not in self.__identities:
888 network.setIdentityName(IrcIdentity.DefaultIdentityName) 894 network.setIdentityName(IrcIdentity.DefaultIdentityName)
889 895
890 def getIdentityNames(self): 896 def getIdentityNames(self):
891 """ 897 """
892 Public method to get the names of all identities. 898 Public method to get the names of all identities.
893 899
894 @return names of all identities (list of string) 900 @return names of all identities (list of string)
895 """ 901 """
896 return list(self.__identities.keys()) 902 return list(self.__identities.keys())
897 903
898 def addIdentity(self, identity): 904 def addIdentity(self, identity):
899 """ 905 """
900 Public method to add a new identity. 906 Public method to add a new identity.
901 907
902 @param identity reference to the identity to add (IrcIdentity) 908 @param identity reference to the identity to add (IrcIdentity)
903 """ 909 """
904 name = identity.getName() 910 name = identity.getName()
905 self.__identities[name] = identity 911 self.__identities[name] = identity
906 self.identityChanged() 912 self.identityChanged()
907 913
908 def deleteIdentity(self, name): 914 def deleteIdentity(self, name):
909 """ 915 """
910 Public method to delete the given identity. 916 Public method to delete the given identity.
911 917
912 @param name name of the identity to delete (string) 918 @param name name of the identity to delete (string)
913 """ 919 """
914 if ( 920 if name in self.__identities and name != IrcIdentity.DefaultIdentityName:
915 name in self.__identities and
916 name != IrcIdentity.DefaultIdentityName
917 ):
918 del self.__identities[name] 921 del self.__identities[name]
919 self.identityChanged() 922 self.identityChanged()
920 923
921 def renameIdentity(self, oldName, newName): 924 def renameIdentity(self, oldName, newName):
922 """ 925 """
923 Public method to rename an identity. 926 Public method to rename an identity.
924 927
925 @param oldName old name of the identity (string) 928 @param oldName old name of the identity (string)
926 @param newName new name of the identity (string) 929 @param newName new name of the identity (string)
927 """ 930 """
928 if oldName in self.__identities: 931 if oldName in self.__identities:
929 self.__identities[newName] = self.__identities[oldName] 932 self.__identities[newName] = self.__identities[oldName]
930 del self.__identities[oldName] 933 del self.__identities[oldName]
931 934
932 for network in self.__networks: 935 for network in self.__networks:
933 if network.getIdentityName() == oldName: 936 if network.getIdentityName() == oldName:
934 network.setIdentityName(newName) 937 network.setIdentityName(newName)
935 938
936 self.identityChanged() 939 self.identityChanged()
937 940
938 def identityChanged(self): 941 def identityChanged(self):
939 """ 942 """
940 Public method to indicate a change of an identity object. 943 Public method to indicate a change of an identity object.
941 """ 944 """
942 self.dataChanged.emit() 945 self.dataChanged.emit()
943 self.identitiesChanged.emit() 946 self.identitiesChanged.emit()
944 947
945 ################################################################## 948 ##################################################################
946 ## Network related methods below 949 ## Network related methods below
947 ################################################################## 950 ##################################################################
948 951
949 def getNetwork(self, name): 952 def getNetwork(self, name):
950 """ 953 """
951 Public method to get a network object. 954 Public method to get a network object.
952 955
953 @param name name of the network (string) 956 @param name name of the network (string)
954 @return reference to the network object (IrcNetwork) 957 @return reference to the network object (IrcNetwork)
955 """ 958 """
956 if not self.__loaded: 959 if not self.__loaded:
957 self.__load() 960 self.__load()
958 961
959 if name in self.__networks: 962 if name in self.__networks:
960 return self.__networks[name] 963 return self.__networks[name]
961 else: 964 else:
962 return None 965 return None
963 966
964 def setNetwork(self, network, networkName=""): 967 def setNetwork(self, network, networkName=""):
965 """ 968 """
966 Public method to set a network. 969 Public method to set a network.
967 970
968 @param network network object to set (IrcNetwork) 971 @param network network object to set (IrcNetwork)
969 @param networkName name the network was known for (string) 972 @param networkName name the network was known for (string)
970 """ 973 """
971 name = network.getName() 974 name = network.getName()
972 if networkName and name != networkName: 975 if networkName and name != networkName:
974 self.deleteNetwork(networkName) 977 self.deleteNetwork(networkName)
975 self.addNetwork(network) 978 self.addNetwork(network)
976 elif name in self.__networks: 979 elif name in self.__networks:
977 self.__networks[name] = network 980 self.__networks[name] = network
978 self.networkChanged() 981 self.networkChanged()
979 982
980 def addNetwork(self, network): 983 def addNetwork(self, network):
981 """ 984 """
982 Public method to add a network. 985 Public method to add a network.
983 986
984 @param network network object to add (IrcNetwork) 987 @param network network object to add (IrcNetwork)
985 """ 988 """
986 name = network.getName() 989 name = network.getName()
987 if name not in self.__networks: 990 if name not in self.__networks:
988 self.__networks[name] = network 991 self.__networks[name] = network
989 self.networkChanged() 992 self.networkChanged()
990 993
991 def deleteNetwork(self, name): 994 def deleteNetwork(self, name):
992 """ 995 """
993 Public method to delete the given network. 996 Public method to delete the given network.
994 997
995 @param name name of the network to delete (string) 998 @param name name of the network to delete (string)
996 """ 999 """
997 if name in self.__networks: 1000 if name in self.__networks:
998 del self.__networks[name] 1001 del self.__networks[name]
999 self.networkChanged() 1002 self.networkChanged()
1000 1003
1001 def networkChanged(self): 1004 def networkChanged(self):
1002 """ 1005 """
1003 Public method to indicate a change of a network object. 1006 Public method to indicate a change of a network object.
1004 """ 1007 """
1005 self.dataChanged.emit() 1008 self.dataChanged.emit()
1006 self.networksChanged.emit() 1009 self.networksChanged.emit()
1007 1010
1008 def getNetworkNames(self): 1011 def getNetworkNames(self):
1009 """ 1012 """
1010 Public method to get a list of all known network names. 1013 Public method to get a list of all known network names.
1011 1014
1012 @return list of network names (list of string) 1015 @return list of network names (list of string)
1013 """ 1016 """
1014 if not self.__loaded: 1017 if not self.__loaded:
1015 self.__load() 1018 self.__load()
1016 1019
1017 return sorted(self.__networks.keys()) 1020 return sorted(self.__networks.keys())

eric ide

mercurial