Ejemplo n.º 1
0
def main():
    filenames = ctx.pluginfilenames()
    headers = [
        "timestamp (int)", "thumbnail (QByteArray)", "filename (QString)"
    ]
    ctx.gui_set_headers(headers)
    ctx.gui_setMainProgressBar(0)
    ctx.gui_setMainLabel("Status: Converting image to thumbnail")

    i = 0
    for fsname in filenames:
        ret = thumbnail.generate(ctx, fsname)
        if (ret != -1):
            ctx.gui_set_data(i, 0, ret[0])
            ctx.gui_set_data(i, 1, QtCore.QByteArray(bytes(ret[1])))
            ctx.gui_set_data(i, 2, ret[2])
            i = i + 1
    ctx.gui_update()
    ctx.gui_setMainLabel("Status: Idle.")
    ctx.gui_setMainProgressBar(0)

    return "Finished running plugin."
Ejemplo n.º 2
0
def convertdata(db):
    #ctx.gui_clearData()
    conn = ctx.sqlite_run_cmd(
        db,
        "select rowid, mtime, non_unique_name, server_non_unique_name, specifics from metas;"
    )
    if (conn == -1):
        print("Error: " + ctx.sqlite_last_error(db))
        return
    rows = ctx.sqlite_get_data_size(conn)[0]
    if rows == 0:
        return
    oldpos = 0
    t = 0
    for i in range(0, rows):
        newpos = int(i / rows * 100)
        if (oldpos < newpos):
            oldpos = newpos
            ctx.gui_setMainProgressBar(oldpos)
        id = ctx.sqlite_get_data(conn, i, 0)
        mtime = ctx.sqlite_get_data(conn, i, 1)
        non_unique_name = ctx.sqlite_get_data(conn, i, 2)
        server_non_unique_name = ctx.sqlite_get_data(conn, i, 3)
        title = ""
        if (non_unique_name == server_non_unique_name):
            title = non_unique_name
        else:
            title = non_unique_name + " [" + server_non_unique_name + "]"
        rawdata = ctx.sqlite_get_data(conn, i, 4)
        data = QtCore.QByteArray(rawdata)
        if (mtime == 0):
            continue
        if (title == ""):
            continue
        if (data.length() < 8):
            continue
        buf = data.data()
        a = getlen(buf, 0)
        b = getlen(buf, a)
        c = getlen(buf, b)
        urllen = getdata(buf, c)
        urlpos = getlen(buf, c)
        length = bytearray(data.data())[urlpos]
        info = data.data()[urlpos:urlpos + urllen]
        url = ""
        if "http" in str(info):
            url = info.decode()
        elif "session_sync" in str(info):
            urlpos = urlpos + urllen + 0x10
            urlpos = getlen(buf, urlpos)
            urlpos = getlen(buf, urlpos)
            urllen = getdata(buf, urlpos)
            urlpos = getlen(buf, urlpos)
            try:
                url = data.data()[urlpos:urlpos + urllen].decode()
            except:
                try:
                    dat = bytes(data.data()[urlpos - 1:urlpos + urllen])
                    dats = dat[0:8 + str(dat[9:]).find("/")]
                    url = dats.decode()
                except:
                    url = str(data.data()[urlpos:urlpos + urllen])
        else:
            url = ""
        if url == "":
            continue
        ctx.gui_set_data(t, 0, id)
        ctx.gui_set_data(t, 1, title)
        ctx.gui_set_data(t, 2, url)
        ctx.gui_set_data(t, 3, mtime)
        t += 1
    ctx.sqlite_cmd_close(conn)
Ejemplo n.º 3
0
def convertdata(db):
    conn=ctx.sqlite_run_cmd(db,"select fingerprint, name, last_activation from identities;")
    rows=ctx.sqlite_get_data_size(conn)[0]
    oldpos=0
    fingerprint={}
    for i in range(0,rows):
        newpos=int(i/rows*100)
        if (oldpos<newpos):
            oldpos=newpos
            ctx.gui_setMainProgressBar(oldpos)
        fingerprint[str(ctx.sqlite_get_data(conn,i,0))]=[str(ctx.sqlite_get_data(conn,i,1)),str(ctx.sqlite_get_data(conn,i,2))]

    conn=ctx.sqlite_run_cmd(db,"select messages.rowid, messages.axolotl_fingerprint, messages.counterpart, messages.timeSent, messages.body, messages.type, messages.relativeFilePath,  messages.remoteMsgId from messages;")
    if conn==-1:
        print ("Error: "+ctx.sqlite_last_error(db))
        return
    rows=ctx.sqlite_get_data_size(conn)[0]
    oldpos=0
    for i in range(0,rows):
        newpos=int(i/rows*100)
        if (oldpos<newpos):
            oldpos=newpos
            ctx.gui_setMainProgressBar(oldpos)
        id=ctx.sqlite_get_data(conn,i,0)
        axofingerprint=ctx.sqlite_get_data(conn,i,1)
        contact_alias=""
        if axofingerprint in fingerprint:
            contact_alias=fingerprint[axofingerprint][0]
        counterpart=ctx.sqlite_get_data(conn,i,2)
        timestamp=ctx.sqlite_get_data(conn,i,3)
        body=ctx.sqlite_get_data(conn,i,4)
        type=str(ctx.sqlite_get_data(conn,i,5))
        if (type=="0"):
            type="Message"
        elif (type=="2"):
            type="Image"
        relativeFilePath=ctx.sqlite_get_data(conn,i,6)
        remoteMsgId=ctx.sqlite_get_data(conn,i,7)
        direction=""
        if remoteMsgId=="":
            direction="Received"
        else:
            direction="Sent"
            contact_alias=counterpart
        
        image=QtCore.QByteArray(bytes(b''))
        if (relativeFilePath!=""):
            imagename="/media/0/Conversations/Media/Conversations Images/"+relativeFilePath
            res=thumbnail.generate(ctx,imagename)
            if (res!=-1):
                image=QtCore.QByteArray(bytes(res[1]))
        ctx.gui_set_data(i,0,id)
        ctx.gui_set_data(i,1,type)
        ctx.gui_set_data(i,2,axofingerprint)
        ctx.gui_set_data(i,3,contact_alias)
        ctx.gui_set_data(i,4,timestamp)
        ctx.gui_set_data(i,5,direction)
        ctx.gui_set_data(i,6,body)
        ctx.gui_set_data(i,7,image)
        ctx.gui_set_data(i,8,relativeFilePath)
        
    ctx.sqlite_cmd_close(conn)
Ejemplo n.º 4
0
def convertdata(table, dataidx, db):
    colidx = ctx.sqlite_get_headers(table).index("TL_TYPE (QString)")
    conn = ctx.sqlite_run_cmd(
        db,
        "SELECT messages.rowid, messages.data as messagedata, media_v2.data as mediadata, messages.mid from messages LEFT OUTER JOIN media_v2 ON messages.mid=media_v2.mid;"
    )
    if (conn == -1):
        print("Error: " + ctx.sqlite_last_error(db))
        return
    rows = ctx.sqlite_get_data_size(conn)[0]
    if (rows == 0):
        return
    ctx.gui_setMainProgressBar(0)
    oldpos = 0
    usertable = getusers(db)
    userchat = getchat(db)
    for i in range(0, rows):
        newpos = int(i / rows * 100)
        if (oldpos < newpos):
            oldpos = newpos
            ctx.gui_setMainProgressBar(oldpos)
        if (ctx.sqlite_get_data(conn, i, 1) is None):
            continue
        rowid = ctx.sqlite_get_data(conn, i, 0)
        #print("Debug Idx: "+str(rowid))
        value = ctx.sqlite_get_data(conn, i, 1).data()
        mediavalue = QtCore.QByteArray(ctx.sqlite_get_data(conn, i, 2)).data()
        telgram = Telegram(value, mediavalue, usertable, userchat)
        result = telgram.run()
        ctx.sqlite_set_data(table, i, colidx, result["type"])  #TL_TYPE
        ctx.sqlite_set_data(table, i, colidx + 1, str(result["id"]))  #TL_ID
        ctx.sqlite_set_data(table, i, colidx + 2,
                            result["from_id"])  #TL_FROM_ID
        ctx.sqlite_set_data(table, i, colidx + 3,
                            result["to_id_user"])  #TL_TO_USER_ID
        ctx.sqlite_set_data(table, i, colidx + 4, result["flags"])  #TL_FLAG
        if (result["to_id_date"] > 0):
            ctx.sqlite_set_data(table, i, colidx + 5,
                                ctx.gui_getDate(
                                    result["to_id_date"]))  #TL_DATE
        else:
            ctx.sqlite_set_data(table, i, colidx + 5,
                                str(result["to_id_date"]))  #TL_DATE

        ctx.sqlite_set_data(table, i, dataidx, result["message"])  #TL_DATA
        ctx.sqlite_set_data(table, i, colidx + 6, result["media"])  #TL_MEDIA
        ctx.sqlite_set_data(table, i, colidx + 7, result["tts"])  #TL_TTS
        ctx.sqlite_set_data(table, i, colidx + 8,
                            result["fwd_from_id"])  #FWD_FROM_ID
        if (result["fwd_date"] > 0):
            ctx.sqlite_set_data(table, i, colidx + 9,
                                ctx.gui_getDate(result["fwd_date"]))  #FWD_DATE
        else:
            ctx.sqlite_set_data(table, i, colidx + 9,
                                str(result["fwd_date"]))  #FWD_DATE
        ctx.sqlite_set_data(table, i, colidx + 10,
                            result["reply_to_msg_id"])  #REPLY_TO_MSG_ID
        ctx.sqlite_set_data(table, i, colidx + 11,
                            result["fwd_msg_id"])  #fwd_msg_id
        medianame = result["media_filename"]
        medianame = medianame.replace("/storage/emulated/", "/media/")
        if medianame != "" and medianame is not None:
            ret = thumbnail.generate(ctx, medianame)
            ctx.sqlite_set_data(table, i, colidx + 12, medianame)
            if (ret != -1):
                ctx.sqlite_set_data(table, i, colidx + 13,
                                    QtCore.QByteArray(bytes(ret[1])))
        else:
            ctx.sqlite_set_data(table, i, colidx + 12, "")
            ctx.sqlite_set_data(table, i, colidx + 13, "")
    ctx.gui_setMainProgressBar(100)
    ctx.sqlite_cmd_close(conn)
Ejemplo n.º 5
0
def convertposts(fentries):
    db=[]
       
    if "media_or_ad" in fentries:
        e=fentries["media_or_ad"]
        entry={}
        report={}
        media_ids=[]
        thumbnail_urls=[]
        large_urls=[]
        media_infos=[]
        report["type"]="Media_Or_Ad"
        report["desc"]=""
        if "media_type" in e:
            media_type=int(e["media_type"])
            if (media_type==2):
                report["desc"]+="Video ["
                if "video_versions" in e:
                    video_versions=e["video_versions"]
                    if (len(video_versions)>0):
                        if "url" in video_versions[0]:
                            report["desc"]+="Url:\""+video_versions[0]["url"]+"\";"
            elif (media_type==1):
                report["desc"]+="Picture ["
                if "image_versions2" in e:
                    image_versions2=e["image_versions2"]
                    if "candidates" in image_versions2:
                        candidates=image_versions2["candidates"]
                        if (len(candidates)>0):
                            if "url" in candidates[0]:
                                report["desc"]+="Url:\""+candidates[0]["url"]+"\";"
            elif (media_type==8):
                report["desc"]+="Carousel ["
                if "carousel_media" in e:
                    carousel_media=e["carousel_media"]
                    #print(carousel_media)
                    for media in carousel_media:
                        if "image_versions2" in media:
                            image_versions2=media["image_versions2"]
                            if "candidates" in image_versions2:
                                candidates=image_versions2["candidates"]
                                if (len(candidates)>0):
                                    if "url" in candidates[0]:
                                        report["desc"]+="Url:\""+candidates[0]["url"]+"\";"
        user=users(e)
        report["timestamp"]=""

        if "taken_at" in e:
            report["timestamp"]=e["taken_at"]
        
        
        report["message"]=""
        if "caption" in e:
            caption=e["caption"]
            if caption!=None:
                if "text" in caption:
                    report["message"]+="\""+caption["text"]+"\";"
        
        if "preview_comments" in e:
            preview_comments=e["preview_comments"]
            report["desc"]+="Comments:"
            report["desc"]+="["
            h=0
            for comments in preview_comments:
                cf=""
                if h==0:
                    cf+=","
                h+=1
                cf+="{"
                subusers=users(comments)
                if "username" in subusers:
                    cf+="Username:\""+subusers["username"]+"\";"
                if "username" in subusers:
                    cf+="Full_Name:\""+subusers["full_name"]+"\";"
                if "text" in comments:
                    cf+="Text:\""+comments["text"]+"\";"
                if "created_at" in comments:
                    cf+="Timestamp:"+getdate(int(comments["created_at"]))+";"
                report["desc"]+=cf+"}"
            report["desc"]+="];"
        
        report["image"]=""    
        if "preview" in e:
            preview=e["preview"]
            sub=base64.b64decode(preview)
            image=bytearray(list(jpegheader))
            image[162]=sub[1]
            image[160]=sub[2]
            image+=bytearray(list(sub[3:]))
            report["image"]=QtCore.QByteArray(bytes(image))
            #print(image)
        
        if "username" in user:
            report["contact"]=user["username"]
        else:
            report["contact"]=""
        if "full_name" in user:
            report["contact_alias"]=user["full_name"]
        else:
            report["contact_alias"]=""
        
        report["location"]=""
        
        report["package"]="com.instagram.android"
        report["deleted"]="0"
        report["category"]="Instagram cache"
        db.append(report)
    return db