From 0.1.0 Beta 1 to 0.1.0 Beta 2
Guide for upgrading 0.1.0 Beta 1 mods to 0.1.0 Beta 2
This page lists all the changes that have been made from 0.1.0 Beta 1 to 0.1.0 Beta 2. For upgrading your mods from 0.0.24.x directly to the 0.1.0 series, use the main upgrade page where it highlights the most important changes.
From Beta 1 to Beta 2
During Beta 2's development, we have made the following breaking changes:
Employed ColorPrint.Core
for color wheel
ColorPrint.Core
for color wheelThe color wheel was implemented in the kernel to allow color selection. However, it lacked features such as the color blindness simulation, so we decided to make an entirely new library dedicated to this. As a result, we've replaced the kernel's implementation with ColorPrint.Core
, which is more portable and easier to use.
Removed the country-based RSS feed selector
The feed selector used to prompt you for a country so that you can select a feed according to the minimal list of known RSS feeds operating from the selected country. Recently, we've discovered many broken links (404's) across many feeds, so we decided to remove it as the source was out of date.
Its functionality will be replaced with the bookmarked feed selector. Meanwhile, it's advisable to stop using this function on your mods.
Removed UseCtrlCAsInput
from ReadLine()
's
UseCtrlCAsInput
from ReadLine()
'sUseCtrlCAsInput
used to tell ReadLine.Reboot to treat Ctrl + C
as input to try to aid in cancelling prompts. Apparently, that library was deprecated and replaced with TermRead. As a result, this feature is removed.
We advice you to cease using this variable in the above functions.
Removed SaveCurrDir()
SaveCurrDir()
This function used to save the current directory value to the kernel configuration file stored in the %LOCALAPPDATA%/KS/KernelMainConfig.json
for Windows or the $HOME/.config/ks/KernelMainConfig.json
. Following the recent improvements in the configuration system that took place two times during 0.1.0's development, the SaveCurrDir()
function was effectively reduced to a single call to the Config.CreateConfig()
function, which already deals with this kind of change, rendering this function useless. As a result, we decided to remove this function as it added no value and was just an extraneous wrapper function.
If you want to save the current directory value in the future, please use the kernel settings application to save the configuration. Programmatically, you'll have to call the Config.CreateConfig()
function instead of the two above functions.
Group system and the User Management API
We've added a real group system to the KS.Users namespace under Groups in order to group the users and give them shared permissions. In consequence, we had to rework the user management system, causing several API removals.
The following functions were documented:
LoadUserToken()
: Tries to manually deserialize the user configuration JSON file to be usable with all the user management functions.InitializeSystemAccount()
: Tries to initialize a root account with a defined password from the same user token.GetUserProperty()
: Gets a user property as a JSON token, JToken, which has to be manually cast to either a string, boolean, or array of strings.SetUserProperty()
: Sets a user property, taking an uncasted JSON token that represents either a string, boolean, or array of strings.
The first two functions were removed, because they were deemed to be unnecessary for a long time. A re-work to the user management API made it reasonable to remove these functions.
However, the last two functions were removed because it was found to be complicated for having to cast to their appropriate types manually. We also removed the ability to directly set a user's properties security-wise.
Because the user management API reached to a stage when it was re-written to simplify things, we advice you to cease using these functions.
Initial implementation of the TUI
The following classes are affected:
The following functions are affected:
The three CLIs used to implement their own CLI based on data for contacts, kernel threads, and files respectively. Now, with the introduction of the IInteractiveTui
interface and the BaseInteractiveTui
class, we've made the three above classes implement both the classes, removing the static
modifier from the three CLIs.
As a result, we've removed the OpenMain()
function from all of them. However, you can still open the CLI as follows:
This removal was necessary to avoid code repetition, effectively making maintenance easier.
Added warning reports to the splash interface
The splash reporter used to only report the progress and the error messages during the kernel startup. Now, we've added warnings to extend the possibility of accurately reporting warnings without having to rely on special conditions on the progress report.
Added ReadToEndAndSeek()
to filesystem driver
ReadToEndAndSeek()
to filesystem driverAs part of the removal of Extensification dependency from Nitrocid KS as a result of its deprecation, we decided to adapt the kernel to remove all references to Extensification and re-implement things. The commit states:
Since this library is deprecated starting today, we've removed all references to Extensification by updating all libraries and making necessary changes to the API to restore the used Extensification functions to
TextTools
,IntegerTools
, andStreamRead
. Custom filesystem drivers in your mods will now have to implementReadToEndAndSeek()
to be compatible with this revision of N-KS, so we've increased the mod API version to3.0.25.7
.
Removed ConsoleWrapper.WindowTop
ConsoleWrapper.WindowTop
Console.WindowTop
is always 0 on both the Windows and the Unix operating systems, but you can set this value only on Windows systems, which kills the potential of cross-platform. This is deemed unnecessary for most of the things, which makes it redundant, so we've removed this function from both the ConsoleWrapper
and the Console
driver.
We advice you to replace all instances of this function from ConsoleWrapper
with 0
, and remove all implementations of this property from all your Console
drivers.
Converted string char variables to chars
The above char variables used to hold only one character, but they were defined as strings instead of chars, so users made it possible to place more than one character to these variables. Usually, the handlers only take the first character from the string.
Since the config entries defined these variables as configurable under the SChar
type, the config app made enough checking to make sure that only one character can be input. This caused us to convert all these variables to strings, affecting the following classes:
NotificationManager
Notification
BarRotSettings
IndeterminateSettings
ProgressClockSettings
RampSettings
BorderTools
ProgressTools
The following writers are also affected and are found to be using characters as strings before the change:
WriteBorder()
andWriteBorderPlain()
WriteBoxFrame()
andWriteBoxFramePlain()
WriteInfoBox()
andWriteInfoBoxPlain()
WriteProgress()
andWriteProgressPlain()
WriteVerticalProgress()
andWriteVerticalProgressPlain()
Added finding files using regular expressions
The following functions are added to the filesystem driver:
This function gets all the filesystem entries found under the specified parent directory, with the regular expression pattern. This uses the regular expression driver to handle the regex work.
Removed configurable maintenance mode
Long ago, we used to allow users to force the kernel to maintenance mode upon setting this value right from the configuration application. However, this can be abused, so we decided to remove it as a configuration entry, but the mode itself stays. You can still run the kernel in maintenance mode by passing maintenance
as a command line argument to Nitrocid's entry point. Refer to the below page for more information:
We advice you to cease using this flag. Maintenance mode doesn't allow mods to load, anyways.
Migrated two speed dial types to one JSON file
To migrate two different JSON files holding speed dial entries for FTP and SFTP servers, we decided to replace FTPSpeedDial
and SFTPSpeedDial
with SpeedDial
and FTPSpeedDialPath
and SFTPSpeedDialPath
with SpeedDialPath
, effectively removing a function from SpeedDialTools
, GetPathTypeFromSpeedDialType()
, and the remaining functions removing the (SpeedDialType SpeedDialType)
signature, causing them not to take any speed dial type.
The commit said:
This migration is necessary to efficiently put speed dials to one JSON file as we have the Type key already in speed dial properties.
Added support for SwitchInfo
SwitchInfo
CommandArgumentInfo
and the UESH shell used to hold HelpUsage
classes to get info about help usages, but they didn't become aware of unknown switches, so we decided to split HelpUsage
to a string of command arguments and command switches, using SwitchInfo
as a class to hold help information for each switch, including the properties for each switch, like the requirement and the value requirement.
This causes us to remove all help helpers that hold info about the supported switches, especially since the later commands that do support switches didn't have their help helpers that tell the users about the command switches.
In consequence, CommandArgumentInfo
has been changed to hold only one constructor that holds both array of arguments and array of switch information class instances.
An example is provided below:
Migrated text tools
As TextTools
matured with different string tools, we decided to migrate the following functions from their respective classes to that class under the KS.Misc.Text
namespace:
FormatString(string Format, params object[] Vars)
IsStringNumeric(string Expression)
Moved BannerFigletFont
to WelcomeMessage
BannerFigletFont
to WelcomeMessage
As this property doesn't have to do with the kernel tools, we decided to move from the KernelTools
class to the WelcomeMessage
class found under the KS.Misc.Writers.MiscWriters
namespace.
Easier way to render info into the second pane
When we first introduced the interactive TUI feature, we had to leave the entire "rendering to the second pane" logic to your interactive TUI instance. However, since this involves having to wrap the informational pane and to work out the text lengths and console positions yourself, we've placed these requirements so that it's up to the handler to handle printing the information, effectively replacing the function above with GetInfoFromItem
.
Enhanced the screen locking feature
The screen locking feature was malfunctioning for a long time. Unfortunately, it went under the radar, so it wasn't looked at. We've finally managed to enhance the screen locking feature by checking our heuristics. Moreover, we had to separate the ShowPasswordPrompt
function from trying to log the user in, as this was the requirement in enhancing the screen lock, since it was used by this feature.
Moved journaling related classes to KS.Kernel.Journaling
KS.Kernel.Journaling
We used to place all the journaling-related classes and tools to the KS.Kernel.Administration.Journalling
namespace, until we've found out that said namespace wasn't needed because we didn't have plans to add another namespace to the Administration
namespace, so we decided to move journaling-related classes to the KS.Kernel.Journaling
namespace.
Time and Date API enhancements
The TimeDate API was left untouched for a long time, and its structure was a bit too old for the modern API system that Nitrocid KS uses to be usable for mods and general purpose, so we have decided to create the following namespaces:
KS.Kernel.Time.Converters
KS.Kernel.Time.Renderers
KS.Kernel.Time.Timezones
KS.Kernel.Time
We have moved relevant functions according to their action to the above namespaces. For example, the Render()
function was moved to TimeDateRenderers
class in the Renderers
namespace.
We have also isolated the FormatType
enumeration from the TimeDateTools
class so that the mods don't have to reference the class name in order to access this enumeration.
Also, some functions like GetRemainingTimeFromNow()
have their return types changed from string
to TimeSpan
. To get a string, you must now use the RenderRemainingTimeFromNow()
function to continue using strings to render the remaining time from the current date and time.
Manual page parsing now uses the interactive TUI
The manual page viewer used to be so limited in features; you could only advance to the next pages of the manual and exit back to the shell. You had to specify the full manual page title after listing it with the -list
switch.
The migration of the viewer to the TUI required the following changes:
The above functions have their return values changed to a List<Manual>
type. It was done because we needed to store a kernel modification name inside the Manual
instance, so we have done the below changes:
The two above functions have changed their signature so they they take a mod name (string modName
) before every element.
The above function has its signature changed so that instead of the manual page name (title), it now takes an instance of the Manual
class to remove a selected manual page.
ChoiceOutputType
is now standalone
ChoiceOutputType
is now standaloneWe have separated the ChoiceOutputType
enumeration from the ChoiceStyle
class so that we can simplify its access. Now, you can access this enumeration directly; you don't have to append ChoiceStyle
before the enumeration so that it becomes easier for you to access.
Breaking changes following the OpenConnectionForShell()
implementation
OpenConnectionForShell()
implementationIn order for OpenConnectionForShell()
to be able to distinguish the shells that accept the network connections from the shells that don't, we needed to add the above property to the interface implementation of the ShellInfo
class. The base class has been updated so that it implements the above property as false so that you don't have to override this property in the non-networked shells implemented either by Nitrocid or by your mods:
Renamed Shell to ShellManager
However, this naming has introduced problems for us because we needed to write Shell
twice before being able to write its function names for reference, which is messy. As a result, we had to rename this class to ShellManager
so that its access is easier.
ColorTools
class renamed to KernelColorTools
ColorTools
class renamed to KernelColorTools
The ColorTools
class used to hold color tools which have to do directly with the kernel and its console driver so that it can manipulate with the colors, like setting the console color, setting the console background color, and so on.
However, it has been recently concluded that there is a class under the same name from the ColorSeq library, which caused us to have to add an extra imports clause to rename the ColorTools
class so that it doesn't conflict with ColorSeq's class.
We were being fed up of this, so we decided to rename the entire class to KernelColorTools
.
Namespace movements
To better organize these namespaces, we decided to move them to more appropriate places outlined below:
First, the Execution
namespace had to do with executing processes, which was only being done by the shell and by the TMUX pane size detector. While it was referenced outside any shell code, we feel that it would be more appropriate to move it to the shell code.
Second, the kernel threading functionality got so mature that it was moved to the kernel code, showing that it really had great importance.
Third, all of the writers had to do with the console upon analyzing the namespace. As a result, we had to move them to the ConsoleBase
namespace so that it reflects the purpose more appropriately namespace-wise.
As for the scripting, the only code which was calling it was the UESH shell command parser, which was part of the shell. For this reason, we decided to move the namespace to better show that it was part of the shell code.
FInally, for the hardware code, it went straight to the kernel namespace as it felt that it's really a part of the kernel. The hardware code gets called each time the kernel starts and as the hwinfo
command gets executed.
Moved JSON beautifier and minifier functions to JsonTools
JsonTools
These functions used to exist in their own namespace with their own classes that are categorized based on the JSON formatting type on serialization. However, JsonTools
looked like that it'd be the better place for them, so we've moved them into said class.
Moved path lookup properties
These path lookup properties used to exist in the shell management code, which indicated that these variables were exclusive for the shell command parser. However, at the same time, PathLookupTools
existed, and we thought that it would be more appropriate to move these into that class, so we decided to move them into said class.
Removed the field manager
When this was implemented, we relied on it for kernel configuration to get the variable values by name from the kernel configuration declaration file (known as SettingsEntries.json and its ancestors for screensaver and splash settings).
However, following several configuration system improvements that occurred two times:
We've started working on the Reflection-based configuration reader and writer back at very early development stages by the following commits (in chronological order):
We've removed the Reflection-based configuration as it was deemed to be very slow, and replaced its implementation with the serialization-based approach. The first commit has extensive information about the two config system merges. The following commits were done in the chronological order:
We advice you to cease using this class and its functions, especially since it's useless for public fields that will either get converted to properties or get removed (if any).
Last updated