git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31388
{\r
"title": "Development",\r
- "active": true,\r
+ "active": false,\r
"startInTray": false,\r
"enableCustomMetadataId": true,\r
"filter": "avi",\r
"version": 0,\r
"redefineSegments": true\r
},\r
- {\r
- "$type": "MediaCubeMetadata",\r
- "server": {\r
- "address": "http://10.10.1.27/services/rest/jobengine",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- },\r
- "wsserver": {\r
- "address": "ws://10.10.1.29:88/services/wsapi",\r
- "timeout": 1000\r
- },\r
- "jobTemplate": "retrieve-material.xml",\r
- "archiveFolder": "file://10.10.1.105/TESZT/TC/ARCHIVE",\r
- "restoreFolder": "file://10.10.1.105/BRAAVOS/ARCHIVE_RESTORE",\r
- "restoreNamePattern": "%s_%GUID%",\r
- "serverRestoreFolder": "/mnt/ISILON/ARCHIVE_RESTORE",\r
- "killDateDays": 1\r
- }\r
+{\r
+ "$type": "MediaCubeMetadata",\r
+ "server": {\r
+ "address": "http://localhost:8888/services/rest/jobengine",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ },\r
+ "wsserver": {\r
+ "address": "ws://10.10.1.27/services/wsapi",\r
+ "timeout": 1000\r
+ },\r
+ "jobTemplate": "retrieve-material.xml",\r
+ "archiveFolder": "file://10.10.1.105/TESZT/TC/ARCHIVE",\r
+ "restoreFolder": "file://10.10.1.105/BRAAVOS/ARCHIVE_RESTORE",\r
+ "restoreNamePattern": "%s_%GUID%",\r
+ "serverRestoreFolder": "/mnt/ISILON/ARCHIVE_RESTORE",\r
+ "killDateDays": 1\r
+}\r
],\r
"targets": [\r
{\r
"timeout": 1000\r
}\r
},\r
- {\r
- "label": "Teszt",\r
- "processor": "FTPTargetProcessor",\r
- "outputFormat": "%ID%-%SOURCENAME%",\r
- "tag": "Betöltés",\r
- "killDateDays": 7,\r
- "saveArchiveMetadata": true,\r
- "remote": {\r
- "address": "ftp://10.10.1.105/TESZT/CHECK",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- }\r
- },\r
+ {\r
+ "label": "Teszt",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "%ID%-%SOURCENAME%",\r
+ "tag": "Betöltés",\r
+ "killDateDays": 7,\r
+ "saveArchiveMetadata": false,\r
+ "sendEmailOnSuccess": true,\r
+ "successEmailPattern": "A %ID% - %ITEMTITLE% anyag felkerült a szerverre.\r\nJSON: %JSON%",\r
+ "successEmailRecipient": "vasary@elgekko.net",\r
+ "remote": {\r
+ "address": "ftp://10.10.1.105/TESZT/CHECK",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
{\r
"label": "Napi megtekintőbe",\r
"processor": "FTPTargetProcessor",\r
result.MetadataText = SelectedMetadata?.MetadataText;\r
result.InputFileName = sourceItem.Name;\r
result.MovieSegments = MovieSegments?.ToList();\r
- result.ArchiveMetadata = ArchiveMetadata.DeepClone(ArchiveMetadata);\r
result.VariantID = selectedMetadata == null ? 0 : selectedMetadata.VariantID;\r
result.MetadataKind = selectedMetadata == null ? MetadataType.None : selectedMetadata.Kind;\r
result.UserName = TrayApplicationContext.UserName;\r
result.MessageBus = MessageBus;\r
result.CreateDate = createDate;\r
+ //TODO kell duplan?\r
result.Frames = sourceItem.Frames;\r
result.TargetOrder = Configuration.Targets.ToList().IndexOf(target);\r
- result.ArchiveMetadata.userName = result.UserName;\r
result.SelectedSegments = SelectedMetadata?.Selected;\r
- if (SelectedMetadata.Kind == MetadataType.MediaCube && result.ArchiveMetadata != null) {\r
- result.ArchiveMetadata.itemHouseId = PatternNameMaker.Get(result.ArchiveMetadata.itemHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
- result.ArchiveMetadata.itemTitle = PatternNameMaker.Get(result.ArchiveMetadata.itemTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
- result.ArchiveMetadata.mediaHouseId = PatternNameMaker.Get(result.ArchiveMetadata.mediaHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
- result.ArchiveMetadata.mediaTitle = PatternNameMaker.Get(result.ArchiveMetadata.mediaTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+\r
+ if (ArchiveMetadata != null) {\r
+ result.ArchiveMetadata = ArchiveMetadata.DeepClone(ArchiveMetadata);\r
+ result.ArchiveMetadata.duration = sourceItem.Frames;\r
+ result.ArchiveMetadata.userName = result.UserName;\r
+ if (SelectedMetadata.Kind == MetadataType.MediaCube) {\r
+ result.ArchiveMetadata.itemHouseId = PatternNameMaker.Get(result.ArchiveMetadata.itemHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+ result.ArchiveMetadata.itemTitle = PatternNameMaker.Get(result.ArchiveMetadata.itemTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+ result.ArchiveMetadata.mediaHouseId = PatternNameMaker.Get(result.ArchiveMetadata.mediaHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+ result.ArchiveMetadata.mediaTitle = PatternNameMaker.Get(result.ArchiveMetadata.mediaTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+ }\r
}\r
return result;\r
}\r
private const string PATTERN_USERNAME = "%USERNAME%";\r
private const string PATTERN_COMPUTERNAME = "%COMPUTERNAME%";\r
private const string PATTERN_ID = "%ID%";\r
+ private const string PATTERN_JSON = "%JSON%";\r
+ private const string PATTERN_ITEMTITLE = "%ITEMTITLE%";\r
+ private const string PATTERN_MEDIATITLE = "%MEDIATITLE%";\r
private const string PATTERN_IDROOT = "%IDROOT%";\r
private const string PATTERN_GUID = "%GUID%";\r
private const string PATTERN_SOURCENAME = "%SOURCENAME%";\r
return result;\r
}\r
\r
- static public string Get(string pattern, string id, string inputName, string outputName, string userName, string text, DateTime? storedDateTime = null) {\r
+ static public string Get(string pattern, string id, string inputName, string outputName, string userName, string text, DateTime? storedDateTime = null, string json = null, string itemTitle = null, string mediaTitle = null) {\r
string idRoot = id != null && id.Contains(UNDERSCORE) ? id.Split(UNDERSCORE[0])[0] : id;\r
DateTime dt = storedDateTime == null ? DateTime.Now : (DateTime)storedDateTime;\r
+ var trimmedJSON = json;\r
+ if (json != null) {\r
+ trimmedJSON = json.Replace("\r", "").Replace("\n", "");\r
+ }\r
string result = pattern\r
.Replace(PATTERN_ID, id)\r
.Replace(PATTERN_IDROOT, idRoot)\r
.Replace(PATTERN_GUID, ((ShortGuid)Guid.NewGuid()).ToString())\r
.Replace(PATTERN_TIMESTAMP, dt.ToString(DATETIME_FORMAT, CultureInfo.InvariantCulture))\r
- .Replace(PATTERN_DATESTAMP, dt.ToString(DATE_FORMAT_NODOTS, CultureInfo.InvariantCulture));\r
+ .Replace(PATTERN_DATESTAMP, dt.ToString(DATE_FORMAT_NODOTS, CultureInfo.InvariantCulture))\r
+ .Replace(PATTERN_JSON, trimmedJSON)\r
+ .Replace(PATTERN_ITEMTITLE, itemTitle)\r
+ .Replace(PATTERN_MEDIATITLE, mediaTitle);\r
\r
if (!String.IsNullOrEmpty(inputName)) {\r
result = result.Replace(PATTERN_SOURCENAME, Normalize(Path.GetFileNameWithoutExtension(inputName)));\r
EnsureDirectoryExistence(statusWorkDir);\r
string fileName = String.Format(METADATA_FILE, OutputName);\r
//logger.Debug("Creating METADATA file {0}", fileName);\r
- Parameters.ArchiveMetadata.duration = Parameters.Frames;\r
byte[] content = Encoding.UTF8.GetBytes(Parameters.ArchiveMetadata.ToString());\r
string ouputPath = GetOutputFilePath(statusWorkDir, fileName);\r
UploadContent(ouputPath, content);\r
}\r
\r
protected string GetDynamicText(string pattern) {\r
- return PatternNameMaker.Get(pattern, ID, InputName, Output, Parameters.UserName, Parameters.MetadataText, Parameters.CreateDate);\r
+ return PatternNameMaker.Get(pattern, ID, InputName, Output, Parameters.UserName, Parameters.MetadataText, Parameters.CreateDate, Parameters.ArchiveMetadata?.ToString(), Parameters.ArchiveMetadata?.itemTitle, Parameters.ArchiveMetadata?.mediaTitle);\r
}\r
\r
private string CreateOutputFileName() {\r
return null;\r
}\r
\r
- if (!response.Content.IsEmpty()) {\r
+ if (!response.Content.IsEmpty() && response.Content != "[]") {\r
JObject media = JObject.Parse(response.Content);\r
if (media != null)\r
return media.Deserialize<Media>();\r
\r
private File check_rd_nonzero_fellow(String mediaid, List<File> allFiles) {\r
for (File mediaFile : allFiles) {\r
+ if (!mediaFile.getName().contains("-"))\r
+ continue;\r
String houseid = mediaFile.getName().substring(0, mediaFile.getName().lastIndexOf("-"));\r
if (houseid.equals(mediaid) && mediaFile.length() > 0)\r
return mediaFile;\r
public Object[] execute(List<Media> basket, String houseId, String recipient, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime)\r
throws Exception {\r
marker = (MediaCubeMarker) jobRuntime.getMarker();\r
+\r
+ //session szinten csak a finishMarker cimzettje az erdekes, es ezt a cimet pluszban hasznalja a konfigban megadott cimmel\r
+ //a finishMarker orokli a cim bellitast a sessionMarkertol\r
marker.setTo(recipient);\r
\r
+ ((MediaCubeMarker) jobRuntime.getFinishMarker()).setTo(recipient);\r
+\r
if (basket == null || basket.size() == 0)\r
return null;\r
setProgress(10);\r
import java.net.InetAddress;\r
import java.net.URI;\r
import java.util.ArrayList;\r
+import java.util.Arrays;\r
import java.util.Calendar;\r
import java.util.Date;\r
import java.util.List;\r
\r
//A mar letezo mozikat nem archivaljuk le ujra, csak a metaadatot\r
long existingMediaId = 0;\r
+ boolean transferDone = false;\r
if (transferredFileNames.contains(origFileName)) {\r
logger.info(systemMarker, "A '{}' file archiválásra felkészítése egy másik story kapcsán már megtörtént, ezért csak metaadat archiválás szükséges.",\r
origFileName);\r
if (!demo)\r
- transferChunk(videoFileName);\r
+ transferDone = transferChunk(videoFileName);\r
} else {\r
existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, origFileName);\r
if (existingMediaId == 0) {\r
transferredFileNames.add(origFileName);\r
if (!demo)\r
- transferFile(origFileName + MXFEXT, videoFileName);\r
+ transferDone = transferFile(origFileName + MXFEXT, videoFileName);\r
logger.info(systemMarker, "A '{}' file archiválásra felkészítése sikeres volt.", origFileName);\r
} else {\r
\r
logger.info(systemMarker, "A '{}' file archiválása már megtörtént, ezért csak metaadat archiválás szükséges.", origFileName);\r
if (!demo)\r
- transferChunk(videoFileName);\r
+ transferDone = transferChunk(videoFileName);\r
}\r
}\r
\r
- if (!demo) {\r
+ if (!demo && transferDone) {\r
BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive, existingMediaId);\r
transferMetadata(videoFileName, metadata);\r
createSourceKillDateFile(rundownArchive, origFileName);\r
\r
}\r
\r
- private void transferChunk(String fileName) throws Exception {\r
+ private boolean transferChunk(String fileName) throws Exception {\r
logger.info("Transfer chunk {}", fileName);\r
OutputStream outStream = null;\r
try {\r
targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
+\r
+ //ha ugyan abban a tukorben szerepel meg 1x a mozi, akkor a chunk felulirja a tenyleges file-t, es az sosem archivalodik\r
+ String[] names = targetFtp.listNames();\r
+ if (names != null) {\r
+ if (Arrays.asList(names).contains(fileName))\r
+ return false;\r
+ }\r
+\r
outStream = targetFtp.storeFileStream(fileName);\r
if (outStream == null) {\r
- throw new NullPointerException("Can not open: " + fileName + MXFEXT + " Reply:" + targetFtp.getReplyString());\r
+ throw new NullPointerException("Can not open: " + fileName + " Reply:" + targetFtp.getReplyString());\r
}\r
} catch (Exception e) {\r
logger.catching(e);\r
outStream.close();\r
targetUri.cleanUp();\r
}\r
+ return true;\r
}\r
\r
- private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
+ private boolean transferFile(String sourceFileName, String targetFileName) throws Exception {\r
+ boolean result = true;\r
int reply = 0;\r
logger.info("Transfer clip {}", sourceFileName);\r
try {\r
}\r
} catch (Exception e) {\r
logger.catching(e);\r
- throw e;\r
+ result = false;\r
} finally {\r
sourceUri.cleanUp();\r
targetUri.cleanUp();\r
}\r
\r
+ return result;\r
}\r
\r
private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception {\r
import org.apache.logging.log4j.message.Message;\r
\r
import user.commons.LogUtils;\r
-import user.commons.MediaCubeMarker;\r
import user.commons.RemoteFile;\r
import user.commons.StoreUri;\r
import user.commons.remotestore.IProgressEventListener;\r
String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(),\r
globalRetrievePath);\r
\r
- Message msg = LogUtils.format(\r
+ logger.info(marker,\r
"Az '{}' állomány visszatöltése sikeres volt '{}' néven. A célmappa a <a href='{}' target='_blank'>ide kattintva</a> nyitható meg.",\r
sourceFileName, targetFileName, globalTargetPath);\r
- if (StringUtils.isNotBlank(successRecipient))\r
- logger.info(new MediaCubeMarker(successRecipient), msg);\r
- logger.info(marker, msg);\r
afterRestore(targetUri, targetPath, killDateDays, targetFileName);\r
\r
} catch (Exception e) {\r
private int runtimeWeight;
private List<JobRuntime> children;
private MediaCubeMarker sessionMarker;
+ private MediaCubeMarker finishMarker;
private boolean isService;
private Semaphore forkSempahore;
private IJobChangedListener jobChangedListener;
@Override
public Marker getFinishMarker() {
- return new MediaCubeFinishMarker((MediaCubeMarker) getMarker());
+ if (finishMarker == null)
+ finishMarker = new MediaCubeFinishMarker((MediaCubeMarker) getMarker());
+ return finishMarker;
}
@Override