Pith - stave
stave/app/src/main/kotlin/com/vgmlr/stave/StaveText.kt [1.9 kb]
Modified: 20:14:52 158 026 (24 Aug 026)
0 Days Ago
package com.vgmlr.stave

import android.content.Context
import android.content.Intent

object StaveText {
    
    fun format(trip: StaveTrip, entries: List<StaveEntry>): String {
        val rows = entries.asReversed()

        val idx = rows.indices.map { (it + 1).toString() }
        val time = rows.map { it.stavetime }
        val cost = rows.map { money(it.cost) }
        val cat = rows.map { it.label }

        val wIdx = idx.maxOfOrNull { it.length } ?: 0
        val wTime = time.maxOfOrNull { it.length } ?: 0
        val wCost = cost.maxOfOrNull { it.length } ?: 0
        val wCat = cat.maxOfOrNull { it.length } ?: 0

        return buildString {
            append("Stave: ").append(trip.name).append('\n')
            append("Total: ").append(money(rows.sumOf { it.cost })).append('\n')
            if (rows.isNotEmpty()) append('\n')

            rows.indices.forEach { i ->
                val line = buildString {
                    append(idx[i].padStart(wIdx)).append(GAP)
                    append(time[i].padEnd(wTime)).append(GAP)
                    append(cost[i].padStart(wCost)).append(GAP)
                    append(cat[i].padEnd(wCat)).append(GAP)
                    append(rows[i].location)
                }
                append(line.trimEnd()).append('\n')
            }
        }
    }

    fun fileName(trip: StaveTrip): String =
        "stave_${slug(trip.name)}_${StaveOTCClock.getFileNameTimestamp()}.txt"

    private fun slug(name: String): String =
        name.trim().replace(Regex("[^A-Za-z0-9]+"), "-").trim('-').ifBlank { "trip" }

    private const val GAP = "  "
}

fun shareStave(context: Context, trip: StaveTrip, entries: List<StaveEntry>) {
    val send = Intent(Intent.ACTION_SEND).apply {
        type = "text/plain"
        putExtra(Intent.EXTRA_SUBJECT, trip.name)
        putExtra(Intent.EXTRA_TEXT, StaveText.format(trip, entries))
    }
    context.startActivity(Intent.createChooser(send, null))
}
Updates
Stave - Android 158.026
Kerf - Android 157.026
Kiln - Android 157.026
Wedge - Android 156.026
Whittle - Linux 155.026

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)
0.00161
257,425 (+35)