зеркало из https://github.com/mozilla/pjs.git
333751- more tweaking of feed handler, client apps and live bookmark support NOT PART OF BUILD
This commit is contained in:
Родитель
f06113b748
Коммит
080e6a9cdc
|
@ -110,6 +110,7 @@ var SubscribeHandler = {
|
|||
this._setContentText("feedTitleText", container.title);
|
||||
this._setContentText("feedSubtitleText",
|
||||
this._getPropertyAsString(container, "description"));
|
||||
document.title = container.title;
|
||||
|
||||
// Set up the displayed handler
|
||||
this._initSelectedHandler();
|
||||
|
@ -218,7 +219,6 @@ var SubscribeHandler = {
|
|||
Cc["@mozilla.org/web-content-handler-registrar;1"].
|
||||
getService(Ci.nsIWebContentConverterRegistrar);
|
||||
var title ="Unknown";
|
||||
LOG("WEBURI: " + webURI);
|
||||
var handler =
|
||||
wccr.getWebContentHandlerByURI(TYPE_MAYBE_FEED, webURI);
|
||||
if (handler)
|
||||
|
@ -264,11 +264,7 @@ var SubscribeHandler = {
|
|||
Cc["@mozilla.org/preferences-service;1"].
|
||||
getService(Ci.nsIPrefBranch);
|
||||
var handler = prefs.getCharPref(PREF_SELECTED_HANDLER);
|
||||
switch (handler) {
|
||||
case "client":
|
||||
LOG("Load with client app");
|
||||
break;
|
||||
case "web":
|
||||
if (handler == "web") {
|
||||
var webURI = prefs.getCharPref(PREF_SELECTED_WEB);
|
||||
var wccr =
|
||||
Cc["@mozilla.org/web-content-handler-registrar;1"].
|
||||
|
@ -276,10 +272,12 @@ var SubscribeHandler = {
|
|||
var handler =
|
||||
wccr.getWebContentHandlerByURI(TYPE_MAYBE_FEED, webURI);
|
||||
window.location.href = handler.getHandlerURI(window.location.href);
|
||||
break;
|
||||
case "bookmarks":
|
||||
LOG("Add Live Bookmark");
|
||||
break;
|
||||
}
|
||||
else {
|
||||
var feedService =
|
||||
Cc["@mozilla.org/browser/feeds/result-service;1"].
|
||||
getService(Ci.nsIFeedResultService);
|
||||
feedService.addToClientReader(window.location.href);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
|
|
@ -53,6 +53,14 @@ interface nsIFeedResultService : nsISupports
|
|||
*/
|
||||
attribute boolean forcePreviewPage;
|
||||
|
||||
/**
|
||||
* Adds a URI to the user's specified external feed handler, or live
|
||||
* bookmarks.
|
||||
* @param uri
|
||||
* The uri of the feed to add.
|
||||
*/
|
||||
void addToClientReader(in AString uri);
|
||||
|
||||
/**
|
||||
* Registers a Feed Result object with a globally accessible service
|
||||
* so that it can be accessed by a singleton method outside the usual
|
||||
|
|
|
@ -63,6 +63,11 @@ const TYPE_ANY = "*/*";
|
|||
|
||||
const FEEDHANDLER_URI = "chrome://browser/content/feeds/subscribe.xhtml";
|
||||
|
||||
const PREF_SELECTED_APP = "browser.feeds.handlers.application";
|
||||
const PREF_SELECTED_WEB = "browser.feeds.handlers.webservice";
|
||||
const PREF_SELECTED_HANDLER = "browser.feeds.handler";
|
||||
const PREF_SKIP_PREVIEW_PAGE = "browser.feeds.skip_preview_page";
|
||||
|
||||
function FeedConverter() {
|
||||
}
|
||||
FeedConverter.prototype = {
|
||||
|
@ -101,6 +106,11 @@ FeedConverter.prototype = {
|
|||
this._listener = listener;
|
||||
},
|
||||
|
||||
/**
|
||||
* Whether or not the preview page is being forced.
|
||||
*/
|
||||
_forcePreviewPage: false,
|
||||
|
||||
/**
|
||||
* See nsIFeedResultListener.idl
|
||||
*/
|
||||
|
@ -138,19 +148,30 @@ FeedConverter.prototype = {
|
|||
var feedService =
|
||||
Cc["@mozilla.org/browser/feeds/result-service;1"].
|
||||
getService(Ci.nsIFeedResultService);
|
||||
if (!feedService.forcePreviewPage) {
|
||||
var wccr =
|
||||
Cc["@mozilla.org/web-content-handler-registrar;1"].
|
||||
getService(Ci.nsIWebContentConverterRegistrar);
|
||||
var feed = result.doc.QueryInterface(Ci.nsIFeed);
|
||||
if (feed.type == Ci.nsIFeed.TYPE_FEED &&
|
||||
wccr.getAutoHandler(TYPE_MAYBE_FEED)) {
|
||||
wccr.loadPreferredHandler(this._request);
|
||||
return;
|
||||
if (!this._forcePreviewPage) {
|
||||
var prefs =
|
||||
Cc["@mozilla.org/preferences-service;1"].
|
||||
getService(Ci.nsIPrefBranch);
|
||||
var skipPreview = prefs.getBoolPref(PREF_SKIP_PREVIEW_PAGE);
|
||||
if (skipPreview) {
|
||||
var handler = prefs.getCharPref(PREF_SELECTED_HANDLER);
|
||||
if (handler == "web") {
|
||||
var wccr =
|
||||
Cc["@mozilla.org/web-content-handler-registrar;1"].
|
||||
getService(Ci.nsIWebContentConverterRegistrar);
|
||||
var feed = result.doc.QueryInterface(Ci.nsIFeed);
|
||||
if (feed.type == Ci.nsIFeed.TYPE_FEED &&
|
||||
wccr.getAutoHandler(TYPE_MAYBE_FEED)) {
|
||||
wccr.loadPreferredHandler(this._request);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
feedService.addToClientReader(result.uri.spec);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Reset the forced state bit here.
|
||||
feedService.forcePreviewPage = false;
|
||||
|
||||
// If there was no automatic handler, or this was a podcast, photostream or
|
||||
// some other kind of application, we must always show the preview page...
|
||||
|
@ -184,6 +205,15 @@ FeedConverter.prototype = {
|
|||
onStartRequest: function FC_onStartRequest(request, context) {
|
||||
var channel = request.QueryInterface(Ci.nsIChannel);
|
||||
this._request = request;
|
||||
|
||||
// Save and reset the forced state bit early, in case there's some kind of
|
||||
// error.
|
||||
var feedService =
|
||||
Cc["@mozilla.org/browser/feeds/result-service;1"].
|
||||
getService(Ci.nsIFeedResultService);
|
||||
this._forcePreviewPage = feedService.forcePreviewPage;
|
||||
feedService.forcePreviewPage = false;
|
||||
|
||||
|
||||
// Parse feed data as it comes in
|
||||
this._processor =
|
||||
|
@ -242,8 +272,43 @@ var FeedResultService = {
|
|||
*/
|
||||
_results: { },
|
||||
|
||||
/**
|
||||
* See nsIFeedService.idl
|
||||
*/
|
||||
forcePreviewPage: false,
|
||||
|
||||
/**
|
||||
* See nsIFeedService.idl
|
||||
*/
|
||||
addToClientReader: function FRS_addToClientReader(uri) {
|
||||
var prefs =
|
||||
Cc["@mozilla.org/preferences-service;1"].
|
||||
getService(Ci.nsIPrefBranch);
|
||||
var handler = prefs.getCharPref(PREF_SELECTED_HANDLER);
|
||||
switch (handler) {
|
||||
case "client":
|
||||
var clientApp =
|
||||
prefs.getComplexValue(PREF_SELECTED_APP, Ci.nsILocalFile);
|
||||
var process =
|
||||
Cc["@mozilla.org/process/util;1"].
|
||||
createInstance(Ci.nsIProcess);
|
||||
process.init(clientApp);
|
||||
process.run(false, [uri], 1);
|
||||
break;
|
||||
case "bookmarks":
|
||||
var wm =
|
||||
Cc["@mozilla.org/appshell/window-mediator;1"].
|
||||
getService(Ci.nsIWindowMediator);
|
||||
var topWindow = wm.getMostRecentWindow("navigator:browser");
|
||||
#ifdef MOZ_PLACES
|
||||
topWindow.PlacesCommandHook.addLiveBookmark(uri);
|
||||
#else
|
||||
topWindow.FeedHandler.addLiveBookmark(uri);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* See nsIFeedService.idl
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче