bmsdb

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 4, 2026 License: MIT Imports: 6 Imported by: 0

README

BMSDB

BMSDB is a golang library helps reading local data from bms clients' local data and scan files under a possible client installation. The supported clients are LR2 and Beatoraja. See test files to know how to use this library.

Supported tables

Beatoraja
Table Supported? Api Explain
songdata.db/folder No - -
songdata.db/song Yes SongData -
songinfo.db/information Yes SongInfo -
score.db/score Yes Score -
score.db/player No - -
score.db/info No - -
scorelog.db/scorelog Yes ScoreLog -
scoredatalog.db/scoredatalog Yes ScoreDataLog -
LR2
Table Supported Api Explain
[User.db]/score Yes Score -
[User.db]/player No - -
song.db/song Yes Song -
song.db/expert No - -
song.db/folder No - -
song.db/grade No - -
song.db/nonstop No - -

Tests

Tests are based on real database files. To run the test you have to open a '.database' directory under the project. And place the database files under it. The directory structure follows the client installation.

Example:

.
├── beatoraja
│   ├── player
│   │   ├── player1
│   │   │   ├── score.db
│   │   │   ├── scoredatalog.db
│   │   │   └── scorelog.db
│   │   └── player2
│   │       ├── score.db
│   │       ├── scoredatalog.db
│   │       └── scorelog.db
│   ├── songdata.db
│   ├── songinfo.db
└── LR2
    └── LR2files
        └── Database
            ├── Score
            │   └── ctz.db
            └── song.db

LICENSE

MIT

Documentation

Overview

Package bmsdb reads the data from local database files from bms clients

Index

Constants

View Source
const READONLY_PARAMETER = "?open_mode=1"

Variables

This section is empty.

Functions

This section is empty.

Types

type BeatorajaPlayerFolder

type BeatorajaPlayerFolder struct {
	Name         string
	Path         string
	Score        string
	ScoreLog     string
	ScoreDataLog string
}

type BeatorajaReader

type BeatorajaReader struct{}

func NewBeatorajaReader

func NewBeatorajaReader() *BeatorajaReader

func (*BeatorajaReader) Score

func (reader *BeatorajaReader) Score(query *QueryContext) ([]BeatorajaScoreData, error)

Score returns the data in score.db

func (*BeatorajaReader) ScoreDataLog

func (reader *BeatorajaReader) ScoreDataLog(query *QueryContext) ([]BeatorajaScoreDataLog, error)

ScoreDataLog returns the data in scoredatalog.db

func (*BeatorajaReader) ScoreLog

func (reader *BeatorajaReader) ScoreLog(query *QueryContext) ([]BeatorajaScoreLog, error)

ScoreLog returns the data in scorelog.db

func (*BeatorajaReader) SongData

func (reader *BeatorajaReader) SongData(query *QueryContext) ([]BeatorajaSongData, error)

func (*BeatorajaReader) SongInfo

func (reader *BeatorajaReader) SongInfo(query *QueryContext) ([]BeatorajaSongInfo, error)

type BeatorajaScanResult

type BeatorajaScanResult struct {
	SongData string
	SongInfo string
	Players  []BeatorajaPlayerFolder
}

type BeatorajaScanner

type BeatorajaScanner struct{}

func NewBeatorajaScanner

func NewBeatorajaScanner() *BeatorajaScanner

func (*BeatorajaScanner) ScanDirectory

func (scanner *BeatorajaScanner) ScanDirectory(dir string) (*BeatorajaScanResult, error)

type BeatorajaScoreData

type BeatorajaScoreData struct {
	Sha256     string
	Mode       int32
	Clear      int32
	Epg        int32
	Lpg        int32
	Egr        int32
	Lgr        int32
	Egd        int32
	Lgd        int32
	Ebd        int32
	Lbd        int32
	Epr        int32
	Lpr        int32
	Ems        int32
	Lms        int32
	Notes      int32
	Combo      int32
	Minbp      int32
	AvgJudge   int64 `gorm:"column:avgjudge"`
	PlayCount  int32 `gorm:"column:playcount"`
	ClearCount int32 `gorm:"column:clearcount"`
	Trophy     string
	Ghost      string
	Option     int32
	Seed       int64
	Random     int32
	TimeStamp  int64 `gorm:"column:date"`
	State      int32
	ScoreHash  string `gorm:"column:scorehash"`
}

func (BeatorajaScoreData) TableName

func (BeatorajaScoreData) TableName() string

type BeatorajaScoreDataLog

type BeatorajaScoreDataLog struct {
	Sha256     string
	Mode       int32
	Clear      int32
	Epg        int32
	Lpg        int32
	Egr        int32
	Lgr        int32
	Egd        int32
	Lgd        int32
	Ebd        int32
	Lbd        int32
	Epr        int32
	Lpr        int32
	Ems        int32
	Lms        int32
	Notes      int32
	Combo      int32
	Minbp      int32
	AvgJudge   int64 `gorm:"column:avgjudge"`
	PlayCount  int32 `gorm:"column:playcount"`
	ClearCount int32 `gorm:"column:clearcount"`
	Trophy     string
	Ghost      string
	Option     int32
	Seed       int64
	Random     int32
	TimeStamp  int64 `gorm:"column:date"`
	State      int32
	ScoreHash  string `gorm:"column:scorehash"`
}

func (BeatorajaScoreDataLog) TableName

func (BeatorajaScoreDataLog) TableName() string

type BeatorajaScoreLog

type BeatorajaScoreLog struct {
	Sha256    string
	Mode      int32
	Clear     int32
	OldClear  int32 `gorm:"column:oldclear"`
	Score     int32
	OldScore  int32 `gorm:"column:oldscore"`
	Combo     int32
	OldCombo  int32 `gorm:"column:oldcombo"`
	Minbp     int32
	OldMinbp  int32 `gorm:"column:oldminbp"`
	TimeStamp int64 `gorm:"column:date"`
}

func (BeatorajaScoreLog) TableName

func (BeatorajaScoreLog) TableName() string

type BeatorajaSongData

type BeatorajaSongData struct {
	Md5        string
	Sha256     string
	Title      string
	SubTitle   string `gorm:"column:subtitle"`
	Genre      string
	Artist     string
	SubArtist  string `gorm:"column:subartist"`
	Tag        string
	Path       string
	Folder     string
	StageFile  string `gorm:"column:stagefile"`
	Banner     string
	BackBmp    string `gorm:"column:backbmp"`
	Preview    string
	Parent     string
	Level      int32
	Difficulty int32
	MaxBpm     int32 `gorm:"column:maxbpm"`
	MinBpm     int32 `gorm:"column:minbpm"`
	Length     int32
	Mode       int32
	Judge      int32
	Feature    int32
	Content    int32
	Date       int64
	Favorite   int32
	AddDate    int64 `gorm:"column:adddate"`
	Notes      int32
	ChartHash  string `gorm:"column:charthash"`
}

func (BeatorajaSongData) TableName

func (BeatorajaSongData) TableName() string

type BeatorajaSongInfo

type BeatorajaSongInfo struct {
	Sha256       string
	N            int
	LN           int     `gorm:"column:ln"`
	S            int     `gorm:"column:s"`
	LS           int     `gorm:"column:ls"`
	Total        float64 `gorm:"column:total"`
	Density      float64 `gorm:"column:density"`
	PeakDensity  float64 `gorm:"column:peakdensity"`
	EndDensity   float64 `gorm:"column:enddensity"`
	MainBPM      float64 `gorm:"column:mainbpm"`
	Distribution string  `gorm:"column:distribution"`
	SpeedChange  string  `gorm:"column:speedchange"`
	LaneNotes    string  `gorm:"column:lanenotes"`
}

func (BeatorajaSongInfo) TableName

func (BeatorajaSongInfo) TableName() string

type LR2PlayerScoreFile

type LR2PlayerScoreFile struct {
	Name string
	Path string
}

type LR2Reader

type LR2Reader struct{}

func NewLR2Reader

func NewLR2Reader() *LR2Reader

func (*LR2Reader) Score

func (reader *LR2Reader) Score(query *QueryContext) ([]LR2Score, error)

func (*LR2Reader) Song

func (reader *LR2Reader) Song(query *QueryContext) ([]LR2Song, error)

type LR2ScanResult

type LR2ScanResult struct {
	Song   string
	Scores []LR2PlayerScoreFile
}

type LR2Scanner

type LR2Scanner struct{}

func NewLR2Scanner

func NewLR2Scanner() *LR2Scanner

func (*LR2Scanner) ScanDirectory

func (scanner *LR2Scanner) ScanDirectory(dir string) (*LR2ScanResult, error)

type LR2Score

type LR2Score struct {
	MD5        string `gorm:"column:hash"`
	Clear      int    `gorm:"column:clear"`
	Perfect    int    `gorm:"column:perfect"`
	Great      int    `gorm:"column:great"`
	Good       int    `gorm:"column:good"`
	Bad        int    `gorm:"column:bad"`
	Poor       int    `gorm:"column:poor"`
	TotalNotes int    `gorm:"column:totalnotes"`
	MaxCombo   int    `gorm:"column:maxcombo"`
	Minbp      int    `gorm:"column:minbp"`
	PlayCount  int    `gorm:"column:playcount"`
	ClearCount int    `gorm:"column:clearcount"`
	FailCount  int    `gorm:"column:failcount"`
	Rank       int    `gorm:"column:rank"`
	Rate       int    `gorm:"column:rate"`
	ClearDB    int    `gorm:"column:clear_db"`
	OpHistory  int    `gorm:"column:op_history"`
	ScoreHash  string `gorm:"column:scorehash"`
	Ghost      string `gorm:"column:ghost"`
	ClearSD    int    `gorm:"column:clear_sd"`
	ClearEX    int    `gorm:"column:clear_ex"`
	OpBest     int    `gorm:"column:op_best"`
	RSeed      int    `gorm:"column:rseed"`
	Complete   int    `gorm:"column:complete"`
	RowID      int    `gorm:"column:row_id"`
}

func (LR2Score) TableName

func (LR2Score) TableName() string

type LR2Song

type LR2Song struct {
	MD5        string `gorm:"column:hash"`
	Title      string `gorm:"column:title"`
	SubTitle   string `gorm:"column:subtitle"`
	Genre      string
	Artist     string
	SubArtist  string `gorm:"column:subartist"`
	Tag        string
	Path       string
	Folder     string
	Type       int    `gorm:"column:type"`
	StageFile  string `gorm:"column:stagefile"`
	Banner     string
	BackBmp    string `gorm:"column:backbmp"`
	Parent     string
	Level      int32
	Difficulty int32
	MaxBpm     int32 `gorm:"column:maxbpm"`
	MinBpm     int32 `gorm:"column:minbpm"`
	Mode       int32
	Judge      int32
	LongNote   int   `gorm:"column:longnote"`
	Bga        int   `gorm:"column:bga"`
	Random     int   `gorm:"column:random"`
	Date       int64 `gorm:"column:date"`
	Favorite   int   `gorm:"column:favorite"`
	Txt        int   `gorm:"column:txt"`
	Karinotes  int   `gorm:"column:karinotes"`
	AddDate    int64 `gorm:"column:adddate"`
	ExLevel    int   `gorm:"exlevel"`
}

func (LR2Song) TableName

func (LR2Song) TableName() string

type QueryContext

type QueryContext struct {
	// contains filtered or unexported fields
}

func NewQueryContext

func NewQueryContext(path string) *QueryContext

func (*QueryContext) After

func (q *QueryContext) After(timestamp int64) *QueryContext

type ScanContext

type ScanContext struct {
	// contains filtered or unexported fields
}

func NewScanContext

func NewScanContext(path string) *ScanContext

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL