Sleazy Fork is available in English.

MyFreeCams PVT video link adder

Adds links to privates in your chat log (see picture) http://i.imgur.com/UM0A50S.jpg

// ==UserScript==
// @name           MyFreeCams PVT video link adder
// @version        1.2
// @description    Adds links to privates in your chat log (see picture) http://i.imgur.com/UM0A50S.jpg
// @author         Camgurlfan
// @compatible     tested with chromium and opera (/w tampermonkey)
// @updateurl      https://greasyfork.org/scripts/17170-myfreecams-pvt-video-link-adder/code/MyFreeCams%20PVT%20video%20link%20adder.user.js
// @run-at         document-end
// @include        http://www.myfreecams.com/php/chat_logs.php*
// @include        https://www.myfreecams.com/php/chat_logs.php*
// @icon           http://a.mfcimg.com/mfc2/images/icons/png/archive.16x16.png
// @grant          unsafeWindow
// @grant          GM_addStyle
// @namespace      https://greasyfork.org/users/30835
// ==/UserScript==

/*******************************************************************************************************************
                                                  chat logs
*******************************************************************************************************************/
if (location.href.indexOf('myfreecams.com/php/chat_logs.php') != -1) {
    unsafeWindow.GetLog.LoadJWPlayer = function() {
        var V1_FLV = (0); // 0:  FLV (Legacy format, older archive)
        var V1_F4V = (1 << 0); // 1:  F4V (Legacy format, older archive)
        var V2_NONE = (1 << 1); // 2:  No Recorded files
        var V2_FLV = (1 << 2); // 4:  FLV Recorded by FMS/Wowza
        var V2_F4V = (1 << 3); // 8:  F4V Recorded by FMS
        var V2_MP4X = (1 << 4); // 16: Transcoded MP4 (Some other F4V or FLV bit set)
        var V2_MP4W = (1 << 5); // 32: MP4 Recorded by Wowza (not a transcode)

        var aMatches = GetLog.sArchiveFile.match(/\.(\w{3})$/);
        var sFormat = aMatches[1];

        var size = VideoResize.GetSize();
        var isPlaying = false;
        var isBuffering = false;
        var hasError = false;

        oSources = [];

        if (GetLog.bUseFallbackArchive) {
            var aMatches;
            if (aMatches = GetLog.sFallbackArchive.match(/\.(\w{3})$/)) {
                var sFallbackFormat = aMatches[1];
                oSources.push({
                    file: GetLog.sFallbackArchive,
                    label: sFallbackFormat + ' fallback'
                });
            }
        } else {
            oSources.push({
                file: GetLog.sArchiveFile,
                label: sFormat
            });
        }
        console.log("Loading " + oSources[0].file);
        var fFallback = function() {
            if (GetLog.sArchiveFormat & V2_MP4X && !GetLog.bUseFallbackArchive) {
                GetLog.bUseFallbackArchive = true;
                aMatches = GetLog.sFallbackArchive.match(/\.(\w{3})$/);
                var sFallbackFormat = aMatches[1];
                console.log('JWPlayer MP4 Fallback ' + ("fallback to " + sFallbackFormat + " , file: " + GetLog.sArchiveFile));
                g_oReportBack.Send('JWPlayer MP4 Fallback', ("fallback to " + sFallbackFormat + " , file: " + GetLog.sArchiveFile));
                GetLog.LoadJWPlayer();
            }
        };
        jwplayer('mediaplayer').setup({
            sources: oSources,
            autostart: true,
            base: '/vendor/swf/',
            height: size.height,
            width: size.width
        });
        jwplayer('mediaplayer').onSetupError(
            function(err) {
                console.log(err);
                hasError = true;
                g_oReportBack = new MfcReportBack('chat_logs');
                g_oReportBack.Send('JWPlayer SetupError', (err.message + ", file: " + GetLog.sArchiveFile));
            }
        );
        jwplayer('mediaplayer').onError(
            function(err) {
                console.log(err);
                hasError = true;
                g_oReportBack = new MfcReportBack('chat_logs');
                g_oReportBack.Send('JWPlayer Error', (err.message + ", file: " + GetLog.sArchiveFile));
                fFallback();
            }
        );
        jwplayer('mediaplayer').onBuffer(
            function(info) {
                console.log(info);
                isBuffering = true;
            }
        );
        jwplayer('mediaplayer').onPlay(
            function(info) {
                console.log(info);
                isPlaying = true;
            }
        );
        setTimeout(function() {
            if (isPlaying === false && hasError === false) {
                g_oReportBack = new MfcReportBack('chat_logs');
                var message;
                if (isBuffering)
                    message = "file buffered but did not play within 10 secs. , file: " + GetLog.sArchiveFile;
                else
                    message = "file did not play or buffer within 10 secs. , file: " + GetLog.sArchiveFile;

                console.log('JWPlayer Observation: ' + message);
                g_oReportBack.Send('JWPlayer Observation', message);
                fFallback();
            }
        }, 5000);
        var oChatArea;
        if (oChatArea == document.getElementById('chat_area'))
            oChatArea.height = (size.client_height - size.height - 200);
        console.log(GetLog.sArchiveFile);
    };
    unsafeWindow.GetLog.Response = function() {
        if (g_oReq.readyState != 4) return;
        document.getElementById('log_contents').style.heigth = '400px';
        var sRes = g_oReq.responseText;
        if (g_UA.IE <= 7) {
            sRes = sRes.replace(/<div id=mediaplayer>[^<]*<\/div>/, "<div style='padding:20px;'>Archives are no longer viewable with Internet Explorer versions 6 or 7 as it does not support modern video compression.<br><br> Please <a href=http://windows.microsoft.com/en-us/internet-explorer/browser-ie target=_blank>update Internet Explorer</a>, or consider <a href=https://www.google.com/intl/en/chrome/browser/ target=_blank>installing Google Chrome</a> as an alternative.</div>");
        }
        document.getElementById('log_contents').innerHTML = sRes;
        GetLog.bUseFallbackArchive = false;
        var aMatches;
        if (aMatches = sRes.match(/archive_format:(\d+)/)) {
            GetLog.sArchiveFormat = aMatches[1];
        }
        if (aMatches = sRes.match(/fallback_archive:([^\s\-]*)/)) {
            GetLog.sFallbackArchive = decodeURIComponent(aMatches[1]);
        }
        if (aMatches = sRes.match(/JWPlayer:([^<]*)/)) {
            GetLog.sArchiveFile = decodeURIComponent(aMatches[1]);
            GetLog.LoadJWPlayer();
        }
        var downloadLink = document.createElement("a");
        downloadLink.href = GetLog.sArchiveFile;
        downloadLink.setAttribute("title", GetLog.sArchiveFile);
        downloadLink.innerHTML = "DOWNLOAD " + GetLog.sArchiveFile.match(/[^/]+$/gi).toString();
        downloadLink.setAttribute("style", "float:left;text-transform: uppercase;padding: 1px 8px;text-decoration: none; border-radius: 8px;font-size: 9px; font-variant: small-caps;margin: 1px 4px;");
        downloadLink.style.border = "1px white solid";
        downloadLink.style.backgroundColor = "green";
        downloadLink.style.color = "white";
        downloadLink.addEventListener("mouseout", function() {
            downloadLink.style.border = "1px green solid";
            downloadLink.style.backgroundColor = "white";
            downloadLink.style.color = "green";
        });
        downloadLink.addEventListener("mouseover", function() {
            downloadLink.style.border = "1px white solid";
            downloadLink.style.backgroundColor = "green";
            downloadLink.style.color = "white";
        });
        if (document.querySelector("#chat_area > div > span.chat_log_index_private_session")) {
            document.querySelector("#chat_area > div > span.chat_log_index_private_session").appendChild(downloadLink);
        } else {
            document.querySelector("#chat_area > div").appendChild(downloadLink);
        }
        VideoResize.Execute();
    };
}