From e32a17c6c8563b1dddf26e373138f8f6d2c56f67 Mon Sep 17 00:00:00 2001 From: hdsdi3g Date: Thu, 21 Apr 2016 23:59:35 +0200 Subject: [PATCH] Update #176, correct bug with 2 display graphs, add current play time on graphic. Update #189: split metadata.js into some separate files. --- .../mtdgenerator/FFmpegAudioDeepAnalyser.java | 2 +- .../audio-deep-analyst.jsx} | 350 +---------------- .../async/pathindex/metadatas/audio.jsx | 73 ++++ .../async/pathindex/metadatas/image.jsx | 103 +++++ .../pathindex/{ => metadatas}/mediaplayer.jsx | 2 +- .../async/pathindex/metadatas/metadatas.jsx | 26 ++ .../async/pathindex/metadatas/video.jsx | 185 +++++++++ conf/jsfiles.json | 62 ++- .../_reduced/_internal_concated.js.gz | Bin 39792 -> 39852 bytes .../_reduced/_internal_declarations.js | 1 + public/javascripts/_reduced/_mydmam.format.js | 11 +- ....pathindex.metadatas.audio-deep-analyst.js | 53 +++ .../mydmam.async.pathindex.metadatas.audio.js | 8 + .../mydmam.async.pathindex.metadatas.image.js | 11 + .../mydmam.async.pathindex.metadatas.js | 89 ----- ....async.pathindex.metadatas.mediaplayer.js} | 2 +- ...mam.async.pathindex.metadatas.metadatas.js | 3 + .../mydmam.async.pathindex.metadatas.video.js | 22 ++ .../_transformed/_internal_declarations.js | 1 + .../_transformed/_mydmam.format.js | 26 +- ...pathindex.metadatas.audio-deep-analyst.js} | 356 +----------------- .../mydmam.async.pathindex.metadatas.audio.js | 77 ++++ .../mydmam.async.pathindex.metadatas.image.js | 107 ++++++ ....async.pathindex.metadatas.mediaplayer.js} | 8 +- ...mam.async.pathindex.metadatas.metadatas.js | 30 ++ .../mydmam.async.pathindex.metadatas.video.js | 189 ++++++++++ public/javascripts/src/mydmam.format.js | 26 +- 27 files changed, 1022 insertions(+), 801 deletions(-) rename app/react/mydmam/async/pathindex/{metadatas.jsx => metadatas/audio-deep-analyst.jsx} (60%) create mode 100644 app/react/mydmam/async/pathindex/metadatas/audio.jsx create mode 100644 app/react/mydmam/async/pathindex/metadatas/image.jsx rename app/react/mydmam/async/pathindex/{ => metadatas}/mediaplayer.jsx (98%) create mode 100644 app/react/mydmam/async/pathindex/metadatas/metadatas.jsx create mode 100644 app/react/mydmam/async/pathindex/metadatas/video.jsx create mode 100644 public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio-deep-analyst.js create mode 100644 public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio.js create mode 100644 public/javascripts/_reduced/mydmam.async.pathindex.metadatas.image.js delete mode 100644 public/javascripts/_reduced/mydmam.async.pathindex.metadatas.js rename public/javascripts/_reduced/{mydmam.async.pathindex.mediaplayer.js => mydmam.async.pathindex.metadatas.mediaplayer.js} (97%) create mode 100644 public/javascripts/_reduced/mydmam.async.pathindex.metadatas.metadatas.js create mode 100644 public/javascripts/_reduced/mydmam.async.pathindex.metadatas.video.js rename public/javascripts/_transformed/{mydmam.async.pathindex.metadatas.js => mydmam.async.pathindex.metadatas.audio-deep-analyst.js} (62%) create mode 100644 public/javascripts/_transformed/mydmam.async.pathindex.metadatas.audio.js create mode 100644 public/javascripts/_transformed/mydmam.async.pathindex.metadatas.image.js rename public/javascripts/_transformed/{mydmam.async.pathindex.mediaplayer.js => mydmam.async.pathindex.metadatas.mediaplayer.js} (95%) create mode 100644 public/javascripts/_transformed/mydmam.async.pathindex.metadatas.metadatas.js create mode 100644 public/javascripts/_transformed/mydmam.async.pathindex.metadatas.video.js diff --git a/app/hd3gtv/mydmam/transcode/mtdgenerator/FFmpegAudioDeepAnalyser.java b/app/hd3gtv/mydmam/transcode/mtdgenerator/FFmpegAudioDeepAnalyser.java index fcbe5553..de6cb3d8 100644 --- a/app/hd3gtv/mydmam/transcode/mtdgenerator/FFmpegAudioDeepAnalyser.java +++ b/app/hd3gtv/mydmam/transcode/mtdgenerator/FFmpegAudioDeepAnalyser.java @@ -63,7 +63,7 @@ public FFmpegAudioDeepAnalyser() { lufs_depth = -Math.abs((float) Configuration.global.getValue("metadata_analysing", "ffmpeg_audioda_lufs_depth", -80f)); lufs_ref = -Math.abs((float) Configuration.global.getValue("metadata_analysing", "ffmpeg_audioda_lufs_ref", -23f)); truepeak_ref = -Math.abs((float) Configuration.global.getValue("metadata_analysing", "ffmpeg_audioda_truepeak_ref", -3f)); - jpg_compression_ratio = (float) Configuration.global.getValue("metadata_analysing", "ffmpeg_audioda_jpg_compression_ratio", 0.8f); + jpg_compression_ratio = (float) Configuration.global.getValue("metadata_analysing", "ffmpeg_audioda_jpg_compression_ratio", 0.95f); } public boolean isEnabled() { diff --git a/app/react/mydmam/async/pathindex/metadatas.jsx b/app/react/mydmam/async/pathindex/metadatas/audio-deep-analyst.jsx similarity index 60% rename from app/react/mydmam/async/pathindex/metadatas.jsx rename to app/react/mydmam/async/pathindex/metadatas/audio-deep-analyst.jsx index 279e7007..eb7c87a1 100644 --- a/app/react/mydmam/async/pathindex/metadatas.jsx +++ b/app/react/mydmam/async/pathindex/metadatas/audio-deep-analyst.jsx @@ -11,335 +11,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * - * Copyright (C) hdsdi3g for hd3g.tv 2015 + * Copyright (C) hdsdi3g for hd3g.tv 2016 * */ - -if(!pathindex.metadatas){pathindex.metadatas = {};} - -var metadatas = pathindex.metadatas; - -metadatas.getFileURL = function(file_hash, file_type, file_name) { - if (!mydmam.metadatas.url.metadatafile) { - return ""; - } - return mydmam.metadatas.url.metadatafile.replace("filehashparam1", file_hash).replace("typeparam2", file_type).replace("fileparam3", file_name); -}; - -/** ================================== IMAGE REAML ================================== */ - -metadatas.ImageURL = function(file_hash, thumbnail) { - if (thumbnail == null) { - return null; - } - return metadatas.getFileURL(file_hash, thumbnail.type, thumbnail.file); -}; - -var chooseTheCorrectImageToDisplay = function(previews, prefered_size) { - if (prefered_size == null) { - prefered_size = "full_size_thumbnail"; - } - - if (prefered_size === "full_size_thumbnail") { - if (previews.full_size_thumbnail) { - return previews.full_size_thumbnail; - } else { - prefered_size = "cartridge_thumbnail"; - } - } - - if (prefered_size === "cartridge_thumbnail") { - if (previews.cartridge_thumbnail) { - return previews.cartridge_thumbnail; - } else { - prefered_size = "icon_thumbnail"; - } - } - - if (prefered_size === "icon_thumbnail") { - if (previews.icon_thumbnail) { - return previews.icon_thumbnail; - } - } - - return null; -}; - -metadatas.chooseTheCorrectImageURL = function(file_hash, previews, prefered_size) { - return metadatas.ImageURL(file_hash, chooseTheCorrectImageToDisplay(previews, prefered_size)); -}; - -metadatas.Image = React.createClass({ - render: function() { - var file_hash = this.props.file_hash; - var previews = this.props.previews; - var prefered_size = this.props.prefered_size; - - var preview = chooseTheCorrectImageToDisplay(previews, prefered_size); - - if (preview === null) { - return null; - } - - var url = metadatas.ImageURL(file_hash, preview); - var width = preview.options.width; - var height = preview.options.height; - - var image = null; - if ((width > 0) & (height > 0)) { - image = ( - {width - ); - } else { - image = ( - - ); - } - - return ( -
- - {image} -
- ); - } -}); - -/** ================================== VIDEO REAML ================================== */ - -var QualityTabs = React.createClass({ - handleClickSwitchSize: function(event) { - event.preventDefault(); - this.props.onSwitchSize(!this.props.isbigsize); - }, - handleClickSwitchQuality: function(event) { - event.preventDefault(); - this.props.onChangeQuality($(event.currentTarget).data("qualid")); - }, - render: function() { - var switchsize_icon_class = "icon-resize-full"; - if (this.props.isbigsize) { - switchsize_icon_class = "icon-resize-small"; - } - - var medias = this.props.medias; - var selectedquality = this.props.selectedquality; - - var libuttons = []; - for (var i = 0; i < medias.length; i++) { - var switch_qual_li_classes = classNames({ - 'active': (i === selectedquality), - }); - libuttons.push( -
  • - - {medias[i].label} - -
  • - ); - }; - libuttons.push( -
  • - ); - - return ( - - ); - } -}); - -metadatas.Video = React.createClass({ - getInitialState: function() { - return {selectedquality: 0, medias: [], isbigsize: false, transport: null, currentTime: null, duration: null}; - }, - componentDidMount: function() { - var master_as_preview_url = this.props.master_as_preview_url; - var file_hash = this.props.file_hash; - var previews = this.props.mtdsummary.previews; - //var reference = this.props.reference; - var medias = []; - - if (master_as_preview_url) { - var media = {}; - media.url = master_as_preview_url; - media.label = "Original"; - medias.push(media); - } - if (previews) { - if (previews.video_hd_pvw) { - var media = {}; - media.url = metadatas.getFileURL(file_hash, previews.video_hd_pvw.type, previews.video_hd_pvw.file); - media.label = "HD"; - medias.push(media); - } - if (previews.video_sd_pvw) { - var media = {}; - media.url = metadatas.getFileURL(file_hash, previews.video_sd_pvw.type, previews.video_sd_pvw.file); - media.label = "SQ"; - medias.push(media); - } - if (previews.video_lq_pvw) { - var media = {}; - media.url = metadatas.getFileURL(file_hash, previews.video_lq_pvw.type, previews.video_lq_pvw.file); - media.label = "LQ"; - medias.push(media); - } - } - this.setState({medias: medias}); - }, - handleChangeQuality: function(selectedquality) { - this.setState({ - selectedquality: selectedquality, - transport: {macro: "RELOAD_PLAY"} - }); - }, - handleSwitchSize: function(isbigsize) { - this.setState({isbigsize: isbigsize}); - }, - transportStatusChange: function(currentTime, duration, ispaused) { - this.setState({currentTime: currentTime, duration: duration, transport: null}); - }, - goToNewTime: function(new_time) { - this.setState({ - transport: {gototime: new_time} - }); - }, - render: function() { - var file_hash = this.props.file_hash; - var previews = this.props.mtdsummary.previews; - - if (this.state.medias.length === 0) { - return null; - } - - var url = this.state.medias[this.state.selectedquality].url; - var poster = metadatas.chooseTheCorrectImageURL(file_hash, previews); - var width = 640; - var height = 360; - var className = null; - var isbigsize = this.state.isbigsize; - if (isbigsize) { - width = null; - height = null; - className = "container"; - } - - var transport_status = null; - if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { - transport_status = this.transportStatusChange; - } - - var video = ( - - ); - - var content = null; - if (this.state.medias.length > 1) { - content = ( -
    -
    - {video} -
    - -
    - ); - } else { - content = video; - } - - return ( -
    - {content} - -
    - ); - } -}); - -/** ================================== AUDIO REAML ================================== */ - -metadatas.Audio = React.createClass({ - getInitialState: function() { - return {currentTime: null, duration: null, transport: null}; - }, - transportStatusChange: function(currentTime, duration, ispaused) { - this.setState({currentTime: currentTime, duration: duration, transport: null}); - }, - goToNewTime: function(new_time) { - this.setState({ - transport: {gototime: new_time} - }); - }, - render: function() { - var file_hash = this.props.file_hash; - var previews = this.props.mtdsummary.previews; - var mimetype = this.props.mtdsummary.mimetype; - var reference = this.props.reference; - var master_as_preview_url = this.props.master_as_preview_url; - - var url = null; - if (master_as_preview_url) { - url = master_as_preview_url; - } else if (previews) { - url = metadatas.getFileURL(file_hash, previews.audio_pvw.type, previews.audio_pvw.file); - } - - if (url == null) { - return null; - } - - var transport_status = null; - if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { - transport_status = this.transportStatusChange; - } - - return ( -
    - - - - -
    - -
    -
    - ); - } -}); - -/** ================================== AUDIO DEEP ANALYST VIEWS ================================== */ metadatas.hasAudioGraphicDeepAnalyst = function(previews) { return !(previews.audio_graphic_deepanalyst == null); }; @@ -347,7 +21,7 @@ metadatas.hasAudioGraphicDeepAnalyst = function(previews) { metadatas.AudioGraphicDeepAnalyst = React.createClass({ getInitialState: function() { return { - last_bar_position: -1, + last_time_position: 0, }; }, clickCanvas: function(event) { @@ -390,7 +64,7 @@ metadatas.AudioGraphicDeepAnalyst = React.createClass({ var bar_position = Math.floor(internal_width * position) + left_start; - if (this.state.last_bar_position == bar_position) { + if (Math.floor(this.state.last_time_position * 50) == Math.floor(this.props.currentTime * 50)) { return; } @@ -401,9 +75,16 @@ metadatas.AudioGraphicDeepAnalyst = React.createClass({ var ctx = canvas.getContext("2d"); ctx.fillStyle = "#FFFFFF"; ctx.clearRect(0, 0, width, height); - ctx.fillRect(bar_position,top_start, 2, bottom_stop); - - this.setState({last_bar_position: bar_position}); + ctx.fillRect(bar_position, top_start, 2, bottom_stop); + + ctx.fillStyle = "#999"; + ctx.font = "18px Arial"; + // /*'\u25B6' + " " + */ + var current_timecode = mydmam.format.msecToHMSms(this.props.currentTime * 1000, true, true); + var countdown_timcode = "-" + mydmam.format.msecToHMSms(((Math.ceil(this.props.duration - this.props.currentTime)) * 1000), false, true); + ctx.fillText(current_timecode + " " + countdown_timcode, 60, canvas.height - 10); + + this.setState({last_time_position: this.props.currentTime}); }, render: function() { var previews = this.props.previews; @@ -512,8 +193,7 @@ metadatas.AudioStatsDeepAnalyst = React.createClass({ fontWeight: "bold", borderRadius: 4, marginLeft: "8px", - padding: "1px 7px 2px 6px", - letterSpacing: "-0.5" }}>{label}); + padding: "1px 7px 2px 6px", }}>{label}); } } @@ -704,7 +384,7 @@ metadatas.ButtonSilenceGotoPlay = React.createClass({ style.borderBottom = "1px dotted #ccc"; style.cursor = "pointer"; } - var label = mydmam.format.msecToHMSms(this.props.timevalue); + var label = mydmam.format.msecToHMSms(this.props.timevalue, false, false); return ({label}); } diff --git a/app/react/mydmam/async/pathindex/metadatas/audio.jsx b/app/react/mydmam/async/pathindex/metadatas/audio.jsx new file mode 100644 index 00000000..da3a53a3 --- /dev/null +++ b/app/react/mydmam/async/pathindex/metadatas/audio.jsx @@ -0,0 +1,73 @@ +/* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +metadatas.Audio = React.createClass({ + getInitialState: function() { + return {currentTime: null, duration: null, transport: null}; + }, + transportStatusChange: function(currentTime, duration, ispaused) { + this.setState({currentTime: currentTime, duration: duration, transport: null}); + }, + goToNewTime: function(new_time) { + this.setState({ + transport: {gototime: new_time} + }); + }, + render: function() { + var file_hash = this.props.file_hash; + var previews = this.props.mtdsummary.previews; + var mimetype = this.props.mtdsummary.mimetype; + var reference = this.props.reference; + var master_as_preview_url = this.props.master_as_preview_url; + + var url = null; + if (master_as_preview_url) { + url = master_as_preview_url; + } else if (previews) { + url = metadatas.getFileURL(file_hash, previews.audio_pvw.type, previews.audio_pvw.file); + } + + if (url == null) { + return null; + } + + var transport_status = null; + if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { + transport_status = this.transportStatusChange; + } + + return ( +
    + + + + + +
    + ); + } +}); diff --git a/app/react/mydmam/async/pathindex/metadatas/image.jsx b/app/react/mydmam/async/pathindex/metadatas/image.jsx new file mode 100644 index 00000000..7e51cf07 --- /dev/null +++ b/app/react/mydmam/async/pathindex/metadatas/image.jsx @@ -0,0 +1,103 @@ +/* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +metadatas.ImageURL = function(file_hash, thumbnail) { + if (thumbnail == null) { + return null; + } + return metadatas.getFileURL(file_hash, thumbnail.type, thumbnail.file); +}; + +var chooseTheCorrectImageToDisplay = function(previews, prefered_size) { + if (prefered_size == null) { + prefered_size = "full_size_thumbnail"; + } + + if (prefered_size === "full_size_thumbnail") { + if (previews.full_size_thumbnail) { + return previews.full_size_thumbnail; + } else { + prefered_size = "cartridge_thumbnail"; + } + } + + if (prefered_size === "cartridge_thumbnail") { + if (previews.cartridge_thumbnail) { + return previews.cartridge_thumbnail; + } else { + prefered_size = "icon_thumbnail"; + } + } + + if (prefered_size === "icon_thumbnail") { + if (previews.icon_thumbnail) { + return previews.icon_thumbnail; + } + } + + return null; +}; + +metadatas.chooseTheCorrectImageURL = function(file_hash, previews, prefered_size) { + return metadatas.ImageURL(file_hash, chooseTheCorrectImageToDisplay(previews, prefered_size)); +}; + +metadatas.Image = React.createClass({ + render: function() { + var file_hash = this.props.file_hash; + var previews = this.props.previews; + var prefered_size = this.props.prefered_size; + + var preview = chooseTheCorrectImageToDisplay(previews, prefered_size); + + if (preview === null) { + return null; + } + + var url = metadatas.ImageURL(file_hash, preview); + var width = preview.options.width; + var height = preview.options.height; + + var image = null; + if ((width > 0) & (height > 0)) { + image = ( + {width + ); + } else { + image = ( + + ); + } + + var audio_da_graphic = null; + + if (this.props.hide_audio_da_grahic) { + audio_da_graphic = null; + } else { + var audio_da_graphic = (); + } + + return ( +
    + {image} + {audio_da_graphic} +
    + ); + } +}); diff --git a/app/react/mydmam/async/pathindex/mediaplayer.jsx b/app/react/mydmam/async/pathindex/metadatas/mediaplayer.jsx similarity index 98% rename from app/react/mydmam/async/pathindex/mediaplayer.jsx rename to app/react/mydmam/async/pathindex/metadatas/mediaplayer.jsx index e973003d..27db3943 100644 --- a/app/react/mydmam/async/pathindex/mediaplayer.jsx +++ b/app/react/mydmam/async/pathindex/metadatas/mediaplayer.jsx @@ -15,7 +15,7 @@ * */ -pathindex.Mediaplayer = React.createClass({ +metadatas.Mediaplayer = React.createClass({ propTypes: { audio_only: React.PropTypes.bool, className: React.PropTypes.oneOfType([ diff --git a/app/react/mydmam/async/pathindex/metadatas/metadatas.jsx b/app/react/mydmam/async/pathindex/metadatas/metadatas.jsx new file mode 100644 index 00000000..4c3eeefc --- /dev/null +++ b/app/react/mydmam/async/pathindex/metadatas/metadatas.jsx @@ -0,0 +1,26 @@ +/* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +//var pathindex = mydmam.async.pathindex; + +metadatas.getFileURL = function(file_hash, file_type, file_name) { + if (!mydmam.metadatas.url.metadatafile) { + return ""; + } + return mydmam.metadatas.url.metadatafile.replace("filehashparam1", file_hash).replace("typeparam2", file_type).replace("fileparam3", file_name); +}; + diff --git a/app/react/mydmam/async/pathindex/metadatas/video.jsx b/app/react/mydmam/async/pathindex/metadatas/video.jsx new file mode 100644 index 00000000..2d859747 --- /dev/null +++ b/app/react/mydmam/async/pathindex/metadatas/video.jsx @@ -0,0 +1,185 @@ +/* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +var QualityTabs = React.createClass({ + handleClickSwitchSize: function(event) { + event.preventDefault(); + this.props.onSwitchSize(!this.props.isbigsize); + }, + handleClickSwitchQuality: function(event) { + event.preventDefault(); + this.props.onChangeQuality($(event.currentTarget).data("qualid")); + }, + render: function() { + var switchsize_icon_class = "icon-resize-full"; + if (this.props.isbigsize) { + switchsize_icon_class = "icon-resize-small"; + } + + var medias = this.props.medias; + var selectedquality = this.props.selectedquality; + + var libuttons = []; + for (var i = 0; i < medias.length; i++) { + var switch_qual_li_classes = classNames({ + 'active': (i === selectedquality), + }); + libuttons.push( +
  • + + {medias[i].label} + +
  • + ); + }; + libuttons.push( +
  • + ); + + return ( +
      + {libuttons} +
    + ); + } +}); + +metadatas.Video = React.createClass({ + getInitialState: function() { + return {selectedquality: 0, medias: [], isbigsize: false, transport: null, currentTime: null, duration: null}; + }, + componentDidMount: function() { + var master_as_preview_url = this.props.master_as_preview_url; + var file_hash = this.props.file_hash; + var previews = this.props.mtdsummary.previews; + //var reference = this.props.reference; + var medias = []; + + if (master_as_preview_url) { + var media = {}; + media.url = master_as_preview_url; + media.label = "Original"; + medias.push(media); + } + if (previews) { + if (previews.video_hd_pvw) { + var media = {}; + media.url = metadatas.getFileURL(file_hash, previews.video_hd_pvw.type, previews.video_hd_pvw.file); + media.label = "HD"; + medias.push(media); + } + if (previews.video_sd_pvw) { + var media = {}; + media.url = metadatas.getFileURL(file_hash, previews.video_sd_pvw.type, previews.video_sd_pvw.file); + media.label = "SQ"; + medias.push(media); + } + if (previews.video_lq_pvw) { + var media = {}; + media.url = metadatas.getFileURL(file_hash, previews.video_lq_pvw.type, previews.video_lq_pvw.file); + media.label = "LQ"; + medias.push(media); + } + } + this.setState({medias: medias}); + }, + handleChangeQuality: function(selectedquality) { + this.setState({ + selectedquality: selectedquality, + transport: {macro: "RELOAD_PLAY"} + }); + }, + handleSwitchSize: function(isbigsize) { + this.setState({isbigsize: isbigsize}); + }, + transportStatusChange: function(currentTime, duration, ispaused) { + this.setState({currentTime: currentTime, duration: duration, transport: null}); + }, + goToNewTime: function(new_time) { + this.setState({ + transport: {gototime: new_time} + }); + }, + render: function() { + var file_hash = this.props.file_hash; + var previews = this.props.mtdsummary.previews; + + if (this.state.medias.length === 0) { + return null; + } + + var url = this.state.medias[this.state.selectedquality].url; + var poster = metadatas.chooseTheCorrectImageURL(file_hash, previews); + var width = 640; + var height = 360; + var className = null; + var isbigsize = this.state.isbigsize; + if (isbigsize) { + width = null; + height = null; + className = "container"; + } + + var transport_status = null; + if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { + transport_status = this.transportStatusChange; + } + + var video = ( + + ); + + var content = null; + if (this.state.medias.length > 1) { + content = ( +
    +
    + {video} +
    + +
    + ); + } else { + content = video; + } + + return ( +
    + {content} + +
    + ); + } +}); diff --git a/conf/jsfiles.json b/conf/jsfiles.json index dd0d7f35..68a5f176 100644 --- a/conf/jsfiles.json +++ b/conf/jsfiles.json @@ -1,5 +1,12 @@ { "entries": { + "jsfile:950a4621525e048ff671b2eca76ac031": { + "relative_file_name": "mydmam/async/pathindex/metadatas/metadatas.jsx", + "relative_root_name": "/app/react", + "size": 915, + "date": 1461272300000, + "hash": "613a9edb972a5ee43b221ed505ed88d9" + }, "jsfile:1a278d0a9942bf822dc63a242a7cfad8": { "relative_file_name": "mydmam/async/search/SearchResults.jsx", "relative_root_name": "/app/react", @@ -94,9 +101,9 @@ "jsfile:0b35f733fd15e917eea54c31dadb3a90": { "relative_file_name": "mydmam.format.js", "relative_root_name": "/public/javascripts/src", - "size": 4914, - "date": 1461181680000, - "hash": "1ff693b21cf678fde9664edffd6b48bf" + "size": 5310, + "date": 1461274509000, + "hash": "c615f6445dbe9589997b24b83133a5fa" }, "jsfile:f1eb7ca96b6dc283fdd2f0cf09924e0d": { "relative_file_name": "mydmam.metadatas.js", @@ -140,6 +147,20 @@ "date": 1451348492000, "hash": "9eb3df7b3a1ff207aa467bfdf4bb1a7b" }, + "jsfile:bfc5e4e95c251621e63ca324a9c8b76b": { + "relative_file_name": "mydmam/async/pathindex/metadatas/audio.jsx", + "relative_root_name": "/app/react", + "size": 2272, + "date": 1461275531000, + "hash": "e31db89e260cddee1e2596764b03d23b" + }, + "jsfile:8dad5e3c08394cefbdbbf19ef5005e5e": { + "relative_file_name": "mydmam/async/pathindex/metadatas/image.jsx", + "relative_root_name": "/app/react", + "size": 2659, + "date": 1461275401000, + "hash": "646e2f9e70888e63e03338847fb55259" + }, "jsfile:4cd6c09949d0bb3ecc58393cabad3244": { "relative_file_name": "mydmam/async/ftpserver/list.jsx", "relative_root_name": "/app/react", @@ -168,6 +189,13 @@ "date": 1432409474000, "hash": "a4f90f37554cb484feaec06408a09545" }, + "jsfile:403f651dcf5b764c3b8e3ca70dbd896d": { + "relative_file_name": "mydmam/async/pathindex/metadatas/audio-deep-analyst.jsx", + "relative_root_name": "/app/react", + "size": 15405, + "date": 1461274852000, + "hash": "450024714e976d0b14716468aa98d623" + }, "jsfile:443eb424ffd752530719098e172eff4c": { "relative_file_name": "mydmam.basket.a-header.js", "relative_root_name": "/public/javascripts/src", @@ -189,6 +217,13 @@ "date": 1451768427000, "hash": "c8324d32b18fce9109bc472a1dcba11f" }, + "jsfile:7a0f841f7321d2232688569162ecd4bf": { + "relative_file_name": "mydmam/async/pathindex/metadatas/mediaplayer.jsx", + "relative_root_name": "/app/react", + "size": 3682, + "date": 1461272283000, + "hash": "a71f9dfc32bea9a0e1e4999937954b77" + }, "jsfile:cf409549f79e9b858d8fe9b843e2dbaa": { "relative_file_name": "a.classnames.js", "relative_root_name": "/public/javascripts/src", @@ -196,13 +231,6 @@ "date": 1432409474000, "hash": "b1325cf1e9ed7a6b0b26b0d739493bac" }, - "jsfile:ca088506f37ff18a061f48ccc4ea70f8": { - "relative_file_name": "mydmam/async/pathindex/mediaplayer.jsx", - "relative_root_name": "/app/react", - "size": 3682, - "date": 1460932348000, - "hash": "30477c23f8f41d5f472392cb8de3ce25" - }, "jsfile:d8579c58ae3cc0b7fd62a533c099e6eb": { "relative_file_name": "mydmam.stat.js", "relative_root_name": "/public/javascripts/src", @@ -245,6 +273,13 @@ "date": 1432409474000, "hash": "c9ccdb08c2ec58f3e537362e231c5091" }, + "jsfile:d7d0e2321b94982198e9524cba658a03": { + "relative_file_name": "mydmam/async/pathindex/metadatas/video.jsx", + "relative_root_name": "/app/react", + "size": 5241, + "date": 1461272293000, + "hash": "b188090644847e8631435982b51bab65" + }, "jsfile:020b7cab317b8f90a9bb2a9106ba04ea": { "relative_file_name": "mydmam/async/manager/Header.jsx", "relative_root_name": "/app/react", @@ -315,13 +350,6 @@ "date": 1432409474000, "hash": "038ded3bd9f0a52f9522eed7f39b2e9a" }, - "jsfile:c89c622e66ee11c2c1285ac3ccb0d39b": { - "relative_file_name": "mydmam/async/pathindex/metadatas.jsx", - "relative_root_name": "/app/react", - "size": 23941, - "date": 1461185065000, - "hash": "431dc108608d03af112939d26ec9c3d7" - }, "jsfile:85a44789b2f9cca8441c9d4d28843098": { "relative_file_name": "mydmam/async/pathindex/reactExternalPosition.jsx", "relative_root_name": "/app/react", diff --git a/public/javascripts/_reduced/_internal_concated.js.gz b/public/javascripts/_reduced/_internal_concated.js.gz index 29a1ac61c5cb0ee1ef71cbea0f8a0aa2f0d8b01c..04136815648274a90dc0e6b6685f6971bb3b03a3 100644 GIT binary patch delta 39781 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 N{~siVptJDt0s!)c*jxYr diff --git a/public/javascripts/_reduced/_internal_declarations.js b/public/javascripts/_reduced/_internal_declarations.js index bb98b2bd..74086753 100644 --- a/public/javascripts/_reduced/_internal_declarations.js +++ b/public/javascripts/_reduced/_internal_declarations.js @@ -2,5 +2,6 @@ if(!window.mydmam){window.mydmam={};}if(!window.mydmam.async){window.mydmam.asyn }if(!window.mydmam.async.broker){window.mydmam.async.broker={};}if(!window.mydmam.async.ftpserver){window.mydmam.async.ftpserver={}; }if(!window.mydmam.async.jobs){window.mydmam.async.jobs={};}if(!window.mydmam.async.manager){window.mydmam.async.manager={}; }if(!window.mydmam.async.navigate){window.mydmam.async.navigate={};}if(!window.mydmam.async.pathindex){window.mydmam.async.pathindex={}; +}if(!window.mydmam.async.pathindex.metadatas){window.mydmam.async.pathindex.metadatas={}; }if(!window.mydmam.async.search){window.mydmam.async.search={};}if(!window.mydmam.async.watchfolders){window.mydmam.async.watchfolders={}; }if(!window.mydmam.routes){window.mydmam.routes={};} \ No newline at end of file diff --git a/public/javascripts/_reduced/_mydmam.format.js b/public/javascripts/_reduced/_mydmam.format.js index cfa99dd5..18bae664 100644 --- a/public/javascripts/_reduced/_mydmam.format.js +++ b/public/javascripts/_reduced/_mydmam.format.js @@ -12,11 +12,12 @@ if(g>0){q=q.append(g);if(g>1){q=q.append(" "+i18n("timeunit.weeks")+" ");}else{q if(w<10){q=q.append(0);}q=q.append(w);q=q.append(":");var o=m/3600;var l=Math.floor(o); var k=(o-l)*60;if(k<10){q=q.append(0);}q=q.append(Math.floor(k));q=q.append(":"); var i=Math.round((k-Math.floor(k))*60);if(i<10){q=q.append(0);}q=q.append(i);return q; -};a.format.msecToHMSms=function(l){if(l===0){return"0.000";}var n="";var k=l/1000; -var j=Math.floor(k/3600);if(j>=1){if(j<10){n=n.append(0);}n=n.append(j);n=n.append(":"); -}var g=k/3600;var h=Math.floor(g);var i=(g-h)*60;if(i>=1|j>=1){if(i<10){n=n.append(0); -}n=n.append(Math.floor(i));n=n.append(":");}var m=(i-Math.floor(i))*60;if(m<10){n=n.append(0); -}n=n.append(m.toFixed(3));return n;};a.format.timeAgo=function(i,h,g){var k=(new Date().getTime()-i)/1000; +};a.format.msecToHMSms=function(g,l,h){if(g===0){if(l){if(h){return"00:00:00";}else{return"00:00:00.000"; +}}else{if(h){return"00";}else{return"0.000";}}}var o="";var m=g/1000;var p=Math.floor(m/3600); +if(p>=1|l){if(p<10){o=o.append(0);}o=o.append(p);o=o.append(":");}var n=m/3600;var k=Math.floor(n); +var j=(n-k)*60;if(j>=1|p>=1|l){if(j<10){o=o.append(0);}o=o.append(Math.floor(j)); +o=o.append(":");}var i=(j-Math.floor(j))*60;if(i<10){o=o.append(0);}if(h){o=o.append(Math.floor(i)); +}else{o=o.append(i.toFixed(3));}return o;};a.format.timeAgo=function(i,h,g){var k=(new Date().getTime()-i)/1000; var j=h;if(k<0){j=g;}return i18n(j,a.format.secondsToYWDHMS(Math.abs(k)));};var b=null; if(window.Intl){b=new window.Intl.NumberFormat();}a.format.number=function(g){if(b){return b.format(g); }else{return g;}};})(window.mydmam); \ No newline at end of file diff --git a/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio-deep-analyst.js b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio-deep-analyst.js new file mode 100644 index 00000000..366788fe --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio-deep-analyst.js @@ -0,0 +1,53 @@ +(function(a){a.hasAudioGraphicDeepAnalyst=function(b){return !(b.audio_graphic_deepanalyst==null); +};a.AudioGraphicDeepAnalyst=React.createClass({displayName:"AudioGraphicDeepAnalyst",getInitialState:function(){return{last_time_position:0}; +},clickCanvas:function(i){if(this.props.duration==null|this.props.goToNewTime==null){return; +}if(this.props.duration==0){return;}var e=React.findDOMNode(this.refs.player_cursor); +var h=e.getBoundingClientRect();var d=i.clientX-h.left;var f=this.props.previews.audio_graphic_deepanalyst.options.width; +var g=60;var c=f-(g+12);var b=d-g;if((b>=0)&&(b<=c)){this.props.goToNewTime(this.props.duration*(b/c)); +}},componentDidUpdate:function(){if(this.props.duration==null){return;}if(this.props.duration==0){return; +}var i=this.props.currentTime/this.props.duration;var c=this.props.previews.audio_graphic_deepanalyst.options.width; +var o=this.props.previews.audio_graphic_deepanalyst.options.height;var b=60;var g=10; +var f=o-(g+50);var e=c-(b+12);var j=e;var l=Math.floor(j*i)+b;if(Math.floor(this.state.last_time_position*50)==Math.floor(this.props.currentTime*50)){return; +}var d=React.findDOMNode(this.refs.player_cursor);var n=d.width;var m=d.height;var p=d.getContext("2d"); +p.fillStyle="#FFFFFF";p.clearRect(0,0,c,o);p.fillRect(l,g,2,f);p.fillStyle="#999"; +p.font="18px Arial";var h=mydmam.format.msecToHMSms(this.props.currentTime*1000,true,true); +var k="-"+mydmam.format.msecToHMSms(((Math.ceil(this.props.duration-this.props.currentTime))*1000),false,true); +p.fillText(h+" "+k,60,d.height-10);this.setState({last_time_position:this.props.currentTime}); +},render:function(){var e=this.props.previews;if(e.audio_graphic_deepanalyst==null){return null; +}var c=this.props.file_hash;var d=a.getFileURL(c,e.audio_graphic_deepanalyst.type,e.audio_graphic_deepanalyst.file); +var b=e.audio_graphic_deepanalyst.options;var f=(React.createElement("div",{style:{marginTop:"1em",marginBottom:"1em"}},React.createElement(a.AudioStatsDeepAnalyst,{file_hash:c,lufs_ref:b.lufs_ref,truepeak_ref:b.truepeak_ref}),React.createElement("div",null,React.createElement("img",{src:d,alt:b.width+"x"+b.height,style:{width:b.width,height:b.height}})))); +if(this.props.duration==null){return f;}if(this.props.duration==0){return f;}return(React.createElement("div",{style:{marginTop:"1em",marginBottom:"1em"}},React.createElement(a.AudioStatsDeepAnalyst,{goToNewTime:this.props.goToNewTime,file_hash:c,lufs_ref:b.lufs_ref,truepeak_ref:b.truepeak_ref}),React.createElement("div",{style:{width:b.width,height:b.height}},React.createElement("div",{style:{width:"100%",height:"100%",position:"relative"}},React.createElement("img",{src:d,alt:b.width+"x"+b.height,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0}}),";",React.createElement("canvas",{ref:"player_cursor",onClick:this.clickCanvas,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0,cursor:"text"},width:b.width,height:b.height}))))); +}});a.AudioStatsDeepAnalyst=React.createClass({displayName:"AudioStatsDeepAnalyst",getInitialState:function(){return{analyst_result:null,show_audio_stat_channel:"Overall",show_bottom_panel:false}; +},componentWillMount:function(){mydmam.async.request("stat","metadataanalystresults",{pathelementkey:this.props.file_hash,mtype:"ffaudioda"},function(b){this.setState({analyst_result:b}); +}.bind(this));},toogleBottomPanel:function(){this.setState({show_bottom_panel:!this.state.show_bottom_panel}); +},onChooseAudioStatBlock:function(b){this.setState({show_audio_stat_channel:b});},render:function(){var p=(React.createElement("span",null,"-∞")); +var x=p;var w=p;var e=p;var c=p;var v=p;var s=p;var u=p;var t={color:"#777"};var l={color:"#777"}; +var b=null;if(this.state.analyst_result!=null){x=this.state.analyst_result.integrated_loudness; +w=this.state.analyst_result.integrated_loudness_threshold;e=this.state.analyst_result.loudness_range_LRA; +c=this.state.analyst_result.loudness_range_threshold;v=this.state.analyst_result.loudness_range_LRA_low; +s=this.state.analyst_result.loudness_range_LRA_high;u=this.state.analyst_result.true_peak; +if((x-2)>this.props.lufs_ref){t={color:"#F00"};}else{if((x+2)this.props.truepeak_ref){l={color:"#F00"};}else{l={color:"#0F0"}; +}if(this.state.analyst_result.silences){var m="Silences warn";if(this.state.analyst_result.silences.length==1){m="Silence warn"; +}b=(React.createElement("span",{style:{backgroundColor:"#A00",color:"#FAA",fontWeight:"bold",borderRadius:4,marginLeft:"8px",padding:"1px 7px 2px 6px"}},m)); +}}var r="+";var j=null;if(this.state.show_bottom_panel&(this.state.analyst_result!=null)){r="-"; +var i=null;if(this.state.analyst_result.silences){var g=this.state.analyst_result.silences; +var k=[];for(var h in g){var d=g[h];if(d.to==0){k.push(React.createElement("tr",{key:h},React.createElement("td",{colSpan:"3"},"Ends by silence from ",React.createElement(a.ButtonSilenceGotoPlay,{timevalue:d.from,onGotoSilence:this.props.goToNewTime})))); +}else{k.push(React.createElement("tr",{key:h},React.createElement("td",null,Math.abs(h)+1),React.createElement("td",{style:{textAlign:"center"}},React.createElement(a.ButtonSilenceGotoPlay,{timevalue:d.from,onGotoSilence:this.props.goToNewTime})),React.createElement("td",{style:{textAlign:"center"}},"→ ",React.createElement(a.ButtonSilenceGotoPlay,{timevalue:d.to,onGotoSilence:this.props.goToNewTime})),React.createElement("td",{style:{textAlign:"center"}},"Δ ",React.createElement(a.ButtonSilenceGotoPlay,{timevalue:d.to-d.from})))); +}}i=(React.createElement("div",{style:{marginBottom:"6px",color:"#bbb"}},React.createElement("em",null,"Detected silences:"),React.createElement("table",{style:{marginLeft:"6px"}},React.createElement("tbody",null,k)),React.createElement("small",null,"Silence detect level threshold: ",React.createElement("strong",null,this.state.analyst_result.silencedetect_level_threshold)," dBFS during ",React.createElement("strong",null,this.state.analyst_result.silencedetect_min_duration)," sec."))); +}var q=[];q.push(React.createElement(a.ButtonChooseAudioStatBlock,{selected:this.state.show_audio_stat_channel=="Overall",key:0,channel:"Overall",onChooseAudioStatBlock:this.onChooseAudioStatBlock})); +for(var h in this.state.analyst_result.channels_stat){var o=h;q.push(React.createElement("span",{key:h+1},React.createElement(a.ButtonChooseAudioStatBlock,{channel:o,selected:this.state.show_audio_stat_channel==o,onChooseAudioStatBlock:this.onChooseAudioStatBlock}))); +}var n=null;var f=function(y){var z=""+y.dc_offset.toFixed(6);if(y.dc_offset>=0){z="+"+z; +}return(React.createElement("div",{style:{marginLeft:"6px"}},React.createElement("div",null,"DC Offset: ",React.createElement("strong",{style:{color:"rgb(212, 228, 166)"}},z)),React.createElement("div",null,"Level: min ",React.createElement("strong",{style:{color:"rgb(106, 127, 138)"}},y.min_level),", max ",React.createElement("strong",{style:{color:"rgb(106, 127, 138)"}},y.max_level)),React.createElement("div",null,"Difference: min ",React.createElement("strong",{style:{color:"rgb(121, 141, 147)"}},y.min_difference),", max ",React.createElement("strong",{style:{color:"rgb(121, 141, 147)"}},y.max_difference),", mean ",React.createElement("strong",{style:{color:"rgb(121, 141, 147)"}},y.mean_difference)),React.createElement("div",null,"Peak level: ",React.createElement("strong",{style:{color:"rgb(247, 165, 87)"}},y.peak_level.toFixed(2))," dBFS, count: ",React.createElement("strong",{style:{color:"rgb(247, 165, 87)"}},y.peak_count)),React.createElement("div",null,"RMS (dBFS): level ",React.createElement("strong",{style:{color:"rgb(167,121,80)"}},y.rms_level.toFixed(2)),", peak ",React.createElement("strong",{style:{color:"rgb(167,121,80)"}},y.rms_peak.toFixed(2)),", trough ",React.createElement("strong",{style:{color:"rgb(167,121,80)"}},y.rms_trough.toFixed(2))),React.createElement("div",null,"Crest factor: ",React.createElement("strong",{style:{color:"rgb(78,105,137)"}},y.crest_factor.toFixed(2)),", flat factor: ",React.createElement("strong",{style:{color:"rgb(78,105,137)"}},y.flat_factor.toFixed(2))))); +};if(this.state.show_audio_stat_channel=="Overall"){n=f(this.state.analyst_result.overall_stat); +}else{for(var h in this.state.analyst_result.channels_stat){var o=h;if(this.state.show_audio_stat_channel==o){n=f(this.state.analyst_result.channels_stat[h]); +break;}}}j=(React.createElement("div",{style:{padding:"0px 12px 12px",backgroundColor:"#333",color:"#887",fontFamily:"Tahoma, Arial",width:"300pt"}},i,React.createElement("div",{style:{marginBottom:"6px",marginTop:"0px",paddingTop:"10px"}},q),n,React.createElement("span",{style:{fontWeight:"bold",color:"rgb(92,200,90)"}},this.state.analyst_result.number_of_samples)," samples")); +}return(React.createElement("div",{className:"clearfix",style:{marginBottom:"1em"}},React.createElement("div",{style:{padding:"12px 12px 7px",backgroundColor:"#333",color:"#fff",fontFamily:"Tahoma, Arial",width:"300pt",fontWeight:"bold"}},React.createElement("div",{style:{left:"0px",top:"12px",position:"relative","float":"left",fontSize:"56px"}},React.createElement("span",{style:t},x)),React.createElement("div",{style:{left:"0px",top:"0px",position:"relative","float":"left",fontSize:"16px",color:"#666"}}," LUFS"),React.createElement("div",{style:{left:"18px",top:"22px",position:"relative","float":"left",fontSize:"28px"}},React.createElement("span",{style:l},u)),React.createElement("div",{style:{left:"-30px",top:"0px",position:"relative","float":"left",fontSize:"16px",color:"#666"}}," dB TPK"),React.createElement("div",{style:{left:"-5px",top:"0px",position:"relative","float":"left",lineHeight:"15px",color:"rgb(148, 104, 83)"}},React.createElement("span",{style:{fontWeight:"normal"}},"High"),React.createElement("br",null),React.createElement("span",null,"LRA"),React.createElement("br",null),React.createElement("span",{style:{fontWeight:"normal"}},"Low")),React.createElement("div",{style:{left:"5px",top:"0px",position:"relative","float":"left",lineHeight:"15px",color:"rgb(187, 109, 71)"}},React.createElement("span",null,s),React.createElement("br",null),React.createElement("span",null,"Δ ",e),React.createElement("br",null),React.createElement("span",null,v)),React.createElement("br",{style:{"float":"clear"}}),React.createElement("div",{style:{left:"0px",top:"5px",marginTop:"33px",fontWeight:"normal",lineHeight:"20px",color:"rgb(84, 114, 148)"}},"Integrated threshold: ",React.createElement("span",{style:{fontWeight:"bold"}},w),", range: ",React.createElement("span",{style:{fontWeight:"bold"}},c),b,React.createElement("span",{style:{"float":"right",padding:"0px 6px 3px 7px",border:"1px solid #888",color:"#888",marginTop:"2px",marginRight:"-12px",marginBottom:"0px",cursor:"pointer",width:"11px",textAlign:"center"},onClick:this.toogleBottomPanel},r))),j)); +}});a.ButtonChooseAudioStatBlock=React.createClass({displayName:"ButtonChooseAudioStatBlock",btnClick:function(){this.props.onChooseAudioStatBlock(this.props.channel); +},render:function(){var c={border:"1px solid #222",padding:"3px 6px",marginRight:"2px",color:"#bba",cursor:"pointer"}; +if(this.props.selected){c.border="1px solid #888";c.color="#eee";}var b=this.props.channel; +if(b!="Overall"){b++;b="Ch. "+b;}return(React.createElement("span",{onClick:this.btnClick,style:c},b)); +}});a.ButtonSilenceGotoPlay=React.createClass({displayName:"ButtonSilenceGotoPlay",btnClick:function(){if(this.props.onGotoSilence){this.props.onGotoSilence(this.props.timevalue/1000); +}},render:function(){var c={fontWeight:"bold"};if(this.props.onGotoSilence){c.color="#bbb"; +c.borderBottom="1px dotted #ccc";c.cursor="pointer";}var b=mydmam.format.msecToHMSms(this.props.timevalue,false,false); +return(React.createElement("span",{onClick:this.btnClick,style:c},b));}});})(window.mydmam.async.pathindex.metadatas); diff --git a/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio.js b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio.js new file mode 100644 index 00000000..21329f15 --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.audio.js @@ -0,0 +1,8 @@ +(function(a){a.Audio=React.createClass({displayName:"Audio",getInitialState:function(){return{currentTime:null,duration:null,transport:null}; +},transportStatusChange:function(c,d,b){this.setState({currentTime:c,duration:d,transport:null}); +},goToNewTime:function(b){this.setState({transport:{gototime:b}});},render:function(){var e=this.props.file_hash; +var f=this.props.mtdsummary.previews;var c=this.props.mtdsummary.mimetype;var b=this.props.reference; +var g=this.props.master_as_preview_url;var d=null;if(g){d=g;}else{if(f){d=a.getFileURL(e,f.audio_pvw.type,f.audio_pvw.file); +}}if(d==null){return null;}var h=null;if(a.hasAudioGraphicDeepAnalyst(f)){h=this.transportStatusChange; +}return(React.createElement("div",{style:{marginBottom:"1em"}},React.createElement(a.Mediaplayer,{transport:this.state.transport,transport_status:h,audio_only:true,cantloadingplayerexcuse:i18n("browser.cantloadingplayer"),source_url:d}),React.createElement(a.AudioGraphicDeepAnalyst,{previews:f,file_hash:e,currentTime:this.state.currentTime,duration:this.state.duration,goToNewTime:this.goToNewTime}),React.createElement(a.Image,{file_hash:e,previews:f,hide_audio_da_grahic:true,prefered_size:"cartridge_thumbnail"}))); +}});})(window.mydmam.async.pathindex.metadatas); \ No newline at end of file diff --git a/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.image.js b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.image.js new file mode 100644 index 00000000..81e7bd14 --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.image.js @@ -0,0 +1,11 @@ +(function(b){b.ImageURL=function(c,d){if(d==null){return null;}return b.getFileURL(c,d.type,d.file); +};var a=function(d,c){if(c==null){c="full_size_thumbnail";}if(c==="full_size_thumbnail"){if(d.full_size_thumbnail){return d.full_size_thumbnail; +}else{c="cartridge_thumbnail";}}if(c==="cartridge_thumbnail"){if(d.cartridge_thumbnail){return d.cartridge_thumbnail; +}else{c="icon_thumbnail";}}if(c==="icon_thumbnail"){if(d.icon_thumbnail){return d.icon_thumbnail; +}}return null;};b.chooseTheCorrectImageURL=function(d,e,c){return b.ImageURL(d,a(e,c)); +};b.Image=React.createClass({displayName:"Image",render:function(){var c=this.props.file_hash; +var j=this.props.previews;var h=this.props.prefered_size;var i=a(j,h);if(i===null){return null; +}var d=b.ImageURL(c,i);var e=i.options.width;var k=i.options.height;var g=null;if((e>0)&(k>0)){g=(React.createElement("img",{src:d,className:"img-polaroid",alt:e+"x"+k,style:{width:e,height:k}})); +}else{g=(React.createElement("img",{src:d,className:"img-polaroid"}));}var f=null; +if(this.props.hide_audio_da_grahic){f=null;}else{var f=(React.createElement(b.AudioGraphicDeepAnalyst,{previews:j,file_hash:c})); +}return(React.createElement("div",{style:{marginBottom:"1em"}},g,f));}});})(window.mydmam.async.pathindex.metadatas); diff --git a/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.js b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.js deleted file mode 100644 index 6bc29e30..00000000 --- a/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.js +++ /dev/null @@ -1,89 +0,0 @@ -(function(b){if(!b.metadatas){b.metadatas={};}var d=b.metadatas;d.getFileURL=function(f,e,g){if(!mydmam.metadatas.url.metadatafile){return""; -}return mydmam.metadatas.url.metadatafile.replace("filehashparam1",f).replace("typeparam2",e).replace("fileparam3",g); -};d.ImageURL=function(e,f){if(f==null){return null;}return d.getFileURL(e,f.type,f.file); -};var c=function(f,e){if(e==null){e="full_size_thumbnail";}if(e==="full_size_thumbnail"){if(f.full_size_thumbnail){return f.full_size_thumbnail; -}else{e="cartridge_thumbnail";}}if(e==="cartridge_thumbnail"){if(f.cartridge_thumbnail){return f.cartridge_thumbnail; -}else{e="icon_thumbnail";}}if(e==="icon_thumbnail"){if(f.icon_thumbnail){return f.icon_thumbnail; -}}return null;};d.chooseTheCorrectImageURL=function(f,g,e){return d.ImageURL(f,c(g,e)); -};d.Image=React.createClass({displayName:"Image",render:function(){var h=this.props.file_hash; -var j=this.props.previews;var g=this.props.prefered_size;var l=c(j,g);if(l===null){return null; -}var f=d.ImageURL(h,l);var i=l.options.width;var e=l.options.height;var k=null;if((i>0)&(e>0)){k=(React.createElement("img",{src:f,className:"img-polaroid",alt:i+"x"+e,style:{width:i,height:e}})); -}else{k=(React.createElement("img",{src:f,className:"img-polaroid"}));}return(React.createElement("div",{style:{marginBottom:"1em"}},React.createElement(d.AudioGraphicDeepAnalyst,{previews:j,file_hash:h}),k)); -}});var a=React.createClass({displayName:"QualityTabs",handleClickSwitchSize:function(e){e.preventDefault(); -this.props.onSwitchSize(!this.props.isbigsize);},handleClickSwitchQuality:function(e){e.preventDefault(); -this.props.onChangeQuality($(e.currentTarget).data("qualid"));},render:function(){var f="icon-resize-full"; -if(this.props.isbigsize){f="icon-resize-small";}var e=this.props.medias;var k=this.props.selectedquality; -var g=[];for(var j=0;j1){j=(React.createElement("div",{className:"tabbable tabs-below"},React.createElement("div",{className:"tab-content"},h),React.createElement(a,{isbigsize:f,medias:this.state.medias,selectedquality:this.state.selectedquality,onChangeQuality:this.handleChangeQuality,onSwitchSize:this.handleSwitchSize}))); -}else{j=h;}return(React.createElement("div",{style:{marginBottom:"1em"}},j,React.createElement(d.AudioGraphicDeepAnalyst,{previews:k,file_hash:e,currentTime:this.state.currentTime,duration:this.state.duration,goToNewTime:this.goToNewTime}))); -}});d.Audio=React.createClass({displayName:"Audio",getInitialState:function(){return{currentTime:null,duration:null,transport:null}; -},transportStatusChange:function(f,g,e){this.setState({currentTime:f,duration:g,transport:null}); -},goToNewTime:function(e){this.setState({transport:{gototime:e}});},render:function(){var h=this.props.file_hash; -var i=this.props.mtdsummary.previews;var f=this.props.mtdsummary.mimetype;var e=this.props.reference; -var j=this.props.master_as_preview_url;var g=null;if(j){g=j;}else{if(i){g=d.getFileURL(h,i.audio_pvw.type,i.audio_pvw.file); -}}if(g==null){return null;}var k=null;if(d.hasAudioGraphicDeepAnalyst(i)){k=this.transportStatusChange; -}return(React.createElement("div",{style:{marginBottom:"1em"}},React.createElement(b.Mediaplayer,{transport:this.state.transport,transport_status:k,audio_only:true,cantloadingplayerexcuse:i18n("browser.cantloadingplayer"),source_url:g}),React.createElement(d.AudioGraphicDeepAnalyst,{previews:i,file_hash:h,currentTime:this.state.currentTime,duration:this.state.duration,goToNewTime:this.goToNewTime}),React.createElement("div",{className:"pull-right"},React.createElement(d.Image,{file_hash:h,previews:i,prefered_size:"cartridge_thumbnail"})))); -}});d.hasAudioGraphicDeepAnalyst=function(e){return !(e.audio_graphic_deepanalyst==null); -};d.AudioGraphicDeepAnalyst=React.createClass({displayName:"AudioGraphicDeepAnalyst",getInitialState:function(){return{last_bar_position:-1}; -},clickCanvas:function(l){if(this.props.duration==null|this.props.goToNewTime==null){return; -}if(this.props.duration==0){return;}var h=React.findDOMNode(this.refs.player_cursor); -var k=h.getBoundingClientRect();var g=l.clientX-k.left;var i=this.props.previews.audio_graphic_deepanalyst.options.width; -var j=60;var f=i-(j+12);var e=g-j;if((e>=0)&&(e<=f)){this.props.goToNewTime(this.props.duration*(e/f)); -}},componentDidUpdate:function(){if(this.props.duration==null){return;}if(this.props.duration==0){return; -}var k=this.props.currentTime/this.props.duration;var f=this.props.previews.audio_graphic_deepanalyst.options.width; -var p=this.props.previews.audio_graphic_deepanalyst.options.height;var e=60;var j=10; -var i=p-(j+50);var h=f-(e+12);var l=h;var m=Math.floor(l*k)+e;if(this.state.last_bar_position==m){return; -}var g=React.findDOMNode(this.refs.player_cursor);var o=g.width;var n=g.height;var q=g.getContext("2d"); -q.fillStyle="#FFFFFF";q.clearRect(0,0,f,p);q.fillRect(m,j,2,i);this.setState({last_bar_position:m}); -},render:function(){var h=this.props.previews;if(h.audio_graphic_deepanalyst==null){return null; -}var f=this.props.file_hash;var g=d.getFileURL(f,h.audio_graphic_deepanalyst.type,h.audio_graphic_deepanalyst.file); -var e=h.audio_graphic_deepanalyst.options;var i=(React.createElement("div",{style:{marginTop:"1em",marginBottom:"1em"}},React.createElement(d.AudioStatsDeepAnalyst,{file_hash:f,lufs_ref:e.lufs_ref,truepeak_ref:e.truepeak_ref}),React.createElement("div",null,React.createElement("img",{src:g,alt:e.width+"x"+e.height,style:{width:e.width,height:e.height}})))); -if(this.props.duration==null){return i;}if(this.props.duration==0){return i;}return(React.createElement("div",{style:{marginTop:"1em",marginBottom:"1em"}},React.createElement(d.AudioStatsDeepAnalyst,{goToNewTime:this.props.goToNewTime,file_hash:f,lufs_ref:e.lufs_ref,truepeak_ref:e.truepeak_ref}),React.createElement("div",{style:{width:e.width,height:e.height}},React.createElement("div",{style:{width:"100%",height:"100%",position:"relative"}},React.createElement("img",{src:g,alt:e.width+"x"+e.height,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0}}),";",React.createElement("canvas",{ref:"player_cursor",onClick:this.clickCanvas,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0,cursor:"text"},width:e.width,height:e.height}))))); -}});d.AudioStatsDeepAnalyst=React.createClass({displayName:"AudioStatsDeepAnalyst",getInitialState:function(){return{analyst_result:null,show_audio_stat_channel:"Overall",show_bottom_panel:false}; -},componentWillMount:function(){mydmam.async.request("stat","metadataanalystresults",{pathelementkey:this.props.file_hash,mtype:"ffaudioda"},function(e){this.setState({analyst_result:e}); -}.bind(this));},toogleBottomPanel:function(){this.setState({show_bottom_panel:!this.state.show_bottom_panel}); -},onChooseAudioStatBlock:function(e){this.setState({show_audio_stat_channel:e});},render:function(){var s=(React.createElement("span",null,"-∞")); -var A=s;var z=s;var h=s;var f=s;var y=s;var v=s;var x=s;var w={color:"#777"};var o={color:"#777"}; -var e=null;if(this.state.analyst_result!=null){A=this.state.analyst_result.integrated_loudness; -z=this.state.analyst_result.integrated_loudness_threshold;h=this.state.analyst_result.loudness_range_LRA; -f=this.state.analyst_result.loudness_range_threshold;y=this.state.analyst_result.loudness_range_LRA_low; -v=this.state.analyst_result.loudness_range_LRA_high;x=this.state.analyst_result.true_peak; -if((A-2)>this.props.lufs_ref){w={color:"#F00"};}else{if((A+2)this.props.truepeak_ref){o={color:"#F00"};}else{o={color:"#0F0"}; -}if(this.state.analyst_result.silences){var p="Silences warn";if(this.state.analyst_result.silences.length==1){p="Silence warn"; -}e=(React.createElement("span",{style:{backgroundColor:"#A00",color:"#FAA",fontWeight:"bold",borderRadius:4,marginLeft:"8px",padding:"1px 7px 2px 6px",letterSpacing:"-0.5"}},p)); -}}var u="+";var m=null;if(this.state.show_bottom_panel&(this.state.analyst_result!=null)){u="-"; -var l=null;if(this.state.analyst_result.silences){var j=this.state.analyst_result.silences; -var n=[];for(var k in j){var g=j[k];if(g.to==0){n.push(React.createElement("tr",{key:k},React.createElement("td",{colSpan:"3"},"Ends by silence from ",React.createElement(d.ButtonSilenceGotoPlay,{timevalue:g.from,onGotoSilence:this.props.goToNewTime})))); -}else{n.push(React.createElement("tr",{key:k},React.createElement("td",null,Math.abs(k)+1),React.createElement("td",{style:{textAlign:"center"}},React.createElement(d.ButtonSilenceGotoPlay,{timevalue:g.from,onGotoSilence:this.props.goToNewTime})),React.createElement("td",{style:{textAlign:"center"}},"→ ",React.createElement(d.ButtonSilenceGotoPlay,{timevalue:g.to,onGotoSilence:this.props.goToNewTime})),React.createElement("td",{style:{textAlign:"center"}},"Δ ",React.createElement(d.ButtonSilenceGotoPlay,{timevalue:g.to-g.from})))); -}}l=(React.createElement("div",{style:{marginBottom:"6px",color:"#bbb"}},React.createElement("em",null,"Detected silences:"),React.createElement("table",{style:{marginLeft:"6px"}},React.createElement("tbody",null,n)),React.createElement("small",null,"Silence detect level threshold: ",React.createElement("strong",null,this.state.analyst_result.silencedetect_level_threshold)," dBFS during ",React.createElement("strong",null,this.state.analyst_result.silencedetect_min_duration)," sec."))); -}var t=[];t.push(React.createElement(d.ButtonChooseAudioStatBlock,{selected:this.state.show_audio_stat_channel=="Overall",key:0,channel:"Overall",onChooseAudioStatBlock:this.onChooseAudioStatBlock})); -for(var k in this.state.analyst_result.channels_stat){var r=k;t.push(React.createElement("span",{key:k+1},React.createElement(d.ButtonChooseAudioStatBlock,{channel:r,selected:this.state.show_audio_stat_channel==r,onChooseAudioStatBlock:this.onChooseAudioStatBlock}))); -}var q=null;var i=function(B){var C=""+B.dc_offset.toFixed(6);if(B.dc_offset>=0){C="+"+C; -}return(React.createElement("div",{style:{marginLeft:"6px"}},React.createElement("div",null,"DC Offset: ",React.createElement("strong",{style:{color:"rgb(212, 228, 166)"}},C)),React.createElement("div",null,"Level: min ",React.createElement("strong",{style:{color:"rgb(106, 127, 138)"}},B.min_level),", max ",React.createElement("strong",{style:{color:"rgb(106, 127, 138)"}},B.max_level)),React.createElement("div",null,"Difference: min ",React.createElement("strong",{style:{color:"rgb(121, 141, 147)"}},B.min_difference),", max ",React.createElement("strong",{style:{color:"rgb(121, 141, 147)"}},B.max_difference),", mean ",React.createElement("strong",{style:{color:"rgb(121, 141, 147)"}},B.mean_difference)),React.createElement("div",null,"Peak level: ",React.createElement("strong",{style:{color:"rgb(247, 165, 87)"}},B.peak_level.toFixed(2))," dBFS, count: ",React.createElement("strong",{style:{color:"rgb(247, 165, 87)"}},B.peak_count)),React.createElement("div",null,"RMS (dBFS): level ",React.createElement("strong",{style:{color:"rgb(167,121,80)"}},B.rms_level.toFixed(2)),", peak ",React.createElement("strong",{style:{color:"rgb(167,121,80)"}},B.rms_peak.toFixed(2)),", trough ",React.createElement("strong",{style:{color:"rgb(167,121,80)"}},B.rms_trough.toFixed(2))),React.createElement("div",null,"Crest factor: ",React.createElement("strong",{style:{color:"rgb(78,105,137)"}},B.crest_factor.toFixed(2)),", flat factor: ",React.createElement("strong",{style:{color:"rgb(78,105,137)"}},B.flat_factor.toFixed(2))))); -};if(this.state.show_audio_stat_channel=="Overall"){q=i(this.state.analyst_result.overall_stat); -}else{for(var k in this.state.analyst_result.channels_stat){var r=k;if(this.state.show_audio_stat_channel==r){q=i(this.state.analyst_result.channels_stat[k]); -break;}}}m=(React.createElement("div",{style:{padding:"0px 12px 12px",backgroundColor:"#333",color:"#887",fontFamily:"Tahoma, Arial",width:"300pt"}},l,React.createElement("div",{style:{marginBottom:"6px",marginTop:"0px",paddingTop:"10px"}},t),q,React.createElement("span",{style:{fontWeight:"bold",color:"rgb(92,200,90)"}},this.state.analyst_result.number_of_samples)," samples")); -}return(React.createElement("div",{className:"clearfix",style:{marginBottom:"1em"}},React.createElement("div",{style:{padding:"12px 12px 7px",backgroundColor:"#333",color:"#fff",fontFamily:"Tahoma, Arial",width:"300pt",fontWeight:"bold"}},React.createElement("div",{style:{left:"0px",top:"12px",position:"relative","float":"left",fontSize:"56px"}},React.createElement("span",{style:w},A)),React.createElement("div",{style:{left:"0px",top:"0px",position:"relative","float":"left",fontSize:"16px",color:"#666"}}," LUFS"),React.createElement("div",{style:{left:"18px",top:"22px",position:"relative","float":"left",fontSize:"28px"}},React.createElement("span",{style:o},x)),React.createElement("div",{style:{left:"-30px",top:"0px",position:"relative","float":"left",fontSize:"16px",color:"#666"}}," dB TPK"),React.createElement("div",{style:{left:"-5px",top:"0px",position:"relative","float":"left",lineHeight:"15px",color:"rgb(148, 104, 83)"}},React.createElement("span",{style:{fontWeight:"normal"}},"High"),React.createElement("br",null),React.createElement("span",null,"LRA"),React.createElement("br",null),React.createElement("span",{style:{fontWeight:"normal"}},"Low")),React.createElement("div",{style:{left:"5px",top:"0px",position:"relative","float":"left",lineHeight:"15px",color:"rgb(187, 109, 71)"}},React.createElement("span",null,v),React.createElement("br",null),React.createElement("span",null,"Δ ",h),React.createElement("br",null),React.createElement("span",null,y)),React.createElement("br",{style:{"float":"clear"}}),React.createElement("div",{style:{left:"0px",top:"5px",marginTop:"33px",fontWeight:"normal",lineHeight:"20px",color:"rgb(84, 114, 148)"}},"Integrated threshold: ",React.createElement("span",{style:{fontWeight:"bold"}},z),", range: ",React.createElement("span",{style:{fontWeight:"bold"}},f),e,React.createElement("span",{style:{"float":"right",padding:"0px 6px 3px 7px",border:"1px solid #888",color:"#888",marginTop:"2px",marginRight:"-12px",marginBottom:"0px",cursor:"pointer",width:"11px",textAlign:"center"},onClick:this.toogleBottomPanel},u))),m)); -}});d.ButtonChooseAudioStatBlock=React.createClass({displayName:"ButtonChooseAudioStatBlock",btnClick:function(){this.props.onChooseAudioStatBlock(this.props.channel); -},render:function(){var f={border:"1px solid #222",padding:"3px 6px",marginRight:"2px",color:"#bba",cursor:"pointer"}; -if(this.props.selected){f.border="1px solid #888";f.color="#eee";}var e=this.props.channel; -if(e!="Overall"){e++;e="Ch. "+e;}return(React.createElement("span",{onClick:this.btnClick,style:f},e)); -}});d.ButtonSilenceGotoPlay=React.createClass({displayName:"ButtonSilenceGotoPlay",btnClick:function(){if(this.props.onGotoSilence){this.props.onGotoSilence(this.props.timevalue/1000); -}},render:function(){var f={fontWeight:"bold"};if(this.props.onGotoSilence){f.color="#bbb"; -f.borderBottom="1px dotted #ccc";f.cursor="pointer";}var e=mydmam.format.msecToHMSms(this.props.timevalue); -return(React.createElement("span",{onClick:this.btnClick,style:f},e));}});})(window.mydmam.async.pathindex); diff --git a/public/javascripts/_reduced/mydmam.async.pathindex.mediaplayer.js b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.mediaplayer.js similarity index 97% rename from public/javascripts/_reduced/mydmam.async.pathindex.mediaplayer.js rename to public/javascripts/_reduced/mydmam.async.pathindex.metadatas.mediaplayer.js index c4b8ad52..01e95fe5 100644 --- a/public/javascripts/_reduced/mydmam.async.pathindex.mediaplayer.js +++ b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.mediaplayer.js @@ -10,4 +10,4 @@ c.removeEventListener("loadedmetadata",b);c.addEventListener("timeupdate",e,fals };c.addEventListener("loadedmetadata",b,false);}}else{if(g.gototime!=null){c.currentTime=g.gototime; }}},render:function(){if(this.props.audio_only){return(React.createElement("audio",{ref:"videoplayer",controls:"controls",preload:"auto"},this.props.cantloadingplayerexcuse,React.createElement("source",{src:this.props.source_url}))); }else{return(React.createElement("video",{ref:"videoplayer",controls:"controls",className:this.props.className,width:this.props.width,height:this.props.height,preload:"auto",poster:this.props.poster},this.props.cantloadingplayerexcuse,React.createElement("source",{src:this.props.source_url}))); -}}});})(window.mydmam.async.pathindex); \ No newline at end of file +}}});})(window.mydmam.async.pathindex.metadatas); \ No newline at end of file diff --git a/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.metadatas.js b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.metadatas.js new file mode 100644 index 00000000..dd2221cf --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.metadatas.js @@ -0,0 +1,3 @@ +(function(a){a.getFileURL=function(c,b,d){if(!mydmam.metadatas.url.metadatafile){return""; +}return mydmam.metadatas.url.metadatafile.replace("filehashparam1",c).replace("typeparam2",b).replace("fileparam3",d); +};})(window.mydmam.async.pathindex.metadatas); \ No newline at end of file diff --git a/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.video.js b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.video.js new file mode 100644 index 00000000..21e55535 --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.pathindex.metadatas.video.js @@ -0,0 +1,22 @@ +(function(b){var a=React.createClass({displayName:"QualityTabs",handleClickSwitchSize:function(c){c.preventDefault(); +this.props.onSwitchSize(!this.props.isbigsize);},handleClickSwitchQuality:function(c){c.preventDefault(); +this.props.onChangeQuality($(c.currentTarget).data("qualid"));},render:function(){var d="icon-resize-full"; +if(this.props.isbigsize){d="icon-resize-small";}var c=this.props.medias;var h=this.props.selectedquality; +var e=[];for(var g=0;g1){h=(React.createElement("div",{className:"tabbable tabs-below"},React.createElement("div",{className:"tab-content"},f),React.createElement(a,{isbigsize:d,medias:this.state.medias,selectedquality:this.state.selectedquality,onChangeQuality:this.handleChangeQuality,onSwitchSize:this.handleSwitchSize}))); +}else{h=f;}return(React.createElement("div",{style:{marginBottom:"1em"}},h,React.createElement(b.AudioGraphicDeepAnalyst,{previews:i,file_hash:c,currentTime:this.state.currentTime,duration:this.state.duration,goToNewTime:this.goToNewTime}))); +}});})(window.mydmam.async.pathindex.metadatas); \ No newline at end of file diff --git a/public/javascripts/_transformed/_internal_declarations.js b/public/javascripts/_transformed/_internal_declarations.js index 75beb7c5..f0654fbd 100644 --- a/public/javascripts/_transformed/_internal_declarations.js +++ b/public/javascripts/_transformed/_internal_declarations.js @@ -11,6 +11,7 @@ if(!window.mydmam.async.jobs){window.mydmam.async.jobs = {};} if(!window.mydmam.async.manager){window.mydmam.async.manager = {};} if(!window.mydmam.async.navigate){window.mydmam.async.navigate = {};} if(!window.mydmam.async.pathindex){window.mydmam.async.pathindex = {};} +if(!window.mydmam.async.pathindex.metadatas){window.mydmam.async.pathindex.metadatas = {};} if(!window.mydmam.async.search){window.mydmam.async.search = {};} if(!window.mydmam.async.watchfolders){window.mydmam.async.watchfolders = {};} if(!window.mydmam.routes){window.mydmam.routes = {};} diff --git a/public/javascripts/_transformed/_mydmam.format.js b/public/javascripts/_transformed/_mydmam.format.js index 94c1351d..7ef744bd 100644 --- a/public/javascripts/_transformed/_mydmam.format.js +++ b/public/javascripts/_transformed/_mydmam.format.js @@ -131,16 +131,28 @@ return sb; }; - mydmam.format.msecToHMSms = function(msec) { + mydmam.format.msecToHMSms = function(msec, always_display_hours_min, no_display_msec) { if (msec === 0) { - return "0.000"; + if (always_display_hours_min) { + if (no_display_msec) { + return "00:00:00"; + } else { + return "00:00:00.000"; + } + } else { + if (no_display_msec) { + return "00"; + } else { + return "0.000"; + } + } } var sb = ''; var sec = msec / 1000; var hrs = Math.floor(sec / 3600); - if (hrs >= 1) { + if (hrs >= 1 | always_display_hours_min) { if (hrs < 10) { sb = sb.append(0); } @@ -152,7 +164,7 @@ var diff_hours = Math.floor(_diff_hours); // en heures var min = (_diff_hours - diff_hours) * 60; - if (min >= 1 | hrs >= 1) { + if (min >= 1 | hrs >= 1 | always_display_hours_min) { if (min < 10) { sb = sb.append(0); } @@ -167,7 +179,11 @@ sb = sb.append(0); } - sb = sb.append(secresult.toFixed(3)); + if (no_display_msec) { + sb = sb.append(Math.floor(secresult)); + } else { + sb = sb.append(secresult.toFixed(3)); + } return sb; }; diff --git a/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.js b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.audio-deep-analyst.js similarity index 62% rename from public/javascripts/_transformed/mydmam.async.pathindex.metadatas.js rename to public/javascripts/_transformed/mydmam.async.pathindex.metadatas.audio-deep-analyst.js index 9e54daf1..beb0ce9d 100644 --- a/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.js +++ b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.audio-deep-analyst.js @@ -1,4 +1,4 @@ -/** This file is automatically generated! Do not edit. */ (function(pathindex) { /* +/** This file is automatically generated! Do not edit. */ (function(metadatas) { /* * This file is part of MyDMAM. * * This program is free software; you can redistribute it and/or modify @@ -11,335 +11,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * - * Copyright (C) hdsdi3g for hd3g.tv 2015 + * Copyright (C) hdsdi3g for hd3g.tv 2016 * */ - -if(!pathindex.metadatas){pathindex.metadatas = {};} - -var metadatas = pathindex.metadatas; - -metadatas.getFileURL = function(file_hash, file_type, file_name) { - if (!mydmam.metadatas.url.metadatafile) { - return ""; - } - return mydmam.metadatas.url.metadatafile.replace("filehashparam1", file_hash).replace("typeparam2", file_type).replace("fileparam3", file_name); -}; - -/** ================================== IMAGE REAML ================================== */ - -metadatas.ImageURL = function(file_hash, thumbnail) { - if (thumbnail == null) { - return null; - } - return metadatas.getFileURL(file_hash, thumbnail.type, thumbnail.file); -}; - -var chooseTheCorrectImageToDisplay = function(previews, prefered_size) { - if (prefered_size == null) { - prefered_size = "full_size_thumbnail"; - } - - if (prefered_size === "full_size_thumbnail") { - if (previews.full_size_thumbnail) { - return previews.full_size_thumbnail; - } else { - prefered_size = "cartridge_thumbnail"; - } - } - - if (prefered_size === "cartridge_thumbnail") { - if (previews.cartridge_thumbnail) { - return previews.cartridge_thumbnail; - } else { - prefered_size = "icon_thumbnail"; - } - } - - if (prefered_size === "icon_thumbnail") { - if (previews.icon_thumbnail) { - return previews.icon_thumbnail; - } - } - - return null; -}; - -metadatas.chooseTheCorrectImageURL = function(file_hash, previews, prefered_size) { - return metadatas.ImageURL(file_hash, chooseTheCorrectImageToDisplay(previews, prefered_size)); -}; - -metadatas.Image = React.createClass({displayName: "Image", - render: function() { - var file_hash = this.props.file_hash; - var previews = this.props.previews; - var prefered_size = this.props.prefered_size; - - var preview = chooseTheCorrectImageToDisplay(previews, prefered_size); - - if (preview === null) { - return null; - } - - var url = metadatas.ImageURL(file_hash, preview); - var width = preview.options.width; - var height = preview.options.height; - - var image = null; - if ((width > 0) & (height > 0)) { - image = ( - React.createElement("img", {src: url, className: "img-polaroid", alt: width + "x" + height, style: {width: width, height: height}}) - ); - } else { - image = ( - React.createElement("img", {src: url, className: "img-polaroid"}) - ); - } - - return ( - React.createElement("div", {style: {marginBottom: "1em"}}, - React.createElement(metadatas.AudioGraphicDeepAnalyst, { - previews: previews, - file_hash: file_hash}), - image - ) - ); - } -}); - -/** ================================== VIDEO REAML ================================== */ - -var QualityTabs = React.createClass({displayName: "QualityTabs", - handleClickSwitchSize: function(event) { - event.preventDefault(); - this.props.onSwitchSize(!this.props.isbigsize); - }, - handleClickSwitchQuality: function(event) { - event.preventDefault(); - this.props.onChangeQuality($(event.currentTarget).data("qualid")); - }, - render: function() { - var switchsize_icon_class = "icon-resize-full"; - if (this.props.isbigsize) { - switchsize_icon_class = "icon-resize-small"; - } - - var medias = this.props.medias; - var selectedquality = this.props.selectedquality; - - var libuttons = []; - for (var i = 0; i < medias.length; i++) { - var switch_qual_li_classes = classNames({ - 'active': (i === selectedquality), - }); - libuttons.push( - React.createElement("li", {key: i, className: switch_qual_li_classes}, - React.createElement("a", {href: medias[i].url, style: {outline: "none"}, onClick: this.handleClickSwitchQuality, "data-qualid": i}, - medias[i].label - ) - ) - ); - }; - libuttons.push( - React.createElement("li", {key: "switchsize"}, React.createElement("a", {href: "", style: {outline: "none"}, onClick: this.handleClickSwitchSize}, React.createElement("i", {className: switchsize_icon_class}))) - ); - - return ( - React.createElement("ul", {className: "nav nav-tabs"}, - libuttons - ) - ); - } -}); - -metadatas.Video = React.createClass({displayName: "Video", - getInitialState: function() { - return {selectedquality: 0, medias: [], isbigsize: false, transport: null, currentTime: null, duration: null}; - }, - componentDidMount: function() { - var master_as_preview_url = this.props.master_as_preview_url; - var file_hash = this.props.file_hash; - var previews = this.props.mtdsummary.previews; - //var reference = this.props.reference; - var medias = []; - - if (master_as_preview_url) { - var media = {}; - media.url = master_as_preview_url; - media.label = "Original"; - medias.push(media); - } - if (previews) { - if (previews.video_hd_pvw) { - var media = {}; - media.url = metadatas.getFileURL(file_hash, previews.video_hd_pvw.type, previews.video_hd_pvw.file); - media.label = "HD"; - medias.push(media); - } - if (previews.video_sd_pvw) { - var media = {}; - media.url = metadatas.getFileURL(file_hash, previews.video_sd_pvw.type, previews.video_sd_pvw.file); - media.label = "SQ"; - medias.push(media); - } - if (previews.video_lq_pvw) { - var media = {}; - media.url = metadatas.getFileURL(file_hash, previews.video_lq_pvw.type, previews.video_lq_pvw.file); - media.label = "LQ"; - medias.push(media); - } - } - this.setState({medias: medias}); - }, - handleChangeQuality: function(selectedquality) { - this.setState({ - selectedquality: selectedquality, - transport: {macro: "RELOAD_PLAY"} - }); - }, - handleSwitchSize: function(isbigsize) { - this.setState({isbigsize: isbigsize}); - }, - transportStatusChange: function(currentTime, duration, ispaused) { - this.setState({currentTime: currentTime, duration: duration, transport: null}); - }, - goToNewTime: function(new_time) { - this.setState({ - transport: {gototime: new_time} - }); - }, - render: function() { - var file_hash = this.props.file_hash; - var previews = this.props.mtdsummary.previews; - - if (this.state.medias.length === 0) { - return null; - } - - var url = this.state.medias[this.state.selectedquality].url; - var poster = metadatas.chooseTheCorrectImageURL(file_hash, previews); - var width = 640; - var height = 360; - var className = null; - var isbigsize = this.state.isbigsize; - if (isbigsize) { - width = null; - height = null; - className = "container"; - } - - var transport_status = null; - if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { - transport_status = this.transportStatusChange; - } - - var video = ( - React.createElement(pathindex.Mediaplayer, { - transport: this.state.transport, - transport_status: transport_status, - className: className, - width: width, - height: height, - poster: poster, - cantloadingplayerexcuse: i18n("browser.cantloadingplayer"), - source_url: url}) - ); - - var content = null; - if (this.state.medias.length > 1) { - content = ( - React.createElement("div", {className: "tabbable tabs-below"}, - React.createElement("div", {className: "tab-content"}, - video - ), - React.createElement(QualityTabs, { - isbigsize: isbigsize, - medias: this.state.medias, - selectedquality: this.state.selectedquality, - onChangeQuality: this.handleChangeQuality, - onSwitchSize: this.handleSwitchSize}) - ) - ); - } else { - content = video; - } - - return ( - React.createElement("div", {style: {marginBottom: "1em"}}, - content, - React.createElement(metadatas.AudioGraphicDeepAnalyst, { - previews: previews, - file_hash: file_hash, - currentTime: this.state.currentTime, - duration: this.state.duration, - goToNewTime: this.goToNewTime}) - ) - ); - } -}); - -/** ================================== AUDIO REAML ================================== */ - -metadatas.Audio = React.createClass({displayName: "Audio", - getInitialState: function() { - return {currentTime: null, duration: null, transport: null}; - }, - transportStatusChange: function(currentTime, duration, ispaused) { - this.setState({currentTime: currentTime, duration: duration, transport: null}); - }, - goToNewTime: function(new_time) { - this.setState({ - transport: {gototime: new_time} - }); - }, - render: function() { - var file_hash = this.props.file_hash; - var previews = this.props.mtdsummary.previews; - var mimetype = this.props.mtdsummary.mimetype; - var reference = this.props.reference; - var master_as_preview_url = this.props.master_as_preview_url; - - var url = null; - if (master_as_preview_url) { - url = master_as_preview_url; - } else if (previews) { - url = metadatas.getFileURL(file_hash, previews.audio_pvw.type, previews.audio_pvw.file); - } - - if (url == null) { - return null; - } - - var transport_status = null; - if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { - transport_status = this.transportStatusChange; - } - - return ( - React.createElement("div", {style: {marginBottom: "1em"}}, - React.createElement(pathindex.Mediaplayer, { - transport: this.state.transport, - transport_status: transport_status, - audio_only: true, - cantloadingplayerexcuse: i18n("browser.cantloadingplayer"), - source_url: url}), - - React.createElement(metadatas.AudioGraphicDeepAnalyst, { - previews: previews, - file_hash: file_hash, - currentTime: this.state.currentTime, - duration: this.state.duration, - goToNewTime: this.goToNewTime}), - - React.createElement("div", {className: "pull-right"}, - React.createElement(metadatas.Image, {file_hash: file_hash, previews: previews, prefered_size: "cartridge_thumbnail"}) - ) - ) - ); - } -}); - -/** ================================== AUDIO DEEP ANALYST VIEWS ================================== */ metadatas.hasAudioGraphicDeepAnalyst = function(previews) { return !(previews.audio_graphic_deepanalyst == null); }; @@ -347,7 +21,7 @@ metadatas.hasAudioGraphicDeepAnalyst = function(previews) { metadatas.AudioGraphicDeepAnalyst = React.createClass({displayName: "AudioGraphicDeepAnalyst", getInitialState: function() { return { - last_bar_position: -1, + last_time_position: 0, }; }, clickCanvas: function(event) { @@ -390,7 +64,7 @@ metadatas.AudioGraphicDeepAnalyst = React.createClass({displayName: "AudioGraphi var bar_position = Math.floor(internal_width * position) + left_start; - if (this.state.last_bar_position == bar_position) { + if (Math.floor(this.state.last_time_position * 50) == Math.floor(this.props.currentTime * 50)) { return; } @@ -401,9 +75,16 @@ metadatas.AudioGraphicDeepAnalyst = React.createClass({displayName: "AudioGraphi var ctx = canvas.getContext("2d"); ctx.fillStyle = "#FFFFFF"; ctx.clearRect(0, 0, width, height); - ctx.fillRect(bar_position,top_start, 2, bottom_stop); - - this.setState({last_bar_position: bar_position}); + ctx.fillRect(bar_position, top_start, 2, bottom_stop); + + ctx.fillStyle = "#999"; + ctx.font = "18px Arial"; + // /*'\u25B6' + " " + */ + var current_timecode = mydmam.format.msecToHMSms(this.props.currentTime * 1000, true, true); + var countdown_timcode = "-" + mydmam.format.msecToHMSms(((Math.ceil(this.props.duration - this.props.currentTime)) * 1000), false, true); + ctx.fillText(current_timecode + " " + countdown_timcode, 60, canvas.height - 10); + + this.setState({last_time_position: this.props.currentTime}); }, render: function() { var previews = this.props.previews; @@ -512,8 +193,7 @@ metadatas.AudioStatsDeepAnalyst = React.createClass({displayName: "AudioStatsDee fontWeight: "bold", borderRadius: 4, marginLeft: "8px", - padding: "1px 7px 2px 6px", - letterSpacing: "-0.5"}}, label)); + padding: "1px 7px 2px 6px", }}, label)); } } @@ -704,12 +384,12 @@ metadatas.ButtonSilenceGotoPlay = React.createClass({displayName: "ButtonSilence style.borderBottom = "1px dotted #ccc"; style.cursor = "pointer"; } - var label = mydmam.format.msecToHMSms(this.props.timevalue); + var label = mydmam.format.msecToHMSms(this.props.timevalue, false, false); return (React.createElement("span", {onClick: this.btnClick, style: style}, label)); } }); -})(window.mydmam.async.pathindex); +})(window.mydmam.async.pathindex.metadatas); // Generated by hd3gtv.mydmam.web.JSProcessor for the module internal -// Source hash: 431dc108608d03af112939d26ec9c3d7 +// Source hash: 450024714e976d0b14716468aa98d623 diff --git a/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.audio.js b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.audio.js new file mode 100644 index 00000000..1b02589c --- /dev/null +++ b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.audio.js @@ -0,0 +1,77 @@ +/** This file is automatically generated! Do not edit. */ (function(metadatas) { /* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +metadatas.Audio = React.createClass({displayName: "Audio", + getInitialState: function() { + return {currentTime: null, duration: null, transport: null}; + }, + transportStatusChange: function(currentTime, duration, ispaused) { + this.setState({currentTime: currentTime, duration: duration, transport: null}); + }, + goToNewTime: function(new_time) { + this.setState({ + transport: {gototime: new_time} + }); + }, + render: function() { + var file_hash = this.props.file_hash; + var previews = this.props.mtdsummary.previews; + var mimetype = this.props.mtdsummary.mimetype; + var reference = this.props.reference; + var master_as_preview_url = this.props.master_as_preview_url; + + var url = null; + if (master_as_preview_url) { + url = master_as_preview_url; + } else if (previews) { + url = metadatas.getFileURL(file_hash, previews.audio_pvw.type, previews.audio_pvw.file); + } + + if (url == null) { + return null; + } + + var transport_status = null; + if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { + transport_status = this.transportStatusChange; + } + + return ( + React.createElement("div", {style: {marginBottom: "1em"}}, + React.createElement(metadatas.Mediaplayer, { + transport: this.state.transport, + transport_status: transport_status, + audio_only: true, + cantloadingplayerexcuse: i18n("browser.cantloadingplayer"), + source_url: url}), + + React.createElement(metadatas.AudioGraphicDeepAnalyst, { + previews: previews, + file_hash: file_hash, + currentTime: this.state.currentTime, + duration: this.state.duration, + goToNewTime: this.goToNewTime}), + + React.createElement(metadatas.Image, {file_hash: file_hash, previews: previews, hide_audio_da_grahic: true, prefered_size: "cartridge_thumbnail"}) + ) + ); + } +}); + +})(window.mydmam.async.pathindex.metadatas); +// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal +// Source hash: e31db89e260cddee1e2596764b03d23b diff --git a/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.image.js b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.image.js new file mode 100644 index 00000000..d4d994f5 --- /dev/null +++ b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.image.js @@ -0,0 +1,107 @@ +/** This file is automatically generated! Do not edit. */ (function(metadatas) { /* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +metadatas.ImageURL = function(file_hash, thumbnail) { + if (thumbnail == null) { + return null; + } + return metadatas.getFileURL(file_hash, thumbnail.type, thumbnail.file); +}; + +var chooseTheCorrectImageToDisplay = function(previews, prefered_size) { + if (prefered_size == null) { + prefered_size = "full_size_thumbnail"; + } + + if (prefered_size === "full_size_thumbnail") { + if (previews.full_size_thumbnail) { + return previews.full_size_thumbnail; + } else { + prefered_size = "cartridge_thumbnail"; + } + } + + if (prefered_size === "cartridge_thumbnail") { + if (previews.cartridge_thumbnail) { + return previews.cartridge_thumbnail; + } else { + prefered_size = "icon_thumbnail"; + } + } + + if (prefered_size === "icon_thumbnail") { + if (previews.icon_thumbnail) { + return previews.icon_thumbnail; + } + } + + return null; +}; + +metadatas.chooseTheCorrectImageURL = function(file_hash, previews, prefered_size) { + return metadatas.ImageURL(file_hash, chooseTheCorrectImageToDisplay(previews, prefered_size)); +}; + +metadatas.Image = React.createClass({displayName: "Image", + render: function() { + var file_hash = this.props.file_hash; + var previews = this.props.previews; + var prefered_size = this.props.prefered_size; + + var preview = chooseTheCorrectImageToDisplay(previews, prefered_size); + + if (preview === null) { + return null; + } + + var url = metadatas.ImageURL(file_hash, preview); + var width = preview.options.width; + var height = preview.options.height; + + var image = null; + if ((width > 0) & (height > 0)) { + image = ( + React.createElement("img", {src: url, className: "img-polaroid", alt: width + "x" + height, style: {width: width, height: height}}) + ); + } else { + image = ( + React.createElement("img", {src: url, className: "img-polaroid"}) + ); + } + + var audio_da_graphic = null; + + if (this.props.hide_audio_da_grahic) { + audio_da_graphic = null; + } else { + var audio_da_graphic = (React.createElement(metadatas.AudioGraphicDeepAnalyst, { + previews: previews, + file_hash: file_hash})); + } + + return ( + React.createElement("div", {style: {marginBottom: "1em"}}, + image, + audio_da_graphic + ) + ); + } +}); + +})(window.mydmam.async.pathindex.metadatas); +// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal +// Source hash: 646e2f9e70888e63e03338847fb55259 diff --git a/public/javascripts/_transformed/mydmam.async.pathindex.mediaplayer.js b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.mediaplayer.js similarity index 95% rename from public/javascripts/_transformed/mydmam.async.pathindex.mediaplayer.js rename to public/javascripts/_transformed/mydmam.async.pathindex.metadatas.mediaplayer.js index dfa0c4eb..2dc3b218 100644 --- a/public/javascripts/_transformed/mydmam.async.pathindex.mediaplayer.js +++ b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.mediaplayer.js @@ -1,4 +1,4 @@ -/** This file is automatically generated! Do not edit. */ (function(pathindex) { /* +/** This file is automatically generated! Do not edit. */ (function(metadatas) { /* * This file is part of MyDMAM. * * This program is free software; you can redistribute it and/or modify @@ -15,7 +15,7 @@ * */ -pathindex.Mediaplayer = React.createClass({displayName: "Mediaplayer", +metadatas.Mediaplayer = React.createClass({displayName: "Mediaplayer", propTypes: { audio_only: React.PropTypes.bool, className: React.PropTypes.oneOfType([ @@ -104,6 +104,6 @@ pathindex.Mediaplayer = React.createClass({displayName: "Mediaplayer", } }); -})(window.mydmam.async.pathindex); +})(window.mydmam.async.pathindex.metadatas); // Generated by hd3gtv.mydmam.web.JSProcessor for the module internal -// Source hash: 30477c23f8f41d5f472392cb8de3ce25 +// Source hash: a71f9dfc32bea9a0e1e4999937954b77 diff --git a/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.metadatas.js b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.metadatas.js new file mode 100644 index 00000000..0113606f --- /dev/null +++ b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.metadatas.js @@ -0,0 +1,30 @@ +/** This file is automatically generated! Do not edit. */ (function(metadatas) { /* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +//var pathindex = mydmam.async.pathindex; + +metadatas.getFileURL = function(file_hash, file_type, file_name) { + if (!mydmam.metadatas.url.metadatafile) { + return ""; + } + return mydmam.metadatas.url.metadatafile.replace("filehashparam1", file_hash).replace("typeparam2", file_type).replace("fileparam3", file_name); +}; + + +})(window.mydmam.async.pathindex.metadatas); +// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal +// Source hash: 613a9edb972a5ee43b221ed505ed88d9 diff --git a/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.video.js b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.video.js new file mode 100644 index 00000000..18350efd --- /dev/null +++ b/public/javascripts/_transformed/mydmam.async.pathindex.metadatas.video.js @@ -0,0 +1,189 @@ +/** This file is automatically generated! Do not edit. */ (function(metadatas) { /* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015-2016 + * +*/ + +var QualityTabs = React.createClass({displayName: "QualityTabs", + handleClickSwitchSize: function(event) { + event.preventDefault(); + this.props.onSwitchSize(!this.props.isbigsize); + }, + handleClickSwitchQuality: function(event) { + event.preventDefault(); + this.props.onChangeQuality($(event.currentTarget).data("qualid")); + }, + render: function() { + var switchsize_icon_class = "icon-resize-full"; + if (this.props.isbigsize) { + switchsize_icon_class = "icon-resize-small"; + } + + var medias = this.props.medias; + var selectedquality = this.props.selectedquality; + + var libuttons = []; + for (var i = 0; i < medias.length; i++) { + var switch_qual_li_classes = classNames({ + 'active': (i === selectedquality), + }); + libuttons.push( + React.createElement("li", {key: i, className: switch_qual_li_classes}, + React.createElement("a", {href: medias[i].url, style: {outline: "none"}, onClick: this.handleClickSwitchQuality, "data-qualid": i}, + medias[i].label + ) + ) + ); + }; + libuttons.push( + React.createElement("li", {key: "switchsize"}, React.createElement("a", {href: "", style: {outline: "none"}, onClick: this.handleClickSwitchSize}, React.createElement("i", {className: switchsize_icon_class}))) + ); + + return ( + React.createElement("ul", {className: "nav nav-tabs"}, + libuttons + ) + ); + } +}); + +metadatas.Video = React.createClass({displayName: "Video", + getInitialState: function() { + return {selectedquality: 0, medias: [], isbigsize: false, transport: null, currentTime: null, duration: null}; + }, + componentDidMount: function() { + var master_as_preview_url = this.props.master_as_preview_url; + var file_hash = this.props.file_hash; + var previews = this.props.mtdsummary.previews; + //var reference = this.props.reference; + var medias = []; + + if (master_as_preview_url) { + var media = {}; + media.url = master_as_preview_url; + media.label = "Original"; + medias.push(media); + } + if (previews) { + if (previews.video_hd_pvw) { + var media = {}; + media.url = metadatas.getFileURL(file_hash, previews.video_hd_pvw.type, previews.video_hd_pvw.file); + media.label = "HD"; + medias.push(media); + } + if (previews.video_sd_pvw) { + var media = {}; + media.url = metadatas.getFileURL(file_hash, previews.video_sd_pvw.type, previews.video_sd_pvw.file); + media.label = "SQ"; + medias.push(media); + } + if (previews.video_lq_pvw) { + var media = {}; + media.url = metadatas.getFileURL(file_hash, previews.video_lq_pvw.type, previews.video_lq_pvw.file); + media.label = "LQ"; + medias.push(media); + } + } + this.setState({medias: medias}); + }, + handleChangeQuality: function(selectedquality) { + this.setState({ + selectedquality: selectedquality, + transport: {macro: "RELOAD_PLAY"} + }); + }, + handleSwitchSize: function(isbigsize) { + this.setState({isbigsize: isbigsize}); + }, + transportStatusChange: function(currentTime, duration, ispaused) { + this.setState({currentTime: currentTime, duration: duration, transport: null}); + }, + goToNewTime: function(new_time) { + this.setState({ + transport: {gototime: new_time} + }); + }, + render: function() { + var file_hash = this.props.file_hash; + var previews = this.props.mtdsummary.previews; + + if (this.state.medias.length === 0) { + return null; + } + + var url = this.state.medias[this.state.selectedquality].url; + var poster = metadatas.chooseTheCorrectImageURL(file_hash, previews); + var width = 640; + var height = 360; + var className = null; + var isbigsize = this.state.isbigsize; + if (isbigsize) { + width = null; + height = null; + className = "container"; + } + + var transport_status = null; + if (metadatas.hasAudioGraphicDeepAnalyst(previews)) { + transport_status = this.transportStatusChange; + } + + var video = ( + React.createElement(metadatas.Mediaplayer, { + transport: this.state.transport, + transport_status: transport_status, + className: className, + width: width, + height: height, + poster: poster, + cantloadingplayerexcuse: i18n("browser.cantloadingplayer"), + source_url: url}) + ); + + var content = null; + if (this.state.medias.length > 1) { + content = ( + React.createElement("div", {className: "tabbable tabs-below"}, + React.createElement("div", {className: "tab-content"}, + video + ), + React.createElement(QualityTabs, { + isbigsize: isbigsize, + medias: this.state.medias, + selectedquality: this.state.selectedquality, + onChangeQuality: this.handleChangeQuality, + onSwitchSize: this.handleSwitchSize}) + ) + ); + } else { + content = video; + } + + return ( + React.createElement("div", {style: {marginBottom: "1em"}}, + content, + React.createElement(metadatas.AudioGraphicDeepAnalyst, { + previews: previews, + file_hash: file_hash, + currentTime: this.state.currentTime, + duration: this.state.duration, + goToNewTime: this.goToNewTime}) + ) + ); + } +}); + +})(window.mydmam.async.pathindex.metadatas); +// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal +// Source hash: b188090644847e8631435982b51bab65 diff --git a/public/javascripts/src/mydmam.format.js b/public/javascripts/src/mydmam.format.js index 94c1351d..7ef744bd 100644 --- a/public/javascripts/src/mydmam.format.js +++ b/public/javascripts/src/mydmam.format.js @@ -131,16 +131,28 @@ return sb; }; - mydmam.format.msecToHMSms = function(msec) { + mydmam.format.msecToHMSms = function(msec, always_display_hours_min, no_display_msec) { if (msec === 0) { - return "0.000"; + if (always_display_hours_min) { + if (no_display_msec) { + return "00:00:00"; + } else { + return "00:00:00.000"; + } + } else { + if (no_display_msec) { + return "00"; + } else { + return "0.000"; + } + } } var sb = ''; var sec = msec / 1000; var hrs = Math.floor(sec / 3600); - if (hrs >= 1) { + if (hrs >= 1 | always_display_hours_min) { if (hrs < 10) { sb = sb.append(0); } @@ -152,7 +164,7 @@ var diff_hours = Math.floor(_diff_hours); // en heures var min = (_diff_hours - diff_hours) * 60; - if (min >= 1 | hrs >= 1) { + if (min >= 1 | hrs >= 1 | always_display_hours_min) { if (min < 10) { sb = sb.append(0); } @@ -167,7 +179,11 @@ sb = sb.append(0); } - sb = sb.append(secresult.toFixed(3)); + if (no_display_msec) { + sb = sb.append(Math.floor(secresult)); + } else { + sb = sb.append(secresult.toFixed(3)); + } return sb; };