// ==UserScript== // @name Local Vk Downloader // @namespace vkDownloadAuto // @version 1.0.0 // @description Get Vk raw link without external service. // @match https://m.vk.com/mail* // @downloadURL none // ==/UserScript== var peer = null; console.log("HELLO WORLD"); function vkGet(url, callback){ return getY(url, callback); } function getMore(href) { vkGet(href, function (data) { receiveMore(data); }); } function getSearchMoreHref(result) { if (!result || !result[1]) { return; } var showMore = $(".show_more", $(result[1])); if (!showMore.length) { return; } var href = showMore.attr("href"); if (!href) { return null; } } function checkSearch(){ var newPeer = getPeer(); if (newPeer != peer) { getAllMedia(newPeer); } } function listenSearch() { window.setInterval(checkSearch, 500); } function getPeer() { var hash = window.location.search; var idx = hash.indexOf("peer"); if (idx == -1) { return null; } return hash.substring(idx + 5, hash.indexOf("&", idx)); } function getMediaUrl(newPeer, section) { var mediaUrlBase = "/mail?act=show_medias&peer="; var sectionUrl = "§ion="; return mediaUrlBase + newPeer + sectionUrl + section; } function recursiveGetVideos(searchMoreLink, data, finishState) { if (!searchMoreLink) { finishState.videos = true; finishSegment(data, "videos", finishState); return; } } function getVideos(newPeer, data, finishState) { console.log("GET VIDEOS") vkGet(getMediaUrl(newPeer, "videos"), function (result) { if (result.data) { data.videos.concat(getVideosLinks(result.data)); } var searchMoreLink = getSearchMoreHref(result); recursiveGetVideos(searchMoreLink, data, finishState); }); } function getPhotos() { } function getDocs() { } function getAllMedia(newPeer) { peer = newPeer; var data = { videos: [], photos: [], docs: [] } var finishState = { videos: false, photos: false, docs: false } getVideos(newPeer, data, finishState); getPhotos(newPeer, data, finishState); getDocs(newPeer, data, finishState); } function start() { var newPeer = getPeer(); if (newPeer != null) { getAllMedia(newPeer); } } function finishSegment(data, segment, finishState) { console.log(segment + ":", data[segment]); if (finishState.videos && finishState.photos && finishState.docs) { finish(data); } } function finish(data) { console.log(data); } listenSearch(); start();