git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Wed, 9 Dec 2020 20:37:18 +0000 (20:37 +0000)
committervasary.daniel <TFS\vasary.daniel>
Wed, 9 Dec 2020 20:37:18 +0000 (20:37 +0000)
18 files changed:
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java
server/user.jobengine.executors/jobtemplates/mediavivantis/archive-limited.xml
server/user.jobengine.executors/mediavivantis/user/jobengine/server/steps/ArchiveRecursive.java
server/user.jobengine.executors/mediavivantis/user/jobengine/server/steps/CreateMissingLowresStep.java [moved from server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java with 100% similarity]
server/user.jobengine.executors/mediavivantis/user/jobengine/server/steps/TSMSimpleRestoreStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java
server/user.jobengine.osgi.commons/src/user/commons/mediatool/Timecode.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.mediacube.gui/WEB-INF/zk.xml
server/user.mediacube.gui/pages/joblistwnd.zul [new file with mode: 0644]
server/user.mediacube.gui/pages/menu.zul
server/user.mediacube.gui/pages/searchitems.zul
server/user.mediacube.gui/src/user/jobengine/zk/model/SearchModel.java
server/user.mediacube.gui/src/user/jobengine/zk/model/TCConverter.java
server/user.mediacube.gui/src/user/jobengine/zk/util/LifeCycleListener.java

index fe9a0a14c2be9aca2eca04db2f5c20fa807fd320..26e8dd0b6a4e02772f93eb68f29a55f17f41b7a7 100644 (file)
@@ -44,6 +44,8 @@ import com.ibm.nosql.json.api.BasicDBList;
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
 import groovy.lang.GroovyClassLoader;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.server.steps.ArchiveItem;\r
 import user.jobengine.server.steps.EscortFiles;\r
@@ -1007,4 +1009,13 @@ public class SmallTests {
                assertFalse(catched.toFile().exists());\r
                assertFalse(EscortFiles.isMediaCatched(sut));\r
        }\r
+\r
+       @Test\r
+       public void test9998() throws Exception {\r
+               Long x = 35739L;\r
+               Timecode sut = new Timecode(x, Type.PAL);\r
+\r
+               System.out.println(sut.toString());\r
+       }\r
+\r
 }\r
index 8353b0c654fdc9cb3d9cc48e243a979d873bdb07..cf1a24699c637d87f41b9a4b37048ece5dd5c649 100644 (file)
@@ -11,7 +11,7 @@
                </variables>\r
        </declarations>\r
        <commands>\r
-               <calljobstep id="step1" type="user.jobengine.server.steps.ArchiveListBuilderStep" weight="1">\r
+               <calljobstep id="step1" type="ArchiveListBuilderStep.java" weight="1">\r
                        <inputs>\r
                                <input>\r
                                        <parameter name="sourcePath" />\r
@@ -27,7 +27,7 @@
                        </outputs>\r
                </calljobstep>\r
 \r
-               <calljobstep id="step2" type="user.jobengine.server.steps.ArchiveMaterialSubmitStep" weight="1">\r
+               <calljobstep id="step2" type="ArchiveMaterialSubmitStep.java" weight="1">\r
                        <inputs>\r
                                <input>\r
                                        <variable name="archiveList" />\r
index 7e507404438b3272d958a19f1d5203508ea44d37..6a65d5fa85489c10148204980deb0a6d0e0d0790 100644 (file)
@@ -8,15 +8,10 @@ import java.nio.file.Files;
 import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
 import java.nio.file.attribute.BasicFileAttributes;\r
-import java.nio.file.attribute.FileAttribute;\r
-import java.nio.file.attribute.PosixFilePermission;\r
-import java.nio.file.attribute.PosixFilePermissions;\r
 import java.text.SimpleDateFormat;\r
 import java.util.Arrays;\r
-import java.util.Date;\r
 import java.util.List;\r
 import java.util.Map;\r
-import java.util.Set;\r
 \r
 import org.apache.commons.io.FilenameUtils;\r
 import org.apache.commons.lang.StringUtils;\r
@@ -49,11 +44,9 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        private static final String ARCHIVE = "Archiválás";\r
        private static final String ARCHIVE_ITEM = "archiveItem";\r
        private static final String KILL_DATE_DAYS = "killDateDays";\r
-       private static final String CONFLICT = ".CONFLICT";\r
        private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
-       private String sourcePath;\r
 \r
-       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "Transfered", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
+       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
        private int limit;\r
        private int submitted;\r
        private int killDateDays;\r
@@ -118,14 +111,21 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(String sourcePath, int killDateDays, int limit) {\r
-               this.sourcePath = sourcePath;\r
+       public Object[] execute(String sourcePath, int killDateDays, int limit) throws Exception {\r
                this.killDateDays = killDateDays;\r
                this.limit = limit;\r
                try {\r
-                       Files.walkFileTree(Paths.get(sourcePath), this);\r
+                       if (getJobRuntime().forkPrepare()) {\r
+                               Files.walkFileTree(Paths.get(sourcePath), this);\r
+                       }\r
                } catch (Exception e) {\r
                        logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+               } finally {\r
+                       if (submitted > 0)\r
+                               getJobRuntime().forkWaitComplete();\r
+                       else\r
+                               getJobRuntime().cancelForkPrepare();\r
+\r
                }\r
                return null;\r
        }\r
@@ -169,37 +169,40 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                return result;\r
        }\r
 \r
-       private boolean handleArchiveConflict(Path sourcePath) throws Exception {\r
+       private boolean handleArchiveConflict(Path mediaPath) throws Exception {\r
                boolean result = false;\r
-               String sourceFileName = sourcePath.getFileName().toString();\r
+               String sourceFileName = mediaPath.getFileName().toString();\r
                if (getManager().isMediaFileExists(sourceFileName)) {\r
-                       try {\r
-                               Path parent = sourcePath.getParent();\r
-                               Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
-                               File folder = conflictPath.toFile();\r
-                               if (!folder.exists() || !folder.isDirectory()) {\r
-                                       Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
-                                       FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
-                                       try {\r
-                                               Files.createDirectories(conflictPath, attr);\r
-                                       } catch (Exception e) {\r
-                                               try {\r
-                                                       Files.createDirectory(conflictPath);\r
-                                               } catch (Exception e1) {\r
-                                                       logger.catching(e);\r
-                                                       throw e;\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               Path conflictFile = Paths.get(conflictPath.toString(), sourceFileName);\r
-                               if (conflictFile.toFile().exists())\r
-                                       conflictFile = Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime());\r
-                               Files.move(sourcePath, conflictFile);\r
-                               result = true;\r
-                       } catch (Exception e1) {\r
-                               logger.error(getSessionMarker(), "Hiba az '{}' állomány mappába mozgatásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
-                       }\r
+                       EscortFiles.createMediaCatch(mediaPath);\r
+                       result = true;\r
+\r
+                       //                      try {\r
+                       //                              Path parent = sourcePath.getParent();\r
+                       //                              Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
+                       //                              File folder = conflictPath.toFile();\r
+                       //                              if (!folder.exists() || !folder.isDirectory()) {\r
+                       //                                      Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
+                       //                                      FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
+                       //                                      try {\r
+                       //                                              Files.createDirectories(conflictPath, attr);\r
+                       //                                      } catch (Exception e) {\r
+                       //                                              try {\r
+                       //                                                      Files.createDirectory(conflictPath);\r
+                       //                                              } catch (Exception e1) {\r
+                       //                                                      logger.catching(e);\r
+                       //                                                      throw e;\r
+                       //                                              }\r
+                       //                                      }\r
+                       //                              }\r
+                       //\r
+                       //                              Path conflictFile = Paths.get(conflictPath.toString(), sourceFileName);\r
+                       //                              if (conflictFile.toFile().exists())\r
+                       //                                      conflictFile = Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime());\r
+                       //                              Files.move(sourcePath, conflictFile);\r
+                       //                              result = true;\r
+                       //                      } catch (Exception e1) {\r
+                       //                              logger.error(getSessionMarker(), "Hiba az '{}' állomány mappába mozgatásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
+                       //                      }\r
                }\r
 \r
                return result;\r
@@ -213,11 +216,11 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        @Override\r
        public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
                Path dirName = dir.getFileName();\r
+               logger.info("PreVisit {}", dir);\r
 \r
-               if (skipPathNames.contains(dirName.toString())) {\r
-                       //logger.info("Skipping {}", dir);\r
+               if (skipPathNames.contains(dirName.toString()))\r
                        return FileVisitResult.SKIP_SUBTREE;\r
-               else\r
+               else\r
                        logger.info("PreVisit {}", dir);\r
 \r
                return FileVisitResult.CONTINUE;\r
@@ -227,6 +230,12 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                if (submitted == limit)\r
                        return false;\r
 \r
+               //              if (!"Transfered".equals(mediaPath.getParent().getFileName().toString()))\r
+               //                      return false;\r
+\r
+               if (mediaPath.getFileName().toString().startsWith("."))\r
+                       return false;\r
+\r
                File mediaFile = mediaPath.toFile();\r
                if (mediaFile.isDirectory())\r
                        return false;\r
@@ -234,10 +243,10 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                if (EscortFiles.isMediaCatched(mediaPath))\r
                        return false;\r
 \r
-               if (!canReadMediaInfo(mediaPath))\r
+               if (handleArchiveConflict(mediaPath))\r
                        return false;\r
 \r
-               if (handleArchiveConflict(mediaPath))\r
+               if (!canReadMediaInfo(mediaPath))\r
                        return false;\r
 \r
                ArchiveItem archiveItem = createArchiveItem(mediaPath);\r
@@ -247,13 +256,13 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                        submitted++;\r
 \r
                        Map<String, Object> parameters = ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays);\r
-                       IJobRuntime runtime = getEngine().submit(null, e -> {\r
+                       IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
                                if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
                                        EscortFiles.removeMediaCatch(mediaPath);\r
                        }, JOBTEMPLATE, ARCHIVE, 1, IJobEngine.DEFAULT_OWNER, parameters);\r
                        if (runtime == null)\r
                                throw new Exception("Submit returned null runtime");\r
-\r
+                       runtime.setRelated(mediaPath.toString());\r
                        EscortFiles.createMediaCatch(mediaPath);\r
                } catch (Exception e) {\r
                        String fileName = new File(archiveItem.getMediaFile()).getName();\r
index f8c2eebc63fe3b97215eee94070ca5b8ec74eb4e..ba63212c4459516ab04c723a1399163ee2ba46bd 100644 (file)
@@ -7,6 +7,8 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 \r
 import user.commons.StoreUri;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
 import user.commons.remotestore.IProgressEventListener;\r
 import user.commons.remotestore.IStatusEventListener;\r
 import user.commons.remotestore.ProgressEvent;\r
@@ -26,7 +28,8 @@ public class TSMSimpleRestoreStep extends JobStep {
                        Media media = getManager().getMedia(mediaId);\r
                        MediaFile mediaFile = getManager().getSystemMediaFile(media);\r
                        fileName = mediaFile.getRelativePath();\r
-                       getJobRuntime().setDescription(String.format("%s (%d frames)", fileName, media.getLength()));\r
+                       Timecode timecode = new Timecode(media.getLength(), Type.PAL);\r
+                       getJobRuntime().setDescription(String.format("%s (%s)", fileName, timecode.toString()));\r
                        Store tsmStore = getManager().getSystemStore(false);\r
                        StoreUri sourceStoreUri = getManager().getStoreUri(tsmStore.getName(), RemoteStoreProtocol.TSM);\r
                        sourceStoreUri.addProgressListener(new IProgressEventListener() {\r
index cce5921f87a18848c20f7bca84259f1841f48b17..077ce60ddf6751817f5e554ff6afb72b2b8c0048 100644 (file)
@@ -98,7 +98,7 @@ public class EscortFiles {
         */\r
        public static void createMediaCatch(Path mediaFile) throws IOException {\r
                Path catchedFile = createMediaCathFilePath(mediaFile);\r
-               ensureUNCFolder(mediaFile.getParent());\r
+               ensureUNCFolder(catchedFile.getParent());\r
                Files.createFile(catchedFile);\r
        }\r
 \r
index b16fc1a3eaeae391873f687234875dfa6a91ee54..60adc6611b6331c9c8255ed5d3a89faf5bd5ca88 100644 (file)
@@ -17,6 +17,8 @@ import org.apache.logging.log4j.message.ParameterizedMessage;
 \r
 import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
 import user.commons.remotestore.IProgressEventListener;\r
 import user.commons.remotestore.IStatusEventListener;\r
 import user.commons.remotestore.ProgressEvent;\r
@@ -47,13 +49,13 @@ public class TSMBackupStep extends JobStep {
 \r
                File sourceMediaFile = new File(archiveItem.getMediaFile());\r
                String sourceFileName = sourceMediaFile.getName();\r
-               String details = String.format("%s (%d bytes)", sourceFileName, sourceMediaFile.length());\r
+               Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
+               String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length());\r
+               getJobRuntime().setDescription(details);\r
                try {\r
 \r
                        setAndCheck(archiveItem, mediaCubeMedia, getEngine());\r
 \r
-                       getJobRuntime().setDescription(details);\r
-\r
                        //TODO mxf helyett az osszes kiterjesztest!!!!!\r
                        //A dupla ellenorzes a napon beluli ismetlesek miatt kell\r
                        long existingMediaId = archiveItem.getExistingMediaId();\r
index a9589e01f56acef9938a2976e8dbd9d3b63bedcf..5b4100550ee4f4a8896aed2991e8011220c1a3ea 100644 (file)
@@ -13,6 +13,8 @@ import org.apache.logging.log4j.message.Message;
 import user.commons.LogUtils;\r
 import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
 import user.commons.remotestore.IProgressEventListener;\r
 import user.commons.remotestore.IStatusEventListener;\r
 import user.commons.remotestore.ProgressEvent;\r
@@ -58,8 +60,9 @@ public class TSMRestoreStep extends JobStep {
                marker = jobRuntime.getSessionMarker();\r
                setAndCheck(mediaCubeMedia, targetPath, targetNamePattern, localRetrievePath, globalRetrievePath, jobEngine);\r
                String targetFileName = String.format(targetNamePattern, sourceFileName);\r
+               Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
                try {\r
-                       String details = String.format("%s (%d frames)", sourceFileName, mediaCubeMedia.getLength());\r
+                       String details = String.format("%s (%s)", sourceFileName, timecode.toString());\r
                        jobRuntime.setDescription(details);\r
                        beforeRestore(targetUri, targetNamePattern);\r
                        final IJobRuntime runtime = jobRuntime;\r
index 5b3907d4d6267d01b039e69d43e8a236b897563c..a73ff663a339f832b453e9fcaa5623dda6ecae9d 100644 (file)
@@ -16,6 +16,8 @@ import org.apache.logging.log4j.message.ParameterizedMessage;
 import user.commons.FFAStransAPI;\r
 import user.commons.IFFAStransAPI;\r
 import user.commons.StoreUri;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
 import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.FileType;\r
 import user.jobengine.db.IItemManager;\r
@@ -54,7 +56,9 @@ public class TranscodeFFAStranStep extends JobStep {
                File sourceMediaFile = new File(archiveItem.getMediaFile());\r
                logger.info("Transcoding {}", archiveItem.getMediaFile());\r
                String sourceFileName = sourceMediaFile.getName();\r
-               String details = String.format("%s (%d bytes)", sourceFileName, sourceMediaFile.length());\r
+               Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
+\r
+               String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length());\r
 \r
                StoreUri storeUri = store.getTargetStoreUri(RemoteStoreProtocol.LOCAL);\r
                if (storeUri == null)\r
index 1d0b192501c70479ff132d03a34ee9899ff7e9b6..207d2b84d0e239692f962a3aa85b952a4751b333 100644 (file)
@@ -95,6 +95,10 @@ public class Timecode {
                setFrames(frame);\r
        }\r
 \r
+       public Timecode(long frames, Type type) {\r
+               this((int) frames, type);\r
+       }\r
+\r
        /** Creates a new CD timecode based on a string in the form HH:MM:SS:FF */\r
        public Timecode(String timecode) throws Timecode.TimecodeException {\r
                this(timecode, Type.CD);\r
index 4578e9408339fa29adeb2a6f82d91c559e2e3f3c..14d6d51ab65c996fbf1f182b457dd32292b93022 100644 (file)
@@ -876,6 +876,7 @@ public class JobEngine implements IJobEngine {
        public void removeJobChangedEventListener(IJobChangedListener listener) {
                if (listener != null) {
                        jobChangedListenerList.remove(listener);
+                       logger.info("Listeners left {}", jobChangedListenerList.size());
                }
        }
 
index b327879705ae93155090e51330223e0f5754c3ef..4594df9d0eef78f83843adb42f739b7a21872f44 100644 (file)
@@ -45,9 +45,9 @@ https://www.zkoss.org/wiki/ZK_Configuration_Reference/zk.xml
 <!--   <listener> -->\r
 <!--           <listener-class>user.jobengine.zk.util.WebAppCleanupListener</listener-class> -->\r
 <!--   </listener> -->\r
-<!--   <listener> -->\r
-<!--           <listener-class>user.jobengine.zk.util.LifeCycleListener</listener-class> -->\r
-<!--   </listener> -->\r
+       <listener>\r
+               <listener-class>user.jobengine.zk.util.LifeCycleListener</listener-class>\r
+       </listener>\r
 <!--   <listener> -->\r
 <!--           <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class> -->\r
 <!--   </listener> -->\r
diff --git a/server/user.mediacube.gui/pages/joblistwnd.zul b/server/user.mediacube.gui/pages/joblistwnd.zul
new file mode 100644 (file)
index 0000000..2506203
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?init class="user.jobengine.zk.util.AuthInitiator"?>\r
+<window id="joblistwnd" title="Folyamatok" width="50%" height="50%" mode="overlapped" closable="true" maximizable="true" minimizable="true" sizable="true" position="center,top" >\r
+       <include src="/pages/joblist.zul" />\r
+</window>\r
index 9586f5bb5f21304998ad49bef43aa6203373c043..d7319ed18df94692fcb741d6bdaaec3f0201252f 100644 (file)
@@ -73,6 +73,7 @@
                                        <menuitem sclass="rozsda" label="${labels.menu_version}" href="/resource/help.html" target="_blank" />\r
                                </menupopup>\r
                        </menu>\r
+                       <menuitem sclass="whitemenu" label="Mini monitor" onClick="@global-command('createFloatingJobMonitor')" />\r
 \r
                        <menuitem id="basketIMenuItem" image="/img/ic_shopping_cart_black_24dp.png" sclass="whitemenu" style="float: right" label="@load(lm.basketMenuLabel)" onClick="@command('showBasket')" disabled="false" />\r
                        <menuitem sclass="whitemenu" style="float: right" label="Kilépés" onClick="@command('doLogout')" disabled="false" />\r
index 4be9d5651ae06cec42d374a0b2797f323e7d8bfe..601ed57b34ef1a8166f92cb0b83aff9a26b9c050 100644 (file)
@@ -67,5 +67,8 @@
                                </borderlayout>\r
                        </center>\r
                </borderlayout>\r
+               \r
+<!-- <window title="My Overlapped" width="300px" mode="overlapped" closable="true" maximizable="true" minimizable="true" > -->\r
+<!-- </window>          -->\r
        </div>\r
 </zk>
\ No newline at end of file
index e610c70aef3d755ee52152779b418c8d3353d0b7..cbf328111a63cc25ec26f59e61aa4790ed3c4978 100644 (file)
@@ -28,6 +28,7 @@ import org.zkoss.bind.annotation.BindingParam;
 import org.zkoss.bind.annotation.Command;\r
 import org.zkoss.bind.annotation.ContextParam;\r
 import org.zkoss.bind.annotation.ContextType;\r
+import org.zkoss.bind.annotation.GlobalCommand;\r
 import org.zkoss.bind.annotation.NotifyChange;\r
 import org.zkoss.json.JSONObject;\r
 import org.zkoss.zk.ui.Component;\r
@@ -266,6 +267,12 @@ public class SearchModel extends AsyncBaseModel {
                Executions.getCurrent().sendRedirect(email);\r
        }\r
 \r
+       @GlobalCommand\r
+       public void createFloatingJobMonitor() {\r
+               Window window = (Window) Executions.createComponents("/pages/joblistwnd.zul", null, null);\r
+               window.doOverlapped();\r
+       }\r
+\r
        @Command\r
        public void createLowres() {\r
                IJobEngine jobEngine = ComponentBinder.getJobEngine();\r
@@ -1104,4 +1111,5 @@ public class SearchModel extends AsyncBaseModel {
                });\r
                timer.start();\r
        }\r
+\r
 }\r
index afe7f62f704a57b23d4c25ff1dce2f8fea2cb07a..68d6290b3906649f8246b0c6e8cd491a0dc67809 100644 (file)
@@ -4,6 +4,9 @@ import org.zkoss.bind.BindContext;
 import org.zkoss.bind.Converter;\r
 import org.zkoss.zul.Label;\r
 \r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
+\r
 public class TCConverter implements Converter<String, Long, Label> {\r
 \r
        @Override\r
@@ -13,15 +16,18 @@ public class TCConverter implements Converter<String, Long, Label> {
 \r
        @Override\r
        public String coerceToUi(Long frames, Label label, BindContext context) {\r
-               double reminder = frames;\r
-               int hour = (int) Math.floor(reminder / (60 * 60 * 25));\r
-               reminder = reminder % (60 * 60 * 25);\r
-               int minute = (int) Math.floor(reminder / (60 * 25));\r
-               reminder = reminder % (60 * 25);\r
-               int sec = (int) Math.floor(reminder / 25);\r
-               reminder = reminder % 25;\r
-               int frame = (int) Math.floor(reminder);\r
-               return String.format("%02d:%02d:%02d:%02d", hour, minute, sec, frame);\r
+               //kell a konverzio, mert egyebkent float-ra cast-ol es rosszul szamol\r
+               Timecode timecode = new Timecode(frames, Type.PAL);\r
+               return timecode.toString();\r
+               //              double reminder = frames;\r
+               //              int hour = (int) Math.floor(reminder / (60 * 60 * 25));\r
+               //              reminder = reminder % (60 * 60 * 25);\r
+               //              int minute = (int) Math.floor(reminder / (60 * 25));\r
+               //              reminder = reminder % (60 * 25);\r
+               //              int sec = (int) Math.floor(reminder / 25);\r
+               //              reminder = reminder % 25;\r
+               //              int frame = (int) Math.floor(reminder);\r
+               //              return String.format("%02d:%02d:%02d:%02d", hour, minute, sec, frame);\r
        }\r
 \r
 }\r
index 1464e8983f5d3d2c66b5bb203b197019429813df..1d8c23418f3a2cbf11982e70fb45c56f6371340f 100644 (file)
@@ -13,30 +13,28 @@ public class LifeCycleListener implements UiLifeCycle {
 \r
        @Override\r
        public void afterComponentAttached(Component component, Page page) {\r
-               //logger.info("afterComponentAttached {} {}", component.getClass(), page);\r
+               //              logger.info("afterComponentAttached {} {}", component.getClass(), page);\r
        }\r
 \r
        @Override\r
        public void afterComponentDetached(Component component, Page page) {\r
-               //logger.info("afterComponentDetached {} {}", component.getClass(), page);\r
+               //              logger.info("afterComponentDetached {} {}", component.getClass(), page);\r
        }\r
 \r
        @Override\r
-       public void afterComponentMoved(Component arg0, Component arg1, Component arg2) {\r
-               // TODO Auto-generated method stub\r
+       public void afterComponentMoved(Component component1, Component component2, Component component3) {\r
+               //              logger.info("afterComponentMoved {} {}", component1.getClass(), component2.getClass(), component3.getClass());\r
 \r
        }\r
 \r
        @Override\r
-       public void afterPageAttached(Page arg0, Desktop arg1) {\r
-               // TODO Auto-generated method stub\r
-\r
+       public void afterPageAttached(Page page, Desktop desktop) {\r
+               //              logger.info("afterPageAttached {} {}", page, desktop);\r
        }\r
 \r
        @Override\r
-       public void afterPageDetached(Page arg0, Desktop arg1) {\r
-               // TODO Auto-generated method stub\r
-\r
+       public void afterPageDetached(Page page, Desktop desktop) {\r
+               //              logger.info("afterPageAttached {} {}", page, desktop);\r
        }\r
 \r
        @Override\r