addon-sdk/source/lib/sdk/places/history.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/addon-sdk/source/lib/sdk/places/history.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,64 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +"use strict";
     1.9 +
    1.10 +module.metadata = {
    1.11 +  "stability": "unstable",
    1.12 +  "engines": {
    1.13 +    "Firefox": "*"
    1.14 +  }
    1.15 +};
    1.16 +
    1.17 +/*
    1.18 + * Requiring hosts so they can subscribe to client messages
    1.19 + */
    1.20 +require('./host/host-bookmarks');
    1.21 +require('./host/host-tags');
    1.22 +require('./host/host-query');
    1.23 +
    1.24 +const { Cc, Ci } = require('chrome');
    1.25 +const { Class } = require('../core/heritage');
    1.26 +const { events, send } = require('../addon/events');
    1.27 +const { defer, reject, all } = require('../core/promise');
    1.28 +const { uuid } = require('../util/uuid');
    1.29 +const { flatten } = require('../util/array');
    1.30 +const { has, extend, merge, pick } = require('../util/object');
    1.31 +const { emit } = require('../event/core');
    1.32 +const { defer: async } = require('../lang/functional');
    1.33 +const { EventTarget } = require('../event/target');
    1.34 +const {
    1.35 +  urlQueryParser, createQuery, createQueryOptions
    1.36 +} = require('./utils');
    1.37 +
    1.38 +/*
    1.39 + * Constant used by nsIHistoryQuery; 0 is a history query
    1.40 + * https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsINavHistoryQueryOptions
    1.41 + */
    1.42 +const HISTORY_QUERY = 0;
    1.43 +
    1.44 +let search = function query (queries, options) {
    1.45 +  queries = [].concat(queries);
    1.46 +  let emitter = EventTarget();
    1.47 +  let queryObjs = queries.map(createQuery.bind(null, HISTORY_QUERY));
    1.48 +  let optionsObj = createQueryOptions(HISTORY_QUERY, options);
    1.49 +
    1.50 +  // Can remove after `Promise.jsm` is implemented in Bug 881047,
    1.51 +  // which will guarantee next tick execution
    1.52 +  async(() => {
    1.53 +    send('sdk-places-query', {
    1.54 +      query: queryObjs,
    1.55 +      options: optionsObj
    1.56 +    }).then(results => {
    1.57 +      results.map(item => emit(emitter, 'data', item));
    1.58 +      emit(emitter, 'end', results);
    1.59 +    }, reason => {
    1.60 +      emit(emitter, 'error', reason);
    1.61 +      emit(emitter, 'end', []);
    1.62 +    });
    1.63 +  })();
    1.64 +
    1.65 +  return emitter;
    1.66 +};
    1.67 +exports.search = search;

mercurial