mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-06 16:05:05 +02:00
More work on porting transfer kitten
This commit is contained in:
@@ -817,9 +817,65 @@ func (self *SendHandler) on_file_transfer_response(ftc *FileTransmissionCommand)
|
||||
self.send_file_metadata()
|
||||
}
|
||||
}
|
||||
self.lp.CallSoon(self.loop_tick)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SendHandler) loop_tick(timer_id loop.IdType) (err error) {
|
||||
if self.manager.state == SEND_WAITING_FOR_PERMISSION {
|
||||
return
|
||||
}
|
||||
if self.transmit_started {
|
||||
if err = self.transmit_next_chunk(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = self.refresh_progress(timer_id); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return self.check_for_transmit_ok()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (self *SendHandler) check_for_transmit_ok() (err error) {
|
||||
if self.transmit_ok_checked {
|
||||
return self.start_transfer()
|
||||
}
|
||||
if self.manager.state != SEND_PERMISSION_GRANTED {
|
||||
return
|
||||
}
|
||||
if self.opts.ConfirmPaths {
|
||||
if self.manager.all_started {
|
||||
self.print_check_paths()
|
||||
}
|
||||
return
|
||||
}
|
||||
self.transmit_ok_checked = true
|
||||
self.start_transfer()
|
||||
return
|
||||
}
|
||||
|
||||
func (self *SendHandler) print_check_paths() {
|
||||
if self.check_paths_printed {
|
||||
return
|
||||
}
|
||||
self.check_paths_printed = true
|
||||
self.lp.Println(`The following file transfers will be performed. A red destination means an existing file will be overwritten.`)
|
||||
for _, df := range self.manager.files {
|
||||
fn := df.remote_final_path
|
||||
if df.remote_initial_size > -1 {
|
||||
fn = self.ctx.Red(fn)
|
||||
}
|
||||
self.lp.Println(
|
||||
self.ctx.Prettify(fmt.Sprintf(":%s:`%s`", df.file_type.Color(), df.file_type.ShortText())),
|
||||
df.display_name, '→', fn)
|
||||
}
|
||||
self.lp.Println(fmt.Sprintf(`Transferring %d files of total size: %s`,
|
||||
len(self.manager.files), humanize.Size(self.manager.progress_tracker.total_bytes_to_transfer)))
|
||||
self.print_continue_msg()
|
||||
}
|
||||
|
||||
func (self *SendManager) activate_next_ready_file() *File {
|
||||
if self.active_idx > -1 && self.active_idx < len(self.files) {
|
||||
self.files[self.active_idx].transmit_ended_at = time.Now()
|
||||
@@ -1050,6 +1106,22 @@ func (self *SendHandler) on_key_event(ev *loop.KeyEvent) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SendHandler) on_writing_finished(msg_id loop.IdType) (err error) {
|
||||
chunk_transmitted := self.manager.current_chunk_uncompressed_sz >= 0
|
||||
if chunk_transmitted {
|
||||
self.manager.progress_tracker.on_transmit(self.manager.current_chunk_uncompressed_sz)
|
||||
self.manager.current_chunk_uncompressed_sz = -1
|
||||
}
|
||||
if self.quit_after_write_code > -1 {
|
||||
self.lp.Quit(self.quit_after_write_code)
|
||||
return
|
||||
}
|
||||
if self.manager.state == SEND_PERMISSION_GRANTED && (!self.transmit_started || chunk_transmitted) {
|
||||
self.lp.CallSoon(self.loop_tick)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (self *SendHandler) on_interrupt() {
|
||||
if self.quit_after_write_code > -1 {
|
||||
return
|
||||
@@ -1105,6 +1177,7 @@ func send_loop(opts *Options, files []*File) (err error, rc int) {
|
||||
lp.OnText = handler.on_text
|
||||
lp.OnKeyEvent = handler.on_key_event
|
||||
lp.OnResize = handler.on_resize
|
||||
lp.OnWriteComplete = handler.on_writing_finished
|
||||
|
||||
err = lp.Run()
|
||||
if err != nil {
|
||||
|
||||
@@ -19,8 +19,8 @@ var _ = fmt.Print
|
||||
type Context struct {
|
||||
fmt_ctx style.Context
|
||||
|
||||
Cyan, Green, Blue, BrightRed, Yellow, Italic, Bold, Dim, Title, Exe, Opt, Emph, Err, Code func(args ...interface{}) string
|
||||
Url func(string, string) string
|
||||
Cyan, Green, Blue, Magenta, Red, BrightRed, Yellow, Italic, Bold, Dim, Title, Exe, Opt, Emph, Err, Code func(args ...interface{}) string
|
||||
Url func(string, string) string
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -33,6 +33,8 @@ func New(allow_escape_codes bool) *Context {
|
||||
fmt_ctx := &ans.fmt_ctx
|
||||
|
||||
ans.Cyan = fmt_ctx.SprintFunc("fg=bright-cyan")
|
||||
ans.Red = fmt_ctx.SprintFunc("fg=red")
|
||||
ans.Magenta = fmt_ctx.SprintFunc("fg=magenta")
|
||||
ans.Green = fmt_ctx.SprintFunc("fg=green")
|
||||
ans.Blue = fmt_ctx.SprintFunc("fg=blue")
|
||||
ans.BrightRed = fmt_ctx.SprintFunc("fg=bright-red")
|
||||
@@ -183,6 +185,8 @@ func (self *Context) Prettify(text string) string {
|
||||
return self.Green(val)
|
||||
case "cyan":
|
||||
return self.Cyan(val)
|
||||
case "magenta":
|
||||
return self.Magenta(val)
|
||||
case "emph":
|
||||
return self.Italic(val)
|
||||
default:
|
||||
|
||||
@@ -112,6 +112,10 @@ func (self *Loop) AddTimer(interval time.Duration, repeats bool, callback TimerC
|
||||
return self.add_timer(interval, repeats, callback)
|
||||
}
|
||||
|
||||
func (self *Loop) CallSoon(callback TimerCallback) (IdType, error) {
|
||||
return self.add_timer(0, false, callback)
|
||||
}
|
||||
|
||||
func (self *Loop) RemoveTimer(id IdType) bool {
|
||||
return self.remove_timer(id)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user