From 3633149ca8fd7df79873949a45d79a57754d960e Mon Sep 17 00:00:00 2001 From: "sayrer%gmail.com" Date: Mon, 28 Aug 2006 17:24:28 +0000 Subject: [PATCH] Bug 348227. Live Bookmarks should take metadata from the Feed, not the page. r=mano --- browser/base/content/browser-places.js | 25 ++++++++++++---- browser/base/content/browser.js | 18 ++++++++---- .../feeds/public/nsIFeedResultService.idl | 12 +++++--- browser/components/feeds/src/FeedConverter.js | 11 ++++--- browser/components/feeds/src/FeedWriter.js | 29 ++++++++++--------- 5 files changed, 63 insertions(+), 32 deletions(-) diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js index 482b23f59160..c3743156fde2 100644 --- a/browser/base/content/browser-places.js +++ b/browser/base/content/browser-places.js @@ -187,20 +187,33 @@ var PlacesCommandHook = { /** * Adds a Live Bookmark to a feed associated with the current page. - * @param url - * The nsIURI of the page the feed was attached to + * @param url + * The nsIURI of the page the feed was attached to + * @title title + * The title of the feed. Optional. + * @subtitle subtitle + * A short description of the feed. Optional. + * Not yet used. TODO: implement description annotation */ - addLiveBookmark: function PCH_addLiveBookmark(url) { + addLiveBookmark: function PCH_addLiveBookmark(url, feedTitle, feedSubtitle) { var ios = Cc["@mozilla.org/network/io-service;1"]. getService(Ci.nsIIOService); var feedURI = ios.newURI(url, null, null); var browser = gBrowser.selectedBrowser; - + + var title = (arguments.length > 1) ? feedTitle : + browser.contentDocument.title; + // TODO: implement description annotation - //var description = this._getDescriptionFromDocument(doc); - var title = browser.contentDocument.title; +#if 0 + var description; + if (arguments.length > 2) + description = feedSubtitle; + else + description = BookmarksUtils.getDescriptionFromDocument(doc); +#endif // TODO: add dialog for filing/confirmation var bms = PlacesController.bookmarks; diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 543e0e951e57..4a7dbe560776 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -6566,13 +6566,21 @@ var FeedHandler = { #ifndef MOZ_PLACES /** * Adds a Live Bookmark to a feed - * @param url - * The URL of the feed being bookmarked + * @param url + * The URL of the feed being bookmarked + * @title title + * The title of the feed. Optional. + * @subtitle subtitle + * A short description of the feed. Optional. */ - addLiveBookmark: function(url) { + addLiveBookmark: function(url, feedTitle, feedSubtitle) { var doc = gBrowser.selectedBrowser.contentDocument; - var title = doc.title; - var description = BookmarksUtils.getDescriptionFromDocument(doc); + var title = (arguments.length > 1) ? feedTitle : doc.title; + var description; + if (arguments.length > 2) + description = feedSubtitle; + else + description = BookmarksUtils.getDescriptionFromDocument(doc); BookmarksUtils.addLivemark(doc.baseURI, url, title, description); }, #endif diff --git a/browser/components/feeds/public/nsIFeedResultService.idl b/browser/components/feeds/public/nsIFeedResultService.idl index 5d234836ab22..924d94eef679 100644 --- a/browser/components/feeds/public/nsIFeedResultService.idl +++ b/browser/components/feeds/public/nsIFeedResultService.idl @@ -45,7 +45,7 @@ interface nsIFeedResult; * nsIFeedResultService provides a globally-accessible object for retreiving * the results of feed processing. */ -[scriptable, uuid(96dadf57-6a1d-44d3-83fa-6af22f6cae31)] +[scriptable, uuid(f3262589-48b2-4019-9947-90e5269bbfb9)] interface nsIFeedResultService : nsISupports { /** @@ -57,12 +57,16 @@ interface nsIFeedResultService : nsISupports /** * Adds a URI to the user's specified external feed handler, or live * bookmarks. - * @param request - * The request for the feed document * @param uri * The uri of the feed to add. + * @param title + * The title of the feed to add. + * @param subtitle + * The subtitle of the feed to add. */ - void addToClientReader(in nsIRequest request, in AString uri); + void addToClientReader(in AUTF8String uri, + in AString title, + in AString subtitle); /** * Registers a Feed Result object with a globally accessible service diff --git a/browser/components/feeds/src/FeedConverter.js b/browser/components/feeds/src/FeedConverter.js index c101fbee2c08..8322226bbd23 100644 --- a/browser/components/feeds/src/FeedConverter.js +++ b/browser/components/feeds/src/FeedConverter.js @@ -206,7 +206,10 @@ FeedConverter.prototype = { case "bookmarks": case "client": try { - feedService.addToClientReader(this._request, result.uri.spec); + var feed = result.doc.QueryInterface(Ci.nsIFeed); + var title = feed.title ? feed.title.plainText() : ""; + var desc = feed.subtitle ? feed.subtitle.plainText() : ""; + feedService.addToClientReader(result.uri.spec, title, desc); return; } catch(ex) { /* fallback to preview mode */ } } @@ -334,7 +337,7 @@ var FeedResultService = { /** * See nsIFeedService.idl */ - addToClientReader: function FRS_addToClientReader(request, spec) { + addToClientReader: function FRS_addToClientReader(spec, title, subtitle) { var prefs = Cc["@mozilla.org/preferences-service;1"]. getService(Ci.nsIPrefBranch); @@ -383,9 +386,9 @@ var FeedResultService = { getService(Ci.nsIWindowMediator); var topWindow = wm.getMostRecentWindow("navigator:browser"); #ifdef MOZ_PLACES - topWindow.PlacesCommandHook.addLiveBookmark(spec); + topWindow.PlacesCommandHook.addLiveBookmark(spec, title, subtitle); #else - topWindow.FeedHandler.addLiveBookmark(spec); + topWindow.FeedHandler.addLiveBookmark(spec, title, subtitle); #endif break; } diff --git a/browser/components/feeds/src/FeedWriter.js b/browser/components/feeds/src/FeedWriter.js index 5764c26c5972..9ef08c3a3dd5 100755 --- a/browser/components/feeds/src/FeedWriter.js +++ b/browser/components/feeds/src/FeedWriter.js @@ -74,6 +74,9 @@ const FW_CLASSID = Components.ID("{49bb6593-3aff-4eb3-a068-2712c28bd58e}"); const FW_CLASSNAME = "Feed Writer"; const FW_CONTRACTID = "@mozilla.org/browser/feeds/result-writer;1"; +const TITLE_ID = "feedTitleText"; +const SUBTITLE_ID = "feedSubtitleText"; + function FeedWriter() { } FeedWriter.prototype = { @@ -146,14 +149,14 @@ FeedWriter.prototype = { * The feed container */ _setTitleText: function FW__setTitleText(container) { - if(container.title) { - this._setContentText("feedTitleText", container.title.plainText()); + if (container.title) { + this._setContentText(TITLE_ID, container.title.plainText()); this._document.title = container.title.plainText(); } var feed = container.QueryInterface(Ci.nsIFeed); - if(feed && feed.subtitle) - this._setContentText("feedSubtitleText", container.subtitle.plainText()); + if (feed && feed.subtitle) + this._setContentText(SUBTITLE_ID, container.subtitle.plainText()); }, /** @@ -779,20 +782,20 @@ FeedWriter.prototype = { prefs.setCharPref(PREF_SELECTED_READER, "bookmarks"); break; } - - var request = this._window - .QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIWebNavigation) - .QueryInterface(Ci.nsIDocShell) - .currentDocumentChannel; var feedService = Cc["@mozilla.org/browser/feeds/result-service;1"]. getService(Ci.nsIFeedResultService); - feedService.addToClientReader(request, this._window.location.href); + + // Pull the title and subtitle out of the document + var feedTitle = this._document.getElementById(TITLE_ID).textContent; + var feedSubtitle = + this._document.getElementById(SUBTITLE_ID).textContent; + feedService.addToClientReader(this._window.location.href, + feedTitle, feedSubtitle); } // If "Always use..." is checked, we should set PREF_SELECTED_ACTION - // to either "reader" (If a web reader or if an application is selected), or - // to "bookmarks" (if the live bookmarks option is selected). + // to either "reader" (If a web reader or if an application is selected), + // or to "bookmarks" (if the live bookmarks option is selected). // Otherwise, we should set it to "ask" if (useAsDefault) prefs.setCharPref(PREF_SELECTED_ACTION, defaultHandler);