mirror of
https://github.com/ICDSystems/ICD.Common.Utils.git
synced 2026-01-11 11:35:01 +00:00
23 KiB
23 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[Unreleased]
[17.2.0] - 2023-06-18
Added
- Added BigEndianBitConverter
- Added EnumUtils.GetInverseFlags
- Added ReverseLookupDictionary collection
- Added NotifyFlagsChanged type
Changed
- SafeMutex now implements IDisposable
[17.1.0] - 2023-03-22
Changed
- Improved methods for human formatted timespan, including without milliseconds.
- Removed Obfuscation
[17.0.0] 2022-12-02
Changed
- IcdEnvironment - Added CrestronDevicePlatform, removed from CrestronRuntimeEnvironment, to support SimplWindows on VC-4
- Fixed IcdEnvironment CrestronRuntimeEnvironment uses in IcdConsole, PathUtils, and ProgramUtils
- Fixed preprocessors in IcdDirectory
- Added exception handling to ThreadedWorkerQueue
[16.0.5] 2022-07-11
Changed
- Fixed console command responses in Simpl+ Runtime Environment
- Changed Crestron apps to not report as an interactive console
- Fixed NETSTANDARD vs SIMPLSHARP preprocessors in various files
- Fixed package reference conditions for NetStandard pakcages
[16.0.4] 2022-07-01
Changed
- Fixed PreProcessors for NETSTANDARD vs SIMPLSHARP for 4-series builds
- Updated Crestron SDK to 2.18.96
[16.0.3] 2022-06-23
Changed
- Throwing better exception when trying to get unknown timezones
[16.0.2] 2022-05-23
Changed
- Fixed an issue in IcdUriBuilder where relative pathes were not being built into a valid URI.
[16.0.1] 2021-10-28
Changed
- Changed sqlite connection strings in IcdCultureInfo & IcdTimeZoneInfo to work with SimplSharp.
[16.0.0] 2021-10-04
Added
- Added IcdAutoResetEvent and IcdManaualResetEvent
Changed
- EnumUtils - Fixed bug where not all values were returned for GetValueExceptNone
- ThreadedWorkerQueue - Added BetweenTime property, to wait between process callbacks
- ThreadedWorkerQueue - Added RunProcess option to stop queue from processing items
- ThreadedWorkerQueue - Added WaitForFlush events to wait until the queue is empty
- ThreadedWorkerQueue - Added count property
- ThreadedWorkerQueue - Now implements IDisposable
Removed
- Removed RateLimitedEventQueue and tests - features added to ThreadedWorkerQueue
- Removed TryEnter from SafeCriticalSection - incorrect behavior on Crestron systems
[15.2.0] - 2021-08-18
Added
- TryParse overload in StringUtils, attempts to parse a GUID from a string
[15.1.0] - 2021-08-03
Added
- Enum Extension "SetFlags", takes a bool to set or unset the given flags
- BiDictionay - Added constructors with TKey and TValue comparers
- ILoggerService - Added Flush() method
- Added log entries for intentional reboot and program restart
- Added ThreadingUtils TimeSpan overloads
Changed
- IcdTimeZoneInfo - fixed issue when unable to read SQL
- WeakKeyDictionary - Fixe GetHashCode to handle null values
- ProcessorUtils - NetStandard - removed "Microsoft" from model name
- Fixed null handing in SequenceComparer and UndefinedVersionComparer
- EnumUtils - GetFlags no longer returns composite flags
[15.0.0] - 2021-05-14
Added
- Ported CsvReader for CF 3.5 compatibility from: https://github.com/tspence/csharp-csv-reader
- Added enum extension method for cycling to the next enum value
- Added GetLocalTimeZoneName method to IcdEnvironment
- Added MatchAny method to RegexUtils
- Added OnSystemDeviceAddedRemoved and associated raise methods to IcdEnvironment for NETSTANDARD
- Added GetParentUri method to UriExtensions
- Added RegistryExtensions for working with Windows registry
- Added session change event to IcdEnvironment for login/logout feedback
- Added OrderedDictionary collection
Changed
- Updated TimeZones.sqlite to include daylight time zone info, added a new display name column.
- Implemented ProcessorUtils for Windows
- Renamed OrderedDictionary to SortedDictionary for consistency with .Net
- Fixed a bug where SafeTimer.Trigger() would run the callback twice on .Net Standard
- Fixed a bug where XML deserialization would fail to read out of empty elements
Removed
- ANSI color is no longer enabled on .Net Standard by default - it must be enabled by the calling application
[14.2.0] - 2021-02-04
Changed
- ProcessorUtils Uptime methods changed to StartTime
[14.1.0] - 2021-01-21
Added
- Added overload to GuidUtils that takes an enumerable of guids and combines them into a new deterministic guid
Changed
- A SafeTimer constructor that executes the callback immediately now does this instead of waiting infinitely
[14.0.0] - 2021-01-14
Added
- Added Get and Set extensions to PropertyInfo in SIMPLSHARP to mimic overloads avaliable in NETSTANDARD
- Added Collection extensions for setting and adding ranges of items
- Added a method for getting the total number of seconds in a date
- Added extensions to raise events with common event args using the data directly
- Added property to IcdEnvironment to determine whether SSL communication is enabled
- Added IcdTimeZoneInfo, a very light implementation of System.TimeZoneInfo for the .NET Compact Framework
- Added ThreadedWorkerQueue - a threadsafe way to enqueue items and have a worker thread process them one at a time
- Added eDaysOfWeek flags enum
- Added support for reading the primitive type double to IcdXmlReader and XmlUtils
- Added ProcessorUtils.GetSystemStartTime() to get DateTime the system started instead of a TimeSpan
Changed
- Repeater changed to use configured callbacks instead of a dumb event
- Scheduled action callbacks allow a TimeSpan to be returned to delay actions
- Handling a Crestron bug where File.Exists throws an exception on 4-Series instead of returning false
- Changed ProcessorUtils.ModelVersion to be a string, Crestron pulls model version from CrestronEnvironment
- For 4-series console outputs, replacing \n with \r\n to help console readability
- Changed RuntimeEnvironment to be 3 variables - Framework for Crestron vs Standard, CrestronSeries for 3 vs 4, and CrestronRuntimeEnvironment for Simpl vs SimplSharpPro vs Server
[13.0.0] - 2020-09-03
Added
- Added util methods for removing duplicate whitespace in strings
- Added dequeue overload to ScrollQueue
Changed
- Replaced Crestron Unzip with Yallie Unzip
- Fixed "version" regex for 4-series
- Fixed date parsing error for 4-series
- Split SimplSharpProMono runtime environment into SimplSharpProSever
- Fixed log formatting on 4-series
[12.1.0] - 2020-07-14
Added
- ReflectionExtensions : GetProperty, SetProperty, CallMethod extensions for NetStandard
- Added attributes for controlling obfuscation
- Added AggregateOrDefault extension method for applying an accumulator function over a sequence that returns a default value if the sequence is empty
Changed
- DHCP status is a boolean
- Changed Hostname property to Hostnames
[12.0.0] - 2020-06-18
Added
- Added ToCollection extension method for copying an enumerable to a new collection
- TableBuilder supports multi-line content
- Added eIcdFileMode for IO platform agnosticism
- Extension method for determining if a Type is anonymous
- Extension method for getting inner generic Types
- Added extension method for dynamically converting a sequence to a generic list of the given item type
- Added methods for getting UserData paths
- Added methods for reading GUIDs from XML
- Added methods for reading DateTimes from XML
- Added method for combining GUIDs
- Added method for getting the EventArgs type for an EventHandler
- Added methods for getting a JSON value as a float or double
- Added dictionary Remove method for outputting the removed value
- Added IGenericEventArgs interface
- Added MinimalTypeConverter for serializing Types to JSON
- Added common JSON serializer settings for common, platform agnostic DateTime and Type conversion
Changed
- Rewrote JsonItemWrapper serialization for JsonConvert friendliness
- Reflection optimizations
- Fixed NullParameterException in TableBuilder
- Improvements to EnumUtils, less reliance on casting to/from int
- Cleaned up TimeSpan.ToReadableString() output
- Fixed a bug where System.Reflection exceptions can't be caught in S#
- TableBuilder no longer draws redundant separators
- Fixed a bug where CompiledOn date was not being parsed correctly due to culture
- S# DateTimes are serialized to JSON in ISO-8601 format
- Deadlock detection works better for false positives
- Improved LogItem JSON serialization
- Improved NiceName method to better handle syntax, whitespace and punctuation
- Fixed a bug where IcdCultureInfo would fail to load on Crestron 4-series processors
- Clarifying which culture failed to load when IcdCultureInfo throws an exception
[11.1.1] - 2020-08-21
Removed
- Removed the OnItemTrimmed event from the ScrollQueue due to deadlocks
[11.1.0] - 2020-05-19
Added
- ScrollQueue - Added OnItemTrimmed event
- Added DateTimeNullableEventArgs
[11.0.0] - 2020-03-20
Added
- Added Not null tag for ICDUriBuilder Constructor that takes a URI as an argument.
- Added MathUtils methods for converting to and from percentages
- Added enum extensions for finding the inclusion and exclusion of enum flags
- Added DateTime extensions for adding years, months, days, hours, minutes and wrapping without modifying other values
- Added shims for deserializing an XML array using a callback for each item
- Added methods for serializing an XML array
- Added WriteAllByte method on IcdFile.
- Added PathUtils for building paths in the HTML directory
- Added public access to GetValues enumeration extension
- Added extensions for getting JsonReader values as long or ulong
- Added DateTimeUtils methods for creating DateTimes from epoch seconds or milliseconds
- Added utils for splitting ANSI into spans for conversion to XAML, HTML, etc
Changed
- Fixed exception trying to get DHCP status of network interfaces on Linux
- Fixed a bug where color formatted console output on Net Standard was not raising the OnConsolePrint event
- Simplifying ANSI color methods, better cross-platform color support
- Console uses unicode for table drawing on Net Standard
- Using UTC for tracking scheduled events, fixes issues with DST
- Using UTC for tracking durations
- Fixed a bug where table width calculations were not considering unprintable characters
[10.3.0] - 2020-01-20
Changed
- Network/MAC/DNS address utils are now enumerating all adapter types
- Ignoring Crestron ethernet parameters that say "Invalid Value"
- Skipping network interfaces with an invalid adapter id
[10.2.0] - 2019-12-04
Added
- Added shim methods for finding closest DateTimes from a sequence
[10.1.0] - 2019-11-18
Added
- Added PathUtils methods for getting ProgramData paths
- Added a method for determining if a URI is defaults
- Added MaxOrDefault extension method for enumerables
- Added a method for finding an item in a sorted list by a given predicate
Changed
- NullObject implements IComparable, fixes issues with null keys in ordered dictionaries
- IcdSqliteConnection CreateFile method will create directories recursively
[10.0.0] - 2019-10-07
Added
- IcdEnvironment.GetUtcTime() to get UTC representaiton of current time.
- Extension methods for determining if a sequence is in order
- Overload for calculating the modulus of longs
- Default implementation for AbstractGenericXmlConverter Instantiate method
- Additional binary search extensions, now working for all ILists
- Added NullObject as a means of having null keys in hash tables
Changed
- Potential fix for unhelpful exception messages coming from SafeCriticalSection.Execute
- Small performance improvement when copying arrays
[9.9.0] - 2019-09-16
Added
- Added a method for converting 24 hour to 12 hour format
- Added a method for determining if a culture uses 24 hour format
- Added math util method for modulus
- Added TimeSpan extension methods for cycling hours and minutes without modifying the day
- Added a dictionary extension method for getting or adding a new value via func
- Added CultureInfo extensions for converting between 12 hour and 24 hour time formatting
- Added environment methods for setting the current date and time
- Added BinarySearch extension method for all IList types
- Added PathUtils methods to get ProgramData directory
Changed
- The Root Config path in Net Standard will now be the ICD.Connect folder in the current environments ProgramData directory
- Fixed a bug where CultureInfo was not being cloned correctly
- List AddSorted extensions now work for all IList types
[9.8.0] - 2019-09-03
Added
- Added Public API Properties to get the program install date based on the creation date of core dll file for NetStandard and SimplSharp
- Implemented processor utils for NetStandard to get the system uptime and the program uptime
- Added methods for deserializing an XML array
Changed
- Improvements to JSON DateTime parsing, particularly in Net Standard
[9.7.1] - 2019-08-17
Changed
- Fixed CultureInfo SQLite conection string for 4-series compatibility
[9.7.0] - 2019-08-15
Added
- Added logger timestamps to non simplsharp programs
- Added Net Standard Support for JSON DateTime formats
- Added EmailValidation class
Changed
- JSON dict serialization serializes keys instead of converting to property name
- Fixed a bug where ANSI color encoded strings with percentages were being scrambled
[9.6.0] - 2019-07-03
Added
- Added RecursionUtils method to get a single clique given a starting node
- Breadth First Search can now search graphs in addition to trees
- Added StartOfDay and EndOfDay DateTime extension methods
Changed
- Fixed bug in IcdUriBuilder where Query property behaved differently to UriBuilder
- Throwing an exception when attempting to read a non-primitive JSON token as a string
[9.5.0] - 2019-06-10
Added
- Added Shim to read a list from xml with no root element
- Added a URI query builder
Changed
- Fixed JSON DateTime parsing in .Net Standard
- Fixed threading exception in TypeExtensions
- Fixes for platform-agnostic culture handling
[9.4.0] - 2019-05-10
Added
- Added extension method for peeking queues
- Added extension method for getting or adding a new item to a dictionary
- Added methods for serializing additional types, arrays and dictionaries to JSON
- AbstractGenericJsonConverter exposes virtual methods for overriding object serialization/deserialization
- Added RemoveRange method to IcdHashSet
- Added IcdCultureInfo and CultureInfo database for localization
Changed
- IcdUriBuilder constructors behave closer to UriBuilder, Host defaults to "localhost"
[9.3.0] - 2019-04-16
Added
- Added SPlusUtils with ConvertToInt method taking LowWord/HighWord ushorts
- Added JsonReader extension methods for reading DateTimes
- Added JsonReader extension methods for writing properties
- IcdStreamWriter exposes WriteLine(string)
- Added ProgramLogsPath to PathUtils
Changed
- Fixes for VC4 compatibility
- Fixed JSON DateTime parsing for timezone information
- Small reflection optimizations
[9.2.0] - 2019-03-01
Added
- Added Type IsAssignableTo extension shim
- Added constructor to BiDictionary to instantiate from an existing dict
Changed
- Fixed bug preventing deserialization of XML lists
- Crestron ConsoleResponse uses PrintLine instead of Print
- Use PrintLine instead of ConsoleResponse on Crestron server
[9.1.0] - 2019-02-07
Added
- Added SubscribeEvent shim for delegate callbacks
- Extension method for reading JSON token as a GUID
- Added ToStringJsonConverter
Changed
- Significantly reduced size of JSON serialized Types
- Small logging optimizations
[9.0.0] - 2019-01-29
Added
- IcdConsole.OnConsolePrint event
Changed
- Better VC-4 support for IcdConsole
- JSON refactoring for simpler deserialization
[8.9.3] - 2020-08-17
Changed
- Workaround for logged XML format exceptions when failing to parse floats
[8.9.2] - 2020-07-28
Changed
- StringExtensions - fixed an issue with IsNumeric where empty strings would return true
[8.9.1] - 2020-05-27
Changed
- Changed ProcessorUtils to use CrestronEnvironment to retrive serial number - this fixes issues with new serial numbers that aren't deciaml TSIDs
[8.9.0] - 2020-04-30
Changed
- ProgramUtils and ProcessorUtils return dates instead of strings for date properties
[8.8.1] - 2020-02-18
Changed
- IcdTimer - fixed issue that prevented OnElapsed event from firing when Length is less than (or close to) Heartbeat Interval
[8.8.0] - 2020-01-23
Added
- Added an overload to PriorityQueue for determing the de-duplication behaviour
[8.7.2] - 2019-10-29
Changed
- Fixed a bug with PriorityQueue de-duplication where a new command would be inserted in the wrong position
[8.7.1] - 2019-08-22
Changed
- Fixed a bug with the IcdOrderedDict index setter that was creating additional values
[8.7.0] - 2019-06-24
Added
- IcdXmlException exposes line number and position properties
[8.6.1] - 2019-06-14
Changed
- Fixed a bug where stopped timers on NetStandard would still have a periodic callback duration
[8.6.0] - 2019-06-14
Changed
- Overhaul of RangeAttribute remap methods to better avoid overflows
[8.5.0] - 2019-06-06
Added
- Adding features to IcdEnvironment for tracking program initialization state
[8.4.1] - 2019-06-05
Changed
- Caching the program/processor start time and calculating the uptime from those values instead of polling the crestron processor
[8.4.0] - 2019-05-15
Added
- Added GUID utils for generating seeded GUIDs
- Added extension method for getting stable hashcodes from strings
- Added environment and processor utilities for determining DNS status and hostname
Changed
- RangeAttribute improvements for better type safety
- PathUtils breaking out ProgramConfigDirectory and CommonConfigDirectory from the full paths
[8.3.3] - 2019-05-24
Added
- Added empty, placeholder interface for ICD Attributes
[8.3.2] - 2019-05-02
Changed
- Fixed PriorityQueue IndexOutOfRange exception when an inner queue becomes depleted
[8.3.1] - 2019-04-05
Changed
- Fixed FormatException when parsing some JSON DateTimes
[8.3.0] - 2019-01-25
Added
- Added SimplSharpProMono to eRuntimeEnvironment enum
- Added path support for SimplSharpProMono environment
- Added GetApplicationRootDirectory for all platforms
Changed
- Small fixes for better VC4 support
[8.2.0] - 2019-01-10
Added
- Added TryGetPortForScheme method to UriExtensions
- Added range attribute for clarifying numeric fields, properties and parameters
Changed
- IcdHashSet preserves comparer when an operation creates a new IcdHashSet
- Fixed bug where XML fragments on Net Standard were being prepended with a document header
[8.1.0] - 2019-01-02
Added
- Added GetAttributeAsEnum xml utils method
- Adding short parsing methods to XML utils
- Added methods to IcdUriBuilder for appending path
- Added RegexUtils method for replacing a single group in a match
[8.0.0] - 2018-11-20
Added
- XML TryGetAttribute methods
Changed
- Performance improvements when working with xml attributes
- Fixed NullReferenceException when writing null strings to CSV
- Fixed bug with string formatting console input on Net Standard
Removed
- Removed IcdXmlAttribute
[7.1.0] - 2018-11-08
Added
- IcdXmlTextWriter exposes WriteStartDocument and WriteEndDocument
- AttributeUtils method for getting properties with the given attribute type
Changed
- EnumerableExtensions performance improvements
- Fixed bug in StringExtensions when removing a sequence of characters from a string
[7.0.0] - 2018-10-30
Changed
- Micro-optimizations in string and XML manipulations
- Significant hashset optimizations
- Deprecated NVRAM in favor of USER directory
[6.0.0] - 2018-10-18
Added
- CsvWriter for creating CSV files + Settings
- AppendText method for IcdFile
- IcdStreamWriter, a wrapper for a StreamWriter
- New XML conversion framework for performance improvements
Changed
- XmlUtils is now using the improved XML conversion framework
- Better implementation of DictionaryExtensions.ToInverse
[5.0.0] - 2018-09-14
Added
- Stopwatch profiling methods
- Attempt to interpret old assembly naming convention when parsing types
- Added RegexUtils
Changed
- Significant performance improvements across the board
[4.0.0] - 2018-07-19
Added
- Added extension method for getting type name without trailing generic info
- Added DateTime extensions for getting next/last time in a sequence
- Added action scheduler service
- Added IcdTimer methods for profiling event performance
Changed
- Re-raise base exception from ReflectionUtils.CreateInstance, TargetInvocationException and TypeLoadException don't say much
[3.7.0] - 2018-07-02
Added
- Adding SequenceComparer for ordering collections of lists, arrays, etc
- Added RateLimitedEventQueue collection for throttling events
Changed
- Potential fix for timer disposal on Net Standard
- Added workaround for older RPC servers where the typestring being broadcast would stil include _SimplSharp, now will be stripped
- Fixing bug where Timer.Reset() would continue repeating on an interval in Net Standard
[3.6.0] - 2018-06-19
Added
- Added ZIP features for examining the contents of an archive
- Added FileNameEqualityComparer
- Added BiDictionary for one-to-one maps
[3.5.1] - 2018-06-04
Changed
- PriorityQueue indexing fix
- Pathfinding optimizations
[3.5.0] - 2018-05-24
Added
- Added GetFlagsExceptNone parameterless enum method
- Added pathfinding methods for determining if a path exists
[3.4.0] - 2018-05-23
Added
- Added SetEquals method to IcdHashSet
[3.3.0] - 2018-05-18
Added
- Added IcdOrderedDictionary collection
- Added PriorityQueue collection
- Added IcdUriBuilder and UriExtensions for reading/writing URI data
[3.2.0] - 2018-05-09
Added
- Added util method for removing BOM characters from UTF8 data
- Added extension method to convert from bool to ushort and back
- Added extension method to cast enums to ushort value
[3.1.0] - 2018-05-04
Added
- Added Yield extension to return a single-item enumerable for an object.
[3.0.0] - 2018-04-23
Added
- Adding extension method for getting Informational Version from an Assembly
- Adding WeakKeyDictionary for caching
- Reflection util methods
Changed
- JSON serialization/deserialization features moved into base converter
- Removed suffix from assembly name