File size: 1,788 Bytes
81205f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package transfer

import (
	"errors"
	"fmt"

	"github.com/BioHazard786/Warpdrop/cli/internal/ui"
)

var (
	ErrPeerDisconnected  = errors.New("peer disconnected")
	ErrSignalingError    = errors.New("signaling server error")
	ErrTimeout           = errors.New("timeout")
	ErrChannelClosed     = errors.New("channel closed")
	ErrChannelNotOpen    = errors.New("channel not open")
	ErrTransferDeclined  = errors.New("receiver declined the transfer")
	ErrTransferCancelled = errors.New("transfer cancelled by user")
	ErrBufferTimeout     = errors.New("buffer drain timeout")
	ErrInvalidFile       = errors.New("invalid file")
	ErrFilenameMismatch  = errors.New("filename mismatch")
	ErrUnexpectedSignal  = errors.New("unexpected signal type")
	ErrMetadataFailed    = errors.New("failed to process metadata")
	ErrConnectionFailed  = errors.New("connection failed")
	ErrChannelsNotReady  = errors.New("channels not ready")
)

type TransferError struct {
	Op      string
	File    string
	Err     error
	Details string
}

func (e *TransferError) Error() string {
	if e.File != "" {
		return fmt.Sprintf("%s %s: %v", e.Op, e.File, e.Err)
	}
	if e.Details != "" {
		return fmt.Sprintf("%s: %v (%s)", e.Op, e.Err, e.Details)
	}
	return fmt.Sprintf("%s: %v", e.Op, e.Err)
}

func (e *TransferError) Unwrap() error {
	return e.Err
}

func (e *TransferError) Print() {
	ui.PrintError(e.Error())
}

func NewError(op string, err error) *TransferError {
	return &TransferError{Op: op, Err: err}
}

func NewFileError(op, file string, err error) *TransferError {
	return &TransferError{Op: op, File: file, Err: err}
}

func WrapError(op string, err error, details string) *TransferError {
	return &TransferError{Op: op, Err: err, Details: details}
}

func PrintErr(err error) {
	ui.PrintError(err.Error())
}