All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.baulsupp.oksocial.output.util.kt Maven / Gradle / Ivy

The newest version!
package com.baulsupp.oksocial.output

import com.baulsupp.oksocial.output.process.exec
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.IO
import kotlinx.coroutines.async
import okio.BufferedSource
import okio.Sink
import okio.sink
import org.zeroturnaround.exec.stream.slf4j.Slf4jStream
import java.io.Console
import java.io.IOException
import java.util.Properties
import javax.activation.MimeType
import javax.activation.MimeTypeParseException

fun BufferedSource.writeToSink(out: Sink) {
  while (!this.exhausted()) {
    out.write(this.buffer, this.buffer.size)
    out.flush()
  }
}

val systemOut: Sink by lazy {
  System.out.sink()
}

val stdErrLogging = Slf4jStream.ofCaller().asInfo()!!

val isTerminal by lazy {
  System.console() != null
}

suspend fun Console.readPasswordString(prompt: String): String {
  return GlobalScope.async(Dispatchers.IO) {
    String(readPassword(prompt))
  }.await()
}

suspend fun Console.readString(prompt: String): String {
  return GlobalScope.async(Dispatchers.IO) {
    readLine(prompt)
  }.await()
}

suspend fun isInstalled(command: String): Boolean = if (isOSX) {
  exec("command", "-v", command).success
} else {
  exec("which", command).success
}

fun isMedia(mediaType: String): Boolean {
  return mediaType.startsWith("image/") || mediaType.endsWith("/pdf")
}

fun isAudio(mediaType: String): Boolean {
  return mediaType.startsWith("audio/")
}

fun getExtension(mediaType: String?): String = when (mediaType) {
  "image/jpeg" -> ".jpg"
  "image/gif" -> ".gif"
  "image/png" -> ".png"
  else -> ".data"
}

fun isCbor(mediaType: String): Boolean {
  return isMediaType(mediaType, "application/cbor") || mediaType
    .endsWith("+cbor")
}

fun isJson(mediaType: String): Boolean {
  return isMediaType(mediaType, "application/json", "text/json") || mediaType
    .endsWith("+json")
}

fun isMediaType(mediaType: String?, vararg types: String): Boolean {
  return try {
    if (mediaType == null) {
      return false
    }

    val t = MimeType(mediaType)

    types.any { t.match(it) }
  } catch (e: MimeTypeParseException) {
    false
  }
}

fun versionString(mainClass: Class<*>, propertiesFile: String): String {
  return try {
    val prop = Properties()
    val `in` = mainClass.getResourceAsStream(propertiesFile)
    prop.load(`in`)
    `in`.close()
    prop.getProperty("version")
  } catch (e: IOException) {
    throw AssertionError("Could not load $propertiesFile")
  }
}

val isOSX by lazy { System.getProperty("os.name").contains("OS X") }

val isLinux by lazy { System.getProperty("os.name").contains("Linux") }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy