Ejemplo n.º 1
0
    def OnSetRoomWallMessage(self, widget):
        result = self.RoomWallEntry.get_text()
        self.RoomWallEntry.set_text("")

        config = self.frame.np.config.sections
        room_name = self.room.room

        self.frame.np.queue.put(slskmessages.RoomTickerSet(room_name, result))

        self.RoomWallList.get_buffer().set_text("")

        login = config["server"]["login"]

        if result:
            AppendLine(self.RoomWallList,
                       "[%s] %s" % (login, result),
                       showstamp=False,
                       scroll=False)

        tickers = self.room.Tickers.get_tickers()
        AppendLine(self.RoomWallList,
                   "%s" % ("\n".join([
                       "[%s] %s" % (user, msg)
                       for (user, msg) in tickers if not user == login
                   ])),
                   showstamp=False,
                   scroll=False)
Ejemplo n.º 2
0
    def OnSetRoomWallMessage(self, widget):
        result = self.RoomWallEntry.get_text()
        self.RoomWallEntry.set_text("")

        config = self.frame.np.config.sections
        room_name = self.room.room

        if not result:
            if room_name in config["ticker"]["rooms"]:
                del config["ticker"]["rooms"][room_name]
        else:
            config["ticker"]["rooms"][room_name] = result

        self.frame.np.config.writeConfiguration()

        self.frame.np.queue.put(slskmessages.RoomTickerSet(room_name, result))

        self.RoomWallList.get_buffer().set_text("")

        tickers = self.room.Tickers.get_tickers()
        login = config["server"]["login"]
        AppendLine(self.RoomWallList,
                   "%s" % ("\n".join([
                       "[%s] %s" % (user, msg)
                       for (user, msg) in tickers if not user == login
                   ])),
                   showstamp=False)

        if result:
            AppendLine(self.RoomWallList,
                       "[%s] %s" % (login, result),
                       showstamp=False)
Ejemplo n.º 3
0
    def ShowMessage(self, text, status=None, timestamp=None):

        self.UpdateColours()

        if text[:4] == "/me ":
            line = "* %s %s" % (self.user, self.frame.CensorChat(text[4:]))
            speech = line[2:]
            tag = self.tag_me
        else:
            line = "[%s] %s" % (self.user, self.frame.CensorChat(text))
            speech = self.frame.CensorChat(text)
            tag = self.tag_remote

        timestamp_format = self.frame.np.config.sections["logging"]["private_timestamp"]
        if status and not self.offlinemessage:
            AppendLine(
                self.ChatScroll,
                _("* Message(s) sent while you were offline. Timestamps are reported by the server and can be off."),
                self.tag_hilite,
                timestamp_format=timestamp_format
            )
            self.offlinemessage = 1

        if not status and self.offlinemessage:
            self.offlinemessage = False

        if status:
            # The timestamps from the server are off by a lot, so we'll only use them when this is an offline message
            # Also, they are in UTC so we need to correct them
            if daylight:
                timestamp -= (3600 * daylight)
            else:
                timestamp += altzone

            AppendLine(self.ChatScroll, line, self.tag_hilite, timestamp=timestamp, timestamp_format=timestamp_format, username=self.user, usertag=self.tag_username)
        else:
            AppendLine(self.ChatScroll, line, tag, timestamp_format=timestamp_format, username=self.user, usertag=self.tag_username)

        if self.Log.get_active():
            WriteLog(self.frame.np.config.sections["logging"]["privatelogsdir"], self.user, line)

        autoreply = self.frame.np.config.sections["server"]["autoreply"]
        if self.frame.away and not self.autoreplied and autoreply:
            self.SendMessage("[Auto-Message] %s" % autoreply)
            self.autoreplied = 1

        self.frame.Notifications.new_tts(
            self.frame.np.config.sections["ui"]["speechprivate"] % {
                "user": self.frame.Notifications.tts_clean(self.user),
                "message": self.frame.Notifications.tts_clean(speech)
            }
        )
Ejemplo n.º 4
0
    def ReadPrivateLog(self):

        # Read log file
        config = self.frame.np.config.sections
        log = os.path.join(config["logging"]["privatelogsdir"],
                           CleanFile(self.user.replace(os.sep, "-")) + ".log")

        try:
            numlines = int(config["logging"]["readprivatelines"])
        except Exception:
            numlines = 15

        try:
            with open(log, 'r') as lines:
                # Only show as many log lines as specified in config
                lines = deque(lines, numlines)

                for line in lines:
                    AppendLine(self.ChatScroll,
                               line,
                               self.tag_hilite,
                               timestamp_format="",
                               username=self.user,
                               usertag=self.tag_hilite)
        except IOError:
            pass

        GLib.idle_add(ScrollBottom, self.ChatScroll.get_parent())
Ejemplo n.º 5
0
    def ReadPrivateLog(self):

        # Read log file
        config = self.frame.np.config.sections
        log = os.path.join(config["logging"]["privatelogsdir"],
                           fixpath(self.user.replace(os.sep, "-")) + ".log")

        try:
            lines = int(config["logging"]["readprivatelines"])
        except Exception:
            lines = 15

        try:
            f = open(log, "r")
            d = f.read()
            f.close()
            s = d.split("\n")
            for l in s[-lines:-1]:
                AppendLine(self.ChatScroll,
                           l + "\n",
                           self.tag_hilite,
                           timestamp_format="",
                           username=self.user,
                           usertag=self.tag_hilite)
        except IOError as e:  # noqa: F841
            pass

        gobject.idle_add(self.frame.ScrollBottom, self.ChatScroll.get_parent())
Ejemplo n.º 6
0
 def Login(self):
     timestamp_format = self.frame.np.config.sections["logging"][
         "private_timestamp"]
     AppendLine(self.ChatScroll,
                _("--- reconnected ---"),
                self.tag_hilite,
                timestamp_format=timestamp_format)
     self.ChangeColours()
Ejemplo n.º 7
0
 def show(self):
     tickers = self.room.Tickers.get_tickers()
     AppendLine(
         self.RoomWallList,
         "%s" %
         ("\n".join(["[%s] %s" % (user, msg) for (user, msg) in tickers])),
         showstamp=False,
         scroll=False)
     self.RoomWall.show()
Ejemplo n.º 8
0
    def ShowUserInfo(self, descr, has_pic, pic, totalupl, queuesize,
                     slotsavail, uploadallowed):

        self.conn = None
        self._descr = descr
        self.image_pixbuf = None
        self.descr.get_buffer().set_text("")

        AppendLine(self.descr,
                   descr,
                   self.tag_local,
                   showstamp=False,
                   scroll=False)

        self.uploads.set_text(_("Total uploads allowed: %i") % totalupl)
        self.queuesize.set_text(_("Queue size: %i") % queuesize)

        if slotsavail:
            slots = _("Yes")
        else:
            slots = _("No")

        self.slotsavail.set_text(_("Slots free: %s") % slots)

        if uploadallowed == 0:
            allowed = _("No one")
        elif uploadallowed == 1:
            allowed = _("Everyone")
        elif uploadallowed == 2:
            allowed = _("Users in list")
        elif uploadallowed == 3:
            allowed = _("Trusted Users")
        else:
            allowed = _("unknown")

        self.AcceptUploads.set_text(_("%s") % allowed)

        if has_pic and pic is not None:
            try:
                import gc
                loader = GdkPixbuf.PixbufLoader()
                loader.write(pic)
                loader.close()
                self.image_pixbuf = loader.get_pixbuf()
                self.image.set_from_pixbuf(self.image_pixbuf)
                del pic, loader
                gc.collect()
                self.actual_zoom = 0
                self.SavePicture.set_sensitive(True)
            except TypeError:
                name = tempfile.mktemp()
                f = open(name, "w")
                f.write(pic)
                f.close()
                self.image.set_from_file(name)
                os.remove(name)
Ejemplo n.º 9
0
 def ConnClose(self):
     timestamp_format = self.frame.np.config.sections["logging"][
         "private_timestamp"]
     AppendLine(self.ChatScroll,
                _("--- disconnected ---"),
                self.tag_hilite,
                timestamp_format=timestamp_format)
     self.status = -1
     self.offlinemessage = 0
     self.ChangeColours()
Ejemplo n.º 10
0
    def SendMessage(self, text, bytestring=False):

        user_text = self.frame.pluginhandler.OutgoingPrivateChatEvent(
            self.user, text)
        if user_text is None:
            return

        (u, text) = user_text

        my_username = self.frame.np.config.sections["server"]["login"]

        if text[:4] == "/me ":
            line = "* %s %s" % (my_username, text[4:])
            usertag = tag = self.tag_me
        else:

            if text == CTCP_VERSION:
                line = "CTCP VERSION"
            else:
                line = text

            tag = self.tag_local
            usertag = self.tag_my_username
            line = "[%s] %s" % (my_username, line)

        timestamp_format = self.frame.np.config.sections["logging"][
            "private_timestamp"]
        AppendLine(self.ChatScroll,
                   line,
                   tag,
                   timestamp_format=timestamp_format,
                   username=my_username,
                   usertag=usertag)

        if self.Log.get_active():
            timestamp_format = self.frame.np.config.sections["logging"][
                "log_timestamp"]
            write_log(
                self.frame.np.config.sections["logging"]["privatelogsdir"],
                self.user, line, timestamp_format)

        if bytestring:
            payload = text
        else:
            payload = self.frame.AutoReplace(text)

        if self.PeerPrivateMessages.get_active():
            # not in the soulseek protocol
            self.frame.np.ProcessRequestToPeer(
                self.user, slskmessages.PMessageUser(None, my_username,
                                                     payload))
        else:
            self.frame.np.queue.put(
                slskmessages.MessageUser(self.user, payload))
Ejemplo n.º 11
0
    def OnEnter(self, widget):

        text = widget.get_text()

        if not text:
            widget.set_text("")
            return

        if is_alias(self.frame.np.config.aliases, text):
            import _thread
            _thread.start_new_thread(self.threadAlias, (text, ))
            widget.set_text("")
            return

        s = text.split(" ", 1)
        cmd = s[0]
        if len(s) == 2 and s[1]:
            realargs = args = s[1]
        else:
            args = self.user
            realargs = ""

        if cmd in ("/alias", "/al"):

            AppendLine(self.ChatScroll,
                       self.frame.np.config.AddAlias(realargs), None, "")
            if self.frame.np.config.sections["words"]["aliases"]:
                self.frame.chatrooms.roomsctrl.UpdateCompletions()
                self.frame.privatechats.UpdateCompletions()

        elif cmd in ("/unalias", "/un"):

            AppendLine(self.ChatScroll, self.frame.np.config.Unalias(realargs),
                       None, "")
            if self.frame.np.config.sections["words"]["aliases"]:
                self.frame.chatrooms.roomsctrl.UpdateCompletions()
                self.frame.privatechats.UpdateCompletions()

        elif cmd in ["/join", "/j"]:
            self.frame.np.queue.put(slskmessages.JoinRoom(args))

        elif cmd in ["/w", "/whois", "/info"]:
            if args:
                self.frame.LocalUserInfoRequest(args)
                self.frame.OnUserInfo(None)

        elif cmd in ["/b", "/browse"]:
            if args:
                self.frame.BrowseUser(args)
                self.frame.OnUserBrowse(None)

        elif cmd == "/ip":
            if args:
                user = args
                if user not in self.frame.np.ip_requested:
                    self.frame.np.ip_requested.append(user)
                self.frame.np.queue.put(slskmessages.GetPeerAddress(user))

        elif cmd == "/pm":
            if realargs:
                self.frame.privatechats.SendMessage(realargs, None, 1)

        elif cmd in ["/m", "/msg"]:
            if realargs:
                s = realargs.split(" ", 1)
                user = s[0]
                if len(s) == 2:
                    msg = s[1]
                else:
                    msg = None

                self.frame.privatechats.SendMessage(user, msg)

        elif cmd in ["/s", "/search"]:
            if realargs:
                self.frame.Searches.DoSearch(realargs, 0)
                self.frame.OnSearch(None)

        elif cmd in ["/us", "/usearch"]:
            if realargs:
                self.frame.Searches.DoSearch(realargs, 3, [self.user])
                self.frame.OnSearch(None)

        elif cmd in ["/rs", "/rsearch"]:
            if realargs:
                self.frame.Searches.DoSearch(realargs, 1)
                self.frame.OnSearch(None)

        elif cmd in ["/bs", "/bsearch"]:
            if realargs:
                self.frame.Searches.DoSearch(realargs, 2)
                self.frame.OnSearch(None)

        elif cmd in ["/ad", "/add", "/buddy"]:
            if args:
                self.frame.userlist.AddToList(args)

        elif cmd in ["/rem", "/unbuddy"]:
            if args:
                self.frame.userlist.RemoveFromList(args)

        elif cmd == "/ban":
            if args:
                self.frame.BanUser(args)

        elif cmd == "/ignore":
            if args:
                self.frame.IgnoreUser(args)

        elif cmd == "/ignoreip":
            if args:
                self.frame.IgnoreIP(args)

        elif cmd == "/unban":
            if args:
                self.frame.UnbanUser(args)

        elif cmd == "/unignore":
            if args:
                self.frame.UnignoreUser(args)

        elif cmd == "/ctcpversion":
            if args:
                self.frame.privatechats.SendMessage(args,
                                                    CTCP_VERSION,
                                                    1,
                                                    bytestring=True)

        elif cmd in ["/clear", "/cl"]:
            self.ChatScroll.get_buffer().set_text("")

        elif cmd in ["/a", "/away"]:
            self.frame.OnAway(None)

        elif cmd in ["/q", "/quit", "/exit"]:
            self.frame.OnExit(None)
            return

        elif cmd in ["/c", "/close"]:
            self.OnClose(None)

        elif cmd == "/now":
            self.NowPlayingThread()

        elif cmd == "/rescan":
            self.frame.OnRescan()

        elif cmd[:
                 1] == "/" and self.frame.pluginhandler.TriggerPrivateCommandEvent(
                     self.user, cmd[1:], args):
            pass

        elif cmd and cmd[:1] == "/" and cmd != "/me" and cmd[:2] != "//":
            self.frame.logMessage(_("Command %s is not recognized") % text)
            return

        else:

            if text[:2] == "//":
                text = text[1:]

            if self.chats.connected:
                self.SendMessage(text)
                widget.set_text("")

            return

        widget.set_text("")
Ejemplo n.º 12
0
    def __init__(self, parent, nicotine):

        self.nicotine = nicotine

        gtk.Dialog.__init__(self, _("About Nicotine+"), parent,
                            gtk.DialogFlags.MODAL)

        self.set_resizable(True)
        self.set_position(gtk.WindowPosition.CENTER)
        self.vbox.set_spacing(10)
        self.set_border_width(10)

        img = gtk.Image()
        img.set_from_pixbuf(self.nicotine.images["n"])

        ScrolledWindow = gtk.ScrolledWindow()
        ScrolledWindow.show()
        ScrolledWindow.set_size_request(400, 250)
        ScrolledWindow.set_shadow_type(gtk.ShadowType.IN)

        TextView = gtk.TextView()
        TextView.set_wrap_mode(gtk.WrapMode.WORD)
        TextView.set_cursor_visible(False)
        TextView.set_editable(False)
        TextView.show()
        TextView.set_left_margin(3)
        ScrolledWindow.add(TextView)

        text = _("""Nicotine+ %s
Website:
https://www.nicotine-plus.org
Bug Tracker & Source Code:
https://github.com/Nicotine-Plus/nicotine-plus

Soulseek: http://www.slsknet.org

Based on code from Nicotine and PySoulSeek""") % version

        AppendLine(TextView, text, None, None, showstamp=False)
        vbox = gtk.VBox()
        vbox.pack_start(img, False, True, 0)
        hbox = gtk.HBox()
        hbox.set_spacing(10)
        hbox.pack_start(vbox, False, True, 0)
        hbox.pack_start(ScrolledWindow, True, True, 0)

        self.expander = gtk.Expander.new(_("Dependencies"))
        self.expander.show()

        pythonversion = '.'.join(map(str, sys.version_info[:3]))

        self.vbox2 = gtk.VBox()
        self.vbox2.set_spacing(5)
        self.vbox2.set_border_width(5)
        self.expander.add(self.vbox2)

        hboxpython = gtk.HBox(5)
        hboxpython.show()
        python = gtk.Label("Python:")
        python.set_alignment(0, 0.5)
        python.show()

        VersionPython = gtk.Label(pythonversion)
        VersionPython.set_alignment(0, 0.5)
        VersionPython.show()

        hboxpython.pack_start(python, True, True, 0)
        hboxpython.pack_start(VersionPython, True, True, 0)

        hboxgtk = gtk.HBox(5)
        hboxgtk.show()

        gtkversion = '{}.{}.{}'.format(gtk.get_major_version(),
                                       gtk.get_minor_version(),
                                       gtk.get_micro_version())

        VersionGTK = gtk.Label(gtkversion)

        gtkplus = gtk.Label("GTK+:")
        gtkplus.set_alignment(0, 0.5)
        gtkplus.show()

        VersionGTK.set_alignment(0, 0.5)
        VersionGTK.show()

        hboxgtk.pack_start(gtkplus, True, True, 0)
        hboxgtk.pack_start(VersionGTK, True, True, 0)

        hboxpygtk = gtk.HBox(5)
        hboxpygtk.show()

        VersionPyGObject = gtk.Label(gobject_version)

        pygtkplus = gtk.Label("PyGObject:")
        pygtkplus.set_alignment(0, 0.5)
        pygtkplus.show()

        VersionPyGObject.set_alignment(0, 0.5)
        VersionPyGObject.show()

        hboxpygtk.pack_start(pygtkplus, True, True, 0)
        hboxpygtk.pack_start(VersionPyGObject, True, True, 0)

        self.vbox2.pack_start(hboxpython, True, True, 0)
        self.vbox2.pack_start(hboxgtk, True, True, 0)
        self.vbox2.pack_start(hboxpygtk, True, True, 0)

        self.vbox.pack_start(hbox, True, True, 0)
        self.vbox.pack_start(self.expander, True, True, 0)

        self.LicenseButton = self.nicotine.CreateIconButton(
            gtk.STOCK_ABOUT, "stock", self.license, _("License"))

        self.action_area.pack_start(self.LicenseButton, True, True, 0)

        self.CreditsButton = self.nicotine.CreateIconButton(
            gtk.STOCK_ABOUT, "stock", self.credits, _("Credits"))

        self.action_area.pack_start(self.CreditsButton, True, True, 0)

        self.CloseButton = self.nicotine.CreateIconButton(
            gtk.STOCK_CLOSE, "stock", self.click, _("Close"))

        self.action_area.pack_start(self.CloseButton, True, True, 0)

        self.show_all()