123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- package utils
- import (
- "fmt"
- "sync"
- //"fmt"
- //"html"
- //"net/mail"
- "bytes"
- "os"
- "os/exec"
- "regexp"
- "time"
- //"reflect"
- "encoding/base64"
- "io/ioutil"
- "strings"
- "golang.org/x/net/html/charset"
- //"errors"
- //"strings"
- //"encoding/json"
- //"gopkg.in/mgo.v2"
- //"gopkg.in/mgo.v2/bson"
- //"git.gojus.com.br/eugeniucarvalho/gojus/shared"
- //"git.gojus.com.br/eugeniucarvalho/gojus/config"
- //"git.gojus.com.br/eugeniucarvalho/gojus/services"
- )
- type MutexCounter struct {
- Value int64
- m sync.Mutex
- }
- func (t *MutexCounter) Inc(inc int64) *MutexCounter {
- t.m.Lock()
- t.Value += inc
- t.m.Unlock()
- return t
- }
- func (t *MutexCounter) Dec(inc int64) *MutexCounter {
- t.m.Lock()
- t.Value -= inc
- t.m.Unlock()
- return t
- }
- func (t *MutexCounter) Eq(val int64) bool {
- return t.Value == val
- }
- func Now() int64 {
- return time.Now().Unix()
- }
- func ToUTF8(str, origEncoding string) string {
- byteReader := bytes.NewReader([]byte(str))
- reader, _ := charset.NewReaderLabel(origEncoding, byteReader)
- strBytes, _ := ioutil.ReadAll(reader)
- return string(strBytes)
- }
- func FileGetContents(filename string) (string, error) {
- b, err := ioutil.ReadFile(filename)
- if err != nil {
- return "", err
- }
- return string(b), nil
- }
- func FilePutContents(filename string, content string, perm os.FileMode) error {
- return FilePutContentsBytes(filename, []byte(content), perm)
- }
- func FilePutContentsBytes(filename string, content []byte, perm os.FileMode) error {
- var (
- err error
- f *os.File
- )
- if err = ioutil.WriteFile(filename, []byte(""), perm); err != nil {
- return err
- }
- if f, err = os.Create(filename); err != nil {
- return err
- }
- defer f.Close()
- _, err = f.Write(content)
- return err
- }
- func RemoveFile(file string) error {
- if err := os.Remove(file); err != nil {
- return err
- }
- return nil
- }
- func Encode(delimiter string, values ...string) string {
- return ToBase64(strings.Join(values, delimiter))
- }
- func ToBase64(s string) string {
- return base64.StdEncoding.EncodeToString([]byte(s))
- }
- func FromBase64(value string) (string, error) {
- dec, err := base64.StdEncoding.DecodeString(value)
- return string(dec), err
- }
- func Decode(delimiter, value string) ([]string, error) {
- decoded, err := FromBase64(value)
- if err != nil {
- return []string{}, err
- }
- return strings.Split(string(decoded), delimiter), nil
- }
- type Thumbnail struct {
- Resolution string
- // Adiciona o arquivo de entrada
- // path e o caminho do arquivo e pages sao as paginas a serem convertidas
- // pages = "[0]" - representa a pagina 1
- // pages = "" - representa todas as paginas
- Input string
- Output string
- InExt string
- Page string
- }
- func NewThumbnail() *Thumbnail {
- t := &Thumbnail{}
- t.Resolution = "x300"
- return t
- }
- var (
- ThumbSoffice = regexp.MustCompile("(doc|ppt|pps|pot|xls|xlt|xlw|dot|csv|txt|rtf)(x|m)?")
- )
- func (t *Thumbnail) Gen() error {
- var err error
- if t.Input == "" {
- return fmt.Errorf("Input is empty")
- }
- if t.InExt == "" {
- // todo -- pegar a extensao do arquivo de entrada
- }
- cmd := ""
- remove := false
- // Converte alguns tipos de arquivo para a imagem para depois converter para thumbnail
- if ThumbSoffice.Match([]byte(strings.ToLower(t.InExt))) {
- //cmd = "convert -thumbnail %s -background white -alpha remove %s %s"
- cmd = "soffice --headless --convert-to png --outdir %s %s"
- index := strings.LastIndex(t.Output, "/")
- outputdir := t.Output[0:index]
- if err = Exec(fmt.Sprintf(cmd, outputdir, t.Input)); err != nil {
- return err
- }
- t.Input = t.Output
- // strings.Replace(t.Input, t.InExt, ".png", -1)
- fmt.Println("new input -", t.InExt, "-", t.Input)
- remove = true
- }
- // Cria o thumbnail
- cmd = "convert -thumbnail %s -background white -alpha remove %s %s"
- Exec(fmt.Sprintf(cmd, t.Resolution, t.Input+t.Page, t.Output))
- // Apaga o arquivo temporario gerado pela conversao intermediaria
- if remove {
- // RemoveFile(t.Input)
- }
- return nil
- }
- func Exec(cmd string) error {
- fmt.Println("Executando .. ", cmd)
- out, err := exec.Command("bash", "-c", cmd).Output()
- if err != nil {
- fmt.Println("error occured ", err.Error())
- return err
- }
- fmt.Println("out >> ", string(out))
- return err
- }
- /*
- func Push(slice interface{}, el interface{}, call func(interface{}) bool) {
- switch reflect.TypeOf(slice).Kind() {
- case reflect.Slice:
- s := reflect.ValueOf(t)
- push := true
- item := reflect.ValueOf(el).Elem()
- for i := 0; i < s.Len(); i++ {
- push = call(s. ,item)
- }
- if push {
- s = append(s, item)
- }
- }
- }
- */
|