Giter Club home page Giter Club logo

ticktick-kt's Introduction

Build Status

TickTick REST API Kotlin bindings

Kotlin binding for TickTick REST API using Ktor Http Client and Gson as Json marshaller.

Example

runBlocking {
    val permissions = TickTickServiceAuthenticator.Permission.entries
    val config = HttpTickTickServiceAuthenticator.ApplicationConfig(
        redirectUrl = "http://localhost:8888",
        clientId = System.getenv("TICKTICK_API_CLIENT_ID"),
        clientSecret = System.getenv("TICKTICK_API_CLIENT_SECRET"),
    )
    val authenticator: TickTickServiceAuthenticator = HttpTickTickServiceAuthenticator(config)

    val code = authenticator.authorize(permissions) { url ->
        withContext(Dispatchers.IO) {
            Desktop.getDesktop().browse(URI.create(url))
        }
    }

    val token = authenticator.getToken(code, permissions)

    val httpClient = HttpClient(CIO) {
        CurlUserAgent()
        install(ContentNegotiation) {
            gson()
        }
        install(Auth) {
            bearer {
                sendWithoutRequest { true }
                loadTokens {
                    BearerTokens(token.accessToken, "")
                }
            }
        }
        defaultRequest {
            url("https://api.ticktick.com")
        }
    }
    val tickTickService: TickTickService = HttpTickTickService(httpClient)

    val projects = tickTickService.getProjects()
    if (projects.isEmpty()) {
        println("No project found, creating one")
        val project = tickTickService.createProject(ProjectCreationRequest("My whole new project"))
        println("Project ${project.name} (#${project.id}) created")
    } else {
        projects.sortedBy(Project::sortOrder).forEach { project ->
            println("Tasks of project ${project.name} (#${project.id})")
            tickTickService.getProjectData(project.id).tasks
                .sortedWith(compareBy(Task::status, Task::sortOrder))
                .forEach { task ->
                    println("\t${task.status} Task: ${task.title} ${task.priority} (#${task.id})")
                    task.items
                        ?.sortedWith(compareBy(ChecklistItem::status, ChecklistItem::sortOrder))
                        ?.forEach { checklistItem ->
                            println("\t\t${checklistItem.status} ${checklistItem.title} (#${checklistItem.id})")
                        }
                }
        }
    }
}

ticktick-kt's People

Contributors

opatry avatar

Stargazers

 avatar  avatar

Watchers

 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.