home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / temacd / songbird / Songbird_0.4_windows-i686.exe / components / sbLibraryUtils.jsm < prev    next >
Text File  |  2007-12-21  |  5KB  |  204 lines

  1. /*
  2. //
  3. // BEGIN SONGBIRD GPL
  4. //
  5. // This file is part of the Songbird web player.
  6. //
  7. // Copyright(c) 2005-2008 POTI, Inc.
  8. // http://songbirdnest.com
  9. //
  10. // This file may be licensed under the terms of of the
  11. // GNU General Public License Version 2 (the "GPL").
  12. //
  13. // Software distributed under the License is distributed
  14. // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
  15. // express or implied. See the GPL for the specific language
  16. // governing rights and limitations.
  17. //
  18. // You should have received a copy of the GPL along with this
  19. // program. If not, go to http://www.gnu.org/licenses/gpl.html
  20. // or write to the Free Software Foundation, Inc.,
  21. // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  22. //
  23. // END SONGBIRD GPL
  24. //
  25. */
  26. Components.utils.import("resource://app/components/sbProperties.jsm");
  27.  
  28. EXPORTED_SYMBOLS = ["BatchHelper", "MultiBatchHelper", "LibraryUtils"];
  29.  
  30. const Cc = Components.classes;
  31. const Ci = Components.interfaces;
  32.  
  33. var LibraryUtils = {
  34.  
  35.   get manager() {
  36.     var manager = Cc["@songbirdnest.com/Songbird/library/Manager;1"].
  37.                   getService(Ci.sbILibraryManager);
  38.     if (manager) {
  39.       // Succeeded in getting the library manager, don't do this again.
  40.       this.__defineGetter__("manager", function() {
  41.         return manager;
  42.       });
  43.     }
  44.     return manager;
  45.   },
  46.  
  47.   get mainLibrary() {
  48.     return this.manager.mainLibrary;
  49.   },
  50.  
  51.   get webLibrary() {
  52.     var webLibraryGUID = Cc["@mozilla.org/preferences-service;1"].
  53.                          getService(Ci.nsIPrefBranch).
  54.                          getCharPref("songbird.library.web");
  55.     var webLibrary = this.manager.getLibrary(webLibraryGUID);
  56.     delete webLibraryGUID;
  57.  
  58.     if (webLibrary) {
  59.       // Succeeded in getting the web library, don't ever do this again.
  60.       this.__defineGetter__("webLibrary", function() {
  61.         return webLibrary;
  62.       });
  63.     }
  64.  
  65.     return webLibrary;
  66.   },
  67.  
  68.   _standardFilterConstraint: null,
  69.   get standardFilterConstraint() {
  70.     if (!this._standardFilterConstraint) {
  71.       this._standardFilterConstraint = this.createConstraint([
  72.         [
  73.           [SBProperties.isList, ["0"]]
  74.         ],
  75.         [
  76.           [SBProperties.hidden, ["0"]]
  77.         ]
  78.       ]);
  79.     }
  80.     return this._standardFilterConstraint;
  81.   },
  82.  
  83.   createConstraint: function(aObject) {
  84.     var builder = Cc["@songbirdnest.com/Songbird/Library/ConstraintBuilder;1"]
  85.                     .createInstance(Ci.sbILibraryConstraintBuilder);
  86.     aObject.forEach(function(aGroup, aIndex) {
  87.       aGroup.forEach(function(aPair) {
  88.         var property = aPair[0];
  89.         var values = aPair[1];
  90.         var enumerator = {
  91.           a: values,
  92.           i: 0,
  93.           hasMore: function() {
  94.             return this.i < this.a.length;
  95.           },
  96.           getNext: function() {
  97.             return this.a[this.i++];
  98.           }
  99.         };
  100.         builder.includeList(property, enumerator);
  101.       });
  102.       if (aIndex < aObject.length - 1) {
  103.         builder.intersect();
  104.       }
  105.     });
  106.     return builder.get();
  107.   },
  108.  
  109.   createStandardSearchConstraint: function(aSearchString) {
  110.     if (aSearchString == "" || !aSearchString) 
  111.       return null;
  112.     var builder = Cc["@songbirdnest.com/Songbird/Library/ConstraintBuilder;1"]
  113.                     .createInstance(Ci.sbILibraryConstraintBuilder);
  114.     var a = aSearchString.split(" ");
  115.     var first = true;
  116.     for (var i = 0; i < a.length; i++) {
  117.       if (a[i] && a[i] != "") {
  118.         if (!first) {
  119.           builder.intersect();
  120.         }
  121.         builder.include(SBProperties.artistName, a[i]);
  122.         builder.include(SBProperties.albumName, a[i]);
  123.         builder.include(SBProperties.trackName, a[i]);
  124.         first = false;
  125.       }
  126.     }
  127.     return builder.get();
  128.   }
  129. }
  130.  
  131. function BatchHelper() {
  132.   this._depth = 0;
  133. }
  134.  
  135. BatchHelper.prototype.begin =
  136. function BatchHelper_begin()
  137. {
  138.   this._depth++;
  139. }
  140.  
  141. BatchHelper.prototype.end =
  142. function BatchHelper_end()
  143. {
  144.   this._depth--;
  145.   if (this._depth < 0) {
  146.     throw new Error("Invalid batch depth!");
  147.   }
  148. }
  149.  
  150. BatchHelper.prototype.depth =
  151. function BatchHelper_depth()
  152. {
  153.   return this._depth;
  154. }
  155.  
  156. BatchHelper.prototype.isActive =
  157. function BatchHelper_isActive()
  158. {
  159.   return this._depth > 0;
  160. }
  161.  
  162. function MultiBatchHelper() {
  163.   this._libraries = {};
  164. }
  165.  
  166. MultiBatchHelper.prototype.get =
  167. function MultiBatchHelper_get(aLibrary)
  168. {
  169.   var batch = this._libraries[aLibrary.guid];
  170.   if (!batch) {
  171.     batch = new BatchHelper();
  172.     this._libraries[aLibrary.guid] = batch;
  173.   }
  174.   return batch;
  175. }
  176.  
  177. MultiBatchHelper.prototype.begin =
  178. function MultiBatchHelper_begin(aLibrary)
  179. {
  180.   var batch = this.get(aLibrary);
  181.   batch.begin();
  182. }
  183.  
  184. MultiBatchHelper.prototype.end =
  185. function MultiBatchHelper_end(aLibrary)
  186. {
  187.   var batch = this.get(aLibrary);
  188.   batch.end();
  189. }
  190.  
  191. MultiBatchHelper.prototype.depth =
  192. function MultiBatchHelper_depth(aLibrary)
  193. {
  194.   var batch = this.get(aLibrary);
  195.   return batch.depth();
  196. }
  197.  
  198. MultiBatchHelper.prototype.isActive =
  199. function MultiBatchHelper_isActive(aLibrary)
  200. {
  201.   var batch = this.get(aLibrary);
  202.   return batch.isActive();
  203. }
  204.