Jarvis-Ironman 0.0.3
IronMan's Jarvis with python.
Requires Python: >=3.8
Keywords: python,natural-language-processing,text-to-speech,speech-recognition,jarvis,hotword-detection,virtual-assistant,multiprocessing,threadpool

[![forthebadge made-with-python](http://ForTheBadge.com/images/badges/made-with-python.svg)](https://www.python.org/)
[![ForTheBadge built-with-swag](http://ForTheBadge.com/images/badges/built-with-swag.svg)](https://github.com/thevickypedia/Jarvis)

[![Python 3.8](https://img.shields.io/badge/python-3.8-orange.svg)](https://www.python.org/downloads/release/python-385/)
[![Python 3.9](https://img.shields.io/badge/python-3.9-blue.svg)](https://www.python.org/downloads/release/python-391/)

###### Platform Supported
![Generic badge](https://img.shields.io/badge/Platform-MacOS-1f425f.svg)

###### Language Stats
![Language count](https://img.shields.io/github/languages/count/thevickypedia/Jarvis)
![Code coverage](https://img.shields.io/github/languages/top/thevickypedia/Jarvis)

###### Repo Stats
[![GitHub Repo stars](https://img.shields.io/github/stars/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub Repo forks](https://img.shields.io/github/forks/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub Repo watchers](https://img.shields.io/github/watchers/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)

[![GitHub](https://img.shields.io/github/license/thevickypedia/Jarvis)](LICENSE)
[![GitHub repo size](https://img.shields.io/github/repo-size/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub code size](https://img.shields.io/github/languages/code-size/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![LOC](https://img.shields.io/tokei/lines/github/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)

[![GitHub Repo issues](https://img.shields.io/github/issues-closed-raw/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub Repo issues](https://img.shields.io/github/issues-raw/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub Repo pr](https://img.shields.io/github/issues-pr-closed-raw/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub Repo pr](https://img.shields.io/github/issues-pr-raw/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)

###### Code Stats
![Modules](https://img.shields.io/github/search/thevickypedia/Jarvis/module)
![Python](https://img.shields.io/github/search/thevickypedia/Jarvis/.py)
![Threads](https://img.shields.io/github/search/thevickypedia/Jarvis/thread)
![Listener](https://img.shields.io/github/search/thevickypedia/Jarvis/listener)
![Speaker](https://img.shields.io/github/search/thevickypedia/Jarvis/speaker)
![Bash](https://img.shields.io/github/search/thevickypedia/Jarvis/.sh)
![AppleScript](https://img.shields.io/github/search/thevickypedia/Jarvis/.scpt)
![Make](https://img.shields.io/github/search/thevickypedia/Jarvis/Makefile)

###### Deployments
[![docs](https://github.com/thevickypedia/Jarvis/actions/workflows/docs.yml/badge.svg)](https://thevickypedia.github.io/Jarvis/)

###### Activity
[![GitHub Repo created](https://img.shields.io/date/1599432310)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub commit activity](https://img.shields.io/github/commit-activity/y/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)
[![GitHub last commit](https://img.shields.io/github/last-commit/thevickypedia/Jarvis)](https://api.github.com/repos/thevickypedia/Jarvis)

###### Development and Maintenance
[![Active Development](https://img.shields.io/badge/Development%20Level-Actively%20Developed-success.svg)](https://github.com/thevickypedia/Jarvis)
[![Actively Maintained](https://img.shields.io/badge/Maintenance%20Level-Actively%20Maintained-success.svg)](https://github.com/thevickypedia/Jarvis)

[![Maintained](https://img.shields.io/maintenance/yes/2021)](https://api.github.com/repos/thevickypedia/Jarvis)
[![Maintainer](https://img.shields.io/badge/Maintained%20By-Vignesh%20Sivanandha%20Rao-blue.svg)](https://vigneshrao.com/)

###### Reach Out
[![Ask Me | Anything ](https://img.shields.io/badge/Ask%20me-Anything-1abc9c.svg)](https://vigneshrao.com/contact)

[comment]: <> ([![Stargazers over time]&#40;https://starchart.cc/thevickypedia/Jarvis.svg&#41;]&#40;https://starchart.cc/thevickypedia/Jarvis&#41;)
[comment]: <> (![Stackoverflow reputation]&#40;https://img.shields.io/stackexchange/stackoverflow/r/13691532&#41;)
[comment]: <> (![Profile views]&#40;https://gpvc.arturio.dev/thevickypedia&#41;)

# Jarvis
IronMan's Jarvis with python

### Setup
   - Run the following commands in command line/terminal:
        - `cd lib && chmod +x installs.sh` - Makes [installation file](https://git.io/JBnPq) as executable.
        - `python3 -m venv venv` - Creates a virtual env named `venv`
        - `source venv/bin/activate` - Activates the virtual env `venv`
        - `which python` - Validate which python is being used. Should be the one within the virtual env `venv`
        - [`bash installs.sh`](https://git.io/JBnPq) - Installs the required libraries/modules.
        - [`python3 jarvis.py`](https://git.io/JBnPz) - BOOM, you're all set, go ahead and interact with Jarvis

### ENV Variables
Environment variables are loaded from a `.env` file using the `python_dotenv` module.

<details>
<summary><strong>More on <a href="https://github.com/thevickypedia/Jarvis/wiki#environment-variables">Environment variables</a></strong></summary>

###### Default args
     Used to retrieve the current location.
- **icloud_user** - iCloud account username.
- **icloud_pass** - iCloud account password.

###### Additional args
- **git_user** - GitHub Username
- **git_pass** - GitHub Token
- **weather_api** - API Key from [openweathermap](https://openweathermap.org/) 
- **news_api** - API Key from [newsapi](https://newsapi.org/docs/client-libraries/python)
- **maps_api** - API Key for maps from [google](https://developers.google.com/maps/documentation/maps-static/get-api-key)
- **gmail_user** - Gmail account username to send and read emails.
- **gmail_pass** - Gmail account password to send and read emails.
- **robinhood_user** - Robinhood account username.
- **robinhood_pass** - Robinhood account password.
- **robinhood_qr** - Robinhood login [QR code](https://robinhood.com/account/settings)
- **birthday** - Birth date in the format DD-MM - Example: `24-April`
- **icloud_recovery** - Recovery phone number to activate lost mode on a target device - Example: `+11234567890`
- **phone_number** - To send SMS from Jarvis - Example: `+11234567890`
- **think_id** - API Key from wolfram alpha.
- **root_password** - System password for your `mac` to get the system vitals.

###### Args for [PersonalCloud](https://github.com/thevickypedia/personal_cloud) integration
- **personal_cloud_host** - Directory path which has to shared through the internet.

###### Args to control TV - Applies only for [LGWebOS](https://en.wikipedia.org/wiki/WebOS)
- **tv_client_key** - Client key to [control the TV](https://github.com/thevickypedia/Jarvis/blob/master/helper_functions/tv_controls.py) using `pywebostv` module.
- **tv_mac** - Mac address of the TV which will be retrieved by the `arp` command but just in case.

###### Args for [ip_scanner](https://github.com/thevickypedia/Jarvis/blob/master/helper_functions/ip_scanner.py) - Applies only for [Netgear routers](https://github.com/MatMaul/pynetgear#supported-routers)
- **router_pass** - Router's admin password to get the available devices using `pynetgear` module.
     > Note that this may be done even without the module by simply scanning the whole network.
  > Using the module makes it easier since the devices are already connected to the router.

###### Args for [offline-communicator](https://thevickypedia.com/jarvisoffline)
> Built for a personalized usage.
- **offline_receive_user** - Alternate gmail account username to send response from Jarvis as SMS. (`gmail_user` can be re-used)
- **offline_receive_pass** - Alternate gmail account password to send response from Jarvis as SMS. (`gmail_pass` can be re-used)
- **offline_phrase** - Secure phrase to be used for authentication purpose.
- **ngrok_auth_key** - Auth token from [ngrok](https://dashboard.ngrok.com/) - Only used for `offline_communicator`
</details>

### Coding Standards
Docstring format: [`Google`](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings) <br>
Styling conventions: [`PEP 8`](https://www.python.org/dev/peps/pep-0008/) <br>
Clean code with pre-commit hooks: [`flake8`](https://flake8.pycqa.org/en/latest/) and 
[`isort`](https://pycqa.github.io/isort/)

### Linting
`PreCommit` will ensure linting, and the doc creation are run on every commit.

**Requirement**
<br>
`pip install --no-cache --upgrade sphinx pre-commit recommonmark`

**Usage**
<br>
`pre-commit run --all-files`

### Feature(s) Implementation
Please refer [wiki](https://github.com/thevickypedia/Jarvis/wiki) for API usage, access controls, env variables, 
features' overview and demo videos.

### Runbook
[![made-with-sphinx-doc](https://img.shields.io/badge/Made%20with-Sphinx-1f425f.svg)](https://www.sphinx-doc.org/en/master/man/sphinx-autogen.html)

https://thevickypedia.github.io/Jarvis/

## License & copyright

&copy; Vignesh Sivanandha Rao

Licensed under the [MIT License](LICENSE)


Change Log
==========

0.0.1 (09/06/2020)
------------------
- Initial commit

0.0.2 (09/06/2020)
------------------
- include requirements in a script file

0.0.3 (09/06/2020)
------------------
- add .gitignore

0.0.4 (09/06/2020)
------------------
- convert audio to text

0.0.5 (09/06/2020)
------------------
- include exception handler

0.0.6 (09/06/2020)
------------------
- update installs.sh for text2audio.py

0.0.7 (09/06/2020)
------------------
- add text2audio.py

0.0.8 (09/06/2020)
------------------
- change voice and print current volume

0.0.9 (09/06/2020)
------------------
- initialize jarvis

0.1.0 (09/06/2020)
------------------
- include two communication

0.1.1 (09/06/2020)
------------------
- speak what you heard

0.1.2 (09/06/2020)
------------------
- add runbook in README.md

0.1.3 (09/06/2020)
------------------
- implement logging

0.1.4 (09/06/2020)
------------------
- reformat code

0.1.5 (09/06/2020)
------------------
- open a webpage

0.1.6 (09/06/2020)
------------------
- open websites

0.1.7 (09/06/2020)
------------------
- reformat jarvis to open webpages

0.1.8 (09/06/2020)
------------------
- jarvis can tell date and time now

0.1.9 (09/06/2020)
------------------
- end message for date and time

0.2.0 (09/06/2020)
------------------
- restructure initialization and continuation for convenience

0.2.1 (09/07/2020)
------------------
- reformat exit message

0.2.2 (09/07/2020)
------------------
- update installs.sh

0.2.3 (09/07/2020)
------------------
- jarvis can help with current weather info

0.2.4 (09/07/2020)
------------------
- code reformat

0.2.5 (09/07/2020)
------------------
- restructure renew()

0.2.6 (09/07/2020)
------------------
- more requirements updated

0.2.7 (09/07/2020)
------------------
- found a companion for jarvis ;)

0.2.8 (09/07/2020)
------------------
- jarvis/friday can now say system configuration

0.2.9 (09/07/2020)
------------------
- reconfigure webpage condition for reliability

0.3.0 (09/07/2020)
------------------
- update installer

0.3.1 (09/07/2020)
------------------
- get info from wikipedia

0.3.2 (09/07/2020)
------------------
- wait and get user confirmation before reading whole passage

0.3.3 (09/07/2020)
------------------
- optimize run time::remove repeated exception handlers

0.3.4 (09/07/2020)
------------------
- exception handler for multiple results from wikipedia

0.3.5 (09/07/2020)
------------------
- address commander by name

0.3.6 (09/07/2020)
------------------
- move conditions to a separate block

0.3.7 (09/07/2020)
------------------
- handle multiple tasks

0.3.8 (09/07/2020)
------------------
- log sensible listener information

0.3.9 (09/07/2020)
------------------
- some basic tweaks

0.4.0 (09/08/2020)
------------------
- update installs.sh

0.4.1 (09/08/2020)
------------------
- some more tweaks

0.4.2 (09/08/2020)
------------------
- update pip before proceeding

0.4.3 (09/08/2020)
------------------
- update .gitignore

0.4.4 (09/08/2020)
------------------
- update README.md

0.4.5 (09/08/2020)
------------------
- update installs.sh

0.4.6 (09/08/2020)
------------------
- add brew to installs.sh

0.4.7 (09/08/2020)
------------------
- change some keywords

0.4.8 (09/08/2020)
------------------
- replicate changed keywords

0.4.9 (09/08/2020)
------------------
- added welcome note

0.5.0 (09/08/2020)
------------------
- update README.md

0.5.1 (09/08/2020)
------------------
- update README.md

0.5.2 (09/08/2020)
------------------
- adjust greetings for noon

0.5.3 (09/09/2020)
------------------
- add detailed weather info

0.5.4 (09/09/2020)
------------------
- update installs.sh - news api

0.5.5 (09/09/2020)
------------------
- reformat date and alter conditions

0.5.6 (09/09/2020)
------------------
- jarvis can now read today's news

0.5.7 (09/09/2020)
------------------
- jarvis can now tell entire day's report
- used has_been_called to check if report() was triggered

0.5.8 (09/10/2020)
------------------
- explicit weather info per location

0.5.9 (09/10/2020)
------------------
- update installs.sh to integrate stock investment details

0.6.0 (09/10/2020)
------------------
- add robinhood.py to integrate stock info with jarvis

0.6.1 (09/10/2020)
------------------
- reconfigure jarvis and robinhood integration

0.6.2 (09/12/2020)
------------------
- trigger same function again

0.6.3 (09/13/2020)
------------------
- add repeater

0.6.4 (09/14/2020)
------------------
- remove unnecessary punctuation which confuses jarvis

0.6.5 (09/14/2020)
------------------
- update README.md

0.6.6 (09/14/2020)
------------------
- news source as variable

0.6.7 (09/14/2020)
------------------
- jarvis can now open any app

0.6.8 (09/14/2020)
------------------
- remove floating values for temperature

0.6.9 (09/15/2020)
------------------
- reduce listener wait time
- timeout - phrase has to start before this
- phrase_time_limit - jarvis will listen only until this time

0.7.0 (09/15/2020)
------------------
- write and clear screen instead of logging
- this enables user to see only one message on the screen instead of long logging information of when Jarvis is ready to listen

0.7.1 (09/15/2020)
------------------
- update volume display style

0.7.2 (09/15/2020)
------------------
- look if app is available

0.7.3 (09/15/2020)
------------------
- respond if app is not found

0.7.4 (09/16/2020)
------------------
- remove misleading keywords

0.7.5 (09/16/2020)
------------------
- add windows support for installing requirements

0.7.6 (09/16/2020)
------------------
- speak out error message for windows

0.7.7 (09/16/2020)
------------------
- open webpages on windows OS

0.7.8 (09/16/2020)
------------------
- increase time limit for repeater

0.7.9 (09/16/2020)
------------------
- update README.md

0.8.0 (09/16/2020)
------------------
- update README.md

0.8.1 (09/16/2020)
------------------
- reduce response time

0.8.2 (09/17/2020)
------------------
- add LICENSE

0.8.3 (09/19/2020)
------------------
- integrate chat bot with jarvis

0.8.4 (09/19/2020)
------------------
- inform when bot is ready

0.8.5 (09/19/2020)
------------------
- ignore bad response from chat bot

0.8.6 (09/19/2020)
------------------
- avoid repeated model trainings

0.8.7 (09/19/2020)
------------------
- add feature to exit from chat bot

0.8.8 (09/19/2020)
------------------
- remove training modules upon exiting chat bot

0.8.9 (09/19/2020)
------------------
- restructure code

0.9.0 (09/19/2020)
------------------
- update installs.sh to support chat bot

0.9.1 (09/19/2020)
------------------
- look up google instead of not configured message

0.9.2 (09/19/2020)
------------------
- don't repeat what you heard

0.9.3 (09/19/2020)
------------------
- don't accidentally open incorrect searches

0.9.4 (09/19/2020)
------------------
- don't repeat what you heard

0.9.5 (09/20/2020)
------------------
- update installs_windows.sh to support chatbot

0.9.6 (09/20/2020)
------------------
- update windows support for chatbot

0.9.7 (09/20/2020)
------------------
- reduce code redundancy

0.9.8 (09/20/2020)
------------------
- so much of a hacky way to install chromedriver

0.9.9 (09/21/2020)
------------------
- use chrome driver to automate else part

1.0.0 (09/21/2020)
------------------
- added exception handlers for unprocessed text from microphone
- INFO: Jarvis never exits when unable to process the command

1.0.1 (09/21/2020)
------------------
- include dummy function for varied response

1.0.2 (09/21/2020)
------------------
- open apps using regex and change some keywords

1.0.3 (09/21/2020)
------------------
- use dummy in all functions calling renew

1.0.4 (09/21/2020)
------------------
- check for brew installation status before installing

1.0.5 (09/21/2020)
------------------
- reconfigure renew function

1.0.6 (09/21/2020)
------------------
- remove chromedriver and selenium

1.0.7 (09/21/2020)
------------------
- get rid of automation as class IDs are not static or reliable

1.0.8 (09/21/2020)
------------------
- remove logger

1.0.9 (09/21/2020)
------------------
- use default browser instead of chrome_path

1.1.0 (09/21/2020)
------------------
- open windows apps via start command in cmd

1.1.1 (09/23/2020)
------------------
- include keywords to exit Jarvis

1.1.2 (09/23/2020)
------------------
- write some more info

1.1.3 (09/23/2020)
------------------
- reduce speach rate for windows

1.1.4 (09/24/2020)
------------------
- update README.md

1.1.5 (09/24/2020)
------------------
- reconfigure exit msg

1.1.6 (09/24/2020)
------------------
- include TODOs

1.1.7 (09/24/2020)
------------------
- flush output often

1.1.8 (09/24/2020)
------------------
- update screen flush

1.1.9 (09/25/2020)
------------------
- stop asking for names

1.2.0 (09/25/2020)
------------------
- include run time stats
- reconfigure exit_msg and listener display

1.2.1 (09/25/2020)
------------------
- don't take to renew without getting initial response

1.2.2 (09/25/2020)
------------------
- Jarvis can now track the user's location

1.2.3 (09/25/2020)
------------------
- update installs.sh to support locating iPhone

1.2.4 (09/25/2020)
------------------
- Jarvis can now track the an iPhone's location

1.2.5 (09/25/2020)
------------------
- update installs_windows.sh to support iphone locator on windows

1.2.6 (09/25/2020)
------------------
- Jarvis can now track the an iPhone's location

1.2.7 (09/26/2020)
------------------
- add more screen flush

1.2.8 (09/26/2020)
------------------
- hold keywords in a dedicated file for easy modifications

1.2.9 (09/26/2020)
------------------
- use dedicated file for conditional blocks

1.3.0 (09/26/2020)
------------------
- Jarvis can now play music
- Done by scanning whole machine for mp3 files and randomly pick one

1.3.1 (09/26/2020)
------------------
- add play music for windows

1.3.2 (09/26/2020)
------------------
- reconfigure app launch

1.3.3 (09/26/2020)
------------------
- Jarvis can now speak emails
- Received from name, email and receive time

1.3.4 (09/27/2020)
------------------
- clean up time

1.3.5 (09/27/2020)
------------------
- Jarvis can now help with meanings of words

1.3.6 (09/27/2020)
------------------
- reconfigure meanings of a word

1.3.7 (09/27/2020)
------------------
- update often misunderstood word for exit

1.3.8 (09/27/2020)
------------------
- reconfigure apps

1.3.9 (09/27/2020)
------------------
- clean up time

1.4.0 (09/27/2020)
------------------
- some more cleanup

1.4.1 (09/27/2020)
------------------
- update installs_windows.sh to support meanings

1.4.2 (09/27/2020)
------------------
- bug fix on keywords.py

1.4.3 (09/28/2020)
------------------
- add email stats to report

1.4.4 (09/28/2020)
------------------
- remove global variables and look for music files only within the music folder

1.4.5 (09/28/2020)
------------------
- decode email subject which was utf-8 encoded

1.4.6 (09/29/2020)
------------------
- create a new local database and store a sample todo list

1.4.7 (09/29/2020)
------------------
- code reformat for create db

1.4.8 (09/29/2020)
------------------
- add uploader and downloader::test data from db

1.4.9 (09/29/2020)
------------------
- include option to remove data from a table

1.5.0 (09/30/2020)
------------------
- update database.py to be asynchronous

1.5.1 (09/30/2020)
------------------
- todo::update keywords for connecting to db

1.5.2 (09/30/2020)
------------------
- create a db via jarvis

1.5.3 (09/30/2020)
------------------
- complete working module of todo using database

1.5.4 (09/30/2020)
------------------
- reconfigure with respect to report

1.5.5 (10/01/2020)
------------------
- conda install PyAudio failed on me

1.5.6 (10/02/2020)
------------------
- add ambient noise adjuster

1.5.7 (10/03/2020)
------------------
- reconfigure os info

1.5.8 (10/03/2020)
------------------
- refactor files

1.5.9 (10/03/2020)
------------------
- build some conversation

1.6.0 (10/04/2020)
------------------
- update exit keywords

1.6.1 (10/04/2020)
------------------
- remove unnecessary installations

1.6.2 (10/04/2020)
------------------
- modifications on adding to-do items

1.6.3 (10/06/2020)
------------------
- adjust afternoon and evening greetings

1.6.4 (10/07/2020)
------------------
- todo to to-do

1.6.5 (10/07/2020)
------------------
- include phone's status along with location

1.6.6 (10/08/2020)
------------------
- update .gitignore to avoid docker trials

1.6.7 (10/08/2020)
------------------
- put Jarvis on sentry mode

1.6.8 (10/08/2020)
------------------
- modify all functions with respect to sentry mode

1.6.9 (10/08/2020)
------------------
- use place holder to avoid going to sentry mode unnecessarily

1.7.0 (10/08/2020)
------------------
- more optimizations towards sentry mode

1.7.1 (10/08/2020)
------------------
- remove cents from investment summary

1.7.2 (10/09/2020)
------------------
- greet only on the first run using greet_check

1.7.3 (10/10/2020)
------------------
- avoid \n to remove stdout

1.7.4 (10/10/2020)
------------------
- some more customizations

1.7.5 (10/10/2020)
------------------
- Jarvis can now tell how far you are from a place (in miles)

1.7.6 (10/10/2020)
------------------
- use index values to calculate distance between places

1.7.7 (10/10/2020)
------------------
- tricky way to calculate distance between places and from your location

1.7.8 (10/11/2020)
------------------
- Jarvis can now tell "where is" a particular place

1.7.9 (10/11/2020)
------------------
- additional check for place name before looking for anything after 'is'

1.8.0 (10/11/2020)
------------------
- Jarvis can get directions now

1.8.1 (10/11/2020)
------------------
- no more renew message
- remove is there anything message
- waits for a minute and goes to sleep
- a minute is calculated by number of times failed iteration is present

1.8.2 (10/11/2020)
------------------
- remove ambient noise adjuster

1.8.3 (10/11/2020)
------------------
- go to renew instead of sleep

1.8.4 (10/12/2020)
------------------
- add keywords for alarm and shutdown

1.8.5 (10/12/2020)
------------------
- alarm script using threading to run alarm in the background

1.8.6 (10/12/2020)
------------------
- Jarvis can now set alarms in the BACKGROUND

1.8.7 (10/12/2020)
------------------
- extract alarm time using digit specifier (regex)

1.8.8 (10/12/2020)
------------------
- change code block to inline code for each command

1.8.9 (10/12/2020)
------------------
- change regex statement to extract alarm time

1.9.0 (10/13/2020)
------------------
- pick random alarm tones handle file not found exception

1.9.1 (10/13/2020)
------------------
- stop an upcoming alarm

1.9.2 (10/13/2020)
------------------
- stop an upcoming alarm

1.9.3 (10/14/2020)
------------------
- try stopping an upcoming alarm using thread id

1.9.4 (10/14/2020)
------------------
- upload mp3 files for alarm

1.9.5 (10/14/2020)
------------------
- create lock files to remove alarms and check for lock  file before triggering an alarm

1.9.6 (10/15/2020)
------------------
- Jarvis can now shutdown a machine

1.9.7 (10/17/2020)
------------------
- get ip of local machine for google home integration

1.9.8 (10/17/2020)
------------------
- find google home devices in a specific ip range

1.9.9 (10/17/2020)
------------------
- list google home devices in ip range

2.0.0 (10/17/2020)
------------------
- update installs

2.0.1 (10/17/2020)
------------------
- Jarvis can now tell jokes

2.0.2 (10/17/2020)
------------------
- rename lock file

2.0.3 (10/17/2020)
------------------
- improve conversations

2.0.4 (10/17/2020)
------------------
- create and update yaml file for training and modifications

2.0.5 (10/18/2020)
------------------
- update code comments

2.0.6 (10/23/2020)
------------------
- kill alarm thread upon exit to avoid hanging threads

2.0.7 (10/23/2020)
------------------
- delete lock files by count instead of alarms in current session

2.0.8 (10/25/2020)
------------------
- replicate alarm to reminder

2.0.9 (10/25/2020)
------------------
- Jarvis can now set reminders and send the reminder to your phone

2.1.0 (10/26/2020)
------------------
- use os._exit to exit active threads

2.1.1 (10/28/2020)
------------------
- Use google's places api before considering unprocessed

2.1.2 (10/28/2020)
------------------
- changes on response to maps_api and use geopy to calculate distance

2.1.3 (10/28/2020)
------------------
- create a dummy function to reset waiter count

2.1.4 (10/30/2020)
------------------
- add missing keyword

2.1.5 (10/30/2020)
------------------
- Jarvis can now say the time at any location

2.1.6 (10/30/2020)
------------------
- update installs to support timezones

2.1.7 (10/30/2020)
------------------
- Jarvis can now say the weather at any location

2.1.8 (10/30/2020)
------------------
- include city and state while saying the current time

2.1.9 (10/30/2020)
------------------
- include an option to take notes, separate sleep keywords and add comments

2.2.0 (10/30/2020)
------------------
- notify even on current machine during a reminder

2.2.1 (11/01/2020)
------------------
- use google search parser to speak results before opening a browser

2.2.2 (11/01/2020)
------------------
- use word ninja to add proper spacing between words in a sentences

2.2.3 (11/01/2020)
------------------
- use pre trained model for punctuations to make Jarvis' english better

2.2.4 (11/01/2020)
------------------
- delete model file and link in wiki

2.2.5 (11/01/2020)
------------------
- avoid using regex for word match and modify some keywords

2.2.6 (11/02/2020)
------------------
- long weather reports only when report is called

2.2.7 (11/02/2020)
------------------
- auto download model file if unavailable and update requirements

2.2.8 (11/02/2020)
------------------
- mute the model file download progress

2.2.9 (11/04/2020)
------------------
- make better use of search engine parser and avoid infinite loop

2.3.0 (11/05/2020)
------------------
- fix typo and update installs file

2.3.1 (11/05/2020)
------------------
- store all env variables in ssm for cross PC access

2.3.2 (11/05/2020)
------------------
- increase recursion limit and handle maximum recursion depth
- RecursionError: maximum recursion depth exceeded while calling a Python object

2.3.3 (11/06/2020)
------------------
- integrate github and let Jarvis clone repositories

2.3.4 (11/06/2020)
------------------
- blunder fix

2.3.5 (11/07/2020)
------------------
- modify git api endpoint to include private, licensed and archived repositories

2.3.6 (11/07/2020)
------------------
- No more watching the screen, Jarvis beeps when listener is ready

2.3.7 (11/07/2020)
------------------
- avoid ipinfo.io/json and use iphone location instead for precise location

2.3.8 (11/07/2020)
------------------
- Jarvis can now send messages

2.3.9 (11/08/2020)
------------------
- check if number is integer and get confirmation before sending

2.4.0 (11/08/2020)
------------------
- Jarvis can now play your local music on other google speakers

2.4.1 (11/08/2020)
------------------
- remove redundant key words and rearrange conditions

2.4.2 (11/08/2020)
------------------
- include google search option

2.4.3 (11/08/2020)
------------------
- open webpages directly

2.4.4 (11/10/2020)
------------------
- disable logging from imported modules and some other petty updates

2.4.5 (11/10/2020)
------------------
- modify meanings from keys() to items() and change audio files for listener response

2.4.6 (11/12/2020)
------------------
- FEATURE::Jarvis can now access your WebOS TV and perform almost all necessary tasks

2.4.7 (11/12/2020)
------------------
- Don't try to connect TV unless asked to. Waiting for an error to handle is exhausting.

2.4.8 (11/12/2020)
------------------
- one source for microphone to remove code redundancies and follow PEP 8 standards

2.4.9 (11/13/2020)
------------------
- update version specific requirements

2.5.0 (11/14/2020)
------------------
- dedicated exit messages to avoid old messages

2.5.1 (11/14/2020)
------------------
- add precise location for iPhone
- handle more exceptions
- getting rid of some useless statements

2.5.2 (11/15/2020)
------------------
- quick heads up from sentry mode and open url via google search parser

2.5.3 (11/15/2020)
------------------
- roll back an unnecessary change

2.5.4 (11/16/2020)
------------------
- update windows installation guide

2.5.5 (11/16/2020)
------------------
- Jarvis can now control PC's master volume via voice commands

2.5.6 (11/16/2020)
------------------
- catch some more exceptions, add suggestions based on weather and isolate time_travel()

2.5.7 (11/16/2020)
------------------
- remove some run and wait statements

2.5.8 (11/16/2020)
------------------
- FEATURE::Jarvis can now detect faces using open-cv and hog model (Histogram Oriented Gradients)
- Read wiki for setup instructions

2.5.9 (11/16/2020)
------------------
- FEATURE::Jarvis can now detect faces using open-cv and hog model (Histogram Oriented Gradients)
- Read wiki for setup instructions

2.6.0 (11/17/2020)
------------------
- FEATURES::1. Face Recognition model will now learn from unrecognized/new faces by storing it with a name
- Look for camera errors and catch exception when no cameras are found

2.6.1 (11/17/2020)
------------------
- read camera output before deciding which camera to choose

2.6.2 (11/17/2020)
------------------
- create train dir to avoid an exception handler
- don't decode emails with no subject
- remove exception handler for PST vs PDT

2.6.3 (11/20/2020)
------------------
- catch more exceptions and modify keywords

2.6.4 (11/21/2020)
------------------
- Jarvis can now restart himself
- Fatal Python error::Cannot recover from stack overflow

2.6.5 (11/21/2020)
------------------
- FEATURE::Jarvis can now get your internet speed

2.6.6 (11/21/2020)
------------------
- install 2 versions of sqlalchemy for Windows to support chatterbot
-2 - support chatbot
-3.6 - handle time.clock() removal in python 3.8

2.6.7 (11/21/2020)
------------------
- Jarvis can now help with spellings and forked git repos

2.6.8 (11/22/2020)
------------------
- rephrase a bit

2.6.9 (11/22/2020)
------------------
- FEATURE::Introduce conditional weather report which includes specific part of a day

2.7.0 (11/22/2020)
------------------
- Jarvis no longer relies on icloud api for location services

2.7.1 (11/23/2020)
------------------
- increase threshold and use random acknowledgement message

2.7.2 (11/27/2020)
------------------
- remove few exception handlers and reduce redundancy

2.7.3 (11/27/2020)
------------------
- FEATURE::Jarvis can now scan and connect to bluetooth devices

2.7.4 (11/28/2020)
------------------
- More stable bluetooth connections and response

2.7.5 (11/28/2020)
------------------
- Bypass initialize and update blueutil installation from source

2.7.6 (11/28/2020)
------------------
- Install git automatically if not found on machine

2.7.7 (11/29/2020)
------------------
- Fix some mess I did earlier

2.7.8 (12/04/2020)
------------------
- Fix some condition blocks and exception handlers

2.7.9 (12/04/2020)
------------------
- complete TODO items and pep8 on some spells

2.8.0 (12/05/2020)
------------------
- some more exception handling

2.8.1 (12/05/2020)
------------------
- dedicated exit_process() to reduce code redundancy
- alarm and reminder check upon exit

2.8.2 (12/07/2020)
------------------
- avoid repeated function calls and wrap up into a while

2.8.3 (12/08/2020)
------------------
- setup daily default startup

2.8.4 (12/09/2020)
------------------
- dedicated function for greeting and setup weekday routine

2.8.5 (12/10/2020)
------------------
- because 3 conditions take more time than 1

2.8.6 (12/14/2020)
------------------
- add some returns to avoid too much method overloading

2.8.7 (12/15/2020)
------------------
- dedicated function for listener to reduce code redundancy

2.8.8 (12/20/2020)
------------------
- update .gitignore

2.8.9 (12/20/2020)
------------------
- remove exception handler for recursion

2.9.0 (12/21/2020)
------------------
- clean up some left overs

2.9.1 (12/23/2020)
------------------
- Remove punctuator because of less usage and more start up time

2.9.2 (12/23/2020)
------------------
- FEATURE::Jarvis can now alter screen brightness
- Use size_converter() to avoid manual bytes conversion

2.9.3 (12/25/2020)
------------------
- auto adjust brightness with current time and custom brightness level and some more improvements

2.9.4 (12/25/2020)
------------------
- FEATURE::Jarvis can now wish on events/festivals/birthdays

2.9.5 (12/25/2020)
------------------
- use volume_controller() to modify volume and reduce code redundancy

2.9.6 (12/25/2020)
------------------
- major refactor and add celebration wishes at more places

2.9.7 (12/26/2020)
------------------
- Jarvis will log restarting times from now

2.9.8 (12/26/2020)
------------------
- save lock file as reminder message to avoid loosing it during restart

2.9.9 (12/29/2020)
------------------
- Feature::Jarvis can now guard your surroundings when you are away

3.0.0 (12/30/2020)
------------------
- get rid of old regex searches, fix place name for weather_condition and remove timeout=None

3.0.1 (01/02/2021)
------------------
- added some more improvements and TODOs

3.0.2 (01/02/2021)
------------------
- FEATURE::Jarvis can now locate, ring and enable lost mode on, any of your Apple devices

3.0.3 (01/03/2021)
------------------
- Bug fix for session time out and reused location when tracking apple devices

3.0.4 (01/05/2021)
------------------
- use while loop to reduce function calls and global variables

3.0.5 (01/05/2021)
------------------
- add comments and revert some changes on sentry_mode()

3.0.6 (01/05/2021)
------------------
- Use MultiThreading and scan the whole IP range for GoogleHome devices and comma_separator for meaningful sentences given a list

3.0.7 (01/05/2021)
------------------
- change static methods to instance methods and some minor optimizations

3.0.8 (01/15/2021)
------------------
- minor bug fixes
- reminders were incomplete for words like private as it has an 'at' in the string
- messages were sent only when an entire statement is heard along with the message and number

3.0.9 (01/18/2021)
------------------
- hostname of the machine will be looked up for location services

3.1.0 (01/19/2021)
------------------
- BETA::Compile multiple asks with 'and' and 'also', remove phrase time limit (tentative)

3.1.1 (01/20/2021)
------------------
- FEATURE::Jarvis can now control smart lights around you
- Added a dedicated localhost checker and reverted phrase time limit

3.1.2 (01/21/2021)
------------------
- add more smart lights' host ids and some more optimization

3.1.3 (01/25/2021)
------------------
- FEATURE::Jarvis can now be accessed from anywhere in the world
- FYI::Read doc string for offline communicator
- improved logging and dedicated logger file

3.1.4 (01/29/2021)
------------------
- Refactor Security Mode and gather all env vars in one place

3.1.5 (01/29/2021)
------------------
- Improve search_engine_parser to get best results from google

3.1.6 (01/29/2021)
------------------
- restart when issues with offline communicator and handle lock file deletion gracefully

3.1.7 (01/29/2021)
------------------
- FEATURE::PR raised by @ariv797

3.1.8 (02/01/2021)
------------------
- include traceback, increase timed wait after response in offline communicator and fix lower case issues

3.1.9 (02/01/2021)
------------------
- set default timeout for imaplib using sockets, purge emails and logout after reading

3.2.0 (02/01/2021)
------------------
- remove recurring .replace()

3.2.1 (02/05/2021)
------------------
- include traceback for offline communicator and insert timed wait instead of restart during an error

3.2.2 (02/06/2021)
------------------
- offline thread will run on single login session
- dedicated function for sms send
- scrap communicator.py
- improve coding standards

3.2.3 (02/06/2021)
------------------
- FEATURE::Jarvis can now keep you informed about meetings/appointments
- Use apple script to access calendar events
- add coin flip sound
- refactor subprocess utilization

3.2.4 (02/06/2021)
------------------
- fix case sensitiveness in TV and spotted bug in meetings

3.2.5 (02/13/2021)
------------------
- Simplify to reduce response time and remove some redundancies

3.2.6 (02/14/2021)
------------------
- fix None type after removing J's reference words

3.2.7 (02/16/2021)
------------------
- store lights' IP as env var and ssm param

3.2.8 (02/16/2021)
------------------
- bug fix on some one liners

3.2.9 (02/16/2021)
------------------
- say IP address when asked

3.3.0 (02/16/2021)
------------------
- free up some variable space in case of a VPN connection

3.3.1 (02/17/2021)
------------------
- ignore non ascii convertibles to avoid UnicodeEncodeError with symbols

3.3.2 (02/17/2021)
------------------
- good bye dummy()

3.3.3 (02/20/2021)
------------------
- log failed operation for smart lights

3.3.4 (02/20/2021)
------------------
- FEATURE::Change voices on demand with custom voice modules available on your device

3.3.5 (02/20/2021)
------------------
- maintains mandatory bed time window being unresponsive
- and fix some glitches

3.3.6 (02/21/2021)
------------------
- much clear logging

3.3.7 (02/26/2021)
------------------
- generic way to delete lock files and avoid exception handlers for filenotfound errors

3.3.8 (02/28/2021)
------------------
- optimize imports
- restructure logger file
- onboard wolfram alpha

3.3.9 (02/28/2021)
------------------
- send detailed notification for offline communication

3.4.0 (03/04/2021)
------------------
- decode email sender

3.4.1 (03/17/2021)
------------------
- remove new lines from email subject and catch more exceptions in J

3.4.2 (03/19/2021)
------------------
- check for git installation in multiple locations

3.4.3 (03/23/2021)
------------------
- implement concurrent threads on light controls for instant response

3.4.4 (03/25/2021)
------------------
- reformat imports to module specific

3.4.5 (03/25/2021)
------------------
- reformat imports to be module specific

3.4.6 (03/25/2021)
------------------
- check app availability before trying to open

3.4.7 (03/25/2021)
------------------
- auto connect to TV on commands other than 'turn off'

3.4.8 (03/28/2021)
------------------
- FEATURE::Jarvis can now tell the system vitals like with fan speed and CPU/GPU temperature and boot time

- faster access to env var (os.getenv to os.environ.get)
- changed pytemperature from external to local module

3.4.9 (03/30/2021)
------------------
- add doc strings and remove unused temperature conversions

3.5.0 (03/30/2021)
------------------
- use spindump for older Macs to get system vitals - avoids error message on screen
- add todo and address bug in locate_places()

3.5.1 (03/30/2021)
------------------
- Fix occasional runtime error when restart and offline_communicator run in parallel

3.5.2 (03/30/2021)
------------------
- ring the device first, and then get ack for location info

3.5.3 (04/04/2021)
------------------
- Use Address Resolution Protocol to get TV's mac address
- Reduce threshold to minimize caching

3.5.4 (04/04/2021)
------------------
- Request shutdown in case of high boot time

3.5.5 (04/04/2021)
------------------
- Kill PIDs for terminals interrupting shutdown

3.5.6 (04/04/2021)
------------------
- Use multiprocessing for meetings to reduce osascript wait time

3.5.7 (04/07/2021)
------------------
- bug fix on potential exceptions

3.5.8 (04/07/2021)
------------------
- FEATURE::Jarvis can now restart the host and suggest a restart if boot time is too long

3.5.9 (04/09/2021)
------------------
- overcome connection issues with Speedtest module

3.6.0 (04/09/2021)
------------------
- Update speed test library to the latest release version

3.6.1 (04/10/2021)
------------------
- revisit listener timings

3.6.2 (04/11/2021)
------------------
- FEATURE::Jarvis can now put the device on sleep
- restart in case of RunTime Error
- speed test lat and lon to be a tuple
- Jarvis to respond to greetings even during late nights

3.6.3 (04/17/2021)
------------------
- FEATURE::Jarvis can perform a screen lock instead of sleep
- Fix iPhone 10 look up failure

3.6.4 (04/17/2021)
------------------
- play start up sound in a thread
- update doc strings for offline communicator

3.6.5 (04/18/2021)
------------------
- break loop in renew() in case of keywords from sleep()

3.6.6 (04/18/2021)
------------------
- replace repeated .lower() with a variable

3.6.7 (04/19/2021)
------------------
- FEATURE::Jarvis can now get the public IP address along with connection SSID for potential remote connections through TCP

3.6.8 (04/22/2021)
------------------
- execute command instead of checking output and hide stderr

3.6.9 (04/22/2021)
------------------
- fix ip getting picked incorrectly

3.7.0 (04/23/2021)
------------------
- suppress console output that were missed earlier

3.7.1 (04/24/2021)
------------------
- place_holder::filter methods that have only one worded elements

3.7.2 (04/24/2021)
------------------
- place_holder::describe each method before migrating to static

3.7.3 (04/24/2021)
------------------
- switch to static methods to reduce memory usage
- because python doesn't have to instantiate a bound-method for each object instantiated

3.7.4 (04/24/2021)
------------------
- remove unnecessary variable declaration

3.7.5 (04/26/2021)
------------------
- FEATURE::Jarvis can now enable or disable personal cloud in a much secured way

3.7.6 (04/27/2021)
------------------
- FEATURE::Jarvis can now change the smart light colors

3.7.7 (04/28/2021)
------------------
- add some badges and update runbook

3.7.8 (04/28/2021)
------------------
- dump unrecognized data to yaml file prior regardless of google results' status

3.7.9 (04/28/2021)
------------------
- dump unrecognized data to training_data.yaml in a thread to save response time

3.8.0 (04/28/2021)
------------------
- FEATURE::Jarvis can now store your location info as a yaml file and reuse it
- This avoids too many calls to pyicloud library and reduces notification on apple devices

3.8.1 (04/28/2021)
------------------
- bring back long lost volume controller command line utility for windows

3.8.2 (04/28/2021)
------------------
- FEATURE::Jarvis can now track the modified time of location.yaml and keep updating it every 72 hours
- reduce threshold

3.8.3 (04/29/2021)
------------------
- FEATURE::Jarvis can now trigger ngrok to open a tunnel for personal cloud
- Avoids the risk of always having a port open and manually enabling ngrok

3.8.4 (04/30/2021)
------------------
- reformat lights.py

3.8.5 (04/30/2021)
------------------
- log function name, line number and log level, default log level to FATAL, ERROR and CRITICAL

3.8.6 (04/30/2021)
------------------
- change datetime format in logger.py

3.8.7 (04/30/2021)
------------------
- include 'if not' for walrus operators, store root password a primary variable

3.8.8 (04/30/2021)
------------------
- kill ngrok process and delete repo during disable, personal_cloud setup runs simultaneously

3.8.9 (04/30/2021)
------------------
- fix logger level to be more accurate

3.9.0 (04/30/2021)
------------------
- FEATURE::Jarvis can now mount and unmount a volume if the volume is connected

3.9.1 (04/30/2021)
------------------
- FEATURE::Jarvis can dynamically choose an allowed TCP port that isn't used

3.9.2 (05/04/2021)
------------------
- Use walrus operator to reduce variable assignment, catch connection error, remove location.yaml only if found

3.9.3 (05/04/2021)
------------------
- Logger to log in a dedicated directory for easy research

3.9.4 (05/19/2021)
------------------
- shuffle imports to specifics

3.9.5 (05/20/2021)
------------------
- remove hard check for keyword and increase threshold

3.9.6 (05/20/2021)
------------------
- remove defined sleep time for events while triggering personal cloud

3.9.7 (05/21/2021)
------------------
- reload logging module before using it - fixes intermittent issues with logger

3.9.8 (05/21/2021)
------------------
- FEATURE::Jarvis scans localhost devices for IP to avoid outdated IPs in ENV VARs

3.9.9 (05/21/2021)
------------------
- FEATURE::Jarvis can now fix old creds in aws and log outdated env vars
- automate client key process in TV features

4.0.0 (05/22/2021)
------------------
- check devices connected before using IPs
- update requirements and doc strings
- update README.md
- update tv_connect.mp3

4.0.1 (05/22/2021)
------------------
- remove mandatory sleep time

4.0.2 (05/23/2021)
------------------
- retain socket timeout at 30 seconds and reduce recursion limit

4.0.3 (05/23/2021)
------------------
- remove unnecessary calls to aws and use ip scanner instead
- add bedroom lights
- handle exception with arp command

4.0.4 (05/23/2021)
------------------
- reduce redundancy on AWSClients

4.0.5 (05/26/2021)
------------------
- fix intermittent index errors in meetings, set timeout to read outlook

4.0.6 (06/06/2021)
------------------
- FEATURE::Jarvis can now alter brightness of lights
- Remove threading for functions taking multiple args
- Catch TimeoutError on offline_communicator
- Fix tonight to goodnight in wake up messages

4.0.7 (06/13/2021)
------------------
- fix occasional threadtimeouterror
- respond only to Jarvis

4.0.8 (06/13/2021)
------------------
- follow coding standards mentioned in README.md

4.0.9 (06/13/2021)
------------------
- update function and method arguments to specific datatype
- update .gitignore

4.1.0 (06/13/2021)
------------------
- onboard sphinx docs

4.1.1 (06/13/2021)
------------------
- format doc strings for bulleted lists

4.1.2 (06/14/2021)
------------------
- change docs theme and add new classes

4.1.3 (06/14/2021)
------------------
- split modules in table of contents

4.1.4 (06/14/2021)
------------------
- change temperature.py to class module and update docs

4.1.5 (06/23/2021)
------------------
- update README.md

4.1.6 (06/23/2021)
------------------
- call class instance instead of reusing class name

4.1.7 (06/24/2021)
------------------
- Lock screen when said good night
- Notify when parameters are updated
- Add new mp3 when tv ip scan initiates
- Update README.md and docs

4.1.8 (06/24/2021)
------------------
- rename apple scripts and move tv notifications to indicators

4.1.9 (06/24/2021)
------------------
- FEATURE::Jarvis can now read the calendar too

4.2.0 (06/25/2021)
------------------
- Solve wait time on meetings
- Fix bug that was breaking meetings
- Update .gitignore and docs

4.2.1 (06/25/2021)
------------------
- Maintain docs pattern throughout

4.2.2 (06/25/2021)
------------------
- purge old log files during start up, update docs

4.2.3 (06/26/2021)
------------------
- bug fixes on meetings and add more info to logging

4.2.4 (06/26/2021)
------------------
- fix some misinterpretations and use wake_up2 once again

4.2.5 (06/26/2021)
------------------
- Read/create params.json to get credentials locally

4.2.6 (06/27/2021)
------------------
- Add hinting and return type for docs
- Fix logs directory setup for docs
- Increase volume during alarm and revert after 60 seconds

4.2.7 (06/27/2021)
------------------
- store empty dict if tv_client_key is None
- params.json -> credentials.json
- Run indicators in a Thread
- Update .gitignore
- Update docs

4.2.8 (06/29/2021)
------------------
- Fix typo, missing not 'meetings' file in path.isfile

4.2.9 (07/02/2021)
------------------
- Use pick module to locate the right device
- Increase docs page width.
- Update <code> in docstrings.
- Specify Notes and See Also sections in docs.

4.3.0 (07/02/2021)
------------------
- Remove theme.css as we are using html_theme_options in conf.py

4.3.1 (07/02/2021)
------------------
- Say a message when a device is asked to choose.
- More additions on docs

4.3.2 (07/02/2021)
------------------
- Add voice-controlled device selector using html display
- Bug fixes
- Update docs

4.3.3 (07/02/2021)
------------------
- Fix for hostnames carrying .local at the end

4.3.4 (07/02/2021)
------------------
- bug fix on devices.html and update .gitignore

4.3.5 (07/10/2021)
------------------
- add main module for ip scanner

4.3.6 (07/10/2021)
------------------
- Add more badges

4.3.7 (07/10/2021)
------------------
- Have one static file for alarm
- Update doc strings

4.3.8 (07/10/2021)
------------------
- Add and update list comprehensions

4.3.9 (07/11/2021)
------------------
- Fail proofing and adapt changes in personal_cloud
- Update logger.py to new log name
- Add hyperlinks in docstrings
- Modify main module in ip_scanner.py

4.4.0 (07/12/2021)
------------------
- Remove volume functionality for PersonalCloud
- Check if volume exists
- Update docs and README.md

4.4.1 (07/18/2021)
------------------
- Modify terminating PIDs for PersonalCloud
- Quote env var for personal_cloud_host
- Update docs

4.4.2 (07/22/2021)
------------------
- Add FaceRecognition setup for Windows
- Ignore dot (.) files within `train` directory
- Update installs_windows.sh
- Move appscript imports to PersonalCloud to avoid import errors on windows
- Fix filename for logs

4.4.3 (07/23/2021)
------------------
- Setup github actions for docs

4.4.4 (07/23/2021)
------------------
- Sunset emailer.py and use `gmail-connector` instead
- Disable logging for imported modules
- Setup github actions for docs
- Update installs.sh and installs_windows.sh
- Update docs

4.4.5 (07/23/2021)
------------------
- Add windows support deprecation notice and dev stats

4.4.6 (07/23/2021)
------------------
- Add markdown support for sphinx documentation

4.4.7 (07/23/2021)
------------------
- Add missed source files

4.4.8 (07/25/2021)
------------------
- Remove `place_holder` variables used only for recursion
- Update installs.sh, alarm.py and docs

4.4.9 (07/28/2021)
------------------
- Windows Support Deprecated

4.5.0 (07/31/2021)
------------------
- FEATURE::Jarvis uses `FastAPI` for offline request
- Updated docs
- Remove unwanted references
- Reduce thread count on google home connections

4.5.1 (08/01/2021)
------------------
- Update `code-block` and `hyperlinks`
- Undo the unspecified changes done on `calendar.scpt` by ScriptEditor

4.5.2 (08/02/2021)
------------------
- Encode and decode the passphrase for offline comm
- Trigger uvicorn the right way
- Handle RuntimeError in offline comm
- Default new lines in notify()
- Add credentials.py to .gitignore

4.5.3 (08/02/2021)
------------------
- Use `.env` to load config and remove all references to `AWS`
- Add `env vars` usage in README.md
- Remove unnecessary .py files for credentials.
- Sort the way credentials are being set when rotated.

4.5.4 (08/02/2021)
------------------
- Split active listener into a dedicated function to improve response time
- Beta test - Let Jarvis run until stopped
- Some other sanity clean up

4.5.5 (08/02/2021)
------------------
- Handle `ConnectionResetError` from tv_controls.py
- Change logging format and add more loggers

4.5.6 (08/03/2021)
------------------
- Update doc strings and `codify` references

4.5.7 (08/05/2021)
------------------
- Update `__main__` functions, `logger` info and `README.md`

4.5.8 (08/07/2021)
------------------
- Add an `EndpointFilter` to suppress `/docs` logs from `Access` logs

4.5.9 (08/07/2021)
------------------
- Add a `morning` method for auto alarms on weekdays at `7:00 AM`
- Reduce `regex` and variable usage
- Add a new badge to README.md

4.6.0 (08/08/2021)
------------------
- Run `meetings()` in `time_travel()` on weekdays
- Change variables and method names

4.6.1 (08/09/2021)
------------------
- Reduce redundancy to avoid multiple listeners
- Raise `KeyboardInterrupt` instead of dupe methods
- Update docs from previous changes

4.6.2 (08/15/2021)
------------------
- Remove `STATUS` and replace with `STOPPER` instead
- Restart in case of `RuntimeError`
- No long messages when heard `Good Night`
- Call `celebrate()` instead of assigning to a variable
- Increase `seconds` on `morning()` to 10
- Remove `stop` from stopping words

4.6.3 (08/16/2021)
------------------
- Bug fix on repeated ack message
- Remove unnecessary line breaks in docstrings
- Split functions wrapped within other functions
- Update docs

4.6.4 (08/18/2021)
------------------
- Move `opencv` to module level import

- Logging suppression has to happen before cv2 module is imported

4.6.5 (08/25/2021)
------------------
- Avoid listing directory to check file presence
- Change log file only once per day
- Add wildcards during start of log file
- Set an env var during pre-commit to avoid wildcard when pre-commit is run
- Handle exception with WolframAlpha

4.6.6 (08/25/2021)
------------------
- Remove empty line at start of `logFile`

4.6.7 (08/28/2021)
------------------
- Perform offline request despite `RuntimeError`
- Change log format from 24h to 12h
- Add timezone conversion for test logging
- Add a feature to restart quietly in case of `RuntimeError`
- Update docstrings

4.6.8 (08/28/2021)
------------------
- FEATURE::Jarvis API can now send the response of offline commands
- Write response for offline_comm in a file
- Fix origin regex for ngrok
- Do not send offline response via SMS

4.6.9 (08/29/2021)
------------------
- FEATURE::Jarvis API will now have conditions to allow non-interactive keywords via API calls
- Remove all global variables and use dict instead
- Split controller away from API as a dedicated module
- Set and unset env var for called_by_offline so functions can avoid speaker.runAndWait

4.7.0 (08/29/2021)
------------------
- Add docstrings from `__init__` methods
- Don't wait for response from Jarvis when restarted offline

4.7.1 (08/30/2021)
------------------
- Fix bug on telling meetings when not needed
- Fix bug on warm_lights
- Fix bug when restart offered as offline command
- Create thread for deleting offline_request file
- Rename methods and remove a print statement
- Update docs and .gitignore

4.7.2 (09/12/2021)
------------------
- FEATURE::Jarvis can now perform quick restart in case of an error
- Load temporary env vars when restarted because of errors
- Create a _static folder if not available during pre-commit
- Remove completed todos
- Handle CommandErrors
- Upgrade sphinx version
- Update docstrings
- Add a todo

4.7.3 (09/13/2021)
------------------
- Use `os.path.exists` instead of `os.listdir`
- Perform quick restart on demand
- Don't run certain threads if pre-req is unavailable to avoid exception handler
- Fix SNS to SMS
- Play an acknowledgement beep when activator is invoked

4.7.4 (09/13/2021)
------------------
- TRIAL::Replace `critical` level to `info` level logging

4.7.5 (09/13/2021)
------------------
- Modify the way `activator` initiates, once invoked

4.7.6 (09/20/2021)
------------------
- FEATURE::Hook up `Jarvis` with `vpn-server` and `offline_communicator`
- Update keywords.py, README.md and other docstrings

4.7.7 (09/21/2021)
------------------
- Check for current instance of vpn before triggering a new one

4.7.8 (09/22/2021)
------------------
- Add exception handler and retry logic for vpn-server
- Get tv_mac while IPScan and remove arp command

4.7.9 (09/23/2021)
------------------
- Add an env var `ENV: Jarvis` so, `vpn-server` can log the details in a log file
- Pull latest from git for vpn-server

4.8.0 (09/23/2021)
------------------
- Simplify `vpn_server` and add `quiet` flag to git command
- Remove apple script to perform vpn server operations

4.8.1 (10/04/2021)
------------------
- Create `logs` dir on demand
- Refactor installs.sh
- Fix a bug with greet_check

4.8.2 (10/04/2021)
------------------
- Create `logs` dir on demand
- Refactor installs.sh

4.8.3 (10/04/2021)
------------------
- Use porcupine module to detect hotword and startup
- Remove `sentry_mode` and update all references
- Add a startup tone for indication (similar to google home)
- Change some variable names

4.8.4 (10/06/2021)
------------------
- Don't fail on missing music files
- Don't fail on current time when places aren't valid
- Change logger level for porcupine closure

4.8.5 (10/06/2021)
------------------
- Launch Calendar or Outlook upon startup to read meetings

4.8.6 (10/07/2021)
------------------
- Return when incorrect wake up by deep neural networks
- Add docstrings for should_return flag
- Rename wake up engine variable

4.8.7 (10/07/2021)
------------------
- Take sensitivity as an argument or env var or default: 0.5
- Return delete item with category from database.py
- strip away empty spaces and new lines while reading emails

4.8.8 (10/07/2021)
------------------
- simplify installation process

4.8.9 (10/08/2021)
------------------
- Create a dedicated thread to trigger multithreading for lights
- Remove sensitivity from being passed as arg
- Add wait time when offline request and response files are found
- Include datetime in test message from offline communicator
- Include timezone in location.yaml

4.9.0 (10/08/2021)
------------------
- Convert timezone after writing to yaml

4.9.1 (10/09/2021)
------------------
- Fix thread conflict when restarting from offline
- Avoid re-initialization on database class

4.9.2 (10/10/2021)
------------------
- Extend `should_return` flag usage to avoid Jarivs picking up background voices
- Pass keyword arguments instead of unnamed ones
- Make timeout and phrase_limit mandatory
- Fix bug on Database deleter

4.9.3 (10/14/2021)
------------------
- Make `tv` variable as global to handle controls after shutdown

4.9.4 (10/14/2021)
------------------
- auto upload to pypi when tagged a release version