def download_subtitles(self, subtitle_id):
        self._lock.acquire(True)

        message = ''
        error_message = _(u'Could not contact the OpenSubtitles website.')

        (log_in_success, log_in_message) = self._log_in()

        if log_in_success:
            result = None
            try:
                result = self._server.DownloadSubtitles(
                    self._token, [subtitle_id])
            except xmlrpc.client.ProtocolError:
                message = error_message

            if result and result.get('status') == OK200:
                try:
                    subtitle64 = result['data'][0]['data']
                except LookupError:
                    self._lock.release()
                    return (None, error_message)

                subtitle_unzipped = zlib.decompress(
                    GLib.base64_decode(subtitle64), 47)

                self._lock.release()

                return (subtitle_unzipped, message)
        else:
            message = log_in_message

        self._lock.release()

        return (None, message)
    def download_subtitles (self, subtitle_id):
        self._lock.acquire (True)

        message = ''
        error_message = _(u'Could not contact the OpenSubtitles website.')

        (log_in_success, log_in_message) = self._log_in ()

        if log_in_success:
            try:
                result = self._server.DownloadSubtitles (self._token,
                                                         [subtitle_id])
            except xmlrpc.client.ProtocolError:
                message = error_message

            if result and result.get ('status') == OK200:
                try:
                    subtitle64 = result['data'][0]['data']
                except LookupError:
                    self._lock.release ()
                    return (None, error_message)

                subtitle_unzipped = zlib.decompress(GLib.base64_decode (subtitle64), 47)

                self._lock.release ()

                return (subtitle_unzipped, message)
        else:
            message = log_in_message

        self._lock.release ()

        return (None, message)
Beispiel #3
0
    def newlistrow(self, codeinfo) -> Gtk.ListBoxRow:

        # get the unique UUID of the key
        current_uuid = codeinfo['uuid']
        # get image data if it exists
        imagedata = codeinfo['image']
        # create the code object
        secret_obj = pyotp.totp.TOTP(codeinfo['secret']) if (
            codeinfo['codetype'] == 'totp') else pyotp.hotp.HOTP(
                codeinfo['secret'])
        secret = codeinfo['secret']
        if codeinfo['codetype'] == 'totp':
            authentication_code = secret_obj.now()
        elif codeinfo['codetype'] == 'hotp':
            authentication_code = secret_obj.at(codeinfo['counter'])
        # create a new row to work on, using the TwoFactorListBoxRow class
        # (listbox.py)
        new_row = TwoFactorListBoxRow(uuid=current_uuid)
        secret_name = codeinfo['name']
        secret_issuer = codeinfo['issuer']
        new_row.nameLabel.set_label(secret_name)
        new_row.issuerLabel.set_label(secret_issuer)
        new_row.authCodeLabel.set_label(authentication_code)
        new_row.copyButton.connect("clicked", self.copy_btn_press,
                                   current_uuid)
        new_row.deleteButton.connect("clicked", self.del_btn_press,
                                     current_uuid)
        new_row.editButton.connect("clicked", self.edit_btn_press,
                                   current_uuid)
        new_row.avatar.set_text(secret_name)
        if imagedata is not None:
            image = GLib.Bytes.new(GLib.base64_decode(imagedata))
            loader = GdkPixbuf.PixbufLoader.new()
            loader.write_bytes(image)
            pixbuf = loader.get_pixbuf()
            loader.close()
            # get scaling factor of window
            scale_factor = self.application_window.get_scale_factor()
            # get size of avatar
            avatar_size = new_row.avatar.get_size()
            # adjust avatar size by multiplying it by scale factor
            avatar_size *= scale_factor
            # scale pixbuf to avatar size
            #scaled_pixbuf = pixbuf.scale_simple(avatar_size, avatar_size,
            #                                    GdkPixbuf.InterpType.BILINEAR)
            #del pixbuf
            new_row.avatar.set_image_load_func(self._avatar_load_func, pixbuf)
        # add authentication button to sizegroup
        self.authentication_sizegroup.add_widget(new_row.copyButton)
        if codeinfo['codetype'] == 'totp':
            # we don't need this for a totp code, might as well get rid of it to save memory
            new_row.incrementCounterButton.destroy()
            new_row.seperator.destroy()
        elif codeinfo['codetype'] == 'hotp':
            #self.increment_sizegroup.add_widget(new_row.incrementCounterButton)
            new_row.incrementCounterButton.connect("clicked",
                                                   self.increment_btn_press,
                                                   current_uuid)
            new_row.incrementCounterLabel.set_text(
                f"{codeinfo['counter'].__str__()}")
        # get position, for re-ordering later
        pos = codeinfo['pos']
        # pack everything into the TwoFactorCode class
        codeobj = TwoFactorCode(
            name=secret_name,
            issuer=secret_issuer,
            codetype=codeinfo['codetype'],
            codestr=secret,
            counter=codeinfo['counter'] if
            (codeinfo['codetype'] == 'hotp') else None,
            pos=pos,
            imagedata=imagedata,
            ui=TwoFactorUIElements(revealer=new_row.revealer,
                                   authlbl=new_row.authCodeLabel,
                                   issuerlbl=new_row.issuerLabel,
                                   namelbl=new_row.nameLabel,
                                   row=new_row.row,
                                   avatar=new_row.avatar,
                                   mainlayout=new_row.mainLayout,
                                   counterlbl=new_row.incrementCounterLabel if
                                   (codeinfo['codetype'] == 'hotp') else None))
        if codeinfo['codetype'] == 'hotp':
            # if the code is an hotp code, set the counter label
            codeobj.ui.counterlbl.set_label(codeinfo['counter'].__str__())
        self.codes[current_uuid] = codeobj
        # set up drag'n'drop

        # make each list row a target for drag'n'drop

        new_row.handle.drag_source_set(Gdk.ModifierType.BUTTON1_MASK,
                                       [self.targetEntry], Gdk.DragAction.MOVE)

        # handle connections
        new_row.handle.connect("drag-data-get", self.drag_data_get, new_row)
        new_row.handle.connect("drag-begin", self.drag_begin,
                               new_row.infoLayout)
        new_row.handle.connect("drag-failed", self.drag_end_or_fail)
        #new_row.row.drag_dest_set(Gtk.DestDefaults.MOTION,
        #                 [self.targetEntry],
        #                 Gdk.DragAction.MOVE)
        # add borders
        new_row.row.get_style_context().add_class("crborder")
        return new_row
        if self.editmode:
            new_row.revealer.set_reveal_child(True)
        return new_row