You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.js 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. var spawn = require("child_process").spawn;
  2. var fs = require("fs");
  3. var pathlib = require("path");
  4. var debounce = require("../../js/debounce");
  5. exports.start = start;
  6. exports.stop = stop;
  7. exports.event = event;
  8. var conf;
  9. var logger;
  10. var modules;
  11. function runFeh() {
  12. var mode;
  13. logger.info("Setting background to", conf.path);
  14. switch (conf.mode) {
  15. case "scale":
  16. case undefined:
  17. mode = "--bg-scale";
  18. break;
  19. case "center":
  20. mode = "--bg-center";
  21. break;
  22. case "fill":
  23. mode = "--bg-fill";
  24. break;
  25. case "max":
  26. mode = "--bg-max";
  27. break;
  28. case "tile":
  29. mode = "--bg-tile";
  30. break;
  31. default:
  32. return logger.error("Invalid mode: "+conf.mode);
  33. }
  34. var child = spawn("feh", [ mode, conf.path ]);
  35. child.stdout.on("data", d =>
  36. logger.info("feh stdout:", d.toString().trim()));
  37. child.stderr.on("data", d =>
  38. logger.info("feh stderr:", d.toString().trim()));
  39. }
  40. function start(conf_, logger_, modules_) {
  41. conf = conf_ || conf;
  42. logger = logger_ || logger;
  43. modules = modules_ || modules;
  44. if (!conf.path)
  45. return logger.error("Expected conf.path");
  46. runFeh();
  47. var dirname = pathlib.dirname(conf.path);
  48. var basename = pathlib.basename(conf.path);
  49. var run = debounce(runFeh, 10);
  50. fs.watch(dirname, (evt, name) => {
  51. if (name !== basename || evt !== "change")
  52. return;
  53. run();
  54. });
  55. }
  56. function stop(cb) {
  57. cb();
  58. }
  59. function event(name, ...params) {
  60. switch (name) {
  61. case "reload":
  62. runFeh();
  63. break;
  64. default:
  65. logger.warn("Unknown event:", name);
  66. }
  67. }