Completed Image Editor
This commit is contained in:
		| @@ -66,7 +66,7 @@ module.exports = { | ||||
|  | ||||
| 			let pInfo = self.parseUploadsRelPath(p); | ||||
| 			return self.processFile(pInfo.folder, pInfo.filename).then((mData) => { | ||||
| 				return db.UplFile.create(mData); | ||||
| 				return db.UplFile.findByIdAndUpdate(mData._id, mData, { upsert: true }); | ||||
| 			}).then(() => { | ||||
| 				return git.commitUploads('Uploaded ' + p); | ||||
| 			}); | ||||
| @@ -78,12 +78,7 @@ module.exports = { | ||||
| 		self._watcher.on('unlink', (p) => { | ||||
|  | ||||
| 			let pInfo = self.parseUploadsRelPath(p); | ||||
| 			return db.UplFile.findOneAndRemove({ | ||||
| 				folder: 'f:' + pInfo.folder, | ||||
| 				filename: pInfo.filename | ||||
| 			}).then(() => { | ||||
| 				return git.commitUploads('Deleted ' + p); | ||||
| 			}); | ||||
| 			return git.commitUploads('Deleted/Renamed ' + p); | ||||
|  | ||||
| 		}); | ||||
|  | ||||
| @@ -113,7 +108,10 @@ module.exports = { | ||||
|  | ||||
| 				return db.UplFolder.remove({}).then(() => { | ||||
| 					return db.UplFolder.insertMany(_.map(folderNames, (f) => { | ||||
| 						return { name: f }; | ||||
| 						return { | ||||
| 							_id: 'f:' + f, | ||||
| 							name: f | ||||
| 						}; | ||||
| 					})); | ||||
| 				}).then(() => { | ||||
|  | ||||
|   | ||||
| @@ -6,6 +6,7 @@ const path = require('path'), | ||||
| 			multer  = require('multer'), | ||||
| 			request = require('request'), | ||||
| 			url = require('url'), | ||||
| 			farmhash = require('farmhash'), | ||||
| 			_ = require('lodash'); | ||||
|  | ||||
| var regFolderName = new RegExp("^[a-z0-9][a-z0-9\-]*[a-z0-9]$"); | ||||
| @@ -231,6 +232,78 @@ module.exports = { | ||||
|  | ||||
| 		}); | ||||
|  | ||||
| 	}, | ||||
|  | ||||
| 	/** | ||||
| 	 * Move/Rename a file | ||||
| 	 * | ||||
| 	 * @param      {String}   uid        The file ID | ||||
| 	 * @param      {String}   fld        The destination folder | ||||
| 	 * @param      {String}   nFilename  The new filename (optional) | ||||
| 	 * @return     {Promise}  Promise of the operation | ||||
| 	 */ | ||||
| 	moveUploadsFile(uid, fld, nFilename) { | ||||
|  | ||||
| 		let self = this; | ||||
|  | ||||
| 		return db.UplFolder.findById('f:' + fld).then((folder) => { | ||||
| 			if(folder) { | ||||
| 				return db.UplFile.findById(uid).then((originFile) => { | ||||
|  | ||||
| 					//-> Check if rename is valid | ||||
|  | ||||
| 					let nameCheck = null; | ||||
| 					if(nFilename) { | ||||
| 						let originFileObj = path.parse(originFile.filename); | ||||
| 						nameCheck = lcdata.validateUploadsFilename(nFilename + originFileObj.ext, folder.name); | ||||
| 					} else { | ||||
| 						nameCheck = Promise.resolve(originFile.filename); | ||||
| 					} | ||||
|  | ||||
| 					return nameCheck.then((destFilename) => { | ||||
|  | ||||
| 						let originFolder = (originFile.folder && originFile.folder !== 'f:') ? originFile.folder.slice(2) : './'; | ||||
| 						let sourceFilePath = path.resolve(self._uploadsPath, originFolder, originFile.filename); | ||||
| 						let destFilePath = path.resolve(self._uploadsPath, folder.name, destFilename); | ||||
| 						let preMoveOps = []; | ||||
|  | ||||
| 						//-> Check for invalid operations | ||||
|  | ||||
| 						if(sourceFilePath === destFilePath) { | ||||
| 							return Promise.reject(new Error('Invalid Operation!')); | ||||
| 						} | ||||
|  | ||||
| 						//-> Delete DB entry | ||||
|  | ||||
| 						preMoveOps.push(db.UplFile.findByIdAndRemove(uid)); | ||||
|  | ||||
| 						//-> Move thumbnail ahead to avoid re-generation | ||||
|  | ||||
| 						if(originFile.category === 'image') { | ||||
| 							let fUid = farmhash.fingerprint32(folder.name + '/' + destFilename); | ||||
| 							let sourceThumbPath = path.resolve(self._uploadsThumbsPath, originFile._id + '.png'); | ||||
| 							let destThumbPath = path.resolve(self._uploadsThumbsPath, fUid + '.png'); | ||||
| 							preMoveOps.push(fs.moveAsync(sourceThumbPath, destThumbPath)); | ||||
| 						} else { | ||||
| 							preMoveOps.push(Promise.resolve(true)); | ||||
| 						} | ||||
|  | ||||
| 						//-> Proceed to move actual file | ||||
|  | ||||
| 						return Promise.all(preMoveOps).then(() => { | ||||
| 							return fs.moveAsync(sourceFilePath, destFilePath, { | ||||
| 								clobber: false | ||||
| 							}); | ||||
| 						}); | ||||
|  | ||||
| 					}) | ||||
|  | ||||
| 				}); | ||||
| 			} else { | ||||
| 				return Promise.reject(new Error('Invalid Destination Folder')); | ||||
| 			} | ||||
| 		}); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user