forked from Elara6331/itd
		
	Merge pull request 'Add resource loading to ITD' (#28) from resource-loading into master
Reviewed-on: https://gitea.arsenm.dev/Arsen6331/itd/pulls/28
This commit is contained in:
		
							
								
								
									
										20
									
								
								api/fs.go
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								api/fs.go
									
									
									
									
									
								
							@@ -2,6 +2,16 @@ package api
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import "context"
 | 
					import "context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *Client) RemoveAll(ctx context.Context, paths ...string) error {
 | 
				
			||||||
 | 
						return c.client.Call(
 | 
				
			||||||
 | 
							ctx,
 | 
				
			||||||
 | 
							"FS",
 | 
				
			||||||
 | 
							"RemoveAll",
 | 
				
			||||||
 | 
							paths,
 | 
				
			||||||
 | 
							nil,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Client) Remove(ctx context.Context, paths ...string) error {
 | 
					func (c *Client) Remove(ctx context.Context, paths ...string) error {
 | 
				
			||||||
	return c.client.Call(
 | 
						return c.client.Call(
 | 
				
			||||||
		ctx,
 | 
							ctx,
 | 
				
			||||||
@@ -22,6 +32,16 @@ func (c *Client) Rename(ctx context.Context, old, new string) error {
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *Client) MkdirAll(ctx context.Context, paths ...string) error {
 | 
				
			||||||
 | 
						return c.client.Call(
 | 
				
			||||||
 | 
							ctx,
 | 
				
			||||||
 | 
							"FS",
 | 
				
			||||||
 | 
							"MkdirAll",
 | 
				
			||||||
 | 
							paths,
 | 
				
			||||||
 | 
							nil,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Client) Mkdir(ctx context.Context, paths ...string) error {
 | 
					func (c *Client) Mkdir(ctx context.Context, paths ...string) error {
 | 
				
			||||||
	return c.client.Call(
 | 
						return c.client.Call(
 | 
				
			||||||
		ctx,
 | 
							ctx,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								api/resources.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								api/resources.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"go.arsenm.dev/infinitime"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LoadResources loads resources onto the watch from the given
 | 
				
			||||||
 | 
					// file path to the resources zip
 | 
				
			||||||
 | 
					func (c *Client) LoadResources(ctx context.Context, path string) (<-chan infinitime.ResourceLoadProgress, error) {
 | 
				
			||||||
 | 
						progCh := make(chan infinitime.ResourceLoadProgress)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := c.client.Call(
 | 
				
			||||||
 | 
							ctx,
 | 
				
			||||||
 | 
							"FS",
 | 
				
			||||||
 | 
							"LoadResources",
 | 
				
			||||||
 | 
							path,
 | 
				
			||||||
 | 
							progCh,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return progCh, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -11,6 +11,19 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func fwUpgrade(c *cli.Context) error {
 | 
					func fwUpgrade(c *cli.Context) error {
 | 
				
			||||||
 | 
						resources := c.String("resources")
 | 
				
			||||||
 | 
						if resources != "" {
 | 
				
			||||||
 | 
							absRes, err := filepath.Abs(resources)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							err = resLoad(c.Context, []string{absRes})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	start := time.Now()
 | 
						start := time.Now()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var upgType api.UpgradeType
 | 
						var upgType api.UpgradeType
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,12 @@ func fsMkdir(c *cli.Context) error {
 | 
				
			|||||||
		return cli.Exit("Command mkdir requires one or more arguments", 1)
 | 
							return cli.Exit("Command mkdir requires one or more arguments", 1)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := client.Mkdir(c.Context, c.Args().Slice()...)
 | 
						var err error
 | 
				
			||||||
 | 
						if c.Bool("parents") {
 | 
				
			||||||
 | 
							err = client.MkdirAll(c.Context, c.Args().Slice()...)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							err = client.Mkdir(c.Context, c.Args().Slice()...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -109,7 +114,12 @@ func fsRemove(c *cli.Context) error {
 | 
				
			|||||||
		return cli.Exit("Command remove requires one or more arguments", 1)
 | 
							return cli.Exit("Command remove requires one or more arguments", 1)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := client.Remove(c.Context, c.Args().Slice()...)
 | 
						var err error
 | 
				
			||||||
 | 
						if c.Bool("recursive") {
 | 
				
			||||||
 | 
							err = client.RemoveAll(c.Context, c.Args().Slice()...)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							err = client.Remove(c.Context, c.Args().Slice()...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
					 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"os/signal"
 | 
						"os/signal"
 | 
				
			||||||
	"syscall"
 | 
						"syscall"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/rs/zerolog"
 | 
						"github.com/rs/zerolog"
 | 
				
			||||||
	"github.com/rs/zerolog/log"
 | 
						"github.com/rs/zerolog/log"
 | 
				
			||||||
@@ -29,7 +29,7 @@ func main() {
 | 
				
			|||||||
	// at most 200ms after the user sends SIGINT/SIGTERM.
 | 
						// at most 200ms after the user sends SIGINT/SIGTERM.
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
		<-ctx.Done()
 | 
							<-ctx.Done()
 | 
				
			||||||
		time.Sleep(200*time.Millisecond)
 | 
							time.Sleep(200 * time.Millisecond)
 | 
				
			||||||
		os.Exit(0)
 | 
							os.Exit(0)
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,6 +51,19 @@ func main() {
 | 
				
			|||||||
				Usage:     "Display help screen for a command",
 | 
									Usage:     "Display help screen for a command",
 | 
				
			||||||
				Action:    helpCmd,
 | 
									Action:    helpCmd,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									Name:    "resources",
 | 
				
			||||||
 | 
									Aliases: []string{"res"},
 | 
				
			||||||
 | 
									Usage:   "Handle InfiniTime resource loading",
 | 
				
			||||||
 | 
									Subcommands: []*cli.Command{
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											Name:      "load",
 | 
				
			||||||
 | 
											ArgsUsage: "<path>",
 | 
				
			||||||
 | 
											Usage:     "Load an InifiniTime resources package",
 | 
				
			||||||
 | 
											Action:    resourcesLoad,
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Name:    "filesystem",
 | 
									Name:    "filesystem",
 | 
				
			||||||
				Aliases: []string{"fs"},
 | 
									Aliases: []string{"fs"},
 | 
				
			||||||
@@ -64,6 +77,13 @@ func main() {
 | 
				
			|||||||
						Action:    fsList,
 | 
											Action:    fsList,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
 | 
											Flags: []cli.Flag{
 | 
				
			||||||
 | 
												&cli.BoolFlag{
 | 
				
			||||||
 | 
													Name:    "parents",
 | 
				
			||||||
 | 
													Aliases: []string{"p"},
 | 
				
			||||||
 | 
													Usage:   "Make parent directories if needed, no error if already existing",
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
						Name:      "mkdir",
 | 
											Name:      "mkdir",
 | 
				
			||||||
						ArgsUsage: "<paths...>",
 | 
											ArgsUsage: "<paths...>",
 | 
				
			||||||
						Usage:     "Create new directories",
 | 
											Usage:     "Create new directories",
 | 
				
			||||||
@@ -84,6 +104,13 @@ func main() {
 | 
				
			|||||||
						Action:      fsRead,
 | 
											Action:      fsRead,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
 | 
											Flags: []cli.Flag{
 | 
				
			||||||
 | 
												&cli.BoolFlag{
 | 
				
			||||||
 | 
													Name:    "recursive",
 | 
				
			||||||
 | 
													Aliases: []string{"r", "R"},
 | 
				
			||||||
 | 
													Usage:   "Remove directories and their contents recursively",
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
						Name:      "remove",
 | 
											Name:      "remove",
 | 
				
			||||||
						ArgsUsage: "<paths...>",
 | 
											ArgsUsage: "<paths...>",
 | 
				
			||||||
						Aliases:   []string{"rm"},
 | 
											Aliases:   []string{"rm"},
 | 
				
			||||||
@@ -116,6 +143,11 @@ func main() {
 | 
				
			|||||||
								Aliases: []string{"f"},
 | 
													Aliases: []string{"f"},
 | 
				
			||||||
								Usage:   "Path to firmware image (.bin file)",
 | 
													Usage:   "Path to firmware image (.bin file)",
 | 
				
			||||||
							},
 | 
												},
 | 
				
			||||||
 | 
												&cli.PathFlag{
 | 
				
			||||||
 | 
													Name:    "resources",
 | 
				
			||||||
 | 
													Aliases: []string{"r"},
 | 
				
			||||||
 | 
													Usage:   "Path to resources file (.zip file)",
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
							&cli.PathFlag{
 | 
												&cli.PathFlag{
 | 
				
			||||||
								Name:    "archive",
 | 
													Name:    "archive",
 | 
				
			||||||
								Aliases: []string{"a"},
 | 
													Aliases: []string{"a"},
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								cmd/itctl/resources.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								cmd/itctl/resources.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/cheggaaa/pb/v3"
 | 
				
			||||||
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
 | 
						"go.arsenm.dev/infinitime"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func resourcesLoad(c *cli.Context) error {
 | 
				
			||||||
 | 
						return resLoad(c.Context, c.Args().Slice())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func resLoad(ctx context.Context, args []string) error {
 | 
				
			||||||
 | 
						if len(args) == 0 {
 | 
				
			||||||
 | 
							return cli.Exit("Command load requires one argument.", 1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Create progress bar templates
 | 
				
			||||||
 | 
						rmTmpl := `Removing {{string . "filename"}}`
 | 
				
			||||||
 | 
						upTmpl := `Uploading {{string . "filename"}} {{counters . }} B {{bar . "|" "-" (cycle .) " " "|"}} {{percent . }} {{rtime . "%s"}}`
 | 
				
			||||||
 | 
						// Start full bar at 0 total
 | 
				
			||||||
 | 
						bar := pb.ProgressBarTemplate(rmTmpl).Start(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						path, err := filepath.Abs(args[0])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						progCh, err := client.LoadResources(ctx, path)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for evt := range progCh {
 | 
				
			||||||
 | 
							if evt.Operation == infinitime.ResourceOperationRemoveObsolete {
 | 
				
			||||||
 | 
								bar.SetTemplateString(rmTmpl)
 | 
				
			||||||
 | 
								bar.Set("filename", evt.Name)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								bar.SetTemplateString(upTmpl)
 | 
				
			||||||
 | 
								bar.Set("filename", evt.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								bar.SetTotal(evt.Total)
 | 
				
			||||||
 | 
								bar.SetCurrent(evt.Sent)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						bar.Finish()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.mod
									
									
									
									
									
								
							@@ -15,7 +15,7 @@ require (
 | 
				
			|||||||
	github.com/mozillazg/go-pinyin v0.19.0
 | 
						github.com/mozillazg/go-pinyin v0.19.0
 | 
				
			||||||
	github.com/rs/zerolog v1.26.1
 | 
						github.com/rs/zerolog v1.26.1
 | 
				
			||||||
	github.com/urfave/cli/v2 v2.3.0
 | 
						github.com/urfave/cli/v2 v2.3.0
 | 
				
			||||||
	go.arsenm.dev/infinitime v0.0.0-20220819210252-d199fba93c2f
 | 
						go.arsenm.dev/infinitime v0.0.0-20221016193942-01970b2bb770
 | 
				
			||||||
	go.arsenm.dev/lrpc v0.0.0-20220513001344-3bcc01fdb6a0
 | 
						go.arsenm.dev/lrpc v0.0.0-20220513001344-3bcc01fdb6a0
 | 
				
			||||||
	golang.org/x/text v0.3.7
 | 
						golang.org/x/text v0.3.7
 | 
				
			||||||
	modernc.org/sqlite v1.17.2
 | 
						modernc.org/sqlite v1.17.2
 | 
				
			||||||
@@ -38,7 +38,7 @@ require (
 | 
				
			|||||||
	github.com/gopherjs/gopherjs v1.17.2 // indirect
 | 
						github.com/gopherjs/gopherjs v1.17.2 // indirect
 | 
				
			||||||
	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
 | 
						github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
 | 
				
			||||||
	github.com/mattn/go-colorable v0.1.8 // indirect
 | 
						github.com/mattn/go-colorable v0.1.8 // indirect
 | 
				
			||||||
	github.com/mattn/go-runewidth v0.0.12 // indirect
 | 
						github.com/mattn/go-runewidth v0.0.13 // indirect
 | 
				
			||||||
	github.com/mitchellh/copystructure v1.2.0 // indirect
 | 
						github.com/mitchellh/copystructure v1.2.0 // indirect
 | 
				
			||||||
	github.com/mitchellh/mapstructure v1.5.0 // indirect
 | 
						github.com/mitchellh/mapstructure v1.5.0 // indirect
 | 
				
			||||||
	github.com/mitchellh/reflectwalk v1.0.2 // indirect
 | 
						github.com/mitchellh/reflectwalk v1.0.2 // indirect
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								go.sum
									
									
									
									
									
								
							@@ -270,8 +270,9 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
 | 
				
			|||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 | 
					github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 | 
				
			||||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 | 
					github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 | 
				
			||||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 | 
					github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 | 
				
			||||||
github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow=
 | 
					 | 
				
			||||||
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
 | 
					github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
 | 
				
			||||||
 | 
					github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
 | 
				
			||||||
 | 
					github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 | 
				
			||||||
github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0=
 | 
					github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0=
 | 
				
			||||||
github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 | 
					github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 | 
				
			||||||
github.com/metal3d/fyne-x v0.0.0-20220508095732-177117e583fb h1:+fP6ENsbd+BUOmD/kSjNtrOmi2vgJ/JfWDSWjTKmTVY=
 | 
					github.com/metal3d/fyne-x v0.0.0-20220508095732-177117e583fb h1:+fP6ENsbd+BUOmD/kSjNtrOmi2vgJ/JfWDSWjTKmTVY=
 | 
				
			||||||
@@ -396,8 +397,8 @@ github.com/yuin/goldmark v1.3.8/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
 | 
				
			|||||||
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 | 
					github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 | 
				
			||||||
github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs=
 | 
					github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs=
 | 
				
			||||||
github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
 | 
					github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
 | 
				
			||||||
go.arsenm.dev/infinitime v0.0.0-20220819210252-d199fba93c2f h1:Np0ZNlgVC5D9NOilN14HJ1mSXM8vl2LYGfK0fZOYUbY=
 | 
					go.arsenm.dev/infinitime v0.0.0-20221016193942-01970b2bb770 h1:OZ8kYFHCXt+7nxz9G0BTnSyJKnIpQnQ5m7kyIssG81Y=
 | 
				
			||||||
go.arsenm.dev/infinitime v0.0.0-20220819210252-d199fba93c2f/go.mod h1:K3NJ6fyPv5qqHUedB3MccKOE0whJMJZ80l/yTzzTrgc=
 | 
					go.arsenm.dev/infinitime v0.0.0-20221016193942-01970b2bb770/go.mod h1:K3NJ6fyPv5qqHUedB3MccKOE0whJMJZ80l/yTzzTrgc=
 | 
				
			||||||
go.arsenm.dev/lrpc v0.0.0-20220513001344-3bcc01fdb6a0 h1:1K96g1eww+77GeGchwMhd0NTrs7Mk/Hc3M3ItW5NbG4=
 | 
					go.arsenm.dev/lrpc v0.0.0-20220513001344-3bcc01fdb6a0 h1:1K96g1eww+77GeGchwMhd0NTrs7Mk/Hc3M3ItW5NbG4=
 | 
				
			||||||
go.arsenm.dev/lrpc v0.0.0-20220513001344-3bcc01fdb6a0/go.mod h1:goK9z735lfXmqlDxu9qN7FS8t0HJHN3PjyDtCToUY4w=
 | 
					go.arsenm.dev/lrpc v0.0.0-20220513001344-3bcc01fdb6a0/go.mod h1:goK9z735lfXmqlDxu9qN7FS8t0HJHN3PjyDtCToUY4w=
 | 
				
			||||||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
 | 
					go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										48
									
								
								socket.go
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								socket.go
									
									
									
									
									
								
							@@ -293,6 +293,17 @@ type FS struct {
 | 
				
			|||||||
	fs  *blefs.FS
 | 
						fs  *blefs.FS
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (fs *FS) RemoveAll(_ *server.Context, paths []string) error {
 | 
				
			||||||
 | 
						fs.updateFS()
 | 
				
			||||||
 | 
						for _, path := range paths {
 | 
				
			||||||
 | 
							err := fs.fs.RemoveAll(path)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (fs *FS) Remove(_ *server.Context, paths []string) error {
 | 
					func (fs *FS) Remove(_ *server.Context, paths []string) error {
 | 
				
			||||||
	fs.updateFS()
 | 
						fs.updateFS()
 | 
				
			||||||
	for _, path := range paths {
 | 
						for _, path := range paths {
 | 
				
			||||||
@@ -309,6 +320,17 @@ func (fs *FS) Rename(_ *server.Context, paths [2]string) error {
 | 
				
			|||||||
	return fs.fs.Rename(paths[0], paths[1])
 | 
						return fs.fs.Rename(paths[0], paths[1])
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (fs *FS) MkdirAll(_ *server.Context, paths []string) error {
 | 
				
			||||||
 | 
						fs.updateFS()
 | 
				
			||||||
 | 
						for _, path := range paths {
 | 
				
			||||||
 | 
							err := fs.fs.MkdirAll(path)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (fs *FS) Mkdir(_ *server.Context, paths []string) error {
 | 
					func (fs *FS) Mkdir(_ *server.Context, paths []string) error {
 | 
				
			||||||
	fs.updateFS()
 | 
						fs.updateFS()
 | 
				
			||||||
	for _, path := range paths {
 | 
						for _, path := range paths {
 | 
				
			||||||
@@ -424,6 +446,32 @@ func (fs *FS) Download(ctx *server.Context, paths [2]string) error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (fs *FS) LoadResources(ctx *server.Context, path string) error {
 | 
				
			||||||
 | 
						resFl, err := os.Open(path)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						progCh, err := infinitime.LoadResources(resFl, fs.fs)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ch, err := ctx.MakeChannel()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							for evt := range progCh {
 | 
				
			||||||
 | 
								ch <- evt
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							close(ch)
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (fs *FS) updateFS() {
 | 
					func (fs *FS) updateFS() {
 | 
				
			||||||
	if fs.fs == nil || updateFS {
 | 
						if fs.fs == nil || updateFS {
 | 
				
			||||||
		// Get new FS
 | 
							// Get new FS
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user