From: Vásáry Dániel Date: Tue, 10 Oct 2017 07:31:59 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=88096cb029d40202bbe62e3cb6b4b7cbecd76084;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30569 --- diff --git a/client/DxPlay/DxPlayer.cs b/client/DxPlay/DxPlayer.cs index 82c6fb51..d8dff3b1 100644 --- a/client/DxPlay/DxPlayer.cs +++ b/client/DxPlay/DxPlayer.cs @@ -77,7 +77,8 @@ namespace DxPlay { int hr; IntPtr hEvent; MediaDescription = mediaDesc; - CurrentTC = new Timecode(mediaDesc.FirstFrame); + if (mediaDesc != null) + CurrentTC = new Timecode(mediaDesc.FirstFrame); Debug.WriteLine("SetupGraph"); // Set up the graph SetupGraph(hWin); @@ -207,8 +208,10 @@ namespace DxPlay { private void SetupGraph(Control hWin) { int hr; - m_videoWidth = MediaDescription.Resolution.Width; - m_videoHeight = MediaDescription.Resolution.Height; + if (MediaDescription != null) { + m_videoWidth = MediaDescription.Resolution.Width; + m_videoHeight = MediaDescription.Resolution.Height; + } try { m_FilterGraph = new FilterGraph() as IFilterGraph2; @@ -227,8 +230,8 @@ namespace DxPlay { hr = m_FilterGraph.AddSourceFilter(MediaDescription.FileName, MediaDescription.FileName, out sourceFilter); DsError.ThrowExceptionForHR(hr); - //IBaseFilter splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Splitter"); - IBaseFilter splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "SONY MXF Splitter"); + IBaseFilter splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Splitter"); + //IBaseFilter splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "SONY MXF Splitter"); if (splitter == null) throw new Exception("No splitter!"); @@ -454,7 +457,8 @@ namespace DxPlay { Debug.WriteLine("CloseInterfaces"); int hr; GC.SuppressFinalize(this); - tcWorker.CancelAsync(); + if (tcWorker != null) + tcWorker.CancelAsync(); lock (this) { if (State != GraphState.Exiting) { State = GraphState.Exiting; diff --git a/client/DxPlay/MediaDetector.cs b/client/DxPlay/MediaDetector.cs index 0b116be7..95a19118 100644 --- a/client/DxPlay/MediaDetector.cs +++ b/client/DxPlay/MediaDetector.cs @@ -23,6 +23,7 @@ namespace DxPlay { public static MediaDescription GetDescription(string fileName) { MediaDescription mediaDesc = new MediaDescription(); mediaDesc.fileName = fileName; + //return mediaDesc; logger.Debug("Start MediaInfo"); MediaInfo MI = new MediaInfo(); MI.Open(fileName); @@ -57,8 +58,10 @@ namespace DxPlay { private static void setResolution(MediaDescription mediaDesc, MediaInfo MI) { int videoStreams = MI.Count_Get(StreamKind.Video); - if (videoStreams != 1) + if (videoStreams > 1) throw new Exception("Multiple video streams found!"); + if (videoStreams == 1) { + } int Width = int.Parse(MI.Get(StreamKind.Video, 0, "Width")); int Height = int.Parse(MI.Get(StreamKind.Video, 0, "Height")); mediaDesc.resolution = new Size(Width, Height); diff --git a/client/DxPlay/PlayerForm.cs b/client/DxPlay/PlayerForm.cs index c282888a..9fb953a3 100644 --- a/client/DxPlay/PlayerForm.cs +++ b/client/DxPlay/PlayerForm.cs @@ -46,10 +46,13 @@ namespace DxPlay { trackBar1.Value = 0; trackBar1.Minimum = 0; - trackBar1.Maximum = m_mediaDescription.Duration.Frames + 1; m_play = new DxPlayer(panelVideo, m_mediaDescription); - txtStartTC.Text = m_mediaDescription.FirstFrame.ToString(); - txtEndTC.Text = m_mediaDescription.Duration.ToString(); + m_play.PlayEvent += new DxPlayEvent(playEvent); + if (m_mediaDescription != null) { + trackBar1.Maximum = m_mediaDescription.Duration.Frames + 1; + txtStartTC.Text = m_mediaDescription.FirstFrame.ToString(); + txtEndTC.Text = m_mediaDescription.Duration.ToString(); + } } catch (COMException ce) { MessageBox.Show("Failed to open file: " + ce.Message, "Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -291,7 +294,6 @@ namespace DxPlay { private void PlayerForm_Shown(object sender, EventArgs e) { if (m_play != null) { - m_play.PlayEvent += new DxPlayEvent(playEvent); if (AutoStart) m_play.Play(); else { diff --git a/client/DxPlay/Timecode.cs b/client/DxPlay/Timecode.cs index 2ba4faba..a8142773 100644 --- a/client/DxPlay/Timecode.cs +++ b/client/DxPlay/Timecode.cs @@ -13,6 +13,8 @@ namespace DxPlay { } public Timecode(Timecode tc) { + if (tc == null) + return; startFrame = tc.startFrame; frameRate = tc.frameRate; } diff --git a/client/IntegrationTests/JobEngineIT.cs b/client/IntegrationTests/JobEngineIT.cs index b7ea6d5c..56794fc8 100644 --- a/client/IntegrationTests/JobEngineIT.cs +++ b/client/IntegrationTests/JobEngineIT.cs @@ -66,5 +66,12 @@ namespace IntegrationTests { MediaCubeApi client = new MediaCubeApi("http://localhost:8080/services/rest/jobengine/", null, null, 100); client.Item(); } + + [TestMethod] + public void TestNotify() { + MediaCubeApi client = new MediaCubeApi("http://localhost:8080/services/rest/jobengine/", null, null, 100); + client.Notify("vasay@elgekko.net", "Újravágást kérek!"); + } + } } diff --git a/client/Maestro/Resources/configuration-nexio.json b/client/Maestro/Resources/configuration-nexio.json index 5964ad71..afd9612f 100644 --- a/client/Maestro/Resources/configuration-nexio.json +++ b/client/Maestro/Resources/configuration-nexio.json @@ -23,7 +23,7 @@ { "$type": "OctopusMetadata", "server": { - "address": "http://10.10.1.28:8080/services/rest/octopus/", + "address": "http://10.10.1.28:8080/services/rest/octopus", "userName": "dani", "password": "dani", "timeout": 1000 @@ -41,7 +41,7 @@ { "$type": "MediaCubeMetadata", "server": { - "address": "http://10.10.1.28:8080/services/rest/jobengine/", + "address": "http://10.10.1.28:8080/services/rest/jobengine", "userName": "dani", "password": "dani" } diff --git a/client/Maestro/Sources/NexioRESTSource.cs b/client/Maestro/Sources/NexioRESTSource.cs index edbcd1d5..bfc2c5ab 100644 --- a/client/Maestro/Sources/NexioRESTSource.cs +++ b/client/Maestro/Sources/NexioRESTSource.cs @@ -170,7 +170,7 @@ namespace Maestro.Sources { private void OnDeleted(JToken d) { string id = d[ID].ToString(); - var item = this.Where(i => i.ID.Equals(id)).First(); + var item = this.Where(i => i.ID != null && i.ID.Equals(id)).First(); parent.SafeCall(() => { Remove(item); messageBus.Send(new RemoveFileActionMsg() { diff --git a/client/Maestro/Targets/FTPTargetProcessor.cs b/client/Maestro/Targets/FTPTargetProcessor.cs index fb82d9e5..35a50856 100644 --- a/client/Maestro/Targets/FTPTargetProcessor.cs +++ b/client/Maestro/Targets/FTPTargetProcessor.cs @@ -16,13 +16,17 @@ namespace Maestro.Targets { public FTPTargetProcessor(Control parent, TargetProcessorParametersWrapper parameters) : base(parent, parameters) { FtpTrace.LogFunctions = false; - Uri inputUri = new Uri(String.Format("{0}/{1}", parameters.SourceConfig.Local.Address.LocalPath, parameters.InputFileName)); + Uri inputUri = createInputUri(parameters); inputFile = new FileInfo(inputUri.LocalPath); Input = inputFile.FullName; ID = parameters.ID; workFlowAction = new WorkflowAction() { houseId = ID, tag = parameters.TargetConfig.Tag, touched = DateTime.Now }; } + protected virtual Uri createInputUri(TargetProcessorParametersWrapper parameters) { + return new Uri(String.Format("{0}/{1}", parameters.SourceConfig.Local.Address.LocalPath, parameters.InputFileName)); + } + protected override void BeforeExecute() { base.BeforeExecute(); targetFTP = CreateClient(parameters.TargetConfig.Remote); diff --git a/client/Maestro/Targets/FXPTargetProcessor.cs b/client/Maestro/Targets/FXPTargetProcessor.cs index 9bc19495..1032b08e 100644 --- a/client/Maestro/Targets/FXPTargetProcessor.cs +++ b/client/Maestro/Targets/FXPTargetProcessor.cs @@ -17,6 +17,10 @@ namespace Maestro.Targets { sourceConfig = parameters.SourceConfig; } + protected override Uri createInputUri(TargetProcessorParametersWrapper parameters) { + return new Uri(String.Format("{0}/{1}", parameters.SourceConfig.Remote.Address, parameters.InputFileName)); + } + protected override void UploadFile() { FtpClient sourceFTP = null; FtpClient monitorFTP = null; diff --git a/client/MediaCubeClient/MediaCubeApi.cs b/client/MediaCubeClient/MediaCubeApi.cs index 646e4385..afa9fcee 100644 --- a/client/MediaCubeClient/MediaCubeApi.cs +++ b/client/MediaCubeClient/MediaCubeApi.cs @@ -46,6 +46,17 @@ namespace JobEngineClient { return result; } + public void Notify(string to, string content) { + var request = new RestRequest("notify", Method.GET); + //Debug.WriteLine(body); + request.AddQueryParameter("to", to); + request.AddQueryParameter("content", content); + var response = client.Execute(request); + if (response.StatusCode != HttpStatusCode.OK || response.ContentLength < 1) + return; + } + + public void Item() { var request = new RestRequest("item", Method.GET); var response = client.Execute(request); diff --git a/server/-configuration/log4j2.xml b/server/-configuration/log4j2.xml index 02af1498..49bce29b 100644 --- a/server/-configuration/log4j2.xml +++ b/server/-configuration/log4j2.xml @@ -19,12 +19,12 @@ - - + diff --git a/server/-configuration/run-mediacube-server-localhost.launch b/server/-configuration/run-mediacube-server-localhost.launch index 842617af..1da64ac2 100644 --- a/server/-configuration/run-mediacube-server-localhost.launch +++ b/server/-configuration/run-mediacube-server-localhost.launch @@ -19,7 +19,7 @@ - + diff --git a/server/-product/log4j2.xml b/server/-product/log4j2.xml index 2f63f206..fa326f12 100644 --- a/server/-product/log4j2.xml +++ b/server/-product/log4j2.xml @@ -26,7 +26,7 @@ - + diff --git a/server/-product/pom.xml b/server/-product/pom.xml index 1bac3f52..6e4635a0 100644 --- a/server/-product/pom.xml +++ b/server/-product/pom.xml @@ -279,7 +279,7 @@ "call mkdir ${remote.location}" "lcd ${local.location}" "cd ${remote.location}" - "synchronize remote -criteria=size" + "synchronize remote" "call chmod +x mediacube" "call chmod +x stop-mediacube.sh" "call chmod +x start-mediacube.sh" diff --git a/server/user.commons.log4j2/META-INF/MANIFEST.MF b/server/user.commons.log4j2/META-INF/MANIFEST.MF index 521fb644..d4355ee3 100644 --- a/server/user.commons.log4j2/META-INF/MANIFEST.MF +++ b/server/user.commons.log4j2/META-INF/MANIFEST.MF @@ -6,4 +6,5 @@ Bundle-Version: 1.0.0 Fragment-Host: org.apache.logging.log4j.core;bundle-version="2.8.2" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: user.commons.log4j2.appender -Import-Package: javax.mail;version="1.5.0" +Import-Package: javax.mail;version="1.5.0", + user.commons diff --git a/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java b/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java index 1bafe875..58d13a5d 100644 --- a/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java +++ b/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java @@ -31,9 +31,11 @@ import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; +import javax.mail.internet.InternetAddress; import javax.mail.internet.InternetHeaders; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMessage.RecipientType; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; import javax.mail.util.ByteArrayDataSource; @@ -56,6 +58,8 @@ import org.apache.logging.log4j.message.ReusableMessage; import org.apache.logging.log4j.util.PropertiesUtil; import org.apache.logging.log4j.util.Strings; +import user.commons.MediaCubeMarker; + /** * Manager for sending SMTP events. */ @@ -293,6 +297,11 @@ public class SmtpManager extends AbstractManager { connect(appendEvent); } try { + if (appendEvent.getMarker() instanceof MediaCubeMarker) { + MediaCubeMarker mcm = (MediaCubeMarker) appendEvent.getMarker(); + message.setRecipient(RecipientType.TO, new InternetAddress(mcm.getTo())); + } + final LogEvent[] priorEvents = buffer.removeAll(); // LOG4J-310: log appendEvent even if priorEvents is empty diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java index 0d18b01e..39c60be1 100644 --- a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java @@ -53,6 +53,14 @@ public class TestItem extends TestBase { store.appendStoreUri(storeUri); store.add(); } + StoreUri storeUri = manager.createStoreUri(RemoteStoreProtocol.HTTP, "10.10.1.28/video"); + storeUri.setPortNumber(90); + storeUri.setSource(true); + storeUri.setTarget(false); + manager.getStore("Low-res").appendStoreUri(storeUri); + manager.getStore("Low-res").setPersister(manager); + manager.getStore("Low-res").add(); + if (manager.getFileType("High-res") == null) { FileType fileType = manager.createFileType("High-res", "High resolution material", "MPEG Video", "PCM", 1, 8, 25); fileType.add(); diff --git a/server/user.jobengine.osgi.server/pages/index.zul b/server/user.jobengine.osgi.server/pages/index.zul index 2eaeca44..c02f7065 100644 --- a/server/user.jobengine.osgi.server/pages/index.zul +++ b/server/user.jobengine.osgi.server/pages/index.zul @@ -54,7 +54,7 @@
- MediaCube Server v2.0.1 +
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java index f1330555..4a22a963 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java @@ -1,5 +1,6 @@ package user.jobengine.zk.model; +import java.io.File; import java.nio.file.Paths; import java.util.List; import java.util.Map; @@ -13,6 +14,8 @@ import org.zkoss.util.resource.Labels; import org.zkoss.zul.Messagebox; import user.commons.ListUtils; +import user.commons.StoreUri; +import user.commons.remotestore.RemoteStoreProtocol; import user.jobengine.db.Item; import user.jobengine.db.Media; import user.jobengine.db.MediaFile; @@ -96,16 +99,15 @@ public class SearchModel extends BaseModel { List mediaFiles = this.selectedMedia.getMediaFiles(); for (MediaFile mf : mediaFiles) { Store store = mf.getStore(); - if (mf.getStore().isLowres()) { - //protocol + address + relativepath - //store.getStoreUris().get(0).getProtocol().getValue() - ret = Paths.get(store.getStoreUris().get(0).toString(false), mf.getRelativePath()).toString(); + if (store.isLowres()) { + StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.HTTP); + File f = new File("file://" + mf.getRelativePath().replace("\\", "/")); + ret = String.format("%s%s%s", "/pages/mediaplayer.jsp?mediaurl=", sourceStoreUri.toString(), f.getName()).toString(); break; } } } - ret = "http://10.10.1.28:90/"; return ret; } @@ -142,7 +144,7 @@ public class SearchModel extends BaseModel { } return ret; } - + public boolean getHasSelectedMediaFile(){ String mediaFilePath =getMediaFilePath(); return (mediaFilePath != null && !"".equals(mediaFilePath)); diff --git a/server/user.jobengine.osgi.services/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.services/META-INF/MANIFEST.MF index 2737ccd1..ebbec289 100644 --- a/server/user.jobengine.osgi.services/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.services/META-INF/MANIFEST.MF @@ -39,4 +39,5 @@ Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", Export-Package: user.jobengine.osgi.rest, user.jobengine.osgi.rest.octopus, user.jobengine.osgi.ws.nexio -Require-Bundle: org.jboss.resteasy.jaxrs;bundle-version="3.0.11" +Require-Bundle: org.jboss.resteasy.jaxrs;bundle-version="3.0.11", + org.apache.logging.log4j.core diff --git a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java index 7a82199b..39f72d51 100644 --- a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java +++ b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java @@ -2,6 +2,7 @@ package user.jobengine.osgi.rest; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.MarkerManager; import user.commons.nexio.INexioAPI; import user.commons.octopus.IOctopusAPI; @@ -9,6 +10,7 @@ import user.jobengine.db.IItemManager; import user.jobengine.server.IJobEngine; public class ComponentBinder { + private static final String MEDIACUBE = "MEDIACUBE"; private static final Logger logger = LogManager.getLogger(); private static IJobEngine jobengineService; private static IItemManager itemManagerService; @@ -63,6 +65,7 @@ public class ComponentBinder { } public void start() { + logger.info(MarkerManager.getMarker(MEDIACUBE), "A MediaCube server elindult."); } public synchronized void unbindService(Object service) { diff --git a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/jobengine/JobengineService.java b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/jobengine/JobengineService.java index 426ec305..3935a0f3 100644 --- a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/jobengine/JobengineService.java +++ b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/jobengine/JobengineService.java @@ -5,6 +5,7 @@ import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -12,6 +13,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.core.runtime.adaptor.EclipseStarter; +import user.commons.MediaCubeMarker; import user.jobengine.db.IItemManager; import user.jobengine.db.Item; import user.jobengine.db.JSONBase; @@ -90,4 +92,18 @@ public class JobengineService { } return result; } + + @GET + @Path("/notify") + @Consumes({ MediaType.APPLICATION_JSON }) + public Response notify(@QueryParam("to") String to, @QueryParam("content") String content) { + Response result = null; + try { + logger.info(new MediaCubeMarker(to), content); + result = Response.ok().build(); + } catch (Exception e) { + result = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + return result; + } }