aboutsummaryrefslogtreecommitdiff
path: root/Src/resources/skins/Big Bento/scripts/notifier.m
diff options
context:
space:
mode:
Diffstat (limited to 'Src/resources/skins/Big Bento/scripts/notifier.m')
-rw-r--r--Src/resources/skins/Big Bento/scripts/notifier.m827
1 files changed, 827 insertions, 0 deletions
diff --git a/Src/resources/skins/Big Bento/scripts/notifier.m b/Src/resources/skins/Big Bento/scripts/notifier.m
new file mode 100644
index 00000000..91fd8ae0
--- /dev/null
+++ b/Src/resources/skins/Big Bento/scripts/notifier.m
@@ -0,0 +1,827 @@
+/*---------------------------------------------------
+-----------------------------------------------------
+Filename: notifier.m
+Version: 1.3
+
+Type: maki/notifier
+Date: 14. Mrz. 2007 - 14:50
+Author: Martin Poehlmann aka Deimos
+E-Mail: martin@skinconsortium.com
+Internet: www.skinconsortium.com
+ www.martin.deimos.de.vu
+
+Note: Based on notifier.m from Winamp Modern
+
+
+
+-----------------------------------------------------
+// Workaround for Winamp bug by Pieter Nieuwoudt (pjn123) - pjn123@outlook.com \\
+
+Temparary fix for the Winamp bug where the...
+extern AlbumArtLayer.onAlbumArtLoaded(boolean success);
+...event stops working.
+
+Please note that this workaround only kicks in if the above event stops responding.
+If you want to test the workaround, just add // after the FORCE_BUG_MODE below.
+Once the above event stop responding the first notifier trigger will be delayed (3 sec),
+but after that there will be no delays anymore.
+
+To remove this fix in the future just search //BUGFIX for steps ;)
+
+-----------------------------------------------------
+---------------------------------------------------*/
+#define FORCE_BUG_MODE
+
+#include <lib/std.mi>
+#include attribs/init_notifier.m
+#define DEBUG
+#define DebugString //
+
+Function reset();
+Function createNotifier(boolean cancel);
+Function showNotifier(Int w);
+Function onNext();
+function cancelAnimation();
+
+Function Int fillNextTrackInfo(String corneroverride);
+Function Int fillCustomInfo(String customstring);
+Function prepareAlbumArtNotifier();
+
+Function checkPref(int bypassfs);
+
+Function getArtist();
+
+Function onAlbumArt(Boolean success);
+
+Global Container notifier_container;
+Global Layout notifier_layout;
+Global Timer notifier_timer;
+Global String last_autotitle, last_autopis, cur_status;
+
+Global Boolean b_tohide = 0;
+Global boolean handleAACalback = false;
+
+Global AlbumArtLayer cover;
+
+Global Boolean triggerBug; //BUGFIX remove this
+Global Timer fallbackTempFix; //BUGFIX remove this
+
+#define WEBCOVER_SHOUTCAST "winamp.cover.shoutcast"
+
+// ------------------------------------------------------------------------------
+// init
+// ------------------------------------------------------------------------------
+System.onScriptLoaded() {
+ initAttribs_notifier();
+ notifier_timer = new Timer;
+ fallbackTempFix = new Timer; //BUGFIX remove this
+ fallbackTempFix.setDelay(3000); //BUGFIX remove this / Time that onAlbumArtLoaded have to execute before bug mode is ON
+}
+
+// ------------------------------------------------------------------------------
+// shutdown
+// ------------------------------------------------------------------------------
+System.onScriptUnloading() {
+ delete notifier_timer;
+ delete fallbackTempFix; //BUGFIX remove this
+}
+
+// ------------------------------------------------------------------------------
+// called by the system when the global hotkey for notification is pressed
+// ------------------------------------------------------------------------------
+System.onShowNotification() {
+ //if (checkPref(1)) return; --mp: if we push the hotkey, we want to show the notifier, no matter what the pref settings are.
+ createNotifier(false);
+ if (getStatus() == STATUS_PLAYING) cur_status = "Playing";
+ if (getStatus() == STATUS_PAUSED) cur_status = "Playback Paused";
+ if (getStatus() == STATUS_STOPPED) cur_status = "Playback Stopped";
+ prepareAlbumArtNotifier();
+ complete; // prevents other scripts from getting the message
+ return 1; // tells anybody else that might watch the returned value that, yes, we implemented that
+}
+
+// ------------------------------------------------------------------------------
+// called by the system when the title for the playing item changes, this could be the result of the player
+// going to the next track, or of an update in the track title
+// ------------------------------------------------------------------------------
+// mpdeimos> seems like we get an onTitleChange callback sometimes on pause/resume, d'oh
+Global String lastUrl = 0;
+System.onTitleChange(String newtitle) {
+ if (getPlayItemMetaDataString("streamtype") == "0" && lastUrl == getPlayItemString())
+ {
+ return;
+ }
+ lastUrl = getPlayItemString();
+
+ if (StrLeft(newtitle, 1) == "[") {
+ if (StrLeft(newtitle, 7) == "[Buffer" ||
+ StrLeft(newtitle, 4) == "[ICY") return;
+ }
+ //String newpis = System.getPlayItemString();
+ //if (last_autotitle == newtitle && last_autopis == newpis) return;
+ //last_autotitle = newtitle;
+ //last_autopis = newpis;
+ DebugString("onTitleChange: "+getPlayItemString(), 9);
+
+ onNext();
+
+ fallbackTempFix.stop(); //BUGFIX remove later
+ fallbackTempFix.start(); //BUGFIX remove later
+}
+
+// ------------------------------------------------------------------------------
+// called by the system when the user clicks the next button
+// ------------------------------------------------------------------------------
+onNext() {
+ if (checkPref(0)) return;
+ createNotifier(false);
+ cur_status = "";
+ prepareAlbumArtNotifier();
+}
+
+// ------------------------------------------------------------------------------
+// called by the system when the user clicks the play button
+// ------------------------------------------------------------------------------
+System.onPlay() {
+ if (checkPref(0)) return;
+ createNotifier(false);
+ cur_status = "Playing";
+ prepareAlbumArtNotifier();
+}
+
+// ------------------------------------------------------------------------------
+// called by the system when the user clicks the pause button
+// ------------------------------------------------------------------------------
+System.onPause() {
+ fallbackTempFix.stop();
+ if (checkPref(0)) return;
+ DebugString("onPause",9);
+ createNotifier(true);
+ showNotifier(fillCustomInfo("Playback Paused"));
+}
+
+// ------------------------------------------------------------------------------
+// called by the system when the user clicks the pause button again
+// ------------------------------------------------------------------------------
+System.onResume() {
+ if (checkPref(0)) return;
+ DebugString("onResume",9);
+ createNotifier(false);
+ cur_status = "Resuming Playback";
+ prepareAlbumArtNotifier();
+}
+
+// ------------------------------------------------------------------------------
+// called by the system when the user clicks the play button
+// ------------------------------------------------------------------------------
+System.onStop() {
+ fallbackTempFix.stop();
+ if (checkPref(0)) return;
+ createNotifier(true);
+ showNotifier(fillCustomInfo("End of Playback"));
+}
+
+// ------------------------------------------------------------------------------
+// checks if we should display anything
+// ------------------------------------------------------------------------------
+Int checkPref(int bypassfs) {
+ if (!bypassfs && notifier_hideinfullscreen_attrib.getData() == "1" && isVideoFullscreen()) return 1;
+ if (notifier_never_attrib.getData() == "1") return 1;
+ if (notifier_minimized_attrib.getData() == "1" && !isMinimized()) return 1;
+ if (notifier_windowshade_attrib.getData() == "1") {
+ if (isMinimized()) return 0;
+ Container c = getContainer("main");
+ if (!c) return 1;
+ Layout l = c.getCurLayout();
+ if (!l) return 1;
+ if (l.getId() != "shade") return 1;
+ }
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+// fade in/out completed
+// ------------------------------------------------------------------------------
+// TODO: on dual monitors the notif stays on 2nd monitor :(
+notifier_layout.onTargetReached() {
+ if (b_tohide) {
+ notifier_layout.setAlpha(0);
+ reset();
+ return;
+ }
+ int a = notifier_layout.getAlpha();
+ if (a == 255 && !b_tohide) {
+ notifier_timer.setDelay(StringToInteger(notifier_holdtime_attrib.getData()));
+ notifier_timer.start();
+ }
+ else if (a == 0) {
+ reset();
+ }
+}
+
+// ------------------------------------------------------------------------------
+// hold time elapsed
+// ------------------------------------------------------------------------------
+notifier_timer.onTimer() {
+ stop();
+ if (notifier_fdout_alpha.getData() == "1") {
+ if (notifier_layout.isTransparencySafe()) {
+ notifier_layout.setTargetA(0);
+ notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeouttime_attrib.getData()) / 1000);
+ notifier_layout.gotoTarget();
+ return;
+ }
+ else {
+ reset();
+ return;
+ }
+ }
+ else if (notifier_fdout_vslide.getData() == "1") {
+ b_tohide = 1;
+ int sy;
+ int geth;
+
+ Layout m = getContainer("main").getCurLayout();
+ if (notifier_loc_vport_attrib.getData() == "1")
+ {
+ geth = getViewportHeightFromGuiObject(m);
+ }
+ else
+ {
+ geth = getMonitorHeightFromGuiObject(m);
+ }
+ if (notifier_layout.getGuiY() == 2) sy = -80;
+ else sy = geth + 80;
+ notifier_layout.setTargetY(sy);
+ notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeintime_attrib.getData()) / 1000);
+ notifier_layout.gotoTarget();
+ return;
+ }
+ else {
+ if (b_tohide) return;
+ b_tohide = 1;
+ int sx;
+ int getw;
+
+ Layout m = getContainer("main").getCurLayout();
+ if (notifier_loc_vport_attrib.getData() == "1") {
+ getw = getViewportWidthFromGuiObject(m);
+ }
+ else {
+ getw = getMonitorWidthFromGuiObject(m);
+ }
+
+ if (notifier_layout.getGuiX() == 2) sx = -notifier_layout.getWidth();
+ else sx = getw + notifier_layout.getWidth();
+ notifier_layout.setTargetX(sx);
+ notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeintime_attrib.getData()) / 1000);
+ notifier_layout.gotoTarget();
+ return;
+ }
+}
+
+// ------------------------------------------------------------------------------
+// when notifier is clicked, bring back the app from minimized state if its minimized and focus it
+// ------------------------------------------------------------------------------
+notifier_layout.onLeftButtonDown(int x, int y) {
+ cancelAnimation();
+ restoreApplication();
+ activateApplication();
+ /*if (notifier_opennowplaying_attrib.getData() == "1")
+ {
+ String artist = getArtist();
+ if (artist == "") return;
+ System.navigateUrlBrowser("http://client.winamp.com/nowplaying/artist/?icid=notifierbento&artistName=" + artist);
+ }*/
+ reset();
+}
+
+notifier_layout.onRightButtonUp(int x, int y) {
+ cancelAnimation();
+ reset();
+ complete;
+ return;
+}
+
+//TODO merge w/ code below
+String getArtist ()
+{
+ String artist = getPlayItemMetaDataString("artist");
+ if (artist == "") artist = getPlayItemMetaDataString("uvox/artist");
+ if (artist == "") artist = getPlayItemMetaDataString("cbs/artist");
+ if (artist == "") artist = getPlayItemMetaDataString("streamtitle");
+ if (artist == "") artist = getPlayItemDisplayTitle();
+
+ return artist;
+}
+
+// ------------------------------------------------------------------------------
+// close the notifier window, destroys the container automatically because it's dynamic
+// ------------------------------------------------------------------------------
+reset() {
+ notifier_container.close();
+ notifier_container = NULL;
+ notifier_layout = NULL;
+ handleAACalback = FALSE;
+}
+
+// ------------------------------------------------------------------------------
+createNotifier(boolean cancel) {
+ if (notifier_container == NULL) {
+ notifier_container = newDynamicContainer("notifier");
+ if (!notifier_container) return; // reinstall duh!
+ if (isDesktopAlphaAvailable())
+ notifier_layout = notifier_container.getLayout("desktopalpha");
+ else
+ notifier_layout = notifier_container.getLayout("normal");
+ if (!notifier_layout) return; // reinstall twice, man
+ } else if (cancel) {
+ cancelAnimation();
+ }
+}
+
+cancelAnimation()
+{
+ notifier_layout.cancelTarget();
+ notifier_timer.stop();
+}
+
+// ------------------------------------------------------------------------------
+showNotifier(int w) {
+ DebugString(IntegerToString(w), 0);
+ b_tohide = 0;
+ int x; int y;
+ int sy; int sx;
+ w = w + 30;
+
+ int getx, gety, geth, getw;
+
+ Layout m = getContainer("main").getCurLayout();
+ if (notifier_loc_vport_attrib.getData() == "1")
+ {
+ getx = getViewportLeftFromGuiObject(m);
+ gety = getViewportTopFromGuiObject(m);
+ geth = getViewportHeightFromGuiObject(m);
+ getw = getViewportWidthFromGuiObject(m);
+ }
+ else
+ {
+ getx = getMonitorLeftFromGuiObject(m);
+ gety = getMonitorTopFromGuiObject(m);
+ geth = getMonitorHeightFromGuiObject(m);
+ getw = getMonitorWidthFromGuiObject(m);
+ }
+ if (notifier_loc_br_attrib.getData() == "1") {
+ x = getw + getx - w - 2;
+ y = geth + gety - 80 - 2;
+ }
+ else if (notifier_loc_bl_attrib.getData() == "1") {
+ x = getx + 2;
+ y = geth + gety - 80 - 2;
+ }
+ else if (notifier_loc_bc_attrib.getData() == "1") {
+ x = getx + ((getw - w) / 2);
+ y = geth + gety - 80 - 2;
+ }
+ else if (notifier_loc_tr_attrib.getData() == "1") {
+ x = getw + getx - w - 2;
+ y = 2;
+ }
+ else if (notifier_loc_tc_attrib.getData() == "1") {
+ x = getx + ((getw - w) / 2);
+ y = 2;
+ }
+ else {
+ x = getx + 2;
+ y = 2;
+ }
+ if (notifier_fdin_alpha.getData() == "1") {
+ if (!notifier_layout.isVisible()) notifier_layout.resize(x, y, w, 80);
+ else
+ {
+ notifier_layout.resize(notifier_layout.getguiX(), y, notifier_layout.getGuiW(), 80);
+ }
+ if (notifier_layout.isTransparencySafe()) {
+ notifier_layout.show();
+ notifier_layout.settargetA(255);
+ notifier_layout.setTargetX(x);
+ notifier_layout.setTargetY(y);
+ notifier_layout.setTargetW(w);
+ notifier_layout.setTargetH(80);
+ notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeintime_attrib.getData()) / 1000);
+ notifier_layout.gotoTarget();
+ } else {
+ notifier_layout.setAlpha(255);
+ notifier_layout.show();
+ notifier_layout.settargetA(255);
+ notifier_layout.setTargetX(x);
+ notifier_layout.setTargetY(y);
+ notifier_layout.setTargetW(w);
+ notifier_layout.setTargetH(80);
+ notifier_timer.setDelay(StringToInteger(notifier_holdtime_attrib.getData()));
+ notifier_timer.start();
+ }
+ }
+ else if (notifier_fdin_vslide.getData() == "1") {
+ if (y == 2) sy = -80;
+ else sy = geth + 80;
+ if (!notifier_layout.isVisible()) notifier_layout.resize(x, sy, w, 80);
+ else
+ {
+ notifier_layout.resize(notifier_layout.getguiX(), y, notifier_layout.getGuiW(), 80);
+ }
+ notifier_layout.show();
+ notifier_layout.setAlpha(255);
+ notifier_layout.setTargetX(x);
+ notifier_layout.setTargetY(y);
+ notifier_layout.setTargetW(w);
+ notifier_layout.setTargetH(80);
+ notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeintime_attrib.getData()) / 1000);
+ notifier_layout.gotoTarget();
+ }
+ else {
+ if (x < (getw + getx)/2) sx = -w;
+ else sx = getw + w;
+ if (!notifier_layout.isVisible()) {
+ notifier_layout.resize(sx, y, w, 80);
+ }
+ else {
+ notifier_layout.resize(notifier_layout.getguiX(), y, notifier_layout.getGuiW(), 80);
+ }
+ notifier_layout.show();
+ notifier_layout.setAlpha(255);
+ notifier_layout.setTargetX(x);
+ notifier_layout.setTargetY(y);
+ notifier_layout.setTargetW(w);
+ notifier_layout.setTargetH(80);
+ notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeintime_attrib.getData()) / 1000);
+ notifier_layout.gotoTarget();
+ }
+}
+// ------------------------------------------------------------------------------
+
+prepareAlbumArtNotifier()
+{
+ if (!notifier_layout) return;
+ Group g_albumart = notifier_layout.findObject("notifier.albumart");
+
+ DebugString("prepareAlbumArtNotifier: handleAACalback="+integerToString(handleAACalback), 9);
+ if (g_albumart)
+ {
+ cover = g_albumart.findObject("notifier.cover");
+ DebugString("prepareAlbumArtNotifier: cover.isLoading="+integerToString(cover.isLoading()), 9);
+ DebugString("prepareAlbumArtNotifier: cover.isInvalid="+integerToString(cover.isInvalid()), 9);
+ handleAACalback = true;
+ cover.refresh();
+ }
+}
+
+cover.onAlbumArtLoaded(boolean success)
+{
+ /*
+ Created a seperate function for the code that was here because for some reason I couldn't force this
+ event (from the fallbackTempFix.onTimer) with cover.onAlbumArtLoaded(success) after the Winamp bug appears.
+ Weird, yes.
+ */
+ FORCE_BUG_MODE onAlbumArt(success);
+}
+
+// ------------------------------------------------------------------------------
+Int fillNextTrackInfo(String corneroverride) {
+ Int maxv = 0;
+ Int stream = 0;
+
+ if (!notifier_layout) return 0;
+
+ Group g_text = notifier_layout.findObject("notifier.text");
+ Group g_albumart = notifier_layout.findObject("notifier.albumart");
+
+ Text plentry = g_text.findObject("plentry");
+ Text nexttrack = g_text.findObject("nexttrack");
+ Text _title = g_text.findObject("title");
+ Text album = g_text.findObject("album");
+ Text artist = g_text.findObject("artist");
+ Text endofplayback = notifier_layout.findObject("endofplayback");
+ Text s_plentry = g_text.findObject("plentry.shadow");
+ Text s_nexttrack = g_text.findObject("nexttrack.shadow");
+ Text s_title = g_text.findObject("title.shadow");
+ Text s_album = g_text.findObject("album.shadow");
+ Text s_artist = g_text.findObject("artist.shadow");
+ Text s_endofplayback = notifier_layout.findObject("endofplayback.shadow");
+
+ DebugString("got callback for " + getPlayItemString(), 0);
+
+ // Get Stream Name - if no stream returns ""
+ string s = getPlayItemMetaDataString("streamname");
+ string stype = getPlayItemMetaDataString("streamtype"); //"streamtype" will return "2" for SHOUTcast and "5" for SHOUTcast 2
+ if (stype == "2" || stype == "5") stream = 1;
+
+ if (endofplayback) endofplayback.hide();
+ if (s_endofplayback) s_endofplayback.hide();
+
+ if (plentry)
+ {
+ plentry.setText(integerToString(getPlaylistIndex()+1)+translate(" of ")+integerToString(getPlaylistLength()));
+ plentry.show();
+ s_plentry.setText(integerToString(getPlaylistIndex()+1)+translate(" of ")+integerToString(getPlaylistLength()));
+ s_plentry.show();
+ }
+ if (nexttrack) {
+ if (corneroverride == "") {
+ if (!stream) {
+ if (!isVideo())
+ {
+ nexttrack.setText("New track");
+ s_nexttrack.setText("New track");
+ }
+ else
+ {
+ nexttrack.setText("New video");
+ s_nexttrack.setText("New video");
+ }
+ }
+ else
+ {
+ nexttrack.setText("On air");
+ s_nexttrack.setText("On air");
+ }
+ }
+ else
+ {
+ nexttrack.setText(corneroverride);
+ s_nexttrack.setText(corneroverride);
+ }
+ nexttrack.show();
+ s_nexttrack.show();
+ }
+ string set_artist = "";
+ string set = "";
+ if (_title) {
+ _title.setXmlParam("ticker", "0");
+ _title.setXmlParam("display", "");
+ s_title.setXmlParam("ticker", "0");
+ s_title.setXmlParam("display", "");
+ String str;
+ if (!stream)
+ {
+ str = getPlayitemMetaDataString("title");
+ if (str == "") str = getPlayitemDisplayTitle();
+ String l = getPlayItemMetaDataString("length");
+ if (l != "") {
+ str += " (" + integerToTime(stringtointeger(l)) + ")";
+ }
+ _title.setText(str);
+ s_title.setText(str);
+ }
+ else
+ {
+ if (str = getPlayItemMetaDataString("streamtitle") != "")
+ {
+ int v = strsearch(str, " - "); // We divide the string by a " - " sublimiter - no luck for old / wrong tagged stations
+ if (v > 0) {
+ set_artist = strleft (str, v); // Store artist
+ string str = strright (str, strlen(str) - 3 - v);
+ _title.setText(str);
+ s_title.setText(str);
+ }
+ else
+ {
+ _title.setXmlParam("ticker", "1"); // These titles can be _very_ long
+ s_title.setXmlParam("ticker", "1");
+ _title.setText(str);
+ s_title.setText(str);
+ }
+ } else {
+ _title.setXmlParam("ticker", "1");
+ _title.setXmlParam("display", "songtitle");
+ _title.setText("");
+ s_title.setXmlParam("ticker", "1");
+ s_title.setXmlParam("display", "songtitle");
+ s_title.setText("");
+ }
+ }
+ _title.show();
+ s_title.show();
+ }
+ if (artist) {
+ if (!stream) {
+ if (isVideo())
+ {
+ artist.setText("");
+ s_artist.setText("");
+ }
+ else
+ {
+ artist.setText(getPlayitemMetaDataString("artist"));
+ s_artist.setText(getPlayitemMetaDataString("artist"));
+ }
+ }
+ else
+ {
+ // Perhaps we've stored the artist before?
+ if (set_artist != "")
+ {
+ artist.setText(set_artist);
+ s_artist.setText(set_artist);
+ }
+ // Then display the station name
+ else if (s != "")
+ {
+ artist.setText(s);
+ s_artist.setText(s);
+ }
+ // So, we've had no luck - just display a static text :(
+ else
+ {
+ if (isVideo())
+ {
+ artist.setText("Internet TV");
+ s_artist.setText("Internet TV");
+ }
+ else
+ {
+ artist.setText("Internet Radio");
+ s_artist.setText("Internet Radio");
+ }
+ }
+ }
+ artist.show();
+ s_artist.show();
+ }
+ if (album) {
+ String str;
+ if (!stream && !isVideo()) {
+ s_album.setXmlParam("display", "");
+ album.setXmlParam("display", "");
+ str = getPlayitemMetaDataString("album");
+ String l = getPlayitemMetaDataString("track");
+ if (l != "" && l != "-1") str += " (" + translate("Track ") + l + ")";
+ album.setText(str);
+ s_album.setText(str);
+ }
+ else
+ {
+ album.setXmlParam("display", "");
+ s_album.setXmlParam("display", "");
+ // we have divided the songname - let's display the station name
+ if (set_artist != "" && s != "")
+ {
+ album.setText(s);
+ s_album.setText(s);
+ }
+ // no luck either...
+ else
+ {
+ album.setText("");
+ album.setXmlParam("display", "songinfo_localise");
+ s_album.setText("");
+ s_album.setXmlParam("display", "songinfo_localise");
+ }
+ }
+ album.show();
+ s_album.show();
+ }
+
+ // Album Art Stuff
+
+ Layer webcover;
+ if (g_albumart)
+ {
+ cover = g_albumart.findObject("notifier.cover");
+ webcover = g_albumart.findObject("notifier.webcover");
+ }
+
+ Boolean showAlbumArt = FALSE;
+
+ if (cover != NULL && webcover != NULL && notifier_artworkinnotification_attrib.getData() == "1")
+ {
+ if (stream)
+ {
+ if(stype == "2" || stype == "5" && cover.isInvalid())
+ {
+ webcover.setXMLParam("image", WEBCOVER_SHOUTCAST);
+ cover.hide();
+ webcover.show();
+ showAlbumArt = TRUE;
+ }
+ else if(stype == "5" && !cover.isInvalid())
+ {
+ webcover.hide();
+ cover.show();
+ showAlbumArt = TRUE;
+ }
+ }
+ else
+ {
+ if (cover.isInvalid()) // Check if the album art obj shows a pic
+ {
+ showAlbumArt = FALSE;
+ }
+ else
+ {
+ webcover.hide();
+ cover.show();
+ showAlbumArt = TRUE;
+ }
+ }
+ }
+
+ if (showAlbumArt)
+ {
+ if (g_albumart) g_albumart.show();
+ if (g_text) g_text.setXmlParam("x", "75");
+ if (g_text) g_text.setXmlParam("w", "-95");
+ }
+ else
+ {
+ if (g_albumart) g_albumart.hide();
+ if (g_text) g_text.setXmlParam("x", "15");
+ if (g_text) g_text.setXmlParam("w", "-35");
+ }
+
+ if (g_text) g_text.show();
+
+ maxv = artist.getAutoWidth();
+ if (maxv < album.getAutoWidth()) maxv = album.getAutoWidth();
+ if (maxv < _title.getAutoWidth()) maxv = _title.getAutoWidth();
+ if (maxv < (plentry.getAutoWidth() + nexttrack.getAutoWidth())) maxv = (plentry.getAutoWidth() + nexttrack.getAutoWidth());
+ if (maxv < 128) maxv = 128;
+
+ int getw;
+
+ Layout m = getContainer("main").getCurLayout();
+ if (notifier_loc_vport_attrib.getData() == "1")
+ {
+ //getw = getViewportWidth();
+ getw = getViewportWidthFromGuiObject(m);
+ }
+ else
+ {
+ getw = getMonitorWidthFromGuiObject(m);
+ }
+
+ if (maxv > getw/4) maxv = getw/4;
+
+ return maxv + ( showAlbumArt * 60 ) + 1; // Adds 60 extra pixels if album art is visible
+
+}
+
+// ------------------------------------------------------------------------------
+Int fillCustomInfo(String customtext)
+{
+ Group g_text = notifier_layout.findObject("notifier.text");
+ Group g_albumart = notifier_layout.findObject("notifier.albumart");
+
+ Text endofplayback = notifier_layout.findObject("endofplayback");
+ Text s_endofplayback = notifier_layout.findObject("endofplayback.shadow");
+
+ if (g_text) { g_text.hide(); }
+ if (g_albumart) g_albumart.hide();
+
+ if (endofplayback != NULL && s_endofplayback != NULL) {
+ endofplayback.setText(translate(customtext)+" ");
+ s_endofplayback.setText(translate(customtext)+" ");
+ int aw = endofplayback.getAutoWidth();
+ endofplayback.show();
+ s_endofplayback.show();
+ if (aw > 128)
+ return aw;
+ }
+ return 128;
+}
+
+//BUGFIX remove this timer later
+fallbackTempFix.onTimer() //As soon as this timer run, bug mode is ON ;)
+{
+ if (checkPref(0)) return;
+
+ if (!notifier_layout) onNext();
+
+ if(!triggerBug)
+ {
+ triggerBug = true;
+
+ onAlbumArt(cover.isInvalid()); //First time we see the bug
+ fallbackTempFix.setDelay(30);
+
+ DebugString("Hello Bug", 9);
+ }
+ else if(triggerBug && !cover.isLoading()) onAlbumArt(cover.isInvalid());
+}
+
+onAlbumArt(Boolean success){
+ fallbackTempFix.stop(); //BUGFIX remove later
+
+ DebugString("onAlbumArtLoaded: success="+integerToString(success), 9);
+ DebugString("onAlbumArtLoaded: handleAACalback="+integerToString(handleAACalback), 9);
+ DebugString("onAlbumArtLoaded: cover.isLoading="+integerToString(cover.isLoading()), 9);
+ DebugString("onAlbumArtLoaded: cover.isInvalid="+integerToString(cover.isInvalid()), 9);
+ if (!handleAACalback || !notifier_layout /*|| isLoading()*/)
+ {
+ return;
+ }
+
+ handleAACalback = cover.isLoading();
+ cancelAnimation();
+ showNotifier(fillNextTrackInfo(cur_status));
+} \ No newline at end of file