git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Thu, 9 Sep 2021 15:03:04 +0000 (15:03 +0000)
committervasary.daniel <TFS\vasary.daniel>
Thu, 9 Sep 2021 15:03:04 +0000 (15:03 +0000)
server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java
server/user.mediacube.gui/js/metadatadetails.js [new file with mode: 0644]
server/user.mediacube.gui/pages/edithistory.zul
server/user.mediacube.gui/pages/metadatadetails.zul
server/user.mediacube.gui/pages/searchitems/results.zul
server/user.mediacube.gui/src/user/jobengine/zk/model/MetadataDetailsModel.java

index 99252c3672d9dcfc667f19581ebc822869d0aa49..a8f27c1d8bc3ee22ceda0f029d944289f1da36c4 100644 (file)
@@ -27,7 +27,8 @@ public class MediaFinder implements IMediaFinder {
                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
@@ -38,9 +39,12 @@ public class MediaFinder implements IMediaFinder {
                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
@@ -80,10 +84,10 @@ public class MediaFinder implements IMediaFinder {
                }\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
@@ -101,7 +105,8 @@ public class MediaFinder implements IMediaFinder {
 \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
@@ -160,7 +165,8 @@ public class MediaFinder implements IMediaFinder {
                                        }\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
@@ -188,6 +194,8 @@ public class MediaFinder implements IMediaFinder {
                                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
diff --git a/server/user.mediacube.gui/js/metadatadetails.js b/server/user.mediacube.gui/js/metadatadetails.js
new file mode 100644 (file)
index 0000000..67e41a7
--- /dev/null
@@ -0,0 +1,34 @@
+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
index eb642e48bc3ed797bea0fde693a8c50536ef605d..c9f8047936c4f36a14206ba0acdb110b4b3fca77 100644 (file)
@@ -1,5 +1,6 @@
 <?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
index c4a03fe6546406a98ce1f6af80cc5c7c9079c0e3..988ec810f489b800c9b4097b40a07c5222a75985 100644 (file)
@@ -1,13 +1,52 @@
-<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 &lt; 10)\r
+                               tc.h = "0" + tc.h;\r
+                       if (tc.m &lt; 10)\r
+                               tc.m = "0" + tc.m;\r
+                       if (tc.s &lt; 10)\r
+                               tc.s = "0" + tc.s;\r
+                       if (tc.f &lt; 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
index 48146dea20c5555fdfd9705b0a134c9fd8f06a53..39d3b80d113b574f01017f58c5df93a3d9af59a3 100644 (file)
@@ -43,7 +43,7 @@
                                        <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
index 70bcf659fda9251377c8bf414dccd7645b17dcb2..d82a45ecbfb8558c353e35d07d9b694cf98dfe4e 100644 (file)
@@ -203,6 +203,7 @@ public class MetadataDetailsModel extends BaseModel {
 \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