this.manager = manager;\r
}\r
\r
- private PreparedStatement createStatement(Connection connection, String criteria, SearchOptions options) throws Exception {\r
+ private PreparedStatement createStatement(Connection connection, String criteria, SearchOptions options)\r
+ throws Exception {\r
String criteriasPattern = getCriteriasRegexPattern(criteria);\r
\r
StringBuilder sql = new StringBuilder();\r
sql.append("m.title mediatitle,");\r
sql.append("m.archived,");\r
sql.append("m.creation,");\r
+ sql.append("m.created,");\r
+ sql.append("m.modified,");\r
sql.append("m.length,");\r
sql.append("m.itemtypeid mediaitemtypeid,");\r
- sql.append(String.format("HIGHLIGHT(md.description, '<span class=''rhl''>', '</span>', '%s') description,", criteriasPattern));\r
+ sql.append(String.format("HIGHLIGHT(md.description, '<span class=''rhl''>', '</span>', '%s') description,",\r
+ criteriasPattern));\r
sql.append("it.name mediaitemtypename,");\r
sql.append("m.houseid mediahouseid,");\r
sql.append("mf.houseid mediafilehouseid,");\r
}\r
\r
if (options.getFrom() != null)\r
- sql.append(String.format(" AND m.archived > '%s'", df.format(options.getFrom())));\r
+ sql.append(String.format(" AND m.creation > '%s'", df.format(options.getFrom())));\r
\r
if (options.getTo() != null)\r
- sql.append(String.format(" AND m.archived < '%s'", df.format(options.getTo())));\r
+ sql.append(String.format(" AND m.creation < '%s'", df.format(options.getTo())));\r
\r
if (options.isMissingProxy())\r
sql.append(" AND vw_mf.mediafilecount=1");\r
\r
String query = sql.toString();\r
logger.info(query);\r
- PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
+ PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE,\r
+ ResultSet.CONCUR_UPDATABLE);\r
\r
// Ettol elszall a 11.5-on a kereses\r
// if (criteria != null && criteria.trim().length() > 0) {\r
}\r
} else {\r
if (result.getItemCount() > 0) {\r
- throw new Exception("Invalid searchResult 'from' position: " + options.getFromResult() + " total records: " + result.getItemCount());\r
+ throw new Exception("Invalid searchResult 'from' position: " + options.getFromResult()\r
+ + " total records: " + result.getItemCount());\r
}\r
}\r
} else {\r
media.setTitle(rs.getString("mediatitle"));\r
media.setHouseId(rs.getString("mediahouseid"));\r
media.setCreation(rs.getTimestamp("creation"));\r
+ media.setCreated(rs.getTimestamp("created"));\r
+ media.setModified(rs.getTimestamp("modified"));\r
media.setArchived(rs.getTimestamp("archived"));\r
media.setLength(rs.getLong("length"));\r
media.setMediaFilesCount(rs.getInt("mediafilecount"));\r
--- /dev/null
+if ('webkitSpeechRecognition' in window) {\r
+ console.log('speech recognition API supported')\r
+} else {\r
+ console.log('speech recognition API not supported')\r
+}\r
+\r
+function updateTC() {\r
+ var tcval = zk.$('$tc').getValue()._value;\r
+ var tc = framesToSMPTE(tcval);\r
+ console.log(tc);\r
+ zk.$('$tcf').setValue(tcToStr(tc));\r
+}\r
+\r
+function tcToStr(tc) {\r
+ return tc.h + ":" + tc.m + ":" + tc.s + ":" + tc.f;\r
+}\r
+\r
+function framesToSMPTE(frames) {\r
+\r
+ var frameRate = 25;\r
+ var reminder = frames;\r
+ \r
+ var h = Math.floor(reminder / (60 * 60 * frameRate));\r
+ reminder = reminder % (60 * 60 * frameRate);\r
+ \r
+ var m = Math.floor(reminder / (60 * frameRate));\r
+ reminder = reminder % (60 * frameRate);\r
+ \r
+ var s = Math.floor(reminder / frameRate);\r
+ reminder = reminder % frameRate;\r
+ \r
+ var f = reminder;\r
+ return {h: h, m: m, s: s, f: f};\r
+}\r
<?xml version="1.0" encoding="UTF-8"?>\r
<zk xmlns="http://www.zkoss.org/2005/zul">\r
+\r
<vlayout hflex="1" vflex="1" viewModel="@id('vm') @init('user.jobengine.zk.model.EditHistoryModel')">\r
<hbox height="40px" align="center">\r
<button iconSclass="z-icon-arrow-left" onClick="@command('monthDown')"/>\r
</template>\r
</rows>\r
</grid>\r
+ <grid model="@load(vm.dataList)" vflex="true" hflex="true" emptyMessage="Nincs adat!">\r
+ <columns sizable="true">\r
+ <column forEach="${vm.columnList}" label="${each.label}" sort="auto(${each.name})"></column>\r
+ </columns>\r
+ <rows>\r
+ <template name="model" var="r">\r
+ <row>\r
+ <label forEach="${vm.columnList}" value="${r.get(each.name)}"></label>\r
+ </row>\r
+ </template>\r
+ </rows>\r
+ </grid>\r
</vlayout>\r
\r
</zk>
\ No newline at end of file
-<zk xmlns:w="client">\r
+<zk xmlns:c="client" xmlns:h="xhtml">\r
<window id="metadataEditorWnd" title="Leírás szerkesztése" width="50%" height="50%" mode="overlapped" closable="true" maximizable="true" minimizable="false"\r
sizable="true" position="left,top" viewModel="@id('vm') @init('user.jobengine.zk.model.MetadataDetailsModel')" forward="onCancel=closeButton.onClick">\r
+ \r
+ <script>\r
+ if ('webkitSpeechRecognition' in window) {\r
+ console.log('speech recognition API supported')\r
+ } else {\r
+ console.log('speech recognition API not supported')\r
+ }\r
+ \r
+ function updateTC() {\r
+ var tcval = zk.$('$tc').getValue()._value;\r
+ var tc = framesToSMPTE(tcval);\r
+ console.log(tc);\r
+ zk.$('$tcf').setValue(tcToStr(tc));\r
+ }\r
+ \r
+ function tcToStr(tc) {\r
+ if (tc.h < 10)\r
+ tc.h = "0" + tc.h;\r
+ if (tc.m < 10)\r
+ tc.m = "0" + tc.m;\r
+ if (tc.s < 10)\r
+ tc.s = "0" + tc.s;\r
+ if (tc.f < 10)\r
+ tc.f = "0" + tc.f;\r
+ return tc.h + ":" + tc.m + ":" + tc.s + ":" + tc.f;\r
+ }\r
+ \r
+ function framesToSMPTE(frames) {\r
+ \r
+ var frameRate = 25;\r
+ var reminder = frames;\r
+ \r
+ var h = Math.floor(reminder / (60 * 60 * frameRate));\r
+ reminder = reminder % (60 * 60 * frameRate);\r
+ \r
+ var m = Math.floor(reminder / (60 * frameRate));\r
+ reminder = reminder % (60 * frameRate);\r
+ \r
+ var s = Math.floor(reminder / frameRate);\r
+ reminder = reminder % frameRate;\r
+ \r
+ var f = reminder;\r
+ return {h: h, m: m, s: s, f: f};\r
+ }\r
+ </script>\r
\r
-<!-- <script type="text/javascript" src="/js/jquery.maskedinput.min.js" /> -->\r
-<!-- <script type="text/javascript"> -->\r
-\r
-<!-- $.mask.definitions['a']='[012]'; -->\r
-<!-- $.mask.definitions['b']='[0123]'; -->\r
-<!-- </script> -->\r
<vlayout height="100%">\r
<tabbox id="pagesTab" vflex="true" hflex="true" orient="top">\r
<tabs visible="true">\r
<listitem id="media_length">\r
<listcell label="Média hossz" />\r
<listcell>\r
-<!-- <textbox value="@load(vm.dataSource.mediaLength) @save(vm.dataSource.mediaLength,before='save') @converter('user.jobengine.zk.model.TCConverter')" constraint="/^([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d):([0-1]\d|2[0-4])$/: Timecode formátum kötelező (HH:MM:SS:FF)!" w:onBind="jq(this).mask('[0-2][0-3]:[0-5]9:[0-5]9:[0-2][0-4]');"/> -->\r
- <longbox constraint="no empty, no negative" value="@load(vm.dataSource.mediaLength) @save(vm.dataSource.mediaLength,before='save')"/>\r
+<!-- <textbox value="@load(vm.dataSource.mediaLength) @save(vm.dataSource.mediaLength,before='save') @converter('user.jobengine.zk.model.TCConverter')" constraint="/^([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d):([0-1]\d|2[0-4])$/: Timecode formátum kötelező (HH:MM:SS:FF)!" c:onBind="jq(this).mask('[0-2][0-3]:[0-5]9:[0-5]9:[0-2][0-4]');"/> -->\r
+ <hbox>\r
+ <longbox id="tc" constraint="no empty, no negative" value="@load(vm.dataSource.mediaLength) @save(vm.dataSource.mediaLength,before='save')"\r
+ c:onBind="updateTC()" c:onChange="updateTC()" instant="true">\r
+ </longbox>\r
+ \r
+ <label id="tcf" value="00:00:00.00"/>\r
+ </hbox> \r
</listcell>\r
</listitem>\r
\r
<button id="closeButton" label="Mégse" onClick="@command('close')" />\r
</div>\r
</vlayout>\r
- <!-- \r
- <h:script defer="true">\r
- var text = document.getElementById("media_description"); \r
- \r
- function setDescription(val) {\r
- text.value = val;\r
- }\r
- \r
- // https://stackoverflow.com/questions/454202/creating-a-textarea-with-auto-resize\r
- var observe;\r
- if (window.attachEvent) {\r
- observe = function (element, event, handler) {\r
- element.attachEvent('on'+event, handler);\r
- };\r
- }\r
- else {\r
- observe = function (element, event, handler) {\r
- element.addEventListener(event, handler, false);\r
- };\r
- } \r
- \r
- \r
- function resize() {\r
- text.style.height = 'auto';\r
- text.style.height = text.scrollHeight + 10 + 'px';\r
- }\r
- \r
- function delayedResize() {\r
- window.setTimeout(resize(), 0);\r
- }\r
- \r
- \r
- observe(text, 'change', delayedResize);\r
- observe(text, 'cut', delayedResize);\r
- observe(text, 'paste', delayedResize);\r
- observe(text, 'drop', delayedResize);\r
- observe(text, 'keydown', delayedResize);\r
- \r
- \r
- \r
- text.focus();\r
- text.select();\r
- resize();\r
- \r
- </h:script>\r
- -->\r
</window>\r
</zk>
\ No newline at end of file
<checkbox checked="@save(vm.itemSelected) @validator(vm.itemSelectedValidator, arg=each)" />\r
<label value="@load(each.media.houseId)" />\r
<label value="@load(each.media.title)" />\r
- <label value="@load(each.media.mediaFileRealName)" />\r
+ <label value="@load(each.media.mediaFileRealName)" />\r
<label style="font-size: 10px;" value="@load(each.media.archived) @converter('user.jobengine.zk.model.ShortDateConverter')" />\r
<cell>\r
<vlayout>\r
style="margin-left:4px;margin-top:2px;vertical-align:top;">\r
<attribute name="visible" if="${each.media.mediaFilesCount gt 1}">false</attribute>\r
</image>\r
+ <image src="/img/baseline_arrow_back_black_18dp.png"\r
+ style="margin-left:4px;margin-top:2px;vertical-align:top;"\r
+ visible="@load(!each.media.created.equals(each.media.modified))">\r
+ </image>\r
</hlayout>\r
</vlayout>\r
</cell>\r
\r
if (normalizeChanges()) {\r
logger.info("Metadata is modified: {}", archivedMedia.getMedia().getId());\r
+ archivedMedia.getMedia().setModified(new Timestamp(System.currentTimeMillis()));\r
manager.modify(archivedMedia.getMedia());\r
insertHistory(diffInsert);\r
}\r