github.com/qjfoidnh/BaiduPCS-Go@v0.0.0-20231011165705-caa18a3765f3/baidupcs/pcserror/panerrorinfo.go (about)

     1  package pcserror
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  type (
     8  	// PanErrorInfo 网盘网页的api错误
     9  	PanErrorInfo struct {
    10  		Operation string
    11  		ErrType   ErrType
    12  		Err       error
    13  		ErrNo     int `json:"errno"`
    14  	}
    15  )
    16  
    17  // NewPanErrorInfo 提供operation操作名称, 返回 *PanErrorInfo
    18  func NewPanErrorInfo(operation string) *PanErrorInfo {
    19  	return &PanErrorInfo{
    20  		Operation: operation,
    21  		ErrType:   ErrorTypeNoError,
    22  	}
    23  }
    24  
    25  // SetJSONError 设置JSON错误
    26  func (pane *PanErrorInfo) SetJSONError(err error) {
    27  	pane.ErrType = ErrTypeJSONParseError
    28  	pane.Err = err
    29  }
    30  
    31  // SetNetError 设置网络错误
    32  func (pane *PanErrorInfo) SetNetError(err error) {
    33  	pane.ErrType = ErrTypeNetError
    34  	pane.Err = err
    35  }
    36  
    37  // SetRemoteError 设置远端服务器错误
    38  func (pane *PanErrorInfo) SetRemoteError() {
    39  	pane.ErrType = ErrTypeRemoteError
    40  }
    41  
    42  // GetOperation 获取操作
    43  func (pane *PanErrorInfo) GetOperation() string {
    44  	return pane.Operation
    45  }
    46  
    47  // GetErrType 获取错误类型
    48  func (pane *PanErrorInfo) GetErrType() ErrType {
    49  	return pane.ErrType
    50  }
    51  
    52  // GetRemoteErrCode 获取远端服务器错误代码
    53  func (pane *PanErrorInfo) GetRemoteErrCode() int {
    54  	return pane.ErrNo
    55  }
    56  
    57  // GetRemoteErrMsg 获取远端服务器错误消息
    58  func (pane *PanErrorInfo) GetRemoteErrMsg() string {
    59  	return FindPanErr(pane.ErrNo)
    60  }
    61  
    62  // GetError 获取原始错误
    63  func (pane *PanErrorInfo) GetError() error {
    64  	return pane.Err
    65  }
    66  
    67  func (pane *PanErrorInfo) Error() string {
    68  	if pane.Operation == "" {
    69  		if pane.Err != nil {
    70  			return pane.Err.Error()
    71  		}
    72  		return StrSuccess
    73  	}
    74  
    75  	switch pane.ErrType {
    76  	case ErrTypeInternalError:
    77  		return fmt.Sprintf("%s: %s, %s", pane.Operation, StrInternalError, pane.Err)
    78  	case ErrTypeJSONParseError:
    79  		return fmt.Sprintf("%s: %s, %s", pane.Operation, StrJSONParseError, pane.Err)
    80  	case ErrTypeNetError:
    81  		return fmt.Sprintf("%s: %s, %s", pane.Operation, StrNetError, pane.Err)
    82  	case ErrTypeRemoteError:
    83  		if pane.ErrNo == 0 {
    84  			return fmt.Sprintf("%s: %s", pane.Operation, StrSuccess)
    85  		}
    86  
    87  		errmsg := FindPanErr(pane.ErrNo)
    88  		return fmt.Sprintf("%s: 遇到错误, %s, 代码: %d, 消息: %s", pane.Operation, StrRemoteError, pane.ErrNo, errmsg)
    89  	case ErrTypeOthers:
    90  		if pane.Err == nil {
    91  			return fmt.Sprintf("%s: %s", pane.Operation, StrSuccess)
    92  		}
    93  
    94  		return fmt.Sprintf("%s, 遇到错误, %s", pane.Operation, pane.Err)
    95  	default:
    96  		panic("panerrorinfo: unknown ErrType")
    97  	}
    98  }
    99  
   100  // FindPanErr 根据 ErrNo, 解析网盘错误信息
   101  func FindPanErr(errno int) (errmsg string) {
   102  	switch errno {
   103  	case 0:
   104  		return StrSuccess
   105  	case -1:
   106  		return "由于您分享了违反相关法律法规的文件,分享功能已被禁用,之前分享出去的文件不受影响。"
   107  	case -2:
   108  		return "用户不存在,请刷新页面后重试"
   109  	case -3:
   110  		return "文件不存在,请刷新页面后重试"
   111  	case -4:
   112  		return "登录信息有误,请重新登录试试"
   113  	case -5:
   114  		return "host_key和user_key无效"
   115  	case -6:
   116  		return "请重新登录"
   117  	case -7:
   118  		return "该分享已删除或已取消"
   119  	case -8:
   120  		return "已存在同名文件"
   121  	case -9:
   122  		return "文件不存在"
   123  	case -10:
   124  		return "分享外链已经达到最大上限100000条,不能再次分享"
   125  	case -11:
   126  		return "验证cookie无效"
   127  	case -12:
   128  		return "访问密码错误"
   129  	case -14:
   130  		return "对不起,短信分享每天限制20条,你今天已经分享完,请明天再来分享吧!"
   131  	case -15:
   132  		return "对不起,邮件分享每天限制20封,你今天已经分享完,请明天再来分享吧!"
   133  	case -16:
   134  		return "对不起,该文件已经限制分享!"
   135  	case -17:
   136  		return "文件分享超过限制"
   137  	case -19:
   138  		return "需要输入验证码"
   139  	case -21:
   140  		return "分享已取消或分享信息无效"
   141  	case -30:
   142  		return "文件已存在"
   143  	case -31:
   144  		return "文件保存失败"
   145  	case -33:
   146  		return "一次支持操作999个,减点试试吧"
   147  	case -62:
   148  		return "可能需要输入验证码"
   149  	case -70:
   150  		return "你分享的文件中包含病毒或疑似病毒,为了你和他人的数据安全,换个文件分享吧"
   151  	case 2:
   152  		return "请稍后再试, 或更换保存路径"
   153  	case 3:
   154  		return "未登录或帐号无效"
   155  	case 4:
   156  		return "存储好像出问题了,请稍候再试"
   157  	case 105:
   158  		return "啊哦,链接错误没找到文件,请打开正确的分享链接"
   159  	case 108:
   160  		return "文件名有敏感词,优化一下吧"
   161  	case 110:
   162  		return "分享次数超出限制,可以到“我的分享”中查看已分享的文件链接"
   163  	case 112:
   164  		return "页面已过期,请刷新后重试"
   165  	case 113:
   166  		return "签名错误"
   167  	case 114:
   168  		return "当前任务不存在,保存失败"
   169  	case 115:
   170  		return "该文件禁止分享"
   171  	case 132:
   172  		return "您的帐号可能存在安全风险,为了确保为您本人操作,请先进行安全验证。"
   173  	case 9019:
   174  		return "accesstoken未设置或过期, 请使用setastoken命令设置`"
   175  	default:
   176  		return "未知错误"
   177  	}
   178  }