Files
custum-hyprpanel/src/lib/units/temperature/index.ts
Jas Singh 8cf5806766 Minor: Refactor the code-base for better organization and compartmentalization. (#934)
* Clean up unused code

* Fix media player formatting issue for labels with new line characteres.

* Refactor the media player handlers into a class.

* More code cleanup and organize shared weather utils into distinct classes.

* Flatten some nesting.

* Move weather manager in dedicated class and build HTTP Utility class for Rest API calling.

* Remove logs

* Rebase master merge

* Reorg code (WIP)

* More reorg

* Delete utility scripts

* Reorg options

* Finish moving all options over

* Fix typescript issues

* Update options imports to default

* missed update

* Screw barrel files honestly, work of the devil.

* Only initialize power profiles if power-profiles-daemon is running.

* Fix window positioning and weather service naming

* style dir

* More organization

* Restructure types to be closer to their source

* Remove lib types and constants

* Update basic weather object to be saner with extensibility.

* Service updates

* Fix initialization strategy for services.

* Fix Config Manager to only emit changed objects and added missing temp converters.

* Update storage service to handle unit changes.

* Added cpu temp sensor auto-discovery

* Added missing JSDocs to services

* remove unused

* Migrate to network service.

* Fix network password issue.

* Move out password input into helper

* Rename password mask constant to be less double-negativey.

* Dropdown menu rename

* Added a component to edit JSON in the settings dialog (rough/WIP)

* Align settings

* Add and style JSON Editor.

* Adjust padding

* perf(shortcuts):  avoid unnecessary polling when shortcuts are disabled

Stops the recording poller when shortcuts are disabled, preventing redundant polling and reducing resource usage.

* Fix types and return value if shortcut not enabled.

* Move the swww daemon checking process outside of the wallpaper service into a dedicated deamon lifecyle processor.

* Add more string formatters and use title case for weather status (as it was).

* Fix startup errors.

* Rgba fix

* Remove zod from dependencies

---------

Co-authored-by: KernelDiego <gonzalezdiego.contact@gmail.com>
2025-05-26 19:45:11 -07:00

130 lines
3.6 KiB
TypeScript

import { TemperatureUnit } from './types';
export class TemperatureConverter {
private readonly _value: number;
private readonly _unit: TemperatureUnit;
private constructor(value: number, unit: TemperatureUnit) {
this._value = value;
this._unit = unit;
}
/**
* Creates a converter from Celsius
* @param value - Temperature in Celsius
*/
public static fromCelsius(value: number): TemperatureConverter {
return new TemperatureConverter(value, 'celsius');
}
/**
* Creates a converter from Fahrenheit
* @param value - Temperature in Fahrenheit
*/
public static fromFahrenheit(value: number): TemperatureConverter {
return new TemperatureConverter(value, 'fahrenheit');
}
/**
* Creates a converter from Kelvin
* @param value - Temperature in Kelvin
*/
public static fromKelvin(value: number): TemperatureConverter {
return new TemperatureConverter(value, 'kelvin');
}
/**
* Converts the temperature to Celsius (base unit)
*/
private _toBaseUnit(): number {
switch (this._unit) {
case 'celsius':
return this._value;
case 'fahrenheit':
return ((this._value - 32) * 5) / 9;
case 'kelvin':
return this._value - 273.15;
}
}
/**
* Converts to Celsius
* @param precision - Number of decimal places (optional)
*/
public toCelsius(precision?: number): number {
const value = this._toBaseUnit();
return precision !== undefined ? Number(value.toFixed(precision)) : value;
}
/**
* Converts to Fahrenheit
* @param precision - Number of decimal places (optional)
*/
public toFahrenheit(precision?: number): number {
const celsius = this._toBaseUnit();
const value = (celsius * 9) / 5 + 32;
return precision !== undefined ? Number(value.toFixed(precision)) : value;
}
/**
* Converts to Kelvin
* @param precision - Number of decimal places (optional)
*/
public toKelvin(precision?: number): number {
const celsius = this._toBaseUnit();
const value = celsius + 273.15;
return precision !== undefined ? Number(value.toFixed(precision)) : value;
}
/**
* Formats the temperature with a specific unit and precision
* @param unit - Target unit
* @param precision - Number of decimal places (default: 0)
*/
public format(unit: TemperatureUnit, precision = 0): string {
let value: number;
let symbol: string;
switch (unit) {
case 'celsius':
value = this.toCelsius();
symbol = '° C';
break;
case 'fahrenheit':
value = this.toFahrenheit();
symbol = '° F';
break;
case 'kelvin':
value = this.toKelvin();
symbol = ' K';
break;
}
return `${value.toFixed(precision)}${symbol}`;
}
/**
* Formats to Celsius
* @param precision - Number of decimal places
*/
public formatCelsius(precision = 0): string {
return this.format('celsius', precision);
}
/**
* Formats to Fahrenheit
* @param precision - Number of decimal places
*/
public formatFahrenheit(precision = 0): string {
return this.format('fahrenheit', precision);
}
/**
* Formats to Kelvin
* @param precision - Number of decimal places
*/
public formatKelvin(precision = 0): string {
return this.format('kelvin', precision);
}
}