upgrade sqlite3
This commit is contained in:
@@ -11,7 +11,7 @@ COPY go.mod .
|
|||||||
COPY go.sum .
|
COPY go.sum .
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN ./_do_build_server && ./_do_build_scanner
|
RUN ./_do_build_server
|
||||||
|
|
||||||
FROM alpine:3.9
|
FROM alpine:3.9
|
||||||
RUN apk add -U --no-cache \
|
RUN apk add -U --no-cache \
|
||||||
@@ -24,7 +24,6 @@ COPY --from=builder \
|
|||||||
/usr/lib/
|
/usr/lib/
|
||||||
COPY --from=builder \
|
COPY --from=builder \
|
||||||
/src/gonic \
|
/src/gonic \
|
||||||
/src/gonicscan \
|
|
||||||
/bin/
|
/bin/
|
||||||
VOLUME ["/data", "/music", "/cache"]
|
VOLUME ["/data", "/music", "/cache"]
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ WORKDIR /src
|
|||||||
COPY . .
|
COPY . .
|
||||||
RUN --mount=type=cache,target=/go/pkg/mod \
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
||||||
--mount=type=cache,target=/root/.cache/go-build \
|
--mount=type=cache,target=/root/.cache/go-build \
|
||||||
./_do_build_server && ./_do_build_scanner
|
./_do_build_server
|
||||||
|
|
||||||
FROM alpine:3.9
|
FROM alpine:3.9
|
||||||
RUN apk add -U --no-cache \
|
RUN apk add -U --no-cache \
|
||||||
@@ -25,7 +25,6 @@ COPY --from=builder \
|
|||||||
/usr/lib/
|
/usr/lib/
|
||||||
COPY --from=builder \
|
COPY --from=builder \
|
||||||
/src/gonic \
|
/src/gonic \
|
||||||
/src/gonicscan \
|
|
||||||
/bin/
|
/bin/
|
||||||
VOLUME ["/data", "/music", "/cache"]
|
VOLUME ["/data", "/music", "/cache"]
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
sqlite_foreign_keys
|
|
||||||
sqlite_vacuum_incr
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export GO111MODULE=on
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# using sh, is run from alpine
|
|
||||||
|
|
||||||
. ./_build_vars
|
|
||||||
go build \
|
|
||||||
-o gonicscan \
|
|
||||||
-tags "$(tr '\n' ' ' < _build_tags)" \
|
|
||||||
cmd/gonicscan/main.go
|
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# using sh, is run from alpine
|
# using sh, is run from alpine
|
||||||
|
|
||||||
. ./_build_vars
|
|
||||||
./_do_gen_assets
|
./_do_gen_assets
|
||||||
go build \
|
go build -o gonic cmd/gonic/main.go
|
||||||
-o gonic \
|
|
||||||
-tags "$(tr '\n' ' ' < _build_tags)" \
|
|
||||||
cmd/gonic/main.go
|
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ package version
|
|||||||
const NAME = "gonic"
|
const NAME = "gonic"
|
||||||
const NAME_UPPER = "GONIC"
|
const NAME_UPPER = "GONIC"
|
||||||
const NAME_EMBED = "gonicembed"
|
const NAME_EMBED = "gonicembed"
|
||||||
const NAME_SCAN = "gonicscan"
|
|
||||||
const VERSION = "$new_version"
|
const VERSION = "$new_version"
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
. ./_build_vars
|
|
||||||
go run \
|
|
||||||
-tags "$(tr '\n' ' ' < _build_tags)" \
|
|
||||||
cmd/gonicscan/main.go \
|
|
||||||
$@
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
. ./_build_vars
|
|
||||||
./_do_gen_assets
|
./_do_gen_assets
|
||||||
go run \
|
go run cmd/gonic/main.go $@
|
||||||
-tags "$(tr '\n' ' ' < _build_tags)" \
|
|
||||||
cmd/gonic/main.go \
|
|
||||||
$@
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
"github.com/oklog/run"
|
"github.com/oklog/run"
|
||||||
"github.com/peterbourgon/ff"
|
"github.com/peterbourgon/ff"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server"
|
"go.senan.xyz/gonic/server"
|
||||||
"go.senan.xyz/gonic/version"
|
"go.senan.xyz/gonic/version"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -118,21 +118,11 @@ func processAssets(c *config, files []string) error {
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
set := flag.NewFlagSet(version.NAME_EMBED, flag.ExitOnError)
|
set := flag.NewFlagSet(version.NAME_EMBED, flag.ExitOnError)
|
||||||
outPath := set.String(
|
outPath := set.String("out-path", "", "generated file's path (required)")
|
||||||
"out-path", "",
|
pkgName := set.String("package-name", "assets", "generated file's package name")
|
||||||
"generated file's path (required)")
|
tagList := set.String("tag-list", "", "generated file's build tag list")
|
||||||
pkgName := set.String(
|
assetsVarName := set.String("assets-var-name", "Assets", "generated assets var name")
|
||||||
"package-name", "assets",
|
assetPathPrefix := set.String("asset-path-prefix", "", "generated assets map key prefix")
|
||||||
"generated file's package name")
|
|
||||||
tagList := set.String(
|
|
||||||
"tag-list", "",
|
|
||||||
"generated file's build tag list")
|
|
||||||
assetsVarName := set.String(
|
|
||||||
"assets-var-name", "Assets",
|
|
||||||
"generated file's assets var name")
|
|
||||||
assetPathPrefix := set.String(
|
|
||||||
"asset-path-prefix", "",
|
|
||||||
"generated file's assets map key prefix to be stripped")
|
|
||||||
if err := ff.Parse(set, os.Args[1:]); err != nil {
|
if err := ff.Parse(set, os.Args[1:]); err != nil {
|
||||||
log.Fatalf("error parsing args: %v\n", err)
|
log.Fatalf("error parsing args: %v\n", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
|
||||||
"github.com/peterbourgon/ff"
|
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
|
||||||
"go.senan.xyz/gonic/scanner"
|
|
||||||
"go.senan.xyz/gonic/version"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
set := flag.NewFlagSet(version.NAME_SCAN, flag.ExitOnError)
|
|
||||||
musicPath := set.String("music-path", "", "path to music")
|
|
||||||
dbPath := set.String("db-path", "gonic.db", "path to database (optional)")
|
|
||||||
fullScan := set.Bool("full-scan", false, "ignore file modtimes while scanning (optional)")
|
|
||||||
if err := ff.Parse(set, os.Args[1:],
|
|
||||||
ff.WithEnvVarPrefix(version.NAME_UPPER),
|
|
||||||
); err != nil {
|
|
||||||
log.Fatalf("error parsing args: %v\n", err)
|
|
||||||
}
|
|
||||||
if _, err := os.Stat(*musicPath); os.IsNotExist(err) {
|
|
||||||
log.Fatal("please provide a valid music directory")
|
|
||||||
}
|
|
||||||
db, err := db.New(*dbPath)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("error opening database: %v\n", err)
|
|
||||||
}
|
|
||||||
defer db.Close()
|
|
||||||
s := scanner.New(*musicPath, db)
|
|
||||||
var scan func() error
|
|
||||||
switch {
|
|
||||||
case *fullScan:
|
|
||||||
scan = s.StartFull
|
|
||||||
default:
|
|
||||||
scan = s.StartInc
|
|
||||||
}
|
|
||||||
if err := scan(); err != nil {
|
|
||||||
log.Fatalf("error during scan: %v\n", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
go.mod
1
go.mod
@@ -18,6 +18,7 @@ require (
|
|||||||
github.com/josephburnett/jd v0.0.0-20190531151850-1f9071c800e7
|
github.com/josephburnett/jd v0.0.0-20190531151850-1f9071c800e7
|
||||||
github.com/karrick/godirwalk v1.15.2
|
github.com/karrick/godirwalk v1.15.2
|
||||||
github.com/kr/pretty v0.1.0 // indirect
|
github.com/kr/pretty v0.1.0 // indirect
|
||||||
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
||||||
github.com/nicksellen/audiotags v0.0.0-20160226222119-94015fa599bd
|
github.com/nicksellen/audiotags v0.0.0-20160226222119-94015fa599bd
|
||||||
github.com/oklog/run v1.1.0
|
github.com/oklog/run v1.1.0
|
||||||
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c
|
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c
|
||||||
|
|||||||
3
go.sum
3
go.sum
@@ -130,8 +130,9 @@ github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
|||||||
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08/go.mod h1:NXg0ArsFk0Y01623LgUqoqcouGDB+PwCCQlrwrG6xJ4=
|
github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08/go.mod h1:NXg0ArsFk0Y01623LgUqoqcouGDB+PwCCQlrwrG6xJ4=
|
||||||
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
|
|
||||||
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
||||||
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/mewkiz/flac v1.0.5 h1:dHGW/2kf+/KZ2GGqSVayNEhL9pluKn/rr/h/QqD9Ogc=
|
github.com/mewkiz/flac v1.0.5 h1:dHGW/2kf+/KZ2GGqSVayNEhL9pluKn/rr/h/QqD9Ogc=
|
||||||
github.com/mewkiz/flac v1.0.5/go.mod h1:EHZNU32dMF6alpurYyKHDLYpW1lYpBZ5WrXi/VuNIGs=
|
github.com/mewkiz/flac v1.0.5/go.mod h1:EHZNU32dMF6alpurYyKHDLYpW1lYpBZ5WrXi/VuNIGs=
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import (
|
|||||||
"github.com/oxtoacart/bpool"
|
"github.com/oxtoacart/bpool"
|
||||||
"github.com/wader/gormstore"
|
"github.com/wader/gormstore"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/assets"
|
"go.senan.xyz/gonic/server/assets"
|
||||||
"go.senan.xyz/gonic/server/ctrlbase"
|
"go.senan.xyz/gonic/server/ctrlbase"
|
||||||
"go.senan.xyz/gonic/version"
|
"go.senan.xyz/gonic/version"
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/scanner"
|
"go.senan.xyz/gonic/server/scanner"
|
||||||
"go.senan.xyz/gonic/server/encode"
|
"go.senan.xyz/gonic/server/encode"
|
||||||
"go.senan.xyz/gonic/server/lastfm"
|
"go.senan.xyz/gonic/server/lastfm"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
func playlistParseLine(c *Controller, path string) (int, error) {
|
func playlistParseLine(c *Controller, path string) (int, error) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
|
|
||||||
"github.com/gorilla/sessions"
|
"github.com/gorilla/sessions"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Controller) WithSession(next http.Handler) http.Handler {
|
func (c *Controller) WithSession(next http.Handler) http.Handler {
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/scanner"
|
"go.senan.xyz/gonic/server/scanner"
|
||||||
)
|
)
|
||||||
|
|
||||||
type statusWriter struct {
|
type statusWriter struct {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
jd "github.com/josephburnett/jd/lib"
|
jd "github.com/josephburnett/jd/lib"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/ctrlbase"
|
"go.senan.xyz/gonic/server/ctrlbase"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||||
"go.senan.xyz/gonic/server/lastfm"
|
"go.senan.xyz/gonic/server/lastfm"
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import (
|
|||||||
|
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/scanner"
|
"go.senan.xyz/gonic/server/scanner"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||||
"go.senan.xyz/gonic/server/lastfm"
|
"go.senan.xyz/gonic/server/lastfm"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
|
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||||
"go.senan.xyz/gonic/server/encode"
|
"go.senan.xyz/gonic/server/encode"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package spec
|
package spec
|
||||||
|
|
||||||
import "go.senan.xyz/gonic/db"
|
import "go.senan.xyz/gonic/server/db"
|
||||||
|
|
||||||
func NewPlaylist(p *db.Playlist) *Playlist {
|
func NewPlaylist(p *db.Playlist) *Playlist {
|
||||||
return &Playlist{
|
return &Playlist{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package spec
|
|||||||
import (
|
import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewAlbumByFolder(f *db.Album) *Album {
|
func NewAlbumByFolder(f *db.Album) *Album {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package spec
|
|||||||
import (
|
import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewAlbumByTags(a *db.Album, artist *db.Artist) *Album {
|
func NewAlbumByTags(a *db.Album, artist *db.Artist) *Album {
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package db
|
package db
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"log"
|
"log"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
@@ -16,11 +15,12 @@ var (
|
|||||||
dbOptions = url.Values{
|
dbOptions = url.Values{
|
||||||
// with this, multiple connections share a single data and schema cache.
|
// with this, multiple connections share a single data and schema cache.
|
||||||
// see https://www.sqlite.org/sharedcache.html
|
// see https://www.sqlite.org/sharedcache.html
|
||||||
"cache": []string{"shared"},
|
"cache": {"shared"},
|
||||||
// with this, the db sleeps for a little while when locked. can prevent
|
// with this, the db sleeps for a little while when locked. can prevent
|
||||||
// a SQLITE_BUSY. see https://www.sqlite.org/c3ref/busy_timeout.html
|
// a SQLITE_BUSY. see https://www.sqlite.org/c3ref/busy_timeout.html
|
||||||
"_busy_timeout": []string{"30000"},
|
"_busy_timeout": {"30000"},
|
||||||
"_journal_mode": []string{"WAL"},
|
"_journal_mode": {"WAL"},
|
||||||
|
"_foreign_keys": {"true"},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -29,8 +29,9 @@ type DB struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func New(path string) (*DB, error) {
|
func New(path string) (*DB, error) {
|
||||||
pathAndArgs := fmt.Sprintf("%s?%s", path, dbOptions.Encode())
|
url := url.URL{Path: path}
|
||||||
db, err := gorm.Open("sqlite3", pathAndArgs)
|
url.RawQuery = dbOptions.Encode()
|
||||||
|
db, err := gorm.Open("sqlite3", url.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "with gorm")
|
return nil, errors.Wrap(err, "with gorm")
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/mime"
|
"go.senan.xyz/gonic/server/mime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func splitInt(in, sep string) []int {
|
func splitInt(in, sep string) []int {
|
||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
"github.com/faiface/beep/mp3"
|
"github.com/faiface/beep/mp3"
|
||||||
"github.com/faiface/beep/speaker"
|
"github.com/faiface/beep/speaker"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/rainycape/unidecode"
|
"github.com/rainycape/unidecode"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/mime"
|
"go.senan.xyz/gonic/server/mime"
|
||||||
"go.senan.xyz/gonic/scanner/stack"
|
"go.senan.xyz/gonic/server/scanner/stack"
|
||||||
"go.senan.xyz/gonic/scanner/tags"
|
"go.senan.xyz/gonic/server/scanner/tags"
|
||||||
)
|
)
|
||||||
|
|
||||||
// isScanning acts as an atomic boolean semaphore. we don't
|
// isScanning acts as an atomic boolean semaphore. we don't
|
||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
var testScanner *Scanner
|
var testScanner *Scanner
|
||||||
@@ -4,7 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
type item struct {
|
type item struct {
|
||||||
@@ -3,7 +3,7 @@ package stack
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFolderStack(t *testing.T) {
|
func TestFolderStack(t *testing.T) {
|
||||||
@@ -10,8 +10,8 @@ import (
|
|||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|
||||||
"go.senan.xyz/gonic/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/scanner"
|
"go.senan.xyz/gonic/server/scanner"
|
||||||
"go.senan.xyz/gonic/server/assets"
|
"go.senan.xyz/gonic/server/assets"
|
||||||
"go.senan.xyz/gonic/server/ctrladmin"
|
"go.senan.xyz/gonic/server/ctrladmin"
|
||||||
"go.senan.xyz/gonic/server/ctrlbase"
|
"go.senan.xyz/gonic/server/ctrlbase"
|
||||||
|
|||||||
Reference in New Issue
Block a user