Advertisement
Guest User

Untitled

a guest
Feb 13th, 2020
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.11 KB | None | 0 0
  1. #!/usr/bin/env node
  2. 'use strict';
  3. var mongo = require('mongodb');
  4.  
  5. var cachedDb;
  6. var cachedClient;
  7.  
  8. var posts;
  9. var files;
  10. var threads;
  11. var references;
  12.  
  13. exports.secondFix = function(reference, callback) {
  14.  
  15. var thumbPath = '/.media/t_' + reference.sha256;
  16.  
  17. var path = '/.media/' + reference.sha256;
  18.  
  19. if (reference.extension) {
  20. path += '.' + reference.extension;
  21. }
  22.  
  23. var match = {
  24. 'files.path' : path
  25. };
  26.  
  27. var update = {
  28. $set : {
  29. 'files.$[file].thumb' : thumbPath
  30. }
  31. };
  32.  
  33. var ops = {
  34. arrayFilters : [ {
  35. 'file.path' : path
  36. } ]
  37. };
  38.  
  39. posts.updateMany(match, update, ops, function(error) {
  40.  
  41. if (error) {
  42. callback(error);
  43. } else {
  44. threads.updateMany(match, update, ops, callback);
  45. }
  46.  
  47. });
  48.  
  49. };
  50.  
  51. exports.fixPostings = function(reference, callback) {
  52.  
  53. var path = '/.media/' + reference.sha256;
  54.  
  55. if (reference.extension) {
  56. path += '.' + reference.extension;
  57. }
  58.  
  59. var match = {
  60. 'files.path' : path
  61. };
  62.  
  63. var update = {
  64. $set : {
  65. 'files.$[file].thumb' : reference.width ? path : '/audioGenericThumb.png'
  66. }
  67. };
  68.  
  69. var ops = {
  70. arrayFilters : [ {
  71. 'file.path' : path
  72. } ]
  73. };
  74.  
  75. posts.updateMany(match, update, ops, function(error) {
  76.  
  77. if (error) {
  78. callback(error);
  79. } else {
  80. threads.updateMany(match, update, ops, callback);
  81. }
  82.  
  83. });
  84.  
  85. };
  86.  
  87. function checkThumb(reference, callback) {
  88.  
  89. files.findOne({
  90. filename : '/.media/t_' + reference.sha256
  91. }, function(error, foundFile) {
  92.  
  93. if (error) {
  94. return callback(error);
  95. } else if (!foundFile) {
  96.  
  97. return exports.fixPostings(reference, callback);
  98. }
  99.  
  100. // style exception, too simple
  101. references.updateOne({
  102. _id : reference._id
  103. }, {
  104. $set : {
  105. hasThumb : true
  106. }
  107. }, function(error) {
  108.  
  109. if (error) {
  110. callback(error);
  111. } else {
  112. exports.secondFix(reference, callback);
  113. }
  114.  
  115. });
  116. // style exception, too simple
  117.  
  118. });
  119.  
  120. }
  121.  
  122. function startIteration(callback, lastId) {
  123.  
  124. references.find({
  125. sha256 : {
  126. $exists : true
  127. },
  128. hasThumb : {
  129. $ne : true
  130. },
  131. _id : lastId ? {
  132. $gt : lastId
  133. } : {
  134. $exists : true
  135. }
  136. }).sort({
  137. _id : 1
  138. }).limit(1).toArray(function(error, foundReferences) {
  139.  
  140. if (error || !foundReferences.length) {
  141. return callback(error);
  142. }
  143.  
  144. checkThumb(foundReferences[0], function(error) {
  145.  
  146. if (error) {
  147. callback(error);
  148. } else {
  149. startIteration(callback, foundReferences[0]._id);
  150. }
  151.  
  152. });
  153. });
  154.  
  155. }
  156.  
  157. function connect(connectString, dbToUse, callback, attempts) {
  158.  
  159. attempts = attempts || 0;
  160.  
  161. mongo.MongoClient.connect(connectString, {
  162. useNewUrlParser : true,
  163. useUnifiedTopology : true
  164. }, function connectedDb(error, client) {
  165.  
  166. if (error) {
  167.  
  168. if (attempts > 9) {
  169. callback(error);
  170. } else {
  171.  
  172. console.log(error);
  173. console.log('Retrying in 10 seconds');
  174.  
  175. setTimeout(function() {
  176. connect(connectString, dbToUse, callback, ++attempts);
  177. }, 10000);
  178. }
  179.  
  180. } else {
  181.  
  182. cachedClient = client;
  183. cachedDb = client.db(dbToUse);
  184.  
  185. files = cachedDb.collection('fs.files');
  186. posts = cachedDb.collection('posts');
  187. threads = cachedDb.collection('threads');
  188. references = cachedDb.collection('uploadReferences');
  189.  
  190. startIteration(callback);
  191. }
  192.  
  193. });
  194.  
  195. }
  196.  
  197. exports.init = function(callback) {
  198.  
  199. var dbSettings = require('./settings/db.json');
  200.  
  201. var connectString = 'mongodb://';
  202.  
  203. if (dbSettings.user) {
  204. connectString += dbSettings.user + ':' + dbSettings.password + '@';
  205. }
  206.  
  207. connectString += dbSettings.address + ':';
  208. connectString += dbSettings.port + '/' + dbSettings.db;
  209.  
  210. if (dbSettings.ssl) {
  211. connectString += '?ssl=true';
  212. }
  213.  
  214. connect(connectString, dbSettings.db, callback);
  215.  
  216. };
  217.  
  218. exports.init(function(error) {
  219.  
  220. if (error) {
  221. console.log(error);
  222. }
  223.  
  224. cachedClient.close();
  225.  
  226. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement