diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp index ee5dd436b9181f53008cdbeb940025e43c2ba54f..7cfeca8747bb4e2034a8c912bd0dba5b8a06d397 100644 --- a/Fltk/onelabGroup.cpp +++ b/Fltk/onelabGroup.cpp @@ -401,7 +401,7 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master) it != onelab::server::instance()->lastClient(); it++){ reply.append(it->second->getName() + " "); } - Msg::Error("Skipping already existing client < %s> - Registered clients are <%s>",clientName.c_str(),reply.c_str()); + Msg::Error("Skipping already existing client <%s> - Registered clients are < %s>",clientName.c_str(),reply.c_str()); getGmshServer()->SendMessage (GmshSocket::GMSH_STOP, reply.size(), &reply[0]); // reply is dummy } @@ -725,7 +725,7 @@ static void archiveSolutionFiles(const std::string &fileName) std::vector<std::string> split = SplitFileName(names[j]); std::string old = names[j]; CreateSingleDir(dir); - names[j] = dir + split[1] + tag + split[2]; + names[j] = dir + split[1] + tag + split[2]; Msg::Info("Renaming '%s' into '%s'", old.c_str(), names[j].c_str()); rename(old.c_str(), names[j].c_str()); } @@ -851,22 +851,24 @@ void onelab_cb(Fl_Widget *w, void *data) std::vector<onelab::string> ps; onelab::server::instance()->get(ps,"0Metamodel/9Tag"); if(ps.size() && ps[0].getValue().size()){ - fileName.assign("onelab_" + ps[0].getValue() + ".db"); + fileName.assign("onelab_" + ps[0].getValue() + ".db"); } // save db in "restore" mode" + double restoreMode=0; std::vector<onelab::number> pn; onelab::server::instance()->get(pn,"0Metamodel/9Use restored solution"); if(pn.size()){ - pn[0].setValue(1); - pn[0].setVisible(1); + restoreMode=pn[0].getValue(); + pn[0].setValue(2); onelab::server::instance()->set(pn[0]); } std::string s; s.assign(SplitFileName(GModel::current()->getFileName())[0] + fileName); if(fileChooser(FILE_CHOOSER_CREATE, "Save", "*.db", s.c_str())){ - archiveSolutionFiles(fileChooserGetName(1)); + if(!restoreMode) + archiveSolutionFiles(fileChooserGetName(1)); saveDb(fileChooserGetName(1)); } @@ -874,7 +876,6 @@ void onelab_cb(Fl_Widget *w, void *data) onelab::server::instance()->get(pn,"0Metamodel/9Use restored solution"); if(pn.size()){ pn[0].setValue(0); - pn[0].setVisible(0); onelab::server::instance()->set(pn[0]); } action = "check"; diff --git a/contrib/onelab/python/onelab.py b/contrib/onelab/python/onelab.py index 35891cd6093c1c9150aaf4aeea87c1da37c55b81..57f3bbb7498272ccd40cd9c6ccfdbb36d3133a12 100755 --- a/contrib/onelab/python/onelab.py +++ b/contrib/onelab/python/onelab.py @@ -453,20 +453,6 @@ class client : self._send(self._GMSH_ERROR, line.rstrip().encode('utf-8')) sys.exit(1) - def getPath(self, inp='') : - return path(self.wdir,inp) - - def exists(self, p) : - if not os.path.exists(p): - self.sendError('path error: %s' %(p)) - exit(0) - return True - - def checkPath(self, inp='') : - p = path(self.wdir,inp) - self.exists(p) - return p - def copy(self, here, there): os.system('cp '+ here + ' ' + there) @@ -499,21 +485,58 @@ class client : self._send(self._GMSH_INFO, 'download: ' + ' '.join(argv)) else : print(call.stderr.read()) - - def solutionFiles(self, list) : + + def getPath(self, inp='') : + return path(self.wdir,inp) + + def fileExists(self, p) : + return os.path.exists(p) + + def checkFile(self, p) : + if not self.fileExists(p): + self.sendError('path error: %s' %(p)) + exit(0) + return True + + def checkPath(self, inp='') : + p = path(self.wdir,inp) + self.checkFile(p) + return p + + def solutionFiles(self, client, list) : self.defineNumber('0Metamodel/9Use restored solution', value=0, choices=[0,1]) self.defineString('0Metamodel/9Tag', value='') if list : if self.getNumber('0Metamodel/9Use restored solution') : - return self.getStringChoices('0Metamodel/9Solution files') + solFiles = self.getStringChoices('0Metamodel/9Solution files') + for i in solFiles: + self.checkFile(i) else : - self.setNumber('0Metamodel/9Use restored solution', visible=0) - self.setString('0Metamodel/9Solution files', value=list[0], - choices=list, readOnly=1) - return list + solFiles = list + self.setString('0Metamodel/9Solution files', value=solFiles[0], + choices=solFiles, readOnly=1) + for i in solFiles: + if not self.fileExists(i) : + self.setChanged(client, True) + return solFiles + + def needsCompute(self, client) : +# Avoid recomputation when a database with restored solutions has just been loaded +# Otherwise, stop using restored solutions when the client elmer has changed + if self.useRestoredSolution() == 2: # we have just loaded a database + self.setRestoredSolution(1) + self.setChanged(client, 0) # do not compute + else : + if self.isChanged(client): + self.setRestoredSolution(0) + return True + return False + + def useRestoredSolution(self) : + return self.getNumber('0Metamodel/9Use restored solution') - def restoreSolution(self) : - return self.getNumber('0Metamodel/9Use restored solution') + def setRestoredSolution(self, val) : + self.setNumber('0Metamodel/9Use restored solution', value=val) def outputFiles(self, list) : if list :