Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env node
- 'use strict';
- var mongo = require('mongodb');
- var cachedDb;
- var cachedClient;
- var posts;
- var files;
- var threads;
- var references;
- exports.secondFix = function(reference, callback) {
- var thumbPath = '/.media/t_' + reference.sha256;
- var path = '/.media/' + reference.sha256;
- if (reference.extension) {
- path += '.' + reference.extension;
- }
- var match = {
- 'files.path' : path
- };
- var update = {
- $set : {
- 'files.$[file].thumb' : thumbPath
- }
- };
- var ops = {
- arrayFilters : [ {
- 'file.path' : path
- } ]
- };
- posts.updateMany(match, update, ops, function(error) {
- if (error) {
- callback(error);
- } else {
- threads.updateMany(match, update, ops, callback);
- }
- });
- };
- exports.fixPostings = function(reference, callback) {
- var path = '/.media/' + reference.sha256;
- if (reference.extension) {
- path += '.' + reference.extension;
- }
- var match = {
- 'files.path' : path
- };
- var update = {
- $set : {
- 'files.$[file].thumb' : reference.width ? path : '/audioGenericThumb.png'
- }
- };
- var ops = {
- arrayFilters : [ {
- 'file.path' : path
- } ]
- };
- posts.updateMany(match, update, ops, function(error) {
- if (error) {
- callback(error);
- } else {
- threads.updateMany(match, update, ops, callback);
- }
- });
- };
- function checkThumb(reference, callback) {
- files.findOne({
- filename : '/.media/t_' + reference.sha256
- }, function(error, foundFile) {
- if (error) {
- return callback(error);
- } else if (!foundFile) {
- return exports.fixPostings(reference, callback);
- }
- // style exception, too simple
- references.updateOne({
- _id : reference._id
- }, {
- $set : {
- hasThumb : true
- }
- }, function(error) {
- if (error) {
- callback(error);
- } else {
- exports.secondFix(reference, callback);
- }
- });
- // style exception, too simple
- });
- }
- function startIteration(callback, lastId) {
- references.find({
- sha256 : {
- $exists : true
- },
- hasThumb : {
- $ne : true
- },
- _id : lastId ? {
- $gt : lastId
- } : {
- $exists : true
- }
- }).sort({
- _id : 1
- }).limit(1).toArray(function(error, foundReferences) {
- if (error || !foundReferences.length) {
- return callback(error);
- }
- checkThumb(foundReferences[0], function(error) {
- if (error) {
- callback(error);
- } else {
- startIteration(callback, foundReferences[0]._id);
- }
- });
- });
- }
- function connect(connectString, dbToUse, callback, attempts) {
- attempts = attempts || 0;
- mongo.MongoClient.connect(connectString, {
- useNewUrlParser : true,
- useUnifiedTopology : true
- }, function connectedDb(error, client) {
- if (error) {
- if (attempts > 9) {
- callback(error);
- } else {
- console.log(error);
- console.log('Retrying in 10 seconds');
- setTimeout(function() {
- connect(connectString, dbToUse, callback, ++attempts);
- }, 10000);
- }
- } else {
- cachedClient = client;
- cachedDb = client.db(dbToUse);
- files = cachedDb.collection('fs.files');
- posts = cachedDb.collection('posts');
- threads = cachedDb.collection('threads');
- references = cachedDb.collection('uploadReferences');
- startIteration(callback);
- }
- });
- }
- exports.init = function(callback) {
- var dbSettings = require('./settings/db.json');
- var connectString = 'mongodb://';
- if (dbSettings.user) {
- connectString += dbSettings.user + ':' + dbSettings.password + '@';
- }
- connectString += dbSettings.address + ':';
- connectString += dbSettings.port + '/' + dbSettings.db;
- if (dbSettings.ssl) {
- connectString += '?ssl=true';
- }
- connect(connectString, dbSettings.db, callback);
- };
- exports.init(function(error) {
- if (error) {
- console.log(error);
- }
- cachedClient.close();
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement