MediaInfoOnline.js

A Javascript API works with MediaInfoLib.

بۇ قوليازمىنى بىۋاسىتە قاچىلاشقا بولمايدۇ. بۇ باشقا قوليازمىلارنىڭ ئىشلىتىشى ئۈچۈن تەمىنلەنگەن ئامبار بولۇپ، ئىشلىتىش ئۈچۈن مېتا كۆرسەتمىسىگە قىستۇرىدىغان كود: // @require https://update.greatest.deepsurf.us/scripts/377671/670848/MediaInfoOnlinejs.js

  1. // ==UserScript==
  2. // @name MediaInfoOnline.js
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description A Javascript API works with MediaInfoLib.
  6. // @author You
  7. // @match *
  8. // @require https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
  9. // @grant none
  10. // ==/UserScript==
  11. var $ = window.jQuery;
  12. window.MediaInfoOnline = function(input_resource, textarea_mediainfo, input_mediainfo, span_mediainfo, select_format){
  13. var MediaInfo_lib_instance;
  14. var result;
  15. var key;
  16. var processing = false;
  17. var keyToParse = 1024 * 1024;
  18. var cueIn = function(){
  19. MediaInfo_lib_instance = MediaInfoLib({
  20. 'locateFile': ()=>'',
  21. 'postRun': function(){
  22. initializeAll();
  23. }
  24. });
  25. };
  26. var fadeInThenFadeOut = function(span_mediainfo, content, time, color){
  27. span_mediainfo.text(content).css('color', color).fadeIn(function(){
  28. $(this).delay(time).fadeOut(function(){
  29. span_mediainfo.text('');
  30. });
  31. });
  32. }
  33. var initializeAll = function(){
  34. $(document).ready(function(){
  35. var output_formats = JSON.parse(MediaInfo_lib_instance.MediaInfo.Option_Static('Info_OutputFormats_JSON'));
  36. $.each(output_formats.output, function(e, a){
  37. select_format.append(
  38. $('<option/>', {
  39. value: a.name,
  40. mime: a.mime
  41. }).text(a.desc)
  42. );
  43. });
  44. input_resource.prop('disabled', false);
  45. DOMEventInit();
  46. });
  47. };
  48. var DOMEventInit = function(){
  49. input_resource.on('change', function(){
  50. var input_resource_DOM = $(this)[0];
  51. if(input_resource_DOM.files.length > 0){
  52. startParseMediaInfo(input_resource_DOM.files[0]);
  53. }
  54. });
  55. select_format.on('change', function(){
  56. if(processing){
  57. input_mediainfo.prop('disabled', true);
  58. input_mediainfo.attr('value', '稍等');
  59. regenByType($(this).val(), $(this).find(':selected').attr('mime'));
  60. }
  61. });
  62. input_mediainfo.on('click', function(e){
  63. e.preventDefault();
  64. textarea_mediainfo[0].select();
  65. try{
  66. var successful = document.execCommand('copy');
  67. var msg = successful?{'text': '成功', 'color': '#2276BB'}:{'text': '失败', 'color': '#DD8944'};
  68. fadeInThenFadeOut(span_mediainfo, 'MediaInfo复制' + msg.text, 500, msg.color);
  69. }
  70. catch(error){
  71. fadeInThenFadeOut(span_mediainfo, '无法复制MediaInfo', 500, '#DD8944');
  72. }
  73. })
  74. }
  75. var regenByType = function(type, mime){
  76. result.Option('Inform', 'JSON');
  77. window.MediaInfoOnline.json = JSON.parse(result.Inform().trim());
  78. result.Option('Inform', type);
  79. input_mediainfo.attr('value', '复制');
  80. render(mime);
  81. input_mediainfo.prop('disabled', false);
  82. };
  83. var render = function(mime){
  84. textarea_mediainfo.text(result.Inform().trim());
  85. };
  86. var startParseMediaInfo = function(file){
  87. if(processing){
  88. processingDone();
  89. }
  90. try{
  91. parseFile(file);
  92. }
  93. catch(error){
  94. alert('Your browser is not compatible.');
  95. }
  96. };
  97. var processingDone = function(){
  98. result.Close();
  99. result.delete;
  100. processing = false;
  101. input_mediainfo.prop('disabled', false);
  102. input_mediainfo.attr('value', '复制');
  103. };
  104. var parseFile = function(file){
  105. if(processing){
  106. return;
  107. }
  108. input_mediainfo.prop('disabled', true);
  109. input_mediainfo.attr('value', '稍等');
  110. processing = true;
  111. key = file.name;
  112. var offset = 0;
  113. result = new MediaInfo_lib_instance.MediaInfo;
  114. result.Option('File_FileName', file.name);
  115. result.Open_Buffer_Init(file.size, 0);
  116. var seek = function(length){
  117. if(processing){
  118. var reader = new FileReader;
  119. var b = file.slice(offset, offset + length);
  120. reader.onload = processChunk;
  121. reader.readAsArrayBuffer(b);
  122. }
  123. else{
  124. processingDone();
  125. }
  126. };
  127. var processChunk = function(event){
  128. if(event.target.error === null){
  129. try{
  130. var m = result.Open_Buffer_Continue(event.target.result);
  131. }
  132. catch(error){
  133. processingDone();
  134. alert('An error happened reading your file.');
  135. return;
  136. }
  137. var next_position = result.Open_Buffer_Continue_Goto_Get();
  138. if(next_position === -1){
  139. offset = offset + event.target.result.byteLength;
  140. }
  141. else{
  142. offset = next_position;
  143. result.Open_Buffer_Init(file.size, next_position);
  144. }
  145. }
  146. else{
  147. processingDone();
  148. alert('An error happened reading your file.');
  149. return;
  150. }
  151. if(m & 8 || event.target.result.byteLength < 1){
  152. result.Open_Buffer_Finalize();
  153. regenByType(select_format.val(), select_format.find(':selected').attr('mime'));
  154. input_mediainfo.prop('disabled', false);
  155. input_mediainfo.attr('value', '复制');
  156. return;
  157. }
  158. seek(keyToParse);
  159. };
  160. seek(keyToParse);
  161. };
  162. return {
  163. init: cueIn
  164. };
  165. }