Exemplo n.º 1
0
 def run(self):
     try:
         self.worker_result = self.worker_fun(self.ctrl_obj,
                                              *self.worker_fun_args)
     except Exception as e:
         printError("worker thread", "run", str(e))
         self.stop()
Exemplo n.º 2
0
	def getConfigSerialPort(self, notify, output):
		if config.cur_serial_port == -1:
			misc.printError(None, output, \
				_("Serial port not configured!\nUse Tools->Serial Port to configure port."))
			return -1
		else:
			return config.cur_serial_port
Exemplo n.º 3
0
	def getConfigSerialPort(self, notify, output):
		if config.cur_serial_port == -1:
			misc.printError(None, output, \
				_("Serial port not configured!\nUse Tools->Serial Port to configure port."))
			return -1
		else:
			return config.cur_serial_port
Exemplo n.º 4
0
    def load_utxos_thread(self, ctrl):
        with self.Lock:
            # clear rewards DB
            printDbg("Updating rewards...")
            self.caller.parent.db.clearTable('REWARDS')
            self.caller.parent.db.clearTable('MY_VOTES')

            # If rpc is not connected and hw device is Ledger, warn and return.
            if not self.caller.rpcConnected and self.caller.hwModel == 0:
                printError(getCallerName(), getFunctionName(), 'PIVX daemon not connected - Unable to update UTXO list')
                return

            total_num_of_utxos = 0
            mn_rewards = {}
            for mn in self.caller.masternode_list:
                # Load UTXOs from API client
                rewards = self.caller.apiClient.getAddressUtxos(mn['collateral'].get('address'))

                if rewards is None:
                    printError(getCallerName(), getFunctionName(), 'API client not responding.')
                    return

                mn_rewards[mn['name']] = rewards
                total_num_of_utxos += len(rewards)

            printDbg("Number of UTXOs to load: %d" % total_num_of_utxos)
            curr_utxo = 0

            for mn in mn_rewards:
                for utxo in mn_rewards[mn]:
                    # Add mn_name to UTXO
                    utxo['mn_name'] = mn
                    # Get raw tx
                    rawtx = TxCache(self.caller)[utxo['txid']]
                    if rawtx is None:
                        printDbg("Unable to get raw TX with hash=%s from RPC server." % utxo['txid'])
                        # Don't save UTXO if raw TX is unavailable
                        mn_rewards[mn].remove(utxo)
                        continue
                    utxo['raw_tx'] = rawtx
                    utxo['staker'] = ""
                    p2cs, utxo['coinstake'] = IsPayToColdStaking(rawtx, utxo['vout'])
                    if p2cs:
                        utxo['staker'] = GetDelegatedStaker(rawtx, utxo['vout'], self.caller.isTestnetRPC)
                    # Add utxo to database
                    self.caller.parent.db.addReward(utxo)

                    # emit percent
                    percent = int(100 * curr_utxo / total_num_of_utxos)
                    self.caller.sig_UTXOsLoading.emit(percent)
                    curr_utxo += 1

            printDbg("--# REWARDS table updated")
            self.caller.sig_UTXOsLoading.emit(100)
Exemplo n.º 5
0
    def load_utxos_thread(self, ctrl):
        with self.Lock:
            # clear utxos DB
            printDbg("Updating UTXOs...")
            self.caller.parent.db.clearTable('UTXOS')
            self.utxoLoaded = False

            if not self.caller.rpcConnected:
                printError(
                    getCallerName(), getFunctionName(),
                    'PIVX daemon not connected - Unable to update UTXO list')
                return

            utxos = self.caller.apiClient.getAddressUtxos(self.curr_addr)
            total_num_of_utxos = len(utxos)

            # Get raw transactions
            curr_utxo = 0
            percent = 0
            for u in utxos:
                percent = int(100 * curr_utxo / total_num_of_utxos)
                # get raw TX from RPC client (only for ledger / trezor has own api)
                if self.caller.hwModel == 0:
                    # double check that the rpc connection is still active, else reconnect
                    if self.caller.rpcClient is None:
                        self.caller.updateRPCstatus(None)
                    rawtx = self.caller.rpcClient.getRawTransaction(u['txid'])
                    if rawtx is None:
                        printDbg(
                            "Unable to get raw TX with hash=%s from RPC server."
                            % u['txid'])
                        # Don't save UTXO if raw TX is unavailable
                        continue
                else:
                    rawtx = ""

                # Save utxo to db
                u['receiver'] = self.curr_addr
                u['raw_tx'] = rawtx
                u['staker'] = ""
                p2cs, u['coinstake'] = IsPayToColdStaking(rawtx, u['vout'])
                if p2cs:
                    u['staker'] = GetDelegatedStaker(rawtx, u['vout'],
                                                     self.caller.isTestnetRPC)
                self.caller.parent.db.addReward(u)

                # emit percent
                self.caller.sig_UTXOsLoading.emit(percent)
                curr_utxo += 1

            self.caller.sig_UTXOsLoading.emit(100)
            printDbg("--# REWARDS table updated")
            self.utxoLoaded = True
            self.caller.sig_UTXOsLoaded.emit()
Exemplo n.º 6
0
    def process_api_exceptions_int(*args, **kwargs):
        client = args[0]
        try:
            return func(*args, **kwargs)
        except Exception as e:
            message = "Primary API source not responding. Trying secondary"
            printException(getCallerName(True), getFunctionName(True), message,
                           str(e))
            try:
                client.api = CryptoIDClient(client.isTestnet)
                return func(*args, **kwargs)

            except Exception as e:
                printError(getCallerName(True), getFunctionName(True), str(e))
                return None
Exemplo n.º 7
0
    def load_utxos_thread(self, ctrl):
        with self.Lock:
            # clear rewards DB
            printDbg("Updating rewards...")
            self.caller.parent.db.clearTable('REWARDS')
            self.caller.parent.db.clearTable('MY_VOTES')
            self.utxoLoaded = False

            # If rpc is not connected and hw device is Ledger, warn and return.
            if not self.caller.rpcConnected and self.caller.hwModel == 0:
                printError(getCallerName(), getFunctionName(), 'PIVX daemon not connected - Unable to update UTXO list')
                return

            total_num_of_utxos = 0
            mn_rewards = {}
            for mn in self.caller.masternode_list:
                # Load UTXOs from API client
                rewards = self.caller.apiClient.getAddressUtxos(mn['collateral'].get('address'))

                if rewards is None:
                    printError(getCallerName(), getFunctionName(), 'API client not responding.')
                    return

                mn_rewards[mn['name']] = rewards
                total_num_of_utxos += len(rewards)

            printDbg("Number of UTXOs to load: %d" % total_num_of_utxos)
            curr_utxo = 0
            percent = 0

            for mn in mn_rewards:
                # for each UTXO
                for utxo in mn_rewards[mn]:
                    rawtx = None
                    percent = int(100*curr_utxo / total_num_of_utxos)
                    # get raw TX from RPC client (only for ledger / trezor has own api)
                    if self.caller.hwModel == 0:
                        rawtx = self.caller.rpcClient.getRawTransaction(utxo['txid'])
                    else:
                        rawtx = ""

                    # Don't save UTXO if raw TX is unavailable
                    if rawtx is None:
                        printError(getCallerName(), getFunctionName(), "Unable to get raw TX with hash=%s from RPC server" % utxo['txid'])
                        continue

                    # Add mn_name and raw_tx to UTXO and save it to DB
                    else:
                        utxo['mn_name'] = mn
                        utxo['raw_tx'] = rawtx
                        self.caller.parent.db.addReward(utxo)

                    # emit percent
                    self.caller.sig_UTXOsLoading.emit(percent)
                    curr_utxo += 1

            self.caller.sig_UTXOsLoading.emit(100)
            printDbg("--# REWARDS table updated")
            self.utxoLoaded = True
            self.caller.sig_UTXOsLoaded.emit()
Exemplo n.º 8
0
    def load_utxos_thread(self, ctrl):
        with self.Lock:
            # clear utxos DB
            printDbg("Updating UTXOs...")
            self.caller.parent.db.clearTable('UTXOS')
            self.utxoLoaded = False

            if not self.caller.rpcConnected:
                printError(getCallerName(), getFunctionName(), 'PIVX daemon not connected - Unable to update UTXO list')
                return

            utxos = self.caller.apiClient.getAddressUtxos(self.curr_addr)
            total_num_of_utxos = len(utxos)

            # Get raw transactions
            curr_utxo = 0
            percent = 0
            for u in utxos:
                rawtx = None
                percent = int(100 * curr_utxo / total_num_of_utxos)
                rawtx = self.caller.rpcClient.getRawTransaction(u['txid'])

                # break if raw TX is unavailable
                if rawtx is None:
                    return

                # Save utxo to db
                u['receiver'] = self.curr_addr
                u['raw_tx'] = rawtx
                self.caller.parent.db.addReward(u)

                # emit percent
                self.caller.sig_UTXOsLoading.emit(percent)
                curr_utxo += 1

            self.caller.sig_UTXOsLoading.emit(100)
            printDbg("--# REWARDS table updated")
            self.utxoLoaded = True
            self.caller.sig_UTXOsLoaded.emit()
Exemplo n.º 9
0
    def load_utxos_thread(self, ctrl):
        try:
            if not self.mainTab.caller.rpcClient.getStatus():
                printDbg('PIVX daemon not connected')
            else:
                try:
                    self.blockCount = self.mainTab.caller.rpcClient.getBlockCount(
                    )
                    utxos = self.mainTab.caller.apiClient.getAddressUtxos(
                        self.pivx_addr)
                    self.utxos = [
                        utxo for utxo in utxos
                        if round(int(utxo.get('satoshis', 0)) /
                                 1e8, 8) == 10000.00000000
                    ]

                except Exception as e:
                    errorMsg = 'Error occurred while calling getaddressutxos method: ' + str(
                        e)
                    printError(getCallerName(), getFunctionName(), errorMsg)

        except Exception as e:
            pass
Exemplo n.º 10
0
    def load_utxos_thread(self, ctrl):
        with self.Lock:
            # clear utxos DB
            printDbg("Updating UTXOs...")
            self.caller.parent.db.clearTable('UTXOS')

            if not self.caller.rpcConnected:
                printError(getCallerName(), getFunctionName(), 'PIVX daemon not connected - Unable to update UTXO list')
                return

            utxos = self.caller.apiClient.getAddressUtxos(self.curr_addr)
            total_num_of_utxos = len(utxos)

            curr_utxo = 0
            for u in utxos:
                u['receiver'] = self.curr_addr
                # Get raw tx
                u['rawtx'] = TxCache(self.caller)[u['txid']]
                if u['rawtx'] is None:
                    printDbg("Unable to get raw TX with hash=%s from RPC server." % u['txid'])
                    # Don't save UTXO if raw TX is unavailable
                    utxos.remove(u)
                u['staker'] = ""
                p2cs, u['coinstake'] = IsPayToColdStaking(u['rawtx'], u['vout'])
                if p2cs:
                    u['staker'] = GetDelegatedStaker(u['rawtx'], u['vout'], self.caller.isTestnetRPC)

                # Save utxo to db
                self.caller.parent.db.addReward(u)

                # emit percent
                percent = int(100 * curr_utxo / total_num_of_utxos)
                self.caller.sig_UTXOsLoading.emit(percent)
                curr_utxo += 1

            printDbg("--# REWARDS table updated")
            self.caller.sig_UTXOsLoading.emit(100)
Exemplo n.º 11
0
def finish(downloads, keepOld, reDownload, checkDuration, listOnly, convertTo, bashOutFile, verbose):
    shouldBeDeleted = []
    
    if not listOnly:
        if downloads:
            infoDownloaded = getVideos(downloads, keepOld, reDownload, checkDuration, verbose)
            if convertTo:
                if verbose:
                    printInfo2("Converting downloads...")
                convertDownloads(downloads, convertTo, verbose)
        else:
            infoDownloaded = ""
            onError(17, "Could not find any streams to download")
    else:
        infoDownloaded = ""
        printInfo1("\nListing only")
        printScores()
        if bashOutFile:
            if continueWithProcess(bashOutFile, bashSuffix, True, False,
                           "Will redownload\n", "Keeping old file. No download\n", verbose):
                bashFile = open("%s.%s" % (bashOutFile, bashSuffix), "w")
                bashFile.write("#!/bin/bash\n\n")
        if downloads:
            printInfo1("These files would have been downloaded:")
            for line in downloads:
                # print line
                printInfo1("\nVideo name: %s.%s" % (line['name'].rstrip(), line['suffix']))
                printInfo1("Video quality: %s" % line['quality'])
                printInfo1("Video address: %s" % line['address'])
                if line['subs']:
                    printInfo1("Subtitles name: %s.srt" % line['name'].rstrip())
                    printInfo1("Subtitles address: %s" % line['subs'])
                else:
                    printInfo1("No subtitles found")
                print "Duration: %s s" % line['duration']
                if bashOutFile:
                    if line['address'].startswith("http"):
                        cmd = ffmpegDownloadCommand(line, verbose)
                        bashFile.write("%s\n\n" % cmd)
                    elif line['address'].startswith("rtmp"):
                        cmd = rtmpdumpDownloadCommand(line, verbose)
                        bashFile.write("%s\n\n" % cmd)
                    if line['subs']:
                        cmd = wgetDownloadCommand(line, verbose)
                        bashFile.write("%s\n\n" % cmd)
            if bashOutFile:
                bashFile.close()
                st = os.stat("%s.sh" % bashOutFile)
                os.chmod("%s.sh" % bashOutFile, st.st_mode | stat.S_IEXEC)
        else:
            printWarning("Could not find anything that would have been downloaded")

    for line in infoDownloaded:
        printInfo1("\nVideo: %s" % line['videoName'])
        printScores()
        if line['expectedDuration'] != "0.000":
            printInfo1("Expected duration: %s" % (str(datetime.timedelta(seconds=round(float(line['expectedDuration']), 2)))))
        if verbose: 
            printInfo1("Duration: %s ms" % line['duration'])
        printInfo1("Duration: %s" % line['durationFormatted'])
        if line['videoDlComment'] == dlCommentError:
            printError(line['videoDlComment'])
            shouldBeDeleted.append(line['videoName'])
        else:
            printInfo2(line['videoDlComment'])
            if verbose:
                printInfo1("Expected duration: %s s" % line['expectedDuration'])
                printInfo1("Actual duration: %s s" % line['duration'])
            if not compareDurations(float(line['expectedDuration']), float(line['duration']) / 1000, verbose):
                printError("Durations does not match")
                shouldBeDeleted.append(line['videoName'])
        if verbose:
            printInfo1("File size: %s b" % line['fileSize'])
        printInfo1("File size: %s" % line['fileSizeMeasure'])
        if verbose:
            printInfo1("Overall bit rate: %s bps" % line['overallBitRate'])
        printInfo1("Overall bit rate: %s" % line['overallBitRateMeasure'])

        print
        if verbose:
            printInfo1("Video format: %s" % line['videoFormat'])
            printInfo1("Video codec ID: %s" % line['videoCodecId'])
            printInfo1("Video bit rate: %s bps" % line['videoBitRate'])
            printInfo1("Video bit rate: %s" % line['videoBitRateMeasure'])
        printInfo1("Width: %s px" % line['width'])
        printInfo1("Height: %s px" % line['height'])
        printInfo1("Frame rate: %s fps" % line['frameRate'])
        if verbose:
            printInfo1("Frame count: %s" % line['frameCount'])
            print
            printInfo1("Audio format: %s" % line['audioFormat'])
            printInfo1("Audio codec ID: %s" % line['audioCodecId'])
            printInfo1("Audio bit rate: %s bps" % line['audioBitRate'])
            printInfo1("Audio bit rate: %s" % line['audioBitRateMeasure'])

        if line['subLines'] != 'na':
            printInfo1("\nSubtitles: %s" % line['subName'])
            printScores()
            if line['subDlComment'] == dlCommentError:
                printError(line['subDlComment'])
                shouldBeDeleted.append(line['subName'])
            else:
                printInfo2(line['subDlComment'])
            if line['expectedSubSize'] != "0":
                printInfo1("Expected file size: %s B" % line['expectedSubSize']) 
            printInfo1("File size: %s B" % line['subSize'])
            printInfo1("Number of lines: %s" % line['subLines'])
        else:
            printWarning("\nNo subtitles downloaded")
            
    if shouldBeDeleted:
        print
        printError("\nThese files should be deleted and re downloaded")
        printScores()
        for line in shouldBeDeleted:
            printWarning(line)
        
    print
Exemplo n.º 12
0
def checkSecondSvtPage(url, verbose):
    secondTag = ""
    
    secondPage = getWebPage(url, verbose)
    
    if verbose:
        printInfo2("Parsing page...")
    else:
        sys.stdout.write(".")
        sys.stdout.flush()

    soup = BeautifulSoup(secondPage)
    items = soup.findAll("embed", attrs={'attr' : True})
    secondTag = items[0]['attr']
    
    if secondTag:
        if verbose:
            printInfo1("Found second tag:")
            print secondTag
            printInfo2("Decoding...")
        else:
            sys.stdout.write(".")
            sys.stdout.flush()
        secondTag = urllib.unquote(secondTag.encode('utf8')).decode('utf8')
        if verbose:
            printInfo1("Decoded tag:")
            print secondTag
        secondTag = secondTag.split('=', 1)[-1]
    else:
        printError("Did not find second tag") 
    
    if verbose:
        printInfo2("Converting to json...")
    else:
        sys.stdout.write(".")
        sys.stdout.flush()

    jsonString = json.loads(secondTag)
    
    if verbose:
        printInfo1("JSON string:")
        print json.dumps(jsonString['video'], sort_keys=True, indent=2)
        printInfo2("Extracting video link...")
    else:
        sys.stdout.write(".")
        sys.stdout.flush()
        
    
    videoLink = jsonString['video']['videoReferences'][0]['url']  
    
    if verbose:
        printInfo1("Found video link:")
        print videoLink
    else:
        sys.stdout.write(".")
        sys.stdout.flush()
        
    videos = checkVideoLink(videoLink, verbose)
    
    if verbose:
        printInfo2("Extracting subtitle link...")
    else:
        sys.stdout.write(".")
        sys.stdout.flush()
        
    if "url" in jsonString['video']['subtitleReferences'][0]:
        subtitleLink = jsonString['video']['subtitleReferences'][0]['url']
        checkSubtitleLink(subtitleLink, verbose)
        if verbose:
            printInfo1("Found subtitle link:")
            print subtitleLink
        else:
            sys.stdout.write(".")
            sys.stdout.flush()
    else:
        if verbose:
            printWarning("No subtitles found")
        else:
            sys.stdout.write(".")
            sys.stdout.flush()
        subtitleLink = ""
    
    if verbose:
        printInfo1("Found videos:")
        for video in videos:
            print video
    else:
        sys.stdout.write(".")
        sys.stdout.flush()
        
    xmlCode = composeXML(videos, subtitleLink, verbose)
    
    return xmlCode
Exemplo n.º 13
0
    def load_utxos_thread(self, ctrl):
        with self.Lock:
            self.apiConnected = False
            # clear rewards DB
            printDbg("Updating rewards...")
            self.caller.parent.db.clearTable('REWARDS')
            self.caller.parent.db.clearTable('MY_VOTES')
            self.utxoLoaded = False

            # If rpc is not connected warn and return.
            if not self.caller.rpcConnected:
                printError(
                    'PIVX daemon not connected - Unable to update UTXO list')
                return

            api_status = self.caller.apiClient.getStatus()
            if api_status != 200:
                printError("Wrong response from API client. Status: %s" %
                           api_status)
                return

            self.apiConnected = True

            total_num_of_utxos = 0
            mn_rewards = {}
            for mn in self.caller.masternode_list:
                # Load UTXOs from API client
                rewards = self.caller.apiClient.getAddressUtxos(
                    mn['collateral'].get('address'))['unspent_outputs']

                if rewards is None:
                    printError('API client not responding.')
                    return

                mn_rewards[mn['name']] = rewards
                total_num_of_utxos += len(rewards)

            printDbg("Number of UTXOs to load: %d" % total_num_of_utxos)
            curr_utxo = 0
            percent = 0

            for mn in mn_rewards:
                # for each UTXO
                for utxo in mn_rewards[mn]:
                    percent = int(100 * curr_utxo / total_num_of_utxos)
                    # get raw TX from RPC client
                    rawtx = self.caller.rpcClient.getRawTransaction(
                        utxo['tx_hash'])

                    # Don't save UTXO if raw TX is unavailable
                    if rawtx is None:
                        printError(
                            "Unable to get raw TX with hash=%s from RPC server"
                            % utxo['tx_hash'])
                        continue

                    # Add mn_name and raw_tx to UTXO and save it to DB
                    else:
                        utxo['mn_name'] = mn
                        utxo['raw_tx'] = rawtx
                        self.caller.parent.db.addReward(utxo)

                    # emit percent
                    self.caller.sig_UTXOsLoading.emit(percent)
                    curr_utxo += 1

            self.caller.sig_UTXOsLoading.emit(100)
            printDbg("--# REWARDS table updated")
            self.utxoLoaded = True
            self.caller.sig_UTXOsLoaded.emit()