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