home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / komunikace / kmeleon / K-Meleon1.1.3en-US.exe / chrome / newsfox.jar / content / newsfox / livemarks.js < prev    next >
Text File  |  2007-08-07  |  9KB  |  317 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is bookmarksHome.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Jeroen Groenenboom <jagrboom@zonnet.nl>
  18.  * Portions created by the Initial Developer are Copyright (C) 2004-2007
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *   Andrey Gromyko <andrey@gromyko.name>
  23.  *   Ron Pruitt <wa84it@gmail.com>
  24.  *
  25.  * Alternatively, the contents of this file may be used under the terms of
  26.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  27.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  28.  * in which case the provisions of the GPL or the LGPL are applicable instead
  29.  * of those above. If you wish to allow use of your version of this file only
  30.  * under the terms of either the GPL or the LGPL, and not to allow others to
  31.  * use your version of this file under the terms of the MPL, indicate your
  32.  * decision by deleting the provisions above and replace them with the notice
  33.  * and other provisions required by the GPL or the LGPL. If you do not delete
  34.  * the provisions above, a recipient may use your version of this file under
  35.  * the terms of any one of the MPL, the GPL or the LGPL.
  36.  *
  37.  * ***** END LICENSE BLOCK ***** */
  38.  
  39. function lifemarkData(title, URL)
  40. {
  41.     this.title = title;
  42.     this.URL = URL;
  43. }
  44. var liveBookmarks = 
  45. {
  46.     // RDF namespaces
  47.     NC_NS : "http://home.netscape.com/NC-rdf#",
  48.     RDF_NS : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
  49.  
  50.     getRDF: function()
  51.     {
  52.         return Components.classes["@mozilla.org/rdf/rdf-service;1"]
  53.             .getService( Components.interfaces.nsIRDFService );
  54.     },
  55.  
  56.     getRDFC: function()
  57.     {
  58.         return Components.classes["@mozilla.org/rdf/container;1"]
  59.             .createInstance( Components.interfaces.nsIRDFContainer );
  60.     },
  61.  
  62.     getRDFCU: function()
  63.     {
  64.         return Components.classes["@mozilla.org/rdf/container-utils;1"]
  65.             .getService( Components.interfaces.nsIRDFContainerUtils );
  66.     },
  67.  
  68.     getProperty: function ( aInput, aArc, DS )
  69.     {
  70.         var node;
  71.         node = DS.GetTarget( aInput, aArc, true );
  72.         if( node instanceof Components.interfaces.nsIRDFResource )
  73.             return node.Value;
  74.         else if( node instanceof Components.interfaces.nsIRDFLiteral )
  75.             return node.Value;
  76.  
  77.         return "";
  78.     },
  79.  
  80.     getAll : function()
  81.     {
  82.         if (gFF3)
  83.             return this.getAll3();
  84.         else
  85.             return this.getAll2();
  86.     },
  87.  
  88.     getAll3 : function()
  89.     {
  90.         var lifemarks = new Array();
  91. alert("New nor old livemarks code works in FF3a7");
  92. return lifemarks;
  93.  
  94.         var Ci = Components.interfaces;
  95.         var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService);
  96.         var bmroot = bmsvc.bookmarksRoot;
  97.         var histsvc = Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
  98.         var options = histsvc.getNewQueryOptions();
  99.         var query = histsvc.getNewQuery();
  100. // won't want the following when bug#331487 fixed
  101.     options.setGroupingMode([options.GROUP_BY_FOLDER], 1);
  102.         query.setFolders([bmroot], 1);
  103.         var result = histsvc.executeQuery(query, options);
  104.         var rootNode = result.root;
  105.  
  106. //var b = bmsvc.getBookmarksIdsForURI(uri(""), {});
  107. //alert(b.length);
  108.         rootNode.containerOpen = true;
  109.         lifemarks = this.findlivemarks(rootNode,lifemarks);
  110.         rootNode.containerOpen = false;
  111.         return lifemarks;
  112.     },
  113.  
  114.     findlivemarks : function(rootNode,lifemarks)
  115.     {
  116.         var Ci = Components.interfaces;
  117.         var lmsvc = Components.classes["@mozilla.org/browser/livemark-service;2"].getService(Ci.nsILivemarkService);
  118.  
  119. alert(rootNode.title + "   " + rootNode.childCount);
  120.         for (var i=0; i<rootNode.childCount; i++)
  121.         {
  122.           var node = rootNode.getChild(i);
  123.                   alert("Child: " + node.title + "\n");
  124.             if (node.type == node.RESULT_TYPE_FOLDER)
  125.             {
  126.             var folder = node.QueryInterface(Ci.nsINavHistoryQueryResultNode);
  127. alert(folder.title + "   " + node.uri + "   " + node.id);
  128.                 if (lmsvc.isLivemark(node.id))
  129.                 {
  130.                     curFeedURL = lmsvc.getFeedURI(node.id);
  131.                     curName = node.title;
  132.                     lifemarks.push(new lifemarkData(curName, curFeedURL));
  133.                 }
  134.                 else
  135. {}//                    lifemarks = this.findlivemarks(node,lifemarks);
  136.             }
  137.         }
  138.         return lifemarks;
  139.     },
  140.  
  141.     getAll2 : function()
  142.     {
  143.         var lifemarks = new Array();
  144.         // RDF variables
  145.         var RDF = this.getRDF();
  146.         var RDFC = this.getRDFC();
  147.         var RDFCU = this.getRDFCU();
  148.         var BMDS  = RDF.GetDataSource("rdf:bookmarks");
  149.         var root = RDF.GetResource( "NC:BookmarksRoot" );
  150.         var NameArc = RDF.GetResource( this.NC_NS + "Name" );
  151.         var feedURLArc =  RDF.GetResource( this.NC_NS + "FeedURL" );
  152.         var URLArc =  RDF.GetResource( this.NC_NS + "URL" );
  153.         var typeArc = RDF.GetResource( this.RDF_NS + "type" );
  154.  
  155.         var nodesToProcess = new Array( root );
  156.         var curNode, curType, curFeedURL, curName, enumerator;
  157.         while( nodesToProcess.length > 0 )
  158.         {
  159.             curNode = nodesToProcess.pop();
  160.             RDFC.Init( BMDS, curNode );
  161.             enumerator = RDFC.GetElements();
  162.             while( enumerator.hasMoreElements() )
  163.             {
  164.                 curNode = enumerator.getNext();
  165.                 curType = this.getProperty( curNode, typeArc, BMDS ).split( "#" )[1];
  166.                 if( curType == "Folder" )
  167.                     nodesToProcess.push( curNode );
  168.                 else if( curType == "Livemark" )
  169.                 {
  170.                     curFeedURL = this.getProperty( curNode, feedURLArc, BMDS );
  171.                     curName = this.getProperty( curNode, NameArc, BMDS );
  172.                     lifemarks.push(new lifemarkData(curName, curFeedURL));
  173.                 }
  174.             }
  175.         }
  176.         return lifemarks;
  177.     },
  178.  
  179.   getAllUnique : function()
  180.   {
  181.     var livemarks = this.getAll();
  182.     var uniqmarks = new Array();
  183.     var isNew;
  184.     if (livemarks.length > 0) uniqmarks.push(livemarks[0]);
  185.     for (var i=1; i<livemarks.length; i++)
  186.     {
  187.       isNew = true;
  188.       for (var j=0; j<uniqmarks.length; j++)
  189.     if (uniqmarks[j].URL == livemarks[i].URL)
  190.     {
  191.       isNew = false;
  192.       break;
  193.     }
  194.       if (isNew) uniqmarks.push(livemarks[i]);
  195.     }
  196.     return uniqmarks;
  197.   }
  198. }
  199.  
  200. ///////////////////////////////////////////////////////////
  201. // AG: check model against livemarks. Returns an array, possibly empty.
  202. function getNewLivemarks()
  203. {
  204.     var allLivemarks = liveBookmarks.getAllUnique();
  205.     var allLivemarksLen = allLivemarks.length;
  206.     var newLivemarks = new Array();
  207.     var modelTotalSize = gFmodel.sizeTotal();
  208.     for( var k=0; k < allLivemarksLen; k++ )
  209.     {
  210.         var livemark = allLivemarks[k];
  211.         var isNew = true;
  212.         for( var i=0; i < modelTotalSize; i++ )
  213.             if( gFmodel.get(i).url == livemark.URL)
  214.             {
  215.                 isNew = false;
  216.                 break;
  217.             }
  218.  
  219.         if( isNew )
  220.             newLivemarks.push(livemark);
  221.     }
  222.  
  223.     return newLivemarks;
  224. }
  225.  
  226. function manageLivemarks()
  227. {
  228.     var allLivemarks = liveBookmarks.getAllUnique();
  229.     var selected = new Array();
  230.     for( var i=0; i < gFmodel.sizeTotal(); i++)
  231.     {
  232.         var feed = gFmodel.get(i);
  233.         if( !feed.exclude )
  234.             selected.push(feed.url);
  235.     }
  236.     var params = { ok:false, livemarks:allLivemarks, selected:selected };
  237.   var win = window.openDialog("chrome://newsfox/content/livemarksDlg.xul",
  238.     "newsfox-dialog","chrome,centerscreen,modal", params);
  239.  
  240.     if (params.ok)
  241.     {
  242.         updateLivemarks(allLivemarks, selected, false);
  243.         refreshModel();
  244.     }
  245. }
  246.  
  247. function updateLivemarks(livemarks, selected, bNew)
  248. {
  249.   for( var i=0; i < livemarks.length; i++ )
  250.   {
  251.     var feed = gFmodel.getFeedByURL(livemarks[i].URL);
  252.     var isExcluded = true;
  253.     for( var k = 0; k < selected.length; k++ )
  254.       if( selected[k] == livemarks[i].URL )
  255.       {
  256.         isExcluded = false;
  257.         break;
  258.       }
  259.     if( bNew || !feed)  // new feed
  260.     {
  261.       feed = createNewFeed(gFmodel,livemarks[i].URL,isExcluded,true);
  262.       feed.setDefaultName(livemarks[i].title);
  263.     }
  264.     else  // current feed
  265.     {
  266.       if (feed.exclude != isExcluded)
  267.       {
  268.         if (feed.exclude)   // make included
  269.         {
  270.           gFmodel.remove(feed);
  271.           var inclfeed = createNewFeed(gFmodel,feed.url,false,true);
  272.           inclfeed.setDefaultName(livemarks[i].title);
  273.         }
  274.         else                // make excluded
  275.         {
  276.           var feedtree = document.getElementById("newsfox.feedTree");
  277.           if (!gFdGroup[0].expanded) feedtree.view.toggleOpenState(0);
  278.           var index = -1;
  279.           for (var j=1; j<=gFmodel.size(); j++)
  280.             if (feed.url == gFmodel.get(gIdx.feed[j]).url) index = j;
  281.           if (index == -1) return;
  282.           deleteFeed(index,false);
  283.           var exclfeed = createNewFeed(gFmodel,feed.url,true,true);
  284.           exclfeed.setDefaultName(livemarks[i].title);
  285.         }
  286.       }
  287.     }
  288.   saveModels();
  289.   }
  290. }
  291.  
  292. function doLivemarks()
  293. {
  294.     if( !gKMeleon )
  295.     {
  296.         var newLivemarks = getNewLivemarks();
  297.         if( newLivemarks.length )
  298.         {
  299.             var selected = new Array();
  300.             var params = { ok:false, livemarks:newLivemarks, selected:selected, onlyNew:true };
  301.             var win = window.openDialog("chrome://newsfox/content/livemarksDlg.xul",
  302.                 "newsfox-dialog","chrome,centerscreen,modal", params);
  303.  
  304.             if (params.ok)
  305.             {
  306.                 updateLivemarks(newLivemarks, selected, true);
  307.                 refreshModel();    // need?  TODO
  308.             }
  309.         }
  310.     }
  311.     else
  312.     {
  313.         var mngLMbutton = document.getElementById("mngLMbutton");
  314.         mngLMbutton.setAttribute("hidden", true);
  315.     }
  316. }
  317.