working Query listing (without a keyword to search)
This commit is contained in:
parent
f1ba5a3823
commit
11ffeb2d5d
325
3m.cpp
325
3m.cpp
@ -27,6 +27,22 @@ string server;
|
|||||||
string modinfo;
|
string modinfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct lmodlistdata {
|
||||||
|
string name;
|
||||||
|
string rmodlist;
|
||||||
|
string description;
|
||||||
|
int release;
|
||||||
|
vector<string> deps;
|
||||||
|
string repotype;
|
||||||
|
string repoaddr;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct repoinfodata {
|
||||||
|
string name;
|
||||||
|
int release;
|
||||||
|
string path;
|
||||||
|
};
|
||||||
|
|
||||||
struct rmodinfo {
|
struct rmodinfo {
|
||||||
string name;
|
string name;
|
||||||
string description;
|
string description;
|
||||||
@ -65,6 +81,24 @@ rmi.repoaddr = "";
|
|||||||
return rmi;
|
return rmi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lmodlistdata lmldclear(lmodlistdata lmld) {
|
||||||
|
lmld.name = "";
|
||||||
|
lmld.rmodlist = "";
|
||||||
|
lmld.description = "";
|
||||||
|
lmld.release = NULL;
|
||||||
|
lmld.deps.clear();
|
||||||
|
lmld.repotype = "";
|
||||||
|
lmld.repoaddr = "";
|
||||||
|
return lmld;
|
||||||
|
}
|
||||||
|
|
||||||
|
repoinfodata ridclear(repoinfodata rid) {
|
||||||
|
rid.name = "";
|
||||||
|
rid.release = NULL;
|
||||||
|
rid.path = "";
|
||||||
|
return rid;
|
||||||
|
}
|
||||||
|
|
||||||
string strgetline(string *str, int* erased) {
|
string strgetline(string *str, int* erased) {
|
||||||
string line = "";
|
string line = "";
|
||||||
int i;
|
int i;
|
||||||
@ -173,7 +207,7 @@ return 0;
|
|||||||
|
|
||||||
int parsemodlists(vector<modlistdata> *pmodlists, string rmfn) {
|
int parsemodlists(vector<modlistdata> *pmodlists, string rmfn) {
|
||||||
ifstream rmfile(rmfn.c_str());
|
ifstream rmfile(rmfn.c_str());
|
||||||
vector<modlistdata> tmpv = *pmodlists;
|
vector<modlistdata> tmpv;
|
||||||
if(!rmfile) {
|
if(!rmfile) {
|
||||||
cerr << "Remote modlist list parse error: Cannot open remote modlist file for reading" << endl;
|
cerr << "Remote modlist list parse error: Cannot open remote modlist file for reading" << endl;
|
||||||
}
|
}
|
||||||
@ -259,6 +293,234 @@ while(!rmfile.eof()) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int parselmodlist(vector<lmodlistdata> *lmodlist, string lmfn) {
|
||||||
|
ifstream lmfile(lmfn.c_str());
|
||||||
|
vector<lmodlistdata> tmpv;
|
||||||
|
if(!lmfile) {
|
||||||
|
cerr << "Local modlist parse error: Could not open local modlist file for reading!" << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
string action = "detect";
|
||||||
|
lmodlistdata tmplmld;
|
||||||
|
tmplmld = lmldclear(tmplmld);
|
||||||
|
while(!lmfile.eof()) {
|
||||||
|
string line = "";
|
||||||
|
char c;
|
||||||
|
do {
|
||||||
|
lmfile.get(c);
|
||||||
|
if(c != '\n');
|
||||||
|
line += c;
|
||||||
|
} while(c != '\n');
|
||||||
|
if(lmfile) {
|
||||||
|
if(action == "detect") {
|
||||||
|
if(line[0] == '{') {
|
||||||
|
string name = "";
|
||||||
|
for(int i = 1; line[i] != '}' && i < line.length(); i++) {
|
||||||
|
name += line[i];
|
||||||
|
}
|
||||||
|
tmplmld.name = name;
|
||||||
|
action = "parse";
|
||||||
|
} else {
|
||||||
|
cerr << "Local modlist parse error: Found " << line[0] << " although { was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if(action == "parse") {
|
||||||
|
if(line[0] == '{') {
|
||||||
|
if(line[1] == 'e' && line[2] == 'n' && line[3] == 'd' && line[4] == '}') {
|
||||||
|
if(tmplmld.name != "" && tmplmld.rmodlist != "" && tmplmld.description != "" && !tmplmld.deps.empty() && tmplmld.repotype != "" && tmplmld.repoaddr != "") {
|
||||||
|
tmpv.push_back(tmplmld);
|
||||||
|
tmplmld = lmldclear(tmplmld);
|
||||||
|
action = "detect";
|
||||||
|
} else {
|
||||||
|
cerr << "Local modlist parse error: Data error." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
action = "detect";
|
||||||
|
} else {
|
||||||
|
cerr << "Local modlist parse error: Found " << line << " although {end} or action in [] was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if(line[0] == '[') {
|
||||||
|
string tmpact = "";
|
||||||
|
for(int i = 1; line[i] != ']' && i < line.length(); i++) {
|
||||||
|
tmpact += line[i];
|
||||||
|
}
|
||||||
|
if(tmpact == "rmodlist" || tmpact == "description" || tmpact == "release" || tmpact == "deps" || tmpact == "repotype" || tmpact == "repoaddr") {
|
||||||
|
action = tmpact;
|
||||||
|
} else {
|
||||||
|
cerr << "Local modlist parse error: Found " << tmpact << " although rmodlist/description/release/deps/repotype/repoaddr was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cerr << "Local modlist parse error: Found " << line << " although {end} or action in [] was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if(action == "rmodlist") {
|
||||||
|
if(line[0] == '[' || line[0] == '{') {
|
||||||
|
cerr << "Local modlist parse error: Found " << line[0] << " although string was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
tmplmld.rmodlist = line;
|
||||||
|
action = "parse";
|
||||||
|
}
|
||||||
|
} else if(action == "description") {
|
||||||
|
if(line[0] == '[' || line[0] == '{') {
|
||||||
|
cerr << "Local modlist parse error: Found " << line[0] << " although string was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
tmplmld.description = line;
|
||||||
|
action = "parse";
|
||||||
|
}
|
||||||
|
} else if(action == "release") {
|
||||||
|
if(line[0] == '[' || line[0] == '{') {
|
||||||
|
cerr << "Local modlist parse error: Found " << line[0] << " although string was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
tmplmld.release = atoi(line.c_str());
|
||||||
|
action = "parse";
|
||||||
|
}
|
||||||
|
} else if(action == "deps") {
|
||||||
|
if(line[0] == '{') {
|
||||||
|
cerr << "Local modlist parse error: Found " << line[0] << " although string or [ was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
} else if(line[0] == '[') {
|
||||||
|
if(line[1] == 'd' && line[2] == 'e' && line[3] == 'p' && line[4] == 's' && line[5] == 'e' && line[6] == 'n' && line[7] == 'd' && line[8] == ']') {
|
||||||
|
if(tmplmld.deps.empty()) {
|
||||||
|
tmplmld.deps.push_back("none");
|
||||||
|
}
|
||||||
|
action = "parse";
|
||||||
|
} else {
|
||||||
|
cerr << "Local modlist parse error: Found " << line << " although string or [depsend] was expected." << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tmplmld.deps.push_back(line);
|
||||||
|
}
|
||||||
|
} else if(action == "repotype") {
|
||||||
|
if(line[0] == '[' || line[0] == '{') {
|
||||||
|
cerr << "Local modlist parse error: Found " << line[0] << " although string was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
tmplmld.repotype = line;
|
||||||
|
action = "parse";
|
||||||
|
}
|
||||||
|
} else if(action == "repoaddr") {
|
||||||
|
if(line[0] == '[' || line[0] == '{') {
|
||||||
|
cerr << "Local modlist parse error: Found " << line[0] << " although string was expected." << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
tmplmld.repoaddr = line;
|
||||||
|
action = "parse";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cerr << "Local modlist parse error: The program should not reach this place!" << endl;
|
||||||
|
lmfile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*lmodlist = tmpv;
|
||||||
|
lmfile.close();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int parserepoinfo(vector<repoinfodata> *repoinfo, string rifn) {
|
||||||
|
ifstream rifile(rifn.c_str());
|
||||||
|
vector<repoinfodata> tmpv = *repoinfo;
|
||||||
|
if(!rifile) {
|
||||||
|
cerr << "Local repoinfo parse error: Cannot open local repoinfo file for reading" << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
string action = "detect";
|
||||||
|
repoinfodata tmprid;
|
||||||
|
tmprid = ridclear(tmprid);
|
||||||
|
while(!rifile.eof()) {
|
||||||
|
string line;
|
||||||
|
rifile >> line;
|
||||||
|
if(rifile) {
|
||||||
|
if(action == "detect") {
|
||||||
|
if(line[0] == '{') {
|
||||||
|
string name = "";
|
||||||
|
for(int i = 1; line[i] != '}' && i < line.length(); i++) {
|
||||||
|
name += line[i];
|
||||||
|
}
|
||||||
|
tmprid.name = name;
|
||||||
|
action = "parse";
|
||||||
|
} else {
|
||||||
|
cerr << "Local repoinfo parse error: Found " << line[0] << " although { was expected." << endl;
|
||||||
|
rifile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if(action == "parse") {
|
||||||
|
if(line[0] == '{') {
|
||||||
|
if(line[1] == 'e' && line[2] == 'n' && line[3] == 'd' && line[4] == '}') {
|
||||||
|
if(tmprid.name != "" && tmprid.path != "") {
|
||||||
|
tmpv.push_back(tmprid);
|
||||||
|
} else {
|
||||||
|
cerr << "Local repoinfo parse error: Data error." << endl;
|
||||||
|
rifile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
action = "detect";
|
||||||
|
} else {
|
||||||
|
cerr << "Local repoinfo parse error: Found " << line << " although {end} or action in [] was expected." << endl;
|
||||||
|
rifile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if(line[0] == '[') {
|
||||||
|
string tmpact = "";
|
||||||
|
for(int i = 1; line[i] != ']' && i < line.length(); i++) {
|
||||||
|
tmpact += line[i];
|
||||||
|
}
|
||||||
|
if(tmpact == "release" || tmpact == "path") {
|
||||||
|
action = tmpact;
|
||||||
|
} else {
|
||||||
|
cerr << "Local repoinfo parse error: Found " << tmpact << " although release/path was expected." << endl;
|
||||||
|
rifile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cerr << "Local repoinfo parse error: Found " << line << " although {end} or action in [] was expected." << endl;
|
||||||
|
rifile.close();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if(action == "release") {
|
||||||
|
if(line[0] == '[' || line[0] == '{') {
|
||||||
|
cerr << "Local repoinfo parse error: Found " << line[0] << " although string was expected." << endl;
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
tmprid.release = atoi(line.c_str());
|
||||||
|
action = "parse";
|
||||||
|
}
|
||||||
|
} else if(action == "path") {
|
||||||
|
if(line[0] == '[' || line[0] == '{') {
|
||||||
|
cerr << "Local repoinfo parse error: Found " << line[0] << " although string was expected." << endl;
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
tmprid.path = line;
|
||||||
|
action = "parse";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cerr << "Local repoinfo parse error: The program should not reach this place!" << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*repoinfo = tmpv;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int parsermodlist(vector<rmodlistdata> *rmodlist, string modlist, int size) {
|
int parsermodlist(vector<rmodlistdata> *rmodlist, string modlist, int size) {
|
||||||
vector<rmodlistdata> tmpv = *rmodlist;
|
vector<rmodlistdata> tmpv = *rmodlist;
|
||||||
string action = "detect";
|
string action = "detect";
|
||||||
@ -411,6 +673,9 @@ for(int i = 0; i < size; i++) {
|
|||||||
return 1;
|
return 1;
|
||||||
} else if(line[0] == '[') {
|
} else if(line[0] == '[') {
|
||||||
if(line[1] == 'd' && line[2] == 'e' && line[3] == 'p' && line[4] == 's' && line[5] == 'e' && line[6] == 'n' && line[7] == 'd' && line[8] == ']') {
|
if(line[1] == 'd' && line[2] == 'e' && line[3] == 'p' && line[4] == 's' && line[5] == 'e' && line[6] == 'n' && line[7] == 'd' && line[8] == ']') {
|
||||||
|
if(tmp.deps.empty()) {
|
||||||
|
tmp.deps.push_back("none");
|
||||||
|
}
|
||||||
action = "parse";
|
action = "parse";
|
||||||
} else {
|
} else {
|
||||||
cerr << "Modinfo parse error: Found " << line << " although string or [depsend] was expected." << endl;
|
cerr << "Modinfo parse error: Found " << line << " although string or [depsend] was expected." << endl;
|
||||||
@ -895,6 +1160,64 @@ if(argv[1][1] == 'S') {
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
cout << "Sync finished successfully!" << endl;
|
cout << "Sync finished successfully!" << endl;
|
||||||
|
} else if(argv[1][1] == 'Q') {
|
||||||
|
vector<lmodlistdata> lmodlist;
|
||||||
|
vector<repoinfodata> repoinfo;
|
||||||
|
int lmpr;
|
||||||
|
int ripr;
|
||||||
|
lmpr = parselmodlist(&lmodlist, localml);
|
||||||
|
if(lmpr == 1) {
|
||||||
|
cerr << "Local modlist parse error! Aborting..." << endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
ripr = parserepoinfo(&repoinfo, localri);
|
||||||
|
if(ripr == 1) {
|
||||||
|
cout << "Local repoinfo parse error. This might mean no mod has been installed by 3m yet. Continuing..." << endl << endl;
|
||||||
|
}
|
||||||
|
if(argc == 2) {
|
||||||
|
for(int i = 0; i < lmodlist.size(); i++) {
|
||||||
|
repoinfodata ritmp;
|
||||||
|
ritmp = ridclear(ritmp);
|
||||||
|
if(ripr != 0) {
|
||||||
|
for(int j = 0; j < repoinfo.size(); j++) {
|
||||||
|
if(strip_endl(repoinfo[j].name) == strip_endl(lmodlist[i].name)) {
|
||||||
|
ritmp = repoinfo[j];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << strip_endl(lmodlist[i].rmodlist) << "/" << strip_endl(lmodlist[i].name) << " (release: " << lmodlist[i].release << ")";
|
||||||
|
if(ritmp.name != "") {
|
||||||
|
cout << " [installed: release " << ritmp.release;
|
||||||
|
if(ritmp.release < lmodlist[i].release) {
|
||||||
|
cout << " (Out of date!)";
|
||||||
|
}
|
||||||
|
cout << "]";
|
||||||
|
}
|
||||||
|
cout << endl << strip_endl(lmodlist[i].description) << endl;
|
||||||
|
if(strip_endl(lmodlist[i].deps[0]) != "none") {
|
||||||
|
cout << "Depends on: ";
|
||||||
|
for(int j = 0; j < lmodlist[i].deps.size(); j++) {
|
||||||
|
cout << strip_endl(lmodlist[i].deps[j]) << " ";
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
} else {
|
||||||
|
cout << strip_endl(lmodlist[i].rmodlist) << "/" << strip_endl(lmodlist[i].name) << " (release: " << lmodlist[i].release << ")" << endl;
|
||||||
|
cout << strip_endl(lmodlist[i].description) << endl;
|
||||||
|
if(strip_endl(lmodlist[i].deps[0]) != "none") {
|
||||||
|
cout << "Depends on: ";
|
||||||
|
for(int j = 0; j < lmodlist[i].deps.size(); j++) {
|
||||||
|
cout << strip_endl(lmodlist[i].deps[j]) << " ";
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cout << "Not implemented yet..." << endl;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cout << "No such action: " << argv[1] << endl << "Usage: " << argv[0] << " [-S/I/R/Q/h/v] [options] modname1 modname2 ..." << endl;
|
cout << "No such action: " << argv[1] << endl << "Usage: " << argv[0] << " [-S/I/R/Q/h/v] [options] modname1 modname2 ..." << endl;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user