Compare commits

...

936 commits
v1.2 ... master

Author SHA1 Message Date
4df439018e Fixed agenda view getting stuck when there are not enough events 2024-02-06 20:17:42 +01:00
d830281789 Removed "code badge" 2023-12-06 23:50:02 +01:00
cd68d4c02b Fixed image paths to work on gitea 2023-12-06 23:48:32 +01:00
Max
4faf625a70
Update README.md 2023-03-16 02:22:45 +01:00
Max
4a7eb40bb1
Update README.md 2021-12-28 22:33:20 +01:00
Max
eaa3de9d79 Fixed event merging bug 2020-05-08 10:10:31 +02:00
Max
b7ede5a026 Fixed size bug 2020-04-28 13:30:29 +02:00
Max
83f8f37447 Fixed general size bug 2020-04-21 14:00:01 +02:00
Max
30eb1e4cdd Added new design and minor improvements 2020-04-19 22:25:50 +02:00
Max
d3f46c820e Added new loop limiting and on_hour to settings 2020-01-12 09:33:20 +01:00
89f9f6d8fc
Removed "json" because it is part of the python3 standard library 2019-10-20 19:31:56 +02:00
36f8c35170
Typo 2019-10-11 11:18:40 +02:00
79acea5668
Corrected grammar 2019-10-11 11:16:02 +02:00
8e4fbfdfd9
Added missing word 2019-10-11 11:14:35 +02:00
Max
1e0f59739f Formatted code 2019-07-13 08:05:35 +02:00
Max
5d881753b8 Fine tuned 2019-07-12 14:05:36 +02:00
Max
ae3b72c86a Fine tuned 2019-07-12 14:04:46 +02:00
Max
387fdb813f Added image-frame example 2019-07-12 14:02:44 +02:00
Max
3309dde202 Added image-frame design 2019-07-12 13:46:50 +02:00
Max
6bda730c61 Fixed timezone awareness adder 2019-07-07 18:16:52 +02:00
Max
016d022303 Improved error handling 2019-07-05 22:09:17 +02:00
Max
eeb9e03547 Improved error handling 2019-07-05 21:33:19 +02:00
Max
059fc84cb3 Improved efficency 2019-07-05 21:32:01 +02:00
Max
fdb4331aec Improved error handling 2019-07-05 21:30:14 +02:00
Max
464f489ebd Fixed loop issue 2019-05-28 14:38:17 +02:00
Max
2269bcf3fa Implemented dynamic crypto list in all designs 2019-05-21 14:52:38 +02:00
Max
0200116d88 Implemented crypto interface to panels 2019-05-19 22:25:59 +02:00
Max
ad79095a9d Fine tuned design 2019-05-19 22:20:26 +02:00
Max
b58357927f Improved naming 2019-05-19 22:08:14 +02:00
Max
b74def5bbf Fine tuned design 2019-05-19 22:06:02 +02:00
Max
2a36a9a6ce Implemented availability 2019-05-19 22:05:49 +02:00
Max
ba8c95ff67 Simple 2019-05-19 00:22:24 +02:00
Max
ccf28e52b7 Improved 2019-05-18 09:39:17 +02:00
Max
8652ef187c General fixes 2019-05-18 09:35:49 +02:00
Max
2bbb19b53e Reorganized 2019-05-18 09:31:09 +02:00
Max
00a05a1a6e Head start from @dicijr 2019-05-18 09:28:29 +02:00
Max
2a94c1fb90 Implemented line_thickness setting in all designs 2019-05-17 09:04:26 +02:00
dicijr
d8a1c1c250 Line-thickness setting for day-list panel only 2019-05-17 08:50:21 +02:00
Max
f53faee1a5 Fixed Readme 2019-05-17 08:48:24 +02:00
Max
95bbc8fb59 Updated Readme 2019-05-17 08:47:51 +02:00
Max
9b1ceba95e Fixed issues 2019-05-15 19:13:38 +02:00
Max
aa34b8bc4f Fixed stability issue 2019-05-15 19:13:09 +02:00
Max
1a62d9d929 Fixed stability 2019-05-15 09:14:22 +02:00
dicijr
d768712181 Heading format 2019-05-15 08:40:39 +02:00
Max
f1cc271e3b Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-05-15 08:22:32 +02:00
Max
08d30bf7d7 Removed print statement 2019-05-15 08:22:31 +02:00
Max
d4df70ce39 Progressed month-view prototype 2019-05-15 08:19:49 +02:00
Max
62dd01fb00 Progressed month-view prototype 2019-05-15 08:16:41 +02:00
dicijr
f22f4b825f
Fixed celcius 2019-05-15 00:23:08 -04:00
dicijr
61fd7af37a
Added Aviation feature (Windir,knots) 2019-05-15 00:15:38 -04:00
Max
3bd7b55010 Fixed readability issue 2019-05-12 18:23:44 +02:00
Max
1a50ff5cca Improved table text 2019-05-12 18:23:12 +02:00
Max
3bac199949 Extended definition to year 2019-05-12 17:40:42 +02:00
Max
f417fdbe3e Fixed default text padding (cutoff) 2019-05-11 21:37:16 +02:00
Max
4d3c2cfbd7 Improved code 2019-05-10 08:19:22 +02:00
Max
51d4e20553 Improved reliability for language codes 2019-05-10 08:11:13 +02:00
Max
083f4bbf6f Updated README 2019-05-10 07:52:26 +02:00
Max
710255604a Simple translator based on local dictionary 2019-05-09 17:41:34 +02:00
Max
d2fa6d8fd7 Added font size to cell properties 2019-05-06 16:19:47 +02:00
Max
a7c7a3e553 Implemented missing setting relation 2019-05-06 16:12:18 +02:00
Max
b01942b39d Implemented multi-language support of owm 2019-05-06 16:09:14 +02:00
Max
99929d63a4 Removed dead code 2019-05-06 16:07:43 +02:00
Max
1e8d02dc41 Dynamic locales, simple dictionary, advanced table 2019-05-06 11:05:10 +02:00
Max
8211b9829e Fixed design issues 2019-05-01 19:06:37 +02:00
Max
07c2484849 Improved code 2019-05-01 07:22:27 +02:00
Max
5dcae2d435 Generalized TableDesign and improved imports 2019-05-01 07:17:40 +02:00
Max
28938b45f8 Fixed output of bw e-paper screen 2019-04-30 09:14:04 +02:00
Max
7ead3c39c1 Fixed highlight box bug 2019-04-29 20:23:44 +02:00
Max
6504851aa1 Fixed mutliday bug in day-view design 2019-04-29 18:47:47 +02:00
Max
69f12de1e5 Improved allday handling 2019-04-29 18:35:45 +02:00
Max
64b704c10f Fixed and improved path handling 2019-04-29 18:14:25 +02:00
Max
08cc2b7daa Fixed bug related to event fetching 2019-04-29 18:14:10 +02:00
Max
6c4eb5c220 Fixed bug related to day-view 2019-04-29 18:08:53 +02:00
Max
69d1041f98 Fixed timezone related bug and minor improvements 2019-04-28 15:24:15 +02:00
Max
76495bd16c Added backwards compatible timezoning 2019-04-26 09:45:50 +02:00
Max
16f38a9102 Now sorting the result events by type 2019-04-24 14:27:45 +02:00
Max
d431dae196 Fixed bug 2019-04-23 07:30:08 +02:00
Max
29eddbbd18 Removed dead code 2019-04-22 21:26:29 +02:00
Max
843163dbda Preventing time consuming load at beginning 2019-04-22 20:53:17 +02:00
Max
460c1e8a54 Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-22 09:49:57 +02:00
Max
54a53316cc Removed dead code 2019-04-22 09:49:52 +02:00
The Codacy Badger
a6ee7fffa1 Add Codacy badge 2019-04-19 08:17:14 +02:00
383c7b7121
Update README.md 2019-04-18 08:56:11 +02:00
b0e5e931f3
Update New-version-planning.md 2019-04-18 08:54:32 +02:00
1390f3630a
Update Changelog.md 2019-04-18 08:52:39 +02:00
Max
426291f828 Removed dead code 2019-04-18 08:31:50 +02:00
Max
ce73624443 Bug fix 2019-04-18 08:30:52 +02:00
Max
d2c7428c62 Added offline support for services 2019-04-18 08:30:08 +02:00
Max
b6691de9e8 Added description for font_size 2019-04-17 17:35:24 +02:00
Max
bf99ecd8e0 Moved font size setting to settings-file 2019-04-17 17:30:34 +02:00
Max
7526c47735 Improved default font size integration 2019-04-17 17:23:41 +02:00
Max
95cee6287e Removed dead code 2019-04-17 16:52:56 +02:00
Max
6bb0fe247b Removed dead code 2019-04-17 16:52:56 +02:00
Max
f88a4bf702 Integrated new dependencies in installer 2019-04-17 16:52:56 +02:00
Max
f8eddb66d5 First variant 2019-04-17 16:52:56 +02:00
Max
2ea9b09954 Standarized message 2019-04-14 16:37:53 +02:00
Max
f7a589354f Typo 2019-04-14 11:24:01 +02:00
Max
077d841cab Fixed timeout exception realated to weather 2019-04-14 10:42:14 +02:00
Max
c09a5d51c4 Removed dead code 2019-04-14 10:38:44 +02:00
Max
0e0803a5e6 Preventing buffer overflow 2019-04-14 10:32:11 +02:00
Max
5b858bc121 Removed easter egg 2019-04-14 10:27:45 +02:00
Max
904c50224c Added info about current day 2019-04-14 10:26:35 +02:00
Max
63b702cbb4 Removed dead code 2019-04-14 10:21:22 +02:00
Max
8c629051b5 Fine tuned deisn 2019-04-14 10:21:00 +02:00
Max
bad6d280da Improved text 2019-04-13 20:46:00 +02:00
Max
c33a34f9d8 Now using absolute path 2019-04-13 19:30:15 +02:00
Max
242e7acd09 Removed debug print-statements 2019-04-13 19:28:46 +02:00
Max
188b0497cb Made the main path properly independent 2019-04-13 19:17:14 +02:00
Max
8552874e7d Ignoring more 2019-04-13 19:16:42 +02:00
Max
f8fac5f2d3 Thinned out font 2019-04-12 08:15:28 +02:00
Max
bdd443eea8 Added exception handling to output 2019-04-11 08:06:54 +02:00
Max
09464dd07d Added and updatet features 2019-04-11 07:59:58 +02:00
Max
8ab6826aaf Improved text print 2019-04-10 12:12:54 +02:00
Max
61a41138fa Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-10 10:47:36 +02:00
Max
002f20504d Fixed bug in recognition of multi-day events 2019-04-10 10:47:33 +02:00
06bffa1aea Add files via upload 2019-04-09 13:57:21 +02:00
320a79a869
Delete day-view_example.png 2019-04-09 13:57:12 +02:00
Max
43c5fafdba Fine tuned design 2019-04-09 13:52:14 +02:00
Max
317a6765f3 Fixed different language bug 2019-04-09 13:41:29 +02:00
Max
720f053d6a Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-09 13:38:28 +02:00
Max
e6fa543406 Fixed interpretation of last_hour 2019-04-09 13:37:39 +02:00
Max
b82bfa2aa7 Fine tuned design 2019-04-09 13:35:32 +02:00
bb6f121c42
Update README.md 2019-04-09 12:53:55 +02:00
1c796f0cc0 Add files via upload 2019-04-09 12:52:50 +02:00
Max
7fd2771efb Fine tuned design 2019-04-09 12:49:57 +02:00
Max
956c4a300c Fixed language and time-format mix-up 2019-04-09 12:48:13 +02:00
Max
260f9bd70a Fine tuned design 2019-04-09 12:42:55 +02:00
Max
b1a796079b Added support for rss-feed and event-list 2019-04-09 12:40:10 +02:00
Max
bd69088e0b Remanaged calculation of parameters 2019-04-09 12:39:48 +02:00
Max
d7137ac9c1 Added dynamic hour range 2019-04-09 12:17:12 +02:00
Max
5cb04d9dcf Made property public 2019-04-09 12:16:57 +02:00
Max
d206b5e1c6 Design changes 2019-04-09 12:05:27 +02:00
Max
c8365ecc63 Improved text 2019-04-09 11:35:35 +02:00
Max
009f3cd08b Added always shown event titles 2019-04-09 10:57:51 +02:00
Max
168d52f86e Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-09 10:49:19 +02:00
Max
2d79ac26fd Added column aware event drawing and event title wrapping 2019-04-09 10:48:59 +02:00
Max
33a2e9b2fe Added duration manipulation for multi-day events 2019-04-09 10:48:34 +02:00
82188fd3af
Update README.md 2019-04-09 10:16:46 +02:00
Max
fdc0197da1 Possible refix 2019-04-09 10:08:15 +02:00
Max
a6aebf1c37 Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-09 10:06:13 +02:00
Max
0a523d5de9 Added recognition of necessary number of columns 2019-04-09 09:34:00 +02:00
Max
5ec99c31bf Fixed overwritten timezone bug 2019-04-09 09:33:43 +02:00
Max
6b726ac6b6 Integrated first event box prototype 2019-04-09 09:15:53 +02:00
Max
367218ed67 Fix for timezone-awareness adder out-of-range exception 2019-04-09 08:41:40 +02:00
Max
f0d8507818 Improved truncating 2019-04-08 16:23:59 +02:00
Max
0b665f4976 Fixed multi-day sorting 2019-04-08 16:21:06 +02:00
Max
4d0b7009cd Reset default values 2019-04-08 16:08:20 +02:00
Max
7d0b38c479 Reset default values 2019-04-08 16:06:56 +02:00
efdcf57df0
Update README.md 2019-04-08 15:54:06 +02:00
Max
ef634bad7c Improved event sorting 2019-04-08 15:42:55 +02:00
Max
0df90b39bc Changed to default font size 2019-04-08 15:42:30 +02:00
Max
39fa0bce21 Moved multi-day identifier to event properties 2019-04-08 15:29:09 +02:00
Max
25f2288bdd Typo 2019-04-08 15:20:09 +02:00
Max
4720774011 Added some optional technical data to print 2019-04-08 11:20:33 +02:00
Max
a7605e3473 Improved masking 2019-04-08 11:20:04 +02:00
e9a1142443 Added support for optional weather info and fixed events-info error. 2019-04-07 17:08:42 +02:00
fd1edb02b7 Added optional weather support 2019-04-07 16:48:07 +02:00
3bf7bc0205 Removed unnecessary code 2019-04-07 16:44:27 +02:00
10af39c985 Better images 2019-04-07 16:35:53 +02:00
fd14986b7c Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-07 13:14:19 +02:00
eb23b7236f Edited for better translation to e-paper 2019-04-07 13:14:15 +02:00
5ada365bbc
Add files via upload 2019-04-07 12:57:57 +02:00
d525683a27
Delete month-overview_example.png 2019-04-07 12:57:44 +02:00
7decd58eee
Updated 2019-04-07 12:57:18 +02:00
49f50dc944
Updated 2019-04-07 12:55:52 +02:00
4ca32e49ab
Updated 2019-04-07 12:54:50 +02:00
b10de72b14 Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-07 12:54:37 +02:00
a5bfd90b5e Added simplified, multiday-aware prefix 2019-04-07 12:54:34 +02:00
c48af815b9 Minor design changes 2019-04-07 12:50:50 +02:00
c9fc0341c4
Update README.md 2019-04-07 12:48:18 +02:00
05f0412b94
Update README.md 2019-04-07 12:47:01 +02:00
d9b83cca9d
Update 2019-04-07 12:45:37 +02:00
2cebf0a60d Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-04-07 12:45:24 +02:00
913313245f Implemented rss-feed 2019-04-07 12:45:21 +02:00
56ee85b60f Added default x-padding to rss list 2019-04-07 11:47:47 +02:00
fdd35a157f
Example render of agenda-list panel 2019-04-07 11:41:13 +02:00
e86de45c63 Added new option weather-info to sample settings file 2019-04-07 11:38:44 +02:00
2763abeeb4 Added weather info 2019-04-07 11:35:26 +02:00
66b5b95f74 Fixed missing integration of col_spacing in column resizing 2019-04-07 11:16:40 +02:00
a9a639ed2b Added highlighted event support 2019-04-05 22:28:16 +02:00
0dd1ca9b45 Fine tuned all-day events 2019-04-05 22:24:09 +02:00
d7f485cba6 Fine tuned displayed texts for multi-day events 2019-04-05 22:23:01 +02:00
afd94ea10f Added day dependent event prefixes 2019-04-05 22:07:47 +02:00
4b656ee819 Redefined special day recognition 2019-04-05 22:07:33 +02:00
22242d894f Added support for date-relative event prefixes 2019-04-05 18:57:37 +02:00
9e67af6adc Extended definition to years 2019-04-05 18:57:16 +02:00
3e11ec4df0 Added missing conversion of end_datetime 2019-04-05 18:53:16 +02:00
6a37255b57 Added global color settings 2019-04-05 11:37:51 +02:00
c93210356a Fixed wrong reference 2019-04-05 11:37:41 +02:00
9519e3aaed Added lines and subtext to hours and formatted them accordingly 2019-04-04 21:27:29 +02:00
f2581e57a6 Fine tuned visible_event_count 2019-04-04 13:15:15 +02:00
757a66eb6e Fixed color bug in "+ x more" 2019-04-04 10:40:18 +02:00
1ff09a5591 Fixed google timezone issue 2019-04-02 19:36:09 +02:00
a4be256b50 Added missing event information 2019-04-02 14:36:17 +02:00
a65bfddeeb Fixed timezone bug 2019-04-02 10:48:15 +02:00
45dd474bf3 Fixed overlapping month name 2019-04-02 10:39:22 +02:00
5faa0c5d1c New prototype 2019-03-27 18:26:54 +01:00
bd03a2b604 Added and changed formats 2019-03-27 18:26:45 +01:00
225963aaeb Fixed timezone-issue 2019-03-27 17:58:26 +01:00
1c56323ff0 Some bug fixes related to rrule 2019-03-27 17:48:28 +01:00
eaeea2083e Revert "Extended definition of event"
This reverts commit 6146fc7c2d.
2019-03-27 13:56:48 +01:00
ab9e34980a Some more files ignored 2019-03-27 13:52:56 +01:00
6146fc7c2d Extended definition of event 2019-03-27 13:52:37 +01:00
b01969d2da Partially integrated TextFormatter 2019-03-26 22:31:05 +01:00
59d2401f81 Added default font size 2019-03-26 22:30:37 +01:00
9e08553232 Added centralized formatting 2019-03-26 22:30:19 +01:00
ddb5f727d9 Next agenda-list prototype 2019-03-26 22:30:01 +01:00
4ef90e14b3 First prototyping of AgendaList 2019-03-24 22:14:58 +01:00
bef88f0b85 Fixed wrong calculation of visible_event_count 2019-03-24 21:42:00 +01:00
319e6947b1 Fixed negative sleep_time error 2019-03-24 21:35:05 +01:00
94591ec51e Implemented new panel-template 2019-03-24 21:30:44 +01:00
6dd6de16ce Equalized font size 2019-03-24 21:27:32 +01:00
019d150e78 Added filter for upcoming events 2019-03-24 21:13:32 +01:00
86c64eeba5 Added general background_color option to table_design 2019-03-24 21:09:10 +01:00
99bba341a9 Added missing color parameter tranmission 2019-03-24 21:05:12 +01:00
bcca8a8f8a Fixed some google calendar event issues based on timezones. 2019-03-24 19:49:00 +01:00
88ace91239 First version of rrule support. Redesigned CalendarInterface. Dropped Support for get_week_events 2019-03-24 11:07:22 +01:00
c854e7eec1 Made more info language dependent 2019-03-23 12:54:37 +01:00
544c23954d Added rrule property 2019-03-23 12:24:43 +01:00
0e1b6bef57 Removed spacing of weather icon 2019-03-23 12:23:14 +01:00
571846ae39 Added option to show number of additional, not shown events 2019-03-23 12:22:55 +01:00
3a2f145e22 Renamed for better understanding 2019-03-23 12:22:02 +01:00
4b1cbed0f7 Fixed false interpreted allday and multiday events 2019-03-21 22:52:42 +01:00
d838ee37d0 Expanded definitions for events in specific time ranges 2019-03-21 22:32:02 +01:00
ba7c437a13 Recognizing multiday events in get_day_events 2019-03-21 22:29:46 +01:00
7073d5bc5d Corrected property name 2019-03-21 22:29:23 +01:00
11ffdeac13 Added info about additional, not displayed events. 2019-03-21 22:02:08 +01:00
4cfe34ed93 Changed default datatype of update_interval to integer 2019-03-19 16:45:48 +01:00
139c59bfab Fixed type issue for update_interval 2019-03-19 16:34:14 +01:00
dcbaa4893e Added hourListDesign 2019-03-17 22:05:49 +01:00
3e63f5ff8b Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-03-17 21:49:58 +01:00
5838734c9f Changed transmitting of calendar to transmitting of events 2019-03-17 20:55:45 +01:00
672d7058d8 Fine tuned numbers font size 2019-03-17 20:37:42 +01:00
f7c5f6b05e Added broad multiline alignment support 2019-03-17 20:32:32 +01:00
8686637271 Removed dead code 2019-03-17 20:25:49 +01:00
b1705941e8 Added missing library feedparser 2019-03-17 16:33:33 +01:00
c0a6ebe33f
Update README.md 2019-03-17 12:39:38 +01:00
27f2bd5eef
Update README.md 2019-03-17 12:38:34 +01:00
c99bb1538b Implemented DayView design canvas and options 2019-03-17 12:12:58 +01:00
5f3ef1091b
Update Changelog.md 2019-03-17 11:22:07 +01:00
ac570e1323
Update Changelog.md 2019-03-17 11:21:50 +01:00
ab2303bf64
Update New-version-planning.md 2019-03-17 11:15:51 +01:00
0cd0cea1d8
Update README.md 2019-03-17 11:13:14 +01:00
dddfe812f9
Update Installer-with-debug.sh
Configured installer for forked repository.
2019-03-17 11:11:36 +01:00
0acc946b44
Update README.md 2019-03-17 11:07:10 +01:00
a9b9de7d80
Update README.md 2019-03-17 11:05:51 +01:00
9c42262604 Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-03-17 11:04:12 +01:00
21280cfccd
Update README.md 2019-03-17 11:02:44 +01:00
9837a20800 Changed images 2019-03-17 10:49:59 +01:00
36cd0bc66d Added duration property to events 2019-03-16 18:50:52 +01:00
1116513539 Fine tuned rss font size 2019-03-16 18:37:34 +01:00
a139cd33f0 Fixed recognition of Pi-Day 2019-03-16 18:30:53 +01:00
4ce74fbc5e Added info are prototype to DayListPanel 2019-03-13 22:28:25 +01:00
ae1a8b0057 Fixed proportion problem of row height 2019-03-13 22:14:54 +01:00
08c9960232 Made weekday font bolder 2019-03-13 22:14:39 +01:00
cbe3b1da4a Added line break 2019-03-13 21:07:36 +01:00
87175a1264 Resized weekday to fit into box 2019-03-13 20:33:38 +01:00
c9c6ce4207 Extracted loop timing and added refresh interval option. 2019-03-13 20:33:20 +01:00
c79f0b8888 Bug fixed alarms as supposed by arustleund 2019-03-11 19:07:59 +01:00
73ccfba021 Fixed cut of 'y' at the end of the weekday 2019-03-10 19:21:15 +01:00
4466618e2c Integrated support for colors in event list 2019-03-10 19:13:02 +01:00
88a549aad3 Implemented highlight colors, and general color options, for highlighted events 2019-03-10 19:10:30 +01:00
8b43ee3287 Added support for cell properties, focusing on colors 2019-03-10 19:10:05 +01:00
82f4499586 Fixed highlighted event support 2019-03-10 19:09:37 +01:00
50960c7c05 Improved truncating 2019-03-10 18:51:46 +01:00
37c252dc65 Added text truncating to tables and fixed size bug 2019-03-10 18:39:17 +01:00
e1e25e3d2a Added functionality to add highlighted calendars 2019-03-10 18:32:20 +01:00
895a7cda1c Fine tuned color values 2019-03-10 16:05:42 +01:00
e4f77aff7c Added font family option and set specific boldness in some cases 2019-03-10 15:54:46 +01:00
fe838f5964 Added font path directly to font name 2019-03-10 15:49:56 +01:00
9c5a791019 Added font-boldness option and moved fonts to extra folder 2019-03-10 15:37:10 +01:00
14ca6e9cdf Implemented events 2019-03-10 15:19:27 +01:00
b4b8898b2e Added options for spacing 2019-03-10 15:19:15 +01:00
0a6d0ed2b1 Extracted specific EventListDesign, due to DRY 2019-03-10 15:07:27 +01:00
53f823fdf2 Fine tuned fontsize 2019-03-10 15:06:46 +01:00
e1d05f2f65 Added event list 2019-03-10 13:27:15 +01:00
297318af30 Added custom prefix funtion and col spacing options 2019-03-10 13:26:31 +01:00
145930494a Implemented new parameter 2019-03-10 13:24:37 +01:00
dcef52b08a Added parameter 2019-03-10 13:23:26 +01:00
c5a3efbc0f Removed dead code 2019-03-10 13:23:17 +01:00
74e73524f3 Fixed col spacing bug 2019-03-10 12:23:23 +01:00
8e57bf30a4 Fine tuned fontsize 2019-03-10 07:58:35 +01:00
332aceb9cf Updated according to the version 5.3.0 2019-03-10 07:52:53 +01:00
9e7788b618 Made line spacing optional and added filter date 2019-03-10 07:21:50 +01:00
c72ffa88ab Fixed empty table bug 2019-03-09 22:03:00 +01:00
c923a52a9f Fixed automated column sizing bug 2019-03-09 21:53:58 +01:00
f6f98fdf9d Fixed no-response bug 2019-03-09 21:30:22 +01:00
064d4033d3 Implemented weather 2019-03-09 21:28:02 +01:00
6c50dd4db2 Fixed truncating bug 2019-03-09 19:51:31 +01:00
59cade023c Fixed float bug 2019-03-09 17:23:30 +01:00
8f2e4c1c19 Fixed bugs 2019-03-09 17:12:25 +01:00
477894b251 Implemented paid_subscription option for owm 2019-03-09 16:03:43 +01:00
5ad6dff6fb Improved effiency 2019-03-09 15:48:31 +01:00
26bdceb22e Removed dead code, changed WeatherInterface and implemented forecasts into Owm weather, but did not test it 2019-03-09 15:46:42 +01:00
65f36f6039 Transmitting additional information to day rows 2019-03-09 15:23:09 +01:00
e327d359a5 Added interfaces for additional information 2019-03-09 15:22:49 +01:00
b7b4d4f0fd Added interfaces for additional information and implemented the forecast as icon 2019-03-09 15:22:26 +01:00
8372d78268 Fine tuned color recognition 2019-03-09 12:45:30 +01:00
bd119bb8f9 Created basic day rows 2019-03-08 21:37:54 +01:00
545657ecbb Implemented float pos and size rounding 2019-03-08 21:36:21 +01:00
f15c9fdb39 Fine tuned padding correction 2019-03-08 21:35:52 +01:00
cec0ee83da Added design option in settings-file and renamed general design settings 2019-03-08 17:46:10 +01:00
964570bc4a Removed dead code 2019-03-07 21:48:47 +01:00
2ba92e1b6d Added some more color options 2019-03-07 21:44:10 +01:00
53c135d398 Fine tuned sizes 2019-03-07 21:31:54 +01:00
1dbae38b3f Introduction of DayListDesign 2019-03-07 21:28:11 +01:00
036c5add23 Added more masking options 2019-03-07 21:27:30 +01:00
91567bef60 Added color options and more differenciated masking options for special cases 2019-03-07 21:27:13 +01:00
06b6d697f2 Uncommented add_calendar to design 2019-03-06 22:15:53 +01:00
cb5f6cddd7 Added and implemented design-settings 2019-03-06 22:15:08 +01:00
69fce8c8d2 Removed unnecessary features, changed some details and activated wrapping 2019-03-05 22:11:22 +01:00
81a4e5c4c5 Fixed some bugs and implemented custom row height and text wrapping 2019-03-05 22:10:33 +01:00
0291c24e23 Implemented basic wraping 2019-03-05 22:09:55 +01:00
1b92692b51 Centralized helper module to wrap texts 2019-03-05 22:08:18 +01:00
0400d29b10 Fine tuned color identification 2019-03-04 22:17:31 +01:00
fdcefd1663 Added and implemented a bolder version of the font 2019-03-04 21:25:01 +01:00
9756a6abb8 Fixed typo 2019-03-04 20:22:40 +01:00
635ab20c3b Fixed sorting direction 2019-03-04 20:12:30 +01:00
f0be84ccb2 Fixed accessiblity issue 2019-03-04 20:11:19 +01:00
1ac32e2545 Now printing rss feeds insted of events 2019-03-04 20:10:36 +01:00
b7e8a5c662 Generalized some names and implemented rssfeed 2019-03-04 20:10:08 +01:00
a19324d2bf Implemented rss_feeds in settings.sample 2019-03-04 20:09:40 +01:00
36e33b1340 Create RssInfoPanel 2019-03-04 20:09:23 +01:00
bf69933382 Implemented feedparser as RssSource 2019-03-04 20:09:11 +01:00
beeac85894 Defined RssPost and RssDataSourceInterface 2019-03-04 20:06:18 +01:00
e514fee924 Removed code from unimplemented feature 2019-03-04 20:05:49 +01:00
44cf83c53e Fixed highlight box position bug 2019-03-04 20:05:33 +01:00
cdd9d1b834 Added taiwan chinese, but needs font that supports it 2019-03-03 19:11:16 +01:00
be1a89ae7b Fixed column spacing error 2019-03-03 18:22:41 +01:00
b746c13113 Implemented alignment and removed leading zero in date 2019-03-03 18:13:51 +01:00
e235d1bfb4 Implemented different horizontal alignments for different columns 2019-03-03 18:13:25 +01:00
5ac46a2e9d Fixed alignment bug 2019-03-03 18:13:02 +01:00
44deafa978 Implemented event list 2019-03-03 16:45:21 +01:00
b61ebd2d36 Implemented truncating to size of design 2019-03-03 16:45:06 +01:00
d9bb84b4c3 Fine tuned spacing and truncating 2019-03-03 16:44:37 +01:00
ad07a03283 Added truncating of rows and columns that are not fully visible 2019-03-03 16:44:11 +01:00
7043911cb8 Removed unnecessary comments and imports 2019-03-03 16:40:14 +01:00
3ce63dd74d Added tasks interface to panel design 2019-03-03 16:39:47 +01:00
dbfafda49a Mainly added function to retreive the actual height, which depends on the month 2019-03-03 14:54:43 +01:00
0678a6711a Added line and column spacing 2019-03-03 14:53:54 +01:00
6f8762d6ff Added EventListDesign 2019-03-03 14:00:10 +01:00
eec658612d Added TableTextDesign to view text placed in a matrix 2019-03-03 13:59:34 +01:00
547dac8562 Implemented new abstraction level of interface 2019-03-03 13:53:22 +01:00
118997b1ae Lowered abstraction level to keep generic sorting centralized 2019-03-03 13:53:07 +01:00
385ae3da11 Made masking optional to keep the text from thining out too much 2019-03-03 13:52:36 +01:00
a8cad34b32 Implemented default font in assets-file 2019-03-03 10:23:03 +01:00
c51f9643f2 Extracted get_font function 2019-03-03 10:12:04 +01:00
2f53c639b5 Encapsuled the month number overview to an extra design class 2019-03-02 10:10:39 +01:00
b7692efa35 Added event day highlights 2019-03-02 09:36:55 +01:00
10f006b1ef Fixed masking issue 2019-03-02 09:25:23 +01:00
63b33f44cc Implemented limit for higher efficiency 2019-03-02 08:53:28 +01:00
66195a9655 Fixed highlight boxes for weeks starting on sunday 2019-03-01 19:09:01 +01:00
b9091c2dc7 Fine tuned the color interpretation on the Epd7in5b 2019-03-01 18:53:58 +01:00
83ac33043b Removed links to non-existing graphics 2019-03-01 17:33:57 +01:00
a01619610b Removed replaced icons 2019-03-01 16:47:40 +01:00
c58ebcbe33 Basic implementation of RGB to Epd display. Still needs some fine tuning. 2019-02-28 22:38:06 +01:00
b28341ada5 Implemented RGB color in design 2019-02-28 22:19:33 +01:00
6af80788e8 Removed debugging code 2019-02-28 22:00:00 +01:00
ae24eb7413 Fixed printing errors 2019-02-28 21:58:38 +01:00
60b94c6783 Added highlight box around current day. 2019-02-28 20:41:14 +01:00
e19bfa0b0b Lowered wind speed text 2019-02-28 20:35:01 +01:00
749f88bdb1 Fixed padding problem in texts 2019-02-28 20:31:51 +01:00
c7522535ea Created ellipse and box designes with necessary features that were missing 2019-02-28 20:20:05 +01:00
31f712a93f Finished weekdays, even though the names are too low. 2019-02-28 18:17:38 +01:00
7edd5fec65 Implemented highlight box and ellipse 2019-02-28 17:35:05 +01:00
b537c8c767 Removed invalid paths 2019-02-28 17:34:44 +01:00
0d1f065208 Removed unnecessary translation graphics. 2019-02-28 17:19:44 +01:00
e012fbfebc First steps. Deleted alot, added even more. 2019-02-28 15:17:43 +01:00
261eb5660f Using units from settings-file 2019-02-27 20:11:43 +01:00
3981bf8a80 General PanelDesign Interface. 2019-02-27 17:20:15 +01:00
856e7b5b94 Added week events support to IcalEvents 2019-02-27 17:14:50 +01:00
4c2c049c4b Implemented renamed debug function 2019-02-27 17:14:20 +01:00
b09e97c93f Renamed and implemented the print function to print_txt, due to upcoming problems. 2019-02-27 17:13:59 +01:00
9381aeaec1 Ignoring more stuff 2019-02-27 17:12:37 +01:00
435fd8d989 Implemented new DebugInterface, IcalEventFetcher and fixed some bugs. 2019-02-26 22:09:19 +01:00
e58fc28588 Added EventFetcher for icalendars 2019-02-26 22:08:19 +01:00
c6a9ce0ce8 Implemented exception handling for missing internet 2019-02-26 22:08:00 +01:00
b3aebcb780 Added title as representation for debugging 2019-02-26 21:41:12 +01:00
a5d849c1dd Set default values to interface that should be interpreted as "current" 2019-02-26 21:37:18 +01:00
7f9a6a3102 Added and removed some parameters in CalendarInterface 2019-02-26 17:30:53 +01:00
615e338e9a Created and implemented a DebugInterface and defined it for console use 2019-02-26 16:23:58 +01:00
82c28841a7 Changed some properties 2019-02-26 16:23:27 +01:00
bd077866d9 Implemented new debug options from settings-file 2019-02-25 21:57:22 +01:00
c572180d5b Added calibration_hours to settings-sample 2019-02-25 21:55:30 +01:00
7c8dc46b45 Extended settings-file with debug options. 2019-02-25 21:47:32 +01:00
1a330d9e73 Changed names 2019-02-25 21:43:27 +01:00
b57800b0d8 Created CalendarInterface 2019-02-23 22:11:49 +01:00
d102c7c639 Created more abstract level for data sources 2019-02-23 20:41:01 +01:00
1b9ed82b40 Implemented abstract weather forecast to main file and ignored debug image. 2019-02-23 19:49:20 +01:00
4c127179a9 Implemented OwmForecast 2019-02-23 19:36:20 +01:00
d62719ceda Added location information to interface. 2019-02-23 19:35:07 +01:00
e3efe6ebd2 Renamed identifier 2019-02-23 19:33:39 +01:00
f29b5f0dbf Removed unnecessary property 2019-02-23 19:31:52 +01:00
e13b581055 standardized identifier 2019-02-23 19:28:07 +01:00
5d88baca08 Added properties 2019-02-23 19:26:58 +01:00
022530063e Added clouds as property 2019-02-23 19:14:36 +01:00
f05c25a7e9 Added air humidity as property and changed unit to units 2019-02-23 19:13:19 +01:00
2eaffe3b63 Added unit as parameter 2019-02-23 19:10:26 +01:00
d65d1ed743 Removed unnecessary import. 2019-02-21 17:19:14 +01:00
2b4406d613 Defined abstract weather forecast source interface. 2019-02-21 17:17:18 +01:00
3d0f86a17c Excluded exportet debug image. 2019-02-20 21:17:57 +01:00
91a160512f Removed superfluos status print. 2019-02-20 21:17:39 +01:00
2738dae878 Excluded personal settings.py-file for testing 2019-02-20 21:03:42 +01:00
a6cede3554 Implemented debug option and ImageFileAdapter to main-file and fixed some string formating errors. 2019-02-20 20:56:10 +01:00
2785542aa0 Created ImageFileAdapter for debuging. 2019-02-20 20:53:14 +01:00
679fed425d Bounded width and height of DisplayAdapter to constructor. 2019-02-20 20:00:08 +01:00
31ee4359ee Added information to constructor and implemented it. 2019-02-20 19:18:28 +01:00
452b1fba57 Removed absolute path for testing. Works now as relative path. 2019-02-20 19:14:41 +01:00
15fb84641c Defined CalendarEvent container. 2019-02-20 18:57:55 +01:00
ff8f0a98ef Created WeatherForecast container 2019-02-20 18:50:18 +01:00
ed4b511002 Implemented new EpdAdapters 2019-02-19 22:08:06 +01:00
4a1c3ea9ca Fixed some bugs 2019-02-19 22:07:23 +01:00
a630dd2d54 Fixed indents 2019-02-19 22:02:11 +01:00
c2d345dea0 Implemented calibration 2019-02-19 21:49:50 +01:00
7596b7703d Implemented EpdDisplayAdapters 2019-02-19 21:43:53 +01:00
c9afe86c95 Removed unecessary comments 2019-02-19 21:43:40 +01:00
d0e7ee3fa8 Generalized DisplayAdapter 2019-02-19 21:07:07 +01:00
a67987b78f Added missing parameters in DisplayAdapter 2019-02-19 20:57:51 +01:00
c3e51da446 Merge branch 'master' of https://github.com/mgfcf/E-Paper-Calendar-with-iCal-sync-and-live-weather 2019-02-19 20:51:14 +01:00
9e7fb46859 Defined DisplayAdapter interface 2019-02-19 20:51:10 +01:00
d57c41e813
Merge pull request #1 from aceisace/master
Pull recent commits
2019-02-19 20:36:06 +01:00
Ace
86cdc5630e
Fixed an big related to week starting on Sunday
Removed line 82, starting with 'draw...' as it caused some errors. Choosing weekday="Sunday" should now work as expected. 
Special thanks to Nobuyoshi Sato for finding this bug.
2019-02-19 09:52:03 +01:00
Maximilian Giller
17dd30b56b Bug in epd_digital_read resolved. 2019-02-17 14:44:38 +01:00
Maximilian Giller
e5e9bb2478 Possible bug in epd_digital_read resolved. 2019-02-17 12:17:51 +01:00
Ace
ede448c7c1
Update E-Paper.py 2019-02-16 00:13:59 +01:00
Ace
de9292b525
Added a feature 2019-02-14 23:09:35 +01:00
Ace
0b84d46c43
Added bugfix for iCalendar and truncating events
Contains some improvements in the section tha filters events from the iCalendar URL. The sorting algorithm has been improved to display events after today and in chronological order. If the event names is too long for the line, it'll be truncated until it fits.
Special thanks and credit to Hubert for suggesting the above mentioned improvements.
Also fixed an issue where the iCalendar would throw errors if the Alarm action for an event was set to 'None'.
2019-02-14 15:27:41 +01:00
Ace
617ef8a6c1
Removed an iCal URL which caused timeouts 2019-02-13 15:55:42 +01:00
Ace
3725601462
Added feature related to openweathermap API 2019-02-13 15:12:53 +01:00
Ace
a40b8db7e7
Added new features in planning 2019-02-13 00:12:29 +01:00
Ace
e6f08e83fd
Fixed an issue where the settings.py was missing 2019-02-12 20:29:52 +01:00
Ace
272ad2f594
Update README.md 2019-02-12 08:59:17 +01:00
Ace
72a5f13db4
Fixed a bug
Fixed a bug causing an error on 2 colour displays.
(UnboundLocalError: local variable 'red' referenced before assignment)
Cause: incorrect indent block on line 27
2019-02-12 08:46:52 +01:00
Ace
fff6361140
Added a few more features for the next version. 2019-02-11 21:57:49 +01:00
Ace
b7c9c11bbb
Added a note on iCalendars 2019-02-11 14:38:47 +01:00
Ace
e9aa1b336d
Fixed an issue where no settings file was created 2019-02-10 23:42:11 +01:00
Ace
ef5b5c8eff
Update settings.py.sample 2019-02-10 23:32:18 +01:00
Ace
08748e480c
Update README.md 2019-02-07 09:22:29 +01:00
Ace
d3a8297473
Added images for readme 2019-02-07 09:18:41 +01:00
Ace
b665f4c6c6
Update README.md 2019-02-06 22:34:05 +01:00
Ace
e7b91ca9fb
Rename Installer-with-debug to Installer-with-debug.sh 2019-02-06 22:33:44 +01:00
Ace
3b48667ec7
Update README.md 2019-02-06 22:23:58 +01:00
Ace
a761e0bdb2
Fixed a few issues 2019-02-06 02:17:56 +01:00
Ace
b202746029
Update prototype.sh 2019-02-06 02:12:25 +01:00
Ace
10cb3610c3
Update prototype.sh 2019-02-06 01:55:35 +01:00
Ace
f59f84c6d2
Update prototype.sh 2019-02-06 01:45:35 +01:00
Ace
0070990765
Update prototype.sh 2019-02-06 01:39:32 +01:00
Ace
c8efdade43
Update prototype.sh 2019-02-06 01:36:36 +01:00
Ace
d6bd526e15
Update prototype.sh 2019-02-06 01:24:19 +01:00
Ace
72c4e3d032
doing some testing 2019-02-06 01:07:37 +01:00
Ace
f63f08acc0
Removed some additional info 2019-02-06 00:25:55 +01:00
Ace
06f84e9d29
doing some serious testing 2019-02-06 00:14:45 +01:00
Ace
4fa5f6dc90
Update prototype.sh 2019-02-06 00:11:54 +01:00
Ace
322367f226
Fixed a bug
Removed a 'fin' bug
2019-02-05 23:50:29 +01:00
Ace
bca4c2245a
Added some more info on the settings file
And some infos on updating.
2019-02-05 23:36:17 +01:00
Ace
385b3a5793
Add files via upload 2019-02-05 20:14:52 +01:00
Ace
8e9056f109
Delete gravit-positions.jpg 2019-02-05 20:13:21 +01:00
Ace
06980ced57
Add files via upload 2019-02-05 20:09:25 +01:00
Ace
3c3a9eb68d
Added features in planning for v1.6 2019-02-05 19:05:21 +01:00
Ace
f07c66145e
Fixed a few issues with EOF
Fixed the issue where lines in info.txt and the supervisor conf file would be indented, leading to a few issues related to auto-starting
2019-02-05 16:14:46 +01:00
Ace
be85450491
Added a line with info on stability 2019-02-05 16:01:30 +01:00
Ace
73b3497d14
Testing a fix where software would not start @boot 2019-02-05 15:57:11 +01:00
Ace
f2273deede
Update README.md 2019-02-03 18:20:12 +01:00
Ace
e362d36e13
RELEASE v1.5 2019-02-03 18:05:36 +01:00
Ace
818f56106d
Added new section for v1.5 2019-02-03 17:57:34 +01:00
Ace
9e930167c1
Delete E-Paper-Calendar-front.jpg 2019-02-03 17:39:13 +01:00
Ace
eeeac8253b
Delete IMG_2700.jpg 2019-02-03 17:39:06 +01:00
Ace
adda2c4345
Delete rectangle.png 2019-02-03 17:38:50 +01:00
Ace
3bcd56448c
Delete E-Paper-v1.4-front.JPG 2019-02-03 17:38:24 +01:00
Ace
9a0864cca1
Delete E-Paper-layout.png 2019-02-03 17:38:18 +01:00
Ace
7276407797
Delete E-Paper v1.4.jpeg 2019-02-03 17:38:08 +01:00
Ace
89cfb7b762
Rename settings.py.backup to settings.py.sample 2019-02-03 17:37:28 +01:00
Ace
f601179988
Delete Januar.bmp 2019-02-03 17:36:10 +01:00
Ace
bfa3d00ae9
Delete week-sun.bmp 2019-02-03 17:35:56 +01:00
Ace
0715414191
Delete week-mon.bmp 2019-02-03 17:35:54 +01:00
Ace
ec3bd09536
Delete stable.py 2019-02-03 17:35:47 +01:00
Ace
fa8637db2f
Delete test 2019-02-03 17:35:43 +01:00
Ace
0da4aa286e
Delete September.bmp 2019-02-03 17:35:25 +01:00
Ace
dd96ca1297
Delete October.bmp 2019-02-03 17:35:21 +01:00
Ace
6bf541f82a
Delete November.bmp 2019-02-03 17:35:17 +01:00
Ace
613bc87e5f
Delete May.bmp 2019-02-03 17:35:11 +01:00
Ace
7e0515e5d5
Delete March.bmp 2019-02-03 17:35:07 +01:00
Ace
e217171192
Delete June.bmp 2019-02-03 17:35:04 +01:00
Ace
3cc7a9f22f
Delete July.bmp 2019-02-03 17:35:00 +01:00
Ace
a9c67c0bce
Delete Februar.bmp 2019-02-03 17:34:56 +01:00
Ace
493fa5aae8
Delete December.bmp 2019-02-03 17:34:53 +01:00
Ace
0840e6e2bc
Delete August.bmp 2019-02-03 17:34:47 +01:00
Ace
c4257672d4
Delete April.bmp 2019-02-03 17:34:43 +01:00
Ace
8b8d0c5132
Delete week-sun.bmp 2019-02-03 17:34:15 +01:00
Ace
942f70f6f3
Delete week-mon.bmp 2019-02-03 17:34:11 +01:00
Ace
8360cd770f
Delete readme.md 2019-02-03 17:34:01 +01:00
Ace
6c6e4722b3
Delete September.bmp 2019-02-03 17:33:57 +01:00
Ace
96abd50288
Delete Oktober.bmp 2019-02-03 17:33:53 +01:00
Ace
6f80b5d89c
Delete November.bmp 2019-02-03 17:33:48 +01:00
Ace
9535d9b40e
Delete März.bmp 2019-02-03 17:33:44 +01:00
Ace
36177b4e4a
Delete Mai.bmp 2019-02-03 17:33:40 +01:00
Ace
e3457a325d
Delete Juni.bmp 2019-02-03 17:33:36 +01:00
Ace
2baf7b3a08
Delete Juli.bmp 2019-02-03 17:33:32 +01:00
Ace
34c0ca4d74
Delete Januar.bmp 2019-02-03 17:33:29 +01:00
Ace
76546d3561
Delete Februar.bmp 2019-02-03 17:33:25 +01:00
Ace
d01706f79e
Delete Dezember.bmp 2019-02-03 17:33:21 +01:00
Ace
9ec6f5262c
Delete August.bmp 2019-02-03 17:33:17 +01:00
Ace
b4bc71dfc2
Delete April.bmp 2019-02-03 17:33:13 +01:00
Ace
abda71f74f
Delete supported-languages.md 2019-02-03 17:32:45 +01:00
Ace
c58f9d9687
Delete test 2019-02-03 17:32:25 +01:00
Ace
f8c2ec736d
Add files via upload 2019-02-03 17:32:07 +01:00
Ace
0e613c39e5
Create test 2019-02-03 17:31:48 +01:00
Ace
6623987e1f
Delete cal-v1.4-templates.gvdesign 2019-02-03 17:30:45 +01:00
Ace
44facd0826
Delete stable(beta).py 2019-02-03 17:30:42 +01:00
Ace
9a06553ea3
Delete 3-Colour-converter.py 2019-02-03 17:30:36 +01:00
Ace
8a9fb1dc91
Delete 2-Colour-converter.py 2019-02-03 17:30:32 +01:00
Ace
d25e5bc800
Delete test 2019-02-03 17:30:15 +01:00
Ace
aabddcf483
Delete test 2019-02-03 17:29:56 +01:00
Ace
427f91785e
Delete September.jpeg 2019-02-03 17:29:52 +01:00
Ace
0d29b4fed0
Delete October.jpeg 2019-02-03 17:29:45 +01:00
Ace
ae31f80338
Delete November.jpeg 2019-02-03 17:29:41 +01:00
Ace
bda71065b7
Delete May.jpeg 2019-02-03 17:29:37 +01:00
Ace
8a0884cecd
Delete March.jpeg 2019-02-03 17:29:33 +01:00
Ace
64da394a1f
Delete June.jpeg 2019-02-03 17:29:29 +01:00
Ace
2c92419706
Delete July.jpeg 2019-02-03 17:29:25 +01:00
Ace
87c9d8dbc0
Delete January.jpeg 2019-02-03 17:29:20 +01:00
Ace
e10a5fe55f
Delete February.jpeg 2019-02-03 17:29:16 +01:00
Ace
59064cf6c1
Delete December.jpeg 2019-02-03 17:29:13 +01:00
Ace
c7b4e32660
Delete August.jpeg 2019-02-03 17:29:09 +01:00
Ace
c917fb84ce
Delete April.jpeg 2019-02-03 17:29:05 +01:00
Ace
2d37d7fd6c
Delete March.jpeg 2019-02-03 17:28:42 +01:00
Ace
fd44e1f659
Delete test 2019-02-03 17:28:23 +01:00
Ace
257a24ecbd
Delete September.jpeg 2019-02-03 17:28:18 +01:00
Ace
0388322416
Delete October.jpeg 2019-02-03 17:28:14 +01:00
Ace
405ef556fc
Delete November.jpeg 2019-02-03 17:28:10 +01:00
Ace
ec34f5acae
Delete May.jpeg 2019-02-03 17:28:07 +01:00
Ace
24b87d2612
Delete June.jpeg 2019-02-03 17:28:03 +01:00
Ace
50688a0174
Delete July.jpeg 2019-02-03 17:27:59 +01:00
Ace
c603a14592
Delete January.jpeg 2019-02-03 17:27:54 +01:00
Ace
c014815aba
Delete February.jpeg 2019-02-03 17:27:50 +01:00
Ace
e12e4b4678
Delete December.jpeg 2019-02-03 17:27:46 +01:00
Ace
606217bc76
Delete August.jpeg 2019-02-03 17:27:42 +01:00
Ace
09d3e15acc
Delete April.jpeg 2019-02-03 17:27:38 +01:00
Ace
3bb342b966
Testing Installer for v1.5 2019-02-03 17:03:28 +01:00
Ace
24542940ca
Releasing v1.5 2019-02-03 16:39:11 +01:00
Ace
5fd482cfe7
Update icon_positions_locations.py 2019-02-03 16:33:18 +01:00
Ace
4c54adf2e5
Testing Installer for v1.5 2019-02-03 16:27:54 +01:00
Ace
dfbcdb0d7b
Releasing v1.5 now... 2019-02-03 16:26:32 +01:00
Ace
bfd8e166d3
RELEASE V1.5?!
Initial release of v1.5!
This place is a teeny bit too small so you should check out the Changelog to see the changes.
2019-02-03 16:26:30 +01:00
Ace
c70534d6cc
Delete license 2019-02-03 16:22:12 +01:00
Ace
501e24413e
Delete stable.py 2019-02-03 16:20:50 +01:00
Ace
1fd005fe07
Delete settings.py.backup 2019-02-03 16:20:46 +01:00
Ace
90c367a073
Delete settings.py 2019-02-03 16:20:41 +01:00
Ace
1e642dcd55
Delete monocolour-converter.py 2019-02-03 16:20:35 +01:00
Ace
52d01cb76f
Delete icon_positions_locations.py 2019-02-03 16:20:31 +01:00
Ace
5dbc9c1722
Delete epdif.py 2019-02-03 16:20:26 +01:00
Ace
e61137957b
Delete epd7in5b.py 2019-02-03 16:20:22 +01:00
Ace
4e30f25b24
Delete epd7in5.py 2019-02-03 16:20:18 +01:00
Ace
0b7a6200bc
Delete calibration_bw.py 2019-02-03 16:20:12 +01:00
Ace
deb881d573
Delete calibration.py 2019-02-03 16:20:07 +01:00
Ace
1a9ef227e1
Delete OpenSans-Semibold.ttf 2019-02-03 16:20:03 +01:00
Ace
611e48cac8
Delete OpenSans-Bold.ttf 2019-02-03 16:19:58 +01:00
Ace
481bf95952
Delete Assistant-Bold.ttf 2019-02-03 16:19:55 +01:00
Ace
81e904be93
Delete wi-thunderstorm.bmp 2019-02-03 16:19:13 +01:00
Ace
0173e8b266
Delete wi-sunset.bmp 2019-02-03 16:19:11 +01:00
Ace
10fda81754
Delete wi-sunrise.bmp 2019-02-03 16:19:09 +01:00
Ace
ee23dbe957
Delete wi-strong-wind.bmp 2019-02-03 16:19:07 +01:00
Ace
203217bfc2
Delete wi-snow.bmp 2019-02-03 16:18:59 +01:00
Ace
11ec355e48
Delete wi-showers.bmp 2019-02-03 16:18:58 +01:00
Ace
305e983574
Delete wi-rain.bmp 2019-02-03 16:18:56 +01:00
Ace
f490e1927e
Delete wi-night-thunderstorm.bmp 2019-02-03 16:18:55 +01:00
Ace
893dc98867
Delete wi-night-snow.bmp 2019-02-03 16:18:53 +01:00
Ace
294c0fe1dd
Delete wi-night-showers.bmp 2019-02-03 16:18:51 +01:00
Ace
f3a0dba1e6
Delete wi-night-rain.bmp 2019-02-03 16:18:50 +01:00
Ace
b9dc628c12
Delete wi-night-cloudy.bmp 2019-02-03 16:18:48 +01:00
Ace
dd73abc8d0
Delete wi-night-clear.bmp 2019-02-03 16:18:46 +01:00
Ace
1f990c5c7a
Delete wi-night-alt-cloudy-windy.bmp 2019-02-03 16:18:44 +01:00
Ace
327a854d6e
Delete wi-fog.bmp 2019-02-03 16:18:42 +01:00
Ace
6f0111a7c3
Delete wi-day-sunny.bmp 2019-02-03 16:18:40 +01:00
Ace
f2d05baba3
Delete wi-day-cloudy.bmp 2019-02-03 16:18:39 +01:00
Ace
309f98e186
Delete wi-cloudy.bmp 2019-02-03 16:18:34 +01:00
Ace
36e7aef041
Delete wi-cloudy-windy.bmp 2019-02-03 16:17:52 +01:00
Ace
05ec911a47
Delete weekday.bmp 2019-02-03 16:17:04 +01:00
Ace
5425b7742c
Delete wi-sunset.bmp 2019-02-03 16:16:51 +01:00
Ace
62c1ea638e
Delete wi-sunrise.bmp 2019-02-03 16:16:49 +01:00
Ace
1ef9673fd6
Delete wi-strong-wind.bmp 2019-02-03 16:16:47 +01:00
Ace
bccc3ae5e1
Delete week-sun.bmp 2019-02-03 16:16:45 +01:00
Ace
f62914dd06
Delete week-mon.bmp 2019-02-03 16:16:43 +01:00
Ace
4032639e13
Delete today.bmp 2019-02-03 16:16:42 +01:00
Ace
6d243514ce
Delete temp-icon.bmp 2019-02-03 16:16:40 +01:00
Ace
11fa6c70fd
Delete separator.bmp 2019-02-03 16:16:38 +01:00
Ace
2b7867211e
Delete hum-icon.bmp 2019-02-03 16:16:36 +01:00
Ace
aea1d4929f
Delete event.bmp 2019-02-03 16:16:35 +01:00
Ace
2d4ea70538
Delete cloud-no-response.bmp 2019-02-03 16:16:33 +01:00
Ace
cb0fede996
Delete weekday.bmp 2019-02-03 16:15:46 +01:00
Ace
9319e9e84e
Delete week-sun.bmp 2019-02-03 16:15:42 +01:00
Ace
01ae72e5c0
Delete week-mon.bmp 2019-02-03 16:15:38 +01:00
Ace
2bd465c507
Delete today.bmp 2019-02-03 16:15:34 +01:00
Ace
ebbc198c79
Delete test 2019-02-03 16:15:30 +01:00
Ace
e0a57bc8d3
Delete temp-icon.bmp 2019-02-03 16:15:26 +01:00
Ace
32f3636ca6
Delete separator.bmp 2019-02-03 16:15:22 +01:00
Ace
2bb190061b
Delete hum-icon.bmp 2019-02-03 16:15:18 +01:00
Ace
7d10d6fca5
Delete event.bmp 2019-02-03 16:15:14 +01:00
Ace
7b334d5c84
Delete cloud-no-response.bmp 2019-02-03 16:14:53 +01:00
Ace
99781d78a2
Delete Installer-without-debug 2019-02-03 16:14:36 +01:00
Ace
186c4ac966
Delete May.bmp 2019-02-03 16:14:23 +01:00
Ace
c4d3bad2c5
Delete September.bmp 2019-02-03 16:14:03 +01:00
Ace
b5bc862052
Delete October.bmp 2019-02-03 16:14:01 +01:00
Ace
e6c85c716d
Delete November.bmp 2019-02-03 16:13:59 +01:00
Ace
7094934b72
Delete March.bmp 2019-02-03 16:13:58 +01:00
Ace
9c8c64b82a
Delete June.bmp 2019-02-03 16:13:56 +01:00
Ace
b77ec2612c
Delete July.bmp 2019-02-03 16:13:53 +01:00
Ace
161dcae8eb
Delete January.bmp 2019-02-03 16:13:52 +01:00
Ace
d780d590b3
Delete February.bmp 2019-02-03 16:13:50 +01:00
Ace
4953c04dda
Delete December.bmp 2019-02-03 16:13:48 +01:00
Ace
18a2ae60e7
Delete August.bmp 2019-02-03 16:13:46 +01:00
Ace
3ac5b48c1d
Delete April.bmp 2019-02-03 16:13:44 +01:00
Ace
0bbb1a15ff
Delete September.bmp 2019-02-03 16:13:04 +01:00
Ace
2812cbdecb
Delete August.bmp 2019-02-03 16:12:45 +01:00
Ace
7c49c4fd22
Delete December.bmp 2019-02-03 16:12:41 +01:00
Ace
557131a7a1
Delete February.bmp 2019-02-03 16:12:37 +01:00
Ace
8f8f72cd96
Delete January.bmp 2019-02-03 16:12:33 +01:00
Ace
054bd71382
Delete July.bmp 2019-02-03 16:12:30 +01:00
Ace
6ee43f5fee
Delete June.bmp 2019-02-03 16:12:25 +01:00
Ace
aef454f69f
Delete March.bmp 2019-02-03 16:12:22 +01:00
Ace
74ad96fea9
Delete May.bmp 2019-02-03 16:12:17 +01:00
Ace
de0db3546e
Delete November.bmp 2019-02-03 16:12:14 +01:00
Ace
a909b139fe
Delete October.bmp 2019-02-03 16:12:08 +01:00
Ace
2d5a332ce4
Delete 9.bmp 2019-02-03 16:11:33 +01:00
Ace
af736bbba7
Delete 8.bmp 2019-02-03 16:11:29 +01:00
Ace
7e30694d0d
Delete 7.bmp 2019-02-03 16:11:24 +01:00
Ace
c419d74ba0
Delete 6.bmp 2019-02-03 16:11:20 +01:00
Ace
0b222625b4
Delete 5.bmp 2019-02-03 16:11:16 +01:00
Ace
6352179358
Delete 4.bmp 2019-02-03 16:11:11 +01:00
Ace
c28627489e
Delete 31.bmp 2019-02-03 16:11:07 +01:00
Ace
187d71e43e
Delete 30.bmp 2019-02-03 16:11:03 +01:00
Ace
b9f1342e62
Delete 3.bmp 2019-02-03 16:10:59 +01:00
Ace
c36624363c
Delete 29.bmp 2019-02-03 16:10:55 +01:00
Ace
97ea602e92
Delete 28.bmp 2019-02-03 16:10:51 +01:00
Ace
5b23a854ef
Delete 27.bmp 2019-02-03 16:10:47 +01:00
Ace
e7d9d0a658
Delete 26.bmp 2019-02-03 16:10:42 +01:00
Ace
b5d495c237
Delete 25.bmp 2019-02-03 16:10:37 +01:00
Ace
42c5234037
Delete 18.bmp 2019-02-03 16:10:34 +01:00
Ace
ad3cc04fb1
Delete 16.bmp 2019-02-03 16:10:27 +01:00
Ace
c94c700886
Delete 13.bmp 2019-02-03 16:10:23 +01:00
Ace
3ac44198bf
Delete 14.bmp 2019-02-03 16:09:47 +01:00
Ace
4e7f5e27da
Delete 15.bmp 2019-02-03 16:09:44 +01:00
Ace
61aecedec6
Delete 17.bmp 2019-02-03 16:09:41 +01:00
Ace
0f11ae3727
Delete 19.bmp 2019-02-03 16:09:39 +01:00
Ace
c9673be33e
Delete 2.bmp 2019-02-03 16:09:37 +01:00
Ace
a244b8a4fd
Delete 20.bmp 2019-02-03 16:09:35 +01:00
Ace
05819a1d1c
Delete 21.bmp 2019-02-03 16:09:33 +01:00
Ace
8208ad8601
Delete 22.bmp 2019-02-03 16:09:31 +01:00
Ace
21dd78ee22
Delete 23.bmp 2019-02-03 16:09:29 +01:00
Ace
3881c24939
Delete 24.bmp 2019-02-03 16:09:27 +01:00
Ace
9c5bd9734f
Delete 12.bmp 2019-02-03 16:09:03 +01:00
Ace
d96ab1ced0
Delete 11.bmp 2019-02-03 16:08:53 +01:00
Ace
de3b668156
Delete 10.bmp 2019-02-03 16:08:48 +01:00
Ace
b63fd572e4
Delete 1.bmp 2019-02-03 16:08:43 +01:00
Ace
5844a72821
Delete 0.bmp 2019-02-03 16:08:37 +01:00
Ace
50c98b7640
Releasing v1.5 now... 2019-02-03 16:07:28 +01:00
Ace
d381993021
Preparing for new release 2019-02-03 15:58:17 +01:00
Ace
8aed428ba8
Delete junk-file.py 2019-02-03 14:40:29 +01:00
Ace
4c594469e6
Create junk-file.py 2019-02-03 14:39:39 +01:00
Ace
43220f8191
Preparing for new release 2019-02-02 23:09:40 +01:00
Ace
dc692c03a2
Praparations for next release 2019-02-02 22:03:07 +01:00
Ace
6357cd3838
Added more features for next release 2019-01-30 20:34:13 +01:00
Ace
63a3a74d58
Testing a new version of the installer 2019-01-27 20:53:50 +01:00
Ace
4d529214df
Added some features 2019-01-26 17:43:07 +01:00
Ace
c82fc0d55c
Added some suggestions 2019-01-26 17:01:44 +01:00
Ace
cff34f4b5e
Update README.md
Nothing special, just some minor improvements.
2019-01-26 00:36:45 +01:00
Ace
5bcb8afbb0
Added some more feature suggestions 2019-01-22 08:25:54 +01:00
Ace
e1471ed224
Added new features for next version (v1.5) 2019-01-20 19:45:34 +01:00
Ace
9067f72e0b
Added some more features in planning 2019-01-07 21:37:59 +01:00
Ace
1195055503
Added gravitdesigner file for v1.4 2019-01-06 20:44:44 +01:00
Ace
81916435e9
Deleted outdated file 2019-01-06 20:43:50 +01:00
Ace
4119728a10
Fixed typo in month name 2019-01-06 20:39:01 +01:00
Ace
1ff7aa1088
Contained typo 2019-01-06 20:37:44 +01:00
Ace
2a2d490b63
Updated 2019-01-05 18:50:36 +01:00
Ace
1ed477fc62
Created a settings file copy as a reference. 2019-01-05 18:48:37 +01:00
Ace
0f9822e77d
Updated for v1.4 mit multiple iCal URLs options 2019-01-05 18:47:11 +01:00
Ace
fe54eb00f7
Fixed some typos 2019-01-05 16:36:34 +01:00
Ace
701c0d224f
Fixed a PIL version issue
Specified the PIL version in the installer to 5.3.0 due to a bug with the latest version.
Also, fixed some regex error messages.
2019-01-05 16:16:03 +01:00
Ace
c8c676c584
Fixed a PIL version issue
Specified the PIL version in the installer to 5.3.0 due to a bug with the latest version.
Also, fixed some regex error messages.
2019-01-05 15:52:49 +01:00
Ace
8e53ef63f4
Testing some fixes for PIL 2019-01-04 20:03:29 +01:00
Ace
35718b7151
Fixed some regex issues 2019-01-04 19:03:23 +01:00
Ace
c9fd493577
Fixed Typo 2019-01-03 23:28:44 +01:00
Ace
2e66377220
Delete seperator.bmp 2019-01-03 23:28:33 +01:00
Ace
5a24eafd5e
Fixed typo 2019-01-03 23:28:05 +01:00
Ace
6532818acf
Delete seperator.bmp 2019-01-03 23:27:50 +01:00
Ace
8d3e683f4a
Added support for multiple ical URLs 2019-01-03 22:48:07 +01:00
Ace
ec33bcff46
Added support for multiple icals
Contains some readability improvements and support for multiple ical URLs.
2019-01-03 22:41:14 +01:00
Ace
b887fd0f69
Improved readability
Improved some parts of the file for a better overview. Also fixed a typo.
2019-01-03 22:35:59 +01:00
Ace
5d668d0515
Rename stable(beta).py.py to stable(beta).py 2019-01-03 22:20:18 +01:00
Ace
7f042c6c0a
A stable.py file with new features for developers
This file contains is a modified version of the main file (stable.py) and is mainly for developers to test out new functions. It contains more features than the stable version but is also not guaranteed to work. Please use at your own risk.
2019-01-03 22:19:52 +01:00
Ace
6a31ef5a8c
Updated instructions
Changed the text in the section ‚adding details to the programm‘ which contained some outdated information
2018-12-28 00:43:01 +01:00
Ace
159a45bbb8
fixed a typo leading to doubled events 2018-12-27 19:17:43 +01:00
Ace
9c07b414c4
Updated for v1.5 2018-12-27 18:41:38 +01:00
Ace
a5a858ec4f
Added image of v1.4 2018-12-27 00:05:18 +01:00
Ace
29e4b6f3a9
removed non-required images 2018-12-27 00:04:18 +01:00
Ace
68111c534c
Added images for release v1.4 2018-12-25 15:14:12 +01:00
Ace
9f19092477
Add files via upload 2018-12-25 15:12:39 +01:00
Ace
a0dd50497f
Delete E-Paper-v1.4-front.JPG 2018-12-25 15:12:22 +01:00
Ace
f9c9ad3b4e
Add files via upload 2018-12-25 14:54:58 +01:00
Ace
8654c3e84e
Delete 7.5inch-E-Paper-software-v1.4.mp4 2018-12-25 14:51:29 +01:00
Ace
e342673c59
Added image 2018-12-25 14:44:47 +01:00
Ace
8fbe2cf05c
Added featured image for v1.4 2018-12-25 14:37:24 +01:00
Ace
2de4052806
Update README.md 2018-12-25 00:38:21 +01:00
Ace
fa0b0c18d8
Update Changelog.md 2018-12-25 00:33:48 +01:00
Ace
456a118596
Added note on v1.4 in updates 2018-12-25 00:21:28 +01:00
Ace
d127d88abd
fixed a decoding bug
removed the UTF-8 part from icalendar parsing process
2018-12-25 00:18:02 +01:00
Ace
4a41b9258c
fixed typo 2018-12-24 22:35:12 +01:00
Ace
a97fa6f937
fixed a typo 2018-12-24 22:33:08 +01:00
Ace
98ae207b74
Add files via upload 2018-12-24 22:29:55 +01:00
Ace
c613876f0e
Added new features for release 1.4 2018-12-24 21:19:47 +01:00
Ace
980661196e
Added icons for new release (v1.4) 2018-12-24 21:19:29 +01:00
Ace
1bde274e24
junk 2018-12-24 21:17:00 +01:00
Ace
77e9f42db1
Updated for release v1.4 2018-12-24 21:14:27 +01:00
Ace
95997eae52
Preparing for v1.4! 2018-12-24 21:13:58 +01:00
Ace
3ffc4e7a81
Preparing for new release (v1.4) 2018-12-24 21:07:19 +01:00
Ace
e2c17ca6bc
Preparing for new release (v1.4) 2018-12-24 21:06:38 +01:00
Ace
654ff05d6e
Update Installer-without-debug 2018-12-24 21:04:35 +01:00
Ace
813c6b2adb
Preparations for v1.4! 2018-12-24 21:03:50 +01:00
Ace
0e03d518d5
Update README.md 2018-12-24 20:38:23 +01:00
Ace
ed31c59b12
Fixed an issue with font
Somewhere along the updates, the font-defining line went missing. This has now been fixed.
2018-12-03 16:16:42 +01:00
Ace
23c682821c
Added note on hiding the written date
Hiding the explicit written date (e.g. Sun, 25 Nov 18), is now easy. Just go to the correct section of thie function and uncomment the lines, as suggested in the details of the function.
2018-11-25 23:23:41 +01:00
Ace
1d6634ee9f
Deleted a beta-phase file of the main programm
This scirpt contained a few improvements of the main script and was made to be tested and deployed. After testing the new script for several weeks, it now works just as expected. There is no longer a need to keee this file
2018-11-25 23:07:17 +01:00
Ace
f2181f2f54
Cleaned up the code & added explainations
This update is nothing major. It splits the main programm in 2 files, one for the programm itself (now containing mostly functions) and a new file, icon_positions_locations, containing all icons and their respective locations (path) as well as the position on the E-Paper Display).
Apart from that, new notes have been added which help to understand what the script is trying to achieve.
2018-11-25 22:58:32 +01:00
Ace
f9d7001eea
Fixed a small mistake of the powe unit 2018-11-08 07:59:49 +01:00
Ace
b44ece508f
Added more features for the next version (1.4) 2018-11-07 21:31:09 +01:00
Ace
4e0aaeb352
Add files via upload 2018-10-25 15:47:51 +02:00
Ace
0755c4c210
Seperated icon pos. & locations from main file 2018-10-25 15:34:16 +02:00
Ace
3084dba052
Add files via upload 2018-10-25 15:31:27 +02:00
Ace
e4a49faf56
Rename bar to seperator 2018-10-25 15:31:12 +02:00
Ace
8e806d10c1
Renamed icon 'bar' to 'seperator' 2018-10-24 21:36:06 +02:00
Ace
3ca4ee8113
Renamed bar to seperator 2018-10-24 21:33:33 +02:00
Ace
25b90f71a0
Rename bar to seperator 2018-10-24 21:33:12 +02:00
Ace
be7dc2e59e
Added icon for 'no-response' error 2018-10-24 21:23:38 +02:00
Ace
8edf75e728
Added icon for 'no-response' error 2018-10-24 21:22:09 +02:00
Ace
8c206df8a7
Merge pull request #14 from surak/master
(Crude) fix for keeping the script from crashing after network/server failure.
P.S.: Open to better suggestions
2018-10-24 11:15:24 +02:00
Alexandre Strube
9fb6d35f48 Crude fix 2018-10-23 23:10:32 +02:00
Ace
15cc6c85ab
Update prototype.sh 2018-10-22 20:42:46 +02:00
Ace
18e50e3d53
Update New-version-planning.md 2018-10-22 20:41:27 +02:00
Ace
7234463527
Update README.md 2018-10-19 18:17:55 +02:00
Ace
7e3cbd52cd
Update README.md 2018-10-17 11:52:57 +02:00
Ace
e9ddbc040a
Update Installer-with-debug 2018-10-16 23:33:16 +02:00
Ace
9f4d8ae6a0
Update Installer-without-debug 2018-10-16 23:32:43 +02:00
Ace
fe5895bb8d
Update New-version-planning.md 2018-10-16 23:27:33 +02:00
Ace
5e9691faaa
Update New-version-planning.md 2018-10-16 23:23:43 +02:00
Ace
7773eb1455
Updated for v1.3 2018-10-16 23:22:07 +02:00
Ace
56e8f25b6a
Updated for v1.3 2018-10-16 23:18:33 +02:00
Ace
7b3403994f
Update monocolour-converter.py 2018-10-16 23:13:15 +02:00
Ace
2322c882b4
Update for v1.3 2018-10-16 23:04:23 +02:00
Ace
6675cc178c
Update prototype.sh 2018-10-16 23:00:04 +02:00
Ace
af690e5ee7
Update prototype.sh 2018-10-16 22:57:05 +02:00
Ace
413ba4f068
Update prototype.sh 2018-10-16 22:55:24 +02:00
Ace
320521e5e4
Updated for v1.3 2018-10-16 22:46:48 +02:00
Ace
39a984e54c
Delete 9.bmp 2018-10-16 22:44:57 +02:00
Ace
6b3411cf6e
Delete 8.bmp 2018-10-16 22:44:51 +02:00
Ace
80e5f738f2
Delete 7.bmp 2018-10-16 22:44:45 +02:00
Ace
82adb68370
Delete 6.bmp 2018-10-16 22:44:39 +02:00
Ace
bfde67a1e4
Delete 5.bmp 2018-10-16 22:44:34 +02:00
Ace
8ddd6acc49
Delete 4.bmp 2018-10-16 22:44:28 +02:00
Ace
25bb3c9ef3
Delete 31.bmp 2018-10-16 22:44:21 +02:00
Ace
383c0116ae
Delete 30.bmp 2018-10-16 22:44:15 +02:00
Ace
bfd8663f35
Delete 3.bmp 2018-10-16 22:44:08 +02:00
Ace
5424c8e0e9
Delete 29.bmp 2018-10-16 22:44:01 +02:00
Ace
b6a68f7bb6
Delete 28.bmp 2018-10-16 22:43:54 +02:00
Ace
9e5b2c9747
Delete 27.bmp 2018-10-16 22:38:34 +02:00
Ace
76476acb9c
Delete 26.bmp 2018-10-16 22:38:28 +02:00
Ace
72f45f7e14
Delete 25.bmp 2018-10-16 22:38:21 +02:00
Ace
21b8734e14
Delete 24.bmp 2018-10-16 22:38:12 +02:00
Ace
03c3598841
Delete 23.bmp 2018-10-16 22:38:05 +02:00
Ace
2a93f92b72
Delete 22.bmp 2018-10-16 22:37:27 +02:00
Ace
02f632089c
Delete 21.bmp 2018-10-16 22:37:18 +02:00
Ace
10cf0e1977
Update Changelog.md 2018-10-16 22:36:58 +02:00
Ace
25dccbc60b
Delete 20.bmp 2018-10-16 22:36:50 +02:00
Ace
bed369dd96
Delete Side-view.JPG 2018-10-16 22:19:09 +02:00
Ace
d55bc7db76
Delete IMG_7051.JPG 2018-10-16 22:18:54 +02:00
Ace
c7bcbc32bf
Delete Front-view.JPG 2018-10-16 22:18:38 +02:00
Ace
d6d21cd7fe
Delete Back-view.JPG 2018-10-16 22:18:20 +02:00
Ace
76ebeee572
Delete editing main script.png 2018-10-16 22:18:12 +02:00
Ace
b8a5cf3e60
Delete 2.bmp 2018-10-16 22:17:11 +02:00
Ace
cce75faaf6
Delete 19.bmp 2018-10-16 22:17:03 +02:00
Ace
677281e25f
Delete 18.bmp 2018-10-16 22:16:58 +02:00
Ace
b7c55f2167
Delete 17.bmp 2018-10-16 22:16:46 +02:00
Ace
0770a0f8b1
Delete 16.bmp 2018-10-16 22:16:34 +02:00
Ace
ae0442df91
Delete 15.bmp 2018-10-16 22:16:25 +02:00
Ace
dcd9e3d422
Delete 14.bmp 2018-10-16 22:16:19 +02:00
Ace
5f6a0dc087
Delete 13.bmp 2018-10-16 22:16:13 +02:00
Ace
403ace490f
Delete 12.bmp 2018-10-16 22:16:04 +02:00
Ace
97472ba72d
Delete 11.bmp 2018-10-16 22:15:57 +02:00
Ace
a4920f008c
Delete 10.bmp 2018-10-16 22:15:50 +02:00
Ace
5883e699a9
Delete 1.bmp 2018-10-16 22:15:44 +02:00
Ace
4c777f172b
Delete September.bmp 2018-10-16 22:15:33 +02:00
Ace
855e46cd00
Delete October.bmp 2018-10-16 22:15:28 +02:00
Ace
7805ee8b93
Delete November.bmp 2018-10-16 22:15:23 +02:00
Ace
c7770a6af9
Delete May.bmp 2018-10-16 22:15:17 +02:00
Ace
6ba5d9c371
Delete March.bmp 2018-10-16 22:15:11 +02:00
Ace
e64f4aaba6
Delete June.bmp 2018-10-16 22:15:05 +02:00
Ace
0742963e30
Delete July.bmp 2018-10-16 22:15:00 +02:00
Ace
e3b8f49b2a
Delete January.bmp 2018-10-16 22:14:53 +02:00
Ace
d2fa76097a
Delete February.bmp 2018-10-16 22:14:09 +02:00
Ace
091631fe1f
Delete December.bmp 2018-10-16 22:14:03 +02:00
Ace
e57211253c
Delete August.bmp 2018-10-16 22:13:57 +02:00
Ace
7fab1569cd
Delete April.bmp 2018-10-16 22:13:51 +02:00
Ace
014f89dec3
Delete weekday.bmp 2018-10-16 22:13:40 +02:00
Ace
2bd0d99449
Delete week-sun.bmp 2018-10-16 22:13:34 +02:00
Ace
a030e8c2fd
Delete week-mon.bmp 2018-10-16 22:13:28 +02:00
Ace
5e746e5ae2
Delete today.bmp 2018-10-16 22:13:21 +02:00
Ace
8a3396c461
Delete temp-icon.bmp 2018-10-16 22:13:15 +02:00
Ace
4d98e34bf4
Delete hum-icon.bmp 2018-10-16 22:13:10 +02:00
Ace
96ea05d1cd
Delete event.bmp 2018-10-16 22:13:03 +02:00
Ace
02a76debe1
Delete bar.bmp 2018-10-16 22:12:56 +02:00
Ace
ab74c32b71
Delete wi-cloudy.bmp 2018-10-16 22:12:14 +02:00
Ace
79e33d12cd
Delete wi-day-cloudy.bmp 2018-10-16 22:12:08 +02:00
Ace
9f49c12c95
Delete wi-day-sunny.bmp 2018-10-16 22:12:04 +02:00
Ace
013b89c95a
Delete wi-fog.bmp 2018-10-16 22:11:54 +02:00
Ace
9c52190af5
Delete wi-night-alt-cloudy-windy.bmp 2018-10-16 22:11:49 +02:00
Ace
5b1bb5af43
Delete wi-night-clear.bmp 2018-10-16 22:11:45 +02:00
Ace
f070ba8d5c
Delete wi-night-cloudy.bmp 2018-10-16 22:11:29 +02:00
Ace
61eb3ecfae
Delete wi-night-rain.bmp 2018-10-16 22:11:24 +02:00
Ace
40cff57313
Delete wi-night-showers.bmp 2018-10-16 22:11:19 +02:00
Ace
8c432424e7
Delete wi-night-snow.bmp 2018-10-16 22:11:14 +02:00
Ace
10dfb78e6c
Delete wi-night-thunderstorm.bmp 2018-10-16 22:11:10 +02:00
Ace
a39371490a
Delete wi-rain.bmp 2018-10-16 22:11:05 +02:00
Ace
50db242bfa
Delete wi-showers.bmp 2018-10-16 22:11:01 +02:00
Ace
1603e20e60
Delete wi-snow.bmp 2018-10-16 22:10:54 +02:00
Ace
71ce767f49
Delete wi-thunderstorm.bmp 2018-10-16 22:10:25 +02:00
Ace
b6e868da67
Delete wi-cloudy-windy.bmp 2018-10-16 22:10:14 +02:00
Ace
b6d1e46815
Delete license 2018-10-16 22:10:06 +02:00
Ace
1dd5605dcd
Delete epdif.py 2018-10-16 22:09:59 +02:00
Ace
9c744ddce8
Delete epd7in5.py 2018-10-16 22:09:52 +02:00
Ace
7e0c61922f
Delete calibration.py 2018-10-16 22:09:45 +02:00
Ace
dc2fd1de3e
Delete OpenSans-Semibold.ttf 2018-10-16 22:09:38 +02:00
Ace
6a44b845c0
deprecated 2018-10-16 21:18:47 +02:00
Ace
02901cd270
Delete OpenSans-Bold.ttf 2018-10-16 21:18:22 +02:00
Ace
43c5c7fc59
Delete Assistant-Bold.ttf 2018-10-16 21:18:13 +02:00
Ace
844a824827
Delete settings.py 2018-10-16 21:17:59 +02:00
Ace
ffb948ee0f
deprecated 2018-10-16 21:17:43 +02:00
Ace
3d174a201b
Delete test 2018-10-16 21:16:19 +02:00
Ace
7bf088f4ff
Optimised bmps 2018-10-16 21:15:49 +02:00
Ace
71d927c7e9
Delete test 2018-10-16 21:14:06 +02:00
Ace
6f54db6169
Update for release 1.3 2018-10-16 21:10:56 +02:00
Ace
f7ef1858ac
Just for testing the new installer 2018-10-16 21:05:19 +02:00
Ace
a2f900ec35
Update for v1.3 2018-10-16 20:56:25 +02:00
Ace
dd109dd137
Create test 2018-10-16 20:52:08 +02:00
Ace
e8c475b46d
Delete September.bmp 2018-10-16 20:51:57 +02:00
Ace
eb215c72a8
Delete October.bmp 2018-10-16 20:51:45 +02:00
Ace
1c968c95f8
Delete November.bmp 2018-10-16 20:51:39 +02:00
Ace
7e29c41aff
Delete May.bmp 2018-10-16 20:51:32 +02:00
Ace
d8b45858d7
Delete March.bmp 2018-10-16 20:51:26 +02:00
Ace
ff5c9a6d00
Delete June.bmp 2018-10-16 20:51:20 +02:00
Ace
7612fed892
Delete July.bmp 2018-10-16 20:51:14 +02:00
Ace
f45c0a44c0
Delete January.bmp 2018-10-16 20:51:08 +02:00
Ace
5b904c6d2e
Delete February.bmp 2018-10-16 20:51:01 +02:00
Ace
de5c8a9ac2
Delete December.bmp 2018-10-16 20:50:54 +02:00
Ace
9a2673f4e0
Delete August.bmp 2018-10-16 20:50:48 +02:00
Ace
9623d570f1
Delete April.bmp 2018-10-16 20:50:40 +02:00
Ace
703b2b913c
Update README.md 2018-10-16 19:22:34 +02:00
Ace
7f57bbf1fd
English-months source files 2018-10-16 19:20:13 +02:00
Ace
1d849a92d6
Create test 2018-10-16 19:19:40 +02:00
Ace
b79b7e822b
German-months source files 2018-10-16 19:19:07 +02:00
Ace
b58e9db17e
Create test 2018-10-16 19:18:15 +02:00
Ace
b971acb025
Create test 2018-10-16 19:17:33 +02:00
Ace
951226c182
Delete week-mon-de.bmp 2018-10-16 19:16:16 +02:00
Ace
9b4619bdcf
Delete week-mon.bmp 2018-10-16 19:16:09 +02:00
Ace
d81937f6ae
Delete week-sun-de.bmp 2018-10-16 19:16:02 +02:00
Ace
82fbbb082a
Delete week-sun.bmp 2018-10-16 19:15:54 +02:00
Ace
9a0ee04449
Delete weekday.bmp 2018-10-16 19:15:48 +02:00
Ace
f87a2bfef8
Delete today.bmp 2018-10-16 19:15:42 +02:00
Ace
3bca5bf410
Delete temp-icon.bmp 2018-10-16 19:15:35 +02:00
Ace
6c454b67fb
Delete hum-icon.bmp 2018-10-16 19:15:28 +02:00
Ace
466befacf1
Delete event.bmp 2018-10-16 19:15:21 +02:00
Ace
9c52187999
Delete bar.bmp 2018-10-16 19:15:14 +02:00
Ace
015cacf81c
Delete beta-converter.py 2018-10-16 19:14:53 +02:00
Ace
cb37ba4e40
Improved BMB files for better expierence 2018-10-16 19:14:10 +02:00
Ace
c071467b27
Create test 2018-10-16 19:12:19 +02:00
Ace
68448c4d75
Delete September.bmp 2018-10-16 19:11:56 +02:00
Ace
44abcd7ac5
Delete Oktober.bmp 2018-10-16 19:11:49 +02:00
Ace
568ebf98e6
Delete November.bmp 2018-10-16 19:11:43 +02:00
Ace
1fdfeab281
Delete März.bmp 2018-10-16 19:11:37 +02:00
Ace
49385924e4
Delete Mai.bmp 2018-10-16 19:11:31 +02:00
Ace
9c9c778404
Delete Juni.bmp 2018-10-16 19:11:24 +02:00
Ace
f641099068
Delete Juli.bmp 2018-10-16 19:11:12 +02:00
Ace
d2b0f53528
Delete Januar.bmp 2018-10-16 19:11:06 +02:00
Ace
cb7030f67a
Delete Februar.bmp 2018-10-16 19:10:57 +02:00
Ace
6d7fde92f3
Delete Dezember.bmp 2018-10-16 19:10:50 +02:00
Ace
aa9559e613
Delete August.bmp 2018-10-16 19:10:44 +02:00
Ace
322ef37fe0
Delete April.bmp 2018-10-16 19:10:37 +02:00
Ace
05f479a32f
Delete October.bmp 2018-10-16 19:10:16 +02:00
Ace
cc4a51f1f4
Delete November.bmp 2018-10-16 19:10:10 +02:00
Ace
74b286198b
Delete May.bmp 2018-10-16 19:10:02 +02:00
Ace
51a3d15ef0
Delete March.bmp 2018-10-16 19:09:55 +02:00
Ace
aac4c5ee7d
Delete June.bmp 2018-10-16 19:09:46 +02:00
Ace
265a29acb2
Delete July.bmp 2018-10-16 19:09:39 +02:00
Ace
2d0b9a5b14
Delete January.bmp 2018-10-16 19:09:32 +02:00
Ace
447fe60680
Delete February.bmp 2018-10-16 19:09:24 +02:00
Ace
97629b6899
Delete December.bmp 2018-10-16 19:09:14 +02:00
Ace
021139d54e
Delete August.bmp 2018-10-16 19:09:06 +02:00
Ace
6337e613c5
Delete April.bmp 2018-10-16 19:08:53 +02:00
Ace
614be29242
Delete September.bmp 2018-10-16 19:08:44 +02:00
Ace
9686c48c44
Delete week-mon.bmp 2018-10-16 17:19:04 +02:00
Ace
277865c0c5
Delete week-sun.bmp 2018-10-16 17:18:51 +02:00
Ace
74714b312c
Delete temp-icon.bmp 2018-10-16 17:18:40 +02:00
Ace
d1b85f1d7e
Delete hum-icon.bmp 2018-10-16 17:18:30 +02:00
Ace
6e90edcfc3
Delete today.bmp 2018-10-16 17:18:19 +02:00
Ace
6efec16562
Delete weekday.bmp 2018-10-16 17:18:08 +02:00
Ace
c597f7d741
Delete event.bmp 2018-10-16 17:17:55 +02:00
Ace
cd24f3f4f6
Delete bar.bmp 2018-10-16 17:17:43 +02:00
Ace
df7f8db0b4
Rename calibration-bw.py to calibration_bw.py 2018-10-16 17:14:03 +02:00
Ace
c3f0aeca7f
Create monocolour-converter.py 2018-10-16 17:07:33 +02:00
Ace
a255fb146f
Add files via upload 2018-10-16 17:05:02 +02:00
Ace
d84494d0de
Delete test.sh 2018-10-16 17:04:20 +02:00
Ace
4e44a3e945
Delete test.sh 2018-10-16 17:04:05 +02:00
Ace
60e0e0725d
Update beta-converter.py 2018-10-16 17:00:24 +02:00
Ace
c1c6ffc49c
Add files via upload 2018-10-16 16:55:20 +02:00
Ace
52eaf39940
Add files via upload 2018-10-16 16:54:37 +02:00
Ace
1e05c7d054
Create calibration-bw.py 2018-10-16 16:53:30 +02:00
Ace
f2af7255b4
Add files via upload 2018-10-16 16:51:18 +02:00
Ace
03d0882e01
Create test 2018-10-16 16:49:12 +02:00
Ace
cd4d98b7da
Create test 2018-10-16 16:48:56 +02:00
Ace
431cdef97a
Add files via upload 2018-10-16 16:43:56 +02:00
Ace
73fee1ebe0
Add files via upload 2018-10-16 16:42:58 +02:00
Ace
99ad4401a1
Create test.sh 2018-10-16 16:41:56 +02:00
Ace
858732402f
Create test.sh 2018-10-16 16:41:21 +02:00
Ace
44b1f8bb3c
Delete E-Paper-layout.png 2018-10-16 16:35:32 +02:00
Ace
b432a91e09
Create epd7in5.py 2018-10-16 16:30:03 +02:00
Ace
5c9666e5d6
Preparing for unified version 2018-10-16 16:28:09 +02:00
Ace
2165eb8293
Updated featured image of the Calendar 2018-10-14 22:00:24 +02:00
Ace
a1b377199e
Add files via upload 2018-10-14 20:48:27 +02:00
Ace
8cc9dea51e
Add files via upload 2018-10-14 20:42:09 +02:00
Ace
d955abbd22
Add files via upload 2018-10-13 22:48:50 +02:00
Ace
7e8b7f5588
Update stable.py 2018-10-11 13:32:43 +02:00
Ace
cbd7b28827
Create settings.py 2018-10-11 13:32:02 +02:00
Ace
b6aefe5d7b
Update stable.py 2018-10-11 13:31:07 +02:00
Ace
c7fc3ad487
Update settings.py 2018-10-11 13:30:38 +02:00
Ace
986e438069
Update Installer-without-debug 2018-10-11 13:29:30 +02:00
Ace
f8d23e9f2e
Update Installer-with-debug 2018-10-11 13:29:04 +02:00
Ace
24eacca197
Merge pull request #12 from surak/master
closing issues #9 and #11
2018-10-11 12:42:12 +02:00
Alexandre Strube
ff1ec85d6e closing issues #9 and #11 2018-10-10 23:23:34 +02:00
296 changed files with 5130 additions and 2609 deletions

21
.gitignore vendored Normal file
View file

@ -0,0 +1,21 @@
################################################################################
# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
################################################################################
/.vs
/Calendar/settings.py
/Calendar/__pycache__/settings.cpython-36.pyc
/Calendar/__pycache__
/Calendar/design_exported.png
/design_exported.png
/Calendar/icon_positions_locations.pyc
/Calendar/DebugInterface.pyc
/Calendar/DebugConsole.pyc
/Calendar/DataSourceInterface.pyc
/Calendar/CalendarInterface.pyc
/Calendar/CalendarEvent.pyc
/Calendar/design_exported_old.png
/Calendar/settings_dev.py
/Calendar/settings_pers.py
/.vscode
/Calendar/images/

View file

@ -1,78 +0,0 @@
"""
This is a python image converter specific for the E-Paper-Calendar
on github by aceisace from the link below.
(https://github.com/aceisace/E-Paper-Calendar-with-iCal-sync-and-live-weather)
It will convert the 3-colour .bmp's to 2-colour .bmp's so that they can be
used even with the 2-Colour 7.5" E-Paper Display from waveshare.
Please use with caution. If the input and output paths are the same, the
convertr will overwrite all .bmp files. It's highly recommended to make a
backup of the entire 'Calendar" folder first.
Copyright by Ace-Laboratory
"""
"""
Info: These path contain the bmps that require converting.
1) /home/pi/E-Paper-Master/Calendar/months/
3) /home/pi/E-Paper-Master/Calendar/other/
"""
path = '/home/pi/E-Paper-Master/Calendar/'
#--------------only change the following two lines-----------------#
input_path_1 = path+'other/'
output_path_1 = path+'other/'
input_path_2 = path+'months/'
output_path_2 = path+'months/'
#-----------------no need to change anything below-----------------#
import glob, os, errno
from PIL import Image
import PIL.ImageOps
imagenames_1 = []
imagenames_2 = []
print('opening the specified directory...')
os.chdir(input_path_1) #folder containg files
for files in glob.glob('*.bmp'): #find bmp files
imagenames_1.append(files) #add these files to a list
print('Found these files:', imagenames_1) #print this list
os.chdir(input_path_2) #folder containg files
for files in glob.glob('*.bmp'): #find bmp files
imagenames_2.append(files) #add these files to a list
print('Found these files:', imagenames_2) #print this list
# 0 is black, 255 is white, 127 is red.
# The following will convert the 'red' parts to white parts.
thresh = 100 # any value below 127 works.
fn = lambda x : 255 if x > thresh else 0
try:
print('checking if the first output path exists...')
os.makedirs(output_path_1)
except OSError as e:
print('Oh, the first output path exists already. Assuming you know what you are doing.')
print('Will attempt to overwrite all .bmp files')
if e.errno != errno.EEXIST:
raise
try:
print('checking if the second output path exists...')
os.makedirs(output_path_2)
except OSError as e:
print('Oh, the second output path exists already. Assuming you know what you are doing.')
print('Will attempt to overwrite all .bmp files')
if e.errno != errno.EEXIST:
raise
print('attempting to convert images...')
for files in imagenames_1:
((Image.open(input_path_1+files)).convert('L').point(fn, mode='1').save(output_path_1+files))
for files in imagenames_2:
((Image.open(input_path_2+files)).convert('L').point(fn, mode='1').save(output_path_2+files))
print('All done!')
print('The bmp have been converted. Good luck!')

Binary file not shown.

Binary file not shown.

View file

@ -1,31 +0,0 @@
"""
Calibration module for the 2-Colour E-Paper Calendar display. Running this script
helps to 'flush' all the pixels and retain the colour on the display.
"""
import epd7in5
from PIL import Image, ImageDraw, ImageFont
EPD_WIDTH = 640
EPD_HEIGHT = 384
epd = epd7in5.EPD()
def calibration():
for i in range(2):
epd.init()
black = Image.new('1', (EPD_WIDTH, EPD_HEIGHT), 0)
print('calibrating black...')
ImageDraw.Draw(black)
epd.display_frame(epd.get_frame_buffer(black))
white = Image.new('1', (EPD_WIDTH, EPD_HEIGHT), 255)
ImageDraw.Draw(white)
print('calibrating white...')
epd.display_frame(epd.get_frame_buffer(white))
epd.sleep()
print('Cycle complete!')
def main():
for i in range(1):
calibration()
if __name__ == '__main__':
main()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

View file

@ -1,181 +0,0 @@
import epdif
from PIL import Image
import RPi.GPIO as GPIO
# Display resolution
EPD_WIDTH = 640
EPD_HEIGHT = 384
# EPD7IN5 commands
PANEL_SETTING = 0x00
POWER_SETTING = 0x01
POWER_OFF = 0x02
POWER_OFF_SEQUENCE_SETTING = 0x03
POWER_ON = 0x04
POWER_ON_MEASURE = 0x05
BOOSTER_SOFT_START = 0x06
DEEP_SLEEP = 0x07
DATA_START_TRANSMISSION_1 = 0x10
DATA_STOP = 0x11
DISPLAY_REFRESH = 0x12
IMAGE_PROCESS = 0x13
LUT_FOR_VCOM = 0x20
LUT_BLUE = 0x21
LUT_WHITE = 0x22
LUT_GRAY_1 = 0x23
LUT_GRAY_2 = 0x24
LUT_RED_0 = 0x25
LUT_RED_1 = 0x26
LUT_RED_2 = 0x27
LUT_RED_3 = 0x28
LUT_XON = 0x29
PLL_CONTROL = 0x30
TEMPERATURE_SENSOR_COMMAND = 0x40
TEMPERATURE_CALIBRATION = 0x41
TEMPERATURE_SENSOR_WRITE = 0x42
TEMPERATURE_SENSOR_READ = 0x43
VCOM_AND_DATA_INTERVAL_SETTING = 0x50
LOW_POWER_DETECTION = 0x51
TCON_SETTING = 0x60
TCON_RESOLUTION = 0x61
SPI_FLASH_CONTROL = 0x65
REVISION = 0x70
GET_STATUS = 0x71
AUTO_MEASUREMENT_VCOM = 0x80
READ_VCOM_VALUE = 0x81
VCM_DC_SETTING = 0x82
class EPD:
def __init__(self):
self.reset_pin = epdif.RST_PIN
self.dc_pin = epdif.DC_PIN
self.busy_pin = epdif.BUSY_PIN
self.width = EPD_WIDTH
self.height = EPD_HEIGHT
def digital_write(self, pin, value):
epdif.epd_digital_write(pin, value)
def digital_read(self, pin):
return epdif.epd_digital_read(pin)
def delay_ms(self, delaytime):
epdif.epd_delay_ms(delaytime)
def send_command(self, command):
self.digital_write(self.dc_pin, GPIO.LOW)
# the parameter type is list but not int
# so use [command] instead of command
epdif.spi_transfer([command])
def send_data(self, data):
self.digital_write(self.dc_pin, GPIO.HIGH)
# the parameter type is list but not int
# so use [data] instead of data
epdif.spi_transfer([data])
def init(self):
if (epdif.epd_init() != 0):
return -1
self.reset()
self.send_command(POWER_SETTING)
self.send_data(0x37)
self.send_data(0x00)
self.send_command(PANEL_SETTING)
self.send_data(0xCF)
self.send_data(0x08)
self.send_command(BOOSTER_SOFT_START)
self.send_data(0xc7)
self.send_data(0xcc)
self.send_data(0x28)
self.send_command(POWER_ON)
self.wait_until_idle()
self.send_command(PLL_CONTROL)
self.send_data(0x3c)
self.send_command(TEMPERATURE_CALIBRATION)
self.send_data(0x00)
self.send_command(VCOM_AND_DATA_INTERVAL_SETTING)
self.send_data(0x77)
self.send_command(TCON_SETTING)
self.send_data(0x22)
self.send_command(TCON_RESOLUTION)
self.send_data(0x02) #source 640
self.send_data(0x80)
self.send_data(0x01) #gate 384
self.send_data(0x80)
self.send_command(VCM_DC_SETTING)
self.send_data(0x1E) #decide by LUT file
self.send_command(0xe5) #FLASH MODE
self.send_data(0x03)
def wait_until_idle(self):
while(self.digital_read(self.busy_pin) == 0): # 0: busy, 1: idle
self.delay_ms(100)
def reset(self):
self.digital_write(self.reset_pin, GPIO.LOW) # module reset
self.delay_ms(200)
self.digital_write(self.reset_pin, GPIO.HIGH)
self.delay_ms(200)
def get_frame_buffer(self, image):
buf = [0x00] * int(self.width * self.height / 8)
# Set buffer to value of Python Imaging Library image.
# Image must be in mode 1.
image_monocolor = image.convert('1')
imwidth, imheight = image_monocolor.size
if imwidth != self.width or imheight != self.height:
raise ValueError('Image must be same dimensions as display \
({0}x{1}).' .format(self.width, self.height))
pixels = image_monocolor.load()
for y in range(self.height):
for x in range(self.width):
# Set the bits for the column of pixels at the current position.
if pixels[x, y] != 0:
buf[int((x + y * self.width) / 8)] |= 0x80 >> (x % 8)
return buf
def display_frame(self, frame_buffer):
self.send_command(DATA_START_TRANSMISSION_1)
for i in range(0, 30720):
temp1 = frame_buffer[i]
j = 0
while (j < 8):
if(temp1 & 0x80):
temp2 = 0x03
else:
temp2 = 0x00
temp2 = (temp2 << 4) & 0xFF
temp1 = (temp1 << 1) & 0xFF
j += 1
if(temp1 & 0x80):
temp2 |= 0x03
else:
temp2 |= 0x00
temp1 = (temp1 << 1) & 0xFF
self.send_data(temp2)
j += 1
self.send_command(DISPLAY_REFRESH)
self.delay_ms(100)
self.wait_until_idle()
def sleep(self):
self.send_command(POWER_OFF)
self.wait_until_idle()
self.send_command(DEEP_SLEEP)
self.send_data(0xa5)
### END OF FILE ###

View file

@ -1,37 +0,0 @@
import spidev
import RPi.GPIO as GPIO
import time
# Pin definition
RST_PIN = 17
DC_PIN = 25
CS_PIN = 8
BUSY_PIN = 24
# SPI device, bus = 0, device = 0
SPI = spidev.SpiDev(0, 0)
def epd_digital_write(pin, value):
GPIO.output(pin, value)
def epd_digital_read(pin):
return GPIO.input(BUSY_PIN)
def epd_delay_ms(delaytime):
time.sleep(delaytime / 1000.0)
def spi_transfer(data):
SPI.writebytes(data)
def epd_init():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(RST_PIN, GPIO.OUT)
GPIO.setup(DC_PIN, GPIO.OUT)
GPIO.setup(CS_PIN, GPIO.OUT)
GPIO.setup(BUSY_PIN, GPIO.IN)
SPI.max_speed_hz = 2000000
SPI.mode = 0b00
return 0;
### END OF FILE ###

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 710 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 710 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 B

View file

@ -1,248 +0,0 @@
"""
E-Paper Software (main script) adapted for the 2-colour E-Paper display
A full and detailed breakdown for this code can be found in the wiki.
If you have any questions, feel free to open an issue at Github.
Copyright by Ace-Laboratory
"""
# url refers to the iCal url. It's the link you can copy when you click on
# 'export' Calendar in Google or Yahoo (and many more online) Calendars
# api-key refers to your openweathermap api key. It can be generated for free
# when you sign up for an account and consists of a bunch of numbers and letters
# location refers to the city you live in. You api key will be used to grab live
# weather data for this city. Use the format below (city-name, country code)
# week_starts_on refers to the day on which the week starts on in your country.
# Choose between Monday and Sunday.
""" To quickly get started, fill in the following details:"""
url = "https://calendar.google.com/calendar/ical/en.usa%23holiday%40group.v.calendar.google.com/public/basic.ics"
api_key = ""
location = "California, US"
week_starts_on = "Monday"
"""That's all. The software will do the rest. You don't need to modify anything below this."""
import epd7in5
from PIL import Image, ImageDraw, ImageFont, ImageOps #image operations
import calendar, pyowm #calendar and openweathermap wrapper
from ics import Calendar, Event #icalendar parser
from datetime import datetime #time operations
from time import sleep #more time operations
from urllib.request import urlopen #allows url to be 'read'
import arrow #icalendar parser compatible dates
from calibration import calibration
epd = epd7in5.EPD() #required
if (week_starts_on == "Monday"):
calendar.setfirstweekday(calendar.MONDAY)
if (week_starts_on == "Sunday"):
calendar.setfirstweekday(calendar.Sunday)
c = Calendar(urlopen(url).read().decode('UTF-8'))
e = Event()
open = Image.open
EPD_WIDTH = 640
EPD_HEIGHT = 384
path = '/home/pi/E-Paper-Master/Calendar/'
wpath = path+'weather-icons/'
mpath = path+'months/'
dpath = path+'days/'
font = ImageFont.truetype(path+'Assistant-Bold.ttf', 18)
weekday = open(path+'other/weekday.bmp')
eventicon = open(path+'other/event.bmp')
dateicon = open(path+'other/today.bmp')
tempicon = open(path+'other/temp-icon.bmp')
humicon = open(path+'other/hum-icon.bmp')
weekmon = open(path+'other/week-mon.bmp')
weeksun = open(path+'other/week-sun.bmp')
bar = open(path+'other/bar.bmp')
wiconplace = (570, 219)
tempplace = (605, 310)
humplace = (572, 308)
monthplace = (443, 0)
weekplace = (415,0)
barplace = (555, 0)
weekdaysmon = {'Mon': (416,3), 'Tue': (416,57), 'Wed': (416,111), 'Thu': (416,165), 'Fri': (416,219), 'Sat': (416,273), 'Sun':(416,327)}
weekdayssun = {'Sun': (416,3), 'Mon': (416,57), 'Tue': (416,111), 'Wed': (416,165), 'Thu': (416,219), 'Fri': (416,273), 'Sat':(416,327)}
positions = {'a1': (351, 3), 'a2': (351, 57), 'a3': (351, 111), 'a4': (351, 165), 'a5': (351, 219), 'a6': (351, 273), 'a7': (351, 327),
'b1': (284, 3), 'b2': (284, 57), 'b3': (284, 111), 'b4': (284, 165), 'b5': (284, 219), 'b6': (284, 273), 'b7': (284, 327),
'c1': (217, 3), 'c2': (217, 57), 'c3': (217, 111), 'c4': (217, 165), 'c5': (217, 219), 'c6': (217, 273), 'c7': (217, 327),
'd1': (150, 3), 'd2': (150, 57), 'd3': (150, 111), 'd4': (150, 165), 'd5': (150, 219), 'd6': (150, 273), 'd7': (150, 327),
'e1': (83, 3), 'e2': (83, 57), 'e3': (83, 111), 'e4': (83, 165), 'e5': (83, 219), 'e6': (83, 273), 'e7': (83, 327),
'f1': (16, 3), 'f2': (16, 57), 'f3': (16, 111), 'f4': (16, 165), 'f5': (16, 219), 'f6': (16, 273), 'f7': (16, 327)}
weathericons = {'01d': 'wi-day-sunny', '02d':'wi-day-cloudy', '03d': 'wi-cloudy',
'04d': 'wi-cloudy-windy', '09d': 'wi-showers', '10d':'wi-rain',
'11d':'wi-thunderstorm', '13d':'wi-snow', '50d': 'wi-fog',
'01n': 'wi-night-clear', '02n':'wi-night-cloudy',
'03n': 'wi-night-cloudy', '04n': 'wi-night-cloudy',
'09n': 'wi-night-showers', '10n':'wi-night-rain',
'11n':'wi-night-thunderstorm', '13n':'wi-night-snow',
'50n': 'wi-night-alt-cloudy-windy'}
def main():
while True:
time = datetime.now()
hour = int(time.strftime("%-H"))
for i in range(1):
if hour is 0:
calibration()
if hour is 12:
calibration()
if hour is 18:
calibration()
epd.init()
image = Image.new('1', (EPD_WIDTH, EPD_HEIGHT), 255)
draw = (ImageDraw.Draw(image)).bitmap
#background image
draw(monthplace, Image.open(mpath+str(time.strftime("%B"))+'.bmp'))
if calendar.firstweekday() == 0:
#print('Your week starts on Monday') #->debug
draw(weekplace, weekmon)
if calendar.firstweekday() == 6:
#print('Your week starts on Sunday') #->debug
draw(weekplace, weeksun)
draw(barplace, bar)
cal = calendar.monthcalendar(time.year, time.month)
for i in cal[0]:
draw(positions['a'+str(cal[0].index(i)+1)] ,open(dpath+str(i)+'.bmp'))
for i in cal[1]:
draw(positions['b'+str(cal[1].index(i)+1)] ,open(dpath+str(i)+'.bmp'))
for i in cal[2]:
draw(positions['c'+str(cal[2].index(i)+1)] ,open(dpath+str(i)+'.bmp'))
for i in cal[3]:
draw(positions['d'+str(cal[3].index(i)+1)] ,open(dpath+str(i)+'.bmp'))
for i in cal[4]:
draw(positions['e'+str(cal[4].index(i)+1)] ,open(dpath+str(i)+'.bmp'))
try:
for i in cal[5]:
draw(positions['f'+str(cal[5].index(i)+1)] ,Image.open(dpath+str(i)+'.bmp'))
except IndexError:
pass
# openweathermap api
owm = pyowm.OWM(api_key)
observation = owm.weather_at_place(location)
weather = observation.get_weather()
weathericon = weather.get_weather_icon_name()
Temperature = str(int(weather.get_temperature(unit='celsius')['temp']))
Humidity = str(weather.get_humidity())
#print('temp: '+Temperature +'°C') #->debug
#print('humidity: '+Humidity+'%') #->debug
#print(weathericon) #->debug
#weather icon handler
draw(wiconplace, open(wpath+weathericons[weathericon]+'.bmp'))
# date writing function
space1=Image.new('1', (115,25), color=255)
measure1= ImageDraw.Draw(space1)
date = ImageDraw.Draw(space1)
date.text((2, 3), (time.strftime('%a %-d %b %y')), font=font, fill=0)
rotate1 = space1.rotate(270, expand=1)
image.paste(rotate1, (595,20))
# temperature writing function
space2 = Image.new('1', (50,35), color=255)
measure2= ImageDraw.Draw(space2)
temperature = ImageDraw.Draw(space2)
temperature.text((2, 8), (Temperature + " °C"), fill=0 ,font=font)
rotate2 = space2.rotate(270, expand=1)
image.paste(rotate2, (605,334))
# humidity writing function
space3 = Image.new('1', (50,35), color=255)
measure3= ImageDraw.Draw(space3)
humidity = ImageDraw.Draw(space3)
humidity.text((4, 8), (Humidity +'%'), fill=0 ,font=font)
rotate3 = space3.rotate(270, expand=1)
image.paste(rotate3, (570,334))
# weekday handler
if calendar.firstweekday() == 0:
draw(weekdaysmon[(time.strftime("%a"))], weekday)
if calendar.firstweekday() == 6:
draw(weekdayssun[(time.strftime("%a"))], weekday)
print('It is currently:',time.strftime('%a %-d %b %y')) #--debug
print('The current time is:', time.strftime('%H:%M')) #--debug
elist = []
for events in c.events:
if str(time.year) in str((events.begin).format('YYYY')):
if str(time.month) in str((events.begin).format('M')):
elist.append(int((events.begin).format('D')))
print('In this month, you have',len(elist),'Events')
for x in elist:
if x in cal[0]:
draw(positions['a'+str(cal[0].index(x)+1)] ,eventicon)
if x in cal[1]:
draw(positions['b'+str(cal[1].index(x)+1)] ,eventicon)
if x in cal[2]:
draw(positions['c'+str(cal[2].index(x)+1)] ,eventicon)
if x in cal[3]:
draw(positions['d'+str(cal[3].index(x)+1)] ,eventicon)
if x in cal[4]:
draw(positions['e'+str(cal[4].index(x)+1)] ,eventicon)
try:
if x in cal[5]:
draw(positions['f'+str(cal[5].index(x)+1)] ,eventicon)
except IndexError:
pass
today = time.day
if today in cal[0]:
draw(positions['a'+str(cal[0].index(today)+1)] ,dateicon)
if today in cal[1]:
draw(positions['b'+str(cal[1].index(today)+1)] ,dateicon)
if today in cal[2]:
draw(positions['c'+str(cal[2].index(today)+1)] ,dateicon)
if today in cal[3]:
draw(positions['d'+str(cal[3].index(today)+1)] ,dateicon)
if today in cal[4]:
draw(positions['e'+str(cal[4].index(today)+1)] ,dateicon)
try:
if today in cal[5]:
draw(positions['f'+str(cal[5].index(today)+1)] ,dateicon)
except IndexError:
pass
draw(tempplace, tempicon)
draw(humplace, humicon)
epd.display_frame(epd.get_frame_buffer(image))
# delete the list so deleted events can be removed from the list
del elist[:]
epd.sleep()
for i in range(1):
nexthour = ((60 - int(time.strftime("%-M")))*60) - (int(time.strftime("%-S")))
sleep(nexthour)
if __name__ == '__main__':
main()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

View file

@ -0,0 +1,101 @@
from DesignEntity import DesignEntity
from Assets import defaultfontsize, colors, defaultfont, path
from datetime import datetime, date, timedelta
from TableDesign import TableDesign
from PIL import ImageDraw, ImageFont
from TextFormatter import date_summary_str, event_prefix_str
from settings import line_thickness
separator_width = line_thickness
class AgendaListDesign (DesignEntity):
'''Lists upcoming events in chronological order and groups them by days'''
def __init__(self, size, calendar, line_spacing=0, col_spacing=8, text_size=defaultfontsize, start_date=date.today(), always_add_start_row=True, day_limit_foresight=91):
super(AgendaListDesign, self).__init__(size)
self.calendar = calendar
self.line_spacing = line_spacing
self.col_spacing = col_spacing
self.text_size = text_size
self.day_limit_foresight = day_limit_foresight
self.start_dt = date(start_date.year, start_date.month, start_date.day)
self.always_add_start_row = always_add_start_row
def __finish_image__(self):
self.__calculate_parameter__()
self.__create_infos_events__()
self.__draw_infos__()
self.__draw_lines__()
def __calculate_parameter__(self):
self.__line_height__ = self.line_spacing + self.__get_text_height__()
self.__event_number__ = int(int(self.size[1]) // self.__line_height__)
self.__date_fontsize__ = self.text_size
self.__date_linespace__ = self.line_spacing
def __create_infos_events__(self):
self.infos = []
self.cell_props = []
fetch_day = self.start_dt
days_foresight = 0
while len(self.infos) < self.__event_number__ and days_foresight < self.day_limit_foresight:
day_events = self.calendar.get_day_events(fetch_day)
fetch_day_added_once = False
for event in day_events:
row = [""]
if fetch_day_added_once is False:
row.append(date_summary_str(fetch_day))
fetch_day_added_once = True
else:
row.append("")
row.append(event_prefix_str(event, fetch_day))
row.append(event.title)
self.cell_props.append(self.__get_row_props__(event))
self.infos.append(row)
fetch_day = fetch_day + timedelta(1)
days_foresight = days_foresight + 1
if self.infos[0][1] != date_summary_str(self.start_dt) and self.always_add_start_row:
row = ["", date_summary_str(self.start_dt), "", ""]
props = self.__get_row_props__()
self.infos.insert(0, row)
self.cell_props.insert(0, props)
def __draw_infos__(self):
table = TableDesign(self.size, self.infos, fontsize=self.__date_fontsize__,
line_spacing=self.__date_linespace__, col_spacing=self.col_spacing, cell_properties=self.cell_props)
self.draw_design(table)
def __draw_lines__(self):
for i, (_, date, _, _) in enumerate(self.infos[1:]):
if date is not "":
self.__draw_line__(i + 1)
def __draw_line__(self, index):
ypos = index * self.__line_height__ - self.line_spacing / 2
pos = (0, ypos)
positions = [pos, (self.size[0], ypos)]
ImageDraw.Draw(self.__image__).line(
positions, fill=colors["fg"], width=separator_width)
def __get_row_props__(self, event=None):
color = colors["fg"]
bg_color = colors["bg"]
default_cell = {
"color": color,
"background_color": bg_color
}
if event is not None and event.highlight:
color = colors["hl"]
cell = {
"color": color,
"background_color": bg_color
}
return [default_cell, default_cell, cell, cell]
def __get_text_height__(self):
return ImageFont.truetype(path + defaultfont, self.text_size).font.height

View file

@ -0,0 +1,90 @@
from PanelDesign import PanelDesign
from AgendaListDesign import AgendaListDesign
from WeatherHeaderDesign import WeatherHeaderDesign
from settings import general_settings, line_thickness
from PIL import ImageDraw
from Assets import colors
from RssPostListDesign import RssPostListDesign
from CryptoListDesign import CryptoListDesign
agenda_ypadding = 5
weatherheader_height = 0.113
seperator_width = line_thickness
infolist_size = (1, 0.24)
infolist_padding = 0
class AgendaListPanel (PanelDesign):
'''Lists upcoming events in chronological order and groups them by days'''
def __init__(self, size):
super(AgendaListPanel, self).__init__(size)
self.weather_size = (0, 0)
self.info_size = (0, 0)
if general_settings["weather-info"]:
self.weather_size = (
self.size[0], self.size[1] * weatherheader_height)
def add_weather(self, weather):
self.weather = weather
def add_calendar(self, calendar):
self.calendar = calendar
def add_rssfeed(self, rss):
if general_settings["info-area"] != "rss":
return
self.info_size = self.__abs_pos__(infolist_size)
pos = (0, self.size[1] - self.info_size[1] + infolist_padding)
list = RssPostListDesign(self.info_size, rss)
list.pos = pos
self.draw_design(list)
self.__draw_seperator__(1-infolist_size[1], colors["fg"])
def add_tasks(self, tasks):
pass
def add_crypto(self, crypto):
if general_settings["info-area"] != "crypto":
return
self.info_size = self.__abs_pos__(infolist_size)
pos = (0, self.size[1] - self.info_size[1] + infolist_padding)
list = CryptoListDesign(self.info_size, crypto)
height = list.get_estimated_height()
list.pos = (pos[0], pos[1] + (self.info_size[1] - height))
self.draw_design(list)
self.info_size = (self.size[0], height)
self.__draw_seperator__(list.pos[1] / self.size[1], colors["fg"])
def __finish_panel__(self):
self.__draw_calendar__()
if general_settings["weather-info"]:
self.__draw_weather__()
def __draw_seperator__(self, height, color):
ImageDraw.Draw(self.__image__).line([self.__abs_pos__(
(0, height)), self.__abs_pos__((1, height))], fill=color, width=seperator_width)
def __abs_pos__(self, pos, size=None):
if size is None:
size = self.size
return (int(pos[0] * size[0]), int(pos[1] * size[1]))
def __draw_calendar__(self):
size = (self.size[0], self.size[1] - self.weather_size[1] -
self.info_size[1] - agenda_ypadding)
agenda = AgendaListDesign(size, self.calendar)
agenda.pos = (0, agenda_ypadding + self.weather_size[1])
self.draw_design(agenda)
def __draw_weather__(self):
header = WeatherHeaderDesign(self.weather_size, self.weather)
self.draw_design(header)
self.__draw_seperator__(weatherheader_height, colors["hl"])

95
Calendar/Assets.py Normal file
View file

@ -0,0 +1,95 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from PIL import Image, ImageFont
from settings import font_boldness, font_size
import os
im_open = Image.open
path = os.path.dirname(os.path.abspath(__file__)).replace("\\", "/")
if path != "" and path[-1] != "/":
path += "/"
wpath = path+'weather-icons/'
opath = path+'other/'
fpath = 'fonts/'
tempicon = im_open(opath+'temperature.jpeg')
humicon = im_open(opath+'humidity.jpeg')
no_response = im_open(opath+'cloud-no-response.jpeg')
sunriseicon = im_open(opath+'wi-sunrise.jpeg')
sunseticon = im_open(opath+'wi-sunset.jpeg')
windicon = im_open(opath+'wi-strong-wind.jpeg')
fonts = {
"extralight": fpath + "Assistant-ExtraLight.otf",
"light": fpath + "Assistant-Light.otf",
"regular": fpath + "Assistant-Regular.otf",
"semibold": fpath + "Assistant-SemiBold.otf",
"bold": fpath + "Assistant-Bold.otf",
"extrabold": fpath + "Assistant-ExtraBold.otf"
}
defaultfont = fonts[font_boldness]
defaultfontsize = int(font_size)
weathericons = {
'01d': 'wi-day-sunny', '02d': 'wi-day-cloudy', '03d': 'wi-cloudy',
'04d': 'wi-cloudy-windy', '09d': 'wi-showers', '10d': 'wi-rain',
'11d': 'wi-thunderstorm', '13d': 'wi-snow', '50d': 'wi-fog',
'01n': 'wi-night-clear', '02n': 'wi-night-cloudy',
'03n': 'wi-night-cloudy', '04n': 'wi-night-cloudy',
'09n': 'wi-night-showers', '10n': 'wi-night-rain',
'11n': 'wi-night-thunderstorm', '13n': 'wi-night-snow',
'50n': 'wi-night-alt-cloudy-windy'}
colors = {
"hl": "red",
"fg": "black",
"bg": "white"
}
supported_img_formats = [
"BMP",
"DIB",
"EPS",
"GIF",
"ICNS",
"ICO",
"IM",
"JPG",
"JPEG",
"J2K",
"J2P",
"JPX",
"MSP",
"PCX",
"PNG",
"PPM",
"SGI",
"SPI",
"TGA",
"TIFF",
"WEBP",
"XBM",
"BLP",
"CUR",
"DCX",
"DDS",
"FLI",
"FLC",
"FPX",
"FTEX",
"GBR",
"GD",
"IMT",
"IPTC",
"NAA",
"MCIDAS",
"MIC",
"MPO",
"PCD",
"PIXAR",
"PSD",
"WAL",
"XPM",
]

Binary file not shown.

23
Calendar/BoxDesign.py Normal file
View file

@ -0,0 +1,23 @@
from DesignEntity import DesignEntity
from PIL import ImageDraw, ImageOps
class BoxDesign (DesignEntity):
"""Redefinition of ImageDraw.Draw.Rectangle"""
def __init__(self, size, fill=None, outline=None, width=0):
super(BoxDesign, self).__init__((size[0]+1, size[1]+1), mask=True)
self.size = size
self.__define_corners__()
self.fill = fill
self.outline = outline
self.width = width
def __define_corners__(self):
topleft = (0, 0)
bottomright = self.size
self.corners = [topleft, bottomright]
def __finish_image__(self):
ImageDraw.Draw(self.__image__).rectangle(
self.corners, fill=self.fill, outline=self.outline, width=self.width)

24
Calendar/CalendarEvent.py Normal file
View file

@ -0,0 +1,24 @@
class CalendarEvent (object):
"""Defines a calendar event, independent of any implementation"""
def __init__(self):
self.begin_datetime = None
self.end_datetime = None
self.duration = None
self.allday = None
self.multiday = None
self.rrule = None
self.title = None
self.description = None
self.attendees = []
self.highlight = None
self.calendar_name = None
self.calendar_url = None
self.location = None
self.fetch_datetime = None
def __repr__(self):
return self.title

View file

@ -0,0 +1,182 @@
from DataSourceInterface import DataSourceInterface
from datetime import datetime, timezone, timedelta, date
from dateutil.rrule import rrulestr
from dateutil.parser import parse
import calendar
from CalendarEvent import CalendarEvent
class CalendarInterface (DataSourceInterface):
"""Interface for fetching and processing calendar event information."""
def __init__(self):
self.events = []
self.excluded_urls = []
def reload(self):
if self.is_available() == False:
return
self.events = self.__get_events__()
self.events = self.__sort_events__(self.events)
def exclude_calendars(self, urls=[]):
self.excluded_urls = urls
def __sort_events__(self, events):
events.sort(key=lambda x: x.begin_datetime)
return events
def __sort_event_types__(self, events):
multiday = [ev for ev in events if ev.multiday]
allday = [ev for ev in events if ev.allday and ev.multiday == False]
timed = [ev for ev in events if ev.allday ==
False and ev.multiday == False]
return multiday + allday + timed
def __get_events__(self):
raise NotImplementedError("Functions needs to be implemented")
def get_upcoming_events(self, timespan=None, start_time=None):
if timespan is None:
timespan = timedelta(31)
if start_time == None:
local_tzinfo = datetime.now(timezone.utc).astimezone().tzinfo
start_time = datetime.now(local_tzinfo)
return self.__get_events_in_range__(start_time, timespan)
def get_today_events(self):
return self.get_day_events(date.today())
def get_day_events(self, day):
if type(day) is not type(date.today()):
raise TypeError(
"get_day_events only takes date-objects as parameters, not \"%s\"" % str(type(day)))
local_tzinfo = datetime.now(timezone.utc).astimezone().tzinfo
day_start = datetime(day.year, day.month, day.day,
0, 0, 0, 0, local_tzinfo)
return self.__get_events_in_range__(day_start, timedelta(1))
def get_month_events(self, month=-1, year=-1):
if month < 0:
month = datetime.now().month
if year < 0:
year = datetime.now().year
local_tzinfo = datetime.now(timezone.utc).astimezone().tzinfo
month_start = datetime(year, month, 1, 0, 0, 0, 0, local_tzinfo)
month_days = calendar.monthrange(
month_start.year, month_start.month)[1]
return self.__get_events_in_range__(month_start, timedelta(month_days))
def __get_events_in_range__(self, start, duration):
if self.events is None:
return []
if start.tzinfo is None:
raise TypeError("start datetime needs to be timezone-aware")
events_in_range = []
for event in self.events:
# Is excluded?
if event.calendar_url in self.excluded_urls:
continue
event_occurrence = self.__get_if_event_in_range__(
event, start, duration)
if event_occurrence:
events_in_range.extend(event_occurrence)
events_in_range = self.__sort_events__(events_in_range)
return self.__sort_event_types__(events_in_range)
def __get_if_event_in_range__(self, event, start, duration):
'''Returns list or None'''
if event is None:
return None
if event.rrule is None:
return self.__is_onetime_in_range__(event, start, duration)
else:
return self.__is_repeating_in_range__(event, start, duration)
def __is_onetime_in_range__(self, event, start, duration):
if event.begin_datetime > start:
first_start = start
first_duration = duration
second_start = event.begin_datetime
else:
first_start = event.begin_datetime
first_duration = event.duration
second_start = start
if (second_start - first_start) < first_duration:
return [event]
else:
return None
def __is_repeating_in_range__(self, event, start, duration):
end = start + duration
occurrences = []
try:
r_string = ""
r_string = self.__add_timezoneawarness__(event.rrule)
rule = rrulestr(r_string, dtstart=event.begin_datetime)
for occurrence in rule:
if occurrence - end > timedelta(0):
return occurrences
merged_event = self.__merge_event_data__(
event, start=occurrence)
if self.__is_onetime_in_range__(merged_event, start, duration):
occurrences.append(merged_event)
return occurrences
except Exception as ex:
print("\"is_repeating_in_range\" failed while processing: dtstart="+str(event.begin_datetime) +
" dtstart.tzinfo="+str(event.begin_datetime.tzinfo)+" rrule="+r_string)
raise ex
def __merge_event_data__(self, event, start=None):
merged_event = CalendarEvent()
merged_event.begin_datetime = event.begin_datetime
merged_event.end_datetime = event.end_datetime
merged_event.duration = event.duration
merged_event.allday = event.allday
merged_event.multiday = event.multiday
merged_event.rrule = event.rrule
merged_event.title = event.title
merged_event.description = event.description
merged_event.attendees = event.attendees
merged_event.highlight = event.highlight
merged_event.calendar_name = event.calendar_name
merged_event.calendar_url = event.calendar_url
merged_event.location = event.location
merged_event.fetch_datetime = event.fetch_datetime
if start is not None:
merged_event.begin_datetime = start
merged_event.end_datetime = start + event.duration
return merged_event
def __add_timezoneawarness__(self, rrule):
"""UNTIL must be specified in UTC when DTSTART is timezone-aware (which it is)"""
if "UNTIL" not in rrule:
return rrule
timezone_str = "T000000Z"
until_template = "UNTIL=YYYYMMDD"
until_index = rrule.index("UNTIL")
tz_index = until_index + len(until_template)
if until_index < 0 or (tz_index < len(rrule) and rrule[tz_index] is "T"):
return rrule
if tz_index == len(rrule):
return rrule + timezone_str
else:
return rrule[:tz_index] + timezone_str + rrule[tz_index:]

10
Calendar/CryptoCoin.py Normal file
View file

@ -0,0 +1,10 @@
class CryptoCoin(object):
def __init__(self):
self.name = None
self.symbol = None
self.price = None
self.day_change = None
self.currency = None
self.datetime = None
self.fetch_datetime = None

View file

@ -0,0 +1,17 @@
from DataSourceInterface import DataSourceInterface
class CryptoInterface(DataSourceInterface):
def __init__(self):
self.crypto_coins = []
def reload(self):
if self.is_available() == False:
return
self.crypto_coins = self.__get_coins__()
def __get_coins__(self):
raise NotImplementedError("Function needs to be implemented")
def get_coins(self):
return self.crypto_coins

View file

@ -0,0 +1,39 @@
from DesignEntity import DesignEntity
from TableDesign import TableDesign
from Assets import defaultfontsize
from GeckoCrypto import GeckoCrypto
from settings import crypto_coins
xpadding = 5
class CryptoListDesign (DesignEntity):
def __init__(self, size, crypto, text_size=defaultfontsize):
super(CryptoListDesign, self).__init__(size)
self.crypto = crypto
self.text_size = text_size
self.matrix = self.__get_matrix__()
def __finish_image__(self):
col_spacing = 10
if len(self.matrix) > 0:
col_spacing = (self.size[0] / len(self.matrix[0])) * 0.5
table_design = TableDesign(self.size, matrix=self.matrix, col_spacing=col_spacing,
fontsize=self.text_size, mask=False, truncate_rows=True)
table_design.pos = (xpadding, 0)
self.draw_design(table_design)
def __get_matrix__(self):
matrix = []
coins = self.crypto.get_coins()
for coin in coins:
row = [coin.symbol.upper(), coin.name, coin.currency + " " +
str(coin.price), "% " + str(coin.day_change)]
matrix.append(row)
return matrix
def get_estimated_height(self):
line_height = self.text_size * 1.25
height = line_height * len(self.matrix)
return height

View file

@ -0,0 +1,8 @@
class DataSourceInterface (object):
"""Interface for child interfaces that fetch data."""
def is_available(self):
raise NotImplementedError("Functions needs to be implemented")
def reload(self):
raise NotImplementedError("Functions needs to be implemented")

33
Calendar/DayBoxDesign.py Normal file
View file

@ -0,0 +1,33 @@
from DesignEntity import DesignEntity
from SingelDayEventListDesign import SingelDayEventListDesign
from TextDesign import TextDesign
header_height = 0.2
class DayBoxDesign (DesignEntity):
"""Represents a day with its events in a box."""
def __init__(self, size, date):
super(DayBoxDesign, self).__init__(size)
self.date = date
def add_calendar(self, calendar):
self.calendar = calendar
def __finish_image__(self):
self.__draw_header__()
self.__draw_events__()
def __draw_header__(self):
pass
def __draw_events__(self):
events = self.calendar.get_day_events(self.date)
pos = (0, self.size[1] * header_height)
size = (self.size[0], self.size[1] - pos[1])
event_list = SingelDayEventListDesign(size, events)
event_list.pos = pos
self.draw_design(event_list)

View file

@ -0,0 +1,151 @@
from datetime import date, datetime, timedelta, timezone
from settings import line_thickness, general_settings
from DayHeaderDesign import DayHeaderDesign
from HourListDesign import HourListDesign
from DayRowDesign import DayRowDesign
from PanelDesign import PanelDesign
from Assets import colors
from PIL import ImageDraw
HEADER_SIZE = (1, 0.2)
HOURLIST_HEIGHT = 0.3
HOURLIST_SIZE = (1, HOURLIST_HEIGHT)
DAYLIST_YPOS = HEADER_SIZE[1] + HOURLIST_SIZE[1]
DAYLIST_HEIGHT = 1 - HEADER_SIZE[1] - HOURLIST_SIZE[1]
DAYLIST_SIZE = (1, DAYLIST_HEIGHT)
HOURS_COUNT = 6
DAYROW_MIN_FORMAT = 40 / 384
DAYROW_MAX_FORMAT = 60 / 384
PANEL_LINE_THICKNESS = line_thickness
class DayFocusListPanel (PanelDesign):
"""Shows Day-View for today and a short Day-List for
the upcoming days."""
def __init__(self, size):
super(DayFocusListPanel, self).__init__(size)
self.hours_count = HOURS_COUNT
self.__init_modules__()
def __abs_co__(self, coordinates):
return (int(coordinates[0] * self.size[0]), int(coordinates[1] * self.size[1]))
def __init_modules__(self):
self.__init_header__()
self.__init_hourlist__()
self.__init_daylist__()
def __init_header__(self):
self.__header__ = DayHeaderDesign(
self.__abs_co__(HEADER_SIZE), date.today())
self.__header__.pos = (0, 0)
def __init_hourlist__(self):
start, end = self.__get_current_hour_range__()
size = self.__abs_co__(HOURLIST_SIZE)
self.__hourlist__ = HourListDesign(size, start, end)
self.__hourlist__.pos = (0, self.__header__.size[1])
def __init_daylist__(self):
self.__daylist_rows__ = []
self.__calc_dayrow_size__()
self.__create_day_rows__()
def __calc_dayrow_size__(self):
max_area_height = DAYLIST_HEIGHT * self.size[1]
max_row_number = max_area_height / (DAYROW_MIN_FORMAT * self.size[0])
min_row_number = max_area_height / (DAYROW_MAX_FORMAT * self.size[0])
average_row_number = (max_row_number + min_row_number) / 2
self.dayrow_count = round(average_row_number)
row_height = max_area_height / self.dayrow_count
self.dayrow_size = (1, row_height / self.size[1])
def __create_day_rows__(self):
following_days = self.__get_following_days__()
for i, date in enumerate(following_days):
row = DayRowDesign(self.__abs_co__(self.dayrow_size), date)
row.pos = self.__get_day_row_pos__(i)
self.__daylist_rows__.append(row)
def __get_following_days__(self):
following_days = []
for i in range(self.dayrow_count):
following_days.append(date.today() + timedelta(days=i + 1))
return following_days
def __get_day_row_pos__(self, i):
ypos = self.size[1] * DAYLIST_YPOS
down_shift = i * self.dayrow_size[1] * self.size[1]
return (0, int(ypos + down_shift))
def __finish_panel__(self):
self.draw_design(self.__header__)
self.draw_design(self.__hourlist__)
for row in self.__daylist_rows__:
self.draw_design(row)
self.__draw_daylist_lines__()
def __draw_daylist_lines__(self):
positions = []
for i in range(len(self.__daylist_rows__)):
positions.append(self.__get_day_row_pos__(i)[1])
for ypos in positions:
line_start = (0, ypos)
line_end = (self.size[0], ypos)
ImageDraw.Draw(self.__image__).line(
[line_start, line_end], fill=colors["fg"], width=PANEL_LINE_THICKNESS)
def __get_current_hour_range__(self):
start_hour = datetime.now().hour
additional_hours = self.hours_count - 1
if start_hour + additional_hours > 23:
start_hour = 23 - additional_hours
return start_hour, start_hour + additional_hours
def add_weather(self, weather):
self.__header__.add_weather(weather)
def add_calendar(self, calendar):
allday_ev, timed_ev = self.__split_events__(
calendar.get_today_events())
self.__header__.add_events(allday_ev)
self.__hourlist__.add_events(timed_ev)
self.__add_calendar_daylist__(calendar)
def __split_events__(self, events):
allday_ev = []
timed_ev = []
for event in events:
if event.allday:
allday_ev.append(event)
elif event.multiday:
if self.__is_today__(event.begin_datetime):
timed_ev.append(event)
elif self.__is_today__(event.end_datetime):
timed_ev.append(event)
else:
allday_ev.append(event)
else:
timed_ev.append(event)
return allday_ev, timed_ev
def __is_today__(self, dt):
today = date.today()
return dt.day == today.day and \
dt.month == today.month and \
dt.year == today.year
def __add_calendar_daylist__(self, calendar):
calendar.exclude_calendars(general_settings["extra-excluded-urls"])
for row in self.__daylist_rows__:
row.add_calendar(calendar)
calendar.exclude_calendars()

154
Calendar/DayHeaderDesign.py Normal file
View file

@ -0,0 +1,154 @@
from DesignEntity import DesignEntity
from PIL import ImageDraw
from TextDesign import TextDesign
from WeatherColumnDesign import WeatherColumnDesign
from datetime import date, timedelta, datetime, timezone
from SingelDayEventListDesign import SingelDayEventListDesign
from Assets import fonts, colors, defaultfontsize
from settings import general_settings
from BoxDesign import BoxDesign
numberbox_ypos = 0.15
numberbox_height = 1 - 2 * numberbox_ypos
number_height = numberbox_height * 0.83
number_boxypos = 0.17
month_height = numberbox_height / 4
monthbox_xpadding = 0.013
monthbox_ypadding = -0.05
monthbox_width = 1 - numberbox_ypos - monthbox_xpadding
weathercolumn_y_size = (0.4, 1)
weekday_height = numberbox_height * 0.19
weekdaybox_height = (weekday_height / numberbox_height) * 1.5
eventlist_static_fontsize = defaultfontsize
eventlist_xpadding = monthbox_xpadding
eventlist_ypadding = 0.01
numberbox_font_color = colors["bg"]
numberbox_background_color = colors["hl"]
weekday_font = fonts["bold"]
class DayHeaderDesign (DesignEntity):
"""Detailed and big view of a given date."""
def __init__(self, size, date):
super(DayHeaderDesign, self).__init__(size)
self.weather_column_width = 0
self.date = date
def add_weather(self, weather):
if general_settings["weather-info"] == False:
return
forecast = weather.get_forecast_in_days(
self.date.day - date.today().day)
self.weather_column_width = weathercolumn_y_size[0] * self.size[1]
size = (self.weather_column_width,
weathercolumn_y_size[1] * self.size[1])
pos = (self.size[0] - size[0], 0)
design = WeatherColumnDesign(size, forecast)
design.pos = pos
self.draw_design(design)
def add_calendar(self, calendar):
local_tzinfo = datetime.now(timezone.utc).astimezone().tzinfo
now = datetime.now(local_tzinfo)
time_until_tomorrow = (datetime(
now.year, now.month, now.day, 0, 0, 0, 0, local_tzinfo) + timedelta(1)) - now
self.__draw_event_list__(
calendar.get_upcoming_events(time_until_tomorrow, now))
def add_events(self, events):
self.__draw_event_list__(events)
def add_rssfeed(self, rss):
pass
def add_crypto(self, crypto):
pass
def __finish_image__(self):
self.__draw_number_square__()
self.__draw_month__()
def __draw_event_list__(self, events):
box_ypos = numberbox_ypos * self.size[1]
box_xpos = numberbox_ypos * self.size[1]
box_height = numberbox_height * self.size[1]
xpadding = eventlist_xpadding * self.size[0]
ypadding = eventlist_ypadding * self.size[1]
monthbox_height = (monthbox_ypadding + month_height) * self.size[1]
pos = (box_xpos + box_height + xpadding,
box_ypos + monthbox_height + ypadding)
size = (self.size[0] - pos[0] - self.weather_column_width,
self.size[1] - pos[1] - box_ypos)
fontsize = eventlist_static_fontsize
rel_dates = [self.date for _ in range(len(events))]
event_list = SingelDayEventListDesign(
size, events, fontsize, event_prefix_rel_dates=rel_dates)
event_list.pos = pos
self.draw_design(event_list)
def __draw_month__(self):
font_size = int(month_height * self.size[1])
xpadding = int(monthbox_xpadding * self.size[0])
ypadding = int(monthbox_ypadding * self.size[1])
box_ypos = int(numberbox_ypos * self.size[1])
box_height = int(numberbox_height * self.size[1])
box_pos = (box_ypos + box_height + xpadding, box_ypos + ypadding)
box_size = (int(monthbox_width * self.size[0]), box_height)
month_name = self.date.strftime("%B")
month = TextDesign(box_size, text=month_name, fontsize=font_size)
month.pos = box_pos
self.draw_design(month)
def __draw_number_square__(self):
box_height = numberbox_height * self.size[1]
box_ypos = numberbox_ypos * self.size[1]
box_pos = (box_ypos, box_ypos)
box_size = (box_height, box_height)
box = BoxDesign(box_size, fill=numberbox_background_color)
box.pos = box_pos
self.draw_design(box)
self.__draw_today_number__()
self.__draw_weekday__()
def __draw_today_number__(self):
font_size = number_height * self.size[1]
box_height = numberbox_height * self.size[1]
box_ypos = numberbox_ypos * self.size[1]
ypadding = number_boxypos * box_height
size = (box_height, box_height - ypadding)
pos = (box_ypos, box_ypos + ypadding)
day_text = self.__get_day_text__()
number = TextDesign(size, text=day_text, background_color=numberbox_background_color,
color=numberbox_font_color, fontsize=font_size, horizontalalignment="center", verticalalignment="center")
number.pos = pos
number.mask = False
self.draw_design(number)
def __draw_weekday__(self):
font_size = weekday_height * self.size[1]
box_height = numberbox_height * self.size[1]
size = (box_height, weekdaybox_height * box_height)
box_ypos = numberbox_ypos * self.size[1]
pos = (box_ypos, box_ypos)
week_day_name = self.date.strftime("%A")
week_day = TextDesign(size, text=week_day_name, background_color=numberbox_background_color, color=numberbox_font_color,
fontsize=font_size, horizontalalignment="center", verticalalignment="center", font=weekday_font)
week_day.pos = pos
week_day.mask = False
self.draw_design(week_day)
def __abs_co__(self, coordinates):
return (int(coordinates[0] * self.size[0]), int(coordinates[1] * self.size[1]))
def __get_day_text__(self):
return str(self.date.day)

140
Calendar/DayListPanel.py Normal file
View file

@ -0,0 +1,140 @@
from PanelDesign import PanelDesign
from Assets import colors
from settings import general_settings
import calendar as callib
from datetime import datetime, timedelta, date
from PIL import ImageDraw
from TextDesign import TextDesign
from DayHeaderDesign import DayHeaderDesign
from DayRowDesign import DayRowDesign
from RssPostListDesign import RssPostListDesign
from CryptoListDesign import CryptoListDesign
from settings import line_thickness
from math import ceil
todayheader_pos = (0, 0)
todayheader_size = (1, 0.25)
lines_thickness = line_thickness
infoarea_replacedrowscount = 3
dayrowsarea_ypos = todayheader_size[1]
dayrowsarea_height = 1 - todayheader_size[1]
dayrow_min_format = 50 / 384
dayrow_max_format = 70 / 384
rss_y_padding = 5
crypto_y_padding = 5
class DayListPanel (PanelDesign):
"""Overview that focuses on the current day and
lists following days in a list below."""
def __init__(self, size):
super(DayListPanel, self).__init__(size)
self.__day_rows__ = []
self.__calc_dayrow_size__()
self.__first_render__()
def __first_render__(self):
self.__draw_today_header__()
self.__draw_day_rows__()
def add_weather(self, weather):
for row in self.__day_rows__:
row.add_weather(weather)
def add_calendar(self, calendar):
for row in self.__day_rows__:
row.add_calendar(calendar)
def add_rssfeed(self, rss):
for row in self.__day_rows__:
row.add_rssfeed(rss)
if general_settings["info-area"] is "rss":
self.__day_rows__ = self.__day_rows__[:-infoarea_replacedrowscount]
self.__draw_rss_infoarea__(rss)
def add_crypto(self, crypto):
if general_settings["info-area"] is "crypto":
self.__draw_crypto_infoarea__(crypto)
def add_tasks(self, tasks):
pass
def __draw_rss_infoarea__(self, rss):
height = infoarea_replacedrowscount * \
self.dayrow_size[1] * self.size[1] - rss_y_padding
ypos = self.size[1] - height
size = (self.size[0], height)
pos = (0, ypos)
design = RssPostListDesign(size, rss)
design.pos = pos
self.draw_design(design)
def __draw_crypto_infoarea__(self, crypto):
height = infoarea_replacedrowscount * \
self.dayrow_size[1] * self.size[1] - crypto_y_padding
ypos = self.size[1] - height
size = (self.size[0], height)
pos = (0, ypos)
design = CryptoListDesign(size, crypto)
acutal_height = design.get_estimated_height()
design.pos = (pos[0], pos[1] + (height - acutal_height))
self.draw_design(design)
replaced_rows = ceil(
acutal_height / (self.dayrow_size[1] * self.size[1]))
self.__day_rows__ = self.__day_rows__[:-replaced_rows]
def __draw_day_rows__(self):
following_days = self.__get_following_days__()
for i, date in enumerate(following_days):
row = DayRowDesign(self.__abs_co__(self.dayrow_size), date)
row.pos = self.__get_day_row_pos__(i)
self.__day_rows__.append(row)
def __get_day_row_pos__(self, i):
ypos = self.size[1] * dayrowsarea_ypos
down_shift = i * self.dayrow_size[1] * self.size[1]
return (0, int(ypos + down_shift))
def __calc_dayrow_size__(self):
max_area_height = dayrowsarea_height * self.size[1]
max_row_number = max_area_height / (dayrow_min_format * self.size[0])
min_row_number = max_area_height / (dayrow_max_format * self.size[0])
average_row_number = (max_row_number + min_row_number) / 2
self.dayrow_count = round(average_row_number)
row_height = max_area_height / self.dayrow_count
self.dayrow_size = (1, row_height / self.size[1])
def __get_following_days__(self):
following_days = []
for i in range(self.dayrow_count):
following_days.append(date.today() + timedelta(days=i + 1))
return following_days
def __draw_today_header__(self):
header = DayHeaderDesign(self.__abs_co__(
todayheader_size), date.today())
header.pos = self.__abs_co__(todayheader_pos)
self.__day_rows__.append(header)
def __draw_lines__(self):
positions = []
for i in range(len(self.__day_rows__)):
positions.append(self.__get_day_row_pos__(i)[1])
for ypos in positions:
line_start = (0, ypos)
line_end = (self.size[0], ypos)
ImageDraw.Draw(self.__image__).line(
[line_start, line_end], fill=colors["fg"], width=lines_thickness)
def __finish_panel__(self):
for design in self.__day_rows__:
self.draw_design(design)
self.__draw_lines__()
def __abs_co__(self, coordinates):
return (int(coordinates[0] * self.size[0]), int(coordinates[1] * self.size[1]))

123
Calendar/DayRowDesign.py Normal file
View file

@ -0,0 +1,123 @@
from PIL import ImageDraw, Image
from TextDesign import TextDesign
from settings import week_starts_on, owm_paid_subscription, general_settings
from DesignEntity import DesignEntity
from datetime import datetime
from Assets import weathericons, wpath, fonts, colors, defaultfontsize
from SingelDayEventListDesign import SingelDayEventListDesign
daynumber_y_size = (1, 0.60)
weekday_y_size = (daynumber_y_size[0], 1 - daynumber_y_size[1])
weekday_ypos = daynumber_y_size[1]
daynumber_fontsize = daynumber_y_size[1] * 0.85
daynumber_ypadding = 0.1
weekday_fontsize = weekday_y_size[1] * 0.65
weathericon_ypos = 0.1
weathericon_height = 1 - 2 * weathericon_ypos
eventlist_xpadding = 5
eventlist_ypos = 0.02
eventlist_y_fontsize = 0.2
font = fonts["light"]
class DayRowDesign (DesignEntity):
"""Detailed view of a given date."""
def __init__(self, size, date):
super(DayRowDesign, self).__init__(size)
self.__init_image__()
self.date = date
def add_weather(self, weather):
if weather.is_available is False:
return
self.__draw_forecast__(weather)
def add_calendar(self, calendar):
self.__draw_event_list__(calendar)
def add_rssfeed(self, rss):
pass
def __draw_event_list__(self, calendar):
number_width = daynumber_y_size[0] * self.size[1]
ypos = eventlist_ypos * self.size[1]
weather_width = 0
if owm_paid_subscription and general_settings["weather-info"]:
weather_width = weathericon_height * self.size[1]
pos = (number_width + eventlist_xpadding, ypos)
size = (self.size[0] - pos[0] - weather_width, self.size[1] - pos[1])
fontsize = eventlist_y_fontsize * self.size[1]
events = calendar.get_day_events(self.date)
rel_dates = [self.date for _ in range(len(events))]
event_list = SingelDayEventListDesign(
size, events, fontsize, event_prefix_rel_dates=rel_dates)
event_list.pos = pos
self.draw_design(event_list)
def __draw_forecast__(self, weather):
forecast = weather.get_forecast_in_days(
self.date.day - datetime.today().day)
if forecast is None:
return
height = int(weathericon_height * self.size[1])
size = (height, height)
ypos = weathericon_ypos * self.size[1]
pos = (self.size[0] - ypos - size[0], ypos)
icon = Image.open(wpath + weathericons[forecast.icon] + ".jpeg")
resized_icon = icon.resize(size, resample=Image.LANCZOS)
self.draw(resized_icon, pos)
def __finish_image__(self):
self.__draw_weekday__()
self.__draw_day_number__()
def __draw_weekday__(self):
font_size = int(weekday_fontsize * self.size[1])
size = (weekday_y_size[0] * self.size[1],
weekday_y_size[1] * self.size[1])
ypos = weekday_ypos * self.size[1]
pos = (0, ypos)
color = self.__get_day_color__()
week_day_name = self.date.strftime("%a")
week_day = TextDesign(size, text=week_day_name, font=font, color=color,
fontsize=font_size, horizontalalignment="center", verticalalignment="top")
week_day.pos = pos
week_day.mask = False
self.draw_design(week_day)
def __draw_day_number__(self):
font_size = int(daynumber_fontsize * self.size[1])
ypadding = daynumber_ypadding * self.size[1]
size = (daynumber_y_size[0] * self.size[1],
daynumber_y_size[1] * self.size[1])
pos = (0, ypadding)
day_text = self.__get_day_text__()
color = self.__get_day_color__()
number = TextDesign(size, text=day_text, font=font, color=color,
fontsize=font_size, horizontalalignment="center", verticalalignment="bottom")
number.pos = pos
self.draw_design(number)
def __abs_co__(self, coordinates):
return (int(coordinates[0] * self.size[0]), int(coordinates[1] * self.size[1]))
def __get_day_text__(self):
return str(self.date.day)
def __get_day_color__(self):
"""Depending on week_starts_on"""
if week_starts_on == "Monday" and self.date.strftime("%w") == "0":
return colors["hl"]
elif week_starts_on == "Sunday" and self.date.strftime("%w") == "6":
return colors["hl"]
else:
return colors["fg"]

155
Calendar/DayViewPanel.py Normal file
View file

@ -0,0 +1,155 @@
from PanelDesign import PanelDesign
from datetime import datetime, timedelta, date
from DayHeaderDesign import DayHeaderDesign
from HourListDesign import HourListDesign
from settings import general_settings
from RssPostListDesign import RssPostListDesign
from PIL import ImageDraw
from Assets import colors
from EventListDesign import EventListDesign
from CryptoListDesign import CryptoListDesign
header_size = (1, 0.2)
hourlist_size = (1, 1 - header_size[1])
default_shownhours_count = 12
infoarea_replaced_hours = 4
infoarea_borderline_width = 1
infoarea_padding = 5
class DayViewPanel (PanelDesign):
"""Overview that focuses on the current day and
shows a timeline split into hours."""
def __init__(self, size):
super(DayViewPanel, self).__init__(size)
self.shownhours_count = default_shownhours_count
if general_settings["info-area"] not in ["", "empty"]:
self.shownhours_count -= infoarea_replaced_hours
self.__first_render__()
def __first_render__(self):
self.__init_header__()
self.__init_hourlist__()
def add_weather(self, weather):
self.__header__.add_weather(weather)
def add_calendar(self, calendar):
allday_ev, timed_ev = self.__split_events__(
calendar.get_today_events())
self.__header__.add_events(allday_ev)
self.__hourlist__.add_events(timed_ev)
if general_settings["info-area"] == "events":
self.__draw_event_list__(calendar)
self.__draw_infoarea_line__()
def add_rssfeed(self, rss):
if general_settings["info-area"] == "rss":
self.__draw_rss_feed__(rss)
self.__draw_infoarea_line__()
def add_crypto(self, crypto):
if general_settings["info-area"] == "crypto":
self.__draw_crypto_feed__(crypto)
self.__draw_infoarea_line__()
def __draw_infoarea_line__(self):
height = infoarea_replaced_hours * self.__hourlist__.row_size[1]
ypos = self.size[1] - height
line_start = (0, ypos)
line_end = (self.size[0], ypos)
ImageDraw.Draw(self.__image__).line(
[line_start, line_end], fill=colors["fg"], width=infoarea_borderline_width)
def __draw_rss_feed__(self, rss):
height = infoarea_replaced_hours * \
self.__hourlist__.row_size[1] - infoarea_padding
size = (self.size[0], height)
pos = (0, self.size[1] - size[1])
rss = RssPostListDesign(size, rss)
rss.pos = pos
self.draw_design(rss)
def __draw_crypto_feed__(self, crypto):
height = infoarea_replaced_hours * \
self.__hourlist__.row_size[1] - infoarea_padding
size = (self.size[0], height)
pos = (0, self.size[1] - size[1])
crypto = CryptoListDesign(size, crypto)
acutal_height = crypto.get_estimated_height()
crypto.pos = (pos[0], pos[1] + (height - acutal_height))
self.draw_design(crypto)
def __draw_event_list__(self, calendar):
height = infoarea_replaced_hours * \
self.__hourlist__.row_size[1] - infoarea_padding
size = (self.size[0], height)
pos = (0, self.size[1] - size[1])
events = EventListDesign(size, calendar.get_upcoming_events())
events.pos = pos
self.draw_design(events)
def add_tasks(self, tasks):
pass
def __finish_panel__(self):
self.draw_design(self.__header__)
self.draw_design(self.__hourlist__)
def __init_header__(self):
self.__header__ = DayHeaderDesign(
self.__abs_co__(header_size), date.today())
self.__header__.pos = (0, 0)
def __init_hourlist__(self):
start, end = self.__get_current_hour_range__()
size = self.__abs_co__(hourlist_size)
size = (size[0], size[1] * self.shownhours_count /
default_shownhours_count)
self.__hourlist__ = HourListDesign(size, start, end)
self.__hourlist__.pos = (0, self.__header__.size[1])
def __get_current_hour_range__(self):
start_hour = datetime.now().hour
additional_hours = self.shownhours_count - 1
if start_hour + additional_hours > 23:
start_hour = 23 - additional_hours
return start_hour, start_hour + additional_hours
def __abs_co__(self, coordinates):
return (int(coordinates[0] * self.size[0]), int(coordinates[1] * self.size[1]))
def __split_events__(self, events):
allday_ev = []
timed_ev = []
for event in events:
if event.allday:
allday_ev.append(event)
elif event.multiday:
if self.__is_today__(event.begin_datetime):
timed_ev.append(event)
elif self.__is_today__(event.end_datetime):
timed_ev.append(event)
else:
allday_ev.append(event)
else:
timed_ev.append(event)
return allday_ev, timed_ev
def __is_today__(self, dt):
today = date.today()
return dt.day == today.day and \
dt.month == today.month and \
dt.year == today.year

65
Calendar/DebugConsole.py Normal file
View file

@ -0,0 +1,65 @@
from DebugInterface import DebugInterface
from Assets import weathericons
from datetime import datetime
import traceback
class DebugConsole (DebugInterface):
"""Defines concrete console export of debug objects"""
def print_event(self, event):
print("\nCalendarEvent:")
print("---------------------")
print('Begin datetime: ' + str(event.begin_datetime))
print('End datetime: ' + str(event.end_datetime))
print('Duration: ' + str(event.duration))
print('All day: ' + str(event.allday))
print('Multi-day: ' + str(event.multiday))
print('RRULE: ' + str(event.rrule))
print('Title: ' + str(event.title))
print('Description: ' + str(event.description))
print('Attendees: ' + str(event.attendees))
print('Highlight: ' + str(event.highlight))
print('Calendar name: ' + str(event.calendar_name))
print('Location: ' + str(event.location))
print('Fetch datetime: ' + str(event.fetch_datetime))
def print_forecast(self, forecast):
print("\nWeatherForecast:")
print("---------------------")
print('Air temperature: ' + str(forecast.air_temperature))
print('Air humidity: ' + str(forecast.air_humidity))
print('Air pressure: ' + str(forecast.air_pressure))
print('Rain probability: ' + str(forecast.rain_probability))
print('Rain amount: ' + str(forecast.rain_amount))
print('Snow amount: ' + str(forecast.snow_amount))
print('Sunrise-time: ' + str(forecast.sunrise))
print('Sunset time: ' + str(forecast.sunset))
print('Moon phase: ' + str(forecast.moon_phase))
print('Wind speed: ' + str(forecast.wind_speed))
print('Cloudiness: ' + str(forecast.clouds))
print('Icon code: ' + str(forecast.icon))
print('weather-icon name: ' + str(weathericons[forecast.icon]))
print('Short description: ' + str(forecast.short_description))
print('Detailed description: ' + str(forecast.detailed_description))
print('Units: ' + str(forecast.units))
print('Datetime: ' + str(forecast.datetime))
print('Location: ' + str(forecast.location))
print('Fetch datetime: ' + str(forecast.fetch_datetime))
def print_line(self, content):
if content is None:
return
print(str(content))
def print_err(self, exception, msg=""):
if exception is None:
return
content = "[ERR: "
content += datetime.now().strftime("")
content += "]\n" + str(exception)
content += "\n" + str(msg) + "\n"
traceback.print_exc()
self.print_line(str(content))

View file

@ -0,0 +1,14 @@
class DebugInterface (object):
"""Defines general interface for debugging operations"""
def print_event(self, event):
raise NotImplementedError("Functions needs to be implemented")
def print_forecast(self, forecast):
raise NotImplementedError("Functions needs to be implemented")
def print_line(self, content):
raise NotImplementedError("Functions needs to be implemented")
def print_err(self, exception, msg=""):
raise NotImplementedError("Functions needs to be implemented")

61
Calendar/DesignEntity.py Normal file
View file

@ -0,0 +1,61 @@
from PIL import Image, ImageOps, ImageDraw
from Assets import colors
masking_threshold = 200
class DesignEntity (object):
"""General entity that can be drawn on to a panel design or
other design entities."""
def __init__(self, size, mask=False, invert_mask=False, color_key=False):
self.size = size
# Are dimensions >= 0?
if self.size[0] < 0:
self.size = (0, self.size[1])
if self.size[1] < 0:
self.size = (self.size[0], 0)
self.pos = (0, 0)
self.mask = mask
self.invert_mask = invert_mask
self.__init_image__()
self.__finished_image__ = False
self.color_key = color_key
def __init_image__(self, color=colors["bg"]):
rounded_size = (int(self.size[0]), int(self.size[1]))
self.__image__ = Image.new('RGBA', rounded_size, color=color)
def get_image(self):
if self.__finished_image__ is False:
self.__finish_image__()
self.__finished_image__ = True
return self.__image__
def draw(self, subimage, pos, mask=False, invert_mask=False, color_key=False):
rounded_pos = (int(pos[0]), int(pos[1]))
img_mask = None
if mask:
img_mask = self.__get_mask__(
subimage, invert_mask=invert_mask, color_key=color_key)
self.__image__.paste(subimage, rounded_pos, mask=img_mask)
def draw_design(self, entity):
self.draw(entity.get_image(), entity.pos, entity.mask,
entity.invert_mask, entity.color_key)
def draw_image(self, path, pos):
self.draw(Image.open(path), pos)
def __finish_image__(self):
pass
def __get_mask__(self, image, invert_mask, color_key):
mask = image.convert('L')
if color_key:
mask = mask.point(lambda p: 0 if p <
masking_threshold else 255, '1').convert('L')
if invert_mask:
mask = ImageOps.invert(mask)
return ImageOps.invert(mask)

99
Calendar/Dictionary.py Normal file
View file

@ -0,0 +1,99 @@
default_language = "en"
'''Characters following '*' are placeholders and will be replaced by some number/text/etc.'''
'''Events'''
more_events = {
'en': '+ *0 more',
'de': '+ *0 weitere'
}
multiday_events = {
'en': 'Multi-day',
'de': 'Mehrtägig'
}
allday_events = {
'en': 'All-day',
'de': 'Ganztägig'
}
'''Weather'''
rain_weather = {
'en': 'Rain',
'de': 'Regen'
}
clear_weather = {
'en': 'Clear',
'de': 'Klar'
}
clouds_weather = {
'en': 'Clouds',
'de': 'Wolken'
}
thunderstorm_weather = {
'en': 'Thunderstorm',
'de': 'Gewitter'
}
drizzle_weather = {
'en': 'Drizzle',
'de': 'Niesel'
}
snow_weather = {
'en': 'Snow',
'de': 'Schnee'
}
mist_weather = {
'en': 'Mist',
'de': 'Nebel'
}
smoke_weather = {
'en': 'Smoke',
'de': 'Rauch'
}
haze_weather = {
'en': 'Haze',
'de': 'Nebel'
}
dust_weather = {
'en': 'Dust',
'de': 'Staub'
}
fog_weather = {
'en': 'Fog',
'de': 'Nebel'
}
sand_weather = {
'en': 'Sand',
'de': 'Sand'
}
ash_weather = {
'en': 'Ash',
'de': 'Asche'
}
squall_weather = {
'en': 'Squall',
'de': 'Sturm'
}
tornado_weather = {
'en': 'Tornado',
'de': 'Tornado'
}
dictionary_collection = [
rain_weather,
clear_weather,
dust_weather,
squall_weather,
tornado_weather,
clouds_weather,
thunderstorm_weather,
smoke_weather,
ash_weather,
sand_weather,
fog_weather,
haze_weather,
mist_weather,
drizzle_weather,
snow_weather,
more_events,
allday_events,
multiday_events
]

View file

@ -0,0 +1,29 @@
from Dictionary import default_language
from settings import language
'''Takes a collection of phrases and outputs the necessary text
according to the language and inserts parameters.'''
def get_text(dictionary, *params):
text = dictionary[default_language]
if language in dictionary.keys():
text = dictionary[language]
return __insert_params__(text, params)
def __insert_params__(text, params):
index = 0
while '*%d' % index in text and index < len(params):
splitted = text.split('*%d' % index)
text = splitted[0] + str(params[index]) + splitted[1]
index += 1
while '*' in text:
splitted = text.split('*%d' % index)
if len(splitted) > 1:
text = splitted[0] + splitted[1].lstrip(' ')
else:
text = splitted[0].rsplit(' ')
index += 1
return text

View file

@ -0,0 +1,12 @@
class DisplayAdapter (object):
"""Interface for CalendarDesign output channels."""
def __init__(self, width, height):
self.width = width
self.height = height
def render(self, design):
raise NotImplementedError("Functions needs to be implemented")
def calibrate(self):
raise NotImplementedError("Functions needs to be implemented")

135
Calendar/E-Paper.py Normal file
View file

@ -0,0 +1,135 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
E-Paper Software (main script) for the 3-colour and 2-Colour E-Paper display
A full and detailed breakdown for this code can be found in the wiki.
If you have any questions, feel free to open an issue at Github.
Copyright by aceisace
"""
from datetime import datetime
from time import sleep
from Assets import path
from LoopTimer import LoopTimer
import locale
from DebugConsole import DebugConsole
from settings import datetime_encoding, language, render_to_display, render_to_file, display_colours, location, api_key, owm_paid_subscription, choosen_design, ical_urls, highlighted_ical_urls, rss_feeds, update_interval, calibrate_hours, crypto_coins, max_loop_count, run_on_hour
from MonthOvPanel import MonthOvPanel
from DayListPanel import DayListPanel
from DayViewPanel import DayViewPanel
from DayFocusListPanel import DayFocusListPanel
from MonthViewPanel import MonthViewPanel
from AgendaListPanel import AgendaListPanel
from ImageFramePanel import ImageFramePanel
import OwmForecasts
import IcalEvents
import RssParserPosts
import GeckoCrypto
all_locales = locale.locale_alias
if language.lower() not in all_locales.keys():
raise Exception(
"The locale for \"%s\" is currently not supported! If you need support, please open an issue on github." % language)
locale.setlocale(locale.LC_ALL, "%s.%s" % (
all_locales[language.lower()].split('.')[0], datetime_encoding))
debug = DebugConsole()
output_adapters = []
if render_to_file:
import ImageFileAdapter
epd = ImageFileAdapter.ImageFileAdapter(path)
output_adapters.append(epd)
if render_to_display:
if display_colours == "bwr":
import Epd7in5bAdapter
epd = Epd7in5bAdapter.Epd7in5bAdapter()
output_adapters.append(epd)
elif display_colours == "bw":
import Epd7in5Adapter
epd = Epd7in5Adapter.Epd7in5Adapter()
output_adapters.append(epd)
available_panels = {
"day-list": DayListPanel,
"month-overview": MonthOvPanel,
"day-view": DayViewPanel,
"day-focus-list": DayFocusListPanel,
"agenda-list": AgendaListPanel,
"month-view": MonthViewPanel,
"image-frame": ImageFramePanel,
}
loop_timer = LoopTimer(
update_interval, run_on_hour=run_on_hour, max_loop_count=max_loop_count)
"""Main loop starts from here"""
def main():
owm = OwmForecasts.OwmForecasts(
location, api_key, paid_api=owm_paid_subscription)
events_cal = IcalEvents.IcalEvents(ical_urls, highlighted_ical_urls)
rss = RssParserPosts.RssParserPosts(rss_feeds)
crypto = GeckoCrypto.GeckoCrypto(crypto_coins)
while True:
loop_timer.begin_loop()
start_time = loop_timer.get_current()[0]
if start_time.hour in calibrate_hours and loop_timer.is_new_hour_loop():
debug.print_line("Calibrating outputs")
for output in output_adapters:
output.calibrate()
if choosen_design in available_panels.keys():
design = available_panels[choosen_design]((epd.width, epd.height))
else:
raise ImportError(
"choosen_design must be valid (" + choosen_design + ")")
debug.print_line("Fetching weather information from open weather map")
owm.reload()
design.add_weather(owm)
debug.print_line('Fetching events from your calendar')
events_cal.reload()
design.add_calendar(events_cal)
debug.print_line('Fetching posts from your rss-feeds')
rss.reload()
design.add_rssfeed(rss)
debug.print_line('Fetching crypto prices from coin gecko')
crypto.reload()
design.add_crypto(crypto)
debug.print_line("\nStarting to render")
for i, output in enumerate(output_adapters):
try:
output.render(design)
debug.print_line(str(i + 1) + " of " +
str(len(output_adapters)) + " rendered")
except BaseException as ex:
debug.print_err(ex, "Failed to render output " +
str(i + 1) + " of " + str(len(output_adapters)))
debug.print_line("=> Finished rendering" + "\n")
loop_timer.end_loop()
if loop_timer.was_last_loop():
debug.print_line("Maximum loop count " +
str(loop_timer.loop_count) + " reached, exiting.")
return
sleep_time = loop_timer.time_until_next()
debug.print_line("This loop took " +
str(loop_timer.get_last_duration()) + " to execute.")
debug.print_line("Sleeping " + str(sleep_time) + " until next loop.")
sleep(sleep_time.total_seconds())
if __name__ == '__main__':
main()

Some files were not shown because too many files have changed in this diff Show more