395 """ |
395 """ |
396 Private slot to send a message to the channel. |
396 Private slot to send a message to the channel. |
397 """ |
397 """ |
398 msg = self.messageEdit.text() |
398 msg = self.messageEdit.text() |
399 if msg: |
399 if msg: |
400 self.messages.append( |
400 self.__processUserMessage(msg) |
401 '<font color="{0}">{2} <b><</b><font color="{1}">{3}</font>' |
401 |
402 '<b>></b> {4}</font>'.format( |
402 def __processUserMessage(self, msg): |
403 Preferences.getIrc("ChannelMessageColour"), |
403 """ |
404 Preferences.getIrc("OwnNickColour"), |
404 Private method to process a message entered by the user or via the |
405 ircTimestamp(), self.__userName, |
405 user list context menu. |
406 Utilities.html_encode(msg))) |
406 |
407 |
407 @param msg message to be processed |
408 if msg.startswith("/"): |
408 @type str |
409 if self.__private: |
409 """ |
410 E5MessageBox.information( |
410 self.messages.append( |
411 self, |
411 '<font color="{0}">{2} <b><</b><font color="{1}">{3}</font>' |
412 self.tr("Send Message"), |
412 '<b>></b> {4}</font>'.format( |
413 self.tr( |
413 Preferences.getIrc("ChannelMessageColour"), |
414 """Messages starting with a '/' are not allowed""" |
414 Preferences.getIrc("OwnNickColour"), |
415 """ in private chats.""")) |
415 ircTimestamp(), self.__userName, |
|
416 Utilities.html_encode(msg))) |
|
417 |
|
418 if msg.startswith("/"): |
|
419 if self.__private: |
|
420 E5MessageBox.information( |
|
421 self, |
|
422 self.tr("Send Message"), |
|
423 self.tr( |
|
424 """Messages starting with a '/' are not allowed""" |
|
425 """ in private chats.""")) |
|
426 else: |
|
427 sendData = True |
|
428 # flag set to False, if command was handled |
|
429 |
|
430 msgList = msg.split() |
|
431 cmd = msgList[0][1:].upper() |
|
432 if cmd in ["MSG", "QUERY"]: |
|
433 cmd = "PRIVMSG" |
|
434 if len(msgList) > 1: |
|
435 if msgList[1].strip().lower() in \ |
|
436 self.__serviceNamesLower: |
|
437 msg = "PRIVMSG " + \ |
|
438 msgList[1].strip().lower() + \ |
|
439 " :" + " ".join(msgList[2:]) |
|
440 else: |
|
441 msg = "PRIVMSG {0} :{1}".format( |
|
442 msgList[1], " ".join(msgList[2:])) |
|
443 else: |
|
444 msgList[0] = cmd |
|
445 msg = " ".join(msgList) |
|
446 elif cmd == "NOTICE": |
|
447 if len(msgList) > 2: |
|
448 msg = "NOTICE {0} :{1}".format( |
|
449 msgList[1], " ".join(msgList[2:])) |
|
450 else: |
|
451 msg = "NOTICE {0}".format(" ".join(msgList[1:])) |
|
452 elif cmd == "PING": |
|
453 receiver = msgList[1] |
|
454 msg = "PING {0} " |
|
455 self.sendCtcpRequest.emit(receiver, "PING", "") |
|
456 sendData = False |
|
457 elif cmd == "IGNORE": |
|
458 sendData = False |
|
459 if len(msgList) > 1: |
|
460 if msgList[1] == "-r": |
|
461 ignored = False |
|
462 userNamesList = msgList[2:] |
|
463 else: |
|
464 ignored = True |
|
465 userNamesList = msgList[1:] |
|
466 else: |
|
467 userNamesList = [] |
|
468 userNames = ",".join( |
|
469 u.rstrip(",") for u in userNamesList).split(",") |
|
470 for userName in userNames: |
|
471 itm = self.__findUser(userName) |
|
472 if itm: |
|
473 itm.setIgnored(ignored) |
|
474 elif cmd == "UNIGNORE": |
|
475 sendData = False |
|
476 if len(msgList) > 1: |
|
477 userNamesList = msgList[1:] |
|
478 else: |
|
479 userNamesList = [] |
|
480 userNames = ",".join( |
|
481 u.rstrip(",") for u in userNamesList).split(",") |
|
482 for userName in userNames: |
|
483 itm = self.__findUser(userName) |
|
484 if itm: |
|
485 itm.setIgnored(False) |
|
486 elif cmd == "AWAY": |
|
487 sendData = False |
|
488 if len(msgList) > 1: |
|
489 msg = " ".join(msgList[1:]) |
|
490 else: |
|
491 msg = "" |
|
492 self.awayCommand.emit(msg) |
|
493 elif cmd == "JOIN": |
|
494 sendData = False |
|
495 if len(msgList) > 1: |
|
496 channels = msgList[1].split(",") |
|
497 if len(msgList) > 2: |
|
498 keys = msgList[2].split(",") |
|
499 else: |
|
500 keys = [] |
|
501 for channel, key in zip_longest( |
|
502 channels, keys, fillvalue=""): |
|
503 self.__ircWidget.joinChannel(channel, key) |
|
504 elif cmd == "PART": |
|
505 sendData = False |
|
506 if len(msgList) == 1: |
|
507 self.leaveChannel() |
|
508 else: |
|
509 self.leaveChannels.emit(msgList[1:]) |
|
510 elif cmd == "PARTALL": |
|
511 sendData = False |
|
512 self.leaveAllChannels.emit() |
416 else: |
513 else: |
417 sendData = True |
514 msg = msg[1:] |
418 # flag set to False, if command was handled |
515 if sendData: |
419 |
516 self.sendData.emit(msg) |
420 msgList = msg.split() |
517 else: |
421 cmd = msgList[0][1:].upper() |
518 if self.__private: |
422 if cmd in ["MSG", "QUERY"]: |
519 self.sendData.emit( |
423 cmd = "PRIVMSG" |
520 "PRIVMSG " + self.__privatePartner + " :" + msg) |
424 if len(msgList) > 1: |
|
425 if msgList[1].strip().lower() in \ |
|
426 self.__serviceNamesLower: |
|
427 msg = "PRIVMSG " + \ |
|
428 msgList[1].strip().lower() + \ |
|
429 " :" + " ".join(msgList[2:]) |
|
430 else: |
|
431 msg = "PRIVMSG {0} :{1}".format( |
|
432 msgList[1], " ".join(msgList[2:])) |
|
433 else: |
|
434 msgList[0] = cmd |
|
435 msg = " ".join(msgList) |
|
436 elif cmd == "NOTICE": |
|
437 if len(msgList) > 2: |
|
438 msg = "NOTICE {0} :{1}".format( |
|
439 msgList[1], " ".join(msgList[2:])) |
|
440 else: |
|
441 msg = "NOTICE {0}".format(" ".join(msgList[1:])) |
|
442 elif cmd == "PING": |
|
443 receiver = msgList[1] |
|
444 msg = "PING {0} " |
|
445 self.sendCtcpRequest.emit(receiver, "PING", "") |
|
446 sendData = False |
|
447 elif cmd == "IGNORE": |
|
448 sendData = False |
|
449 if len(msgList) > 1: |
|
450 if msgList[1] == "-r": |
|
451 ignored = False |
|
452 userNamesList = msgList[2:] |
|
453 else: |
|
454 ignored = True |
|
455 userNamesList = msgList[1:] |
|
456 else: |
|
457 userNamesList = [] |
|
458 userNames = ",".join( |
|
459 u.rstrip(",") for u in userNamesList).split(",") |
|
460 for userName in userNames: |
|
461 itm = self.__findUser(userName) |
|
462 if itm: |
|
463 itm.setIgnored(ignored) |
|
464 elif cmd == "UNIGNORE": |
|
465 sendData = False |
|
466 if len(msgList) > 1: |
|
467 userNamesList = msgList[1:] |
|
468 else: |
|
469 userNamesList = [] |
|
470 userNames = ",".join( |
|
471 u.rstrip(",") for u in userNamesList).split(",") |
|
472 for userName in userNames: |
|
473 itm = self.__findUser(userName) |
|
474 if itm: |
|
475 itm.setIgnored(False) |
|
476 elif cmd == "AWAY": |
|
477 sendData = False |
|
478 if len(msgList) > 1: |
|
479 msg = " ".join(msgList[1:]) |
|
480 else: |
|
481 msg = "" |
|
482 self.awayCommand.emit(msg) |
|
483 elif cmd == "JOIN": |
|
484 sendData = False |
|
485 if len(msgList) > 1: |
|
486 channels = msgList[1].split(",") |
|
487 if len(msgList) > 2: |
|
488 keys = msgList[2].split(",") |
|
489 else: |
|
490 keys = [] |
|
491 for channel, key in zip_longest( |
|
492 channels, keys, fillvalue=""): |
|
493 self.__ircWidget.joinChannel(channel, key) |
|
494 elif cmd == "PART": |
|
495 sendData = False |
|
496 if len(msgList) == 1: |
|
497 self.leaveChannel() |
|
498 else: |
|
499 self.leaveChannels.emit(msgList[1:]) |
|
500 elif cmd == "PARTALL": |
|
501 sendData = False |
|
502 self.leaveAllChannels.emit() |
|
503 else: |
|
504 msg = msg[1:] |
|
505 if sendData: |
|
506 self.sendData.emit(msg) |
|
507 else: |
521 else: |
508 if self.__private: |
522 self.sendData.emit( |
509 self.sendData.emit( |
523 "PRIVMSG " + self.__name + " :" + msg) |
510 "PRIVMSG " + self.__privatePartner + " :" + msg) |
524 |
511 else: |
525 self.messageEdit.clear() |
512 self.sendData.emit( |
526 self.unsetMarkerLine() |
513 "PRIVMSG " + self.__name + " :" + msg) |
|
514 |
|
515 self.messageEdit.clear() |
|
516 self.unsetMarkerLine() |
|
517 |
527 |
518 def requestLeave(self): |
528 def requestLeave(self): |
519 """ |
529 """ |
520 Public method to leave the channel. |
530 Public method to leave the channel. |
521 """ |
531 """ |
1461 Private slot to open a chat with the selected user. |
1471 Private slot to open a chat with the selected user. |
1462 """ |
1472 """ |
1463 user = self.usersList.selectedItems()[0].text() |
1473 user = self.usersList.selectedItems()[0].text() |
1464 self.openPrivateChat.emit(user) |
1474 self.openPrivateChat.emit(user) |
1465 |
1475 |
|
1476 def __sendUserMessage(self): |
|
1477 """ |
|
1478 Private slot to send a private message to a specific user. |
|
1479 """ |
|
1480 # TODO: code me |
|
1481 user = self.usersList.selectedItems()[0].text() |
|
1482 |
|
1483 |
|
1484 def __sendUserQuery(self): |
|
1485 """ |
|
1486 Private slot to send a query message to a specific user. |
|
1487 """ |
|
1488 # TODO: code me |
|
1489 user = self.usersList.selectedItems()[0].text() |
|
1490 |
|
1491 def __sendUserNotice(self): |
|
1492 """ |
|
1493 Private slot to send a notice message to a specific user. |
|
1494 """ |
|
1495 # TODO: code me |
|
1496 user = self.usersList.selectedItems()[0].text() |
|
1497 |
|
1498 def __pingUser(self): |
|
1499 """ |
|
1500 Private slot to send a ping to a specific user. |
|
1501 """ |
|
1502 user = self.usersList.selectedItems()[0].text() |
|
1503 self.__processUserMessage("/PING {0}".format(user)) |
|
1504 |
|
1505 def __ignoreUser(self): |
|
1506 """ |
|
1507 Private slot to ignore a specific user. |
|
1508 """ |
|
1509 user = self.usersList.selectedItems()[0].text() |
|
1510 self.__processUserMessage("/IGNORE {0}".format(user)) |
|
1511 |
1466 def __initUsersMenu(self): |
1512 def __initUsersMenu(self): |
1467 """ |
1513 """ |
1468 Private slot to initialize the users list context menu. |
1514 Private slot to initialize the users list context menu. |
1469 """ |
1515 """ |
1470 self.__usersMenu = QMenu(self) |
1516 self.__usersMenu = QMenu(self) |
1471 self.__whoIsAct = self.__usersMenu.addAction( |
1517 self.__whoIsAct = self.__usersMenu.addAction( |
1472 self.tr("Who Is"), self.__whoIs) |
1518 self.tr("Who Is"), self.__whoIs) |
1473 self.__usersMenu.addSeparator() |
1519 self.__usersMenu.addSeparator() |
1474 self.__privateChatAct = self.__usersMenu.addAction( |
1520 self.__privateChatAct = self.__usersMenu.addAction( |
1475 self.tr("Private Chat"), self.__openPrivateChat) |
1521 self.tr("Private Chat"), self.__openPrivateChat) |
|
1522 self.__usersMenu.addSeparator() |
|
1523 self.__sendUserMessageAct = self.__usersMenu.addAction( |
|
1524 self.tr("Send Message"), self.__sendUserMessage) |
|
1525 self.__sendUserQueryAct = self.__usersMenu.addAction( |
|
1526 self.tr("Send Query"), self.__sendUserQuery) |
|
1527 self.__sendUserNoticeAct = self.__usersMenu.addAction( |
|
1528 self.tr("Send Notice"), self.__sendUserNotice) |
|
1529 self.__usersMenu.addSeparator() |
|
1530 self.__pingUserAct = self.__usersMenu.addAction( |
|
1531 self.tr("Send Ping"), self.__pingUser) |
|
1532 self.__ignoreUserAct = self.__usersMenu.addAction( |
|
1533 self.tr("Ignore User"), self.__ignoreUser) |
1476 self.__usersMenu.addSeparator() |
1534 self.__usersMenu.addSeparator() |
1477 self.__usersListRefreshAct = self.__usersMenu.addAction( |
1535 self.__usersListRefreshAct = self.__usersMenu.addAction( |
1478 self.tr("Refresh"), self.__sendAutoWhoCommand) |
1536 self.tr("Refresh"), self.__sendAutoWhoCommand) |
1479 |
1537 |
1480 @pyqtSlot(QPoint) |
1538 @pyqtSlot(QPoint) |