Improve disk UI and build performance
This commit is contained in:
+42
-3
@@ -47,6 +47,10 @@ func (d *DB) migrate() error {
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_copy_history_disk_path
|
||||
ON copy_history (disk_id, source_path);
|
||||
CREATE TABLE IF NOT EXISTS disk_stats (
|
||||
disk_id TEXT PRIMARY KEY,
|
||||
last_copied_at DATETIME NOT NULL
|
||||
);
|
||||
`)
|
||||
return err
|
||||
}
|
||||
@@ -65,11 +69,26 @@ func (d *DB) RecordCopy(rec CopyRecord) error {
|
||||
if t.IsZero() {
|
||||
t = time.Now().UTC()
|
||||
}
|
||||
_, err := d.sql.Exec(
|
||||
tx, err := d.sql.Begin()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
if _, err := tx.Exec(
|
||||
`INSERT OR IGNORE INTO copy_history (disk_id, source_path, file_size, copied_at) VALUES (?,?,?,?)`,
|
||||
rec.DiskID, rec.SourcePath, rec.FileSize, t.Format(time.RFC3339),
|
||||
)
|
||||
return err
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec(
|
||||
`INSERT INTO disk_stats (disk_id, last_copied_at) VALUES (?, ?)
|
||||
ON CONFLICT(disk_id) DO UPDATE SET last_copied_at=excluded.last_copied_at`,
|
||||
rec.DiskID, t.Format(time.RFC3339),
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func (d *DB) CopiedPaths(diskID string) (map[string]struct{}, error) {
|
||||
@@ -90,3 +109,23 @@ func (d *DB) CopiedPaths(diskID string) (map[string]struct{}, error) {
|
||||
}
|
||||
return m, rows.Err()
|
||||
}
|
||||
|
||||
func (d *DB) LastCopiedAt(diskID string) (time.Time, bool, error) {
|
||||
var raw string
|
||||
err := d.sql.QueryRow(
|
||||
`SELECT last_copied_at FROM disk_stats WHERE disk_id=?`,
|
||||
diskID,
|
||||
).Scan(&raw)
|
||||
if err == sql.ErrNoRows {
|
||||
return time.Time{}, false, nil
|
||||
}
|
||||
if err != nil {
|
||||
return time.Time{}, false, err
|
||||
}
|
||||
|
||||
t, err := time.Parse(time.RFC3339, raw)
|
||||
if err != nil {
|
||||
return time.Time{}, false, err
|
||||
}
|
||||
return t, true, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user