Skip to content

Commit e8ebcc7

Browse files
committed
Implement restructured protobuf definition
Implement new protobuf api for frontend (web) and backend (go)
1 parent 2406535 commit e8ebcc7

25 files changed

Lines changed: 778 additions & 828 deletions

internal/api/api.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ import (
99
"connectrpc.com/grpcreflect"
1010
"github.com/nandesh-dev/subtle/generated/embed"
1111
"github.com/nandesh-dev/subtle/generated/ent"
12-
"github.com/nandesh-dev/subtle/generated/proto/web/webconnect"
12+
"github.com/nandesh-dev/subtle/generated/proto/services/servicesconnect"
1313
"github.com/nandesh-dev/subtle/pkgs/configuration"
1414
"github.com/rs/cors"
1515
"golang.org/x/net/http2"
1616
"golang.org/x/net/http2/h2c"
1717
)
1818

1919
type WebServiceHandler struct {
20-
webconnect.UnimplementedWebServiceHandler
20+
servicesconnect.UnimplementedWebServiceHandler
2121
ctx context.Context
2222
configFile *configuration.File
2323
db *ent.Client
@@ -35,11 +35,11 @@ type APIServerOptions struct {
3535
func NewAPIServer(ctx context.Context, configFile *configuration.File, db *ent.Client, options APIServerOptions) *APIServer {
3636
mux := http.NewServeMux()
3737

38-
path, handler := webconnect.NewWebServiceHandler(WebServiceHandler{configFile: configFile, db: db, ctx:ctx})
38+
path, handler := servicesconnect.NewWebServiceHandler(WebServiceHandler{configFile: configFile, db: db, ctx:ctx})
3939
mux.Handle(path, handler)
4040

4141
if options.EnableGRPCReflection {
42-
path, handler = grpcreflect.NewHandlerV1Alpha(grpcreflect.NewStaticReflector(webconnect.WebServiceName))
42+
path, handler = grpcreflect.NewHandlerV1Alpha(grpcreflect.NewStaticReflector(servicesconnect.WebServiceName))
4343
mux.Handle(path, handler)
4444
}
4545

internal/api/config.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package api
2+
3+
import (
4+
"context"
5+
6+
"connectrpc.com/connect"
7+
"github.com/nandesh-dev/subtle/generated/proto/messages"
8+
)
9+
10+
func (h WebServiceHandler) GetConfig(ctx context.Context, req *connect.Request[messages.GetConfigRequest]) (*connect.Response[messages.GetConfigResponse], error) {
11+
configString, err := h.configFile.ReadString()
12+
if err != nil {
13+
return nil, err
14+
}
15+
16+
return connect.NewResponse(&messages.GetConfigResponse{
17+
Config: configString,
18+
}), nil
19+
}
20+
21+
func (h WebServiceHandler) UpdateConfig(ctx context.Context, req *connect.Request[messages.UpdateConfigRequest]) (*connect.Response[messages.UpdateConfigResponse], error) {
22+
if err := h.configFile.WriteString(req.Msg.Config); err != nil {
23+
return nil, err
24+
}
25+
26+
return connect.NewResponse(&messages.UpdateConfigResponse{}), nil
27+
}

internal/api/filesystem.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package api
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"strconv"
7+
8+
"connectrpc.com/connect"
9+
"github.com/nandesh-dev/subtle/generated/ent/videoschema"
10+
"github.com/nandesh-dev/subtle/generated/proto/messages"
11+
"github.com/nandesh-dev/subtle/pkgs/filemanager"
12+
)
13+
14+
func (h WebServiceHandler) GetRootDirectoryPaths(ctx context.Context, req *connect.Request[messages.GetRootDirectoryPathsRequest]) (*connect.Response[messages.GetRootDirectoryPathsResponse], error) {
15+
config, err := h.configFile.Read()
16+
if err != nil {
17+
return nil, fmt.Errorf("cannot read config file, err: %v", err)
18+
}
19+
20+
paths := make([]string, 0, len(config.Job.Scanning))
21+
22+
for _, scaningGroup := range config.Job.Scanning {
23+
paths = append(paths, scaningGroup.DirectoryPath)
24+
}
25+
26+
return connect.NewResponse(&messages.GetRootDirectoryPathsResponse{
27+
Paths: paths,
28+
}), nil
29+
}
30+
31+
func (h WebServiceHandler) ReadDirectory(ctx context.Context, req *connect.Request[messages.ReadDirectoryRequest]) (*connect.Response[messages.ReadDirectoryResponse], error) {
32+
directory, err := filemanager.ReadDirectory(req.Msg.Path)
33+
if err != nil {
34+
return nil, fmt.Errorf("cannot read directory, err: %v", err)
35+
}
36+
37+
videoFilepaths := make([]string, 0, len(directory.Videos))
38+
for _, video := range directory.Videos {
39+
videoFilepaths = append(videoFilepaths, video.Filepath())
40+
}
41+
42+
return connect.NewResponse(&messages.ReadDirectoryResponse{
43+
ChildrenDirectoryPaths: directory.ChildrenPaths,
44+
VideoPaths: videoFilepaths,
45+
}), nil
46+
}
47+
48+
func (h WebServiceHandler) SearchVideo(ctx context.Context, req *connect.Request[messages.SearchVideoRequest]) (*connect.Response[messages.SearchVideoResponse], error) {
49+
videoEntry, err := h.db.VideoSchema.Query().Where(videoschema.Filepath(req.Msg.Path)).Only(h.ctx)
50+
if err != nil {
51+
return nil, fmt.Errorf("cannot get video entry from database, err: %v", err)
52+
}
53+
54+
subtitleEntries, err := videoEntry.QuerySubtitles().All(h.ctx)
55+
if err != nil {
56+
return nil, fmt.Errorf("cannot get subtitle entries from database, err: %v", err)
57+
}
58+
59+
subtitleIds := make([]string, 0, len(subtitleEntries))
60+
for _, subtitleEntry := range subtitleEntries {
61+
subtitleIds = append(subtitleIds, strconv.FormatInt(int64(subtitleEntry.ID), 10))
62+
}
63+
64+
return connect.NewResponse(&messages.SearchVideoResponse{
65+
Id: strconv.FormatInt(int64(videoEntry.ID), 10),
66+
Path: videoEntry.Filepath,
67+
SubtitleIds: subtitleIds,
68+
}), nil
69+
}

internal/api/get_config.go

Lines changed: 0 additions & 19 deletions
This file was deleted.

internal/api/get_directory.go

Lines changed: 0 additions & 44 deletions
This file was deleted.

internal/api/get_global_statistics.go

Lines changed: 0 additions & 38 deletions
This file was deleted.

internal/api/get_media_directories.go

Lines changed: 0 additions & 26 deletions
This file was deleted.

internal/api/get_subtitle.go

Lines changed: 0 additions & 45 deletions
This file was deleted.

internal/api/get_video.go

Lines changed: 0 additions & 32 deletions
This file was deleted.

0 commit comments

Comments
 (0)