Merge branch 'less-verbose'

This commit is contained in:
Jon Lund Steffensen
2014-12-27 21:29:27 -05:00
+86 -12
View File
@@ -294,6 +294,20 @@ typedef enum {
PROGRAM_MODE_MANUAL
} program_mode_t;
/* Periods of day. */
typedef enum {
PERIOD_DAYTIME = 0,
PERIOD_NIGHT,
PERIOD_TRANSITION
} period_t;
/* Names of periods of day */
static const char *period_names[] = {
"Daytime",
"Night",
"Transition"
};
#if defined(HAVE_SIGNAL_H) && !defined(__WIN32__)
static volatile sig_atomic_t exiting = 0;
@@ -325,18 +339,46 @@ static float transition_low = TRANSITION_LOW;
static float transition_high = TRANSITION_HIGH;
/* Print which period (night, day or transition) we're currently in. */
static void
print_period(double elevation)
/* Determine which period we are currently in. */
static period_t
get_period(double elevation)
{
if (elevation < transition_low) {
printf(_("Period: Night\n"));
return PERIOD_NIGHT;
} else if (elevation < transition_high) {
float a = (transition_low - elevation) /
(transition_low - transition_high);
printf(_("Period: Transition (%.2f%% day)\n"), a*100);
return PERIOD_TRANSITION;
} else {
printf(_("Period: Daytime\n"));
return PERIOD_DAYTIME;
}
}
/* Determine how far through the transition we are. */
static double
get_transition_progress(double elevation)
{
if (elevation < transition_low) {
return 0.0;
} else if (elevation < transition_high) {
return (transition_low - elevation) /
(transition_low - transition_high);
} else {
return 1.0;
}
}
/* Print verbose description of the given period. */
static void
print_period(period_t period, double transition)
{
switch (period) {
case PERIOD_NIGHT:
case PERIOD_DAYTIME:
printf(_("Period: %s\n"), period_names[period]);
break;
case PERIOD_TRANSITION:
printf(_("Period: %s (%.2f%% day)\n"),
period_names[period], transition*100);
break;
}
}
@@ -1289,7 +1331,9 @@ main(int argc, char *argv[])
interpolate_color_settings(elevation, &day, &night, &interp);
if (verbose || mode == PROGRAM_MODE_PRINT) {
print_period(elevation);
period_t period = get_period(elevation);
double transition = get_transition_progress(elevation);
print_period(period, transition);
printf(_("Color temperature: %uK\n"), interp.temperature);
printf(_("Brightness: %.2f\n"), interp.brightness);
}
@@ -1370,6 +1414,13 @@ main(int argc, char *argv[])
printf("Status: %s\n", "Enabled");
}
/* Save previous colors so we can avoid
printing status updates if the values
did not change. */
period_t prev_period = -1;
color_setting_t prev_interp =
{ -1, { NAN, NAN, NAN }, NAN };
/* Continuously adjust color temperature */
int done = 0;
int disabled = 0;
@@ -1440,7 +1491,17 @@ main(int argc, char *argv[])
color_setting_t interp;
interpolate_color_settings(elevation, &day, &night, &interp);
if (verbose) print_period(elevation);
/* Print period if it changed during this update,
or if we are in transition. In transition we
print the progress, so we always print it in
that case. */
period_t period = get_period(elevation);
if (verbose && (period != prev_period ||
period == PERIOD_TRANSITION)) {
double transition =
get_transition_progress(elevation);
print_period(period, transition);
}
/* Ongoing short transition */
if (short_trans_delta) {
@@ -1471,8 +1532,16 @@ main(int argc, char *argv[])
if (done && !short_trans_delta) break;
if (verbose) {
printf(_("Color temperature: %uK\n"), interp.temperature);
printf(_("Brightness: %.2f\n"), interp.brightness);
if (interp.temperature !=
prev_interp.temperature) {
printf(_("Color temperature: %uK\n"),
interp.temperature);
}
if (interp.brightness !=
prev_interp.brightness) {
printf(_("Brightness: %.2f\n"),
interp.brightness);
}
}
/* Adjust temperature */
@@ -1486,6 +1555,11 @@ main(int argc, char *argv[])
}
}
/* Save temperature as previous */
prev_period = period;
memcpy(&prev_interp, &interp,
sizeof(color_setting_t));
/* Sleep for 5 seconds or 0.1 second. */
#ifndef _WIN32
if (short_trans_delta) usleep(SLEEP_DURATION_SHORT*1000);