/// <summary> /// Notify user if neccesary that they're approaching their usage limit /// </summary> /// <param name="usageInformation">Usage information.</param> private void NotifyUser(UsageInformation usageInformation) { var usage = usageInformation.PeakUsage / (float)Allowance; var lastWarning = GetLastWarning(); var lastChecked = GetLastCheckedDate(); for (int i = Warnings.Length - 1; i > 0; --i) { if (usage < Warnings[i]) { continue; } // Check if we've already warned at this level (or above) if (lastChecked <= usageInformation.EndDate && lastWarning >= i) { break; } NSAlert.WithMessage("Broadband Usage Warning", "OK", null, null, WarningMessages[i]).RunModal(); SettingsManager.SetSetting(KeyLastWarning, i.ToString()); break; } SettingsManager.SetSetting(KeyLastChecked, DateTime.UtcNow.ToTimestamp().ToString()); }
public static void Main(string[] args) { if (!args.Any()) { UsageInformation.Print(); return; } var fileName = args.FirstOrDefault(); Console.WriteLine(Resources.ConfirmationLine, fileName); var keyInfo = Console.ReadKey(); if (keyInfo.Key != ConsoleKey.Y && keyInfo.Key != ConsoleKey.Enter) { return; } if (!FileDeleter.Delete(fileName)) { var lastError = Marshal.GetLastWin32Error(); Console.WriteLine(); Console.WriteLine($"Error: {new Win32Exception(lastError).Message}"); } else { ProgressTracker.Instance.Stop(); } }
public static void Main(string[] args) { var parsedArgs = CmdLineArgsParser.Parse(args); if (!args.Any() || string.IsNullOrEmpty(parsedArgs.FileName)) { UsageInformation.Print(); return; } //If silent mode is not specified if (!parsedArgs.SilentModeEnabled) { Console.WriteLine(Resources.ConfirmationLine, parsedArgs.FileName); var keyInfo = Console.ReadKey(); if (keyInfo.Key != ConsoleKey.Y && keyInfo.Key != ConsoleKey.Enter) { return; } } if (!FileDeleter.Delete(parsedArgs.FileName)) { var lastError = Marshal.GetLastWin32Error(); Console.WriteLine(); Console.WriteLine($"Error: {new Win32Exception(lastError).Message}"); } else { ProgressTracker.Instance.Stop(); } }
private static void WriteApiList(UsageInformation apis, TextWriter output) { var options = new JsonSerializerOptions() { WriteIndented = true }; var json = JsonSerializer.Serialize(apis, options); output.WriteLine(json); }
public void UpdateUsage(UsageInformation usageInformation) { float usage = usageInformation.PeakUsage / (float)Allowance; PeakUsageLabel.StringValue = string.Format("{0:f2} GB / {1:f2} GB", usageInformation.PeakUsage, Allowance); OffPeakUsageLabel.StringValue = string.Format("{0:f2} GB", usageInformation.OffPeakUsage); TotalUsageLabel.StringValue = string.Format("{0:f2} GB", usageInformation.Usage); PeriodBeganLabel.StringValue = usageInformation.StartDate.ToLongDateString(); PeriodEndedLabel.StringValue = usageInformation.EndDate.ToLongDateString(); UsageIndicator.StopAnimation(this); UpdateIconTint(usage); NotifyUser(usageInformation); }
private static UsageInformation GetApisUsedByAssembly(FileInfo file) { // Skip NuGet's own assemblies string filename = Path.GetFileNameWithoutExtension(file.Name); if (NuGetAssembly.MatchesName(filename) || filename.Equals("NuGet.Core", StringComparison.OrdinalIgnoreCase)) { return(null); } if (filename.StartsWith("NuGet.", StringComparison.OrdinalIgnoreCase)) { Console.Error.WriteLine("Suspicious assembly name: " + file); } using (var fileStream = file.OpenRead()) using (var peReader = new PEReader(fileStream)) { MetadataReader metadata; try { metadata = peReader.GetMetadataReader(); } catch (InvalidOperationException) { // Not a .NET assembly return(null); } if (!AssemblyAnalyser.HasReferenceToNuGetAssembly(metadata)) { return(null); } UsageInformation usedNuGetApis = AssemblyAnalyser.FindUsedNuGetApis(metadata); return(usedNuGetApis); } }
/// <summary> /// Notify user if neccesary that they're approaching their usage limit /// </summary> /// <param name="usageInformation">Usage information.</param> private void NotifyUser(UsageInformation usageInformation) { var usage = usageInformation.PeakUsage / (float)Allowance; var lastWarning = GetLastWarning(); var lastChecked = GetLastCheckedDate(); for (int i = Warnings.Length - 1; i > 0; --i) { if (usage < Warnings[i]) continue; // Check if we've already warned at this level (or above) if (lastChecked <= usageInformation.EndDate && lastWarning >= i) break; NSAlert.WithMessage("Broadband Usage Warning", "OK", null, null, WarningMessages[i]).RunModal(); SettingsManager.SetSetting(KeyLastWarning, i.ToString()); break; } SettingsManager.SetSetting(KeyLastChecked, DateTime.UtcNow.ToTimestamp().ToString()); }
private static async Task <UsageInformation> GetUsageInformation(IEnumerable <FileInfo> files) { var result = new UsageInformation(); var multipleInstancesOption = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }; var singleInstanceOption = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 1 }; var getApisBlock = new TransformBlock <FileInfo, UsageInformation>(GetApisUsedByAssembly, multipleInstancesOption); var collectApisBlock = new ActionBlock <UsageInformation>(assemblyInfo => { if (assemblyInfo != null) { foreach (var targetFramework in assemblyInfo.TargetFrameworks) { result.TargetFrameworks.Add(targetFramework); } foreach (var version in assemblyInfo.Versions) { result.Versions.Add(version); } foreach (var apisByAssembly in assemblyInfo.MemberReferences) { if (!result.MemberReferences.TryGetValue(apisByAssembly.Key, out HashSet <string> allApis)) { allApis = new HashSet <string>(); result.MemberReferences[apisByAssembly.Key] = allApis; } foreach (var api in apisByAssembly.Value) { allApis.Add(api); } } } }, singleInstanceOption); var linkOptions = new DataflowLinkOptions() { PropagateCompletion = true }; getApisBlock.LinkTo(collectApisBlock, linkOptions); foreach (var file in files) { await getApisBlock.SendAsync(file); } getApisBlock.Complete(); await Task.WhenAll(getApisBlock.Completion, collectApisBlock.Completion); return(result); }