Пример #1
0
def search(sessionID, host, t_host, listPartOwned, waitingDownload):

    tfunc.warning("\n>>> SEARCH")
    query = input("\nInserisci il nome del file da cercare: ")
    while (len(query) > const.LENGTH_QUERY):
        tfunc.error("Siamo spiacenti ma accettiamo massimo 20 caratteri.")
        query = input("\nInserisci il nome del file da cercare: ")

    # Fase 1
    ricevutoByte = b''
    pk = pack.request_look(sessionID, query)
    s = sfunc.create_socket_client(func.roll_the_dice(t_host[0]), t_host[1])
    if s is None:
        tfunc.error("Tracker non attivo.")
    else:
        s.sendall(pk)

        ricevutoByte = s.recv(4 * const.LENGTH_PACK)

        if str(ricevutoByte[0:4], "ascii") == pack.CODE_ANSWER_LOOK:
            nIdmd5 = int(ricevutoByte[4:7])
            if (nIdmd5 != 0):
                tfunc.success("Ricerca completata.")
                pointer = 7
                id = 0
                listFile = []
                for j in range(0, nIdmd5):
                    md5 = ricevutoByte[pointer:pointer + 32]
                    nomeFile = ricevutoByte[pointer + 32:pointer + 132]
                    lenFile = ricevutoByte[pointer + 132:pointer + 142]
                    lenPart = ricevutoByte[pointer + 142:pointer + 148]
                    id = id + 1
                    fixList = [id, md5, nomeFile, lenFile, lenPart]
                    listFile.append(fixList)

                    pointer = pointer + 148

                print("\nScegli file da quelli disponibili (0 per uscire): \n")
                print("FILE    \t\tID\tDimensione del file\n")
                for row in listFile:
                    nomeFile = tfunc.reverse_format_string(
                        (str(row[2], "ascii").strip() + ":"),
                        const.LENGTH_FORMAT, " ")
                    print(nomeFile + str(row[0]) + "\t" + str(int(row[3])))

                selectId = input(
                    "\nInserire il numero di file che vuoi scaricare (0 per uscire): "
                )

                try:
                    selectId = int(selectId)

                    if selectId != 0:
                        for i in range(0, id):
                            if listFile[i][0] == selectId:
                                selectFile = listFile[i]
                                break

                        # FASE 2

                        if not selectFile[1] in listPartOwned:
                            listPartOwned[selectFile[1]] = [
                                fs.create_empty_part(selectFile[3],
                                                     selectFile[4]),
                                selectFile[3], selectFile[4], selectFile[2]
                            ]
                        print("\n>>> DOWNLOAD")
                        daemonThreadD = dnl.DaemonMasterOfDownloads(
                            host, t_host, selectFile, sessionID, listPartOwned,
                            waitingDownload)
                        daemonThreadD.setName("ONE THREAD TO RULE THEM ALL")
                        daemonThreadD.setDaemon(True)
                        daemonThreadD.start()
                        waitingDownload.append(0)
                except:
                    del waitingDownload[:]
                    tfunc.error("Inserisci un intero. Pirla")

            else:
                tfunc.error(
                    "Non sono presenti file con questa query nel nome: " +
                    query)
        s.close()