// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
var fileSystemNatives = requireNative('file_system_natives');
var nameToIds = {};
var idsToEntries = {};
function computeName(entry) {
return entry.filesystem.name + ':' + entry.fullPath;
}
function computeId(entry) {
var fileSystemId = fileSystemNatives.CrackIsolatedFileSystemName(
entry.filesystem.name);
if (!fileSystemId)
return null;
// Strip the leading '/' from the path.
return fileSystemId + ':' + $String.slice(entry.fullPath, 1);
}
function registerEntry(id, entry) {
var name = computeName(entry);
nameToIds[name] = id;
idsToEntries[id] = entry;
}
function getEntryId(entry) {
var name = null;
try {
name = computeName(entry);
} catch(e) {
return null;
}
var id = nameToIds[name];
if (id != null)
return id;
// If an entry has not been registered, compute its id and register it.
id = computeId(entry);
registerEntry(id, entry);
return id;
}
function getEntryById(id) {
return idsToEntries[id];
}
exports.registerEntry = registerEntry;
exports.getEntryId = getEntryId;
exports.getEntryById = getEntryById;