snowl/modules/identity.js

174 строки
5.7 KiB
JavaScript
Исходник Обычный вид История

/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Snowl.
*
* The Initial Developer of the Original Code is Mozilla.
* Portions created by the Initial Developer are Copyright (C) 2008
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Myk Melez <myk@mozilla.org>
* alta88 <alta88@gmail.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
2008-07-15 10:45:49 +04:00
const EXPORTED_SYMBOLS = ["SnowlIdentity", "SnowlPerson"];
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cr = Components.results;
const Cu = Components.utils;
Cu.import("resource://snowl/modules/datastore.js");
Cu.import("resource://snowl/modules/source.js");
Cu.import("resource://snowl/modules/URI.js");
function SnowlIdentity(id, sourceID, externalID, personID) {
this.id = id;
this.sourceID = sourceID;
this.externalID = externalID;
this.personID = personID;
}
SnowlIdentity.get = function(sourceID, externalID) {
let identity;
let statement = SnowlDatastore.createStatement(
"SELECT id, personID " +
"FROM identities " +
"WHERE externalID = :externalID AND sourceID = :sourceID"
2008-07-15 10:45:49 +04:00
);
try {
statement.params.sourceID = sourceID;
statement.params.externalID = externalID;
if (statement.step()) {
identity = new SnowlIdentity(statement.row.id,
sourceID,
externalID,
statement.row.personID);
2008-07-15 10:45:49 +04:00
}
}
finally {
statement.reset();
}
return identity;
};
SnowlIdentity.create = function(sourceID, externalID, name, homeURL, iconURL) {
2008-07-15 10:45:49 +04:00
let identity;
let personStatement = SnowlDatastore.createStatement(
"INSERT INTO people (name, homeURL, iconURL, placeID) " +
"VALUES (:name, :homeURL, :iconURL, :placeID)"
2008-07-15 10:45:49 +04:00
);
let identityStatement = SnowlDatastore.createStatement(
"INSERT INTO identities (sourceID, externalID, personID) " +
"VALUES (:sourceID, :externalID, :personID)"
2008-07-15 10:45:49 +04:00
);
try {
personStatement.params.name = name;
personStatement.params.homeURL = homeURL || null;
personStatement.params.iconURL = iconURL || null;
2008-07-15 10:45:49 +04:00
personStatement.step();
let personID = SnowlDatastore.dbConnection.lastInsertRowID;
// XXX lookup favicon in collections table rather than hardcoding
let iconURI =
iconURL ? URI.get(iconURL) :
homeURL ? SnowlSource.faviconSvc.getFaviconForPage(homeURL) :
URI.get("chrome://snowl/skin/person-16.png");
// Create places record, placeID stored into people table record.
//SnowlPlaces._log.info("Author name:iconURI.spec - " + name + " : " + iconURI.spec);
let placeID = SnowlPlaces.persistPlace("people",
personID,
name,
null, // homeURL,
null, // externalID,
iconURI,
sourceID);
// Store placeID back into messages for db integrity
SnowlDatastore.dbConnection.executeSimpleSQL(
"UPDATE people " +
"SET placeID = " + placeID +
" WHERE id = " + personID);
2008-07-15 10:45:49 +04:00
identityStatement.params.sourceID = sourceID;
identityStatement.params.externalID = externalID;
identityStatement.params.personID = personID;
identityStatement.step();
let identityID = SnowlDatastore.dbConnection.lastInsertRowID;
identity = new SnowlIdentity(identityID, sourceID, externalID, personID);
}
finally {
personStatement.reset();
identityStatement.reset();
}
return identity;
};
SnowlIdentity.prototype = {};
function SnowlPerson(id, name, placeID) {
2008-07-15 10:45:49 +04:00
this.id = id;
this.name = name;
this.placeID = placeID;
2008-07-15 10:45:49 +04:00
}
SnowlPerson.__defineGetter__("_getAllStatement",
function() {
let statement = SnowlDatastore.createStatement(
"SELECT id, name, placeID FROM people ORDER BY name"
2008-07-15 10:45:49 +04:00
);
this.__defineGetter__("_getAllStatement", function() { return statement });
return this._getAllStatement;
}
);
SnowlPerson.getAll = function() {
let people = [];
let statement = this._getAllStatement;
try {
while (statement.step())
people.push(new SnowlPerson(statement.row.id,
statement.row.name,
statement.row.placeID));
2008-07-15 10:45:49 +04:00
}
finally {
statement.reset();
}
return people;
}