public ResourceEntryInfo(string resourcePath)
 {
     ResourceKey        = resourcePath.GetResourceKeyFromString();
     Dictionary         = resourcePath.GetDictionaryFullName();
     Assembly           = AppDomainHelpers.GetAssembly(resourcePath.GetAssemblyNameFromString());
     CurrentCultureInfo = DependencyService.Get <ILocalizationService>().GetCurrentCultureInfo();
 }
        private void ProcessDirectory(string directoryPath)
        {
            var savedDirectory = Directory.GetCurrentDirectory();

            Directory.SetCurrentDirectory(directoryPath);
            _loader = AppDomainHelpers.CreateProxy <AssemblyLoader>(directoryPath, out _testDomain);
            foreach (var file in Directory.GetFiles(directoryPath).Where(file => file.EndsWith(".dll")))
            {
                AssemblyRecord assembly = CreateAssemblyRecord(file);
                _assemblies[assembly.Name] = assembly;
                if (RequiresExactVersionMatch(assembly))
                {
                    AddSharedAssemblyExactVersion(assembly);
                }
                else
                {
                    AddSharedAssembly(assembly);
                }
            }

            // Now check for assembly mismatches
            foreach (var assembly in _assemblies.Values)
            {
                foreach (var reference in assembly.Children)
                {
                    CheckAssemblyReference(reference, assembly);
                }
            }

            FindExtraAssemblies();

            AppDomain.Unload(_testDomain);
            Directory.SetCurrentDirectory(savedDirectory);
        }
Пример #3
0
        public async Task ExtractAndAddAudio(string audioInputPath, string audioOutputPath,
                                             string inputPath, string outputPath, string tempDirectory, bool isMultiThread = false, bool trimVideo = false)
        {
            Console.WriteLine("Extracting Audio");
            if (!File.Exists(audioOutputPath))
            {
                await ExtractAudio(audioInputPath,
                                   audioOutputPath,
                                   (o, args) => { },
                                   isMultiThread
                                   );
            }

            var audio = await FFmpeg.GetMediaInfo(audioOutputPath);

            var inputVideo = await FFmpeg.GetMediaInfo(inputPath);

            if (trimVideo && TimeSpan.Compare(audio.Duration, inputVideo.Duration) == -1)
            {
                // Split Video

                Console.WriteLine("Splitting Video");
                var tempOutput = AppDomainHelpers
                                 .GetPath(tempDirectory,
                                          $"temp_split_video_output_{Guid.NewGuid().ToString().Replace("-", "")}",
                                          ".mp4");

                var split = await FFmpeg.Conversions.FromSnippet.Split(inputPath, tempOutput, TimeSpan.Zero,
                                                                       audio.Duration);

                split.UseMultiThread(isMultiThread);
                await split.Start();

                File.Move(tempOutput, inputPath, true);
            }

            Console.WriteLine("Adding Audio");
            await AddAudio(inputPath,
                           audioOutputPath,
                           outputPath,
                           (o, args) => { },
                           isMultiThread
                           );
        }
        /// <summary>
        /// Given a set of directory paths containing PowerShell module folders, analyze the help
        /// in the module folders and report any issues
        /// </summary>
        /// <param name="scopes"></param>
        public void Analyze(IEnumerable <string> scopes)
        {
            var savedDirectory     = Directory.GetCurrentDirectory();
            var processedHelpFiles = new List <string>();
            var helpLogger         = Logger.CreateLogger <HelpIssue>("HelpIssues.csv");

            foreach (var baseDirectory in scopes.Where(s => Directory.Exists(Path.GetFullPath(s))))
            {
                foreach (var directory in Directory.EnumerateDirectories(Path.GetFullPath(baseDirectory)))
                {
                    var helpFiles = Directory.EnumerateFiles(directory, "*.dll-Help.xml")
                                    .Where(f => !processedHelpFiles.Contains(Path.GetFileName(f),
                                                                             StringComparer.OrdinalIgnoreCase)).ToList();
                    if (helpFiles.Any())
                    {
                        Directory.SetCurrentDirectory(directory);
                        foreach (var helpFile in helpFiles)
                        {
                            var cmdletFile     = helpFile.Substring(0, helpFile.Length - "-Help.xml".Length);
                            var helpFileName   = Path.GetFileName(helpFile);
                            var cmdletFileName = Path.GetFileName(cmdletFile);
                            if (File.Exists(cmdletFile))
                            {
                                processedHelpFiles.Add(helpFileName);
                                helpLogger.Decorator.AddDecorator((h) =>
                                {
                                    h.HelpFile = helpFileName;
                                    h.Assembly = cmdletFileName;
                                }, "Cmdlet");
                                var proxy       = AppDomainHelpers.CreateProxy <CmdletLoader>(directory, out _appDomain);
                                var cmdlets     = proxy.GetCmdlets(cmdletFile);
                                var helpRecords = CmdletHelpParser.GetHelpTopics(helpFile, helpLogger);
                                ValidateHelpRecords(cmdlets, helpRecords, helpLogger);
                                helpLogger.Decorator.Remove("Cmdlet");
                                AppDomain.Unload(_appDomain);
                            }
                        }

                        Directory.SetCurrentDirectory(savedDirectory);
                    }
                }
            }
        }
Пример #5
0
        public async Task StartAsync()
        {
            if (!_isDownloadWebcamVideo && !_isDownloadPresentation)
            {
                throw new Exception("Either Presentaton or Desk-share Video Must Be Selected");
            }

            if (!Directory.Exists(_outputDirectory))
            {
                Directory.CreateDirectory(_outputDirectory);
            }

            Directory.SetCurrentDirectory(_outputDirectory);

            bool downloadVideoResponse        = false,
                 downloadPresentationResponse = false,
                 hasAudio = false;

            _webDriver = WebDriverFactory.Create(_webDriverType, _url);


            _bigBlueButtonDocumentParser = new BigBlueButtonDocumentParser(_webDriver, Options);

            var deskShareVideoName  = $"{_outputFileName}-desk";
            var webcamVideoName     = $"{_outputFileName}-webcam";
            var audioOutputName     = $"{_outputFileName}-output";
            var presentationName    = $"{_outputFileName}-presentation";
            var tmpPresentationName = $"{_outputFileName}-tmp";

            var downloadDeskShareThread = new Thread(() =>
            {
                if (_isDownloadDeskShareVideo)
                {
                    var response          = DownloadVideo(deskShareVideoName).GetAwaiter().GetResult();
                    downloadVideoResponse = response.IsSuccess;
                }
            });

            var downloadWebcamThread = new Thread(() =>
            {
                if (_isDownloadWebcamVideo)
                {
                    var response = DownloadWebcam(webcamVideoName).GetAwaiter().GetResult();
                    hasAudio     = response.IsSuccess;
                }
            });

            var downloadPresentationThread = new Thread(() =>
            {
                if (_isDownloadPresentation)
                {
                    var response = DownloadPresentation(tmpPresentationName).GetAwaiter().GetResult();
                    downloadPresentationResponse = response.IsSuccess;
                }
            });


            downloadDeskShareThread.Start();
            downloadWebcamThread.Start();
            downloadPresentationThread.Start();

            downloadWebcamThread.Join();
            downloadDeskShareThread.Join();
            downloadPresentationThread.Join();


            if (!downloadVideoResponse && !downloadPresentationResponse)
            {
                throw new BigBlueButtonDocumentException("Neither Video Nor Presentation Couldn't Be Downloaded.");
            }


            var audioInputPath         = AppDomainHelpers.GetPath(_outputDirectory, webcamVideoName, ".mp4");
            var audioOutputPath        = AppDomainHelpers.GetPath(_outputDirectory, $"{audioOutputName}", ".mp3");
            var deskShareInputPath     = AppDomainHelpers.GetPath(_outputDirectory, $"{deskShareVideoName}", ".mp4");
            var videoOutputPath        = AppDomainHelpers.GetPath(_outputDirectory, _outputFileName, ".mp4");
            var presentationOutputPath = AppDomainHelpers.GetPath(_outputDirectory, presentationName, ".mp4");
            var tmpPresentationPath    = AppDomainHelpers.GetPath(_outputDirectory, tmpPresentationName, ".mp4");

            if (downloadVideoResponse)
            {
                if (hasAudio)
                {
                    await _videoService.ExtractAndAddAudio(audioInputPath, audioOutputPath, deskShareInputPath,
                                                           videoOutputPath, _outputDirectory, _isUseMultiThread, true);
                }
                else
                {
                    File.Move(deskShareInputPath, videoOutputPath, true);
                }
            }

            if (downloadPresentationResponse)
            {
                if (hasAudio)
                {
                    await _videoService.ExtractAndAddAudio(audioInputPath, audioOutputPath, tmpPresentationPath,
                                                           presentationOutputPath, _outputDirectory, _isUseMultiThread, true);
                }
                else
                {
                    File.Move(tmpPresentationPath, presentationOutputPath, true);
                }
            }


            RemoveTempFiles(
                audioOutputName,
                deskShareVideoName,
                tmpPresentationName
                );
            _webDriver.Quit();
        }
 public static void DeleteFileInAppDirectory(string directory, string fileName, string fileExtension)
 {
     DeleteIfExists(AppDomainHelpers.GetPath(directory, fileName, fileExtension));
 }