Selaa lähdekoodia

Refactor/project structure (#3)

* feat: removed duplicate log and log broadcasts

* feat: updated readmes

* refactor: renamed backend and web client to gmus-backend and gmus-web

* feat: always set GO_ENV=development in make dev commands

* fix: test directories

* fix: formatting

* fix: header size
Fela Maslen 5 vuotta sitten
vanhempi
commit
6ae2b251e3
100 muutettua tiedostoa jossa 177 lisäystä ja 66 poistoa
  1. 5 4
      Makefile
  2. 36 1
      README.md
  3. 0 0
      gmus-backend/.dockerignore
  4. 0 0
      gmus-backend/.gitignore
  5. 0 0
      gmus-backend/Dockerfile
  6. 3 3
      gmus-backend/Makefile
  7. 35 3
      gmus-backend/README.md
  8. 1 1
      gmus-backend/cmd/migrate/main.go
  9. 3 3
      gmus-backend/cmd/scan/main.go
  10. 1 1
      gmus-backend/cmd/server/main.go
  11. 0 0
      gmus-backend/docker-compose.yml
  12. 0 0
      gmus-backend/example.env
  13. 1 1
      gmus-backend/go.mod
  14. 0 0
      gmus-backend/go.sum
  15. 0 0
      gmus-backend/init.sql
  16. 0 0
      gmus-backend/migrations/000001_create_songs_table.down.sql
  17. 0 0
      gmus-backend/migrations/000001_create_songs_table.up.sql
  18. 0 0
      gmus-backend/migrations/000002_unique_filename.down.sql
  19. 0 0
      gmus-backend/migrations/000002_unique_filename.up.sql
  20. 0 0
      gmus-backend/migrations/000003_song_file_modified_date.down.sql
  21. 0 0
      gmus-backend/migrations/000003_song_file_modified_date.up.sql
  22. 0 0
      gmus-backend/migrations/000004_track_number.down.sql
  23. 0 0
      gmus-backend/migrations/000004_track_number.up.sql
  24. 1 1
      gmus-backend/pkg/config/config.go
  25. 0 0
      gmus-backend/pkg/config/main.go
  26. 1 1
      gmus-backend/pkg/database/main.go
  27. 0 0
      gmus-backend/pkg/logger/logger.go
  28. 1 1
      gmus-backend/pkg/read/audio.go
  29. 2 2
      gmus-backend/pkg/read/audio_test.go
  30. 0 0
      gmus-backend/pkg/read/duration/duration_suite_test.go
  31. 0 0
      gmus-backend/pkg/read/duration/main.go
  32. 0 0
      gmus-backend/pkg/read/duration/vorbis.go
  33. 2 2
      gmus-backend/pkg/read/duration/vorbis_test.go
  34. 3 3
      gmus-backend/pkg/read/files.go
  35. 3 3
      gmus-backend/pkg/read/files_test.go
  36. 0 0
      gmus-backend/pkg/read/main.go
  37. 0 0
      gmus-backend/pkg/read/read_suite_test.go
  38. 0 0
      gmus-backend/pkg/read/test_file_info.go
  39. 0 0
      gmus-backend/pkg/read/testdata/file_example_OOG_1MG.ogg
  40. 0 0
      gmus-backend/pkg/read/testdata/nested/14 Clementi Piano Sonata in D major, Op 25 No 6 - Movement 2 Un poco andante.ogg
  41. 0 0
      gmus-backend/pkg/read/types.go
  42. 0 0
      gmus-backend/pkg/repository/repository_suite_test.go
  43. 1 1
      gmus-backend/pkg/repository/songs.go
  44. 4 4
      gmus-backend/pkg/repository/songs_test.go
  45. 3 1
      gmus-backend/pkg/server/actions.go
  46. 1 3
      gmus-backend/pkg/server/clients.go
  47. 0 0
      gmus-backend/pkg/server/constants.go
  48. 4 4
      gmus-backend/pkg/server/fetch.go
  49. 1 1
      gmus-backend/pkg/server/handler.go
  50. 2 2
      gmus-backend/pkg/server/pubsub.go
  51. 2 2
      gmus-backend/pkg/server/server.go
  52. 0 0
      gmus-backend/pkg/server/state.go
  53. 3 3
      gmus-backend/pkg/server/stream.go
  54. 2 2
      gmus-backend/pkg/services/fetch.go
  55. 3 3
      gmus-backend/pkg/services/fetch_test.go
  56. 5 5
      gmus-backend/pkg/services/scanner.go
  57. 4 4
      gmus-backend/pkg/services/scanner_test.go
  58. 0 0
      gmus-backend/pkg/services/services_suite_test.go
  59. 1 1
      gmus-backend/pkg/testing/testing.go
  60. 0 0
      gmus-backend/test.env
  61. 0 0
      gmus-web/.env.example
  62. 0 0
      gmus-web/.env.test
  63. 0 0
      gmus-web/.eslintrc.js
  64. 0 0
      gmus-web/.gitignore
  65. 0 0
      gmus-web/.prettierrc.js
  66. 43 0
      gmus-web/README.md
  67. 0 0
      gmus-web/package.json
  68. 0 0
      gmus-web/public/favicon.ico
  69. 0 0
      gmus-web/public/index.html
  70. 0 0
      gmus-web/public/logo192.png
  71. 0 0
      gmus-web/public/logo512.png
  72. 0 0
      gmus-web/public/manifest.json
  73. 0 0
      gmus-web/public/robots.txt
  74. 0 0
      gmus-web/src/actions/actions.ts
  75. 0 0
      gmus-web/src/actions/error.ts
  76. 0 0
      gmus-web/src/actions/index.ts
  77. 0 0
      gmus-web/src/actions/types.ts
  78. 0 0
      gmus-web/src/components/app.tsx
  79. 0 0
      gmus-web/src/components/identify.spec.tsx
  80. 0 0
      gmus-web/src/components/identify.styles.ts
  81. 0 0
      gmus-web/src/components/identify.tsx
  82. 0 0
      gmus-web/src/components/player.tsx
  83. 0 0
      gmus-web/src/components/root.tsx
  84. 0 0
      gmus-web/src/components/ui/cmus/actions.ts
  85. 0 0
      gmus-web/src/components/ui/cmus/index.ts
  86. 0 0
      gmus-web/src/components/ui/cmus/reducer.spec.ts
  87. 0 0
      gmus-web/src/components/ui/cmus/reducer.ts
  88. 0 0
      gmus-web/src/components/ui/cmus/styled/layout.ts
  89. 0 0
      gmus-web/src/components/ui/cmus/styled/spinner.tsx
  90. 0 0
      gmus-web/src/components/ui/cmus/styled/typography.ts
  91. 0 0
      gmus-web/src/components/ui/cmus/styled/variables.ts
  92. 0 0
      gmus-web/src/components/ui/cmus/types.ts
  93. 0 0
      gmus-web/src/components/ui/cmus/utils/library.ts
  94. 0 0
      gmus-web/src/components/ui/cmus/utils/scroll.spec.ts
  95. 0 0
      gmus-web/src/components/ui/cmus/utils/scroll.ts
  96. 0 0
      gmus-web/src/components/ui/cmus/views/artists.styles.ts
  97. 0 0
      gmus-web/src/components/ui/cmus/views/artists.tsx
  98. 0 0
      gmus-web/src/components/ui/cmus/views/clients.styles.ts
  99. 0 0
      gmus-web/src/components/ui/cmus/views/clients.tsx
  100. 0 0
      gmus-web/src/components/ui/cmus/views/command.styles.ts

+ 5 - 4
Makefile

@@ -8,10 +8,11 @@ build:
 	make build.frontend
 
 test.backend:
-	cd music-player && make test
-test.frontend:
-	cd gmus && yarn test
+	cd gmus-backend && make test
+
+test.frontend.web:
+	cd gmus-web && yarn test
 
 test:
 	make test.backend
-	make test.frontend
+	make test.frontend.web

+ 36 - 1
README.md

@@ -1,2 +1,37 @@
-# go-music-player
+# go-music-player (gmus)
 
+## Backend
+
+This manages the music library database, serves requests and handles client connections.
+
+For more info, see the [readme](./gmus-backend/README.md).
+
+## Frontend clients
+
+Each frontend implements the APIs provided by the backend. Their job is to play music, or control the master client. The following clients are implemented:
+
+- [gmus-web](./gmus-web/README.md) - web client
+
+## Architecture
+
+### Database
+
+This is PostgreSQL. It is responsible for storing the music files and their metadata.
+
+### PubSub
+
+This is implemented in Go using Redis. It is responsible for coordinating state between clients. Note that the only state which is stored on the backend is the list of clients currently connected.
+
+### API
+
+This is an HTTP API written in Go. It is responsible for implementing the PubSub, as well as serving data to the clients. The API may be running in multiple redundant containers.
+
+### Scanner
+
+This keeps the database up-to-date, based on a directory containing music files.
+
+### Clients
+
+Each client connects to the API. One client is "master", while all others are "slave". Master is responsible for playing the music, and keeping other clients up-to-date through the socket.
+
+There is no authentication - all clients are trusted equally. Clients may take over master status whenever they want. Master must obey this instruction. Clients are responsible for providing unique names when connecting.

+ 0 - 0
music-player/.dockerignore → gmus-backend/.dockerignore


+ 0 - 0
music-player/.gitignore → gmus-backend/.gitignore


+ 0 - 0
music-player/Dockerfile → gmus-backend/Dockerfile


+ 3 - 3
music-player/Makefile → gmus-backend/Makefile

@@ -14,7 +14,7 @@ clean:
 	mkdir -p bin && rm -rf ./bin/*
 
 fmt:
-	go fmt github.com/felamaslen/go-music-player/...
+	go fmt github.com/felamaslen/gmus-backend/...
 
 test:
 	GO_ENV=test ginkgo ./...
@@ -25,6 +25,6 @@ migrate.make:
 	migrate create -ext sql -dir migrations -seq $(NAME)
 
 run.scan:
-	go run ./cmd/scan
+	GO_ENV=development go run ./cmd/scan
 run.server:
-	go run ./cmd/server
+	GO_ENV=development go run ./cmd/server

+ 35 - 3
music-player/README.md → gmus-backend/README.md

@@ -1,4 +1,4 @@
-# music-scanner
+# gmus-backend
 
 This is the backend part of the music player, written in Golang.
 
@@ -36,6 +36,38 @@ After getting the [migrate CLI tool](https://github.com/golang-migrate/migrate/t
 
 This is intended to be run as a scheduled job. It will scan a directory and add relevant metadata to a PostgreSQL database.
 
-**Usage**
+**Development usage**
 
-`bin/scan`
+`make run.scan`
+
+### REST/WebSocket API
+
+**Development usage**
+
+`make run.server`
+
+This is an HTTP server running the following endpoints:
+
+#### `GET /stream?songid=<id>`
+
+Streams an audio file based on the `songid` value in the query string.
+
+####  `GET /pubsub`
+
+Handles long-running client connections, initiating a websocket.
+
+#### `GET /artists`
+
+Fetches all artists, and outputs them in JSON format.
+
+#### `GET /albums?artist=<artist>`
+
+Fetches albums for a particular artist, and outputs them in JSON format.
+
+#### `GET /songs?artist=<artist>`
+
+Fetches songs for a particular artist, and outputs them in JSON format.
+
+#### `GET /song-info?id=<id>`
+
+Fetches info for a particular song, based on its ID, and outputs it in JSON format.

+ 1 - 1
music-player/cmd/migrate/main.go → gmus-backend/cmd/migrate/main.go

@@ -1,7 +1,7 @@
 package main
 
 import (
-	"github.com/felamaslen/go-music-player/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/database"
 )
 
 func main() {

+ 3 - 3
music-player/cmd/scan/main.go → gmus-backend/cmd/scan/main.go

@@ -1,9 +1,9 @@
 package main
 
 import (
-	"github.com/felamaslen/go-music-player/pkg/config"
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/services"
+	"github.com/felamaslen/gmus-backend/pkg/config"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/services"
 )
 
 func main() {

+ 1 - 1
music-player/cmd/server/main.go → gmus-backend/cmd/server/main.go

@@ -1,7 +1,7 @@
 package main
 
 import (
-	"github.com/felamaslen/go-music-player/pkg/server"
+	"github.com/felamaslen/gmus-backend/pkg/server"
 )
 
 func main() {

+ 0 - 0
music-player/docker-compose.yml → gmus-backend/docker-compose.yml


+ 0 - 0
music-player/example.env → gmus-backend/example.env


+ 1 - 1
music-player/go.mod → gmus-backend/go.mod

@@ -1,4 +1,4 @@
-module github.com/felamaslen/go-music-player
+module github.com/felamaslen/gmus-backend
 
 go 1.15
 

+ 0 - 0
music-player/go.sum → gmus-backend/go.sum


+ 0 - 0
music-player/init.sql → gmus-backend/init.sql


+ 0 - 0
music-player/migrations/000001_create_songs_table.down.sql → gmus-backend/migrations/000001_create_songs_table.down.sql


+ 0 - 0
music-player/migrations/000001_create_songs_table.up.sql → gmus-backend/migrations/000001_create_songs_table.up.sql


+ 0 - 0
music-player/migrations/000002_unique_filename.down.sql → gmus-backend/migrations/000002_unique_filename.down.sql


+ 0 - 0
music-player/migrations/000002_unique_filename.up.sql → gmus-backend/migrations/000002_unique_filename.up.sql


+ 0 - 0
music-player/migrations/000003_song_file_modified_date.down.sql → gmus-backend/migrations/000003_song_file_modified_date.down.sql


+ 0 - 0
music-player/migrations/000003_song_file_modified_date.up.sql → gmus-backend/migrations/000003_song_file_modified_date.up.sql


+ 0 - 0
music-player/migrations/000004_track_number.down.sql → gmus-backend/migrations/000004_track_number.down.sql


+ 0 - 0
music-player/migrations/000004_track_number.up.sql → gmus-backend/migrations/000004_track_number.up.sql


+ 1 - 1
music-player/pkg/config/config.go → gmus-backend/pkg/config/config.go

@@ -9,7 +9,7 @@ import (
 
 	"github.com/joho/godotenv"
 
-	"github.com/felamaslen/go-music-player/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
 )
 
 var envLoaded = false

+ 0 - 0
music-player/pkg/config/main.go → gmus-backend/pkg/config/main.go


+ 1 - 1
music-player/pkg/database/main.go → gmus-backend/pkg/database/main.go

@@ -10,7 +10,7 @@ import (
 	_ "github.com/golang-migrate/migrate/v4/database/postgres"
 	_ "github.com/golang-migrate/migrate/v4/source/file"
 
-	config "github.com/felamaslen/go-music-player/pkg/config"
+	config "github.com/felamaslen/gmus-backend/pkg/config"
 
 	_ "github.com/jackc/pgx/stdlib"
 	"github.com/jmoiron/sqlx"

+ 0 - 0
music-player/pkg/logger/logger.go → gmus-backend/pkg/logger/logger.go


+ 1 - 1
music-player/pkg/read/audio.go → gmus-backend/pkg/read/audio.go

@@ -5,7 +5,7 @@ import (
 	"path/filepath"
 
 	tag "github.com/dhowden/tag"
-	duration "github.com/felamaslen/go-music-player/pkg/read/duration"
+	duration "github.com/felamaslen/gmus-backend/pkg/read/duration"
 )
 
 func ReadFile(basePath string, scannedFile *File) (song *Song, err error) {

+ 2 - 2
music-player/pkg/read/audio_test.go → gmus-backend/pkg/read/audio_test.go

@@ -7,8 +7,8 @@ import (
 	"os"
 	"path"
 
-	"github.com/felamaslen/go-music-player/pkg/read"
-	_ "github.com/felamaslen/go-music-player/pkg/testing"
+	"github.com/felamaslen/gmus-backend/pkg/read"
+	_ "github.com/felamaslen/gmus-backend/pkg/testing"
 )
 
 var _ = Describe("reading audio files", func() {

+ 0 - 0
music-player/pkg/read/duration/duration_suite_test.go → gmus-backend/pkg/read/duration/duration_suite_test.go


+ 0 - 0
music-player/pkg/read/duration/main.go → gmus-backend/pkg/read/duration/main.go


+ 0 - 0
music-player/pkg/read/duration/vorbis.go → gmus-backend/pkg/read/duration/vorbis.go


+ 2 - 2
music-player/pkg/read/duration/vorbis_test.go → gmus-backend/pkg/read/duration/vorbis_test.go

@@ -6,8 +6,8 @@ import (
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 
-	"github.com/felamaslen/go-music-player/pkg/read/duration"
-	_ "github.com/felamaslen/go-music-player/pkg/testing"
+	"github.com/felamaslen/gmus-backend/pkg/read/duration"
+	_ "github.com/felamaslen/gmus-backend/pkg/testing"
 )
 
 var _ = Describe("Reading ogg vorbis duration", func() {

+ 3 - 3
music-player/pkg/read/files.go → gmus-backend/pkg/read/files.go

@@ -4,9 +4,9 @@ import (
 	"io/ioutil"
 	"path/filepath"
 
-	config "github.com/felamaslen/go-music-player/pkg/config"
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/logger"
+	config "github.com/felamaslen/gmus-backend/pkg/config"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
 	"github.com/jmoiron/sqlx"
 	"github.com/lib/pq"
 )

+ 3 - 3
music-player/pkg/read/files_test.go → gmus-backend/pkg/read/files_test.go

@@ -7,9 +7,9 @@ import (
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/read"
-	setup "github.com/felamaslen/go-music-player/pkg/testing"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/read"
+	setup "github.com/felamaslen/gmus-backend/pkg/testing"
 )
 
 var _ = Describe("reading files", func() {

+ 0 - 0
music-player/pkg/read/main.go → gmus-backend/pkg/read/main.go


+ 0 - 0
music-player/pkg/read/read_suite_test.go → gmus-backend/pkg/read/read_suite_test.go


+ 0 - 0
music-player/pkg/read/test_file_info.go → gmus-backend/pkg/read/test_file_info.go


+ 0 - 0
music-player/pkg/read/testdata/file_example_OOG_1MG.ogg → gmus-backend/pkg/read/testdata/file_example_OOG_1MG.ogg


+ 0 - 0
music-player/pkg/read/testdata/nested/14 Clementi Piano Sonata in D major, Op 25 No 6 - Movement 2 Un poco andante.ogg → gmus-backend/pkg/read/testdata/nested/14 Clementi Piano Sonata in D major, Op 25 No 6 - Movement 2 Un poco andante.ogg


+ 0 - 0
music-player/pkg/read/types.go → gmus-backend/pkg/read/types.go


+ 0 - 0
music-player/pkg/repository/repository_suite_test.go → gmus-backend/pkg/repository/repository_suite_test.go


+ 1 - 1
music-player/pkg/repository/songs.go → gmus-backend/pkg/repository/songs.go

@@ -3,7 +3,7 @@ package repository
 import (
 	"errors"
 
-	"github.com/felamaslen/go-music-player/pkg/read"
+	"github.com/felamaslen/gmus-backend/pkg/read"
 	"github.com/jmoiron/sqlx"
 	"github.com/lib/pq"
 )

+ 4 - 4
music-player/pkg/repository/songs_test.go → gmus-backend/pkg/repository/songs_test.go

@@ -4,10 +4,10 @@ import (
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/read"
-	"github.com/felamaslen/go-music-player/pkg/repository"
-	setup "github.com/felamaslen/go-music-player/pkg/testing"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/read"
+	"github.com/felamaslen/gmus-backend/pkg/repository"
+	setup "github.com/felamaslen/gmus-backend/pkg/testing"
 )
 
 var _ = Describe("songs repository", func() {

+ 3 - 1
music-player/pkg/server/actions.go → gmus-backend/pkg/server/actions.go

@@ -3,6 +3,7 @@ package server
 import (
 	"encoding/json"
 
+	"github.com/felamaslen/gmus-backend/pkg/logger"
 	"github.com/go-redis/redis/v7"
 )
 
@@ -19,10 +20,11 @@ type Action struct {
 	Payload    interface{} `json:"payload"`
 }
 
-func broadcastAction(thisPodClients *map[string]*Client, action *Action) []error {
+func broadcastAction(l *logger.Logger, thisPodClients *map[string]*Client, action *Action) []error {
 	var errors []error
 
 	for _, client := range *thisPodClients {
+		l.Debug("[->Client] %s (%s)\n", action.Type, client.name)
 		if err := client.send(action); err != nil {
 			errors = append(errors, err)
 		}

+ 1 - 3
music-player/pkg/server/clients.go → gmus-backend/pkg/server/clients.go

@@ -4,7 +4,7 @@ import (
 	"net/http"
 	"time"
 
-	"github.com/felamaslen/go-music-player/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
 	"github.com/go-redis/redis/v7"
 )
 
@@ -97,8 +97,6 @@ func (c *Client) subscribeToMe(l *logger.Logger, rdb *redis.Client) {
 			})
 			c.exposeToNetwork(l, rdb)
 		} else {
-			l.Debug("[->Client] %s (%s)\n", actionFromClient.Type, c.name)
-
 			actionFromClient.FromClient = &c.name
 
 			if err := publishAction(rdb, &actionFromClient); err != nil {

+ 0 - 0
music-player/pkg/server/constants.go → gmus-backend/pkg/server/constants.go


+ 4 - 4
music-player/pkg/server/fetch.go → gmus-backend/pkg/server/fetch.go

@@ -5,10 +5,10 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/logger"
-	"github.com/felamaslen/go-music-player/pkg/read"
-	"github.com/felamaslen/go-music-player/pkg/repository"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/read"
+	"github.com/felamaslen/gmus-backend/pkg/repository"
 	"github.com/go-redis/redis/v7"
 )
 

+ 1 - 1
music-player/pkg/server/handler.go → gmus-backend/pkg/server/handler.go

@@ -3,7 +3,7 @@ package server
 import (
 	"net/http"
 
-	"github.com/felamaslen/go-music-player/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
 	"github.com/go-redis/redis/v7"
 )
 

+ 2 - 2
music-player/pkg/server/pubsub.go → gmus-backend/pkg/server/pubsub.go

@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"time"
 
-	"github.com/felamaslen/go-music-player/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
 	"github.com/go-redis/redis/v7"
 	"github.com/gorilla/mux"
 	"github.com/gorilla/websocket"
@@ -94,7 +94,7 @@ func subscribeToBroadcast(
 					l.Debug("[<-Client] %s (%s)\n", actionFromPubsub.Type, *actionFromPubsub.FromClient)
 				}
 
-				errors := broadcastAction(thisPodClients, &actionFromPubsub)
+				errors := broadcastAction(l, thisPodClients, &actionFromPubsub)
 
 				if len(errors) > 0 {
 					l.Warn("Error broadcasting: %v\n", errors)

+ 2 - 2
music-player/pkg/server/server.go → gmus-backend/pkg/server/server.go

@@ -5,8 +5,8 @@ import (
 	"log"
 	"net/http"
 
-	"github.com/felamaslen/go-music-player/pkg/config"
-	"github.com/felamaslen/go-music-player/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/config"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
 	"github.com/go-redis/redis/v7"
 	"github.com/gorilla/mux"
 	"github.com/rs/cors"

+ 0 - 0
music-player/pkg/server/state.go → gmus-backend/pkg/server/state.go


+ 3 - 3
music-player/pkg/server/stream.go → gmus-backend/pkg/server/stream.go

@@ -7,9 +7,9 @@ import (
 	"strconv"
 	"time"
 
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/logger"
-	"github.com/felamaslen/go-music-player/pkg/repository"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/repository"
 	"github.com/go-redis/redis/v7"
 )
 

+ 2 - 2
music-player/pkg/services/fetch.go → gmus-backend/pkg/services/fetch.go

@@ -1,8 +1,8 @@
 package services
 
 import (
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/repository"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/repository"
 )
 
 func GetArtists(limit int, page int) (artists *[]string, more bool) {

+ 3 - 3
music-player/pkg/services/fetch_test.go → gmus-backend/pkg/services/fetch_test.go

@@ -7,9 +7,9 @@ import (
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/services"
-	setup "github.com/felamaslen/go-music-player/pkg/testing"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/services"
+	setup "github.com/felamaslen/gmus-backend/pkg/testing"
 )
 
 var _ = Describe("Fetching data", func() {

+ 5 - 5
music-player/pkg/services/scanner.go → gmus-backend/pkg/services/scanner.go

@@ -1,11 +1,11 @@
 package services
 
 import (
-	"github.com/felamaslen/go-music-player/pkg/config"
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/logger"
-	"github.com/felamaslen/go-music-player/pkg/read"
-	"github.com/felamaslen/go-music-player/pkg/repository"
+	"github.com/felamaslen/gmus-backend/pkg/config"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
+	"github.com/felamaslen/gmus-backend/pkg/read"
+	"github.com/felamaslen/gmus-backend/pkg/repository"
 )
 
 const LOG_EVERY = 100

+ 4 - 4
music-player/pkg/services/scanner_test.go → gmus-backend/pkg/services/scanner_test.go

@@ -4,10 +4,10 @@ import (
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 
-	"github.com/felamaslen/go-music-player/pkg/database"
-	"github.com/felamaslen/go-music-player/pkg/read"
-	"github.com/felamaslen/go-music-player/pkg/services"
-	setup "github.com/felamaslen/go-music-player/pkg/testing"
+	"github.com/felamaslen/gmus-backend/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/read"
+	"github.com/felamaslen/gmus-backend/pkg/services"
+	setup "github.com/felamaslen/gmus-backend/pkg/testing"
 )
 
 var _ = Describe("Music scanner service", func() {

+ 0 - 0
music-player/pkg/services/services_suite_test.go → gmus-backend/pkg/services/services_suite_test.go


+ 1 - 1
music-player/pkg/testing/testing.go → gmus-backend/pkg/testing/testing.go

@@ -5,7 +5,7 @@ import (
 	"path"
 	"runtime"
 
-	"github.com/felamaslen/go-music-player/pkg/database"
+	"github.com/felamaslen/gmus-backend/pkg/database"
 )
 
 func ChangeToRootDir() {

+ 0 - 0
music-player/test.env → gmus-backend/test.env


+ 0 - 0
gmus/.env.example → gmus-web/.env.example


+ 0 - 0
gmus/.env.test → gmus-web/.env.test


+ 0 - 0
gmus/.eslintrc.js → gmus-web/.eslintrc.js


+ 0 - 0
gmus/.gitignore → gmus-web/.gitignore


+ 0 - 0
gmus/.prettierrc.js → gmus-web/.prettierrc.js


+ 43 - 0
gmus-web/README.md

@@ -0,0 +1,43 @@
+# gmus-web
+
+This is a frontend web app for use with the [gmus backend](../gmus-backend/README.md).
+
+## Scripts
+
+### `yarn start`
+
+Runs the app in the development mode.
+
+### `yarn test`
+
+Runs tests
+
+### `yarn build`
+
+Builds app
+
+## Architecture
+
+### Global app
+
+This is the main part of the app. It is responsible for handling:
+
+- Global state such as which song is playing, and the current time
+- Connections to the API, through a websocket
+- Sharing state with other clients, and responding to updates from the API
+- Playing music, through an HTML <audio> element
+
+### UI
+
+This is the part of the app which implements user interaction. It is responsible for handling:
+
+- User input, to decide which actions to take
+- Display, to let the user know the state of things
+
+UIs follow a common model and are built into separate bundles, then [lazily loaded](./src/components/ui/index.ts).
+
+The following UIs are implemented:
+
+#### cmus
+
+This is based heavily on the cmus ncurses-based music player, and is essentially a web-based client with vim-like bindings for navigation.

+ 0 - 0
gmus/package.json → gmus-web/package.json


+ 0 - 0
gmus/public/favicon.ico → gmus-web/public/favicon.ico


+ 0 - 0
gmus/public/index.html → gmus-web/public/index.html


+ 0 - 0
gmus/public/logo192.png → gmus-web/public/logo192.png


+ 0 - 0
gmus/public/logo512.png → gmus-web/public/logo512.png


+ 0 - 0
gmus/public/manifest.json → gmus-web/public/manifest.json


+ 0 - 0
gmus/public/robots.txt → gmus-web/public/robots.txt


+ 0 - 0
gmus/src/actions/actions.ts → gmus-web/src/actions/actions.ts


+ 0 - 0
gmus/src/actions/error.ts → gmus-web/src/actions/error.ts


+ 0 - 0
gmus/src/actions/index.ts → gmus-web/src/actions/index.ts


+ 0 - 0
gmus/src/actions/types.ts → gmus-web/src/actions/types.ts


+ 0 - 0
gmus/src/components/app.tsx → gmus-web/src/components/app.tsx


+ 0 - 0
gmus/src/components/identify.spec.tsx → gmus-web/src/components/identify.spec.tsx


+ 0 - 0
gmus/src/components/identify.styles.ts → gmus-web/src/components/identify.styles.ts


+ 0 - 0
gmus/src/components/identify.tsx → gmus-web/src/components/identify.tsx


+ 0 - 0
gmus/src/components/player.tsx → gmus-web/src/components/player.tsx


+ 0 - 0
gmus/src/components/root.tsx → gmus-web/src/components/root.tsx


+ 0 - 0
gmus/src/components/ui/cmus/actions.ts → gmus-web/src/components/ui/cmus/actions.ts


+ 0 - 0
gmus/src/components/ui/cmus/index.ts → gmus-web/src/components/ui/cmus/index.ts


+ 0 - 0
gmus/src/components/ui/cmus/reducer.spec.ts → gmus-web/src/components/ui/cmus/reducer.spec.ts


+ 0 - 0
gmus/src/components/ui/cmus/reducer.ts → gmus-web/src/components/ui/cmus/reducer.ts


+ 0 - 0
gmus/src/components/ui/cmus/styled/layout.ts → gmus-web/src/components/ui/cmus/styled/layout.ts


+ 0 - 0
gmus/src/components/ui/cmus/styled/spinner.tsx → gmus-web/src/components/ui/cmus/styled/spinner.tsx


+ 0 - 0
gmus/src/components/ui/cmus/styled/typography.ts → gmus-web/src/components/ui/cmus/styled/typography.ts


+ 0 - 0
gmus/src/components/ui/cmus/styled/variables.ts → gmus-web/src/components/ui/cmus/styled/variables.ts


+ 0 - 0
gmus/src/components/ui/cmus/types.ts → gmus-web/src/components/ui/cmus/types.ts


+ 0 - 0
gmus/src/components/ui/cmus/utils/library.ts → gmus-web/src/components/ui/cmus/utils/library.ts


+ 0 - 0
gmus/src/components/ui/cmus/utils/scroll.spec.ts → gmus-web/src/components/ui/cmus/utils/scroll.spec.ts


+ 0 - 0
gmus/src/components/ui/cmus/utils/scroll.ts → gmus-web/src/components/ui/cmus/utils/scroll.ts


+ 0 - 0
gmus/src/components/ui/cmus/views/artists.styles.ts → gmus-web/src/components/ui/cmus/views/artists.styles.ts


+ 0 - 0
gmus/src/components/ui/cmus/views/artists.tsx → gmus-web/src/components/ui/cmus/views/artists.tsx


+ 0 - 0
gmus/src/components/ui/cmus/views/clients.styles.ts → gmus-web/src/components/ui/cmus/views/clients.styles.ts


+ 0 - 0
gmus/src/components/ui/cmus/views/clients.tsx → gmus-web/src/components/ui/cmus/views/clients.tsx


+ 0 - 0
gmus/src/components/ui/cmus/views/command.styles.ts → gmus-web/src/components/ui/cmus/views/command.styles.ts


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä