home *** CD-ROM | disk | FTP | other *** search
/ Freelog 100 / FreelogNo100-NovembreDecembre2010.iso / Multimedia / Songbird / Songbird_1.8.0-1800_windows-i686-msvc8.exe / components / sbM3UPlaylistWriter.js < prev    next >
Text File  |  2010-08-30  |  4KB  |  120 lines

  1. /*
  2.  *=BEGIN SONGBIRD GPL
  3.  *
  4.  * This file is part of the Songbird web player.
  5.  *
  6.  * Copyright(c) 2005-2009 POTI, Inc.
  7.  * http://www.songbirdnest.com
  8.  *
  9.  * This file may be licensed under the terms of of the
  10.  * GNU General Public License Version 2 (the ``GPL'').
  11.  *
  12.  * Software distributed under the License is distributed
  13.  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
  14.  * express or implied. See the GPL for the specific language
  15.  * governing rights and limitations.
  16.  *
  17.  * You should have received a copy of the GPL along with this
  18.  * program. If not, go to http://www.gnu.org/licenses/gpl.html
  19.  * or write to the Free Software Foundation, Inc.,
  20.  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  21.  *
  22.  *=END SONGBIRD GPL
  23.  */
  24.  
  25. /**
  26.  * \file sbM3UPlaylistWriter.js
  27.  */
  28. Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
  29. Components.utils.import("resource://app/jsmodules/ArrayConverter.jsm");
  30. const Cc = Components.classes;
  31. const Ci = Components.interfaces;
  32. const Cr = Components.results;
  33.  
  34. var PR_WRONLY           = 0x02;
  35. var PR_CREATE_FILE      = 0x08;
  36. var PR_TRUNCATE         = 0x20;
  37. var DEFAULT_PERMISSIONS = 0666;
  38.  
  39. function sbM3UPlaylistWriter() {
  40. }
  41.  
  42. sbM3UPlaylistWriter.prototype = {
  43.   classDescription:  "M3U Playlist Writer",
  44.   classID:           Components.ID("{a11690c2-1dd1-11b2-82ba-8a4e72869f7a}"),
  45.   contractID:        "@songbirdnest.com/Songbird/PlaylistWriter/M3U;1",
  46.   QueryInterface:    XPCOMUtils.generateQI([Ci.sbIPlaylistWriter]),
  47.   _xpcom_categories: [{category: "playlist-writer", entry: "m3u"}],
  48.  
  49.   write: function(aFile, aMediaList, aContentType, aPlaylistFormatType) {
  50.     var foStream = Cc["@mozilla.org/network/file-output-stream;1"]
  51.                      .createInstance(Ci.nsIFileOutputStream);
  52.  
  53.     // write, create, truncate
  54.     foStream.init(aFile, PR_WRONLY| PR_CREATE_FILE | PR_TRUNCATE, DEFAULT_PERMISSIONS, 0);
  55.  
  56.     // if you are sure there will never ever be any non-ascii text in data you can
  57.     // also call foStream.writeData directly
  58.     var converter = Cc["@mozilla.org/intl/converter-output-stream;1"]
  59.                       .createInstance(Ci.nsIConverterOutputStream);
  60.     converter.init(foStream, "UTF-8", 0, 0);
  61.  
  62.     var buildM3U = {
  63.       items: [],
  64.       onEnumerationBegin: function(aMediaList) {},
  65.       onEnumeratedItem: function(aMediaList, aMediaItem) {
  66.         var uri = aMediaItem.contentSrc;
  67.         // We don't allow non-file URIs to be written. At the moment.
  68.         if (!uri || uri.scheme != "file") { return; }
  69.         var f = uri.QueryInterface(Ci.nsIFileURL).file;
  70.  
  71.         try {
  72.           // Show the directory containing the file and select the file
  73.           f.QueryInterface(Ci.nsILocalFile);
  74.           var data = f.getRelativeDescriptor(aFile.parent) + "\n";
  75.  
  76.           // Some devices are picky about path separators. If the playlist
  77.           // format type specifies a path separator, ensure we are using
  78.           // that separator.
  79.           if (aPlaylistFormatType && aPlaylistFormatType.pathSeparator) {
  80.             data = data.replace(/\//g, aPlaylistFormatType.pathSeparator);  
  81.           }
  82.           converter.writeString(data);
  83.         }
  84.         catch (e) {
  85.           Components.utils.reportError("Error writing M3U: " + e);
  86.         }
  87.       },
  88.       onEnumerationEnd: function(aMediaList, aResultCode) {}
  89.     };
  90.  
  91.     aMediaList.enumerateAllItems(buildM3U);
  92.     converter.close(); // this closes foStream
  93.     buildM3U = null;
  94.   },
  95.  
  96.   name: function() {
  97.     return "Songbird M3U Writer";
  98.   },
  99.  
  100.   description: function() {
  101.     return "Write M3U playlists";
  102.   },
  103.  
  104.   supportedMIMETypes: function(aMIMECount) {
  105.     var mimeTypes = ["audio/mpegurl", "audio/x-mpegurl"];
  106.     aMIMECount.value = mimeTypes.length;
  107.     return mimeTypes;
  108.   },
  109.  
  110.   supportedFileExtensions: function(aExtCount) {
  111.     var exts = ["m3u"];
  112.     aExtCount.value = exts.length;
  113.     return exts;
  114.   },
  115. };
  116.  
  117. function NSGetModule(compMgr, fileSpec) {
  118.   return XPCOMUtils.generateModule([sbM3UPlaylistWriter]);
  119. }
  120.