Скрипты для foo_uie_wsh_panel_mod

Список разделов foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #621 kgena_ua » 03.02.2016, 23:18

AHAPXICT:но перестал работать DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS
AHAPXICT, эти флаги работают только с GdiDrawText().
Безымянный.png


Описание работы скрипта:

скроллинг текста - колесо мыши на тексте;
скроллинг изображений - колесо мыши на изображении;
перемещение поля с текстом - мышь при нажатой лев.кл. на тексте;
установка времени смены изображения ( от 0 до 60 секунд с шагом 5) - Shift + колесо мыши на изображении. Время отображается в левом верхнем углу (на светлых картинках не очень видно, пока).
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #622 AHAPXICT » 04.02.2016, 01:05

kgena_ua, зачем же вы меня, прямо так, носом и в скриншот? Не обращал внимания раньше, так бы и не задавал глупых вопросов.)))
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #623 seriousstas » 04.02.2016, 03:42

MC Web
kgena_ua почти закончил WSH Biography Text & Picture Llast.fm, так что одна замена Biography View есть.
Сам оч. жду ...
Может заинтересует ещё один Марковский гибрид картинок с биографией ...
Недавно обновил в сборке (работает на WSH , если "умрёт" со временем , можно попробовать заменить foobar2000\wsh_marc2003\js\thumbs.js на его) , которая вроде , как "доспела" сюда :
/viewtopic.php?t=5876&p=59842#p59842
Сделал там на AHK небольшой портабельный скриптик удаления кеша картинок (можно удалять любую папку по-аналогии )..
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #624 kgena_ua » 04.02.2016, 11:39

AHAPXICT:носом и в скриншот
AHAPXICT, извиняюсь, я не хотел, больше не буду........ и вообще это не я :beer:

По поводу маркеров. Просто индикация, или при нажатии скроллинг вверх или вниз.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #625 Aum » 04.02.2016, 14:47

kgena_ua: надо тестировать.
Вы молодец! :smile:
Классный скрипт получился, еще и фотки за собой удаляет. С "таскающимся текстом" отлично придумано.
Работает исправно! Из предложений - двойной клик на фотке открывает просмотр во внешнем просмотрщике

Добавлено спустя 1 минуту 13 секунд:
kgena_ua:поводу маркеров
Конечно кнопки скроллинга с настройкой шага в properties для "всех".
Aum M
Аватара
Репутация: 23
С нами: 14 лет 8 месяцев

Сообщение #626 seriousstas » 04.02.2016, 16:18

Из предложений - двойной клик на фотке открывает просмотр во внешнем просмотрщике
Поддержу . Или, как вариант Stretch <=> Center туда-обратно , либо другие состояния картинки, по двойному клику (например если текст снизу)

еще и фотки за собой удаляет
kgena_ua
А можно сделать вкл-выкл автоудаления ? Сейчас "натягиваю" фоток , затем они крутятся , когда нет и-нета ...

Ну и обязательно нужен выбор домена для текста , что-б и на русском читать .
Последний раз редактировалось seriousstas 04.02.2016, 17:57, всего редактировалось 4 раз(а).
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #627 vincenzo44 » 04.02.2016, 17:44

Помогите к марковскому track info + seekbar + buttons
Спойлер
// ==PREPROCESSOR==
// @name "track info + seekbar + buttons"
// @author "marc2003"
// @import "%fb2k_profile_path%js_marc2003\js\lodash.min.js"
// @import "%fb2k_profile_path%js_marc2003\js\helpers.js"
// @import "%fb2k_profile_path%js_marc2003\js\panel.js"
// @import "%fb2k_profile_path%js_marc2003\js\seekbar.js"
// ==/PREPROCESSOR==

//note the buttons are white and you'd have to edit the images to change them...
var colours = {
background : _.RGB(30, 30, 30),
title : _.RGB(255, 255, 255),
artist : _.RGB(240, 240, 240),
time : _.RGB(240, 240, 240),
seekbar_background : _.RGB(160, 160, 160),
seekbar_progress : _.RGB(255, 255, 255),
seekbar_knob : _.RGB(196, 30, 35)
};

//////////////////////////////////////////////////////////////

var panel = new _.panel("track info + seekbar + buttons");
var seekbar = new _.seekbar(60, 5, 0, 20);
var buttons = new _.buttons();
var img = null;
on_playback_new_track();

buttons.update = function () {
this.buttons.previous = new _.button(panel.w - 172, (panel.h - 36) / 2, 36, 36, {normal : "mono\\appbar.control.rewind.png"}, function () { fb.Prev(); }, "Previous");
this.buttons.play = new _.button(panel.w - 136, (panel.h - 36) / 2, 36, 36, {normal : !fb.IsPlaying || fb.IsPaused ? "mono\\appbar.control.play.png" : "mono\\appbar.control.pause.png"}, function () { fb.PlayOrPause(); }, !fb.IsPlaying || fb.IsPaused ? "Play" : "Pause");
this.buttons.next = new _.button(panel.w - 100, (panel.h - 36) / 2, 36, 36, {normal : "mono\\appbar.control.fastforward.png"}, function () { fb.Next(); }, "Next");
this.buttons.preferences = new _.button(panel.w - 50, (panel.h - 36) / 2, 36, 36, {normal : "mono\\appbar.settings.png"}, function () { fb.ShowPreferences(); }, "Preferences");
}

function on_size() {
panel.size();
seekbar.x = panel.h + 360
seekbar.w = panel.w - panel.h - 620;
seekbar.y = (panel.h - 20) / 2;
buttons.update();
}

function on_paint(gr) {
gr.FillSolidRect(0, 0, panel.w, panel.h, colours.background);
buttons.paint(gr);
gr.FillSolidRect(seekbar.x, seekbar.y + 7, seekbar.w + 16, 6, colours.seekbar_background)
if (fb.IsPlaying) {
img && _.drawImage(gr, img, 0, 0, panel.h, panel.h, image.centre);
gr.GdiDrawText(_.tfe("%title%"), panel.fonts.title, colours.title, panel.h + 10, 0, 270, panel.h * 0.6, LEFT);
gr.GdiDrawText(_.tfe("%artist%"), panel.fonts.normal, colours.artist, panel.h + 10, panel.h * 0.3, 270, panel.h * 0.7, LEFT);
gr.SetSmoothingMode(4);
if (fb.PlaybackLength > 0) {
var pos = seekbar.pos();
gr.FillRoundRect(seekbar.x + pos, seekbar.y + 2, 16, 16, 8, 8, colours.seekbar_progress);
gr.FillRoundRect(seekbar.x + pos + 3, seekbar.y + 5, 10, 10, 5, 5, colours.seekbar_knob);
gr.FillSolidRect(seekbar.x, seekbar.y + 7, pos, 6, colours.seekbar_progress);
gr.GdiDrawText(_.tfe("%playback_time% "), panel.fonts.normal, colours.time, seekbar.x - 60, 0, 60, panel.h, RIGHT);
gr.GdiDrawText(_.tfe(" %length%"), panel.fonts.normal, colours.time, seekbar.x + seekbar.w + 16, 0, 60, panel.h, LEFT);
}
}
}

function on_playback_new_track() {
var metadb = fb.GetNowPlaying();
if (!metadb)
return;
img && img.Dispose();
img = utils.GetAlbumArtV2(metadb, 0);
window.Repaint();
}

function on_playback_seek() {
seekbar.playback_seek();
}

function on_playback_stop() {
seekbar.playback_stop();
buttons.update();
window.Repaint();
}

function on_playback_pause() {
buttons.update();
window.RepaintRect(buttons.buttons.play.x, buttons.buttons.play.y, buttons.buttons.play.w, buttons.buttons.play.h);
}

function on_playback_starting() {
buttons.update();
window.RepaintRect(buttons.buttons.play.x, buttons.buttons.play.y, buttons.buttons.play.w, buttons.buttons.play.h);
}

function on_mouse_wheel(s) {
if (seekbar.wheel(s))
return;
if (s == 1)
fb.VolumeUp();
else
fb.VolumeDown();
}

function on_mouse_move(x, y) {
if (buttons.move(x, y))
return;
seekbar.move(x, y);
}

function on_mouse_leave() {
buttons.leave();
}

function on_mouse_lbtn_down(x, y) {
seekbar.lbtn_down(x, y);
}

function on_mouse_lbtn_up(x, y) {
if (buttons.lbtn_up(x, y))
return;
if (seekbar.lbtn_up(x, y))
return;
fb.RunMainMenuCommand("View/Show now playing in playlist");
}

function on_mouse_rbtn_up(x, y) {
return panel.rbtn_up(x, y);
}
прикрутить
stop after queue
stop after current
play random
и % сколько песня проиграна
:think: или может кто-то где эти кнопки видел и подскажет, где выдрать?
vincenzo44
Репутация: 4
С нами: 8 лет 10 месяцев

Сообщение #628 seriousstas » 05.02.2016, 05:13

Просьба материализовалась :weirdface: (ну и слово) :
Изображение Надо почаще правой кнопкой пользоваться...

надо тестировать.
работает исправно .
Марковский кстати дубли делает . Вот так :
Oscar Peterson_c0135260d61d47af87811a2d74f8da97.jpg
Oscar Peterson_c0135260d61d47af87811a2d74f8da97.jpg.jpg
Для первой на серваке фотографии .
"Biography Text && Picture. www.last.fm" - не плодит дублей .
ps
изменил в thumbs.js
Код: Выделить всё
531  var filename = base + url.substring(url.lastIndexOf("/") + 1) + ".jpg";
на
Код: Выделить всё
var filename = base + url.lastIndexOf (+1) + ".jpg";

Дублей нет .Названия теперь :
Ricardo Donoso_39.jpg
Ricardo Donoso_40.jpg
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #629 duzzy » 07.02.2016, 00:26

kgena_ua
Привет !
Я выдрал из скрипта Бретта JSPlaylist 1.3.2 рисование вспышки внизу и вверху по достижению конца/начала списка, может тебе пригодится :smile: .
У себя в скрипт регулировки громкости поставил, выглядит так...
Изображение
Для наглядности отрисовки пихнул в стандартный панельный скрипт
Изображение
Сам скрипт(в скрипте есть комментарии того что относится к отрисовке)
Спойлер
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }

// Use with GdiDrawText()
// {{
var DT_TOP = 0x00000000;
var DT_CENTER = 0x00000001;
var DT_VCENTER = 0x00000004;
var DT_WORDBREAK = 0x00000010;
var DT_CALCRECT = 0x00000400;
var DT_NOPREFIX = 0x00000800;
// }}

// {{
// Used in window.GetColorCUI()
ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};

// Used in window.GetFontCUI()
FontTypeCUI = {
    items: 0,
    labels: 1
};

// Used in window.GetColorDUI()
ColorTypeDUI = {
    text: 0,
    background: 1,
    highlight: 2,
    selection: 3
};

// Used in window.GetFontDUI()
FontTypeDUI = {
    defaults: 0,
    tabs: 1,
    lists: 2,
    playlists: 3,
    statusbar: 4,
    console: 5
};
//}}

//{{
// Used in window.SetCursor()
var IDC_HAND = 32649;
//}}

var g_instancetype = window.InstanceType;
var g_font = null;
var g_text = "BEAM IMAGE\nClick here to open the editor.";
var ww = 0, wh = 0;
var g_textcolor = 0, g_textcolor_hl = 0;
var g_backcolor = 0;
var g_hot = false;

function get_font() {
    if (g_instancetype == 0) { // CUI
        g_font = window.GetFontCUI(FontTypeCUI.items);
    } else if (g_instancetype == 1) { // DUI
        g_font = window.GetFontDUI(FontTypeDUI.defaults);
    } else {
        // None
    }
}
get_font();

function get_colors() {
    if (g_instancetype == 0) { // CUI
        g_textcolor = window.GetColorCUI(ColorTypeCUI.text);
        g_textcolor_hl = window.GetColorCUI(ColorTypeCUI.text);
        g_backcolor = window.GetColorCUI(ColorTypeCUI.background);
    } else if (g_instancetype == 1) { // DUI
        g_textcolor = window.GetColorDUI(ColorTypeDUI.text);
        g_textcolor_hl = window.GetColorDUI(ColorTypeDUI.highlight);
        g_backcolor = window.GetColorDUI(ColorTypeDUI.background);
    } else {
        // None
    }
}
get_colors();




//============================================================================= Beam Image
var gb;
images = {
    beam: null
};


function draw_beam_image() {
    var sbeam = gdi.CreateImage(500, 128);
    // Get graphics interface like "gr" in on_paint
    var gb = sbeam.GetGraphics();
    gb.FillEllipse(-250, 50, 1000, 640, RGB(0,0,255) & RGBA(255,255,255,255));
    sbeam.ReleaseGraphics(gb);
   
    var beamA = sbeam.Resize(500/50,128/50,2);
    var beamB = beamA.Resize(500,128,2);
    return beamB;
};

function get_images() {
    var gb;
    images.beam = draw_beam_image();
};
get_images();
//============================================================================== Beam Image



// START
function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function on_paint(gr) {
    var text_color = g_hot ? g_textcolor_hl : g_textcolor;
    gr.FillSolidRect(0, 0, ww, wh, g_backcolor);
    gr.GdiDrawText(g_text, g_font, text_color, 0, 0, ww, wh, DT_VCENTER | DT_CENTER | DT_WORDBREAK | DT_CALCRECT | DT_NOPREFIX);
    //==========================================
    gr.DrawImage(images.beam, 0, -40, ww, 80, 0, 0, images.beam.Width, images.beam.Height, 180, 255);//beam top
    gr.DrawImage(images.beam, 0, wh-40, ww, 80, 0, 0, images.beam.Width, images.beam.Height, 0, 255);//beam bottom
    //==========================================
}

function on_mouse_lbtn_up(x, y) {
    window.ShowConfigure();
}

function on_mouse_move() {
    if (!g_hot) {
        window.SetCursor(IDC_HAND);
        g_hot = true;
        window.Repaint();
    }
}

function on_mouse_leave() {
    if (g_hot) {
        g_hot = false;
        window.Repaint();
    }
}

function on_font_changed() {
    get_font();
    window.Repaint();
}

function on_colors_changed() {
    get_colors();
    window.Repaint();
}

То что было выдрано конкретно
Спойлер
Код: Выделить всё
var gb;
images = {
    beam: null
};


function draw_beam_image() {
    var sbeam = gdi.CreateImage(500, 128);
    // Get graphics interface like "gr" in on_paint
    var gb = sbeam.GetGraphics();
    gb.FillEllipse(-250, 50, 1000, 640, RGB(0,0,255) & RGBA(255,255,255,255));
    sbeam.ReleaseGraphics(gb);
   
    var beamA = sbeam.Resize(500/50,128/50,2);
    var beamB = beamA.Resize(500,128,2);
    return beamB;
};

function get_images() {
    var gb;
    images.beam = draw_beam_image();
};
get_images();

//======================= on_paint
gr.DrawImage(images.beam, 0, wh-40, ww, 80, 0, 0, images.beam.Width, images.beam.Height, 0, 255);
duzzy
Репутация: 25
С нами: 9 лет 4 месяца

Сообщение #630 kgena_ua » 07.02.2016, 17:54

duzzy, спасибо , обязательно посмотрим.
По биографии.
Немного почистил;
добавил выбор: играющий, выбранный (немного изменил function Eval(field) - надо тестировать):
по двойному на лев.кн. открывает просмотр изображения во внешнем просмотрщике;
немного изменил установку времени цикла переключения (Shift + колесо мыши).
Код: Выделить всё
// ==PREPROCESSOR==                     
// @name "Biography Text && Picture. www.last.fm"                     
// @feature "v1.4"                     
// @feature "watch-metadb"                     
// ==/PREPROCESSOR==                     

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }                     
function RGBA(r,g,b,a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }                      
function getRed(color) {return ((color >> 16) & 0xff);};                     
function getGreen(color) {return ((color >> 8) & 0xff);};                     
function getBlue(color) {return (color & 0xff);};                     

var a_font = gdi.Font("Arial",12, 1);                     
var b_font = gdi.Font("Arial",12, 0);                     
var ww,wh;                     

var on_mouse = false;

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
DT_NOPREFIX = 0x00000800;

var bgcolor = RGB(30,30,30);
var a_color = RGB(220,220,220);
var b_color = RGB(255,255,230);
var transparent = 200;

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
var doc = new ActiveXObject("htmlfile");
var fso = new ActiveXObject("Scripting.FileSystemObject");
//var Stream = new ActiveXObject("ADODB.Stream");

var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
//if(!fso.FolderExists(tmp_b_path)) {fso.CreateFolder(tmp_b_path)};
var nocover_path = fb.ProfilePath + "nocover.png";

var g_img;
var text = "";
var artist, old_artis;
var files = [], selected = 0;

var txt_x = window.GetProperty("txt_x", window.Width / 2);
var txt_y = window.GetProperty("txt_y", window.Height / 2);

var abc_lang = new Array("", "ru/");
var abc = window.GetProperty("abc", 0);
var if_not_found = new Array(". . .", ". . ."); 

var artist_x;
var artist_y;
var b_x;
var b_y;
var t_margin = 15;
var string_width;
var b_text_row_height = 0;
var b_text_rows = 0;
var b_text_height = 0;

var s_text = 0;
var strings_array = [];
var b_text_array = [];
var delta_x, delta_y;
var k_down = false;
var text_scroll = false;

var limit = window.GetProperty("download_limit",5);
var p_margn = 10;

var selection_mode = window.GetProperty("selection_mode", 0);

var metadb;
on_item_focus_change();

var WshShell = new ActiveXObject("WScript.Shell");
var script_path = fb.ProfilePath + "\\tmp_Biography\\download\\";
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";


function on_paint(gr){   
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);

    paint(gr);   
   
    if(set_cycle){   
        gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
    } else{   
        gr.FillSolidRect(txt_x, txt_y, ww - txt_x, wh - txt_y, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
    }   

    gr.GdiDrawText(artist, a_font, a_color, artist_x, artist_y, ww - artist_x, wh, DT_LEFT | DT_WORD_ELLIPSIS );   

    for (var i = 0; i < b_text_height; i++) {      
        gr.GdiDrawText(b_text_array[i + s_text], b_font, b_color, b_x, b_y + b_text_row_height * i, ww, wh, DT_LEFT );   
    }    

    var txt_cycle = cycle == 0 ? "off" : cycle + " sec";
    set_cycle && gr.GdiDrawText("auto cycle \n" + txt_cycle, b_font, b_color, 15, 15, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );

    gr.GdiDrawText("", b_font, b_color, 15, 15, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}

function on_mouse_wheel(delta) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (!delay && !text_scroll && !ShiftDown){
        delay = true;
        fdelay();
        get_files_from_dir(); 
        if (delta < 0) {selected = selected <= 0 ? files.length - 1 : selected = selected - 1};
        if (delta > 0) {selected = selected >= files.length - 1 ? 0 : selected = selected + 1};

    }
    if (text_scroll && !ShiftDown){
        if (b_text_rows > b_text_height){   
            if (delta < 0) {s_text = b_text_rows - s_text <= b_text_height ? b_text_rows - b_text_height : s_text += 1}
            if (delta > 0) {s_text = s_text <= 0 ? 0 : s_text -= 1}
        }
    }
   
    if (ShiftDown) {
        set_cycle = true;
        if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
        if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
    }

    window.Repaint();
}

function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_dynamic_info_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {   
   on_item_focus_change();     
}   

function on_item_focus_change() {
    switch (selection_mode) {   
    case 0:   
        metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
        break;
    case 1:
       metadb = fb.GetFocusItem();
        break;
    }
    if (metadb) on_metadb_changed();
}   

function Eval(field) {   
    if (!metadb) return;   
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);   
   // return path.indexOf('://') > 0 ? fb.TitleFormat("[" + field + "]").Eval() : fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);   
    return fb.Titleformat("[" + field + "]").EvalWithMetadb(metadb) ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval();

}   

var work = false;   

function on_metadb_changed() {   
    qqq="";
    if (!metadb) return;   
    artist = Eval("%artist%");
    work = false;   
    if (artist != old_artis){
        try {
            fso.deleteFile(tmp_b_path + "*.jpg" );
        } catch(e) {};
        selected = 0;
        s_text = 0;
        text = "";
        get_b_text_array()       
        files = [];
        get_pic();
        old_artis = artist;
    }
    window.Repaint();      
}   
var qqq;

function get_pic(){      
    //var url1 = ("http://www.last.fm/music/" + encodeURIComponent(artist) + "/+albums");
    var url1 = ("http://www.last.fm/music/" + encodeURIComponent(artist) + "/+images");       
    xmlhttp.open("GET", url1, true);      
    xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp.send();   
    xmlhttp.onreadystatechange = function () {      
        if (xmlhttp.readyState == 4) {      
            if (xmlhttp.status == 200) {   
                qqq= xmlhttp.status;    window.Repaint();              
                doc.open();      
              var div = doc.createElement("div");
              div.innerHTML = xmlhttp.responsetext;
              var data = div.getElementsByTagName("img");
              var urls = [];   
                        
                for (i = 0; i < data.length; i++) {         
                 if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/avatar170s") == 0) urls.push(data[i].src.replace("avatar170s", "ar0")); //
                 //if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/300") == 0) urls.push(data[i].src.replace("300", "ar0")); //
               
                }         
                for (i = 1; i < Math.min(urls.length, limit) + 1; i++) {         
                    file = "\"" + tmp_b_path + artist + "_"  + i + ".jpg" + "\"";         
                    WshShell.Run(vbs + " " + urls[i] + " " + file, false);          
                }         
              doc.close();   
                get_b_text();           
            } else {
                get_b_text();
            }         
        }   
    }
}

function get_p(url, i){
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
            Stream.Open;
            Stream.Type = 1;
            Stream.Write(xmlhttp.ResponseBody);
            Stream.Position = 0;
            try {
                Stream.SaveToFile(tmp_b_path + artist + "_" + i + ".jpg");
            } catch(e) {};
            Stream.Close;
        }
    }
}

function get_files_from_dir() {
    files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        if (name.indexOf(artist) == 0){
            files.push(tmp_b_path + name);
        }
        e.moveNext();
    }
    window.Repaint();
}


var delay = false;

function fdelay(){
    var delay_timer = window.SetTimeout(function() {
        delay = false;
        window.Repaint();
    }, 200);
}

function paint(gr){
    g_img = gdi.Image(files[selected]); 
    if (!g_img){
        try {
            g_img = gdi.Image(nocover_path); 
        } catch(e) {};
    }
    if (g_img){
        var scale_w = (ww - p_margn * 2) / g_img.Width;
        var scale_h = (wh - p_margn * 2) / g_img.Height;
        var scale = Math.min(scale_w, scale_h);
        gr.DrawImage(g_img, p_margn, p_margn, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
    }
}

function on_mouse_move(x, y) {
    on_mouse = true;
    window.SetCursor(32649);
    if (k_down){
        txt_x = x - delta_x ;
        txt_y = y - delta_y;

        txt_x = txt_x <= 0 ? 0 : txt_x > ww - 50 ? ww - 50: txt_x;
        txt_y = txt_y <= 0 ? 0 : txt_y > wh - 50 ? wh - 50: txt_y;
        get_b_text_array();
        window.Repaint();
    }

    if (x  >= txt_x && y  >= txt_y){
        text_scroll = true;
    } else {
        text_scroll = false;
    }
   
    get_b_text_array();
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
}

function on_mouse_lbtn_down(x,y){
    if (x  >= txt_x && y  >= txt_y){
        k_down = true;
        delta_x = x - txt_x;
        delta_y = y - txt_y;
    }
}

function on_mouse_lbtn_up(x,y){
    window.SetProperty("txt_x", txt_x);
    window.SetProperty("txt_y", txt_y);
    k_down = false;
}

function on_size(){
    ww = window.Width;   
    wh = window.Height;
   
    txt_x = window.GetProperty("txt_x");
    txt_y = window.GetProperty("txt_y");

    txt_x = txt_x >= ww - 50 && txt_x > 0 ? ww - 50 : txt_x;
    txt_y = txt_y >= wh - 50 && txt_y > 0 ? wh - 50 : txt_y;
   
    get_b_text_array();
}

function get_b_text(){
   // if (artist == null) return;
    var url2 = ("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist) + "/+wiki");
    xmlhttp.open("GET", url2, true);
    xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp.send();doc.open();
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
                doc.open();
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp.responsetext;
                var data = div.getElementsByTagName("div");
                for (i = 0; i < data.length; i++) {
                    if (data[i].className == "wiki-content") {
                        text = strip_tags(data[i].innerHTML);
                        break;
                    //} else {
                        //text = if_not_found[abc];
                    }
                }
                doc.close();
                get_b_text_array(); 
                window.Repaint();
            } else {
                text = if_not_found[abc]
                get_b_text_array(); 
                window.Repaint();               
            }
        }
    }
}

function strip_tags(t) {
    doc.open();
    var div = doc.createElement("div");
    div.innerHTML = t.replace(/<[Pp][^>]*>/g, "").replace(/<\/[Pp]>/g, "<br>").replace(/\n/g, "<br>");
    var text = div.innerText;
    doc.close();
    return text;
}

function get_b_text_array() {
    artist_x = txt_x + t_margin;
    artist_y = txt_y + t_margin;
    strings_array = [];
    b_text_array = [];
   
    temp_bmp = gdi.CreateImage(1, 1);
    temp_gr = temp_bmp.GetGraphics();

    b_x = txt_x + t_margin;
    b_y = txt_y + temp_gr.CalcTextHeight("text", a_font) + t_margin * 2;

    b_text_row_height = temp_gr.CalcTextHeight("text", b_font)
    string_width = Math.max(ww - b_x - t_margin, 0);

    if (text) strings_array = temp_gr.EstimateLineWrap(text, b_font, string_width).toArray();

    for (var i = 0; i < strings_array.length; i += 2) {
        b_text_array.push(strings_array[i].replace(/^\s+|\s+$/g, ""));
    }

    b_text_rows = b_text_array.length;
    b_text_height = Math.ceil((wh - b_y - 20) / b_text_row_height);
   
    temp_bmp.ReleaseGraphics(temp_gr);
    temp_bmp.Dispose();
    temp_gr = null;
    temp_bmp = null;
}

function on_mouse_rbtn_up (x, y){     
    var _menu = window.CreatePopupMenu();
    var i = 1;

    MF_ENABLED = 0x00000000;
    MF_GRAYED = 0x00000001;
    MF_SEPARATOR = 0x00000800;
   
    _menu.AppendMenuItem(MF_ENABLED, i++, "EN text");
    _menu.AppendMenuItem(MF_ENABLED, i++, "RU text");
    _menu.CheckMenuRadioItem(1, i, abc + 1);      
    _menu.EnableMenuItem(abc + 1, 1); 

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Prefer now playing");
    _menu.AppendMenuItem(MF_ENABLED, i++, "Follow selected track");
    _menu.CheckMenuRadioItem(i - 2, i , selection_mode + 3);      
   _menu.EnableMenuItem(selection_mode + 3, 1); 
   
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
//    if (ShiftDown) {
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 10, "Reload");
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 20, "Properties");
        _menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");
//    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:
        abc = 0;
        window.SetProperty("abc", abc);
        text = "";
        get_b_text();
        break;
    case 2:
        abc = 1;
        window.SetProperty("abc", abc);
        text = "";
        get_b_text();
        break;
    case 3:   
        selection_mode = 0;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 4:   
        selection_mode = 1;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 10:
        //window.Reload();
        break;
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();   
        break;   
   }
    _menu.Dispose();   
    return true;   
}   

var cycle = 0;
var set_cycle = false;

var timer = window.SetInterval(on_timer, 1000);
var step = 0;
var dis;

function on_timer(id) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
    step =  ShiftDown ? 0 : step + 1;
    if (files.length == 0) get_files_from_dir();
    if (cycle > 0 && step >= cycle && !ShiftDown){
        selected = selected >= files.length - 1 ? 0 : selected = selected + 1;
        window.Repaint();
        step = 0;
    }
   
    if (!ShiftDown) {
        if (set_cycle) dis--;  window.Repaint();
        if (dis <= 0){
            set_cycle = false;
            window.Repaint();
        }
    } else {
        dis = 2;
    }
}


function on_key_down(vkey) {
    if (vkey == 16){
        set_cycle = true;
        dis = 2;
        window.Repaint();
    }
}

function on_mouse_lbtn_dblclk (x,y){
    if ( files[selected] ) WshShell.run( '"' + files[selected] + '"' );
}
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #631 seriousstas » 07.02.2016, 19:25

kgena_ua
Здесь на форуме была авария какая-то , восстанавливали весь форум за 5-е (или 4-e) число , то-есть многих сообщений Вы не видели .
Aum - поднимал вопрос по отключению загрузок фото после нескольких щелчков по разным каналам и переключения языка .
Для тестов Вам нужен плейлист где:
1. - есть мертвые , не работающие каналы .
2. - есть английский текст , но отсутствует русский .
Что-то из этого вызывает отказ загрузки .
Если-что - плейлист Radio Relax от MC Web подойдет (я его давно не чистил в сборке) .
Там есть канал Roots Legacy Radio Dub UK & Reggae первый в списке - часто есть вариант с текстом (№2) .
Добавьте , как вариант Ваш скрипт вместо марковского (для удобства) и тестируйте , проблема не заставит ждать .

Ещё вопрос , что даёт это условие ?(расшифруйте ) . Если нет в папке Аватарки искать в ar0 , это для перестраховки , если папка сдохнет?:
Код: Выделить всё
if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/avatar170s") == 0) urls.push(data[i].src.replace("avatar170s", "ar0")); //
Просто такой папки ar0 (Возможно была когда-то ...)нет на ласте , есть arQ .
структура :
http://ws.audioscrobbler.com/2.0/?method=artist.g ... a3f1d8698322203a40e147692d94cb
Можно провести эксперименты с любым файлом и посмотреть , когда меняется размер .
Марк ранее использовал "http://img2-ak.lst.fm/i/u/60x60" эта и другие папки остались на серваке , но в плеер тянуть не дают .
Загрузить можно либо из avatar174s, либо оригинал , то-есть оставив img2-ak.lst.fm/i/u/
Последний раз редактировалось seriousstas 07.02.2016, 21:25, всего редактировалось 1 раз.
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #632 duzzy » 07.02.2016, 21:16

kgena_ua, Пожалуйста :wink:
duzzy
Репутация: 25
С нами: 9 лет 4 месяца

Сообщение #633 kgena_ua » 07.02.2016, 21:35

seriousstas,
Условие такое, если адрес начинается с http://img2-ak.lst.fm/i/u/avatar170s, то заменить то заменить в этом адресе avatar170s на ar0 (ar0 я увидел а Марка). Я попробовал "вручную" - по адресу с ar0 лежит картинка с истинным размером.
Спойлер
Безымянный.png

Безымянный 2.png


Radio Relax от MC Web , подойдет.
На моих плейлистах (ИРадио) пока нет никаких сбоев.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #634 AHAPXICT » 08.02.2016, 01:15

Никто не знает какое условие использовать для получения названия интернет радио станции? fb.TitleFormat("%title%"); не подходит, нужно что бы информацию брало с метадаты. Пример: Field name: TITLE , Field value: Radio ROKS. Причём foo_vis_shpeck так работает,на винампе милкдроп показывает "исполнитель - название" для радио, а в фубаре нет, но это так к слову. Весь нет облазил, не нашёл.
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #635 seriousstas » 08.02.2016, 03:12

Я попробовал "вручную" - по адресу с
ar0
лежит картинка с истинным размером.
Поспорю :) - попробуйте любую другую папку , вместо ar0 . Всегда будет истинный размер .
Оригинал загружается из http://img2-ak.lst.fm/i/u/eb7a49cd32f34c8b9821e26ed6f59a32.png, а если не находит папки http://img2-ak.lst.fm/i/u/beliberda/eb7a49cd32f34c8b9821e26ed6f59a32.png - то тоже оригинал .ar0 - на сервере уже нет .
Есть такие 174s / 300x300 / arQ /60x60
......
Условие такое, если адрес начинается с
Теперь понял, для чего такие сложности . Если тянуть напрямую - http://img2-ak.lst.fm/i/u/ - то залетает иногда "мусор" (в виде мелких фоток) ,
а те названия ,что привязаны к аватаркам идут полноразмерные , но все-же...ar0 - на сервере уже нет )))
и достаточно сейчас :
Код: Выделить всё
urls.push(data[i].src.replace("avatar170s", "")); //

Кстати разрешения аватарок хватает , что-б и их использовать (не на весь экран-же выводим) . Преимущество - одинаковый размер ...
я про такой вариант без замены :
Код: Выделить всё
urls.push(data[i].src.replace("avatar170s", "avatar170s")); //
Но это так - мысли вслух ...
......
Попросил Марка поправить фильтрацию ,чтоб не было дублей - поправил (смотреть в его ветке ..).
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #636 kgena_ua » 08.02.2016, 10:42

AHAPXICT,
name = title = fb.Titleformat("[%title%]").EvalWithMetadb(metadb); только не всегда.

seriousstas,
seriousstas:Если тянуть напрямую - http://img2-ak.lst.fm/i/u/ - то залетает иногда "мусор"
Это точно.
Код: Выделить всё
urls.push(data[i].src.replace("avatar170s", ""));
Да, подгружает ту-же картинку.

По поводу дублей. Я просто не гружу первое изображение :smile: .
А как там Марк сделал, можно ссылку на его ветку (хоть его скрипты и напоминают некоторую головоломку, да Вы знаете).

seriousstas:проблема не заставит ждать
Тестирую на Rадио Relax(взял у Вас) и на {EX.UA} Rock, Blues, Rock & Roll (MC Web ). Пока никаких проблем. Если нет изображения или текста, то сразу иду на сайт (по отдельной кнопке) - если нет, то этого и нет на сайте.
Вчера вечером были проблемы, но если заходил на сайт - "ошибка...нет доступа к странице"
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #637 No_mad » 08.02.2016, 11:05

Тоже несколько суток поскакал по инет-станциям - полёт срипта биографии нормальный :)) и языки переключаю - без сбоев.
По русски - немало инфы отображается. А как можно сделать RU text дефолтным, но в случае отсутствия русского текста - переключиться автоматом на бритиш и повторить поиск, и только если и после этого ничего нет пойти за пивом вывести текст - ничего не найдено. И еще до краха сайта у меня был вопрос, и он пропал - можно ли в добавление к "штатной" папке tmp_Biography проводить поиск и в папке трека - тогда без интернета окно бы не пустовало (лучше чтобы не ИЛИ из той или другой папки, а И с той и другой.
No_mad
Репутация: 2
С нами: 8 лет 10 месяцев

Сообщение #638 kgena_ua » 08.02.2016, 14:03

No_mad:тогда без интернета окно бы не пустовало
No_mad, пока можно выводить nocover.png.
Путь - стр.41 (примерно) :
var nocover_path = fb.ProfilePath + "nocover.png";
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #639 No_mad » 08.02.2016, 14:26

kgena_ua:пока можно выводить nocover.png.
Ну, если СОВСЕМ нет картинок, то я в своей сборке вообще сворачиваю это окно, пока не появится материал для показа. Просто тогда можно бы было сэкономить еще на одном окне - Artist. Вообще стараюсь придерживаться принципа как можно больше автоматизировать вывод всей информации минимальными для "пилота фубара" средствами :)))). А такой назойливый стал после того, как реально увидел на своей сборке преимущества. Чем ближе моя сборка к завершению - тем сильнее уже она сама требует с меня таких решений... а уж я тут на форуме спрашиваю, сам то не силино владею...
----ЗЫ а хотя бы "вшитую" картинку трека можно прицепить к показу в окне биографии? (и желательно в цикле, - пилот штурвал должен держать, а не картинки колёсиком прокручивать :))))))) А серьёзно - действительно было бы интересно
No_mad
Репутация: 2
С нами: 8 лет 10 месяцев

Сообщение #640 kgena_ua » 08.02.2016, 14:46

No_mad, я Вас понял.
Я еще этот скрипт не довел до ума :smile:
да, было-бы неплохо тащить еще из папки (переключать источник).
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Пред.След.

Вернуться в Секреты foobar2000