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)
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