Skip to content

Instantly share code, notes, and snippets.

@SergProduction
Last active March 19, 2017 23:36
Show Gist options
  • Save SergProduction/84ecf93b85c0857f29429d98a355a2c9 to your computer and use it in GitHub Desktop.
Save SergProduction/84ecf93b85c0857f29429d98a355a2c9 to your computer and use it in GitHub Desktop.
const path = require('path');
const fs = require('fs');
const stream = require('stream');
const copy = require('recursive-copy');
let dirArr = fs.readdirSync( path.join(__dirname, 'base/jpg/') )
let fileName = dirArr.map( el => {
var a = el.replace( /(\.JPG|\.JPEG|\.PNG)$/ig, '' )
a = a.match(/[^_]+/ig) //["01.04.2014", "2509045968", "22422"]
var b = {date: a[0] || 0, id: a[1] || 0, show: a[2] || 0, source: el }
return b
})
let mainBaseJ = fs.readFileSync( path.join(__dirname, 'result/MainBase.json') ).toString()
let logOut = [];
function logWrite(){
const logStream = fs.createWriteStream( path.join(__dirname, 'log.txt'), {defaultEncoding: 'utf8'})
logOut.forEach( el => {
logStream.write(el)
})
logStream.end()
}
let mainBaseJS = JSON.parse( mainBaseJ )
let iterBase = equalBase( mainBaseJS, fileName)
let iterSel = iterBase.next()
myCopy( iterBase )
//logWrite()
let baseChunkJsonEnd = [];
let baseChunkJsonStart = [];
//let count =0;
//var loading = mainBaseJS.length * fileName.length;
//var loadProc = 0;
function* equalBase( baseArray, fileName ){
//loading = baseArray.length * fileName.length
//baseArray
for(let i=0; i<baseArray.length; i++){
for(let z=0; z<fileName.length; z++){
//loadProc = loadProc+1;
//console.log('loading', loadProc,' is ', loading )
//baseArray.forEach( (row, i, arr) => {
// fileName.forEach( (file, z) => {
//loadProc+=1
let licChet = baseArray[i][3].match(/\d+/);
licChet = licChet ? licChet[0] : 0;
let dir = baseArray[i][1].match(/[а-я]+/i);
let name = baseArray[i][1].match(/\d+/i);
//name = name ? (name[0] + '.JPEG') : 'other.JPEG';
//console.log('licChet',licChet,'dir',dir,'name',name)
if( baseArray[i][5] == fileName[z].date &&
baseArray[i][4] == fileName[z].show &&
licChet == fileName[z].id
){
dir = dir ? dir[0] : 'other';
name = name ? (name[0] + '.JPEG') : 'other.JPEG';
//console.log('var1 ', dir, name);
let log = fileName[z].source || '0';
//logStream.write( log + '\n')
logOut.push(log+'\n')
yield {
src: fileName[z].source || '0',
newName: name,
dist: dir
}
}
else if(
baseArray[i][8] == fileName[z].date &&
baseArray[i][7] == fileName[z].show &&
licChet == fileName[z].id
){
dir = dir ? dir[0] : 'other';
name = name ? (name[0] + '.1.JPEG') : 'other.JPEG';
//console.log('var2 ', dir, name);
let log = fileName[z].source || '0';
//logStream.write( log + '\n')
logOut.push(log+'\n')
yield {
src: fileName[z].source || '0',
newName: name,
dist: dir
}
}
//else{
// if( !log.includes(fileName[z].source) )
// log.push( fileName[z].source )
//}
}
}
}
function myCopy(iterBase){
//iterBase;
let iterSel = iterBase.next()
if( !iterSel.done )
scopeCopy( iterSel )
function scopeCopy(newName){
let val = newName.value;
let end = newName.done;
if(end)
logWrite()
//console.log(val)
let source = path.join( __dirname, 'base/jpg/', val.src )
let dest = path.join( __dirname, 'result/jpg/', val.dist, val.newName )
//console.log(source)
//console.log(dest)
copy(source, dest)
.then( result => {
console.log('yes copy ', val.src, val.newName )
if( !end )
scopeCopy( iterBase.next() )
})
.catch( error => {
if( error.code == 'EEXIST'){
console.log('File exists!')
}
if( !end )
scopeCopy( iterBase.next() )
//console.log('error!?', error )
})
}
}
//equalBase()
/*
function copyAndRenameFile( sourcefileName, targetfileName, targetDirName){
let sourcePath = path.join(__dirname, 'base/jpg/', sourcefileName)
let pathNameDir = path.join(__dirname, 'result/jpg/', targetDirName )
let targetPath = path.join(__dirname, 'result/jpg/', targetDirName, targetfileName)
fs.mkdir( pathNameDir,
(err) => {
//try{}catch(e){}
copyFile( sourcePath, targetPath )
})
}
*/
function createJsonFromChunk(){
var newJson = '[';
baseChunkJsonEnd.forEach( (end, i) => {
newJson += end + baseChunkJsonStart[i]
})
newJson = newJson.substring(0, newJson.lastIndexOf(',') ) + ']'
return JSON.parse(newJson)
}
function returnJsonValidat(yourJson){
let result, chunk
baseChunkJsonEnd.push( yourJson.substring( 0, yourJson.indexOf('[') ) )
baseChunkJsonStart.push( yourJson.substring( yourJson.lastIndexOf('[') ) )
chunk = yourJson.substring( yourJson.indexOf('[') )
chunk = chunk.substring( 0, chunk.lastIndexOf(']') +1 )
for(let i=0; i<=3; i++){
result = parse(i)
if(result !== false) break
}
return result
function parse(where){
try{
switch(where){
case 0:
return JSON.parse( chunk )
break
case 1:
return JSON.parse( '[' + chunk + ']' )
break
case 2:
return JSON.parse( '[' + chunk )
break
case 3:
return JSON.parse( chunk + ']')
break
}
}
catch(e){
if( e !== null )
return false
}
}
}
function copyFile(source, target, cb) {
var cbCalled = false;
var rd = fs.createReadStream(source);
rd.on("error", function(err) {
done(err);
});
var wr = fs.createWriteStream(target);
wr.on("error", function(err) {
done(err);
});
wr.on("close", function(ex) {
done();
});
rd.pipe(wr);
function done(err) {
if (!cbCalled) {
if(cb) cb(err);
cbCalled = true;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment