Code Monkey home page Code Monkey logo

calendarist's Introduction

Calendarist

An app that fetch all tasks from Todoist and display a heat map calendar based on number of tasks due on each date.

The app was created as part of a practice to learn the VIPER architecture.

Todoist

The app rely on Todoist for its data. Thus, you will need to create a free account in order to use the it.

Note about API privacy

Since Todoist API currently do not allow non https:// url to be used as OAuth2 redirect URI, I have to redirect the flow to a file on my github page. This file simply forward everything back to the app. It is in no way tracking, collecting, or storing any sort of data anywhere at all.

Also, the test API key in older commit has already been reset and will no longer work.


Future Plans

I am currently in the middle of doing senior project so I might update this app later on.

As of now, the app work with basic use cases.

  • Better Error Handling Currently, error reporting/handling is very limited. Right now, every error generated from Todoist API is assumed to be network connection error. For example, if the user decided to revoke API access when logged in, the app will simply tell the user to check their Internet Connection and will required the user to manually log out and log back in again to re-request access.

  • Better VIPER Base Protocols I will look into using techniques like associatedtype to make the base protocols in my custom VIPER framework work better.

    • For example, the protocols could enforce the implementation of RWPView to contain a reference to the presentator which have to have a type of RWPViewOutput (or any of its subclass/implementaion).
    • RWPPresentator may also enforce the reference to view to be weak to avoid circular dependencies problem.
    • many more!
    • I also want to look into a way to apply Abstract classes concept in Swift. I know we can use protocol + extension to achieve similar things. But I still haven't figure out how to have an abstract subclass—say, for the UIViewController so we can implement life cycles functions such as viewDidLoad() to be passed to the presentator by default. This would reduce a lot of repeated code!
  • Better test coverage.

calendarist's People

Contributors

woodies11 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.