# -*- python -*-
# This example demonstrates how settings can be stored
# and be transition from later.
# This file is dual-licensed under GNU General Public License
# version 3 and GNU Free Documentation License version 1.3.
# Copyright © 2014, 2015, 2016, 2017 Mattias Andrée (maandree@kth.se)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Copyright © 2014, 2015, 2016, 2017 Mattias Andrée (maandree@kth.se)
#
# Permission is granted to copy, distribute and/or modify this document
# under the terms of the GNU Free Documentation License, Version 1.3
# or any later version published by the Free Software Foundation;
# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
# You should have received a copy of the GNU General Public License
# along with this software package. If not, see <http://www.gnu.org/licenses/>.
import os
import time
uses_adhoc_opts = True
'''
:bool `True` if the configuration script parses the ad-hoc settings
'''
# Get --temperature from Blueshift ad-hoc settigns
temperature_to = int(parser.opts['--temperature'][0])
# Get old temperature setting
temperature_from = 6500
def env_(var, default):
if var not in os.environ:
return default
rc = os.environ[var]
if rc == '':
rc = default
return rc
storage_file = '/dev/shm/.blueshift-conf-%s-%s' % (env_('DISPLAY', 'tty'), os.environ['USER'])
if os.path.exists(storage_file):
with open(storage_file, 'rb') as file:
temperature_from = int(file.read().decode('utf-8', 'replace').split('\n')[0])
# Store new temperature
with open(storage_file, 'wb') as file:
file.write(str(temperature_to).encode('utf-8'))
file.flush()
# Calculate transition time
fadein_time = abs(temperature_to - temperature_from) * 5 / (6500 - 3700)
fadein_steps = fadein_time * 10
# Function for setting the colour temperature
def adjust(alpha):
temp = temperature_to * alpha + temperature_from * (1 - alpha)
start_over()
temperature(temp, lambda t : divide_by_maximum(cmf_10deg(t)))
(drm if ttymode else randr)(0)
# Perform transition
if not (panicgate or temperature_to == temperature_from):
signal.signal(signal.SIGTERM, signal_SIGTERM)
dtime = fadein_time / fadein_steps
df = 1 / fadein_steps
trans = 0
while running:
try:
trans += df
if trans > 1:
break
adjust(trans)
time.sleep(dtime)
except KeyboardInterrupt:
running = False
adjust(1)