// ==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*
// ==/UserScript==
var peer = null;
function vkGet(url, callback) {
return ajax.plainpost(
url,
{ _ajax: 1 },
(function (e) {
return function (e, t, n) {
var a = parseJSON(e)
, o = a.user
, r = a.user_hash
, s = a.contacts
, l = "/friends.php?act=save_contacts&type=" + n;
if (a.error)
return void i(n);
ajax.post(l, {
_ajax: 1,
user: o,
userhash: r,
hash: t,
contacts: s
}, {
onDone: function (e, t) {
return function (e, t, n) {
console.log("DONE:", e, t, n)
callback(parseJSON(e));
}(n, e, t)
},
onFail: function () {
return callback(null);
}
})
}(e, t, n)
}
),
(function () {
callback(null)
}),
!0
);
}
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 && 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;
}
var end = hash.indexOf("&", idx);
if (end == -1) {
end = hash.length;
}
return hash.substring(idx + 5, end);
}
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) {
vkGet(getMediaUrl(newPeer, "video"), function (result) {
console.log("RESULT:", result);
if (result && result.data) {
data.videos.concat(getVideosLinks(result.data));
}
var searchMoreLink = getSearchMoreHref(result);
recursiveGetVideos(searchMoreLink, data, finishState);
});
}
function getPhotos() {
}
function getDocs() {
}
function getAllMedia(newPeer) {
console.log("***********************************ALL_MEDIA************************************")
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);
console.log("************************************FINISH**************************************")
}
listenSearch();
start();