forked from BrianAllred/goydl
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathoption.go
156 lines (127 loc) · 3.52 KB
/
option.go
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
* @Author: brian.allred
* @Date: 2017-06-28 22:04:54
* @Last Modified by: brian.allred
* @Last Modified time: 2017-06-28 22:04:54
* Copyright (c) 2017-06-28 22:04:54 brian.allred
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package goydl
import (
"bytes"
"net"
"strconv"
"time"
)
// Option interface represents a CLI parameter that can be passed to youtube-dl
// The String method returns what would be passed to youtube-dl
type Option interface {
OptionString() string
}
type UintOption struct {
param string
Value uint
defaultValue uint
}
type StringOption struct {
param string
Value string
}
type IpOption struct {
param string
Value net.IP
}
type FileSizeRateOption struct {
param string
Value fileSizeRate
}
type TimeOption struct {
param string
Value time.Time
}
type IntOption struct {
param string
Value int
defaultValue int
}
type BoolOption struct {
param string
Value bool
defaultValue bool
}
type StringArrayOption struct {
param string
Values []string
}
func (stringArrOpt StringArrayOption) OptionString() string {
var buffer bytes.Buffer
if len(stringArrOpt.Values) > 0 {
for _, value := range stringArrOpt.Values {
buffer.WriteString(stringArrOpt.param + " " + value)
}
}
return buffer.String()
}
func (uintOpt UintOption) OptionString() string {
if uintOpt.Value != uintOpt.defaultValue {
return uintOpt.param + " " + strconv.FormatUint(uint64(uintOpt.Value), 10)
}
return ""
}
func (stringOpt StringOption) OptionString() string {
if stringOpt.Value != "" {
return stringOpt.param + " " + stringOpt.Value
}
return ""
}
func (ipOpt IpOption) OptionString() string {
if ipOpt.Value != nil {
return ipOpt.param + " " + ipOpt.Value.String()
}
return ""
}
func (fsrOpt FileSizeRateOption) OptionString() string {
if !fsrOpt.Value.IsNil() {
return fsrOpt.param + " " + fsrOpt.Value.String()
}
return ""
}
func (timeOpt TimeOption) OptionString() string {
if !timeOpt.Value.IsZero() {
// youtube-dl date format is YYYYMMDD
return timeOpt.param + " " + timeOpt.Value.Format("20060102")
}
return ""
}
func (boolOpt BoolOption) OptionString() string {
if boolOpt.Value != boolOpt.defaultValue {
return boolOpt.param
}
return ""
}
func (intOpt IntOption) OptionString() string {
if intOpt.Value != intOpt.defaultValue {
// For IntOptions, negative values represent "infinite"
if intOpt.Value < 0 {
return intOpt.param + " infinite"
}
return intOpt.param + " " + strconv.Itoa(intOpt.Value)
}
return ""
}