entry_id_manager.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. var fileSystemNatives = requireNative('file_system_natives');
  5. var nameToIds = {};
  6. var idsToEntries = {};
  7. function computeName(entry) {
  8. return entry.filesystem.name + ':' + entry.fullPath;
  9. }
  10. function computeId(entry) {
  11. var fileSystemId = fileSystemNatives.CrackIsolatedFileSystemName(
  12. entry.filesystem.name);
  13. if (!fileSystemId)
  14. return null;
  15. // Strip the leading '/' from the path.
  16. return fileSystemId + ':' + $String.slice(entry.fullPath, 1);
  17. }
  18. function registerEntry(id, entry) {
  19. var name = computeName(entry);
  20. nameToIds[name] = id;
  21. idsToEntries[id] = entry;
  22. }
  23. function getEntryId(entry) {
  24. var name = null;
  25. try {
  26. name = computeName(entry);
  27. } catch(e) {
  28. return null;
  29. }
  30. var id = nameToIds[name];
  31. if (id != null)
  32. return id;
  33. // If an entry has not been registered, compute its id and register it.
  34. id = computeId(entry);
  35. registerEntry(id, entry);
  36. return id;
  37. }
  38. function getEntryById(id) {
  39. return idsToEntries[id];
  40. }
  41. exports.$set('registerEntry', registerEntry);
  42. exports.$set('getEntryId', getEntryId);
  43. exports.$set('getEntryById', getEntryById);