Skip to content

Commit

Permalink
fix LinkOrCopy
Browse files Browse the repository at this point in the history
  • Loading branch information
tgulacsi committed Aug 12, 2023
1 parent 5a7c092 commit 6bf2154
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 18 deletions.
25 changes: 20 additions & 5 deletions converter/pdf.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package converter

import (
"bytes"
"context"
"crypto/sha256"
"encoding/base64"
"encoding/gob"
Expand All @@ -21,10 +22,8 @@ import (
"sync"
"unicode/utf16"

"context"

"github.com/google/renameio/v2"
"github.com/tgulacsi/go/pdf"
"github.com/tgulacsi/go/temp"
)

var popplerOk = map[string]string{"pdfinfo": "", "pdfseparate": "", "pdfunite": ""}
Expand Down Expand Up @@ -286,11 +285,27 @@ func PdfSplit(ctx context.Context, srcfn string, pages []uint16) (filenames []st

// PdfMerge merges pdf files into destfn
func PdfMerge(ctx context.Context, destfn string, filenames ...string) error {
logger.Debug("PdfMerge", "filenames", len(filenames))
if len(filenames) == 0 {
return errors.New("filenames required")
} else if len(filenames) == 1 {
os.Remove(destfn)
return temp.LinkOrCopy(filenames[0], destfn)
if err := os.Link(filenames[0], destfn); err == nil {
return nil
}
sfh, err := os.Open(filenames[0])
if err != nil {
return err
}
defer sfh.Close()
dfh, err := renameio.NewPendingFile(destfn)
if err != nil {
return err
}
defer dfh.Close()
if _, err = io.Copy(dfh, sfh); err != nil {
return err
}
return dfh.CloseAtomicallyReplace()
}
err := pdfMerge(ctx, destfn, filenames...)
if err == nil {
Expand Down
3 changes: 1 addition & 2 deletions converter/text.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
package converter

import (
"io"

"context"
"io"

"github.com/tgulacsi/go/text"
)
Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ func Main() error {
if err := appCmd.Parse(os.Args[1:]); err != nil {
return err
}
logger = zlog.NewLogger(zl).SLog()
converter.SetLogger(logger)

var closeLogfile func() error
Expand Down
15 changes: 8 additions & 7 deletions pdfmerge.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"context"
"fmt"
"io"
"log/slog"
"net/http"
"os"
"sort"
Expand All @@ -26,10 +27,10 @@ var pdfMergeServer = kithttp.NewServer(
)

func pdfMergeDecode(ctx context.Context, r *http.Request) (interface{}, error) {
logger := logger.With("fn", "pdfMergeDecode")
logger := logger.With(slog.String("fn", "pdfMergeDecode"))
inputs, err := getRequestFiles(r)
if err != nil {
logger.Error( "getRequestFiles", "error", err)
logger.Error("getRequestFiles", "error", err)
return nil, err
}
req := pdfMergeRequest{Inputs: inputs}
Expand Down Expand Up @@ -80,7 +81,7 @@ func pdfMergeEP(ctx context.Context, request interface{}) (response interface{},
for i, f := range req.Inputs {
tfh, err := readerToFile(f.ReadCloser, f.Filename)
if err != nil {
logger.Error( "readerToFile", "file", f.Filename, "error", err)
logger.Error("readerToFile", "file", f.Filename, "error", err)
return nil, fmt.Errorf("error saving %q: %w", f.Filename, err)
}
tbd = append(tbd, tfh.Cleanup)
Expand All @@ -94,18 +95,18 @@ func pdfMergeEP(ctx context.Context, request interface{}) (response interface{},

dst, err := tempFilename("pdfmerge-")
if err != nil {
logger.Error( "tempFilename", "error", err)
logger.Error("tempFilename", "error", err)
return nil, err
}
defer os.Remove(dst)
logger.Info("PdfMerge", "dst", dst, "filenames", filenames)
if err = converter.PdfMerge(ctx, dst, filenames...); err != nil {
logger.Error( "PdfMerge", "dst", dst, "filenames", filenames, "error", err)
logger.Error("PdfMerge", "dst", dst, "filenames", filenames, "error", err)
return nil, err
}
f, err := os.Open(dst)
if err != nil {
logger.Error( "Open(dst)", "dst", dst, "error", err)
logger.Error("Open(dst)", "dst", dst, "error", err)
return nil, err
}
return f, nil
Expand All @@ -117,7 +118,7 @@ func pdfMergeEncode(ctx context.Context, w http.ResponseWriter, response interfa
Stat() (os.FileInfo, error)
}); ok {
if fi, err := f.Stat(); err != nil {
logger.Error( "response file Stat", "error", err)
logger.Error("response file Stat", "error", err)
} else {
w.Header().Set("Content-Length", fmt.Sprintf("%d", fi.Size()))
}
Expand Down
8 changes: 4 additions & 4 deletions server.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,12 @@ func prepareContext(ctx context.Context, r *http.Request) context.Context {
ctx = SetRequestID(ctx, "")
lgr := getLogger(ctx)
lgr = lgr.With(
"reqID", GetRequestID(ctx),
"path", r.URL.Path,
"method", r.Method,
slog.String("reqID", GetRequestID(ctx)),
slog.String("path", r.URL.Path),
slog.String("method", r.Method),
)
if host, _, err := net.SplitHostPort(r.RemoteAddr); err == nil {
lgr = lgr.With("ip", host)
lgr = lgr.With(slog.String("ip", host))
}
ctx = zlog.NewSContext(ctx, lgr)
logAccept(ctx, r)
Expand Down

0 comments on commit 6bf2154

Please sign in to comment.