Проблема с lyrics и биографией исполнителей.

Список разделов Аудиоплеер foobar2000 Есть вопрос!

Описание: У вас проблемы с foobar2000 и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть. Подробно описывайте проблему. Не забывайте указать версию плеера, название сборки, по возможности добавить скриншоты проблемы.

Сообщение #1 love123321 » 18.11.2015, 22:36

Здравствуйте уважаемые пользователи.
Столкнулся с 2-мя проблемами следующего характера.
1)Не отображается текст ни одной песни,хотя заходил на lyrics.com и там текст этой песни есть.
2)Не отображается биография исполнителей.Отображается только фотография и несколько строчек текста(на рисунке видно)
Пожалуйста,кому не сложно,объясните возможно это исправить или нет?
Вложения
Lyric-min.png
Текст песен
Биография-min.png
Биография
love123321
Автор темы, Новичок
Репутация: 0
С нами: 4 года 11 месяцев

Сообщение #2 megane68 » 19.11.2015, 05:48

love123321, Это проблема работы поиска панели лирики.
Можете до её обновления оставить только Гугл Сирч. Но придётся жмакать Нехт лирикс.
Биография давно так работает, тем более, что ласт.фм движок поменял.
megane68 M
Мастер
Репутация: -18
С нами: 11 лет 8 месяцев

Сообщение #3 vladj » 19.11.2015, 12:32

Плагин лирики старый, тут 6 серверов, у меня 9...заменить на более свежий, пусть и не на русском настройки будут.
Верхние три строки переместить вниз что-бы не шел лишний поиск на компе, а сразу в инет плагин рвался.
По био...научится менять скрипты и поставить скрипт био Now Playing от "marc2003".
Качать биографию будет очень полную плюс 5 картинок даже при прослушивании инет радио.
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 402
С нами: 10 лет 8 месяцев

Сообщение #4 LUR » 19.11.2015, 14:40

vladj писал(а):пусть и не на русском настройки будут
будут, если взять мой перевод :wink: За лирику отвечает плагин foo_uie_lyrics3
LUR M
Модератор
Аватара
Возраст: 37
Откуда: Минск
Репутация: 269
С нами: 7 лет 10 месяцев

Сообщение #5 MC Web » 19.11.2015, 15:30

vladj писал(а):Плагин лирики старый, тут 6 серверов, у меня 9
Там и так стоит последняя официальная версия плагина, только локализованная и в ней не может быть 9 серверов.

1. Нужно подключить Поиск Google или увеличить количество БД. Для увеличения БД надо установить дополнительные компоненты, которые увеличивают их число. Их можно скачать здесь.

2. Для отображения биографии в данной теме есть два варианта, смотрим здесь.
Сборка foobar2000 RU DarkOne + DUIFoon от MC Web
MC Web
Гуру
Аватара
Репутация: 217
С нами: 7 лет 1 месяц

Сообщение #6 love123321 » 19.11.2015, 23:54

Спасибо всем за помощь,сейчас буду пробовать все варианты.Очень радует что люди на форуме такие отзывчивые :smile:

Добавлено спустя 26 минут 55 секунд:
1. Нужно подключить Поиск Google или увеличить количество БД. Для увеличения БД надо установить дополнительные компоненты, которые увеличивают их число. Их можно скачать здесь.
Увеличил количество БД,подключил поиск Google.Текст начало находить чаще но к некоторым песням выдает странные вещи.Прикрепил скрины.Только после нажатия на кнопку "Следующий текст песен"(частенько не 1 раз) выдает правильный текст.Может беда в какой-то из БД и ее лучше отключить,не подскажите?Или пусть лучше оставить все как есть чтобы увеличить вероятность нахождения текста?

Добавлено спустя 23 минуты 31 секунду:
2. Для отображения биографии в данной теме есть два варианта, смотрим здесь.
Нашел 1 вариант через скрипт lastfm_bio.vbs .Сделал все по инструкции и все заработало :smile: .Вот только хотелось бы на русском чтобы биографию грузило.Почитал в комментариях что нужно просто выбрать русский сервер и если биографию выдаст на английском то на русском ее просто нету.Во вкладке "Загрузка биографии>С сервера Last.fm" стоит русский сервер но биографию показывает всё равно на английском.Нашел еще какой-то скрипт от marc2003,говорят работает хорошо.Вот теперь сижу думаю может по первому варианту как-то получится настроить или делать все по скрипту от marc2003

Еще в догонку спрошу.Можно ли сделать чтобы обложки к альбомам можно было смотреть не в порядке "Лицевая обложка","Задняя обложка", "Испольнитель" "Диск" а например чтобы foobar брал все картинки подряд с папки с обложками к альбому?Например у меня альбом Lonesome Crow группы Scorpions и в папке с альбомом есть папка с обложками Scans(в моем случае),но в ней присутствуют не только обложки по выше перечисленным критериям а их там штук 10-12.Можно так сделать чтобы фубар брал все эти картинки не сортируя их а просто при клике по картинке при проигрывании альбома переключал их подряд начиная с первой в папке?
Вложения
Безымянный3-min.png
Скрин к лури
Безымянный2-min.png
Скрин к лури
Безымянный-min.png
Скрин к лури
love123321
Автор темы, Новичок
Репутация: 0
С нами: 4 года 11 месяцев

Сообщение #7 vladj » 20.11.2015, 11:26

love123321 писал(а):например чтобы foobar брал все картинки подряд с папки
Если в сборке есть отдельная панель для показа картинок, то меняешь ее на WSH панель и туда
скрипт от "Maxim Terpilovsky's script Artwork". В панели будет показыватся любое кол-во картинок.
Сейчас у себя спецом поменял название папки с картинками в альбоме с имидж на сканы.
Из папки с таким названием все нормально подхватываются.
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 402
С нами: 10 лет 8 месяцев

Сообщение #8 megane68 » 20.11.2015, 12:13

MC Web, Огромное спасибо!!! Экстендед как нельзя кстати.
Вроде только недавно работал какой- то один сервер и бац, даже не заметил как перестал.
С биографией попозжа разберусь, бо на инглише как-то не катит.
megane68 M
Мастер
Репутация: -18
С нами: 11 лет 8 месяцев

Сообщение #9 love123321 » 20.11.2015, 16:00

скрипт от "Maxim Terpilovsky's script Artwork"
Спасибо,ваш совет очень помог.Теперь обложки можно перелистывать прямо все которые прикреплены к альбому.Не могу поверить своему счастью :biggrin:
Может кому понадобится,вот код:
Код: Выделить всё
// Maxim Terpilovsky's script
// http://terpilovsky.ru
// Artwork / Updated 27-01-2014

DT_END_ELLIPSIS = 0x00008000;
DT_EDITCONTROL = 0x00002000;
DT_TOP = 0x00000000;
DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_VCENTER = 0x00000004;
DT_BOTTOM = 0x00000008;
DT_WORDBREAK = 0x00000010;
MF_STRING = 0x00000000;
MK_CONTROL = 0x0008;
DT_CALCRECT = 0x00000400;
MF_POPUP = 0x00000010;
MK_SHIFT = 0x0004;
DT_NOPREFIX = 0x00000800;

function StrFmt(alignH,alignV,trim,flag){ return ((alignH<<28)|(alignV<<24)|(trim<<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)); }

var FSO = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var ww, wh;
var g_hover = 0;

if ( utils.CheckFont( "Segoe UI" ) ) {
    var g_font       = gdi.Font("Segoe UI", 13);
    var g_font2      = gdi.Font("Segoe UI", 12, 0);
    var g_font_small = gdi.Font("Segoe UI", 11, 0);
} else {
   var g_font       = gdi.Font("Tahoma", 13);
    var g_font2      = gdi.Font("Tahoma", 11, 1);
    var g_font_small = gdi.Font("Tahoma", 10, 1);
}



/*var arrow_left, arrow_right, info_hover = 0;
try {
    var arrow_left  = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\arrow_left.png" );
    var arrow_right = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\arrow_right.png" );
    var picture = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\picture.png" );
    var user_image     = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\user.png" );
} catch(e) {
    // fb.trace(e.message);
}
*/



function CoverShow( metadb ) {

   this.CachedPath = 0;
    this.CachedCoversNumber = 0;


    // Current Mode
    this.CurrentMode        = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'displayed_cover', 1) );

    // Current Mode
    this.DisplayMode        = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'disp_mode', 1) );

   // Priority
   this.Priority           = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'cover_priority', 2) );

   // Exclude
   this.Exclude            = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'exclude_covers', 0) );

   // Pattern
    // 1 - *keywords*.*
    // 2 - keywords.*
   this.MatchPattern       = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'match_pattern', 1) );

   // Aspect ratio
   this.Aspect             = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'covers_aspect', 1) );

   // Gesture
   this.GestureInverted    = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'gesture_inverted', 0) );

   // Covers from Root folder
   this.RootCovers         = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'root_covers', 1) );

   // Covers from subfolders
   this.SubCovers          = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'sub_covers', 1) );


   // Interval
   this.Interval           = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'interval', 1) );
    this.Intervals          = new Array(5000, 15000, 30000, 60000, 120000);

    cache_path              = utils.ReadINI(fb.FoobarPath + 's7e.ini', 'bio', 'cache_path');
    this.CachePath          = cache_path ? cache_path : false;


   // No Cover and Case
   //try {
      //this.NoCover = gdi.Image( fb.ProfilePath + "s7e_files\\images\\nocover.png" );
      //this.Case = gdi.Image( fb.ProfilePath + "s7e_files\\images\\case.png" );
   //}
   //catch(e) { }

   // Metadb
   this.OutputMetadb = function() {

        return ( this.CurrentMode == 3 || !fb.IsPlaying ? fb.GetFocusItem(true) : fb.GetNowPlaying() );

   }


    this.FormatMeta = function( meta, db ) {

        if ( db )  {
          s     = fb.TitleFormat("%" + meta + "%").EvalWithMetadb( db );
          s     = s.replace(/[\/\\\:\*\?\"\<\>\|]/g,'-');
            s     = s.replace(/(^\s+)|(\s+$)/g, "");
            return s;
        } else return '';

    }

   // Search for files
   this.Search = function( array, dir) {

      var e = new Enumerator( dir.Files );

      while( !e.atEnd() ) {
         var name = e.item().Name;
         if( name.match(/\.(jpg|jpeg|png|gif|bmp|tiff)$/i) ) {
            array.push( e.item().Path );
         }
         e.moveNext();
      }

   }

   // Find all covers in the folder
   this.GetExternalCovers = function( path ) {

      var files = [];
      var files_this = [];
      var files_subs = [];
      var covers = [];

      try {
         var dir  = FSO.GetFolder( path );
            var root = dir.ParentFolder;

         this.Search(files_this, dir);
            this.Search(files_this, root);

            if ( this.SubCovers ) {

             var e = new Enumerator( dir.SubFolders );

             for(; !e.atEnd(); e.moveNext() ) {
                this.Search(files_subs, e.item() );
             }

            }

      } catch(e) {
            // fb.trace( 'this.GetExternalCovers / path: ' + e.message );
        }


      if ( files_this.length > 0 || files_subs.length > 0 ) {

            files_this.sort();
            files_subs.sort();
            files = files.concat(files_this, files_subs);

            var k = files.length;
            files.reverse();
            while (k--){

            var name = files[k];

                if ( this.MatchPattern == 1 ) {
                    if ( name.match(/.*(cover|front|folder)([^\\]*)\.(jpg|jpeg|gif|png|bmp|tiff)$/i) ) {
                        covers.push( name );
                        files[k] = null;
                    }
                }
                else {
                    if ( name.match(/\\(cover|front|folder)\.(jpg|jpeg|gif|png|bmp|tiff)$/i) ) {
                        covers.push( name );
                        files[k] = null;
                    }
                }
         }

         overall = covers;


         k = files.length;
            while (k--){
                var cur = files[k];
            if ( typeof( cur ) == 'string' ) overall.push( cur );
         }

         return overall;

      }
      else return new Array();

   }


   this.GetCovers = function( path ) {

      switch ( this.Exclude ) {

         case 0:
               var embedded  = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers( this.Metadb );
               var external  = this.GetExternalCovers( path );

               var allcovers = [];

               if ( this.Priority == 1 ) allcovers = allcovers.concat(embedded, external);
               else                      allcovers = allcovers.concat(external, embedded);

               this.Covers = allcovers;
            break;


         case 1:
               var external = this.GetExternalCovers( path );
               this.Covers = external;
            break;


         case 2:
               var embedded = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers( this.Metadb );
               this.Covers = embedded;
            break;

      }


      if ( this.Covers.length > 0 ) {

         try {

                var temp = this.Covers[0];
                return ( typeof temp == 'object' ? temp.Clone( 0, 0, temp.Width, temp.Height ) : gdi.LoadImageAsync( window.ID, temp ) );

         }
         catch(e) { return undefined; }

      }
      else {
         this.Covers = false;
         return 0;
      }

   }


   this.GetEmbeddedCovers = function( metadb ) {

        if ( metadb ) {
            var embedded = [];
            var c = 5;
            while ( c-- ) {

                if ( c == 3 ) continue;

                var temp = utils.GetAlbumArtEmbedded( metadb.RawPath, c );
                if ( temp ) embedded.push( temp );

            }
            return embedded;
        } else return [];

   }


   this.CompareDirs = function() {

        metadb = this.OutputMetadb();
        try {
            artist = this.Eval( this.Metadb, 'artist'  );
            metapath = metadb.Path;
            metapath = this.DisplayMode == 2 && this.CachePath && FSO.FolderExists( this.CachePath + '\\' + artist ) ? this.CachePath + '\\' + artist : metapath.replace(/\\([^\\]*)$/g, '');
        }
        catch (e) { metapath = 0; }

        if ( metapath ) {

            switch ( this.Exclude ) {

                case 0:
                        var embedded  = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers( this.Metadb );
                        var external  = this.GetExternalCovers( metapath );

                        var allcovers = [];

                        if ( this.Priority == 1 ) allcovers = allcovers.concat(embedded, external);
                        else                      allcovers = allcovers.concat(external, embedded);

                        //this.Covers = allcovers;
                    break;


                case 1:
                        var allcovers = this.GetExternalCovers( metapath );
                        //this.Covers = external;
                    break;


                case 2:
                        var allcovers = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers();
                       
                        //this.Covers = embedded;
                    break;

            }

         var allcovers = new Array();
            allcovers = allcovers.concat(embedded, external);

            return this.CachedCoversNumber == allcovers.length;
        }
    }


   this.ChangeImage = function( val ) {
      this.CurrentCover = val;
   }


   this.NextCover = function() {

      if ( this.Covers && this.Covers.length > 1 ) {

         this.CurrentCoverNumber = this.CurrentCoverNumber + 1 == this.Covers.length ? 0 : this.CurrentCoverNumber + 1;

         try {

                var temp = this.Covers[ this.CurrentCoverNumber ];
                var img = ( typeof temp == 'object' ) ? temp.Clone(0,0,temp.Width,temp.Height) : gdi.LoadImageAsync(window.ID, temp);

         } catch (e) { var img = undefined; }


            this.ChangeImage( img );
            window.Repaint();

      }
        else if ( !this.Covers ) { this.Update();  }

   }

    this.MultipleCovers = function() {

        return ( this.Covers && this.Covers.length > 1 );

    }

   this.PrevCover = function() {

      if ( this.Covers && this.Covers.length > 1 ) {

         this.CurrentCoverNumber = ( this.CurrentCoverNumber == 0 ) ? this.Covers.length - 1 : this.CurrentCoverNumber - 1;

         try {

                var temp = this.Covers[ this.CurrentCoverNumber ];
                var img = ( typeof temp == 'object' ) ? temp.Clone(0,0,temp.Width,temp.Height) : gdi.LoadImageAsync(window.ID, temp);

         } catch (e) { var img = undefined; }

            this.ChangeImage( img );
            window.Repaint();

      }
        else if ( !this.Covers ) { this.Update(); }

   }


   this.StopTimer = function() {
      this.CycleTimer ? window.ClearInterval(this.CycleTimer) : '';
   }

   this.StartTimer = function() {

        if ( this.CycleTimer ) window.ClearInterval( this.CycleTimer );
      if ( this.CurrentMode == 2 ) this.CycleTimer = window.SetInterval( function() { Cover.NextCover() }, this.Intervals[ this.Interval ] );

   }

    this.Reset  = function() {

        this.Covers = false;
        this.CoverX = null;
        this.CoverY = null;
        this.CurrentCoverNumber = 0;
        this.CurrentCover = 0;
        this.CachedPath = '';
        this.CachedCoversNumber = 0;
        this.CachedArtist = '';
    }


   this.Eval = function( meta, field ) {

        path = meta ? meta.Path : '';
      if ( path ) return path.indexOf('://') > 0 ?  fb.TitleFormat("[%" + field + "%]").Eval( true ) : fb.TitleFormat("[%" + field + "%]").EvalWithMetadb( meta );

   }


   this.Update = function( metadb ) {

      this.Metadb = metadb ? metadb : this.OutputMetadb();
       
        artist = this.Eval( this.Metadb, 'artist'  );

      try {
            dir = this.Metadb.Path;
            dir = dir.replace(/\\([^\\]*)$/g, '');
            this.MetaPath = this.DisplayMode == 2 && this.CachePath && FSO.FolderExists( this.CachePath + '\\' + artist ) ? this.CachePath + '\\' + artist : dir;
        }
      catch (e) { this.MetaPath = 0; }

      if ( this.MetaPath && artist ) {

            var artist_temp = this.Eval( this.Metadb, 'artist'  );
            var a = this.CachedPath ? this.CachedPath : ' ';
            var b = this.MetaPath;

            if ( a != b || ( this.CachedArtist != artist_temp ) ) {

                this.Covers             = false;
            this.CurrentCoverNumber = 0;
                this.CurrentCover       = this.GetCovers( this.MetaPath );
                this.CachedPath         = this.MetaPath;
                this.CachedCoversNumber = this.Covers != undefined ? this.Covers.length : 0;
                this.CachedArtist       = artist_temp;
                window.Repaint();

         }

      }
      else {

            this.Reset();
            window.Repaint();

        }

   }

   //this.Update( metadb);
    this.CachedArtist = '';
    this.CachedCoversNumber = this.Covers != undefined ? this.Covers.length : 0;
   this.CycleTimer = 0;
   this.TimerStarted = false;
    this.LbtnPressed = 0;
    this.X1 = 0;
    this.X2 = 0;
    this.X  = 0;
    this.MouseGesture = 0;
    this.CoverX = null;
    this.CoverY = null;
    this.Covers = undefined;
}


var Cover = new CoverShow();


function on_size() {

    ww = window.Width;
    wh = window.Height;
///    if ( ww && wh ) { Cover.Reset(); Cover.Update(); }

}


function on_paint( gr ) {

    //d = new Date();
    //t = d.getTime();

        gr.SetSmoothingMode( 4 );
        gr.SetInterpolationMode( 1 );
///        gr.FillSolidRect(0, 0, ww, wh, RGB(255,255,255));


        if ( Cover.Covers ) {

            // Bottom box
///            gr.FillSolidRect( 0, wh - 27, ww, 27, RGBA(255,255,255,150));


            // Check if it's corrupted or not loaded
            if ( !Cover.CurrentCover ) {

                Cover.CoverX = null;
                Cover.CoverY = null;

                var cov = Cover.Covers[ Cover.CurrentCoverNumber ];

                if ( typeof cov == 'object' ) {

                    Cover.CurrentCover = cov == null ? false : cov.Clone(0,0,cov.Width,cov.Height);
                    var image_name = 'Встроенное изображение';

                }
                else {

                    Cover.CurrentCover = gdi.Image( cov );
                    if ( Cover.CurrentCover == null ) Cover.CurrentCover = false;
                    var image_name = 'Изображение';

                }

                if ( !Cover.CurrentCover ) gr.GdiDrawText( image_name + ' вероятно повреждено и не может быть отображено.', g_font, RGB(0,0,0), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);               
                if ( !Cover.CurrentCover ) gr.GdiDrawText( image_name + ' вероятно повреждено и не может быть отображено.', g_font, RGB(140,164,179), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);               

            }


            if ( typeof Cover.CurrentCover == 'object' ) {

                var img = Cover.CurrentCover;

                // Width, height, coords
///                var resulting_height = wh - 53;

                if ( Cover.Aspect ) {

                    if ( img.Width > ww || img.Height > wh ) {
//                    if ( img.Width > ww || img.Height > resulting_height ) {
                        var iw1 = ww;
                        var iw2 = img.Width / ( img.Height / wh );
///                        var iw2 = img.Width / ( img.Height / resulting_height );
                        var ih1 = wh;
///                        var ih1 = resulting_height;
                        var ih2 = img.Height / ( img.Width / ww );
                        var iw = Math.min(iw1, iw2);
                        var ih = Math.min(ih1, ih2);

                    }
                    else {
                        var iw = img.Width;
                        var ih = img.Height;
                    }

                }
                else {

                    var iw = ( img.Width > ww ) ? ww : img.Width;
                    var ih = ( img.Height > wh ) ? wh : img.Height;
///                    var ih = ( img.Height > resulting_height ) ? resulting_height : img.Height;

                }

                img = img.CreateRawBitmap();

                var x = (iw < ih) ? ((iw < ww) ? ((ww - iw)/2) : 0 ) : ((iw >= ww) ? 0 : ((ww - iw)/2));
                var y = (iw > ih) ? ((ih < wh) ? ((wh - ih)/2) : 0 ) : ((ih >= wh) ? 0 : ((wh - ih)/2));
///                var y = (iw > ih) ? ((ih < resulting_height) ? ((wh - ih)/2) : 0 ) : ((ih >= resulting_height) ? 0 : ((wh - ih)/2));

                Cover.CoverX = x;
                Cover.CoverY = y;

                // Draw cover
                gr.GdiDrawBitmap( img, x, y, iw, ih, 0, 0, img.Width, img.Height );

                if((wh - ih)/2 < 15 && g_hover == 1){
                    gr.FillSolidRect (0, 0, ww, 18, RGBA(0,20,30,150));                 
                    gr.FillSolidRect (0, wh - 18, ww, wh, RGBA(0,20,30,150));
                }

                // Resolution
///                gr.GdiDrawText( Cover.CurrentCover.Width + " ? " + Cover.CurrentCover.Height, g_font_small, RGB(0,0,0), 0, wh - 25, ww, 25, DT_CENTER | DT_VCENTER | DT_CALCRECT);
                if (g_hover == 1) {
                    gr.GdiDrawText( Cover.CurrentCover.Width + " X " + Cover.CurrentCover.Height, g_font_small, RGB(0,0,0), 7, 1, ww, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
                    gr.GdiDrawText( Cover.CurrentCover.Width + " X " + Cover.CurrentCover.Height, g_font_small, RGB(140,164,179), 6, 0, ww, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
                }

                // Filesize
///                try { var size = Math.round( FSO.GetFile( Cover.Covers[ Cover.CurrentCoverNumber ] ).size / 1024 ) + " KB"; }
///                catch(e) { var size = ''; }
///                gr.GdiDrawText( size, g_font_small, RGB(0,0,0), 6, wh - 25, ww, 25, DT_LEFT| DT_VCENTER | DT_CALCRECT);


                // Release graphics
                var graphics = Cover.CurrentCover.GetGraphics();
                Cover.CurrentCover.ReleaseGraphics( graphics );
                Cover.CurrentCover.Dispose();
                Cover.CurrentCover = 0;

            }
            else if ( typeof Cover.CurrentCover == 'number' ) {

                gr.GdiDrawText( 'Загрузка...', g_font2, RGB(0,0,0), 1, 1, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);
                gr.GdiDrawText( 'Загрузка...', g_font2, RGB(140,164,179), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);

            }

            // Cover Number

            if (g_hover == 1) {
                gr.GdiDrawText( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, g_font_small, RGB(0,0,0), -5, wh - 20, ww, 25, DT_RIGHT | DT_VCENTER | DT_CALCRECT);
                gr.GdiDrawText( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, g_font_small, RGB(140,164,179), -6, wh - 21, ww, 25, DT_RIGHT | DT_VCENTER | DT_CALCRECT);
            }
///            gr.DrawLine( 0, wh - 25, ww, wh - 25, 1, RGB(218,219,220));

            // Filename
            if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) var filename = 'Embedded';
            else if ( Cover.Covers[ Cover.CurrentCoverNumber ] ) var filename = Cover.Covers[ Cover.CurrentCoverNumber ].replace(/(.*)\\(.*)$/i,"$2");

///            estimate = gr.EstimateLineWrap(filename, g_font_small, ww - 10);
///            estimate = estimate.toArray();

///            if ( picture && user_image ) gr.DrawImage( Cover.DisplayMode == 2 ? user_image : picture, 5, 5, picture.Width, picture.Height, 0, 0, picture.Width, picture.Height, angle = 0, alpha = 255);
            if (g_hover == 1) {
                gr.GdiDrawText( filename, g_font_small, RGB(0,0,0), 6, wh - 17, ww - 39, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
                gr.GdiDrawText( filename, g_font_small, RGB(140,164,179), 5, wh - 18, ww - 40, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
            }
///            gr.DrawLine( 0, 25, ww, 25, 1, RGB(218,219,220));


        }
        else {

            metadb = Cover.OutputMetadb();
            if ( metadb ) info = fb.TitleFormat(Cover.DisplayMode == 2 ? "[%artist%]" : "[%artist%][ — %album%]").EvalWithMetadb( metadb );
            else          info = false;

            Cover.CoverX = null;
            Cover.CoverY = null;
            gr.GdiDrawText( 'Нет изображений', g_font2, RGB(0,0,0), 1, 1, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);
            gr.GdiDrawText( 'Нет изображений', g_font2, RGB(140,164,179), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);

            // ARTIST BAR
///            if ( info ) {
///                gr.FillSolidRect(0, 0, ww, 25, RGB(255,255,255));
///                gr.GdiDrawText( info, g_font2, RGB(0, 0, 0), 24, 0, ww - 50, 25, DT_LEFT | DT_VCENTER | DT_EDITCONTROL | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);
///                gr.DrawLine( 0, 25, ww, 25, 1, RGB(218,219,220));
///                if ( picture && user_image ) gr.DrawImage( Cover.DisplayMode == 2 ? user_image : picture, 5, 4, user_image.Width, user_image.Height, 0, 0, user_image.Width, user_image.Height, angle = 0, alpha = 255);
///            }


        }

    //d = new Date();
    //t2 = d.getTime();
    //fb.trace( 'Repaint: ' + (t2 - t) + ' ms' );

}


function on_load_image_done(cookie, image) {

    Cover.CurrentCover = image == null ? false : image;
    window.Repaint();

}



function on_mouse_move(x, y) {

    if ( !g_hover ) {

        g_hover = 1;
            window.Repaint();

        if ( !Cover.CompareDirs() ) {

          Cover.Reset();
            Cover.Update();

        }

    }

   if ( Cover.MultipleCovers() && Cover.X1 ) {
        Cover.X2 = x;
    }

}


function on_mouse_leave() {

   g_hover    = 0;
    info_hover = 0;

    Cover.X1   = 0;
    Cover.X2   = 0;
    Cover.X    = 0;
    Cover.MouseGesture = 0;
    window.Repaint();
}

function on_mouse_wheel( step ) {

    (step < 0) ? Cover.NextCover() : Cover.PrevCover();

}


function on_mouse_lbtn_down(x, y, mask) {

    if ( mask == 1 ) {
        Cover.LbtnPressed = 1;
        Cover.X1 = x;
    }

}


function on_mouse_lbtn_up(x, y, mask) {

   if ( !mask && Cover.MultipleCovers() && Cover.X1 ) {

        Cover.X2 = x;

        if ( Cover.X1 < Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.NextCover() : Cover.PrevCover();
        else if ( Cover.X1 > Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.PrevCover() : Cover.NextCover();
        else if ( Cover.X1 > ww / 2 ) Cover.NextCover();
        else if ( Cover.X1 < ww / 2 ) Cover.PrevCover();

        Cover.LbtnPressed = 0;
        Cover.X1 = 0;
        Cover.X2 = 0;
        Cover.X = 0;
        Cover.MouseGesture = 0;

   }
   else if ( mask == MK_CONTROL ) {
      if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) WshShell.run( '"' + Cover.MetaPath.replace(/\\([^\\]*)$/g, '') + '"' );
        else if ( Cover.Covers[ Cover.CurrentCoverNumber ] ) WshShell.run( '"' + Cover.Covers[ Cover.CurrentCoverNumber ] + '"' );
    }
    else if ( mask == MK_SHIFT ) {

        WshShell.run( '"' + Cover.MetaPath.replace(/\\([^\\]*)$/g, '') + '"' );

    }

}

function on_mouse_rbtn_up(x, y) {
   var _menu = window.CreatePopupMenu();
   var _firstgroup = window.CreatePopupMenu();
   var _secondgroup = window.CreatePopupMenu();
   var _thirdgroup = window.CreatePopupMenu();
   var _fourthgroup = window.CreatePopupMenu();
   var _fivthgroup = window.CreatePopupMenu();
   var _sixthgroup = window.CreatePopupMenu();
   var _seventhgroup = window.CreatePopupMenu();
   var _eighthgroup = window.CreatePopupMenu();
   var _ninthgroup = window.CreatePopupMenu();
    var _tenthgroup = window.CreatePopupMenu();
   var i = 1;
   var ret;

    artist = Cover.FormatMeta('artist', Cover.OutputMetadb() );

   _firstgroup.AppendMenuItem(MF_STRING, i++, "Воспроизводимый элемент (не зацикленно)");
   _firstgroup.AppendMenuItem(MF_STRING, i++, "Воспроизводимый элемент (зацикленно)");
   _firstgroup.AppendMenuItem(MF_STRING, i++, "Текущее выделение");

   _firstgroup.EnableMenuItem( Cover.CurrentMode, 1 );
   _firstgroup.CheckMenuRadioItem( 1, i-1, Cover.CurrentMode );

    _firstgroup.AppendMenuSeparator();

   _firstgroup.AppendMenuItem(MF_STRING, i++, "Обложка: лицевая, задняя, диск и т.д.");
   _firstgroup.AppendMenuItem(MF_STRING, i++, "Фото исполнителя");
    _firstgroup.EnableMenuItem( i-1 , !Cover.CachePath ? 1 : 0 );
   _firstgroup.EnableMenuItem( Cover.DisplayMode + 3, 1 );
   _firstgroup.CheckMenuRadioItem( i-2, i-1, Cover.DisplayMode + 3 );

   _secondgroup.AppendMenuItem(MF_STRING, i++, "Встроенные обложки");
   _secondgroup.AppendMenuItem(MF_STRING, i++, "Внешние обложки");

   _secondgroup.EnableMenuItem( Cover.Priority + 5, 1 );
   _secondgroup.CheckMenuRadioItem( i-2, i-1, Cover.Priority + 5 );

   _thirdgroup.AppendMenuItem(MF_STRING, i++, "Встроенные обложки");
   _thirdgroup.AppendMenuItem(MF_STRING, i++, "Внешние обложки");

   if ( Cover.Exclude ) {
//      _thirdgroup.EnableMenuItem( Cover.Exclude + 5, 1 );
      _thirdgroup.CheckMenuRadioItem( i-2, i-1, Cover.Exclude + 7 );
   }

   _fourthgroup.AppendMenuItem(MF_STRING, i++, "*ключевые слова*.*");
   _fourthgroup.AppendMenuItem(MF_STRING, i++, " ключевые слова.*");

    _fourthgroup.EnableMenuItem( Cover.MatchPattern + 9, 1 );
    _fourthgroup.CheckMenuRadioItem( i-2, i-1, Cover.MatchPattern + 9 );


   _fivthgroup.AppendMenuItem(MF_STRING, i++, "5 сек.");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "15 сек.");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "30 сек.");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "1 мин.");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "2 мин.");

   _fivthgroup.EnableMenuItem( Cover.Interval + 12, 1 );
   _fivthgroup.CheckMenuRadioItem( i-5, i-1, Cover.Interval + 12 );

   _sixthgroup.AppendMenuItem(MF_STRING, i++, "Не сохранять пропорции");
   _sixthgroup.AppendMenuItem(MF_STRING, i++, "Сохранять пропорции");

   _sixthgroup.EnableMenuItem( Cover.Aspect + 17, 1 );
   _sixthgroup.CheckMenuRadioItem( i-2, i-1, Cover.Aspect + 17 );

   _seventhgroup.AppendMenuItem(MF_STRING, i++, "Инвертировать жест влево/вправо");
   _seventhgroup.CheckMenuItem( i-1, Cover.GestureInverted );

   _eighthgroup.AppendMenuItem(MF_STRING, i++, "Показывать обложки из корневой папки");
   _eighthgroup.CheckMenuItem( i-1, Cover.RootCovers );
    _eighthgroup.AppendMenuItem(MF_STRING, i++, "Показывать обложки из вложенных папок");
   _eighthgroup.CheckMenuItem( i-1, Cover.SubCovers );

   _ninthgroup.AppendMenuItem(MF_STRING, i++, "cover.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "folder.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "front.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "back.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "disc.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "%album%.*");

    _tenthgroup.AppendMenuItem(MF_STRING, i, "Текущее изображение");

    if ( Cover.Covers && typeof Cover.Covers[ Cover.CurrentCoverNumber ] != 'object' ) {
            fb.trace( Cover.Covers );
            var imagepath = Cover.Covers[ Cover.CurrentCoverNumber ];
            var dir       = imagepath.replace(/\\([^\\]*)$/g, '');
            var imagename = imagepath.replace(/\\([^\\]*)$/g, "$1");
            var ext       = imagename.replace(/(.*)\.([^\.]*)$/,'$2');

            if ( imagename == ('cover.'  + ext )  || FSO.FileExists( dir + '\\cover.'  + ext  ) ) _ninthgroup.EnableMenuItem(   22, 1 );
            if ( imagename == ('folder.' + ext )  || FSO.FileExists( dir + '\\folder.' + ext  ) ) _ninthgroup.EnableMenuItem(   23, 1 );
            if ( imagename == ('front.'  + ext )  || FSO.FileExists( dir + '\\front.'  + ext  ) ) _ninthgroup.EnableMenuItem(   24, 1 );
            if ( imagename == ('back.'   + ext )  || FSO.FileExists( dir + '\\back.'   + ext  ) ) _ninthgroup.EnableMenuItem(   25, 1 );
            if ( imagename == ('disc.'   + ext )  || FSO.FileExists( dir + '\\disc.'   + ext  ) ) _ninthgroup.EnableMenuItem(   26, 1 );

            var album = fb.Titleformat("$replace(%album%,/,-,\,-,:,-,*,-,?,-,\",-,<,-,>,-,|,-)").EvalWithMetadb( Cover.OutputMetadb() );
            if ( imagename == (album + '.' + ext ) || FSO.FileExists( dir + '\\' + album + '.' + ext  ) ) _ninthgroup.EnableMenuItem( 27, 1 );
    }
    else {
            _ninthgroup.EnableMenuItem( 22, 1 );
            _ninthgroup.EnableMenuItem( 23, 1 );
            _ninthgroup.EnableMenuItem( 24, 1 );
            _ninthgroup.EnableMenuItem( 25, 1 );
            _ninthgroup.EnableMenuItem( 26, 1 );
            _ninthgroup.EnableMenuItem( 27, 1 );
            _tenthgroup.EnableMenuItem( 28, 1 );
    }


   _firstgroup.AppendTo(   _menu, MF_STRING, "Отображение");
   _secondgroup.AppendTo(  _menu, MF_STRING, "Приоритет");
   _thirdgroup.AppendTo(   _menu, MF_STRING, "Исключить из поиска");
   _fourthgroup.AppendTo(  _menu, MF_STRING, "Совпадение");
   _fivthgroup.AppendTo(   _menu, MF_STRING, "Интервал");
   _sixthgroup.AppendTo(   _menu, MF_STRING, "Пропорции");
    _seventhgroup.AppendTo( _menu, MF_STRING, "Мышь");
    _eighthgroup.AppendTo(  _menu, MF_STRING, "Дополнительно");

    _menu.AppendMenuSeparator();

   _ninthgroup.AppendTo( _menu, MF_STRING, "Переименовать текущее изображение в...");
   _tenthgroup.AppendTo( _menu, MF_STRING, "Удалить...");

    _menu.AppendMenuSeparator();
   _menu.AppendMenuItem(MF_STRING, ++i, "Обновить обложки");
    _menu.AppendMenuSeparator();
    _menu.AppendMenuItem(MF_STRING, ++i, "Открыть папку");
    _menu.AppendMenuItem(MF_STRING, ++i, "Открыть обложку");

    // Open cover option handle
    if ( !Cover.Covers || typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) {
        _menu.EnableMenuItem( 31, 1 );
    }

    if ( !Cover.CachePath && !FSO.FolderExists( Cover.CachePath + '\\' + artist ) ) {
        _menu.EnableMenuItem( 29, 1 );
    }

    _menu.AppendMenuSeparator();
    _menu.AppendMenuItem(MF_STRING, ++i, "Настройки WSH...");

   ret = _menu.TrackPopupMenu(x, y);
   if (ret >= 1 && ret <= 3) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'displayed_cover', Cover.CurrentMode = ret );
        Cover.StopTimer();
      Cover = new CoverShow();
        Cover.Update();
        Cover.StartTimer();
   }
   else if (ret >= 4 && ret <= 5) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'disp_mode',       Cover.DisplayMode = ret - 3);
        Cover.Reset();
        Cover.Update();
   }
   else if (ret >= 6 && ret <= 7) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'cover_priority',  Cover.Priority = ret - 5);
        Cover = new CoverShow();
        Cover.Update();
   }
   else if (ret >= 8 && ret <= 9) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'exclude_covers', ( ret - 7 == Cover.Exclude ) ? Cover.Exclude = 0 : Cover.Exclude = ret - 7 );
        Cover.Reset();
        Cover.Update();
   }
   else if (ret >= 10 && ret <= 11) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'match_pattern', Cover.MatchPattern = ret - 9 );
        Cover.Reset();
        Cover.Update();
   }
   else if (ret >= 12 && ret <= 16) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'interval', Cover.Interval = ret - 12);
      Cover.StopTimer();
        Cover.StartTimer();
   }
   else if (ret >= 17 && ret <= 18) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'covers_aspect', Cover.Aspect = ret - 17 );
        Cover.Reset();
        Cover.Update();
   }
   else if (ret == 19) {
        utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'gesture_inverted', Cover.GestureInverted = Cover.GestureInverted == 1 ? 0 : 1);
    }
   else if (ret == 20) {
        utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'root_covers', Cover.RootCovers = Cover.RootCovers == 1 ? 0 : 1);
        Cover.Reset();
        Cover.Update();
    }
   else if (ret == 21) {
        utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'sub_covers', Cover.SubCovers = Cover.SubCovers == 1 ? 0 : 1);
        Cover.Reset();
        Cover.Update();
    }
   else if (ret == 22) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\cover.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
   else if (ret == 23) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\folder.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
   else if (ret == 24) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\front.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 25) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\back.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 26) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\disc.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 27) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\' + album  + '.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 28 ) {
      try {
            FSO.DeleteFile( Cover.Covers[ Cover.CurrentCoverNumber ] );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
   else if (ret == 29 ) {
      Cover.Reset();
        Cover.Update();
   }
   else if (ret == 30 ) {
      WshShell.run( '"' + Cover.MetaPath + '"' );
   }
   else if (ret == 31 ) {
      if ( Cover.Covers[ Cover.CurrentCoverNumber ] ) WshShell.run( '"' + Cover.Covers[ Cover.CurrentCoverNumber ] + '"' );
   }
    else if (ret == 32 ) {
        window.ShowConfigure();
    }
   return true;
}

function on_playback_dynamic_info_track() {

    Cover.Reset();
    Cover.Update();

}

function on_playback_starting() {
    // some
}

function on_playback_stop( Reason ) {
   Cover.StopTimer();
   if ( Reason == 0 ) on_item_focus_change();
}


function on_item_focus_change() {
   
    if ( !fb.IsPlaying || Cover.CurrentMode == 3) { Cover.Update(); }
}

function on_playlist_items_added(playlist) { Cover.Update(); }

function on_playlist_items_removed(playlist, new_count) { Cover.Update(); }

function on_playlist_switch() { Cover.Update(); }

function on_playback_new_track( metadb ){

    Cover.Update( metadb );
    Cover.StartTimer();

}

function on_mouse_mbtn_up(x,y) {

    artist = Cover.FormatMeta('artist', Cover.OutputMetadb() );
    if ( (Cover.CachePath && FSO.FolderExists( Cover.CachePath + '\\' + artist )) || Cover.DisplayMode == 2 ) {
        utils.WriteINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'disp_mode', Cover.DisplayMode = Cover.DisplayMode == 1 ? 2 : 1);
        Cover.Reset();
        Cover.Update();
    }

}

function on_notify_data( name, info) {

    if ( info == 'refresh' && name == '314FBCC4-9383-48CD-B2DA-45593D3BE1FF' ) {
        Cover.Reset();
        Cover.Update();
    }
    else if ( info == true && name == '314FBCC4-9383-48CD-B2DA-45593D3BE1FF' ) {
        on_mouse_mbtn_up();
    }
    else if ( name == '314FBCC4-9383-48CD-B2DA-45593D3BE1FF' ) {
        Cover.CachePath = info;
        Cover.Reset();
        Cover.Update();
    }

}

function on_key_down(vkey) {

    if ( vkey == 0x00000021 || vkey == 0x00000026 ) {

        Cover.PrevCover();

    }
    else if ( vkey == 0x00000022 || vkey == 0x00000028 ) {

        Cover.NextCover();

    }
    else if ( vkey == 0x00000023  ) {

        if ( Cover.Covers != undefined ) {

            Cover.CurrentCoverNumber = Cover.Covers.length - 1;

            var tmp = Cover.Covers[ Cover.CurrentCoverNumber ];
            var img;

         try       { img = ( typeof tmp == 'object' ) ? tmp.Clone(0,0,tmp.Width,tmp.Height) : gdi.LoadImageAsync( window.ID, Cover.Covers[ Cover.CurrentCoverNumber ] ); }
            catch (e) { img = undefined; }

            Cover.ChangeImage( img );
            window.Repaint();

        }

    }
    else if ( vkey == 0x00000024  ) {

        if ( Cover.Covers != undefined ) {

            Cover.CurrentCoverNumber = 0;

            var tmp = Cover.Covers[ Cover.CurrentCoverNumber ];
            var img;

         try       { img = ( typeof tmp == 'object' ) ? tmp.Clone(0,0,tmp.Width,tmp.Height) : gdi.LoadImageAsync( window.ID, Cover.Covers[ Cover.CurrentCoverNumber ] ); }
            catch (e) { img = undefined; }

            Cover.ChangeImage( img );
            window.Repaint();

        }

    }

}



function on_timer(id) {
   //if ( Cover.CurrentMode == 2 && Cover.CycleTimer.ID == id ) Cover.NextCover();
}

Добавлено спустя 1 час 3 минуты:
MC Web, vladj, Спасибо вам большое ребята,разобрался с вашей помощью со всеми проблемами!
Хотел задать вам последний вопрос:Можно ли добавить кнопку YouTube?(на скрине показал)
Вложения
Безымянный-min.png
love123321
Автор темы, Новичок
Репутация: 0
С нами: 4 года 11 месяцев

Сообщение #10 Chernomor » 22.11.2015, 00:52

Всем привет! Тоже трудности с лирикой:
Код: Выделить всё
xml version="1.0" encoding="UTF-8" ?>
<result errmsg="Search ID or Code error!" errcode="32006"
В окошке установлен поиск гугла. Некст трек нажимал - ошибка таже. Куда всё подевалось, ничего не понимаю.
зы: пока пробую лечить из постов выше. Отпишусь.
Zalman HD 160 ХТ плюс железки под W7x86-64, Elit pro, ламповый усь 2х75 и пара акустики Инфинити-50 - что еще нужно для вывода качественного звука с компа? Разве что внешний ЦАП...
Chernomor
Новичок
Аватара
Репутация: 0
С нами: 8 лет 3 месяца

Сообщение #11 vladj » 22.11.2015, 12:45

Привет...давненько тебя не видно было. Прочитал твое сообщение и полез посмотреть в свою основную сборку, что там
у меня с лирикой. Она не настроена на сохранение, только на показ скачанной с инета в момент прослушивания.
В настройках плагина лирики 9 серверов, сохранённой при этом нигде нет, ни в папке с музыкой и в фубаре.
Я к чему пишу...с удивлением увидел, что в корневой фубара у меня нет вообще настроек Ласт ФМ и Вики....
потому, что нет плагина биографии (био качаю в панели на WSH со скриптом от marc2003). Запустил сейчас
несколько альбомов Boney M в надежде, что уж это-то все есть в инете. Но...не на все треки лирика находится
даже на такие распростанённые треки. Качает всякие...синхронизированные и не синхронизированные.
А я всегда думал что лирику качает только при наличии плагина биографии в фубаре.
То что у тебя в паре строчек....в жизни не видал таких надписей, это кто пишет...фубар, винда ?
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 402
С нами: 10 лет 8 месяцев

Сообщение #12 Chernomor » 22.11.2015, 13:17

Привет, дружище! :smoke: Когда всё работает, вроде и проблем нет, а тут... Это пишет фубар:

Изображение

Вот взял русскоговорящий плагин из поста выше крайней свежей версии 0.4.5 - foo_uie_lyrics3.dll (всегда была в юзверь-компонентах) с тремя сторонними ДДЛ-ками: libxml2.dll, iconv.dll, foo_lyricsource.dll (их закинул в компоненты)
Здесь нашел такую ошибку тоже. Гонял разные сервера под номерами 1-2-3... Текст так и не пошел. На 2-ом текст выше. На остальных ничего не найдено.
На одной из сборок что-то там проклевывалось со словами. Но нерегулярно. Сам плагин там не обновленный стоит, еще 0.3.4.6.1 версии. Гугл сеач да 2-ой сервер там в активных.
Ж... полная с лирикой началась. :oops:

Да, биография в сборке имеется: 0.4.2.4.

Добавлено спустя 14 минут 23 секунды:
Я смотрю там народ с поисковыми запросами экспериментирует. Как картинку из этого поста получить - не понял. :think:
Zalman HD 160 ХТ плюс железки под W7x86-64, Elit pro, ламповый усь 2х75 и пара акустики Инфинити-50 - что еще нужно для вывода качественного звука с компа? Разве что внешний ЦАП...
Chernomor
Новичок
Аватара
Репутация: 0
С нами: 8 лет 3 месяца

Сообщение #13 vladj » 22.11.2015, 14:01

Chernomor писал(а):Как картинку из этого поста получить - не понял
Похоже не только фубар барахлит, но и браузер тоже ? Если картинка не открывается :smile:
У меня яндекс портабельный в пользовательском разделе (что-бы не срал на диск SSD лишнего),
он и картинку нормально кажет и перевод любых сайтов автоматом в нем...рекомендую.
А посмотрел на плагин свой...блин, он русифицирован, кем не знаю даже, версия старая 0.4.1.
За ссылку выше спасибо, сохранил в закладки, бедет время посмотрю что они там с АЗ лирикс качают и как.
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 402
С нами: 10 лет 8 месяцев

Сообщение #14 Chernomor » 22.11.2015, 14:30

vladj писал(а):Похоже не только фубар барахлит, но и браузер тоже ? Если картинка не открывается
Я же картинку и запостил - значит увидел браузером. :smile:
Я ту картинку в фубаре не могу увидеть. :sad:
Гугловский переводчик не особо жалую, предпочитаю построчный перевод - плагин S3 Google переводчик, нормально.
Крайнюю нерусифицированную версию лирики можно с сайта фубара стянуть из репозитория. Это не проблема. Вот добавочные ДДЛ-ки - со стороны.
vladj писал(а):бедет время посмотрю что они там с АЗ лирикс качают и как.
Лады, тоже пока остановку сделаю. Вчера до 4-х утра бодался, воз и ныне там. :smile:
Zalman HD 160 ХТ плюс железки под W7x86-64, Elit pro, ламповый усь 2х75 и пара акустики Инфинити-50 - что еще нужно для вывода качественного звука с компа? Разве что внешний ЦАП...
Chernomor
Новичок
Аватара
Репутация: 0
С нами: 8 лет 3 месяца

Сообщение #15 megane68 » 23.11.2015, 09:50

Chernomor
Про лирику же MC Web написал. Надо добавить сервера.
В биографии с плагином из репы получится только на инглише. MC Web предложил альтернативу на WSH, но лично я пока не сподобился.
Вложения
Что_стало_лучше_при_Путине_-_2014-11-15_17.03.52_cr_cr2.png
megane68 M
Мастер
Репутация: -18
С нами: 11 лет 8 месяцев

Сообщение #16 Chernomor » 23.11.2015, 15:30

megane68, приветствую!
Вот с этой ДДЛ-кой сервера сторонние появились. Саму лирику переставил на англ. вариант, без русской локализации. Вроде бы тексты подтягиваться стали. Не на всё правда и не всегда в десятку по смыслу, вот например:
Изображение
Какой-то Чайковский на Accepte выскочил. :think: Где-то треки вообще идут без текстов.
Но всё равно, это уже кое-что: процентов под 70-80 найдется - уже прогресс.

Кстати, может кто англоязычные аналогично правленные ДДЛ-ки скопом на тоже Яндекс-Облако залить? У меня нерусифицированная сборка, хотелось и ДДЛ-ки по феншую, английские. :smile:

Добавлено спустя 33 минуты 34 секунды:
Еще нестыковки. Кто помнит, у меня поисковая строка в лирике выглядит так:
Изображение
В поле artist:
Код: Выделить всё
$ifequal($put(pos,$strrchr(%artist%,'[')),0,%artist%,$trim($substr(%artist%,1,$sub($get(pos),1))))
Смысл такой строки - отсечь ненужные буквы в оригинальном названии, например Uriah Heep [Vinyl] или Uriah Heep [SACD] после преобразования должен принять вид Uriah Heep. Может что в скрипте не так, но ищется как-то криво, тексты на эту группу не находит вообще. Как и на Назарет и пр... Может дело в лирике все же, раньше поисковый скрипт ведь работал нормально.
зы: пробовал убирать из тегов Vinyl или SACD - всё одно, без текстов треки идут.
В поле title:
Код: Выделить всё
$if2(%title%,%filename%)
Вроде по-умолчанию так и должно быть. Но результата не вижу - текстов нет. Возможно и эту строчку надо править аналогично верхней? Кто в скриптах разбирается, обратите внимание, может есть ошибки в составлении.

Да и напишите кто-нибудь стандартный поисковый запрос из поля artist, погоняю еще поиск так, по-умолчанию.

Добавлено спустя 32 минуты 5 секунд:
Так никто и не ответил:
Изображение
Как вот этот диалог в фубаре получить?
Zalman HD 160 ХТ плюс железки под W7x86-64, Elit pro, ламповый усь 2х75 и пара акустики Инфинити-50 - что еще нужно для вывода качественного звука с компа? Разве что внешний ЦАП...
Chernomor
Новичок
Аватара
Репутация: 0
С нами: 8 лет 3 месяца

Сообщение #17 MC Web » 23.11.2015, 17:45

Chernomor писал(а):Так никто и не ответил:
Изображение
Как вот этот диалог в фубаре получить?

А в заголовке окна, что написано?

ПКМ - Lyric Search...
Сборка foobar2000 RU DarkOne + DUIFoon от MC Web
MC Web
Гуру
Аватара
Репутация: 217
С нами: 7 лет 1 месяц

Сообщение #18 Chernomor » 23.11.2015, 22:30

MC Web писал(а):А в заголовке окна, что написано?
Увидел, но без оного списка серверов. Печально.
Zalman HD 160 ХТ плюс железки под W7x86-64, Elit pro, ламповый усь 2х75 и пара акустики Инфинити-50 - что еще нужно для вывода качественного звука с компа? Разве что внешний ЦАП...
Chernomor
Новичок
Аватара
Репутация: 0
С нами: 8 лет 3 месяца

Сообщение #19 MC Web » 23.11.2015, 22:51

Chernomor писал(а):Увидел, но без оного списка серверов. Печально.
Ищет по активному списку серверов находящемуся в левом окне (Настройки: Порядок поиска).
На каких находит чаще, те БД / Сервера и оставить или поставить в начало списка поиска.
Сборка foobar2000 RU DarkOne + DUIFoon от MC Web
MC Web
Гуру
Аватара
Репутация: 217
С нами: 7 лет 1 месяц

Сообщение #20 megane68 » 29.11.2015, 18:28

Кстати, заработали сервера по умолчанию в панели Lyrics.
megane68 M
Мастер
Репутация: -18
С нами: 11 лет 8 месяцев

След.

Вернуться в Есть вопрос!