Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mihkel Putrinš
panustaja
Commits
2987e1d5
Commit
2987e1d5
authored
Nov 26, 2015
by
Mihkel Putrinš
Browse files
refactor big time
parent
c8718293
Changes
6
Hide whitespace changes
Inline
Side-by-side
code/app.js
View file @
2987e1d5
...
...
@@ -9,53 +9,53 @@ var BrowserWindow = require('browser-window')
var
windows
=
{}
var
mainWindow
var
user
_u
rl
=
'
https://entu.keeleressursid.ee/api2/user
'
var
auth
_u
rl
=
user
_u
rl
+
'
/auth
'
var
user
U
rl
=
'
https://entu.keeleressursid.ee/api2/user
'
var
auth
U
rl
=
user
U
rl
+
'
/auth
'
IS
_
DEV
=
process
.
env
.
DEV
?
true
:
false
ISDEV
=
process
.
env
.
DEV
?
true
:
false
var
pjson
_p
ath
=
path
.
join
(
__dirname
,
'
..
'
,
'
package.json
'
)
var
pjson
=
require
(
pjson
_p
ath
)
if
(
IS
_
DEV
)
{
var
pjson
P
ath
=
path
.
join
(
__dirname
,
'
..
'
,
'
package.json
'
)
var
pjson
=
require
(
pjson
P
ath
)
if
(
ISDEV
)
{
pjson
.
build
++
fs
.
writeFileSync
(
pjson
_p
ath
,
JSON
.
stringify
(
pjson
,
null
,
2
))
fs
.
writeFileSync
(
pjson
P
ath
,
JSON
.
stringify
(
pjson
,
null
,
2
))
}
console
.
log
(
'
----====
'
+
pjson
.
name
+
'
v.
'
+
pjson
.
version
+
'
(build
'
+
(
pjson
.
build
)
+
'
) ====----
'
)
var
web
_p
references
=
{
var
web
P
references
=
{
'
partition
'
:
'
persist:panustaja (build
'
+
(
pjson
.
build
)
+
'
)
'
,
'
page-visibility
'
:
true
,
// Prevent throttling DOM timers (app gets less priority while in background)
}
app
.
on
(
'
ready
'
,
function
()
{
windows
.
authWindow
=
new
BrowserWindow
({
width
:
900
,
height
:
600
,
show
:
true
,
'
web-preferences
'
:
web
_p
references
})
windows
.
authWindow
=
new
BrowserWindow
({
width
:
900
,
height
:
600
,
show
:
true
,
'
web-preferences
'
:
web
P
references
})
// windows.authWindow.webContents.openDevTools(true)
var
title
=
pjson
.
name
+
'
v.
'
+
pjson
.
version
+
(
pjson
.
version
.
indexOf
(
'
-
'
)
>
-
1
?
pjson
.
build
:
''
)
+
'
| Logi sisse
'
windows
.
authWindow
.
center
()
windows
.
authWindow
.
setTitle
(
title
)
windows
.
authWindow
.
loadUrl
(
auth
_u
rl
)
windows
.
authWindow
.
webContents
.
on
(
'
did-get-response-details
'
,
function
(
e
,
s
,
new
_u
rl
)
{
windows
.
authWindow
.
loadUrl
(
auth
U
rl
)
windows
.
authWindow
.
webContents
.
on
(
'
did-get-response-details
'
,
function
(
e
,
s
,
new
U
rl
)
{
windows
.
authWindow
.
setTitle
(
title
)
if
(
new
_u
rl
===
user
_u
rl
||
new
_u
rl
===
user
_u
rl
+
'
#
'
)
{
if
(
new
U
rl
===
user
U
rl
||
new
U
rl
===
user
U
rl
+
'
#
'
)
{
windows
.
authWindow
.
hide
()
}
})
windows
.
authWindow
.
webContents
.
on
(
'
did-finish-load
'
,
function
()
{
windows
.
authWindow
.
setTitle
(
title
)
var
new
_u
rl
=
windows
.
authWindow
.
webContents
.
getUrl
()
if
(
new
_u
rl
===
user
_u
rl
||
new
_u
rl
===
user
_u
rl
+
'
#
'
)
{
var
new
U
rl
=
windows
.
authWindow
.
webContents
.
getUrl
()
if
(
new
U
rl
===
user
U
rl
||
new
U
rl
===
user
U
rl
+
'
#
'
)
{
clipboard
.
clear
()
windows
.
authWindow
.
webContents
.
selectAll
()
windows
.
authWindow
.
webContents
.
copy
()
setTimeout
(
function
()
{
mainWindow
=
new
BrowserWindow
({
width
:
900
,
height
:
600
,
show
:
true
,
'
web-preferences
'
:
web
_p
references
})
mainWindow
=
new
BrowserWindow
({
width
:
900
,
height
:
600
,
show
:
true
,
'
web-preferences
'
:
web
P
references
})
mainWindow
.
setTitle
(
'
Panustaja
'
)
mainWindow
.
center
()
var
view
_p
ath
=
path
.
join
(
app
.
getAppPath
(),
'
code
'
,
'
panu
_v
iew.html
'
)
mainWindow
.
webContents
.
loadUrl
(
'
file://
'
+
view
_p
ath
)
mainWindow
.
webContents
.
openDevTools
(
true
)
if
(
IS_DEV
)
{
var
view
P
ath
=
path
.
join
(
app
.
getAppPath
(),
'
code
'
,
'
panu
V
iew.html
'
)
mainWindow
.
webContents
.
loadUrl
(
'
file://
'
+
view
P
ath
)
if
(
ISDEV
)
{
mainWindow
.
webContents
.
openDevTools
(
true
)
}
windows
.
authWindow
.
close
()
delete
windows
.
authWindow
...
...
@@ -77,15 +77,15 @@ ipc.on('setTitle', function(event, message) {
mainWindow
.
setTitle
(
message
)
})
var
user
_d
ata
=
false
// console.log('user
_d
ata: ' + JSON.stringify(user
_d
ata, null, 4))
var
user
D
ata
=
false
// console.log('user
D
ata: ' + JSON.stringify(user
D
ata, null, 4))
ipc
.
on
(
'
setUser
'
,
function
(
event
,
data
)
{
user
_d
ata
=
data
// console.log('setUser: ' + JSON.stringify(user
_d
ata, null, 4))
user
D
ata
=
data
// console.log('setUser: ' + JSON.stringify(user
D
ata, null, 4))
})
ipc
.
on
(
'
getUser
'
,
function
(
event
)
{
event
.
returnValue
=
user
_d
ata
// console.log('getUser: ' + JSON.stringify(user
_d
ata, null, 4))
event
.
returnValue
=
user
D
ata
// console.log('getUser: ' + JSON.stringify(user
D
ata, null, 4))
})
app
.
on
(
'
window-all-closed
'
,
function
()
{
...
...
code/panu.js
View file @
2987e1d5
...
...
@@ -11,14 +11,14 @@ var dialog = remote.require('dialog')
var
clipboard
=
remote
.
require
(
'
clipboard
'
)
var
pjson
=
require
(
path
.
join
(
__dirname
,
'
..
'
,
'
package.json
'
))
UPLOADER
_
VERSION
=
pjson
.
name
+
'
v.
'
+
pjson
.
version
+
(
pjson
.
version
.
indexOf
(
'
-
'
)
>
-
1
?
pjson
.
build
:
''
)
UPLOADERVERSION
=
pjson
.
name
+
'
v.
'
+
pjson
.
version
+
(
pjson
.
version
.
indexOf
(
'
-
'
)
>
-
1
?
pjson
.
build
:
''
)
var
ipc
=
require
(
'
ipc
'
)
var
b2s
=
require
(
path
.
join
(
__dirname
,
'
bytesToSize.js
'
))
var
uploader
=
require
(
path
.
join
(
__dirname
,
'
upload.js
'
))
var
user
_d
ata
=
{}
var
user
D
ata
=
{}
var
data
=
ipc
.
sendSync
(
'
getUser
'
,
null
)
function
setFormState
(
state
)
{
...
...
@@ -79,70 +79,67 @@ function setFormState(state) {
var
resource
=
{}
var
resource
_s
tats
=
{}
var
renderer
_i
nterval
var
resource
S
tats
=
{}
var
renderer
I
nterval
function
renderResource
()
{
// console.log(JSON.stringify(op.get(resource
_s
tats, 'mime'), null, 2))
// console.log(JSON.stringify(op.get(resource
S
tats, 'mime'), null, 2))
document
.
getElementById
(
'
resourceStats
'
).
removeAttribute
(
'
hidden
'
)
document
.
getElementById
(
'
resourceDirectories
'
).
innerHTML
=
''
document
.
getElementById
(
'
resourceFiles
'
).
innerHTML
=
''
document
.
getElementById
(
'
mimeStats
'
).
innerHTML
=
''
document
.
getElementById
(
'
resourceDirectories
'
).
appendChild
(
document
.
createTextNode
(
'
Katalooge:
'
+
resource
_s
tats
.
directories
.
count
))
document
.
getElementById
(
'
resourceFiles
'
).
appendChild
(
document
.
createTextNode
(
'
Faile:
'
+
resource
_s
tats
.
files
.
count
+
'
|
'
+
b2s
(
resource
_s
tats
.
files
.
size
)))
Object
.
keys
(
resource
_s
tats
.
mime
).
forEach
(
function
(
mime
_t
ype
_n
ame
)
{
var
text
_n
ode
=
document
.
createTextNode
(
mime
_t
ype
_n
ame
+
'
:
'
+
op
.
get
(
resource
_s
tats
,
[
'
mime
'
,
mime
_t
ype
_n
ame
,
'
count
'
])
+
'
|
'
+
b2s
(
op
.
get
(
resource
_s
tats
,
[
'
mime
'
,
mime
_t
ype
_n
ame
,
'
size
'
]))
document
.
getElementById
(
'
resourceDirectories
'
).
appendChild
(
document
.
createTextNode
(
'
Katalooge:
'
+
resource
S
tats
.
directories
.
count
))
document
.
getElementById
(
'
resourceFiles
'
).
appendChild
(
document
.
createTextNode
(
'
Faile:
'
+
resource
S
tats
.
files
.
count
+
'
|
'
+
b2s
(
resource
S
tats
.
files
.
size
)))
Object
.
keys
(
resource
S
tats
.
mime
).
forEach
(
function
(
mime
T
ype
N
ame
)
{
var
text
N
ode
=
document
.
createTextNode
(
mime
T
ype
N
ame
+
'
:
'
+
op
.
get
(
resource
S
tats
,
[
'
mime
'
,
mime
T
ype
N
ame
,
'
count
'
])
+
'
|
'
+
b2s
(
op
.
get
(
resource
S
tats
,
[
'
mime
'
,
mime
T
ype
N
ame
,
'
size
'
]))
)
var
li
_n
ode
=
document
.
createElement
(
'
LI
'
)
li
_n
ode
.
appendChild
(
text
_n
ode
)
document
.
getElementById
(
'
mimeStats
'
).
appendChild
(
li
_n
ode
)
var
li
N
ode
=
document
.
createElement
(
'
LI
'
)
li
N
ode
.
appendChild
(
text
N
ode
)
document
.
getElementById
(
'
mimeStats
'
).
appendChild
(
li
N
ode
)
})
}
function
resourceLoaded
()
{
renderResource
()
setFormState
(
'
loaded
'
)
clearInterval
(
renderer_interval
)
if
(
document
.
getElementById
(
'
resourceNameInput
'
).
value
===
''
)
{
document
.
getElementById
(
'
resourceNameInput
'
).
focus
()
}
clearInterval
(
rendererInterval
)
// ipc.send('data', resource)
document
.
getElementById
(
'
uploadResourceButton
'
).
onclick
=
function
uploadResource
()
{
uploader
.
upload
()
}
}
function
registerMime
(
parent
_r
esource
,
filepath
,
filesize
,
callback
)
{
resource
_s
tats
.
files
.
count
++
resource
_s
tats
.
files
.
size
+=
filesize
function
registerMime
(
parent
R
esource
,
filepath
,
filesize
,
callback
)
{
resource
S
tats
.
files
.
count
++
resource
S
tats
.
files
.
size
+=
filesize
var
mimetype
=
mime
.
lookup
(
filepath
)
op
.
push
(
parent
_r
esource
,
'
files
'
,
filepath
)
op
.
set
(
resource
_s
tats
,
[
'
mime
'
,
mimetype
,
'
count
'
],
op
.
get
(
resource
_s
tats
,
[
'
mime
'
,
mimetype
,
'
count
'
],
0
)
+
1
)
op
.
set
(
resource
_s
tats
,
[
'
mime
'
,
mimetype
,
'
size
'
],
op
.
get
(
resource
_s
tats
,
[
'
mime
'
,
mimetype
,
'
size
'
],
0
)
+
filesize
)
op
.
push
(
parent
R
esource
,
'
files
'
,
filepath
)
op
.
set
(
resource
S
tats
,
[
'
mime
'
,
mimetype
,
'
count
'
],
op
.
get
(
resource
S
tats
,
[
'
mime
'
,
mimetype
,
'
count
'
],
0
)
+
1
)
op
.
set
(
resource
S
tats
,
[
'
mime
'
,
mimetype
,
'
size
'
],
op
.
get
(
resource
S
tats
,
[
'
mime
'
,
mimetype
,
'
size
'
],
0
)
+
filesize
)
callback
()
}
function
recurseLocal
(
parent
_r
esource
,
paths
,
loadedCB
)
{
async
.
each
(
paths
,
function
iterator
(
_p
ath
,
callback
)
{
fs
.
stat
(
_p
ath
,
function
(
err
,
stats
)
{
function
recurseLocal
(
parent
R
esource
,
paths
,
loadedCB
)
{
async
.
each
(
paths
,
function
iterator
(
myP
ath
,
callback
)
{
fs
.
stat
(
myP
ath
,
function
(
err
,
stats
)
{
if
(
err
)
{
return
callback
()
}
if
(
stats
.
isFile
())
{
registerMime
(
parent
_r
esource
,
_p
ath
,
stats
.
size
,
callback
)
registerMime
(
parent
R
esource
,
myP
ath
,
stats
.
size
,
callback
)
}
else
if
(
stats
.
isDirectory
())
{
resource
_s
tats
.
directories
.
count
++
var
directory
=
{
name
:
_p
ath
}
op
.
push
(
parent
_r
esource
,
'
resources
'
,
directory
)
fs
.
readdir
(
_p
ath
,
function
(
err
,
files
)
{
resource
S
tats
.
directories
.
count
++
var
directory
=
{
name
:
myP
ath
}
op
.
push
(
parent
R
esource
,
'
resources
'
,
directory
)
fs
.
readdir
(
myP
ath
,
function
(
err
,
files
)
{
if
(
err
)
{
return
callback
(
err
)
}
var
_p
aths
=
files
.
map
(
function
(
file
)
{
return
path
.
join
(
_p
ath
,
file
)
var
myP
aths
=
files
.
map
(
function
(
file
)
{
return
path
.
join
(
myP
ath
,
file
)
})
recurseLocal
(
directory
,
_p
aths
,
callback
)
recurseLocal
(
directory
,
myP
aths
,
callback
)
})
}
})
...
...
@@ -150,7 +147,7 @@ function recurseLocal(parent_resource, paths, loadedCB) {
if
(
err
)
{
console
.
log
(
'
A file failed to process
'
,
err
)
}
else
{
// console.log(JSON.stringify(op.get(resource
_s
tats, 'mime'), null, 2))
// console.log(JSON.stringify(op.get(resource
S
tats, 'mime'), null, 2))
loadedCB
()
}
})
...
...
@@ -158,32 +155,24 @@ function recurseLocal(parent_resource, paths, loadedCB) {
document
.
getElementById
(
'
selectLocalButton
'
).
onclick
=
function
selectLocal
()
{
resource
=
{
name
:
'
root
'
}
resource
_s
tats
=
{
files
:
{
count
:
0
,
size
:
0
},
directories
:
{
count
:
0
},
mime
:{}}
dialog
.
showOpenDialog
({
properties
:[
'
openFile
'
,
'
openDirectory
'
,
'
multiSelections
'
]},
function
selectedPath
(
_p
aths
)
{
if
(
!
_p
aths
)
{
return
}
renderer
_i
nterval
=
setInterval
(
function
()
{
renderResource
()
},
100
)
resource
S
tats
=
{
files
:
{
count
:
0
,
size
:
0
},
directories
:
{
count
:
0
},
mime
:{}}
dialog
.
showOpenDialog
({
properties
:[
'
openFile
'
,
'
openDirectory
'
]},
function
selectedPath
(
myP
aths
)
{
if
(
!
myP
aths
)
{
return
}
renderer
I
nterval
=
setInterval
(
function
()
{
renderResource
()
},
100
)
setFormState
(
'
loading
'
)
if
(
_paths
.
length
===
1
)
{
var
single_file
=
_paths
[
0
]
op
.
set
(
resource
,
'
name
'
,
path
.
basename
(
single_file
))
document
.
getElementById
(
'
resourceNameInput
'
).
value
=
resource
.
name
fs
.
stat
(
single_file
,
function
(
err
,
stats
)
{
if
(
myPaths
.
length
===
1
)
{
var
singleFile
=
myPaths
[
0
]
op
.
set
(
resource
,
'
name
'
,
path
.
basename
(
singleFile
))
if
(
err
)
{
throw
(
err
)
}
if
(
stats
.
isDirectory
())
{
fs
.
readdir
(
single_file
,
function
(
err
,
files
)
{
if
(
err
)
{
throw
(
err
)
}
_paths
=
files
.
map
(
function
(
file
)
{
var
fullpath
=
path
.
join
(
single_file
,
file
)
return
fullpath
})
recurseLocal
(
resource
,
_paths
,
resourceLoaded
)
})
}
else
{
recurseLocal
(
resource
,
_paths
,
resourceLoaded
)
}
})
}
else
{
recurseLocal
(
resource
,
_paths
,
resourceLoaded
)
}
})
}
...
...
@@ -195,13 +184,7 @@ if (!data) {
clipboard
.
clear
()
ipc
.
send
(
'
setUser
'
,
data
)
}
// console.log('user_data: ' + JSON.stringify(data, null, 4))
if
(
op
.
get
(
data
,
'
result.user_id
'
,
false
))
{
user_data
.
user_id
=
op
.
get
(
data
,
'
result.user_id
'
)
user_data
.
session_key
=
op
.
get
(
data
,
'
result.session_key
'
)
user_data
.
name
=
op
.
get
(
data
,
'
result.name
'
)
document
.
getElementById
(
'
userName
'
).
innerHTML
=
user_data
.
name
var
title
=
UPLOADER_VERSION
+
'
|
'
+
user_data
.
name
ipc
.
send
(
'
setTitle
'
,
title
)
setFormState
(
'
select
'
)
}
else
{
...
...
code/panu
_v
iew.html
→
code/panu
V
iew.html
View file @
2987e1d5
...
...
@@ -13,13 +13,11 @@
Panustaja
</div>
<h1
id=
"userName"
>
Tere
</h1>
<div
id=
"selectLocal"
hidden
>
<div
id=
"selectLocal"
hidden
=
""
>
<p
id=
"selectLocalMessage"
>
Palun vali fail(id) ja/või kataloog(id), mida soovid üles laadida.
</p>
<button
id=
"selectLocalButton"
>
Vali
</button>
</div>
<div
id=
"resourceName"
hidden=
""
>
<p
id=
"resourceNameMessage"
>
Muuda ressursi nimi sobivaks.
</p>
<input
id=
"resourceNameInput"
type=
"text"
placeholder=
"Ressursi nimi"
style=
"width:100%;"
>
</div>
<div
id=
"loading"
hidden=
""
>
<h3>
Loen failisüsteemist ...
</h3>
...
...
@@ -49,7 +47,7 @@
<h3>
Aitäh!
</h3>
<div>
<span>
Su ressurss on kohal:
</span>
<a
id=
"resource
_e
ntu
_l
ink"
>
siin
</a>
<a
id=
"resource
E
ntu
L
ink"
>
siin
</a>
</div>
</div>
<script
src=
"./panu.js"
></script>
...
...
code/test.jade
deleted
100644 → 0
View file @
c8718293
doctype html
html
head
meta(charset='utf-8')
link(rel='stylesheet', type='text/css', href='../style/style.css')
link(rel='icon' type='image/png', href='/favicon-96x96.png' sizes='96x96')
link(rel='shortcut icon', href='/favicon.ico')
body
iframe#login_frame(name='disable-x-frame-options' src='https://entu.keeleressursid.ee/api2/user/auth', width='600', height='600')
code/upload.js
View file @
2987e1d5
...
...
@@ -9,51 +9,36 @@ var async = require('async')
var
b2s
=
require
(
path
.
join
(
__dirname
,
'
..
'
,
'
code
'
,
'
bytesToSize.js
'
))
var
resource_root_eid
=
4387
var
uploaded_resources_progress
var
uploaded_files_progress
ENTU_API_ENTITY
=
'
https://entu.keeleressursid.ee/api2/entity
'
ENTU_API_FILE
=
'
https://entu.keeleressursid.ee/api2/file
'
var
resourceRootEid
=
4387
var
uploadedResourcesProgress
var
uploadedFilesProgress
ENTUAPI
=
'
https://entu.keeleressursid.ee/api2
'
ENTUAPIENTITY
=
'
https://entu.keeleressursid.ee/api2/entity
'
ENTUAPIFILE
=
'
https://entu.keeleressursid.ee/api2/file
'
var
renderer
_i
nterval
var
renderer
I
nterval
var
file
_u
pload
_t
asks
=
[]
var
file
U
pload
T
asks
=
[]
function
openResourceInBrowser
()
{
require
(
'
shell
'
).
openExternal
(
'
https://entu.keeleressursid.ee/entity/resource/
'
+
resource
.
eid
)
return
false
}
function
renderProgress
()
{
// dom
_r
esource
_s
tats.removeAttribute('hidden')
document
.
getElementById
(
'
resourceProgressbarInner
'
).
style
.
width
=
(
uploaded
_r
esources
_p
rogress
*
100
/
(
resource
_s
tats
.
directories
.
count
+
1
))
+
'
%
'
document
.
getElementById
(
'
uploadedResources
'
).
innerHTML
=
uploaded
_r
esources
_p
rogress
document
.
getElementById
(
'
fileProgressbarInner
'
).
style
.
width
=
(
uploaded
_f
iles
_p
rogress
*
100
/
resource
_s
tats
.
files
.
size
)
+
'
%
'
// console.log('== LOGGING: ', uploaded
_f
iles
_p
rogress, resource
_s
tats.files.size, resource
_s
tats.files.count)
document
.
getElementById
(
'
uploadedSize
'
).
innerHTML
=
b2s
(
uploaded
_f
iles
_p
rogress
)
// dom
R
esource
S
tats.removeAttribute('hidden')
document
.
getElementById
(
'
resourceProgressbarInner
'
).
style
.
width
=
(
uploaded
R
esources
P
rogress
*
100
/
(
resource
S
tats
.
directories
.
count
+
1
))
+
'
%
'
document
.
getElementById
(
'
uploadedResources
'
).
innerHTML
=
uploaded
R
esources
P
rogress
document
.
getElementById
(
'
fileProgressbarInner
'
).
style
.
width
=
(
uploaded
F
iles
P
rogress
*
100
/
resource
S
tats
.
files
.
size
)
+
'
%
'
// console.log('== LOGGING: ', uploaded
F
iles
P
rogress, resource
S
tats.files.size, resource
S
tats.files.count)
document
.
getElementById
(
'
uploadedSize
'
).
innerHTML
=
b2s
(
uploaded
F
iles
P
rogress
)
}
function
resourcesCreated
(
err
)
{
if
(
err
)
{
throw
(
err
)
}
async
.
parallelLimit
(
file_upload_tasks
,
3
,
function
filesUploaded
()
{
setFormState
(
'
uploaded
'
)
document
.
getElementById
(
'
resource_entu_link
'
).
setAttribute
(
'
href
'
,
'
https://entu.keeleressursid.ee/entity/resource/
'
+
resource
.
eid
)
document
.
getElementById
(
'
resource_entu_link
'
).
innerHTML
=
'
https://entu.keeleressursid.ee/entity/resource/
'
+
resource
.
eid
document
.
getElementById
(
'
resource_entu_link
'
).
onclick
=
openResourceInBrowser
// ipc.send('data', resource)
clearInterval
(
renderer_interval
)
renderProgress
()
})
}
function
addEntuFile
(
eid
,
file
_p
ath
,
callback
)
{
function
addEntuFile
(
eid
,
file
P
ath
,
callback
)
{
var
options
=
{
url
:
ENTU
_
API
_
FILE
,
url
:
ENTUAPIFILE
,
headers
:
{
'
X-Auth-UserId
'
:
user
_d
ata
.
user
_i
d
,
'
X-Auth-Token
'
:
user
_d
ata
.
session
_k
ey
,
'
User-Agent
'
:
UPLOADER
_
VERSION
'
X-Auth-UserId
'
:
user
D
ata
.
user
I
d
,
'
X-Auth-Token
'
:
user
D
ata
.
session
K
ey
,
'
User-Agent
'
:
UPLOADERVERSION
}
}
...
...
@@ -71,24 +56,39 @@ function addEntuFile(eid, file_path, callback) {
var
form
=
req
.
form
()
var
read
_s
tream
=
fs
.
createReadStream
(
file
_p
ath
)
form
.
append
(
'
file
'
,
read
_s
tream
)
var
read
S
tream
=
fs
.
createReadStream
(
file
P
ath
)
form
.
append
(
'
file
'
,
read
S
tream
)
form
.
append
(
'
entity
'
,
eid
)
form
.
append
(
'
property
'
,
'
resource-file
'
)
form
.
append
(
'
filename
'
,
path
.
basename
(
file
_p
ath
))
read
_s
tream
.
on
(
'
data
'
,
function
(
chunk
)
{
uploaded
_f
iles
_p
rogress
+=
chunk
.
length
console
.
log
(
'
Uploaded:
'
+
uploaded
_f
iles
_p
rogress
+
'
(+
'
+
chunk
.
length
+
'
)
'
)
form
.
append
(
'
filename
'
,
path
.
basename
(
file
P
ath
))
read
S
tream
.
on
(
'
data
'
,
function
(
chunk
)
{
uploaded
F
iles
P
rogress
+=
chunk
.
length
//
console.log('Uploaded: ' + uploaded
F
iles
P
rogress + '(+' + chunk.length + ')')
})
}
function
addEntuProperties
(
eid
,
data
,
callback
)
{
var
url_data
=
Object
.
keys
(
data
).
map
(
function
(
ix
)
{
return
ix
+
'
=
'
+
data
[
ix
]}).
join
(
'
&
'
)
// console.log(url_data)
request
.
put
({
url
:
preparedUrl
,
headers
:
headers
,
body
:
qb
,
strictSSL
:
true
,
json
:
true
,
timeout
:
60000
},
function
(
error
,
response
,
body
)
{
if
(
error
)
return
callback
(
error
)
if
(
response
.
statusCode
!==
201
||
!
body
.
result
)
return
callback
(
new
Error
(
op
.
get
(
body
,
'
error
'
,
body
)))
callback
(
null
,
op
.
get
(
body
,
'
result.properties.
'
+
property
+
'
.0
'
,
null
))
})
var
urlData
=
Object
.
keys
(
data
).
map
(
function
(
ix
)
{
return
ix
+
'
=
'
+
data
[
ix
]}).
join
(
'
&
'
)
// console.log(urlData)
var
xhr
=
new
window
.
XMLHttpRequest
()
xhr
.
open
(
'
PUT
'
,
ENTU
_
API
_
ENTITY
+
'
-
'
+
eid
+
'
?
'
+
url
_d
ata
,
true
)
xhr
.
setRequestHeader
(
'
X-Auth-UserId
'
,
user
_d
ata
.
user
_i
d
)
xhr
.
setRequestHeader
(
'
X-Auth-Token
'
,
user
_d
ata
.
session
_k
ey
)
xhr
.
open
(
'
PUT
'
,
ENTUAPIENTITY
+
'
-
'
+
eid
+
'
?
'
+
url
D
ata
,
true
)
xhr
.
setRequestHeader
(
'
X-Auth-UserId
'
,
user
D
ata
.
user
I
d
)
xhr
.
setRequestHeader
(
'
X-Auth-Token
'
,
user
D
ata
.
session
K
ey
)
xhr
.
onload
=
function
()
{
// var response = JSON.parse(this.responseText)
// console.log(JSON.stringify({sent:data, got:response}, null, 4))
...
...
@@ -100,79 +100,108 @@ function addEntuProperties(eid, data, callback) {
xhr
.
send
(
data
)
}
function
createEntuResource
(
parent_eid
,
resource
,
callback
)
{
console
.
log
(
'
create under EID:
'
,
parent_eid
)
var
xhr
=
new
window
.
XMLHttpRequest
()
xhr
.
open
(
'
POST
'
,
ENTU_API_ENTITY
+
'
-
'
+
parent_eid
,
true
)
xhr
.
setRequestHeader
(
'
Content-type
'
,
'
application/x-www-form-urlencoded
'
)
xhr
.
setRequestHeader
(
'
X-Auth-UserId
'
,
user_data
.
user_id
)
xhr
.
setRequestHeader
(
'
X-Auth-Token
'
,
user_data
.
session_key
)
xhr
.
onload
=
function
()
{
// if (err) {
// console.log(err)
// return callback(err)
// }
var
new_eid
=
op
.
get
(
JSON
.
parse
(
this
.
responseText
),
[
'
result
'
,
'
id
'
],
false
)
console
.
log
(
'
Looking for new EID:
'
,
new_eid
)
if
(
new_eid
)
{
console
.
log
(
'
onload new EID:
'
,
new_eid
)
op
.
set
(
resource
,
[
'
eid
'
],
new_eid
)
addEntuProperties
(
new_eid
,
{
'
resource-name
'
:
path
.
basename
(
op
.
get
(
resource
,
[
'
name
'
],
'
nameless resource
'
)),
'
resource-uploader-version
'
:
UPLOADER_VERSION
},
function
(
err
)
{
if
(
err
)
{
return
callback
(
err
)
}
uploaded_resources_progress
++
op
.
get
(
resource
,
[
'
files
'
],
[]).
forEach
(
function
(
file_path
)
{
file_upload_tasks
.
push
(
function
uploadFile
(
callback
)
{
document
.
getElementById
(
'
status
'
).
innerHTML
=
new_eid
+
'
:
'
+
file_path
// console.log('F: Uploading file ' + file_path + ' at resource ' + new_eid)
addEntuFile
(
new_eid
,
file_path
,
function
fileAddedCB
()
{
callback
()
})
})
// console.log('F: Queued file ' + file_path + ' for upload at resource ' + new_eid)
})
callback
(
null
,
new_eid
)
})
}
else
{
callback
(
'
ERROR:
'
,
this
.
responseText
)
}
function
createEntuResource
(
parentEid
,
resource
,
callback
)
{
// console.log('create under EID:', parentEid)
var
body
=
{
'
definition
'
:
'
resource
'
,
'
resource-name
'
:
path
.
basename
(
op
.
get
(
resource
,
[
'
name
'
],
'
nameless resource
'
)),
'
resource-uploader-version
'
:
UPLOADERVERSION
}
xhr
.
onerror
=
function
(
err
)
{
console
.
log
(
'
error:
'
,
err
)
callback
(
err
)
if
(
op
.
get
(
resource
,
[
'
mime-encode
'
],
false
))
{
op
.
set
(
body
,
[
'
resource-mime-encode
'
],
op
.
get
(
resource
,
[
'
mime-encode
'
]))
}
xhr
.
send
(
'
definition=resource
'
)
if
(
op
.
get
(
resource
,
[
'
size
'
],
false
))
{
op
.
set
(
body
,
[
'
resource-size
'
],
op
.
get
(
resource
,
[
'
size
'
]))
}
var
preparedUrl
=
ENTUAPIENTITY
+
'
-
'
+
parentEid
var
headers
=
{
'
X-Auth-UserId
'
:
userData
.
userId
,
'
X-Auth-Token
'
:
userData
.
sessionKey
}
// console.log('Try to execute URL ' + preparedUrl, userData, body)
request
.
post
({
url
:
preparedUrl
,
headers
:
headers
,
body
:
body
,
strictSSL
:
true
,
json
:
true
,
timeout
:
60000
},
function
(
error
,
response
,
body
)
{
// console.log('result', body)
if
(
error
)
return
callback
(
error
)
if
(
response
.
statusCode
!==
201
)
return
callback
(
new
Error
(
op
.
get
(
body
,
'
error
'
,
body
)))
var
newEid
=
body
.
result
.
id
uploadedResourcesProgress
++
op
.
get
(
resource
,
[
'
files
'
],
[]).
forEach
(
function
(
filePath
)
{
fileUploadTasks
.
push
(
function
uploadFile
(
callback
)
{
document
.
getElementById
(
'
status
'
).
innerHTML
=
newEid
+
'
:
'
+
filePath
// console.log('F: Uploading file ' + filePath + ' at resource ' + newEid)
addEntuFile
(
newEid
,
filePath
,
function
fileAddedCB
()
{
callback
()
})
})
// console.log('F: Queued file ' + filePath + ' for upload at resource ' + newEid)
})
callback
(
null
,
newEid
)
})
}
function
recurseResources
(
parent
_e
id
,
resource
,
resourcesCreatedCB
)
{
console
.
log
(
'
Recurse under EID:
'
,
parent
_e
id
)
createEntuResource
(
parent
_e
id
,
resource
,
function
resourceCreatedCB
(
err
,
new
_e
id
)
{
function
recurseResources
(
parent
E
id
,
resource
,
resourcesCreatedCB
)
{
//
console.log('Recurse under EID:', parent
E
id)
createEntuResource
(
parent
E
id
,
resource
,
function
resourceCreatedCB
(
err
,
new
E
id
)
{
if
(
err
)
{
return
resourcesCreatedCB
(
err
)
}
async
.
each
(
op
.
get
(
resource
,
[
'
resources
'
],
[]),
function
iterator
(
child
_r
esource
,
callback
)
{
recurseResources
(
new
_e
id
,
child
_r
esource
,
callback
)
async
.
each
(
op
.
get
(
resource
,
[
'
resources
'
],
[]),
function
iterator
(
child
R
esource
,
callback
)
{
recurseResources
(
new
E
id
,
child
R
esource
,
callback
)
},
function
(
err
){
if
(
err
)
{
return
resourcesCreatedCB
(
err
)
}
resourcesCreatedCB
()
// console.log('Created:', newEid)
resourcesCreatedCB
(
null
,
newEid
)
})
})
}
function
upload
()
{
op
.
set
(
resource
,
[
'
name
'
],
document
.
getElementById
(
'
resourceNameInput
'
).
value
)
uploaded_resources_progress
=
0
uploaded_files_progress
=
0
console
.
log
(
JSON
.
stringify
(
resource
,
null
,
4
))
document
.
getElementById
(
'
uploadTotalResources
'
).
innerHTML
=
(
resource_stats
.
directories
.
count
+
1
)
document
.
getElementById
(
'
uploadTotalSize
'
).
innerHTML
=
b2s
(
resource_stats
.
files
.
size
)
renderer_interval
=
setInterval
(
function
()
{
op
.
set
(
resource
,
[
'
size
'
],
b2s
(
resourceStats
.
files
.
size
))
op
.
set
(
resource
,
[
'
mime-encode
'
],
JSON
.
stringify
(
resourceStats
.
mime
,
null
,
4
))
uploadedResourcesProgress
=
0
uploadedFilesProgress
=
0
// console.log(JSON.stringify(resource, null, 4))
document
.
getElementById
(
'
uploadTotalResources
'
).
innerHTML
=
(
resourceStats
.
directories
.
count
+
1
)
document
.
getElementById
(
'
uploadTotalSize
'
).
innerHTML
=
b2s
(
resourceStats
.
files
.
size
)
rendererInterval
=
setInterval
(
function
()
{
renderProgress
()
},
250
)
setFormState
(
'
uploading
'
)
recurseResources
(
resource_root_eid
,
resource
,
resourcesCreated
)
async
.
waterfall
([
function
runRecurseResources
(
callback
)
{
recurseResources
(
resourceRootEid
,
resource
,
function
resourcesCreated
(
err
,
newEid
)
{
if
(
err
)
{
return
callback
(
err
)
}
callback
(
null
,
newEid
)
})
},
function
runFileUploadTasks
(
newEid
,
callback
)
{
async
.
parallelLimit
(
fileUploadTasks
,
3
,
function
filesUploaded
()
{
callback
(
null
,
newEid
)
})
},
function
updateUI
(
newEid
,
callback
)
{
setFormState
(
'
uploaded
'
)
document
.
getElementById
(
'
resourceEntuLink
'
).
setAttribute
(
'
href
'
,
'
https://entu.keeleressursid.ee/entity/resource/
'
+
newEid
)
document
.
getElementById
(
'
resourceEntuLink
'
).
innerHTML
=
'
https://entu.keeleressursid.ee/entity/resource/
'
+
newEid
document
.
getElementById
(
'
resourceEntuLink
'
).
onclick
=
function
openResourceInBrowser
()
{
require
(
'
shell
'
).
open