Revert "modules refactoring + slight changes to folder structure"
This reverts commit 3fe9675bef
.
This commit is contained in:
@@ -1,4 +0,0 @@
|
||||
from .parser import settings
|
||||
print('loaded settings')
|
||||
from .layout import layout
|
||||
print('loaded layout')
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,102 +0,0 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Layout module for Inky-Calendar software.
|
||||
Copyright by aceisace
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
class layout:
|
||||
"""Page layout handling"""
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
def __init__(self, model=None, width=None, height=None,
|
||||
supports_colour=False):
|
||||
"""Initialize parameters for specified epaper model
|
||||
Use model parameter to specify display OR
|
||||
Crate a custom display with given width and height"""
|
||||
|
||||
self.background_colour = 'white'
|
||||
self.text_colour = 'black'
|
||||
|
||||
if (model != None) and (width == None) and (height == None):
|
||||
display_dimensions = {
|
||||
'epd_7_in_5_v2_colour': (800, 400),
|
||||
'epd_7_in_5_v2': (800, 400),
|
||||
'epd_7_in_5_colour': (640, 384),
|
||||
'epd_7_in_5': (640, 384),
|
||||
'epd_5_in_83_colour': (600, 448),
|
||||
'epd_5_in_83': (600, 448),
|
||||
'epd_4_in_2_colour': (400, 300),
|
||||
'epd_4_in_2': (400, 300),
|
||||
}
|
||||
|
||||
self.display_height, self.display_width = display_dimensions[model]
|
||||
if 'colour' in model:
|
||||
self.three_colour_support = True
|
||||
|
||||
elif width and height:
|
||||
self.display_height = width
|
||||
self.display_width = height
|
||||
self.supports_colour = supports_colour
|
||||
|
||||
else:
|
||||
print("Can't create a layout without given sizes")
|
||||
raise
|
||||
|
||||
self.top_section_width = self.display_width
|
||||
self.middle_section_width = self.display_width
|
||||
self.bottom_section_width = self.display_width
|
||||
self.create_sections()
|
||||
|
||||
def create_sections(self, top_section=0.10, middle_section=0.65,
|
||||
bottom_section=0.25):
|
||||
"""Allocate fixed percentage height for top and middle section
|
||||
e.g. 0.2 = 20% (Leave empty for default values)
|
||||
Set top/bottom_section to 0 to allocate more space for the middle section
|
||||
"""
|
||||
scale = lambda percentage: round(percentage * self.display_height)
|
||||
|
||||
if top_section == 0 or bottom_section == 0:
|
||||
if top_section == 0:
|
||||
self.top_section_height = 0
|
||||
|
||||
if bottom_section == 0:
|
||||
self.bottom_section_height = 0
|
||||
|
||||
self.middle_section_height = scale(1 - top_section - bottom_section)
|
||||
else:
|
||||
if top_section + middle_section + bottom_section > 1.0:
|
||||
print('All percentages should add up to max 100%, not more!')
|
||||
raise
|
||||
|
||||
self.top_section_height = scale(top_section)
|
||||
self.middle_section_height = scale(middle_section)
|
||||
self.bottom_section_height = (self.display_height -
|
||||
self.top_section_height - self.middle_section_height)
|
||||
|
||||
logging.debug('top-section size: {} x {} px'.format(
|
||||
self.top_section_width, self.top_section_height))
|
||||
logging.debug('middle-section size: {} x {} px'.format(
|
||||
self.middle_section_width, self.middle_section_height))
|
||||
logging.debug('bottom-section size: {} x {} px'.format(
|
||||
self.bottom_section_width, self.bottom_section_height))
|
||||
|
||||
|
||||
def get_section_size(self, section):
|
||||
"""Enter top/middle/bottom to get the size of the section as a tuple:
|
||||
(width, height)"""
|
||||
|
||||
if section not in ['top','middle','bottom']:
|
||||
raise Exception('Invalid section: ', section)
|
||||
else:
|
||||
if section == 'top':
|
||||
size = (self.top_section_width, self.top_section_height)
|
||||
elif section == 'middle':
|
||||
size = (self.middle_section_width, self.middle_section_height)
|
||||
elif section == 'bottom':
|
||||
size = (self.bottom_section_width, self.bottom_section_height)
|
||||
return size
|
@@ -1,137 +0,0 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Json settings parser. Currently in alpha!
|
||||
Copyright by aceisace
|
||||
"""
|
||||
|
||||
import json
|
||||
from os import chdir #Ad-hoc
|
||||
|
||||
# TODO:
|
||||
# Check of jsmin can/should be used to parse jsonc settings file
|
||||
# Remove check of fixed settings file location. Ask user to specify path
|
||||
# to settings file
|
||||
|
||||
from os import path
|
||||
|
||||
class settings:
|
||||
"""Load and validate settings from the settings file"""
|
||||
|
||||
__supported_languages = ['en', 'de', 'ru', 'it', 'es', 'fr', 'el', 'sv', 'nl',
|
||||
'pl', 'ua', 'nb', 'vi', 'zh_tw', 'zh-cn', 'ja', 'ko']
|
||||
__supported_units = ['metric', 'imperial']
|
||||
__supported_hours = [12, 24]
|
||||
__supported_display_orientation = ['normal', 'upside_down']
|
||||
__supported_models = [
|
||||
'epd_7_in_5_v2_colour', 'epd_7_in_5_v2',
|
||||
'epd_7_in_5_colour', 'epd_7_in_5',
|
||||
'epd_5_in_83_colour','epd_5_in_83',
|
||||
'epd_4_in_2_colour', 'epd_4_in_2'
|
||||
]
|
||||
|
||||
def __init__(self, settings_file_path):
|
||||
"""Load settings from path (folder or settings.json file)"""
|
||||
try:
|
||||
if settings_file_path.endswith('settings.json'):
|
||||
folder = settings_file_path.split('/settings.json')[0]
|
||||
else:
|
||||
folder = settings_file_path
|
||||
|
||||
chdir(folder)
|
||||
with open("settings.json") as file:
|
||||
self.raw_settings = json.load(file)
|
||||
|
||||
except FileNotFoundError:
|
||||
print('No settings file found in specified location')
|
||||
|
||||
try:
|
||||
self.language = self.raw_settings['language']
|
||||
if self.language not in self.__supported_languages or type(self.language) != str:
|
||||
print('Unsupported language: {}!. Switching to english'.format(language))
|
||||
self.language = 'en'
|
||||
|
||||
|
||||
self.units = self.raw_settings['units']
|
||||
if self.units not in self.__supported_units or type(self.units) != str:
|
||||
print('Units ({}) not supported, using metric units.'.format(units))
|
||||
self.units = 'metric'
|
||||
|
||||
|
||||
self.hours = self.raw_settings['hours']
|
||||
if self.hours not in self.__supported_hours or type(self.hours) != int:
|
||||
print('Selected hours: {} not supported, using 24-hours'.format(hours))
|
||||
self.hours = '24'
|
||||
|
||||
|
||||
self.model = self.raw_settings['model']
|
||||
if self.model not in self.__supported_models or type(self.model) != str:
|
||||
print('Model: {} not supported. Please select a valid option'.format(model))
|
||||
print('Switching to 7.5" ePaper black-white (v1) (fallback)')
|
||||
self.model = 'epd_7_in_5'
|
||||
|
||||
|
||||
self.calibration_hours = self.raw_settings['calibration_hours']
|
||||
if not self.calibration_hours or type(self.calibration_hours) != list:
|
||||
print('Invalid calibration hours: {}'.format(calibration_hours))
|
||||
print('Using default option, 0am,12am,6pm')
|
||||
self.calibration_hours = [0,12,18]
|
||||
|
||||
|
||||
self.display_orientation = self.raw_settings['display_orientation']
|
||||
if self.display_orientation not in self.__supported_display_orientation or type(
|
||||
self.display_orientation) != str:
|
||||
print('Invalid ({}) display orientation.'.format(display_orientation))
|
||||
print('Switching to default orientation, normal-mode')
|
||||
self.display_orientation = 'normal'
|
||||
|
||||
### Check if empty, If empty, set to none
|
||||
for sections in self.raw_settings['panels']:
|
||||
|
||||
if sections['location'] == 'top':
|
||||
self.top_section = sections['type']
|
||||
self.top_section_config = sections['config']
|
||||
|
||||
elif sections['location'] == 'middle':
|
||||
self.middle_section = sections['type']
|
||||
self.middle_section_config = sections['config']
|
||||
|
||||
elif sections['location'] == 'bottom':
|
||||
self.bottom_section = sections['type']
|
||||
self.bottom_section_config = sections['config']
|
||||
|
||||
|
||||
print('settings loaded')
|
||||
except Exception as e:
|
||||
print(e.reason)
|
||||
|
||||
def module_init(self, module_name):
|
||||
"""Get all data from settings file by providing the module name"""
|
||||
if module_name == self.top_section:
|
||||
config = self.top_section_config
|
||||
elif module_name == self.middle_section:
|
||||
config = self.middle_section_config
|
||||
elif module_name == self.bottom_section:
|
||||
config = self.bottom_section_config
|
||||
else:
|
||||
print('Invalid module name!')
|
||||
config = None
|
||||
|
||||
for module in self.raw_settings['panels']:
|
||||
if module_name == module['type']:
|
||||
location = module['location']
|
||||
|
||||
return config, location
|
||||
|
||||
def which_modules(self):
|
||||
"""Returns a list of modules (from settings file) which should be loaded
|
||||
on start"""
|
||||
lst = [self.top_section, self.middle_section, self.bottom_section]
|
||||
return lst
|
||||
|
||||
|
||||
def main():
|
||||
print('running settings parser as standalone...')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@@ -1,42 +0,0 @@
|
||||
{
|
||||
"language": "en",
|
||||
"units": "metric",
|
||||
"hours": 24,
|
||||
"model": "epd_7_in_5_v2_colour",
|
||||
"update_interval": 60,
|
||||
"calibration_hours": [
|
||||
0,
|
||||
12,
|
||||
18
|
||||
],
|
||||
"display_orientation": "normal",
|
||||
"panels": [
|
||||
{
|
||||
"location": "top",
|
||||
"type": "inkycal_weather",
|
||||
"config": {
|
||||
"api_key": "topsecret",
|
||||
"location": "Stuttgart, DE"
|
||||
}
|
||||
},
|
||||
{
|
||||
"location": "middle",
|
||||
"type": "inkycal_calendar",
|
||||
"config": {
|
||||
"week_starts_on": "Monday",
|
||||
"ical_urls": [
|
||||
"https://calendar.google.com/calendar/ical/en.usa%23holiday%40group.v.calendar.google.com/public/basic.ics"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"location": "bottom",
|
||||
"type": "inkycal_rss",
|
||||
"config": {
|
||||
"rss_urls": [
|
||||
"http://feeds.bbci.co.uk/news/world/rss.xml#"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user