2
2
<div class =" glances-temp-wrapper" v-if =" tempData" >
3
3
<div class =" temp-row" v-for =" sensor in tempData" :key =" sensor.label" >
4
4
<p class =" label" >{{ sensor.label | formatLbl }}</p >
5
- <p :class =" `temp range-${sensor.color}`" >{{ sensor.value | formatVal(sensor.sensorType ) }}</p >
5
+ <p :class =" `temp range-${sensor.color}`" >{{ sensor.value | formatVal(sensor.unit ) }}</p >
6
6
</div >
7
7
</div >
8
8
</template >
9
9
10
10
<script >
11
11
import WidgetMixin from ' @/mixins/WidgetMixin' ;
12
12
import GlancesMixin from ' @/mixins/GlancesMixin' ;
13
- import { capitalize , fahrenheitToCelsius } from ' @/utils/MiscHelpers' ;
13
+ import { capitalize , celsiusToFahrenheit , fahrenheitToCelsius } from ' @/utils/MiscHelpers' ;
14
14
15
15
export default {
16
16
mixins: [WidgetMixin, GlancesMixin],
@@ -29,18 +29,45 @@ export default {
29
29
formatLbl (lbl ) {
30
30
return capitalize (lbl);
31
31
},
32
- formatVal (val , sensorType ) {
33
- switch (sensorType ) {
34
- case ' rpm ' :
32
+ formatVal (val , unit ) {
33
+ switch (unit ) {
34
+ case ' R ' :
35
35
return ` ${ Math .round (val)} rpm` ;
36
- case ' percentage ' :
36
+ case ' % ' :
37
37
return ` ${ Math .round (val)} %` ;
38
38
default :
39
- return ` ${ Math .round (val)} Β°C ` ;
39
+ return ` ${ Math .round (val)} Β°${ unit } ` ;
40
40
}
41
41
},
42
42
},
43
43
methods: {
44
+ getDesiredUnits () {
45
+ return this .options .units ?? ' C' ;
46
+ },
47
+ getDisplayValue (rawValue , units ) {
48
+ const desiredUnits = this .getDesiredUnits ();
49
+ if (units === desiredUnits) {
50
+ return rawValue;
51
+ }
52
+
53
+ return desiredUnits === ' C'
54
+ ? fahrenheitToCelsius (rawValue)
55
+ : celsiusToFahrenheit (rawValue);
56
+ },
57
+ getCelsiusValue (rawValue , units ) {
58
+ if (units !== ' F' && units !== ' C' ) {
59
+ return Number .NaN ;
60
+ }
61
+
62
+ return units === ' C' ? rawValue : fahrenheitToCelsius (rawValue);
63
+ },
64
+ getFahrenheitValue (rawValue , units ) {
65
+ if (units !== ' F' && units !== ' C' ) {
66
+ return Number .NaN ;
67
+ }
68
+
69
+ return units === ' F' ? rawValue : celsiusToFahrenheit (rawValue);
70
+ },
44
71
getTempColor (temp ) {
45
72
if (temp <= 50 ) return ' green' ;
46
73
if (temp > 50 && temp < 75 ) return ' yellow' ;
@@ -54,45 +81,53 @@ export default {
54
81
return ' green' ;
55
82
},
56
83
processData (sensorData ) {
57
- const results = [];
58
- sensorData .forEach ((sensor ) => {
59
- // Start by assuming the sensor's unit is degrees Celsius
60
- let sensorValue = sensor .value ;
61
- let color = this .getTempColor (sensorValue);
62
- let sensorType = ' temperature' ;
63
-
64
- // Now, override above if sensor unit is actually of a different type
84
+ this .tempData = sensorData .map (sensor => {
65
85
switch (sensor .unit ) {
66
86
case ' F' :
67
- sensorValue = fahrenheitToCelsius (sensorValue);
68
- color = fahrenheitToCelsius (sensorValue);
69
- break ;
70
-
71
- // R is for RPM and is typically for fans
87
+ case ' C' :
88
+ return this .processTemperatureSensor (sensor);
72
89
case ' R' :
73
- color = ' grey' ;
74
- sensorType = ' rpm' ;
75
- break ;
76
-
77
- // For instance, battery levels
90
+ return this .processFanSensor (sensor);
78
91
case ' %' :
79
- sensorType = ' percentage' ;
80
- color = this .getPercentageColor (sensorValue);
81
- break ;
82
-
83
- // Nothing to do here, already covered by default values
92
+ return this .processBatterySensor (sensor);
84
93
default :
85
- break ;
94
+ // Justification: This is a recoverable error that developers
95
+ // should nevertheless be warned about.
96
+ // eslint-disable-next-line
97
+ console .warn (' Unrecognized unit' , sensor .unit );
98
+ return null ;
86
99
}
100
+ }).filter (Boolean );
101
+ },
102
+ processBatterySensor ({ label, unit, value }) {
103
+ const color = this .getPercentageColor (value);
104
+ return {
105
+ color,
106
+ label,
107
+ unit,
108
+ value,
109
+ };
110
+ },
111
+ processFanSensor ({ label, unit, value }) {
112
+ return {
113
+ color: ' grey' ,
114
+ label,
115
+ unit,
116
+ value,
117
+ };
118
+ },
119
+ processTemperatureSensor ({ label, unit, value: originalValue }) {
120
+ const celsiusValue = this .getCelsiusValue (originalValue, unit);
121
+ const color = this .getTempColor (celsiusValue);
122
+ const displayValue = this .getDisplayValue (originalValue, unit);
123
+ const displayUnits = this .getDesiredUnits ();
87
124
88
- results .push ({
89
- label: sensor .label ,
90
- value: sensorValue,
91
- color,
92
- sensorType,
93
- });
94
- });
95
- this .tempData = results;
125
+ return {
126
+ color,
127
+ label,
128
+ unit: displayUnits,
129
+ value: displayValue,
130
+ };
96
131
},
97
132
},
98
133
};
0 commit comments