public Album(DirectoryInfo sourceDirectory, IProgress progress, CancellationToken cancellationToken, Session session, Context context) : this(session, context) { var discDirectories = new List<DirectoryInfo>(); discDirectories.Add(sourceDirectory); discDirectories.AddRange(sourceDirectory.GetDirectories()); progress.Begin(discDirectories.Sum(directory => directory.GetFiles("*.mp3").Length)); foreach (var directory in discDirectories) { var disc = new Disc(this, _session, _context); foreach (var file in directory.GetFiles("*.mp3")) { cancellationToken.ThrowIfCancellationRequested(); progress.Advance(file.Name); var track = new Track(file, disc, _session, _context); disc.Tracks.Add(track); } if (disc.Tracks.Count > 0) Discs.Add(disc); } SourceDirectory = sourceDirectory; }
IEnumerable<string> CompileAssemblies(Assembly[] assemblies, IProgress progress = null) { if (progress != null) { var numAssemblies = assemblies.Length; progress.Start("Assembly Compilation", "Compiling project scripts", numAssemblies); } m_OutputFolder = FileUtil.GetUniqueTempPathInProject(); if (!Directory.Exists(m_OutputFolder)) Directory.CreateDirectory(m_OutputFolder); PrepareAssemblyBuilders(assemblies, (assemblyPath, messages) => { var assemblyName = Path.GetFileNameWithoutExtension(assemblyPath); m_AssemblyCompilationUnits[assemblyName].messages = messages; if (progress != null) progress.Advance(assemblyName); if (AssemblyCompilationFinished != null) AssemblyCompilationFinished(assemblyName, messages); }); UpdateAssemblyBuilders(); if (progress != null) progress.Clear(); return m_AssemblyCompilationUnits.Where(pair => pair.Value.Success()).Select(unit => unit.Value.assemblyPath); }
public void Audit(Action <ProjectIssue> onIssueFound, Action onComplete = null, IProgress progress = null) { if (progress != null) { progress.Start("Analyzing Settings", "Analyzing project settings", m_Analyzers.Count); } foreach (var analyzer in m_Analyzers) { if (progress != null) { progress.Advance(); } foreach (var issue in analyzer.Analyze()) { onIssueFound(issue); } } if (progress != null) { progress.Clear(); } if (onComplete != null) { onComplete(); } }
void AnalyzeAssemblies(IEnumerable <AssemblyInfo> assemblyInfos, List <string> assemblyDirectories, Action <CallInfo> onCallFound, Action <ProjectIssue> onIssueFound, Action <IProgress> onComplete, IProgress progress = null) { using (var assemblyResolver = new DefaultAssemblyResolver()) { foreach (var path in assemblyDirectories) { assemblyResolver.AddSearchDirectory(path); } foreach (var dir in assemblyInfos.Select(info => Path.GetDirectoryName(info.path)).Distinct()) { assemblyResolver.AddSearchDirectory(dir); } if (progress != null) { progress.Start("Analyzing Scripts", "Analyzing project scripts", assemblyInfos.Count()); } // Analyse all Player assemblies foreach (var assemblyInfo in assemblyInfos) { Console.WriteLine("[Project Auditor] Analyzing {0}", assemblyInfo.name); if (progress != null) { progress.Advance(string.Format("Analyzing {0}", assemblyInfo.name)); } if (!File.Exists(assemblyInfo.path)) { Debug.LogError(assemblyInfo.path + " not found."); continue; } AnalyzeAssembly(assemblyInfo, assemblyResolver, onCallFound, onIssueFound); } } if (progress != null) { progress.Clear(); } if (onComplete != null) { onComplete(progress); } }
public void BuildCallHierarchies(List <ProjectIssue> issues, IProgress progress = null) { foreach (var entry in m_CallPairs) { if (!m_BucketedCallPairs.ContainsKey(entry.Value.callee.FullName)) { m_BucketedCallPairs.Add(entry.Value.callee.FullName, new List <CallInfo>()); } m_BucketedCallPairs[entry.Value.callee.FullName].Add(entry.Value); } if (issues.Count > 0) { Profiler.BeginSample("CallCrawler.BuildCallHierarchies"); if (progress != null) { progress.Start("Analyzing Scripts", "Analyzing call trees", issues.Count); } foreach (var issue in issues) { if (progress != null) { progress.Advance(); } const int depth = 0; var callTree = issue.dependencies; BuildHierarchy(callTree.GetChild() as CallTreeNode, depth); // temp fix for null location (ScriptAuditor was unable to get sequence point) if (issue.location == null && callTree.HasChildren()) { issue.location = callTree.GetChild().location; } } if (progress != null) { progress.Clear(); } Profiler.EndSample(); } }
public void SaveTo(DirectoryInfo albumDirectory, IProgress progress, CancellationToken cancellationToken) { var discDirectory = Album.Discs.Count == 1 ? albumDirectory : albumDirectory.CreateSubdirectory(DirectoryName); foreach (var track in Tracks) { cancellationToken.ThrowIfCancellationRequested(); progress.Advance(string.Format(@"{0}\{1}", FullName, track.Name)); track.SaveTo(discDirectory, progress, cancellationToken); } if (_session.Album.Cover != null) { var coverFilePath = Path.Combine(discDirectory.FullName, "Cover" + Picture.GetExtensionByMimeType(_session.Album.Cover.MimeType)); File.WriteAllBytes(coverFilePath, _session.Album.Cover.Data); } if (Album.Discs.Count > 1) GeneratePlaylist(discDirectory); }
public IEnumerable<Issue> DetectIssues(IProgress progress, CancellationToken cancellationToken) { progress.Begin(2 + Discs.Sum(disc => disc.Tracks.Count + 1)); // Artist Name + Album Name + (Disk Name + Track Count)* progress.Advance(string.Format("Artist: {0}", ArtistName)); foreach (var validator in _context.GetArtistValidators(this)) { cancellationToken.ThrowIfCancellationRequested(); foreach (var issue in validator.Validate()) yield return issue; } progress.Advance(string.Format("Album: {0}", Name)); foreach (var validator in _context.GetAlbumValidators(this)) { cancellationToken.ThrowIfCancellationRequested(); foreach (var issue in validator.Validate()) yield return issue; } foreach (var disc in Discs) { progress.Advance(string.Format("Disc {0} Name: {1}", disc.Index, Name)); foreach (var validator in _context.GetDiscValidators(disc)) { cancellationToken.ThrowIfCancellationRequested(); foreach (var issue in validator.Validate()) yield return issue; } foreach (var track in disc.Tracks) { progress.Advance(string.Format(@"Disc {0}\Track {1}: {2}", disc.Index, track.Index, Name)); foreach (var validator in _context.GetTrackValidators(track)) { cancellationToken.ThrowIfCancellationRequested(); foreach (var issue in validator.Validate()) yield return issue; } } } }