listNearbyImage.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. var loadedfile = requirelib("filelib");
  2. if (!loadedfile) {
  3. console.log("Failed to load lib filelib, terminated.");
  4. }
  5. function isRawImage(filename){
  6. var ext = getExt(filename);
  7. ext = ext.toLowerCase();
  8. return (ext == "arw" || ext == "cr2" || ext == "dng" || ext == "nef" || ext == "raf" || ext == "orf");
  9. }
  10. function getExt(filename){
  11. return filename.split(".").pop();
  12. }
  13. function getBasename(filename){
  14. var parts = filename.split("/");
  15. var name = parts[parts.length - 1];
  16. var nameParts = name.split(".");
  17. nameParts.pop();
  18. return nameParts.join(".");
  19. }
  20. function filterDuplicates(files){
  21. // Create a map to store files by their basename
  22. var fileMap = {};
  23. for (var i = 0; i < files.length; i++){
  24. var filepath = files[i];
  25. var basename = getBasename(filepath);
  26. var isRaw = isRawImage(filepath);
  27. if (!fileMap[basename]){
  28. fileMap[basename] = {
  29. raw: null,
  30. jpg: null
  31. };
  32. }
  33. if (isRaw){
  34. fileMap[basename].raw = filepath;
  35. } else {
  36. fileMap[basename].jpg = filepath;
  37. }
  38. }
  39. // Build result array, prioritizing RAW over JPG
  40. var result = [];
  41. for (var basename in fileMap){
  42. var entry = fileMap[basename];
  43. if (entry.raw){
  44. // If RAW exists, use it (ignore JPG)
  45. result.push(entry.raw);
  46. } else if (entry.jpg){
  47. // Otherwise use JPG
  48. result.push(entry.jpg);
  49. }
  50. }
  51. return result;
  52. }
  53. function listNearby(){
  54. var result = [];
  55. //Extract the path from the filepath
  56. var dirpath = path.split("\\").join("/");
  57. dirpath = dirpath.split("/");
  58. dirpath.pop();
  59. dirpath = dirpath.join("/");
  60. //Get nearby files and filter out the one that is web supported photo format
  61. var nearbyFiles = filelib.readdir(dirpath, "user")
  62. for (var i = 0; i < nearbyFiles.length; i++){
  63. var thisFile = nearbyFiles[i];
  64. //console.log(JSON.stringify(nearbyFiles[i]));
  65. var ext = thisFile.Ext.substr(1);
  66. ext = ext.toLowerCase();
  67. if (ext == "png" || ext == "jpg" || ext == "jpeg" || ext == "gif" || ext == "webp" ||
  68. isRawImage(filename)){
  69. result.push(thisFile.Filepath);
  70. }
  71. }
  72. // Filter out JPG duplicates when RAW files exist
  73. result = filterDuplicates(result);
  74. sendJSONResp(JSON.stringify(result))
  75. }
  76. if (typeof(path) == "undefined"){
  77. sendJSONResp(JSON.stringify({
  78. "error": "Invalid path given"
  79. }));
  80. }else{
  81. listNearby();
  82. }