Класс!
А из tmp_Biography можно научить подхватывать?
(опционно)
Поисковый запрос: biography
DT_RIGHT = 0x00000002;
DT_VCENTER = 0x00000004;
DT_CALCRECT = 0x00000400;
//function StrFmt(alignH,alignV,trim,flag){ return ((alignH<<28)|(alignV<<24)|(trim<<20)|flag); }
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var ww, wh;
window.MinHeight = window.MaxHeight = 220;
function CoverShow( metadb ) {
this.CachedPath = 0;
this.CachedCoversNumber = 0;
// Interval
this.Interval = 12000;
// Metadb
this.OutputMetadb = function() {
return ( 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);
//SubCovers
var e = new Enumerator(dir.SubFolders );
for(; !e.atEnd(); e.moveNext() ) {
this.Search(files_subs, files_biography, 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 = files.concat(files_this, files_subs);
var k = files.length;
files.reverse();
while (k--){
var name = files[k];
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 ) {
var embedded = this.GetEmbeddedCovers( this.Metadb );
var external = this.GetExternalCovers( path );
var allcovers = []; allcovers = allcovers.concat(external, embedded);
this.Covers = allcovers;
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 ) {
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;
}
this.CompareDirs = function() {
metadb = this.OutputMetadb();
try {
metapath = metadb.Path;
}
catch (e) { metapath = 0; }
if ( metapath ) {
var embedded = this.GetEmbeddedCovers( this.Metadb );
var external = this.GetExternalCovers( metapath );
var allcovers = [];
allcovers = allcovers.concat(external, embedded);
//this.Covers = allcovers;
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 );
this.CycleTimer = window.SetInterval( function() { Cover.NextCover() }, 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.Update = function( metadb ) {
this.Metadb = metadb ? metadb : this.OutputMetadb();
artist = this.FormatMeta( 'artist', this.Metadb );
try {
dir = this.Metadb.Path;
dir = dir.replace(/\\([^\\]*)$/g, '');
this.MetaPath = dir;
}
catch (e) { this.MetaPath = 0; }
if ( this.MetaPath ) {
var artist_temp = fb.TitleFormat("%artist%").EvalWithMetadb( this.Metadb );
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.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 ) {
gr.FillGradRect(0, 0, ww, wh, 240,0xee708040,0xccf0eebb,.4);
if ( Cover.Covers ) {
window.MinHeight = window.MaxHeight = 220;
// 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 = 'Image';
}
// if ( !Cover.CurrentCover ) gr.GdiDrawText( 'Показ невозможен.', g_font, 0xffaaaaaa, 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 - 10;;
if ( img.Width > ww || img.Height > resulting_height ) {
var iw1 = ww;
var iw2 = img.Width / ( img.Height / resulting_height );
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;
}
img = img.CreateRawBitmap();
var x = (iw < ih) ? ((iw < ww) ? ((ww - iw)/2) : 0 ) : ((iw >= ww) ? 0 : ((ww - iw)/2));
var y = (iw > ih) ? ((ih < resulting_height) ? ((wh - ih)/2) : 5 ) : ((ih >= resulting_height) ? 5 : ((wh - ih)/2));
Cover.CoverX = x;
Cover.CoverY = y;
// Draw cover
gr.GdiDrawBitmap( img, x, y, iw, ih, 0, 0, img.Width, img.Height );
// Release graphics
var graphics = Cover.CurrentCover.GetGraphics();
Cover.CurrentCover.ReleaseGraphics( graphics );
Cover.CurrentCover.Dispose();
Cover.CurrentCover = 0;
}
// Cover Number
// if (Cover.Covers.length>1) {
gr.GdiDrawText( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, gdi.Font("Tahoma",10), 0xff111111, 1, wh - 10, ww, 11, DT_RIGHT | DT_CALCRECT), gr.GdiDrawText( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, gdi.Font("Tahoma",10), 0xffffffff, 0, wh - 11, ww, 11, DT_RIGHT | DT_CALCRECT);
// }
}
else {
window.MinHeight = window.MaxHeight = 1;
}
}
function on_load_image_done(cookie, image) {
Cover.CurrentCover = image == null ? false : image;
window.Repaint();
}
function on_mouse_wheel( step ) {
(step < 0) ? Cover.NextCover() : Cover.PrevCover();
}
function on_playback_dynamic_info_track() {
Cover.Reset();
Cover.Update();
}
function on_playback_stop( Reason ) {
Cover.StopTimer();
}
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_lbtn_dblclk (x,y){
//if (Cover) WshShell.run '"' + Cover.CurrentCover + '"' );
}
function on_notify_data( name, info) {
if ( name == '314FBCC4-9383-48CD-B2DA-45593D3BE1FF' ) {
Cover.CachePath = info;
Cover.Reset();
Cover.Update();
}
}
а зачем в биографии теперь таймер, если картинок нет? Я вообще убрал его и биография отлично работает, оставил только delay_timerkgena_ua:В скрипте Биография в function on_timer(id) { добавил внизу
var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
var files_biography = [];
function get_files_from_b_dir() {
files_biography = [];
var e = new Enumerator( FSO.GetFolder(tmp_b_path).Files );
while ( !e.atEnd() ) {
var name = e.item().Name;
files_biography.push(tmp_b_path + name);
e.moveNext();
}
}
function on_notify_data(name, info) {
if(name == "b_images") {
get_files_from_b_dir();
window.Repaint();
}
}
files = files.concat(files_this, files_subs);
files = files.concat(files_this, files_subs, files_biography);
window.NotifyOthers("b_images", step);
Нет и не загружает . tmp_Biography пустая при этом .seriousstas, не отображает. А загружает ?
Развалилась :)Тогда попробуй через прокси сервер (увеличь расстояние), если гипотеза верна, должно работать...
Была проблема, но после правки автором - в последней версии скрипта все наладилось (на 32 странице скрипт). Проверяйте. У меня заработало.seriousstas:Попробуй поклацай несколько штук (смени язык) и посмотри ,как
подгружает картинки(WSH Biography Text & Picture Llast.fm) ... Помогает только перезагрузка Фубара
работает исправно .надо тестировать.
531 var filename = base + url.substring(url.lastIndexOf("/") + 1) + ".jpg";
var filename = base + url.lastIndexOf (+1) + ".jpg";
Сам оч. жду ...kgena_ua почти закончил WSH Biography Text & Picture Llast.fm, так что одна замена Biography View есть.
kgena_ua:Пробую после выполнения запроса ждать ответа
Ошибка: Панель WSH (модуль) (Picrure. www.last.fm): Ошибка выполнения Microsoft JScript:
Объект не поддерживает это свойство или метод
File: <main>
Ln: 235, Col: 9
<source text only available at compile time>
WSH Panel Mod (Picrure. www.last.fm): initialized in 19 ms
WSH Panel Mod (Picrure. www.last.fm): initialized in 17 ms
// ==PREPROCESSOR==
// @name "Picrure. www.last.fm"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
var a_font = gdi.Font("Arial",12,1);
var b_font = gdi.Font("Arial",12,0);
var ww,wh;
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(40,40,40);
var a_color = RGB(255,255,230);
var b_color = RGB(255,255,230);
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
var doc = new ActiveXObject("htmlfile");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objADOStream = new ActiveXObject("ADODB.Stream");
var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
if(!fso.FolderExists(tmp_b_path)) {fso.CreateFolder(tmp_b_path)};
var artist, old_artis;
var files = [], selected = 0;
var col = 20;
var row = 50;
var limit = window.GetProperty("limit",5);
var metadb;
on_item_focus_change();
function on_paint(gr){
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
if(fso.FileExists(tmp_b_path + files[selected]) ) {
g_img = gdi.Image(tmp_b_path + files[selected]);
var scale_w = ww / g_img.Width;
var scale_h = wh / g_img.Height;
var scale = Math.min(scale_w, scale_h);
var pos_x = 0;
var pos_y = 0;
if (scale_w < scale_h) pos_y = (wh - g_img.Height * scale) / 2;
else if (scale_w > scale_h) pos_x = (ww - g_img.Width * scale) / 2;
g_img = g_img.CreateRawBitmap();
gr.GdiDrawBitmap(g_img, pos_x, pos_y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
}
gr.GdiDrawText(artist, a_font, bgcolor, col + 1, 10 + 2, ww - col + 1, wh + 2, DT_LEFT | DT_WORD_ELLIPSIS );
gr.GdiDrawText(artist, a_font, a_color, col, 10, ww - col, wh, DT_LEFT | DT_WORD_ELLIPSIS );
gr.GdiDrawText(selected + 1 + " (" + files.length + ")", a_font, bgcolor, col + 1, 30 + 2, ww - col + 1, wh + 2, DT_LEFT | DT_WORD_ELLIPSIS );
gr.GdiDrawText(selected + 1 + " (" + files.length + ")", a_font, a_color, col, 30, ww - col, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}
function on_mouse_wheel(delta) {
if (delta < 0) {selected = selected <= 0 ? files.length - 1 : selected -= 1}
if (delta > 0) {selected = selected >= files.length - 1 ? 0 : selected += 1}
window.Repaint();
}
function on_mouse_move(x, y) {
on_mouse = true;
window.SetCursor(32649);
window.Repaint();
}
function on_mouse_leave() {
on_mouse = false;
window.SetCursor(32512);
window.Repaint();
}
function on_size(){
ww = window.Width;
wh = window.Height;
}
function on_item_focus_change() {
metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
if (metadb) on_metadb_changed();
}
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 Eval(field) {
if (metadb) {
path = fb.Titleformat("%path%").EvalWithMetadb(metadb);
return path.indexOf('://') > 0 ? fb.TitleFormat("[" + field + "]").Eval(true) : fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
}
}
function on_metadb_changed() {
artist = Eval("%artist%");
if (artist != old_artis){
try {
fso.deleteFile(tmp_b_path + "*.*" );
} catch(e) {};
get();
selected = 0;
old_artis = artist;
}
//window.Repaint();
}
function get(){
if (artist == "" || artist == "?") {return};
var url = ("http://www.last.fm/music/" + encodeURIComponent(artist) + "/+images");
xmlhttp.open("GET", url, 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) {
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/60x60/") == 0) urls.push(data[i].src.replace("60x60", "ar0"));
}
for (i = 0; i < Math.min(urls.length, limit); i++) {
get_p(urls[i],i);
}
doc.close();
get_files_from_dir();
} else {
artist = ""
}
window.Repaint();
}
}
}
function get_p(url, i){
if(!fso.FileExists(tmp_b_path + i + ".jpg") ) {
xmlhttp.open("GET", url, true);
xmlhttp.send();
//xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
var objADOStream = new ActiveXObject("ADODB.Stream");
objADOStream.Open;
objADOStream.Type = 1;
objADOStream.Write(xmlhttp.ResponseBody);
objADOStream.Position = 0;
try {
objADOStream.SaveToFile(tmp_b_path + i + ".jpg");
} catch(e) {};
objADOStream.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;
name = name.toLowerCase(name);
files.push(name);
e.moveNext();
}
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var i = 1;
MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
_menu.AppendMenuItem(MF_ENABLED, i++, "...");
_menu.AppendMenuItem(MF_ENABLED, i++, "...");
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
// if (ShiftDown) {
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, 10, "Reload");
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, 20, "Properties");
_menu.AppendMenuItem(0x00000000, 30, "Configure ...");
// }
ret = _menu.TrackPopupMenu(x,y);
switch (ret) {
case 1:
break;
case 2:
break;
case 10:
window.Reload();
break;
case 20:
window.ShowProperties();
break;
case 30:
window.ShowConfigure();
break;
}
_menu.Dispose();
return true;
}
if (im.trace(x, y) && im.images.length > 0 && (!this.check_feature("thumbs") || th.mode != "grid")) {
_menu.AppendMenuItem(MF_STRING, 400, "Открыть папку с этими файлами");
_menu.AppendMenuItem(MF_STRING, 401, "Открыть изображение");
_menu.AppendMenuItem(MF_STRING, 402, "Удалить изображение");
_menu.AppendMenuSeparator();
_menu.AppendMenuItem(MF_STRING, 404, "Обрезать (фокусировать по центру)");
_menu.AppendMenuItem(MF_STRING, 405, "Обрезать (фокусировать по верху)");
_menu.AppendMenuItem(MF_STRING, 406, "Отцентровать");
_menu.AppendMenuItem(MF_STRING, 407, "Растянуть");
_menu.CheckMenuRadioItem(404, 407, im.type == "crop" ? 404 : im.type == "crop top" ? 405 : im.type == "centre" ? 406 : 407);
_menu.AppendMenuSeparator();
}
case 400:
this.run("explorer /select,\"" + im.files[im.index] + "\"");
break;
case 401:
this.run("\"" + im.files[im.index] + "\"");
break;
case 402:
im.delete_image();
break;
case 403:
im.update();
break;
case 404:
case 405:
case 406:
case 407:
im.type = idx == 404 ? "crop" : idx == 405 ? "crop top" : idx == 406 ? "centre" : "stretch";
window.SetProperty("image_type", im.type);
window.Repaint();
break;
Вернуться в: Скрипты для foo_uie_wsh_panel_mod