Спасибо.Aliado_71:Cerberus, Может просто название правильно указать, cover, front, folder
Список разделов › foobar2000 › Секреты foobar2000
Спасибо.Aliado_71:Cerberus, Может просто название правильно указать, cover, front, folder
как правило у пользователей в папке "Исполнитель" несколько альбомов, в альбомах самих бывают еще подпапки "CD1" не говоря уже о фанатах собирать полные дискографии. Так вот, не в каждой же папке альбома дублировать фото исполнителя? Скрипт должен подниматься наверх, сколько бы не было вложенных папок и создавать папку Images в корне, было бы здорово, если бы Вы покрутили код, жду теперь захожу почаще)))kgena_ua:И вот тут появляются нюансы. В папку с артистом или в папку с альбомом - будут разные мнения.
Занялся опять "Get Covers (Artwork) && radio logos".Cerberus:Можно приоритет задать? при отображении обложек из папки
т.е. в папку %artist%, а как ее "найти". Надо пробовать.Marakobes:Скрипт должен подниматься наверх, сколько бы не было вложенных папок и создавать папку Images в корне
Раньше так и делал...например более 20 альбомов любимого мной артиста и в каждом альбоме фоты штук 30 одинаковые. Легче стало с появлением скрипта от максима, где читались сканы из альбома и остальные из корня с папки с имиджем. Я Геннадию давно просьбу высказывал. Запускаем альбом и сначала читаются сканы по порядку, фронт, задняя, СД из папки с альбомом и только затем остальные из корневой папки с имиджем. Картинки у меня собраны давно и сейчас нет проблем вручную сбросить в папку скачавшиеся фоты из темпоральной.Marakobes:не в каждой же папке альбома дублировать фото исполнителя? Скрипт должен подниматься наверх, сколько бы не было вложенных папок и создавать папку Images в корне
у меня cover.*, front.*, folder.* или album.* (это есть)vladj:фронт
back.*vladj:задняя
cd.*vladj:СД
"Biography, Albums, Similar and title artist info. www.last.fm"Marakobes:Скрипт должен подниматься наверх, сколько бы не было вложенных папок и создавать папку Images в корне
function artist_folder_path(n) {
if (!n) return;
if (complete_path.indexOf('http://') >= 0 ||complete_path.indexOf('youtube') >= 0 || complete_path.indexOf('cdda') >= 0) {
return work_path + n;
} else {
var tmp_arr = [], p_arr = [], p;
tmp_arr = directory_path.split("\\");
for (var i = 0; i < tmp_arr.length; i += 1) {
if (tmp_arr[i].match(meta_artist)){
p_arr = tmp_arr.slice(0, i + 1);
break;
}
}
p = p_arr.join("\\");
return p + "\\" + "Images" + "\\";
}
}
Это понимаю , но я не одинок , выше пост MC Web :фризов не вижу, я к тому, что нельзя исправить ошибку, если она есть, если она не наблюдатся
Ну да...это типа общепринятый стандарт в папке с альбомом у меня cover/back/cd. При запуске любого альбома у меня сразу вначале cover, а вот back и cd показываются где-то уже в середине остальных, которые в корне папки лежат в папке artwork. Вообще-то не так и критично в принципеkgena_ua:такие имена файлов ? Если нет, то какие.
/// fooClock 1.0 // Coded by Hunter
// "Damask Track Info Panel", version "1.1", @author "so_kindly"
// Edition by San_dr http://forum.oszone.net
// Variables {{
// Text flags
var align_top = 0;
var align_middle = 1;
var align_bottom = 2;
var align_left = 0;
var align_center = 1;
var align_right = 2;
var trim_no = 0;
var trim_chara = 1;
var trim_word = 2;
var trim_elips_chara = 3;
var trim_elips_word = 4;
var trim_elips_path = 5;
var flag_rtl = 0x0001;
var flag_vert = 0x0002;
var flag_nofit = 0x0004;
var flag_dispctrl = 0x0020;
var flag_nofallback = 0x0400;
var flag_trailspace = 0x0800;
var flag_nowrap = 0x1000;
var flag_linelimit = 0x2000;
var flag_noclip = 0x4000;
// Flags of Menu
var DT_VCENTER = 0x00000004;
var MF_SEPARATOR = 0x00000800;
var MF_GRAYED = 0x00000001;
var MF_UNCHECKED = 0x00000000;
var MF_CHECKED = 0x00000008;
var MF_STRING = 0x00000000;
var MF_POPUP = 0x00000010;
DT_CALCRECT = 0x00000400;
var MK_SHIFT = 0x0004;
var CursorFollowMode = {
Auto: 1,
OnlyStopped: 2,
Always: 3,
Never: 4
}
// globals
var ww = 0;
var wh = 0;
var whtip = 0;
var w2 = 0; // line width
var MetaDB;
var Properties = new GetProperties();
//margins
var hm = 18; // Horizontal margins. (left and right)
var tm = 5;
// text vars
FontStyles = {
Regular: 0,
Bold: 1,
Italic: 2,
BoldItalic: 3,
Underline: 4,
Strikeout: 8
}
var TextFont = Properties.Lines.Font;
var LineStrFmt = StrFmt(align_center, align_middle, trim_no, flag_linelimit);
// Animation vars
var RollingDistance;
var num = 0;
var WaitingForDefaultAnim;
var CompareResult = true;
var NeedCursorFollowAutoTimer;
var TotalFrames;
var RefreshInterval;
var LineDelay;
var TotalFrames2;
var Text_tops;
var Opacitys;
var Oldlines = new Array();
var Newlines = new Array();
var HoverLine;
var DownLine;
var Tooltip = window.CreateTooltip();
var MetaDBNowPlaying;
var MetaDB2NowPlaying;
var NormalColor = RGB(0, 0, 0);
var HoverColor = RGB(245, 255, 230);
var DownColor = RGB( 255, 255, 255);
var ContextMenuShowing;
var MetadbBackup;
var FOCUSFLAG;
var SkipFocusChange;
//timers
var CursorFollowAutoTimerID;
var WaitTimerID;
var AnimationTimerID;
window.MinHeight = 180;
//===================================================================================================================================================
// Tools {{
function StrFmt(alignH, alignV, trim, flag) {
return ((alignH << 28) | (alignV << 24) | (trim << 20) | (StringTrimmingEllipsisWord = 4 << 20) | flag);
}
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 ApplyAlpha(color, alpha) {
return (color & 0x00ffffff) | (((color >> 24) & 0xff) * alpha / 255 << 24)
}
function StringFormat(name, TitleformatString, fontname, size, style, format, MinHeight, linespace) {
this.name = name;
this.tfString = TitleformatString; // tf string
this.font = gdi.Font(fontname, size, style);
this.MinHeight = MinHeight;
this.format = format;
this.linespace = linespace; // space AFTER the line.
}
// Tools }}
//===================================================================================================================================================
// Properties {{
function GetProperties() {
//A
this.Panel = {
CursorFollowMode: window.GetProperty("A01.Panel.CursorFollowMode", CursorFollowMode.Auto),
AutoBackInterval: window.GetProperty("A02.Panel.AutoBackInterval", 5000),
EnableTooltip: window.GetProperty("A03.Panel.EnableTooltip", true)
}
this.Panel.CursorFollowMode = Math.max(this.Panel.CursorFollowMode, CursorFollowMode.Auto);
this.Panel.CursorFollowMode = Math.min(this.Panel.CursorFollowMode, CursorFollowMode.Never);
window.SetProperty("A04.Panel.CursorFollowMode", this.Panel.CursorFollowMode);
if (this.Panel.AutoBackInterval < 1000) {
this.Panel.AutoBackInterval = 1000;
window.SetProperty("A02.Panel.AutoBackInterval", 1000);
}
//B
this.Animation = {
RefreshInterval: window.GetProperty("B01.Animation.RefreshInterval", 4),
Duration: window.GetProperty("B02.Animation.Duration", 1200),
LineDelay: window.GetProperty("B03.Animation.LineDelay", 5) //Delay before each next line
}
if (this.Animation.Duration / this.Animation.RefreshInterva1l < this.Animation.LineDelay * 11 * 10) {
this.Animation.Duration = this.Animation.LineDelay * 11 * 10;
window.SetProperty("B02.Animation.Duration", this.Animation.Duration);
}
TotalFrames = Math.ceil(this.Animation.Duration / this.Animation.RefreshInterval);
RefreshInterval = this.Animation.RefreshInterval; // In ms.
LineDelay = this.Animation.LineDelay; // Frames delayed between lines.
this.Lines = {
Font: window.GetProperty("C01.Lines.Font", "Calibri"),
LeftClickFunc: window.GetProperty("C02.Lines.LeftClickFunction", 1), //does nothing for now
Number: window.GetProperty("C03.Lines.Number", 5),
Size: window.GetProperty("C04.Lines.Size", 10)
}
this.Lines.Number = Math.max(this.Lines.Number, 1);
this.Lines.Number = Math.min(this.Lines.Number, 11);
window.SetProperty("C03.Lines.Number", this.Lines.Number);
this.Lines.Size = Math.max(this.Lines.Size, 1);
this.Lines.Size = Math.min(this.Lines.Size, 40);
window.SetProperty("C04.Lines.Size", this.Lines.Size);
}
// Properties }}
//===================================================================================================================================================
// Line tools {{
function Line(StringFormat) { // Class for each line.
this.top = 0;
this.opacity = 255;
this.state = 0;
this.name = StringFormat.name;
this.MinHeight = StringFormat.MinHeight;
this.linespace = StringFormat.linespace;
this.OnClick = function () {
if (MetaDBNowPlaying) {
if (fb.ActivePlaylist != fb.PlayingPlaylist) fb.ActivePlaylist = fb.PlayingPlaylist;
fb.RunMainMenuCommand("Activate now playing");
} else {
fb.RunMainMenuCommand("Show focused item");
}
}
this.Reset = function () { // Reset and renew line.
if (MetaDB) this.text = fb.TitleFormat(StringFormat.tfString).EvalWithMetadb(MetaDB);
else this.text = "";
this.yOffset = 40;
this.display = 1;
this.Height = 40;
this.Width = w2;
this.textImg = null;
if (this.text && ww && wh) {
this.textImg = gdi.CreateImage(ww, whtip);
this.g = this.textImg.GetGraphics();
this.Height = Math.ceil(this.g.MeasureString(this.text, StringFormat.font, 0, 0, this.Width, this.textImg.Height, StringFormat.format).Height); // Measure text height of no clipping.
}
}
this.Draw = function (gr, top) {
if (this.text) {
gr.SetTextRenderingHint(5);
switch (this.state) {
case 0:
gr.DrawString(this.text, StringFormat.font, ApplyAlpha(NormalColor, this.opacity), hm, top + this.yOffset, this.Width, this.Height, StringFormat.format); // Draw text in gr, the quality will be much better.
//gr.DrawRect(hm, top+this.yOffset, this.Width, this.Height, 1, RGBA(90,240,20,255)); // Show the range of text, for debuging.
break;
case 1:
gr.DrawString(this.text, StringFormat.font, ApplyAlpha(HoverColor, this.opacity), hm, top + this.yOffset, this.Width, this.Height, StringFormat.format);
break;
case 2:
gr.DrawString(this.text, StringFormat.font, ApplyAlpha(DownColor, this.opacity), hm, top + this.yOffset, this.Width, this.Height, StringFormat.format);
break;
}
}
}
this.isXYok = function (x, y) {
var result;
if (Oldlines && Oldlines[0].display) {
if (x >= hm && x <= window.Width - hm && y > tm + this.yOffset && y < tm + this.yOffset + this.Height) {
result = true;
}
}
return result;
}
this.ChangeState = function (s) { // Change to state "s".
if (s != this.state) this.oldstate = this.state;
this.state = s;
window.RepaintRect(hm, this.top + this.yOffset, this.Width, this.Height + 5);
if (s == 1 && this.text != "Track Info Panel") {
Tooltip.Text = this.name;
if (Properties.Panel.EnableTooltip) Tooltip.Activate();
} else {
Tooltip.Deactivate();
}
}
}
function ResetLines(lines) { // Reset and renew and rearrange all lines, and recalculate all line's height, generate new image for each line.
var H = whtip - tm;
var MinH = 40;
for (var i = 0; i < lines.length; i++) {
lines[i].Reset();
if (lines[i].Height != 0) MinH += lines[i].MinHeight + lines[i].linespace;
}
for (var i = 0; i < lines.length; i++) {
MinH -= lines[i].MinHeight;
if (lines[i].Height == 0) {
if (i + 1 != lines.length) lines[i + 1].yOffset = lines[i].yOffset;
} else {
lines[i].Height = Math.max(lines[i].MinHeight, Math.min(lines[i].Height, H - lines[i].yOffset - MinH));
if (i + 1 != lines.length) {
lines[i + 1].yOffset = lines[i].yOffset + lines[i].Height + lines[i].linespace;
MinH -= lines[i].linespace;
}
}
}
}
function CopyNewlinesToOldlines() {
var i = 0;
for (i; i < Oldlines.length; i++) {
Oldlines[i].text = Newlines[i].text;
Oldlines[i].textImg = Newlines[i].textImg;
Oldlines[i].yOffset = Newlines[i].yOffset;
Oldlines[i].Height = Newlines[i].Height;
Oldlines[i].display = Newlines[i].display;
Newlines[i].text = null;
Newlines[i].textImg = null;
}
}
// Line tools }}
//===================================================================================================================================================
// timers {{
function c_CursorFollowAutoTimer() {
this.Stop = function () {
if (CursorFollowAutoTimerID) {
window.ClearTimeout(CursorFollowAutoTimerID);
CursorFollowAutoTimerID = null;
window.RepaintRect(0,wh-40,ww,40);///
}
}
this.Start = function () {
CursorFollowAutoTimerID = window.SetTimeout(function () {
CursorFollowAutoTimerID = null;
if (fb.IsPlaying) {
MetaDB = fb.GetNowPlaying();
MetaDBNowPlaying = true;
StartAnimationCycle();
}
}, Properties.Panel.AutoBackInterval);
}
}
function c_WaitTimer() {
this.Stop = function () {
if (WaitTimerID) {
window.ClearTimeout(WaitTimerID);
WaitTimerID = null;
window.RepaintRect(5,40,ww-10,wh-70);
}
}
this.Start = function () {
WaitTimerID = window.SetTimeout(function () {
WaitTimerID = null;
StartAnimationCycle();
if (MetaDB) {
window.WatchMetadb(MetaDB);
}
}, 250);
}
}
function c_AnimationTimer() {
this.Stop = function () {
if (AnimationTimerID) {
window.ClearInterval(AnimationTimerID);
AnimationTimerID = null;
window.RepaintRect(5,40,ww-10,wh-70);
}
}
this.Start = function () {
AnimationTimerID = window.SetInterval(function () {
if (num < TotalFrames) {
for (var i = 0; i < Oldlines.length; i++) {
if (num < TotalFrames2) {
Oldlines[i].top = Text_tops[num];
Oldlines[i].opacity = 255 - Opacitys[num];
}
if (num >= i * LineDelay && num < TotalFrames2 + i * LineDelay) {
Newlines[i].top = Text_tops[num - i * LineDelay];
Newlines[i].opacity = Opacitys[num - i * LineDelay];
}
}
window.RepaintRect(5,40,ww-10,wh-70);
num++;
} else {
num = 0;
CopyNewlinesToOldlines();
for (var i = 0; i < Oldlines.length; i++) {
Oldlines[i].top = 0;
Oldlines[i].opacity = 255;
Newlines[i].top = 0;
}
AnimationTimer.Stop();
AnimationTimerID = null;
if (WaitingForDefaultAnim) {
WaitingForDefaultAnim = false;
StartAnimationCycleDefaultText();
}
window.RepaintRect(5,40,ww-10,wh-70);
}
}, RefreshInterval);
}
}
// timers }}
//===================================================================================================================================================
// Cursor follow tools {{
function SetCursorFollowMode(FollowMode) {
if (FollowMode != Properties.Panel.CursorFollowMode) {
Properties.Panel.CursorFollowMode = FollowMode;
window.SetProperty("A01.Panel.CursorFollowMode", FollowMode);
CursorFollow(FollowMode);
}
}
function CursorFollow(FollowMode) {
CursorFollowAutoTimer.Stop();
switch (FollowMode) {
case CursorFollowMode.Auto:
if (fb.IsPlaying) on_playback_new_track();
else on_item_focus_change();
break;
case CursorFollowMode.OnlyStopped:
if (fb.IsPlaying) on_playback_new_track();
else on_item_focus_change();
break;
case CursorFollowMode.Always:
on_item_focus_change();
break;
case CursorFollowMode.Never:
if (fb.IsPlaying) on_playback_new_track();
else on_playback_stop();
}
}
// Cursor follow tools }}
//===================================================================================================================================================
// Context menu {{
function ShowContextMenu(x, y) {
var menu = window.CreatePopupMenu();
var FollowModeChild = window.CreatePopupMenu();
var ret;
if (CursorFollowAutoTimerID) {
CursorFollowAutoTimer.Stop();
NeedCursorFollowAutoTimer = true;
}
FollowModeChild.AppendMenuItem(MF_STRING, 1, "Auto");
FollowModeChild.AppendMenuItem(MF_STRING, 2, "Only Stopped");
FollowModeChild.AppendMenuItem(MF_STRING, 3, "Always");
FollowModeChild.AppendMenuItem(MF_STRING, 4, "Never");
FollowModeChild.CheckMenuRadioItem(1, 4, Properties.Panel.CursorFollowMode);
FollowModeChild.AppendTo(menu, MF_STRING, "Cursor follow mode");
menu.AppendMenuItem(MF_SEPARATOR, 0, "");
menu.AppendMenuItem(MF_STRING, 5, "Properties");
ret = menu.TrackPopupMenu(x, y);
switch (ret) {
case 1:
SetCursorFollowMode(CursorFollowMode.Auto);
break;
case 2:
SetCursorFollowMode(CursorFollowMode.OnlyStopped);
break;
case 3:
SetCursorFollowMode(CursorFollowMode.Always);
break;
case 4:
SetCursorFollowMode(CursorFollowMode.Never);
break;
case 5:
window.ShowProperties();
break;
}
menu.Dispose();
ContextMenuShowing = null;
// Resume CursorFollowAutoTimer, if necessary.
if (Properties.Panel.CursorFollowMode == CursorFollowMode.Auto && !CursorFollowAutoTimerID) CursorFollowAutoTimer.Start();
// if waiting for on_focus_change or on_playback_new_track event, launch it now
if (MetadbBackup) {
if (FOCUSFLAG == true) {
on_focus_resume(MetadbBackup);
} else {
on_playback_new_track(MetadbBackup);
}
}
MetadbBackup = null;
}
function on_focus_resume(metadb) {
switch (Properties.Panel.CursorFollowMode) {
case CursorFollowMode.Auto:
if (fb.IsPlaying) {
CursorFollowAutoTimer.Stop();
//NeedCursorFollowAutoTimer = true;
CursorFollowAutoTimer.Start();
}
MetaDB = metadb;
MetaDBNowPlaying = false;
WaitTimer.Stop();
WaitTimer.Start();
break;
case CursorFollowMode.OnlyStopped:
if (!fb.IsPlaying) {
MetaDB = metadb;
MetaDBNowPlaying = false;
WaitTimer.Stop();
WaitTimer.Start();
}
break;
case CursorFollowMode.Always:
MetaDB = metadb;
MetaDBNowPlaying = false;
WaitTimer.Stop();
WaitTimer.Start();
break;
case CursorFollowMode.Never:
break;
}
}
// Context menu }}
//===================================================================================================================================================
// Animation tools {{
function StartAnimationCycle() {
if (!MetaDB) { //no MetaDB - start default text anim.
if (AnimationTimerID) {
WaitingForDefaultAnim = true;
return;
} else {
StartAnimationCycleDefaultText();
return;
}
}
if (AnimationTimerID) { //Refresh new lines if animation already running
CopyNewlinesToOldlines();
ResetLines(Newlines);
return;
}
ResetLines(Newlines);
for (var i = 0; i < Oldlines.length; i++) {
if (Newlines[i].text != Oldlines[i].text) CompareResult = false;
}
if (!CompareResult) {
AnimationTimer.Start();
CompareResult = true;
}
}
function StartAnimationCycleDefaultText() {
if (Oldlines[0].text == "Trackinfo Panel" && !AnimationTimerID) {
return;
}
if (AnimationTimerID) {
WaitingForDefaultAnim = true;
return;
}
if (HoverLine) { // Disable and reset buttons first.
HoverLine.state = 0;
HoverLine = undefined;
}
if (DownLine) {
DownLine.state = 0;
DownLine = undefined;
}
Tooltip.Deactivate();
MetaDB = false;
ResetLines(Newlines);
Newlines[0].text = "Trackinfo Panel";
Newlines[0].Height = 100;
Tooltip.Text = "";
AnimationTimer.Start();
}
// Animation tools }}
//===================================================================================================================================================
function on_init() {
CursorFollowAutoTimer = new c_CursorFollowAutoTimer();
WaitTimer = new c_WaitTimer();
AnimationTimer = new c_AnimationTimer();
Tooltip.SetMaxWidth(300);
LineFormats = new Array(
new StringFormat(
"Название",
"[%title%]",
TextFont, 18 + Properties.Lines.Size, FontStyles.Regular, LineStrFmt, 19, 2),
new StringFormat(
"Исполнитель",
"[%artist%]",
TextFont, Math.round(0.8 * (22 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 17, 2),
new StringFormat(
"Альбом",
"$if($and(%album%,%date%),%album%' - '%date%,$if(%album%,%album%,[%date%]))",
TextFont, Math.round(0.72 * (22 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 17, 2),
new StringFormat(
/* "Дополнение",
"[%AINFO%]",
TextFont, Math.round(0.72 * (18 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 17, 2),
new StringFormat(
*/ "Жанр",
"[%genre%]",
TextFont, Math.round(0.72 * (22 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 15, 2),
new StringFormat(
"Кодек",
"[%codec%][ %codec_profile%][ $info(bitrate) кб/сек]",
TextFont, Math.round(0.72 * (20 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 15, 2),
new StringFormat(
"Размер",
"$if($strstr([$upper($ext(%path%))],CUE),CUE,$div(%filesize%,1048576)','$substr($muldiv(%filesize%,100,1048576),2,3)$get(t2)' Mб')",
TextFont, Math.round(0.72 * (20 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 15, 2),
new StringFormat(
"Проиграно:",
"$ifgreater(%play_count%,0,Played %play_count% Times, )",
TextFont, Math.round(0.72 * (15 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 15, 2),
new StringFormat(
"Последнее проигрывание",
"$if(%last_played%,'Last Played '$cut(%last_played%,10),)",
TextFont, Math.round(0.72 * (15 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 15, 2),
new StringFormat(
"Нормализация уровня Трека",
"$if(%__replaygain_track_gain%,'TG: '$if3($replace(%__replaygain_track_gain%,' ',$get(t2)' '),'0'$get(t2)' дБ'),)",
TextFont, Math.round(0.72 * (15 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 15, 2),
new StringFormat(
"Нормализация уровня Альбома",
"$if(%__replaygain_album_gain%,'AG: '$if3($replace(%__replaygain_album_gain%,' ',$get(t2)' '),'0'$get(t2)' дБ'),)",
TextFont, Math.round(0.72 * (15 + Properties.Lines.Size)), FontStyles.Regular, LineStrFmt, 15, 2));
TotalFrames2 = Math.ceil(TotalFrames - LineDelay * LineFormats.length);
Text_tops = new Array(TotalFrames2);
Opacitys = new Array(TotalFrames2);
for (var i = 0; i < Properties.Lines.Number; i++) {
Oldlines.push(new Line(LineFormats[i]));
Newlines.push(new Line(LineFormats[i]));
}
}
on_init();
function on_size() {
if (!window.Width || !window.Height) return;
ww = window.Width;
wh = window.Height;
whtip = wh-20;
w2 = ww - 2 * hm;
RollingDistance = Math.round(whtip * 5 / 4);
ResetLines(Oldlines);
CursorFollow(Properties.Panel.CursorFollowMode);
for (var i = 0; i < TotalFrames2; i++) { // Write animation data in arrays
Text_tops[i] = -Math.ceil((Math.cos(3.14 * ((i + 1) / TotalFrames2 + 1)) + 1) * RollingDistance / 2);
Opacitys[i] = Math.ceil((i + 1) * 255 / TotalFrames2);
}
}
//===================================================================================================================================================
// mouse callbacks {{
function on_mouse_move(x, y) {
if (window.Width < 185 || window.Height < 100) return;
if (DownLine) {
if (DownLine.isXYok(x, y)) {
if (DownLine.state != 2) DownLine.ChangeState(2);
} else if (DownLine.state != 1) DownLine.ChangeState(1);
} else {
for (var i = 0; i < Oldlines.length; i++)
if (Oldlines[i].isXYok(x, y)) {
if (HoverLine != Oldlines[i]) {
if (HoverLine) HoverLine.ChangeState(0);
HoverLine = Oldlines[i];
HoverLine.ChangeState(1);
}
break;
}
if (i == Oldlines.length) {
if (HoverLine) {
HoverLine.ChangeState(0);
HoverLine = undefined;
}
}
}
}
function on_mouse_lbtn_down(x, y) {
if (window.Width < 185 || window.Height < 100) return;
if (HoverLine) {
DownLine = HoverLine;
DownLine.ChangeState(2);
}
}
function on_mouse_lbtn_up(x, y) {
if (window.Width < 185 || window.Height < 100) return;
if (DownLine) {
if (DownLine.state == 2) {
DownLine.OnClick();
DownLine.ChangeState(1);
}
DownLine = undefined;
on_mouse_move(x, y);
}
}
function on_mouse_leave() {
if (window.Width < 185 || window.Height < 100) return false;
if (HoverLine) {
HoverLine.ChangeState(0);
HoverLine = undefined;
}
}
function on_mouse_rbtn_down(x, y, vkey) {
rbtnDown = true;
}
function on_mouse_rbtn_up(x, y, vkey) {
if (window.Width < 185 || window.Height < 100) return false;
if (rbtnDown) {
rbtnDown = false;
if (vkey == MK_SHIFT) {
return false; // if shift button pressed, show default context menu.
} else {
ContextMenuShowing = true;
ShowContextMenu(x, y);
return true;
}
}
}
// mouse callbacks }}
//===================================================================================================================================================
// playback Callbacks {{
function on_playback_new_track() {
if (MetaDB) {
window.UnwatchMetadb();
}
if (Properties.Panel.CursorFollowMode == CursorFollowMode.Auto || Properties.Panel.CursorFollowMode == CursorFollowMode.OnlyStopped || Properties.Panel.CursorFollowMode == CursorFollowMode.Never) {
// If PopupMenu showing, pause this procedure and backup new metadb, this process will continue after exit the menu.
if (ContextMenuShowing) {
if (CursorFollowAutoTimerID) CursorFollowAutoTimer.Stop();
MetadbBackup = fb.GetNowPlaying();
FOCUSFLAG = false;
return;
}
if (WaitTimerID) {
WaitTimer.Stop();
}
if (Properties.Panel.CursorFollowMode == CursorFollowMode.Auto) {
if (fb.CursorFollowPlayback && fb.PlayingPlaylist != fb.ActivePlaylist) SkipFocusChange = true;
}
MetaDB = fb.GetNowPlaying();
MetaDBNowPlaying = true;
StartAnimationCycle();
if (MetaDB) {
window.WatchMetadb(MetaDB);
}
}
}
// reason: user, eof, starting_another, shutting_down:0123
function on_playback_stop(reason) {
if (!reason || reason == 1) {
switch (Properties.Panel.CursorFollowMode) {
case CursorFollowMode.Auto:
MetaDB = fb.GetFocusItem();
MetaDBNowPlaying = false;
if (CursorFollowAutoTimerID) {
CursorFollowAutoTimer.Stop();
} else {
StartAnimationCycle();
}
break;
case CursorFollowMode.OnlyStopped:
MetaDB = fb.GetFocusItem();
MetaDBNowPlaying = false;
StartAnimationCycle();
break;
case CursorFollowMode.Always:
break;
case CursorFollowMode.Never:
StartAnimationCycleDefaultText();
break;
}
}
}
// playback callbacks }}
//===================================================================================================================================================
// other events
function on_item_focus_change() {
if (MetaDB) {
window.UnwatchMetadb();
}
if (SkipFocusChange) {
SkipFocusChange = false;
return;
}
switch (Properties.Panel.CursorFollowMode) {
case CursorFollowMode.Auto:
if (ContextMenuShowing) {
if (CursorFollowAutoTimerID) CursorFollowAutoTimer.Stop();
MetadbBackup = fb.GetFocusItem();
FOCUSFLAG = true;
return;
}
if (fb.IsPlaying) {
CursorFollowAutoTimer.Stop();
//NeedCursorFollowAutoTimer = true;
CursorFollowAutoTimer.Start();
}
MetaDB = fb.GetFocusItem();
MetaDBNowPlaying = false;
WaitTimer.Stop();
WaitTimer.Start();
break;
case CursorFollowMode.OnlyStopped:
if (!fb.IsPlaying) {
if (ContextMenuShowing) {
if (CursorFollowAutoTimerID) CursorFollowAutoTimer.Stop();
MetadbBackup = fb.GetFocusItem();
FOCUSFLAG = true;
return;
}
MetaDB = fb.GetFocusItem();
MetaDBNowPlaying = false;
WaitTimer.Stop();
WaitTimer.Start();
}
break;
case CursorFollowMode.Always:
// If PopupMenu showing, pause this procedure and backup new metadb, this process will continue after exit the menu.
if (ContextMenuShowing) {
if (CursorFollowAutoTimerID) CursorFollowAutoTimer.Stop();
MetadbBackup = fb.GetFocusItem();
FOCUSFLAG = true;
return;
}
MetaDB = fb.GetFocusItem();
MetaDBNowPlaying = false;
WaitTimer.Stop();
WaitTimer.Start();
break;
case CursorFollowMode.Never:
break;
}
}
function on_metadb_changed() {
ResetLines(Oldlines);
window.RepaintRect(5,40,ww-10,wh-70);
}
function on_playlist_items_removed(playlist, new_count) {
on_playlists_changed();
}
function on_playlist_switch() {
on_playlists_changed();
}
function on_playlists_changed() {
if (fb.PlaylistItemCount(fb.ActivePlaylist) == 0) {
if (Properties.Panel.CursorFollowMode == CursorFollowMode.Auto || ((Properties.Panel.CursorFollowMode == CursorFollowMode.OnlyStopped) && !fb.IsPlaying) || Properties.Panel.CursorFollowMode == CursorFollowMode.Always) {
if (Properties.Panel.CursorFollowMode == CursorFollowMode.Auto && fb.IsPlaying) {
CursorFollowAutoTimer.Stop();
//NeedCursorFollowAutoTimer = true;
CursorFollowAutoTimer.Start();
}
StartAnimationCycleDefaultText();
}
} else on_item_focus_change();
}
var c3=1;
var clock_timer = window.CreateTimerInterval(1000);
var d = new Date();
var datefont3 = gdi.Font("calibri", 26);
// =============================================== //
on_size();
function on_paint(gr) {
var color = RGB(100, 110, 110);
var color4 = RGB(000, 200, 250);
gr.SetTextRenderingHint(5);
gr.SetSmoothingMode( 4 );
gr.SetInterpolationMode( 1 );
var yOffset = tm;
gr.FillGradRect(0,0,ww, wh,200,RGBA(255,255,255,255),color);
gr.FillEllipse(ww>>4, wh/3, 2*ww, 3/2*wh, RGBA(100, 110, 110,110));
for (var i = 0; i < Oldlines.length; i++) {
var temp = yOffset + Oldlines[i].top + Oldlines[i].yOffset + Oldlines[i].Height;
if (Oldlines[i].display != 0 && Oldlines[i].Height && temp > 0 && temp <= whtip) { // Lines out of panel will not be drawn.
Oldlines[i].Draw(gr, yOffset + Oldlines[i].top);
} else Oldlines[i].display = 0;
}
yOffset += RollingDistance;
for (var i = 0; i < Newlines.length; i++) {
if (Newlines[i].Height && yOffset + Oldlines[i].top + Newlines[i].yOffset + Newlines[i].Height <= whtip) {
Newlines[i].display = 1;
Newlines[i].Draw(gr, yOffset + Newlines[i].top);
} else Newlines[i].display = 0;
}
//=============================== clock
gr.FillSolidRect(0, 0, ww, 40,RGBA(20,20,20,250));
var S = 0;
while (S < 40) {
gr.FillSolidRect(0,S,ww,3,RGBA(215,215,215,95));
S = S+6;
}
gr.DrawString(d.toLocaleDateString(), gdi.Font("calibri", 28, 0), color4, 0, 16, ww, 0,0x11005000 );
gr.FillGradRect(0,wh-40,ww, wh-48,-90,RGBA(60,60,50,220),RGBA(30, 30, 30,250));
gr.DrawRoundRect(9,35, ww-14, wh-78, 4, 4, 9, RGBA(000,95,155,190));
var B = wh-42;
while (B < wh) {
gr.FillSolidRect(3,B,ww-6,3,RGBA(155,155,155,150));
B = B+6;
}
gr.DrawRoundRect(10,38, ww-20, wh-76,4,4, 3.0, RGBA(000, 180, 250,50))
gr.DrawRoundRect(1,30, ww-6, wh-68, 10, 10, 2.0, RGB(100,110,120));
var weekday=new Array(7);
weekday[0]="Воскресенье";
weekday[1]="Понедельник";
weekday[2]="В т о р н и к";
weekday[3]="С р е д а";
weekday[4]="Ч е т в е р г";
weekday[5]="П я т н и ц а";
weekday[6]="С у б б о т а";
if ( c3 > 0 ){ var n = weekday[d.getDay()]+" "+ d.getHours() % 24+":"+d.getMinutes(); }
else { var n = weekday[d.getDay()]+" "+ d.getHours() % 24+" "+d.getMinutes();}
gr.DrawString(n , gdi.Font("calibri", 28),color4, -1, wh-18, ww, 0, 0x11005000);
}
// =============================================== //
function on_timer(id) {
d = new Date();
window.RepaintRect(0,0,ww,40);
window.RepaintRect(0,wh-40,ww,40);
c3 = -c3;
}
Ждем скрипта)kgena_ua:Занялся опять "Get Covers (Artwork) && radio logos".
Да есть.kutuzof:есть фризы, только при включении автоцикла
//images = []; // заремил
if (files.length > images.length){
images = []; // добавил
var i = 0;
do {
var tmp;
try {
tmp = resize_image(gdi.Image(files[i]))
if (typeof tmp == 'object' ) {
images.push(tmp);
}
} catch(e) {}
i++;
} while (i < files.length);
}
ну да, так примерноMC Web:Как я понял Marakobes, хочет что то похожее на данную структуру вложений папок или похожую:
Подождем, посмотрим.MC Web:данное исправление помогает
Marakobes, я сильно не занимался этим, так писал что в голову приходило (на скорую). У самого сейчас сохранилось на диск, в корень, где лежит Фубар. Оказалось, что название папки с исполнителем не совсем соответствует имени исполнителя.Marakobes:ой, сохраняет
Тут не понятно, подробнее.Marakobes:сохраняет то 6 то 12 не пойму где покрутить, лимит в пропертис 100
Мне давно стало понятно, что из всего этого ничего путного не получится.AHAPXICT:Уже начинаю терять интерес к этой теме, пропал энтузиазм и к JS панели(так и не заработала)
Во как. А мне не понятно. И писал не только про JS панель, но про новую бету плеера. И почему ты решил что из всего этого нечего не получится? Уже почти как пол года перевёл одну из сборок на JS панель(+бонусы), вторая так и осталась на WSH, как говорится в ассортименте. А если последняя JS начнёт работать без глюков на разных системах, то это будет вообще шикарно. Мне эта идея нравится. Так что если всё будет работать как полагается, то менять однозначно!MC Web:Мне давно стало понятно, что из всего этого ничего путного не получится.
Вернуться в Секреты foobar2000