bool Database::updateDatabase(int fromver) { switch (fromver) { case 0: { QSqlQuery q0("create table Version (value integer)", db); //QSqlQuery q1("insert into Version (value) values ("+QString::number(DB_VERSION)+")"); QSqlQuery q3("alter table Artist add column art varchar(250)", db); QSqlQuery q4("alter table Album add column art varchar(250)", db); QSqlQuery q5("alter table Genre add column art varchar(250)", db); QSqlQuery q6("alter table Song drop column Mark", db); QSqlQuery q2("drop table Mark", db); qDebug("Update database from version 0"); } case 1: { QSqlQuery q0("create table Playlist (ID integer primary key autoincrement, value varchar(200), refs integer, rating integer, art varchar(250), list varchar(250))", db); qDebug("Update database from version 1"); } case 2: { QSqlQuery q0("alter table Album add column artist integer", db); qDebug("Update database from version 2"); QSqlQuery q1("select distinct Artist, Album from Song", db); while(q1.next()) { int ar = q1.value(0).toString().toInt(); QSqlQuery q2("select artist from Album where ID = "+q1.value(1).toString(), db); if(q2.next()) { int ar2 = q2.value(0).toString().toInt(); if(!ar2) { // update QSqlQuery q3("update Album set artist = "+q1.value(0).toString()+" where ID = "+q1.value(1).toString(), db); } else if(ar2 != ar) { // copy QSqlQuery q4("select value, art, refs, rating from Album where ID = "+q1.value(1).toString()+" and artist = "+q2.value(0).toString(), db); if(q4.next()) { int old_ref = q4.value(2).toString().toInt(); int old_rat = q4.value(3).toString().toInt(); QSqlQuery q5("insert into Album (value,art,artist) values ('"+q4.value(0).toString()+"','"+q4.value(1).toString()+"',"+q1.value(0).toString(), db); QSqlQuery q6("select ID from Album where value = '"+q4.value(0).toString()+"' and art = '"+q4.value(1).toString()+"' and artist = "+q1.value(0).toString(), db); if(q6.next()) { int id = q6.value(0).toString().toInt(); int ref=0, rat=0; QSqlQuery q7("select ID, Rating from Song where Artist = "+q1.value(0).toString()+" and Album = "+q1.value(1).toString(), db); while(q7.next()) { ref ++; rat += q7.value(1).toString().toInt(); QSqlQuery q8("update Song set Album = "+QString::number(id)+" where ID = "+q7.value(0).toString(), db); } QSqlQuery q8("update Album set refs = "+QString::number(ref)+", rating = "+QString::number(rat)+" where ID = "+QString::number(id), db); QSqlQuery q9("update Album set refs = "+QString::number(old_ref-ref)+", rating = "+QString::number(old_rat-rat)+" where ID = "+q1.value(1).toString(), db); } } } } } } case 3: { QSqlQuery q0("alter table Artist add column mbid varchar(50)", db); QSqlQuery q1("alter table Album add column mbid varchar(50)", db); qDebug("Update database from version 3"); } case 4: { QSqlQuery q0("create table Info(Mbid varchar(50) primary key, text varchar(10000))", db); qDebug("Update database from version 4"); } case 5: { QSqlQuery q0("", db); q0.prepare("create table SQLPlaylist (ID integer primary key autoincrement, value varchar(200), art varchar(250), data varchar(250))"); q0.exec(); CreateDefaultSqlPlaylists(); qDebug("Update database from version 5"); } case 6: { QSqlQuery q0("alter table Song add column Type varchar(30)", db); qDebug("Update database from version 6"); } case 7: { QSqlDatabase ldb; ldb = QSqlDatabase::addDatabase("QSQLITE", "tempLibraryDB"); ldb.setDatabaseName(QDir::homePath()+"/.cuberok/library.db"); if(!QFile::exists(ldb.databaseName())) { if(!QDir().mkpath(QDir::homePath()+"/.cuberok") || !ldb.open()) { qDebug("Can not create library database"); } else { QSqlQuery q0("create table Version (value integer)", ldb); QSqlQuery q1("insert into Version (value) values (0)", ldb); QSqlQuery q2("create table Playlist (ID integer primary key autoincrement, value varchar(200), refs integer, rating integer, art varchar(250), list varchar(250))", ldb); QSqlQuery q("select value, art from Playlist order by value ASC", db); q.exec(); int records = 0; while(q.next()) { QSqlQuery q3("", ldb); q3.prepare("insert into Playlist (value, art) values (:val, :art)"); q3.bindValue(":val", q.value(0).toString()); q3.bindValue(":art", q.value(1).toString()); q3.exec(); records ++; } ldb.close(); qDebug("%d records has been moved", records); } } QSqlQuery q2("drop table Playlist", db); QSqlDatabase::removeDatabase("tempLibraryDB"); qDebug("Update database from version 7"); } case 8: { QSqlQuery q0("alter table Song add column Date varchar(50)", db); CreateDefaultSqlPlaylists2(); qDebug("Update database from version 8"); } } proxy->message("Database update from version "+QString::number(fromver)); QSqlQuery q1("delete from Version", db); QSqlQuery q2("insert into Version (value) values ("+QString::number(DB_VERSION)+")", db); return true; }
void init_mine_mesh(GLShape& base_mesh, GLShape& wheel_mesh) { float d = 0.025f; float x0 = 1.5f * d; float x1 = 2.0f * d; float y0 = 3.0f * d; float y1 = 4.0f * d; float z0 = d * 0.25f; float z1 = d; Vector3 p0(-x1, 0.0f, z1); Vector3 p1(-x0, 0.0f, z1); Vector3 p2(-x0, y0, z0); Vector3 p3(x0, y0, z0); Vector3 p4(x0, 0.0f, z1); Vector3 p5(x1, 0.0f, z1); Vector3 p6(x1, y1, 0.0f); Vector3 p7(-x1, y1, 0.0f); Vector3 q0(-x1, 0.0f, -z1); Vector3 q1(-x0, 0.0f, -z1); Vector3 q2(-x0, y0, -z0); Vector3 q3(x0, y0, -z0); Vector3 q4(x0, 0.0f, -z1); Vector3 q5(x1, 0.0f, -z1); Vector3 q6(x1, y1, 0.0f); Vector3 q7(-x1, y1, 0.0f); base_mesh = { p0, p1, p2, p0, p2, p7, p2, p3, p6, p2, p6, p7, p3, p4, p5, p3, p5, p6, q0, q1, q2, q0, q2, q7, q2, q3, q6, q2, q6, q7, q3, q4, q5, q3, q5, q6 }; std::vector<Vector2> wheel = circle(Vector2(), 3.0f * d, 16); wheel = cut(wheel, circle(Vector2(), 2.5f * d, 16)); wheel_mesh = to_xy(triangulate(wheel)); Vector3 w0(-d * 0.25f, -2.75f * d, 0.0f); Vector3 w1(d * 0.25f, -2.75f * d, 0.0f); Vector3 w2(d * 0.25f, 2.75f * d, 0.0f); Vector3 w3(-d * 0.25f, 2.75f * d, 0.0f); Vector3 w4(-d * 2.75f, -0.25f * d, 0.0f); Vector3 w5(d * 2.75f, -0.25f * d, 0.0f); Vector3 w6(d * 2.75f, 0.25f * d, 0.0f); Vector3 w7(-d * 2.75f, 0.25f * d, 0.0f); wheel_mesh.push_back(w0); wheel_mesh.push_back(w1); wheel_mesh.push_back(w2); wheel_mesh.push_back(w0); wheel_mesh.push_back(w2); wheel_mesh.push_back(w3); wheel_mesh.push_back(w4); wheel_mesh.push_back(w5); wheel_mesh.push_back(w6); wheel_mesh.push_back(w4); wheel_mesh.push_back(w6); wheel_mesh.push_back(w7); }