Skip to content

Commit 96d7326

Browse files
committed
Add skipping support, update dependencies
1 parent 6c79c2d commit 96d7326

File tree

9 files changed

+270
-35
lines changed

9 files changed

+270
-35
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:alpine AS builder
1+
FROM golang:1.15-alpine AS builder
22

33
RUN apk add --no-cache git build-base
44

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Flags:
1717
--log string The log level to output (default "info")
1818
--nice Whether to lower the priority of ffmpeg process (default true)
1919
--stderr Whether to output ffmpeg stderr stream
20+
--tg-admin-id int Telegram Admin User ID
2021
--tg-bot-key string Telegram Bot API Key
2122
--tg-chat-id string Telegram Bot Chat ID
2223
```

cmd/root.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ var rootCmd = &cobra.Command{
7676
log.Error("Specified paths did not match any files")
7777
}
7878

79+
skip := make(chan bool, 1)
80+
notifications.SetSkipChannel(skip)
81+
7982
for _, fileName := range fileList {
8083
if terminated {
8184
return
@@ -103,7 +106,7 @@ var rootCmd = &cobra.Command{
103106
continue
104107
}
105108

106-
killed, lastReport := transcoder.TranscodeFile(fileName, tempFileName, metadata)
109+
killed, lastReport, skipped := transcoder.TranscodeFile(fileName, tempFileName, metadata, skip)
107110

108111
if terminated {
109112
notifications.NotifyEnd(nil, nil, models.ResultError)
@@ -116,7 +119,7 @@ var rootCmd = &cobra.Command{
116119

117120
updateProcessedFile(tempFileName, processedFileName)
118121

119-
if killed {
122+
if killed && !skipped {
120123
// Assume corrupted output file
121124
err := os.Remove(tempFileName)
122125

@@ -141,13 +144,30 @@ var rootCmd = &cobra.Command{
141144
continue
142145
}
143146

147+
if skipped {
148+
updateProcessedFile(fileName, processedFileName)
149+
150+
// Transcoded file was skipped
151+
err := os.Remove(tempFileName)
152+
153+
if err != nil && !os.IsNotExist(err) {
154+
log.Errorf("Error deleting file %s: %s", tempFileName, err)
155+
continue
156+
}
157+
158+
log.Infof("Skipped, kept original: %s", fileName)
159+
notifications.NotifyEnd(nil, lastReport, models.ResultSkipped)
160+
161+
continue
162+
}
163+
144164
resultMetadata := transcoder.ReadFileMetadata(tempFileName)
145165

146166
if viper.GetBool("keep-old") && resultMetadata.Format.SizeInt() > metadata.Format.SizeInt() {
147167
// Transcoded file is bigger than original
148168
err := os.Remove(tempFileName)
149169

150-
if err != nil {
170+
if err != nil && !os.IsNotExist(err) {
151171
log.Errorf("Error deleting file %s: %s", tempFileName, err)
152172
continue
153173
}
@@ -221,6 +241,7 @@ func init() {
221241

222242
rootCmd.PersistentFlags().String("tg-bot-key", "", "Telegram Bot API Key")
223243
rootCmd.PersistentFlags().String("tg-chat-id", "", "Telegram Bot Chat ID")
244+
rootCmd.PersistentFlags().Int("tg-admin-id", 0, "Telegram Admin User ID")
224245

225246
_ = viper.BindPFlag("flags", rootCmd.PersistentFlags().Lookup("flags"))
226247
_ = viper.BindPFlag("extensions", rootCmd.PersistentFlags().Lookup("extensions"))
@@ -232,6 +253,7 @@ func init() {
232253

233254
_ = viper.BindPFlag("tg-bot-key", rootCmd.PersistentFlags().Lookup("tg-bot-key"))
234255
_ = viper.BindPFlag("tg-chat-id", rootCmd.PersistentFlags().Lookup("tg-chat-id"))
256+
_ = viper.BindPFlag("tg-admin-id", rootCmd.PersistentFlags().Lookup("tg-admin-id"))
235257
}
236258

237259
func shouldTranscode(fileName string) bool {
@@ -322,6 +344,10 @@ func updateProcessedFile(fileName string, processedFileName string) {
322344

323345
originalStat, err := os.Stat(fileName)
324346

347+
if os.IsNotExist(err) {
348+
return
349+
}
350+
325351
if err != nil {
326352
log.Errorf("Error reading file %s: %s", fileName, err)
327353
return

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
module github.com/Vilsol/transcoder-go
22

3-
go 1.14
3+
go 1.15
44

55
require (
66
github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible
7-
github.com/sirupsen/logrus v1.2.0
8-
github.com/spf13/cobra v0.0.6
9-
github.com/spf13/viper v1.6.2
7+
github.com/sirupsen/logrus v1.7.0
8+
github.com/spf13/cobra v1.1.1
9+
github.com/spf13/viper v1.7.1
1010
github.com/technoweenie/multipartstreamer v1.0.1 // indirect
1111
)

go.sum

Lines changed: 173 additions & 15 deletions
Large diffs are not rendered by default.

models/transcode.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ const (
4848
ResultKeepOriginal = Result("Kept original")
4949
ResultReplaced = Result("Replaced with new")
5050
ResultError = Result("Error")
51+
ResultSkipped = Result("Skipped, kept original")
5152
)
5253

5354
func (format Format) SizeInt() int64 {

notifications/notifications.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ var end []End
2020
var started time.Time
2121
var currentFileMetadata *models.FileMetadata
2222

23+
var skipChan chan bool
24+
2325
func InitializeNotifications() {
2426
for _, f := range initialize {
2527
f()
@@ -102,3 +104,7 @@ func generateUpdatedNotificationData(report *models.ProgressReport) *models.Noti
102104

103105
return &data
104106
}
107+
108+
func SetSkipChannel(skip chan bool) {
109+
skipChan = skip
110+
}

notifications/telegram.go

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ import (
1313

1414
var tgBot *tgbotapi.BotAPI
1515

16+
var messageKeyboard = tgbotapi.NewInlineKeyboardMarkup(
17+
tgbotapi.NewInlineKeyboardRow(
18+
tgbotapi.NewInlineKeyboardButtonData("Skip", "skip"),
19+
),
20+
)
21+
1622
func init() {
1723
initialize = append(initialize, func() {
1824
if viper.GetString("tg-bot-key") != "" && viper.GetString("tg-chat-id") != "" {
@@ -21,6 +27,7 @@ func init() {
2127

2228
if err != nil {
2329
log.Fatalf("Error initializing telegram bot: %s", err)
30+
return
2431
}
2532

2633
log.Printf("Telegram connected: %s", tgBot.Self.UserName)
@@ -29,25 +36,53 @@ func init() {
2936

3037
lastMessage := int64(0)
3138

32-
chatIdStr := viper.GetString("tg-chat-id")
39+
chatIDStr := viper.GetString("tg-chat-id")
3340

34-
chatId, err := strconv.ParseInt(chatIdStr, 10, 64)
41+
chatID, err := strconv.ParseInt(chatIDStr, 10, 64)
3542

3643
if err != nil {
3744
chat, err := tgBot.GetChat(tgbotapi.ChatConfig{
38-
SuperGroupUsername: chatIdStr,
45+
SuperGroupUsername: chatIDStr,
3946
})
4047

4148
if err != nil {
42-
log.Fatalf("Chat not found: %s", chatIdStr)
49+
log.Fatalf("Chat not found: %s", chatIDStr)
50+
return
4351
}
4452

45-
chatId = chat.ID
53+
chatID = chat.ID
54+
}
55+
56+
if viper.GetInt("tg-admin-id") != 0 {
57+
go func() {
58+
u := tgbotapi.NewUpdate(0)
59+
u.Timeout = 60
60+
61+
updates, err := tgBot.GetUpdatesChan(u)
62+
63+
if err != nil {
64+
log.Fatalf("Error listening to telegram messages: %s", err)
65+
return
66+
}
67+
68+
for update := range updates {
69+
query := update.CallbackQuery
70+
if query == nil {
71+
continue
72+
}
73+
74+
if viper.GetInt("tg-admin-id") == query.From.ID {
75+
log.WithField("user", query.From.UserName).Infof("Skip button pressed in telegram")
76+
skipChan <- true
77+
}
78+
}
79+
}()
4680
}
4781

4882
start = append(start, func(data *models.NotificationData) {
49-
message := tgbotapi.NewMessage(chatId, generateTelegramMessageText(data, nil))
83+
message := tgbotapi.NewMessage(chatID, generateTelegramMessageText(data, nil))
5084
message.ParseMode = tgbotapi.ModeMarkdown
85+
message.ReplyMarkup = messageKeyboard
5186
send, err := tgBot.Send(message)
5287

5388
if err != nil {
@@ -66,8 +101,9 @@ func init() {
66101
}
67102

68103
if currentMessage != nil {
69-
message := tgbotapi.NewEditMessageText(chatId, currentMessage.MessageID, generateTelegramMessageText(data, nil))
104+
message := tgbotapi.NewEditMessageText(chatID, currentMessage.MessageID, generateTelegramMessageText(data, nil))
70105
message.ParseMode = tgbotapi.ModeMarkdown
106+
message.ReplyMarkup = &messageKeyboard
71107
_, err := tgBot.Send(message)
72108

73109
if err != nil {
@@ -80,8 +116,9 @@ func init() {
80116

81117
end = append(end, func(data *models.NotificationData, result models.Result) {
82118
if currentMessage != nil {
83-
message := tgbotapi.NewEditMessageText(chatId, currentMessage.MessageID, generateTelegramMessageText(data, &result))
119+
message := tgbotapi.NewEditMessageText(chatID, currentMessage.MessageID, generateTelegramMessageText(data, &result))
84120
message.ParseMode = tgbotapi.ModeMarkdown
121+
message.ReplyMarkup = nil
85122
_, err := tgBot.Send(message)
86123

87124
if err != nil {
@@ -124,7 +161,7 @@ func generateTelegramMessageText(data *models.NotificationData, result *models.R
124161
eta := time.Duration(0)
125162
if complete > 0 {
126163
expected = utils.BytesHumanReadable(int64(float64(data.CurrentSize*100) / complete))
127-
eta = time.Duration((float64(time.Now().Sub(data.Started)) / complete) * (100 - complete))
164+
eta = time.Duration((float64(time.Since(data.Started)) / complete) * (100 - complete))
128165
}
129166

130167
return fmt.Sprintf(

transcoder/transcoder.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func BuildFlags(fileName string, tempFileName string, metadata *models.FileMetad
7070
return finalFlags
7171
}
7272

73-
func TranscodeFile(fileName string, tempFileName string, metadata *models.FileMetadata) (bool, *models.ProgressReport) {
73+
func TranscodeFile(fileName string, tempFileName string, metadata *models.FileMetadata, skip chan bool) (bool, *models.ProgressReport, bool) {
7474
flags := BuildFlags(fileName, tempFileName, metadata)
7575

7676
notifications.NotifyStart(metadata)
@@ -112,6 +112,12 @@ func TranscodeFile(fileName string, tempFileName string, metadata *models.FileMe
112112

113113
go ReadOut(outPipe, fileName, metadata, stopTranscoder)
114114

115+
skipping := false
116+
go func() {
117+
skipping = <-skip
118+
stopTranscoder <- true
119+
}()
120+
115121
err = c.Wait()
116122

117123
if err != nil {
@@ -120,7 +126,7 @@ func TranscodeFile(fileName string, tempFileName string, metadata *models.FileMe
120126

121127
stopTranscoder <- false
122128

123-
return <-done, lastReport
129+
return <-done, lastReport, skipping
124130
}
125131

126132
func ReadOut(pipe io.ReadCloser, filename string, metadata *models.FileMetadata, stopTranscoder chan bool) {
@@ -194,7 +200,7 @@ func ReadError(pipe io.ReadCloser) {
194200
}
195201
}
196202

197-
var flatParseRegex = regexp.MustCompile("\\s*(-?[0-9.]+).*")
203+
var flatParseRegex = regexp.MustCompile(`\s*(-?[0-9.]+).*`)
198204

199205
func OutputToReport(lines []string) *models.ProgressReport {
200206
report := models.ProgressReport{}

0 commit comments

Comments
 (0)