123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- 'use strict';
- const extract = require('extract-zip')
- const config = require('config')
- const fs = require('fs')
- const path = require('path')
- const db = require('../models/db')
- const Sequelize = require('sequelize')
- const Op = Sequelize.Op
- const uuidv4 = require('uuid/v4')
- require('../models/db')
- module.exports = {
- importZIP: function(user, zipPath) {
- // 1. extract zip to local storage folder
- // 2. read spaces.json from this folder
- // 3. iterate through spaces and read all their artifact jsons
- // 4. fixup storage paths
- // 5. replace creator id by user._id
- let relativeImportDir = 'import_'+user._id
- let importDir = path.resolve(config.get('storage_local_path')+'/'+config.get('storage_bucket')+'/'+relativeImportDir)
-
- if (!fs.existsSync(importDir)) {
- fs.mkdirSync(importDir)
- }
-
- extract(zipPath, {dir: importDir}, function(err) {
- if (err) {
- console.log(err)
- return
- }
- console.log('[import] extracted to',importDir)
- let spacesJson = fs.readFileSync(importDir+'/spaces.json')
- let spaces = JSON.parse(spacesJson)
- var homeFolderId = null
- console.log('[import] spaces:',spaces.length)
- // pass 1: find homefolder
- for (var i=0; i<spaces.length; i++) {
- let space = spaces[i]
- if (!space.parent_space_id) {
- homeFolderId = space._id
- break
- }
- }
- console.log("[import] homeFolderId:",homeFolderId)
- for (var i=0; i<spaces.length; i++) {
- let space = spaces[i]
- if (space.parent_space_id) {
- let artifacts = JSON.parse(fs.readFileSync(importDir+'/'+space._id+'_artifacts.json'))
- console.log('[import] space',space._id,'artifacts:',artifacts.length)
- //let q = {where: {_id: space._id}}
- space.creator_id = user._id
- delete space.__v
-
- // transplant homefolder
- console.log("parent:",space.parent_space_id)
- if (space.parent_space_id+"" == homeFolderId+"") {
- space.parent_space_id = user.home_folder_id
- }
- // move nested attrs
- console.log(space)
- for (k in space.advanced) {
- space[k] = space.advanced[k]
- }
- db.Space.create(space)
- .error((err) => {
- console.error("[import] space upsert err:",err)
- })
-
- for (var j=0; j<artifacts.length; j++) {
- let a = artifacts[j]
-
- let q = {_id: a._id}
- a.user_id = user._id
- delete a.__v
- delete a.payload_thumbnail_big_uri
-
- // move nested attrs
- for (k in a.style) {
- a[k] = a.style[k]
- }
- for (k in a.meta) {
- a[k] = a.meta[k]
- }
- for (k in a.board) {
- a[k] = a.board[k]
- }
- let prefix = "/storage/"+relativeImportDir+"/"+space._id+"_files/"
- if (a.thumbnail_uri && a.thumbnail_uri[0]!='/') a.thumbnail_uri = prefix + a.thumbnail_uri
- if (a.payload_uri && a.payload_uri[0]!='/') a.payload_uri = prefix + a.payload_uri
- if (a.payload_thumbnail_web_uri && a.payload_thumbnail_web_uri[0]!='/') a.payload_thumbnail_web_uri = prefix + a.payload_thumbnail_web_uri
- if (a.payload_thumbnail_medium_uri && a.payload_thumbnail_medium_uri[0]!='/') a.payload_thumbnail_medium_uri = prefix + a.payload_thumbnail_medium_uri
- if (a.payload_alternatives) {
- for (var k=0; k<a.payload_alternatives.length; k++) {
- let alt = a.payload_alternatives[k]
-
- if (alt.payload_uri && alt.payload_uri[0]!='/') alt.payload_uri = prefix + alt.payload_uri
- if (alt.payload_thumbnail_web_uri && alt.payload_thumbnail_web_uri[0]!='/') alt.payload_thumbnail_web_uri = prefix + alt.payload_thumbnail_web_uri
- if (alt.payload_thumbnail_medium_uri && alt.payload_thumbnail_medium_uri[0]!='/') alt.payload_thumbnail_medium_uri = prefix + alt.payload_thumbnail_medium_uri
- }
- }
- db.packArtifact(a)
- db.Artifact.create(a).error(function(err) {
- console.error("[import] artifact upsert err:",err)
- })
- }
- }
- }
- })
- }
- }
|