Network/IRC/IrcChannelWidget.py

changeset 6532
f253f0f9ea7f
parent 6514
f11a703e4664
child 6534
1a3e3d857467
equal deleted inserted replaced
6531:a401efd02cd1 6532:f253f0f9ea7f
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>&lt;</b><font color="{1}">{3}</font>' 401
402 '<b>&gt;</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>&lt;</b><font color="{1}">{3}</font>'
412 self.tr("Send Message"), 412 '<b>&gt;</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)

eric ide

mercurial