Part of Slepp's ProjectsPastebinTURLImagebinFilebin
Feedback -- English French German Japanese
Create Upload Newest Tools Donate
Sign In | Create Account

Stuff
Saturday, February 9th, 2008 at 9:53:17am MST 

  1. try {
  2.  
  3.  
  4.   var medialib;
  5.   var mquery;
  6.   var albumremote;
  7.   var artistremote;
  8.   var filepath;
  9.   var timeout;
  10.   var onalbumchange;
  11.   var frame;
  12.   var firefoxClassLoaderURL;
  13.   var policy;
  14.   var tracingClassLoaderClass;
  15.   var bootstraped;
  16.   var albumArtClass;
  17.   var traceFlag = true;
  18.   var firefoxClassLoaderURL
  19.   var applet = null;
  20.   var currentArtist="";
  21.   var currentAlbum="";
  22.   var downloadImage=false;
  23.   var writeMp3Tag=false;
  24.  
  25.   var prefs;
  26.   var splitter;
  27.   var box=null;
  28.   var oldframe=null;
  29.   var framebox;
  30.   var removespacer;
  31.   var firefoxClassLoaderPackages;
  32.   var packages;
  33.   var playlist;
  34.   var loaded = false;
  35.  
  36.   function loadAlbums() {
  37.  
  38.                
  39.     var url;
  40.         var javaInstance
  41.     var album = albumremote.stringValue;
  42.        
  43.         var artist = artistremote.stringValue;
  44.        
  45.         downloadImage = this.prefs.getBoolPref("downloadImages");
  46.     writeMp3Tag =  this.prefs.getBoolPref("writeMp3tag");
  47.  
  48.        
  49.         var doc = frame.contentDocument;
  50.         if (doc.wrappedJSObject)
  51.                 doc = doc.wrappedJSObject;
  52.        
  53.         applet = doc.applets[0];
  54.        
  55.         if (applet == null){
  56.                 alert("Applet not loaded. Please ensure that java 1.6 (1.5 for Mac OS) is installed on Songbird");
  57.         } else  {
  58.                
  59.                 if (((currentAlbum != album) || (currentArtist != artist)) && (album!="" || artist!=""))
  60.                 {
  61.                        
  62.                         currentAlbum = album;
  63.                         currentArtist = artist;
  64.                        
  65.                 }
  66.                
  67.                 var file = filepath.stringValue;
  68.                        
  69.                        
  70.                         applet.setDownloadImage(downloadImage);
  71.                         applet.setWriteMP3Tag(writeMp3Tag);
  72.                         addAlbumsByArtist();
  73.                        
  74.                 applet.loadingDone();
  75.                
  76.         }       
  77.        
  78.        
  79.                
  80.    
  81.        
  82.        
  83.    
  84.   }
  85.  
  86.   function initAlbumApplet() {
  87.     initmedialib();
  88.        
  89.         givePermission();
  90.        
  91.    
  92.     albumremote = SB_NewDataRemote("metadata.album", null);
  93.         artistremote = SB_NewDataRemote("metadata.artist", null);
  94.         filepath = SB_NewDataRemote("metadata.url",null);
  95.         /*
  96.    function onPlaylistCellClick( aEvent ) {
  97.    // we can get the property that was clicked on...
  98.      alert(aEvent.property);
  99.      
  100.      // or the <MediaItem>
  101.      alert(aEvent.item.guid);
  102.    
  103.     // as well as key states from MouseEvent
  104.      alert(aEvent.ctrlKey);
  105.    }
  106.         songbird;
  107.         */
  108.         var albumExtension = {
  109.                 albumListener: function(evt) {
  110.                            setAlbumFilter(evt.target.getAttribute("album"));
  111.                           
  112.                 }
  113.         }
  114.        
  115.         var loadedExtension = {
  116.                 loadedListener: function(evt) {
  117.                                
  118.                                 loadAlbums();           
  119.                 }
  120.         }
  121.        
  122.         var playExtension = {
  123.                 playListener :  function(evt) {
  124.                         setAlbumFilter(evt.target.getAttribute("album"));
  125.                         playFilter();
  126.                 }
  127.         }
  128.        
  129.         var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
  130.                   .getInterface(Components.interfaces.nsIWebNavigation)
  131.                   .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
  132.                   .rootTreeItem
  133.                   .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
  134.                   .getInterface(Components.interfaces.nsIDOMWindow);
  135.         mainWindow.document.addEventListener("albumChangeEvent", function(e) { albumExtension.albumListener(e); }, false, true);
  136.         mainWindow.document.addEventListener("appletLoadedEvent", function(e) { loadedExtension.loadedListener(e); }, false, true);
  137.         mainWindow.document.addEventListener("AlbumAppletPlayEvent", function(e) { playExtension.playListener(e); }, false, true);
  138.         //mainWindow.document.addEventListener("PlaylistCellClick", onPlaylistCellClick, false, true);
  139.         var onalbumchange = {
  140.             observe: function( aSubject, aTopic, aData ) {
  141.         syncSelectedAlbum();
  142.       }
  143.     };
  144.     albumremote.bindObserver(onalbumchange, true);
  145.        
  146.        
  147.        
  148.        
  149.         var firefoxClassLoaderURL =
  150.         new java.net.URL(getPath("albumapplet") + "components/firefoxClassLoader.jar");
  151.    
  152.    
  153.        
  154.        
  155.         var extensionPath = getPath("albumapplet");
  156.        
  157.              
  158.        
  159.         /*
  160.          *  Enumerate URLs to our JARs and class directories
  161.          */
  162.                 
  163.         var libPath = extensionPath + "components/lib/";
  164.         var jarFilenames = [
  165.                         "classes/",
  166.             "albumjava/", //the albumJava classes,
  167.                         "albumjava/ascrblr-1.0-alpha2.jar",
  168.                         "albumjava/jdom.jar",
  169.                         "albumjava/swingx-2007_10_14.jar",
  170.                         "albumjava/sqlitejdbc-v037-nested.jar",
  171.                         "albumjava/JID3.jar",
  172.                         "albumjava/TimingFramework-1.0.jar"
  173.                        
  174.         ];
  175.        
  176.         var jarFilepaths = [];
  177.         for (var i = 0; i < jarFilenames.length; i++) {
  178.             jarFilepaths.push(libPath + jarFilenames[i]);
  179.         }
  180.        
  181.         /*
  182.          *  Load them up!
  183.          */
  184.         packages = loadJava(jarFilepaths);
  185.        
  186.        
  187.        
  188.        
  189.         /*
  190.          *  Create a sample Java object
  191.          */
  192.        
  193.                 placeApplet();
  194.                
  195.                
  196.        
  197.                
  198.                
  199.    
  200.    
  201.   }
  202.  
  203.  
  204.  
  205.         function syncSelectedAlbum()
  206.         {
  207.                 var album = albumremote.stringValue;
  208.                
  209.                 var artist = artistremote.stringValue;
  210.                 if (((currentAlbum != album) || (currentArtist != artist)) && (album!="" || artist!="") && applet!=null)
  211.                 {
  212.                         applet.setSelectedAlbum(album,artist);
  213.                        
  214.                 }
  215.         }
  216.    
  217.        
  218.        
  219.         function setAlbumFilter( aAlbum ) {
  220.                
  221.                 try {
  222.                   // Crack out the variables we'll need
  223.                   var playlist = document.getElementById("sb-library-page-playlist");
  224.                   var mediaListView = playlist.mediaListView;
  225.                   var cascadeFilterSet = mediaListView.cascadeFilterSet;
  226.                   // Find which filter index is the album filter
  227.                   var albumIndex = -1;
  228.                   for ( albumIndex = 0; albumIndex < cascadeFilterSet.length; albumIndex++ ) {
  229.                         if ( cascadeFilterSet.getProperty( albumIndex ) == SBProperties.albumName )
  230.                           break;
  231.                   }
  232.                   // If we found the albumIndex
  233.                   if ( albumIndex < cascadeFilterSet.length ) {
  234.                         // Get all the valid albums
  235.                         var albums = cascadeFilterSet.getValues( albumIndex );
  236.                         // Find the requested album
  237.                         while ( albums.hasMore() ) {
  238.                           var album = albums.getNext();
  239.                           if ( album == aAlbum ) {
  240.                                 // And set a single filter value and return
  241.                                 cascadeFilterSet.set( albumIndex, [ aAlbum ], 1 );
  242.                                
  243.                                 return;
  244.                           }
  245.                         }
  246.                         // OTHERWISE, I guess you meant to clear the filter, right?
  247.                         cascadeFilterSet.set( albumIndex, [ ], 0 );
  248.                   }
  249.                 } catch ( err ) {
  250.                   alert( "setAlbumFilter( '" + aAlbum + "' )\n\n" + err );
  251.                 }
  252.         }
  253.        
  254.         function playFilter(){
  255.                 try {
  256.                          var playlist = document.getElementById("sb-library-page-playlist");
  257.                          playlist.sendPlayEvent();
  258.                 } catch( err) {
  259.                         alert("playFilter error. Someone messed up. I swear, it wasn't me! \n" + err);
  260.                 }
  261.         }
  262.                
  263.                
  264.        
  265.  
  266.   function resetalbumArt() {
  267.    
  268.     medialib = null;
  269.     mquery = null;
  270.     albumremote.unbind();
  271.     albumremote = null;
  272.     onalbumchange = null;
  273.         button = null;
  274.   }
  275.  
  276.   function initmedialib() {
  277.     //medialib = Components.classes["@songbirdnest.com/Songbird/MediaLibrary;1"].createInstance(Components.interfaces.sbILibrary);
  278.     mquery = Components.classes["@songbirdnest.com/Songbird/DatabaseQuery;1"].createInstance(Components.interfaces.sbIDatabaseQuery);
  279.     mquery.setDatabaseGUID("main@library.songbirdnest.com");
  280.     //medialib.setQueryObject(mquery);
  281.         prefs = Components.classes["@mozilla.org/preferences-service;1"]
  282.                          .getService(Components.interfaces.nsIPrefService)
  283.                          .getBranch("albumapplet.");
  284.                 prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
  285.   }
  286.  
  287.   function placeApplet() { //places the applet in the interface
  288.         var boxstring;
  289.         var oldframestring;
  290.        
  291.         if (box != null)
  292.         {
  293.                 try{
  294.                         box.removeChild(framebox);
  295.                         box.removeChild(splitter);
  296.                         }
  297.                 catch (e){}
  298.                        
  299.         }
  300.  
  301.        
  302.         framebox = document.createElement("hbox");
  303.         framebox.setAttribute("flex","1");
  304.         framebox.setAttribute("align","top");
  305.         framebox.setAttribute("id","appletbox");
  306.         //framebox.setAttribute("onclick","getAlbum();");
  307.        
  308.        
  309.         frame = document.createElement("iframe");
  310.        
  311.    frame.setAttribute("flex","1");
  312.    frame.setAttribute("id","flowapplet");
  313.    frame.setAttribute("min-height","10");
  314.    frame.setAttribute("height","1000");
  315.    frame.setAttribute("src",getPath("albumapplet") + "components/lib/albumjava/album.htm");
  316.    frame.setAttribute("mayscript","yes");
  317.    
  318.  
  319.    
  320.         framebox.appendChild(frame);
  321.         splitter = document.createElement("sb-smart-splitter");
  322.        
  323.         splitter.setAttribute("id","horz_splitter");
  324.         splitter.setAttribute("state", "open");
  325.     splitter.setAttribute("resizebefore", "closest");
  326.     splitter.setAttribute("resizeafter", "closest");
  327.     splitter.setAttribute("collapse", "before");
  328.         var grippy = document.createElement( "grippy" );
  329.     splitter.appendChild(grippy);
  330.        
  331.  
  332.         box=document.getElementById("sb-playlist");
  333.         oldframe = document.getElementById("sb-playlist-filters");
  334.        
  335.        
  336.         box.insertBefore(framebox,oldframe);
  337.         box.insertBefore(splitter,oldframe);
  338.        
  339.        
  340.        
  341.         }
  342.        
  343.         function testninja()
  344.         {
  345.                 alert("win!");
  346.         }
  347.         function getAlbum()
  348.         {
  349.                 try{
  350.                         applet= frame.contentDocument.applets[0];
  351.                         alert(applet.getCurrentAlbum());
  352.                 }
  353.                 catch(e){}
  354.         }
  355.                
  356.  
  357.  
  358.   function onalbumChange() {
  359.     loadalbum();
  360.   }
  361.  
  362.   function addAlbumsByArtist()
  363.   {
  364.         //Remove
  365.         var statusDataRemote;
  366.     var faceplateReg;
  367.     var faceplatePane;
  368.  
  369.     statusDataRemote = Components.
  370.                           classes["@songbirdnest.com/Songbird/DataRemote;1"].
  371.                           createInstance(Components.interfaces.sbIDataRemote);
  372.     statusDataRemote.init("faceplate.status.text", null);
  373.         //End Remove
  374.         mquery.resetQuery();
  375.         mquery.addQuery("SELECT DISTINCT r1.obj AS album,r2.obj AS artist, r1.content_url AS file FROM (media_items NATURAL JOIN  resource_properties) AS r1, resource_properties AS r2  WHERE r1.property_id=2 AND r2.property_id=3 AND r1.guid=r2.guid  GROUP BY album ORDER BY r2.obj ");
  376.         mquery.execute();
  377.         mquery.waitForCompletion();
  378.         var albums = mquery.getResultObject();
  379.         var count = albums.getRowCount();
  380.         var index
  381.         var artist;
  382.         dump("Calling applet");
  383.         applet.setAlbumCount(count);
  384.         for( var i = 0; i<count; i++)
  385.         {
  386.                 applet.addImage(albums.getRowCellByColumn(i,"file"),albums.getRowCellByColumn(i,"artist"),albums.getRowCellByColumn(i,"album"));
  387.         }
  388.        
  389.        
  390.         }
  391.        
  392.         function getPath(extensionName) {
  393.                 var chromeRegistry =
  394.                 Components.classes["@mozilla.org/chrome/chrome-registry;1"]
  395.                 .getService(Components.interfaces.nsIChromeRegistry);
  396.  
  397.                 var uri =
  398.                 Components.classes["@mozilla.org/network/standard-url;1"]
  399.                 .createInstance(Components.interfaces.nsIURI);
  400.  
  401.                 uri.spec = "chrome://" + extensionName + "/content/";
  402.  
  403.                 var path = chromeRegistry.convertChromeURL(uri);
  404.                 if (typeof(path) == "object") {
  405.                 path = path.spec;
  406.                 }
  407.  
  408.                 path = path.substring(0, path.indexOf("/chrome/") + 1);
  409.  
  410.                 return path;
  411.         }
  412.        
  413.         function givePermission()
  414.         {
  415.                 firefoxClassLoaderURL =
  416.                 new java.net.URL(getPath("albumapplet") + "components/firefoxClassLoader.jar");
  417.  
  418.                 /*
  419.                  *  Step 1. Load the bootstraping firefoxClassLoader.jar.
  420.                  */
  421.                 var bootstrapClassLoader = java.net.URLClassLoader.newInstance([ firefoxClassLoaderURL ]);
  422.                
  423.                 /*
  424.                  *  Step 2. Instantiate a URLSetPolicy object from firefoxClassLoader.jar.
  425.                  */
  426.                 var policyClass = java.lang.Class.forName(
  427.                         "edu.mit.simile.firefoxClassLoader.URLSetPolicy",
  428.                         true,
  429.                         bootstrapClassLoader
  430.                 );
  431.                 policy = policyClass.newInstance();
  432.                
  433.                 /*
  434.                  *  Step 3. Now, the trick: We wrap our own URLSetPolicy around
  435.                  *  the current security policy of the JVM security manager. This
  436.                  *  allows us to give our own Java code whatever permission we
  437.                  *  want, even though Firefox doesn't give us any permission.
  438.                  */
  439.                 policy.setOuterPolicy(java.security.Policy.getPolicy());
  440.                 java.security.Policy.setPolicy(policy);
  441.                
  442.                 /*
  443.                  *  Step 4. Give ourselves all permission. Yay!
  444.                  */
  445.                 policy.addPermission(new java.security.AllPermission());
  446.                        
  447.                 /*
  448.                  *  That's pretty much it for the security bootstraping hack. But we want to
  449.                  *  do a little more. We want our own class loader for subsequent JARs that
  450.                  *  we load.
  451.                  */
  452.                 
  453.                 /*
  454.                  *  Step 5. Reload firefoxClassLoader.jar and so we can make use of
  455.                  *  TracingClassLoader. We need to reload it because when it was
  456.                  *  loaded previously, we had not yet set the policy to give it
  457.                  *  enough permission for loading classes.
  458.                  */
  459.                   
  460.                 policy.addURL(firefoxClassLoaderURL);
  461.                
  462.                 firefoxClassLoaderPackages = new WrappedPackages(
  463.                         java,
  464.                         java.net.URLClassLoader.newInstance([ firefoxClassLoaderURL ])
  465.                 );
  466.                 tracingClassLoaderClass =
  467.                         firefoxClassLoaderPackages.getClass("edu.mit.simile.firefoxClassLoader.TracingClassLoader");
  468.                 bootstraped = true;
  469.                 dump("Permissions succesfully given");
  470.  
  471.         }
  472.  
  473.         function loadJava(jarURLStrings)
  474.         {
  475.                 var jarURLs = [];
  476.                
  477.                 /*
  478.                  *  We include the firefoxClassLoader.jar again whenever we
  479.                  *  load more JARs so that we can use various reflection
  480.                  *  utility classes in firefoxClassLoader.jar on these
  481.                  *  JARs.
  482.                  */
  483.                  jarURLs.push(firefoxClassLoaderURL);
  484.                  policy.addURL(jarURLs[0]);
  485.                
  486.                 /*
  487.                  *  Now we add the rest of the JARs.
  488.                  */
  489.                 for (var i = 0; i < jarURLStrings.length; i++) {
  490.                         var jarURL = new java.net.URL(jarURLStrings[i]);
  491.                         jarURLs.push(jarURL);
  492.                        
  493.                         policy.addURL(jarURL); // include the URL in the policy
  494.                 }
  495.                        
  496.                 /*
  497.                  *  Create a new TracingClassLoader
  498.                  */
  499.                 var classLoader = tracingClassLoaderClass.m("newInstance")(traceFlag);
  500.                
  501.                 /*
  502.                  *  Give it the JARS
  503.                  */
  504.                 for (var i = 0; i < jarURLs.length; i++) {
  505.                         classLoader.add(jarURLs[i]);
  506.                 }
  507.                 java.lang.Thread.currentThread().setContextClassLoader(classLoader);
  508.                
  509.                 /*
  510.                  *  Wrap up the class loader and return
  511.                  */
  512.                 var packages = new WrappedPackages(java, classLoader);
  513.                
  514.                 return packages;
  515.         }
  516.  
  517.         function WrappedPackages(java, classLoader) {
  518.                 var packages = java.lang.Class.forName(
  519.                         "edu.mit.simile.firefoxClassLoader.Packages",
  520.                         true,
  521.                         classLoader
  522.                 ).newInstance();
  523.                
  524.                 var argumentsToArray = function(args) {
  525.                         var a = [];
  526.                         for (var i = 0; i < args.length; i++) {
  527.                                 a[i] = args[i];
  528.                         }
  529.                         return a;
  530.                 }
  531.  
  532.                 this.getClass = function(className) {
  533.                         var classWrapper = packages.getClass(className);
  534.                         if (classWrapper) {
  535.                                 return {
  536.                                         n : function() {
  537.                                                 return classWrapper.callConstructor(argumentsToArray(arguments));
  538.                                         },
  539.                                         f : function(fieldName) {
  540.                                                 return classWrapper.getField(fieldName);
  541.                                         },
  542.                                         m : function(methodName) {
  543.                                                 return function() {
  544.                                                         return classWrapper.callMethod(methodName, argumentsToArray(arguments));
  545.                                                 };
  546.                                         }
  547.                                 };
  548.                         } else {
  549.                                 return null;
  550.                         }
  551.                 };
  552.                
  553.                 this.setTracing = function(enable) {
  554.                         classLoader.setTracing((enable) ? true : false);
  555.                 };
  556.         }
  557.                
  558.        
  559.  
  560.  
  561.  
  562.         var prefWatcher = {
  563.            pref: null,
  564.               
  565.            // Initialize the extension
  566.           
  567.            startup: function()
  568.            {
  569.                  // Register to receive notifications of preference changes
  570.                 
  571.                  this.pref = Components.classes["@mozilla.org/preferences-service;1"]
  572.                          .getService(Components.interfaces.nsIPrefService)
  573.                          .getBranch("albumapplet.appletPlacement");
  574.                  this.pref.QueryInterface(Components.interfaces.nsIPrefBranch2);
  575.                  this.pref.addObserver("", this, false);
  576.                 
  577.                 
  578.                 
  579.            },
  580.            observe: function(subject, topic, data)
  581.            {
  582.                  if (topic != "nsPref:changed")
  583.                  {
  584.                    return;
  585.                  }
  586.         
  587.                  placeApplet();
  588.            },
  589.           
  590.            shutdown: function()
  591.           {
  592.                 this.pref.removeObserver("", this);
  593.           }
  594.         }
  595.         prefWatcher.startup();
  596. } catch (e) {
  597. }
  598.    

advertising

Update the Post

Either update this post and resubmit it with changes, or make a new post.

You may also comment on this post.

update paste below
details of the post (optional)

Note: Only the paste content is required, though the following information can be useful to others.

Save name / title?

(space separated, optional)



Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.