qixiaoning
2025-07-08 fe724b50b3f1b3dfe2219eb9af4bcca96c89a158
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package models
 
import (
    "errors"
    "fmt"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
)
 
 
const (
    PlatformX64        = "amd64"
    PlatformArm        = "arm"
    PlatformNvidia     = "nvidia"
)
 
 
var db *gorm.DB
 
 
// Init creates a connection to mysql database and
// migrates any new models
func Init() {
    var err error
    db, err = gorm.Open("sqlite3", "./version.db")
    if err != nil {
        fmt.Println("Db Init failed", err)
        return;
    } else {
        fmt.Println("Db Init ok", err)
    }
 
    db.LogMode(true)
    db.AutoMigrate(&X64Programs{}, &ArmPrograms{}, &NvidiaPrograms{}, &DistFile{})
}
 
//GetDB ...
func GetDB() *gorm.DB {
    return db
}
 
func CloseDB() {
    _ = db.Close()
}
 
func IsValidPlatform(arch string) bool {
    switch arch {
    case PlatformX64:
        return true
    case PlatformArm:
        return true
    case PlatformNvidia:
        return true
    default:
        return false
    }
}
 
 
func FindAllPrograms(plat string) ([]Program, error) {
    var model PlatformModel
 
    switch plat {
    case PlatformX64:
        model = &X64Programs{}
    case PlatformArm:
        model = &ArmPrograms{}
    case PlatformNvidia:
        model = &NvidiaPrograms{}
    default:
        return nil, errors.New("unknown platform")
    }
 
    return model.FindAll()
}
 
func UpgradePrograms(plat string, programs []*Program) error {
    var model PlatformModel
 
    switch plat {
    case PlatformX64:
        model = &X64Programs{}
        //var m X64Programs
        //tableName = m.TableName()
    case PlatformArm:
        //var m ArmPrograms
        //tableName = m.TableName()
        model = &ArmPrograms{}
    case PlatformNvidia:
        //var m NvidiaPrograms
        //tableName = m.TableName()
        model = &NvidiaPrograms{}
    default:
        return errors.New("unknown platform")
    }
 
    tx := db.Begin()
    if err := tx.Delete(model).Error; nil != err {
        tx.Rollback()
        return err
    }
 
    for _, p := range programs {
        err := model.Insert(tx, p)
        if nil != err {
            tx.Rollback()
            return err
        }
    }
 
    tx.Commit()
 
    return nil
}