2008-08-05 01:29:39 +04:00
|
|
|
/* ***** 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>
|
2009-01-31 20:06:43 +03:00
|
|
|
* alta88 <alta88@gmail.com>
|
2008-08-05 01:29:39 +04:00
|
|
|
*
|
|
|
|
* 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");
|
|
|
|
|
2009-05-08 05:45:17 +04:00
|
|
|
|
|
|
|
function SnowlIdentity(id, source, externalID, name) {
|
2008-07-15 10:45:49 +04:00
|
|
|
this.id = id;
|
2009-05-08 05:45:17 +04:00
|
|
|
this.source = source;
|
2008-07-15 10:45:49 +04:00
|
|
|
this.externalID = externalID;
|
2009-05-08 05:45:17 +04:00
|
|
|
this.person = new SnowlPerson(null, name);
|
2008-07-15 10:45:49 +04:00
|
|
|
}
|
|
|
|
|
2009-05-08 05:45:17 +04:00
|
|
|
SnowlIdentity.prototype = {
|
|
|
|
id: null,
|
|
|
|
source: null,
|
|
|
|
externalID: null,
|
|
|
|
person: null,
|
2008-07-15 10:45:49 +04:00
|
|
|
|
2009-05-08 05:45:17 +04:00
|
|
|
persist: function() {
|
|
|
|
this.person.persist(this.source.id);
|
2008-07-15 10:45:49 +04:00
|
|
|
|
2009-05-08 05:45:17 +04:00
|
|
|
let statement = SnowlDatastore.createStatement(
|
|
|
|
"INSERT INTO identities ( sourceID, externalID, personID) " +
|
|
|
|
"VALUES (:sourceID, :externalID, :personID)"
|
|
|
|
);
|
|
|
|
|
|
|
|
try {
|
|
|
|
statement.params.sourceID = this.source.id;
|
|
|
|
statement.params.externalID = this.externalID;
|
|
|
|
statement.params.personID = this.person.id;
|
|
|
|
statement.step();
|
|
|
|
this.id = SnowlDatastore.dbConnection.lastInsertRowID;
|
|
|
|
}
|
|
|
|
finally {
|
|
|
|
statement.reset();
|
2008-07-15 10:45:49 +04:00
|
|
|
}
|
|
|
|
}
|
2009-05-08 05:45:17 +04:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
function SnowlPerson(id, name, placeID, homeURL, iconURL) {
|
|
|
|
this.id = id;
|
|
|
|
this.name = name;
|
|
|
|
this.placeID = placeID;
|
|
|
|
}
|
|
|
|
|
|
|
|
SnowlPerson.prototype = {
|
|
|
|
name: null,
|
|
|
|
placeID: null,
|
|
|
|
homeURL: null,
|
|
|
|
iconURL: null,
|
|
|
|
|
|
|
|
persist: function(sourceID) {
|
|
|
|
let statement = SnowlDatastore.createStatement(
|
|
|
|
"INSERT INTO people ( name, homeURL, iconURL) " +
|
|
|
|
"VALUES (:name, :homeURL, :iconURL)"
|
|
|
|
);
|
|
|
|
|
|
|
|
try {
|
|
|
|
statement.params.name = this.name;
|
|
|
|
statement.params.homeURL = this.homeURL;
|
|
|
|
statement.params.iconURL = this.iconURL;
|
|
|
|
statement.step();
|
|
|
|
this.id = SnowlDatastore.dbConnection.lastInsertRowID;
|
|
|
|
|
|
|
|
// XXX lookup favicon in collections table rather than hardcoding
|
|
|
|
let iconURI =
|
|
|
|
this.iconURL ? URI.get(this.iconURL) :
|
|
|
|
this.homeURL ? SnowlSource.faviconSvc.getFaviconForPage(this.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);
|
|
|
|
// FIXME: break the dependency on sourceID, since people should only be
|
|
|
|
// connected to sources through identities.
|
|
|
|
this.placeID = SnowlPlaces.persistPlace("people",
|
|
|
|
this.id,
|
|
|
|
name,
|
|
|
|
null, // homeURL,
|
|
|
|
externalID, // externalID,
|
|
|
|
iconURI,
|
|
|
|
sourceID);
|
|
|
|
// Store placeID back into messages for DB integrity.
|
|
|
|
SnowlDatastore.dbConnection.executeSimpleSQL(
|
|
|
|
"UPDATE people " +
|
|
|
|
"SET placeID = " + this.placeID +
|
|
|
|
" WHERE id = " + this.id);
|
|
|
|
}
|
|
|
|
finally {
|
|
|
|
statement.reset();
|
|
|
|
}
|
2008-07-15 10:45:49 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2009-05-08 05:45:17 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//SnowlIdentity.get = function(sourceID, externalID) {
|
|
|
|
// let identity;
|
|
|
|
//
|
|
|
|
// let statement = SnowlDatastore.createStatement(
|
|
|
|
// "SELECT id, personID " +
|
|
|
|
// "FROM identities " +
|
|
|
|
// "WHERE externalID = :externalID AND sourceID = :sourceID"
|
|
|
|
// );
|
|
|
|
//
|
|
|
|
// try {
|
|
|
|
// statement.params.sourceID = sourceID;
|
|
|
|
// statement.params.externalID = externalID;
|
|
|
|
// if (statement.step()) {
|
|
|
|
// identity = new SnowlIdentity(statement.row.id,
|
|
|
|
// sourceID,
|
|
|
|
// externalID,
|
|
|
|
// statement.row.personID);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// finally {
|
|
|
|
// statement.reset();
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// return identity;
|
|
|
|
//};
|
|
|
|
|
2008-07-23 11:45:57 +04:00
|
|
|
SnowlIdentity.create = function(sourceID, externalID, name, homeURL, iconURL) {
|
2008-07-15 10:45:49 +04:00
|
|
|
let identity;
|
|
|
|
|
|
|
|
let personStatement = SnowlDatastore.createStatement(
|
2009-01-31 20:06:43 +03:00
|
|
|
"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) " +
|
2009-01-31 20:06:43 +03:00
|
|
|
"VALUES (:sourceID, :externalID, :personID)"
|
2008-07-15 10:45:49 +04:00
|
|
|
);
|
|
|
|
|
|
|
|
try {
|
|
|
|
personStatement.params.name = name;
|
2008-07-28 00:50:16 +04:00
|
|
|
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;
|
|
|
|
|
2009-01-29 23:19:56 +03:00
|
|
|
// 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");
|
|
|
|
|
2009-01-31 20:06:43 +03:00
|
|
|
// Create places record, placeID stored into people table record.
|
2009-01-29 23:19:56 +03:00
|
|
|
//SnowlPlaces._log.info("Author name:iconURI.spec - " + name + " : " + iconURI.spec);
|
2009-01-31 20:06:43 +03:00
|
|
|
let placeID = SnowlPlaces.persistPlace("people",
|
|
|
|
personID,
|
|
|
|
name,
|
|
|
|
null, // homeURL,
|
2009-03-02 01:43:47 +03:00
|
|
|
externalID, // externalID,
|
2009-01-31 20:06:43 +03:00
|
|
|
iconURI,
|
|
|
|
sourceID);
|
|
|
|
// Store placeID back into messages for db integrity
|
|
|
|
SnowlDatastore.dbConnection.executeSimpleSQL(
|
|
|
|
"UPDATE people " +
|
|
|
|
"SET placeID = " + placeID +
|
|
|
|
" WHERE id = " + personID);
|
2009-01-29 23:19:56 +03:00
|
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
|
|
|
SnowlPerson.__defineGetter__("_getAllStatement",
|
|
|
|
function() {
|
|
|
|
let statement = SnowlDatastore.createStatement(
|
2009-01-24 01:56:04 +03:00
|
|
|
"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())
|
2009-01-24 01:56:04 +03:00
|
|
|
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;
|
|
|
|
}
|