Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

update-icons.js 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. const mv = require('mv');
  2. const fs = require('fs');
  3. const fse = require('fs-extra');
  4. const http = require('http');
  5. const path = require('path');
  6. const walk = require('walk');
  7. const unzip = require('unzip');
  8. const child_process = require('child_process');
  9. const ncp = require('ncp');
  10. const gameIconsUrl = "http://game-icons.net/archives/png/zip/ffffff/000000/game-icons.net.png.zip";
  11. const tempFilePath = "./temp.zip";
  12. const tempDir = "./temp";
  13. const imgDir = "./generator/img";
  14. const customIconDir = "./resources/custom-icons";
  15. const cssPath = "./generator/css/icons.css";
  16. //const processIconsCmd = "mogrify -background white -alpha shape *.png";
  17. const processIconsCmd = `mogrify -alpha copy -channel-fx "red=100%, blue=100%, green=100%" *.png`
  18. // ----------------------------------------------------------------------------
  19. // Download
  20. // ----------------------------------------------------------------------------
  21. function downloadFile(url, dest) {
  22. console.log("Downloading...");
  23. return new Promise((resolve, reject) => {
  24. http.get(url, response => {
  25. const file = fs.createWriteStream(dest);
  26. response.pipe(file);
  27. file.on('close', resolve);
  28. file.on('error', reject);
  29. })
  30. .on('error', reject);
  31. });
  32. }
  33. // ----------------------------------------------------------------------------
  34. // Unzip
  35. // ----------------------------------------------------------------------------
  36. function unzipAll(src, dest) {
  37. console.log("Unzipping...");
  38. return new Promise((resolve, reject) => {
  39. fs.createReadStream(tempFilePath)
  40. .pipe(unzip.Parse())
  41. .on('entry', entry => {
  42. const fileName = entry.path;
  43. const baseName = path.basename(fileName);
  44. const type = entry.type;
  45. if (type === "File") {
  46. entry.pipe(fs.createWriteStream(path.join(dest, baseName)));
  47. }
  48. else {
  49. entry.autodrain();
  50. }
  51. })
  52. .on('close', resolve)
  53. .on('error', reject);
  54. });
  55. }
  56. // ----------------------------------------------------------------------------
  57. // Process icons
  58. // ----------------------------------------------------------------------------
  59. function processAll(path) {
  60. console.log("Processing (this will take a while)...");
  61. return new Promise((resolve, reject) => {
  62. child_process.exec(processIconsCmd, {cwd: path}, (error, stdout, stderr) => {
  63. if (error) {
  64. reject(error);
  65. }
  66. else {
  67. resolve();
  68. }
  69. });
  70. });
  71. }
  72. // ----------------------------------------------------------------------------
  73. // Generate CSS
  74. // ----------------------------------------------------------------------------
  75. function generateCSS(src, dest) {
  76. console.log("Generating CSS...");
  77. return new Promise((resolve, reject) => {
  78. fs.readdir(src, (err, files) => {
  79. if (err) {
  80. reject(err);
  81. }
  82. else {
  83. const content = files
  84. .map(name => `.icon-${name.replace(".png", "")} { background-image: url(../img/${name});}\n`)
  85. .join("");
  86. fs.writeFile(dest, content, err => {
  87. if (err) {
  88. reject(err);
  89. }
  90. else {
  91. resolve();
  92. }
  93. });
  94. }
  95. });
  96. });
  97. }
  98. // ----------------------------------------------------------------------------
  99. // Copy
  100. // ----------------------------------------------------------------------------
  101. function copyAll(src, dest) {
  102. console.log("Copying...");
  103. return new Promise((resolve, reject) => {
  104. fse.copy(src, dest, err => {
  105. if (err) {
  106. reject(err);
  107. }
  108. else {
  109. resolve();
  110. }
  111. });
  112. });
  113. }
  114. fse.emptyDir(tempDir)
  115. .then(() => downloadFile(gameIconsUrl, tempFilePath))
  116. .then(() => unzipAll(tempFilePath, tempDir))
  117. .then(() => copyAll(tempDir, imgDir))
  118. .then(() => copyAll(customIconDir, imgDir))
  119. .then(() => processAll(imgDir))
  120. .then(() => generateCSS(imgDir, cssPath))
  121. .then(() => console.log("Done."))
  122. .catch(err => cosole.log("Error", err));