[fix] thumbnail generation
This commit is contained in:
parent
5e5e6182a8
commit
251cf23fd8
7 changed files with 94 additions and 53 deletions
|
@ -41,10 +41,17 @@
|
|||
JobId:
|
||||
<v-chip class="green white--text">{{jobId}}</v-chip>
|
||||
<v-progress-circular v-if="waiting" indeterminate class="primary--text"></v-progress-circular>
|
||||
Elapsed:
|
||||
<v-chip class="green white--text">{{elapsed}}</v-chip>
|
||||
|
||||
<v-chip label class="grey white--text">
|
||||
<v-avatar class="red"> <v-icon>lock</v-icon>W</v-avatar>
|
||||
{{ jobState.writes }}</v-chip>
|
||||
<v-chip label class="grey white--text">
|
||||
<v-avatar class="amber"> <v-icon>lock</v-icon>R</v-avatar>
|
||||
{{ jobState.reads }}</v-chip>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn flat class="green--text darken-1">@TODO</v-btn>
|
||||
<v-chip class="green white--text">
|
||||
<v-avatar > <v-icon>timer</v-icon></v-avatar>
|
||||
{{elapsed}}ms</v-chip>
|
||||
</v-card-actions>
|
||||
<v-card-text v-if="show">
|
||||
<v-flex xs12 style="height:200px" fill-height>
|
||||
|
@ -62,15 +69,16 @@
|
|||
return {
|
||||
xq: '(: type your XQuery :)\n',
|
||||
result:'',
|
||||
elapsed:null,
|
||||
show:false,
|
||||
showError:false,
|
||||
jobId:null,
|
||||
waiting:false,
|
||||
start:null,
|
||||
font:'Courier',
|
||||
elapsed: null,
|
||||
show: false,
|
||||
showError: false,
|
||||
jobId: null,
|
||||
waiting: false,
|
||||
start: null,
|
||||
jobState: {},
|
||||
font: 'Courier',
|
||||
dropdown_font: [
|
||||
{ text: 'Arial' },
|
||||
{ text: 'Test select' },
|
||||
{ text: 'Calibri' },
|
||||
{ text: 'Courier' },
|
||||
{ text: 'Verdana' }
|
||||
|
@ -125,6 +133,7 @@
|
|||
this.waiting=true;
|
||||
HTTP.get("job/"+this.jobId)
|
||||
.then(r=>{
|
||||
this.jobState=r.data
|
||||
this.waiting=r.data.state!="cached";
|
||||
this.elapsed=Math.floor(performance.now() - this.start);
|
||||
if(this.waiting) {
|
||||
|
@ -143,7 +152,7 @@
|
|||
})
|
||||
},
|
||||
imports(){
|
||||
alert("imports")
|
||||
alert("@TODO imports")
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ let $relpath:= $files!( ancestor-or-self::*/@name=>string-join("/"))
|
|||
|
||||
let $todo:= $relpath[not("/vue-poc/" || .|| "/meta.xml"=$done)]
|
||||
return (for $f in subsequence($todo,1, $CHUNK)
|
||||
let $spath:=$cfg:IMAGEDIR || $f
|
||||
let $spath:=$cfg:IMAGEDIR || "../" || $f
|
||||
let $dbpath:=$f || "/meta.xml"
|
||||
let $meta:=imgmeta:read($spath)
|
||||
return db:replace($DB,$dbpath,$meta),
|
||||
|
|
|
@ -10,9 +10,13 @@ declare variable $CHUNK:=1000;
|
|||
|
||||
declare %updating function local:store-thumb($f as xs:string)
|
||||
{
|
||||
let $src:=$cfg:IMAGEDIR || trace($f)
|
||||
let $src:=$cfg:IMAGEDIR || "../" || trace($f)
|
||||
let $trg:= $cfg:THUMBDIR || $f
|
||||
return fetch:binary($src)=>t:size(80)=>local:write-binary($trg)
|
||||
return try{
|
||||
fetch:binary($src)=>t:size(80)=>local:write-binary($trg)
|
||||
} catch * {
|
||||
db:output("bad: " || $f)
|
||||
}
|
||||
};
|
||||
(:~ create folder if missing) :)
|
||||
declare %updating function local:write-binary($data,$url as xs:string)
|
||||
|
@ -30,7 +34,8 @@ let $files:= doc("/vue-poc/pics.xml")//c:file[ends-with(lower-case(@name),".jpg"
|
|||
|
||||
let $relpath:= $files!( ancestor-or-self::*/@name=>string-join("/"))
|
||||
let $relpath:=filter($relpath,function($f){
|
||||
not(file:exists($cfg:IMAGEDIR || $f)) and file:exists($cfg:IMAGEDIR || $f)
|
||||
not(file:exists($cfg:THUMBDIR || $f))
|
||||
and file:exists($cfg:IMAGEDIR || "../" || $f)
|
||||
})
|
||||
let $todo:= $relpath=>subsequence(1, $CHUNK)
|
||||
|
||||
|
|
|
@ -5,33 +5,34 @@
|
|||
<v-btn icon to="./"><v-icon>arrow_back</v-icon></v-btn>
|
||||
<v-toolbar-title>{{ job }}</v-toolbar-title>
|
||||
|
||||
<v-btn
|
||||
@click="stop()"
|
||||
:disabled="finished"
|
||||
>Stop</v-btn>
|
||||
<v-btn
|
||||
@click="getResult()"
|
||||
:disabled="result || !finished"
|
||||
>Result</v-btn>
|
||||
<v-btn v-if="!finished" @click="stop()" :disabled="finished" >Stop</v-btn>
|
||||
<v-btn v-if="finished && !result" @click="getResult()" :disabled="result || !finished">Result</v-btn>
|
||||
<v-chip class="orange white--text">{{ jobstate.state }}</v-chip>
|
||||
<v-chip class="primary white--text">
|
||||
<v-avatar>
|
||||
|
||||
<v-chip label class="grey white--text"><v-icon class="red">lock</v-icon>{{ jobstate.writes }}</v-chip>
|
||||
<v-chip label class="grey white--text"><v-icon class="amber">lock</v-icon>{{ jobstate.reads }}</v-chip>
|
||||
<v-spacer></v-spacer>
|
||||
<v-chip class="primary white--text">
|
||||
<v-avatar>
|
||||
<v-icon>account_circle</v-icon>
|
||||
</v-avatar>
|
||||
{{ jobstate.user }}</v-chip>
|
||||
<v-chip class="primary white--text">{{ jobstate.duration }}</v-chip>
|
||||
<v-spacer></v-spacer>
|
||||
<v-chip class="green white--text">
|
||||
<v-avatar ><v-icon>timer</v-icon></v-avatar>
|
||||
{{ jobstate.duration }}</v-chip>
|
||||
<v-btn light icon :loading="loading" @click="getJob()" :disabled="loading || finished">
|
||||
<v-icon>refresh</v-icon>
|
||||
</v-btn>
|
||||
|
||||
</v-btn>
|
||||
</v-toolbar>
|
||||
|
||||
<v-card-text v-if="result">
|
||||
{{ result }}
|
||||
</v-card-text>
|
||||
|
||||
<v-card-text>
|
||||
<code>{{ jobstate.text }}</code>
|
||||
</v-card-text>
|
||||
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
|
|
|
@ -47,6 +47,8 @@
|
|||
<td class="vtop text-xs-right">{{ props.item.state }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.duration }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.type }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.writes }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.reads }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.user }}</td>
|
||||
<td class="vtop"><code>{{ props.item.text }}</code></td>
|
||||
</template>
|
||||
|
@ -66,6 +68,8 @@
|
|||
{ text: 'State', value: 'state' },
|
||||
{ text: 'Duration', value: 'duration' },
|
||||
{ text: 'Type', value: 'type' },
|
||||
{ text: 'WriteL', value: 'writes' },
|
||||
{ text: 'ReadL', value: 'reads' },
|
||||
{ text: 'User', value: 'user' },
|
||||
{ text: 'Query', value: 'text' }
|
||||
],
|
||||
|
|
|
@ -30,11 +30,11 @@ as element(json)
|
|||
{
|
||||
let $j:=jobs:list-details($job)
|
||||
return <json type="object">
|
||||
{j:job-json($j)}
|
||||
{if($j) then j:job-json($j) else ()}
|
||||
</json>
|
||||
};
|
||||
|
||||
declare function j:job-json($j)
|
||||
declare function j:job-json($j as element(job))
|
||||
as element(*)*
|
||||
{
|
||||
<id>{$j/@id/string()}</id>
|
||||
|
@ -43,4 +43,6 @@ as element(*)*
|
|||
,<user>{$j/@user/string()}</user>
|
||||
,<duration>{$j/@duration/string()}</duration>
|
||||
,<text>{$j/string()}</text>
|
||||
,<reads>{$j/@reads/string()}</reads>
|
||||
,<writes>{$j/@writes/string()}</writes>
|
||||
};
|
|
@ -1,4 +1,4 @@
|
|||
// generated 2017-08-20T13:42:15.528+01:00
|
||||
// generated 2017-08-21T11:24:21.865+01:00
|
||||
Vue.component('qd-link',{template:`
|
||||
<a :href="href" :target="href"> {{href}}<v-icon>link</v-icon></a>
|
||||
`,
|
||||
|
@ -773,10 +773,17 @@ v0.0.3 </v-card-title> </v-card> </v-flex> <v-flex xs4="">
|
|||
JobId:
|
||||
<v-chip class="green white--text">{{jobId}}</v-chip>
|
||||
<v-progress-circular v-if="waiting" indeterminate="" class="primary--text"></v-progress-circular>
|
||||
Elapsed:
|
||||
<v-chip class="green white--text">{{elapsed}}</v-chip>
|
||||
|
||||
<v-chip label="" class="grey white--text">
|
||||
<v-avatar class="red"> <v-icon>lock</v-icon>W</v-avatar>
|
||||
{{ jobState.writes }}</v-chip>
|
||||
<v-chip label="" class="grey white--text">
|
||||
<v-avatar class="amber"> <v-icon>lock</v-icon>R</v-avatar>
|
||||
{{ jobState.reads }}</v-chip>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn flat="" class="green--text darken-1">@TODO</v-btn>
|
||||
<v-chip class="green white--text">
|
||||
<v-avatar> <v-icon>timer</v-icon></v-avatar>
|
||||
{{elapsed}}ms</v-chip>
|
||||
</v-card-actions>
|
||||
<v-card-text v-if="show">
|
||||
<v-flex xs12="" style="height:200px" fill-height="">
|
||||
|
@ -792,15 +799,16 @@ v0.0.3 </v-card-title> </v-card> </v-flex> <v-flex xs4="">
|
|||
return {
|
||||
xq: '(: type your XQuery :)\n',
|
||||
result:'',
|
||||
elapsed:null,
|
||||
show:false,
|
||||
showError:false,
|
||||
jobId:null,
|
||||
waiting:false,
|
||||
start:null,
|
||||
font:'Courier',
|
||||
elapsed: null,
|
||||
show: false,
|
||||
showError: false,
|
||||
jobId: null,
|
||||
waiting: false,
|
||||
start: null,
|
||||
jobState: {},
|
||||
font: 'Courier',
|
||||
dropdown_font: [
|
||||
{ text: 'Arial' },
|
||||
{ text: 'Test select' },
|
||||
{ text: 'Calibri' },
|
||||
{ text: 'Courier' },
|
||||
{ text: 'Verdana' }
|
||||
|
@ -855,6 +863,7 @@ v0.0.3 </v-card-title> </v-card> </v-flex> <v-flex xs4="">
|
|||
this.waiting=true;
|
||||
HTTP.get("job/"+this.jobId)
|
||||
.then(r=>{
|
||||
this.jobState=r.data
|
||||
this.waiting=r.data.state!="cached";
|
||||
this.elapsed=Math.floor(performance.now() - this.start);
|
||||
if(this.waiting) {
|
||||
|
@ -873,7 +882,7 @@ v0.0.3 </v-card-title> </v-card> </v-flex> <v-flex xs4="">
|
|||
})
|
||||
},
|
||||
imports(){
|
||||
alert("imports")
|
||||
alert("@TODO imports")
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1216,27 +1225,34 @@ body
|
|||
<v-btn icon="" to="./"><v-icon>arrow_back</v-icon></v-btn>
|
||||
<v-toolbar-title>{{ job }}</v-toolbar-title>
|
||||
|
||||
<v-btn @click="stop()" :disabled="finished">Stop</v-btn>
|
||||
<v-btn @click="getResult()" :disabled="result || !finished">Result</v-btn>
|
||||
<v-btn v-if="!finished" @click="stop()" :disabled="finished">Stop</v-btn>
|
||||
<v-btn v-if="finished && !result" @click="getResult()" :disabled="result || !finished">Result</v-btn>
|
||||
<v-chip class="orange white--text">{{ jobstate.state }}</v-chip>
|
||||
<v-chip class="primary white--text">
|
||||
<v-avatar>
|
||||
|
||||
<v-chip label="" class="grey white--text"><v-icon class="red">lock</v-icon>{{ jobstate.writes }}</v-chip>
|
||||
<v-chip label="" class="grey white--text"><v-icon class="amber">lock</v-icon>{{ jobstate.reads }}</v-chip>
|
||||
<v-spacer></v-spacer>
|
||||
<v-chip class="primary white--text">
|
||||
<v-avatar>
|
||||
<v-icon>account_circle</v-icon>
|
||||
</v-avatar>
|
||||
{{ jobstate.user }}</v-chip>
|
||||
<v-chip class="primary white--text">{{ jobstate.duration }}</v-chip>
|
||||
<v-spacer></v-spacer>
|
||||
<v-chip class="green white--text">
|
||||
<v-avatar><v-icon>timer</v-icon></v-avatar>
|
||||
{{ jobstate.duration }}</v-chip>
|
||||
<v-btn light="" icon="" :loading="loading" @click="getJob()" :disabled="loading || finished">
|
||||
<v-icon>refresh</v-icon>
|
||||
</v-btn>
|
||||
|
||||
</v-btn>
|
||||
</v-toolbar>
|
||||
|
||||
<v-card-text v-if="result">
|
||||
{{ result }}
|
||||
</v-card-text>
|
||||
|
||||
<v-card-text>
|
||||
<code>{{ jobstate.text }}</code>
|
||||
</v-card-text>
|
||||
|
||||
</v-card>
|
||||
`,
|
||||
|
||||
|
@ -1303,6 +1319,8 @@ body
|
|||
<td class="vtop text-xs-right">{{ props.item.state }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.duration }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.type }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.writes }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.reads }}</td>
|
||||
<td class="vtop text-xs-right">{{ props.item.user }}</td>
|
||||
<td class="vtop"><code>{{ props.item.text }}</code></td>
|
||||
</template>
|
||||
|
@ -1321,6 +1339,8 @@ body
|
|||
{ text: 'State', value: 'state' },
|
||||
{ text: 'Duration', value: 'duration' },
|
||||
{ text: 'Type', value: 'type' },
|
||||
{ text: 'WriteL', value: 'writes' },
|
||||
{ text: 'ReadL', value: 'reads' },
|
||||
{ text: 'User', value: 'user' },
|
||||
{ text: 'Query', value: 'text' }
|
||||
],
|
||||
|
|
Loading…
Add table
Reference in a new issue