/// <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());
        }
Exemple #2
0
        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();
            }
        }
Exemple #3
0
        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();
            }
        }
Exemple #4
0
        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);
        }
Exemple #6
0
        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());
        }
        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);
        }
Exemple #9
0
        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);
        }