Files
go-receipt-tracker/app/processor.go
2025-02-03 17:50:47 -05:00

117 lines
2.2 KiB
Go

package app
import (
"encoding/base64"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"git.savin.nyc/alex/go-receipt-tracker/models"
tele "gopkg.in/telebot.v4"
)
func Parse(c *tele.Context) error {
return nil
}
// parseReceipt .
func parseReceipt(j string) (*models.Receipt, error) {
var receipt *models.Receipt
if err := json.Unmarshal([]byte(j), &receipt); err != nil {
return nil, err
}
return receipt, nil
}
func imgType(i string) string {
if doesFileExist(i) {
bytes, err := os.ReadFile(i)
if err != nil {
log.Fatal(err)
}
// Determine the content type of the image file
mimeType := http.DetectContentType(bytes)
switch mimeType {
case "image/jpeg":
return "image/jpeg"
case "image/png":
return "image/png"
case "image/webp":
return "image/webp"
case "image/svg+xml":
return "image/svg+xml"
case "image/gif":
return "image/gif"
case "image/avif":
return "image/avif"
case "image/apng":
return "image/apng"
}
} else {
return ""
}
return ""
}
// readImage .
func readImage(i string) string {
if doesFileExist(i) {
bytes, err := os.ReadFile(i)
if err != nil {
log.Fatal(err)
}
// Prepend the appropriate URI scheme header depending
// on the MIME type
var base64Encoding string
// Append the base64 encoded output
base64Encoding += toBase64(bytes)
return base64Encoding
} else {
return ""
}
}
// toBase64 .
func toBase64(b []byte) string {
return base64.StdEncoding.EncodeToString(b)
}
// doesFileExist function to check if file exists
func doesFileExist(fileName string) bool {
_, error := os.Stat(fileName)
// check if error is "file not exists"
if os.IsNotExist(error) {
log.Printf("%v file does not exist\n", fileName)
return false
} else {
log.Printf("%v file exist\n", fileName)
return true
}
}
// imgType .
func (a App) imgType(fileName string) (string, error) {
f, err := os.Open(fileName)
if err != nil {
a.Log.Error("")
}
defer f.Close()
buff := make([]byte, 512) // docs tell that it take only first 512 bytes into consideration
if _, err = f.Read(buff); err != nil {
fmt.Println(err) // do something with that error
return "", err
}
return http.DetectContentType(buff), nil
}