Enhance fileBrowser by possiblity to choose to include files
parent
7fd2d3cfb7
commit
708efdbbdb
|
@ -16,11 +16,10 @@ using std::string;
|
||||||
using std::vector;
|
using std::vector;
|
||||||
|
|
||||||
|
|
||||||
FileBrowser::FileBrowser()
|
FileBrowser::FileBrowser(bool includeFiles) : _includeFiles(includeFiles)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO let the user choose if file or only folders, create API class or do inside here?
|
|
||||||
std::vector<FileItem> FileBrowser::getFileStructure(const std::string &path)
|
std::vector<FileItem> FileBrowser::getFileStructure(const std::string &path)
|
||||||
{
|
{
|
||||||
//get local files, https://stackoverflow.com/questions/306533/how-do-i-get-a-list-of-files-in-a-directory-in-c
|
//get local files, https://stackoverflow.com/questions/306533/how-do-i-get-a-list-of-files-in-a-directory-in-c
|
||||||
|
@ -30,13 +29,13 @@ std::vector<FileItem> FileBrowser::getFileStructure(const std::string &path)
|
||||||
string localPath = path;
|
string localPath = path;
|
||||||
std::vector<FileItem> items;
|
std::vector<FileItem> items;
|
||||||
|
|
||||||
if(localPath.back() != '/')
|
if (localPath.back() != '/')
|
||||||
localPath = localPath + '/';
|
localPath = localPath + '/';
|
||||||
|
|
||||||
FileItem temp;
|
FileItem temp;
|
||||||
temp.path = localPath.substr(0,localPath.find_last_of('/'));
|
temp.path = localPath.substr(0,localPath.find_last_of('/'));
|
||||||
temp.path = temp.path.substr(0,temp.path.find_last_of('/'));
|
temp.path = temp.path.substr(0,temp.path.find_last_of('/'));
|
||||||
if(temp.path.empty())
|
if (temp.path.empty())
|
||||||
temp.path = "/";
|
temp.path = "/";
|
||||||
temp.name = "..";
|
temp.name = "..";
|
||||||
temp.type = Type::FFOLDER;
|
temp.type = Type::FFOLDER;
|
||||||
|
@ -58,24 +57,22 @@ std::vector<FileItem> FileBrowser::getFileStructure(const std::string &path)
|
||||||
if (stat(fullFileName.c_str(), &st) == -1)
|
if (stat(fullFileName.c_str(), &st) == -1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
FileItem temp;
|
|
||||||
if ((st.st_mode & S_IFDIR) != 0)
|
if ((st.st_mode & S_IFDIR) != 0)
|
||||||
{
|
{
|
||||||
temp.path = fullFileName;
|
FileItem temp;
|
||||||
|
temp.path = fullFileName + '/';
|
||||||
temp.name = fullFileName.substr(fullFileName.find_last_of("/") + 1, fullFileName.length());
|
temp.name = fullFileName.substr(fullFileName.find_last_of("/") + 1, fullFileName.length());
|
||||||
temp.type = Type::FFOLDER;
|
temp.type = Type::FFOLDER;
|
||||||
temp.path += '/';
|
|
||||||
items.push_back(temp);
|
items.push_back(temp);
|
||||||
}
|
}
|
||||||
else
|
else if (_includeFiles)
|
||||||
{
|
{
|
||||||
/*
|
//TODO test for files
|
||||||
|
FileItem temp;
|
||||||
temp.path = fullFileName;
|
temp.path = fullFileName;
|
||||||
temp.name = fullFileName.substr(fullFileName.find_last_of("/") + 1, fullFileName.length());
|
temp.name = fullFileName.substr(fullFileName.find_last_of("/") + 1, fullFileName.length());
|
||||||
temp.type = Type::FFILE;
|
temp.type = Type::FFILE;
|
||||||
temp.path += '/';
|
|
||||||
items.push_back(temp);
|
items.push_back(temp);
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
|
@ -22,15 +22,15 @@ class FileBrowser
|
||||||
* Creates a new FileBrowser object
|
* Creates a new FileBrowser object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
FileBrowser();
|
FileBrowser(bool includeFiles);
|
||||||
|
|
||||||
void test();
|
|
||||||
|
|
||||||
std::vector<FileItem> getFileStructure(const std::string &path);
|
std::vector<FileItem> getFileStructure(const std::string &path);
|
||||||
|
|
||||||
|
void setIncludeFiles(bool includeFiles) { _includeFiles = includeFiles;};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string _currentLocation;
|
bool _includeFiles;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -137,9 +137,9 @@ std::vector<WebDAVItem> SqliteConnector::getItemsChildren(const string &parentPa
|
||||||
temp.type = static_cast<Itemtype>(sqlite3_column_int(stmt,7));
|
temp.type = static_cast<Itemtype>(sqlite3_column_int(stmt,7));
|
||||||
temp.state = static_cast<FileState>(sqlite3_column_int(stmt,8));
|
temp.state = static_cast<FileState>(sqlite3_column_int(stmt,8));
|
||||||
|
|
||||||
if(iv_access(temp.localPath.c_str(), W_OK) != 0)
|
if (iv_access(temp.localPath.c_str(), W_OK) != 0)
|
||||||
{
|
{
|
||||||
if(temp.type == Itemtype::IFILE)
|
if (temp.type == Itemtype::IFILE)
|
||||||
temp.state = FileState::ICLOUD;
|
temp.state = FileState::ICLOUD;
|
||||||
else
|
else
|
||||||
iv_mkdir(temp.localPath.c_str(), 0777);
|
iv_mkdir(temp.localPath.c_str(), 0777);
|
||||||
|
|
|
@ -41,10 +41,11 @@ WebDAV::WebDAV()
|
||||||
std::vector<WebDAVItem> WebDAV::login(const string &Url, const string &Username, const string &Pass)
|
std::vector<WebDAVItem> WebDAV::login(const string &Url, const string &Username, const string &Pass)
|
||||||
{
|
{
|
||||||
string uuid;
|
string uuid;
|
||||||
std::size_t found = Url.find(NEXTCLOUD_ROOT_PATH);
|
|
||||||
|
|
||||||
_password = Pass;
|
_password = Pass;
|
||||||
_username = Username;
|
_username = Username;
|
||||||
|
|
||||||
|
std::size_t found = Url.find(NEXTCLOUD_ROOT_PATH);
|
||||||
if (found != std::string::npos)
|
if (found != std::string::npos)
|
||||||
{
|
{
|
||||||
_url = Url.substr(0, found);
|
_url = Url.substr(0, found);
|
||||||
|
@ -94,7 +95,7 @@ void WebDAV::logout(bool deleteFiles)
|
||||||
vector<WebDAVItem> WebDAV::getDataStructure(const string &pathUrl)
|
vector<WebDAVItem> WebDAV::getDataStructure(const string &pathUrl)
|
||||||
{
|
{
|
||||||
string xmlItem = propfind(pathUrl);
|
string xmlItem = propfind(pathUrl);
|
||||||
if(!xmlItem.empty())
|
if (!xmlItem.empty())
|
||||||
{
|
{
|
||||||
string beginItem = "<d:response>";
|
string beginItem = "<d:response>";
|
||||||
string endItem = "</d:response>";
|
string endItem = "</d:response>";
|
||||||
|
@ -145,11 +146,10 @@ vector<WebDAVItem> WebDAV::getDataStructure(const string &pathUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
//replaces everthing in front of /remote.php as this is already part of the url
|
//replaces everthing in front of /remote.php as this is already part of the url
|
||||||
if(tempItem.path.find(NEXTCLOUD_START_PATH) != 0)
|
if (tempItem.path.find(NEXTCLOUD_START_PATH) != 0)
|
||||||
tempItem.path.erase(0,tempItem.path.find(NEXTCLOUD_START_PATH));
|
tempItem.path.erase(0,tempItem.path.find(NEXTCLOUD_START_PATH));
|
||||||
|
|
||||||
tempItem.title = tempItem.path;
|
tempItem.title = tempItem.path;
|
||||||
//TODO make lambda?
|
|
||||||
tempItem.localPath = tempItem.path;
|
tempItem.localPath = tempItem.path;
|
||||||
Util::decodeUrl(tempItem.localPath);
|
Util::decodeUrl(tempItem.localPath);
|
||||||
if (tempItem.localPath.find(NEXTCLOUD_ROOT_PATH) != string::npos)
|
if (tempItem.localPath.find(NEXTCLOUD_ROOT_PATH) != string::npos)
|
||||||
|
@ -337,7 +337,7 @@ bool WebDAV::get(WebDAVItem &item)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string response = std::string("An error occured. (") + curl_easy_strerror(res) + " (Curl Error Code: " + std::to_string(res) + ")). Please try again.";
|
string response = std::string("An error occured. (") + curl_easy_strerror(res) + " (Curl Error Code: " + std::to_string(res) + ")). Please try again.";
|
||||||
if(res == 60)
|
if (res == 60)
|
||||||
response = "Seems as if you are using Let's Encrypt Certs. Please follow the guide on Github (https://github.com/JuanJakobo/Pocketbook-Nextcloud-Client) to use a custom Cert Store on PB.";
|
response = "Seems as if you are using Let's Encrypt Certs. Please follow the guide on Github (https://github.com/JuanJakobo/Pocketbook-Nextcloud-Client) to use a custom Cert Store on PB.";
|
||||||
Message(ICON_ERROR, "Error", response.c_str(), 4000);
|
Message(ICON_ERROR, "Error", response.c_str(), 4000);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,12 +46,12 @@ EventHandler::EventHandler()
|
||||||
currentWebDAVItems = _webDAV.getDataStructure(path);
|
currentWebDAVItems = _webDAV.getDataStructure(path);
|
||||||
_menu = std::unique_ptr<MainMenu>(new MainMenu("Nextcloud"));
|
_menu = std::unique_ptr<MainMenu>(new MainMenu("Nextcloud"));
|
||||||
|
|
||||||
if(currentWebDAVItems.empty())
|
if (currentWebDAVItems.empty())
|
||||||
currentWebDAVItems = _sqllite.getItemsChildren(path);
|
currentWebDAVItems = _sqllite.getItemsChildren(path);
|
||||||
else
|
else
|
||||||
updateItems(currentWebDAVItems);
|
updateItems(currentWebDAVItems);
|
||||||
|
|
||||||
if(currentWebDAVItems.empty())
|
if (currentWebDAVItems.empty())
|
||||||
{
|
{
|
||||||
int dialogResult = DialogSynchro(ICON_QUESTION, "Action", "Could not login and there is no DB available to restore information. What would you like to do?", "Logout", "Close App", NULL);
|
int dialogResult = DialogSynchro(ICON_QUESTION, "Action", "Could not login and there is no DB available to restore information. What would you like to do?", "Logout", "Close App", NULL);
|
||||||
switch (dialogResult)
|
switch (dialogResult)
|
||||||
|
@ -115,7 +115,7 @@ void EventHandler::mainMenuHandler(const int index)
|
||||||
childrenPath = childrenPath.substr(found+1,childrenPath.length());
|
childrenPath = childrenPath.substr(found+1,childrenPath.length());
|
||||||
auto state = _sqllite.getState(path);
|
auto state = _sqllite.getState(path);
|
||||||
Log::writeInfoLog("cur path " + path);
|
Log::writeInfoLog("cur path " + path);
|
||||||
if(i < 1 || state == FileState::IOUTSYNCED || state == FileState::ICLOUD)
|
if (i < 1 || state == FileState::IOUTSYNCED || state == FileState::ICLOUD)
|
||||||
{
|
{
|
||||||
UpdateProgressbar(("Upgrading " + path).c_str(), 0);
|
UpdateProgressbar(("Upgrading " + path).c_str(), 0);
|
||||||
currentWebDAVItems = _webDAV.getDataStructure(path);
|
currentWebDAVItems = _webDAV.getDataStructure(path);
|
||||||
|
@ -126,7 +126,7 @@ void EventHandler::mainMenuHandler(const int index)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(currentWebDAVItems.empty())
|
if (currentWebDAVItems.empty())
|
||||||
{
|
{
|
||||||
Log::writeErrorLog("Could not sync " + path + " via actualize.");
|
Log::writeErrorLog("Could not sync " + path + " via actualize.");
|
||||||
Message(ICON_WARNING, "Warning", "Could not sync the file structure.", 2000);
|
Message(ICON_WARNING, "Warning", "Could not sync the file structure.", 2000);
|
||||||
|
@ -146,7 +146,7 @@ void EventHandler::mainMenuHandler(const int index)
|
||||||
for(auto &item : currentWebDAVItems)
|
for(auto &item : currentWebDAVItems)
|
||||||
{
|
{
|
||||||
Log::writeInfoLog(item.path);
|
Log::writeInfoLog(item.path);
|
||||||
if(item.type == Itemtype::IFOLDER && item.state == FileState::IOUTSYNCED)
|
if (item.type == Itemtype::IFOLDER && item.state == FileState::IOUTSYNCED)
|
||||||
{
|
{
|
||||||
UpdateProgressbar(("Upgrading " + item.path).c_str(), 0);
|
UpdateProgressbar(("Upgrading " + item.path).c_str(), 0);
|
||||||
vector<WebDAVItem> tempWebDAVItems = _webDAV.getDataStructure(item.path);
|
vector<WebDAVItem> tempWebDAVItems = _webDAV.getDataStructure(item.path);
|
||||||
|
@ -154,11 +154,10 @@ void EventHandler::mainMenuHandler(const int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//TODO twice
|
|
||||||
currentWebDAVItems = _sqllite.getItemsChildren(_currentPath);
|
currentWebDAVItems = _sqllite.getItemsChildren(_currentPath);
|
||||||
|
|
||||||
CloseProgressbar();
|
CloseProgressbar();
|
||||||
if(!currentWebDAVItems.empty())
|
if (!currentWebDAVItems.empty())
|
||||||
drawWebDAVItems(currentWebDAVItems);
|
drawWebDAVItems(currentWebDAVItems);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -185,18 +184,15 @@ void EventHandler::mainMenuHandler(const int index)
|
||||||
case 103:
|
case 103:
|
||||||
{
|
{
|
||||||
|
|
||||||
if(_currentPath.back() != '/')
|
_currentPath =+ (_currentPath.back() != '/') ? "/nextcloud" : "nextcloud";
|
||||||
_currentPath = _currentPath + "/nextcloud";
|
|
||||||
else
|
|
||||||
_currentPath = _currentPath + "nextcloud";
|
|
||||||
|
|
||||||
if(iv_mkdir(_currentPath.c_str(), 0777) != 0)
|
if (iv_mkdir(_currentPath.c_str(), 0777) != 0)
|
||||||
Message(ICON_ERROR, "Error", "The permissions are not sufficient.", 1000);
|
Message(ICON_ERROR, "Error", "The permissions are not sufficient.", 1000);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Util::accessConfig(CONFIG_PATH, Action::IWriteString, "storageLocation", _currentPath);
|
Util::accessConfig(CONFIG_PATH, Action::IWriteString, "storageLocation", _currentPath);
|
||||||
std::vector<WebDAVItem> currentWebDAVItems = _webDAV.getDataStructure(NEXTCLOUD_ROOT_PATH + Util::accessConfig(CONFIG_PATH, Action::IReadString,"UUID") + '/');
|
std::vector<WebDAVItem> currentWebDAVItems = _webDAV.getDataStructure(NEXTCLOUD_ROOT_PATH + Util::accessConfig(CONFIG_PATH, Action::IReadString,"UUID") + '/');
|
||||||
if(currentWebDAVItems.empty())
|
if (currentWebDAVItems.empty())
|
||||||
{
|
{
|
||||||
Message(ICON_ERROR, "Error", "Failed to get items. Please try again.", 1000);
|
Message(ICON_ERROR, "Error", "Failed to get items. Please try again.", 1000);
|
||||||
}
|
}
|
||||||
|
@ -308,7 +304,7 @@ int EventHandler::pointerHandler(const int type, const int par1, const int par2)
|
||||||
}
|
}
|
||||||
else if (_webDAVView != nullptr)
|
else if (_webDAVView != nullptr)
|
||||||
{
|
{
|
||||||
if(_webDAVView->checkIfEntryClicked(par1, par2))
|
if (_webDAVView->checkIfEntryClicked(par1, par2))
|
||||||
{
|
{
|
||||||
_webDAVView->invertCurrentEntryColor();
|
_webDAVView->invertCurrentEntryColor();
|
||||||
|
|
||||||
|
@ -339,7 +335,7 @@ int EventHandler::pointerHandler(const int type, const int par1, const int par2)
|
||||||
ShowHourglassForce();
|
ShowHourglassForce();
|
||||||
|
|
||||||
std::vector<WebDAVItem> currentWebDAVItems = _webDAV.login(_loginView->getURL(), _loginView->getUsername(), _loginView->getPassword());
|
std::vector<WebDAVItem> currentWebDAVItems = _webDAV.login(_loginView->getURL(), _loginView->getUsername(), _loginView->getPassword());
|
||||||
if(currentWebDAVItems.empty())
|
if (currentWebDAVItems.empty())
|
||||||
{
|
{
|
||||||
Message(ICON_ERROR, "Error", "Login failed.", 1000);
|
Message(ICON_ERROR, "Error", "Login failed.", 1000);
|
||||||
HideHourglass();
|
HideHourglass();
|
||||||
|
@ -352,7 +348,7 @@ int EventHandler::pointerHandler(const int type, const int par1, const int par2)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
FileBrowser fileBrowser = FileBrowser();
|
FileBrowser fileBrowser = FileBrowser(false);
|
||||||
vector<FileItem> currentFolder = fileBrowser.getFileStructure(path);
|
vector<FileItem> currentFolder = fileBrowser.getFileStructure(path);
|
||||||
_currentPath = path;
|
_currentPath = path;
|
||||||
_loginView.reset();
|
_loginView.reset();
|
||||||
|
@ -369,15 +365,15 @@ int EventHandler::pointerHandler(const int type, const int par1, const int par2)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(_fileView != nullptr)
|
else if (_fileView != nullptr)
|
||||||
{
|
{
|
||||||
if(_fileView->checkIfEntryClicked(par1, par2))
|
if (_fileView->checkIfEntryClicked(par1, par2))
|
||||||
{
|
{
|
||||||
_fileView->invertCurrentEntryColor();
|
_fileView->invertCurrentEntryColor();
|
||||||
|
|
||||||
if (_fileView->getCurrentEntry().type == Type::FFOLDER)
|
if (_fileView->getCurrentEntry().type == Type::FFOLDER)
|
||||||
{
|
{
|
||||||
FileBrowser fileBrowser = FileBrowser();
|
FileBrowser fileBrowser = FileBrowser(false);
|
||||||
_currentPath = _fileView->getCurrentEntry().path;
|
_currentPath = _fileView->getCurrentEntry().path;
|
||||||
vector<FileItem> currentFolder = fileBrowser.getFileStructure(_currentPath);
|
vector<FileItem> currentFolder = fileBrowser.getFileStructure(_currentPath);
|
||||||
|
|
||||||
|
@ -401,7 +397,7 @@ void EventHandler::openItem()
|
||||||
{
|
{
|
||||||
Message(ICON_ERROR, "Error", "Could not find file.", 1000);
|
Message(ICON_ERROR, "Error", "Could not find file.", 1000);
|
||||||
}
|
}
|
||||||
else if(_webDAVView->getCurrentEntry().fileType.find("application/epub+zip") != string::npos ||
|
else if (_webDAVView->getCurrentEntry().fileType.find("application/epub+zip") != string::npos ||
|
||||||
_webDAVView->getCurrentEntry().fileType.find("application/pdf") != string::npos ||
|
_webDAVView->getCurrentEntry().fileType.find("application/pdf") != string::npos ||
|
||||||
_webDAVView->getCurrentEntry().fileType.find("application/octet-stream") != string::npos ||
|
_webDAVView->getCurrentEntry().fileType.find("application/octet-stream") != string::npos ||
|
||||||
_webDAVView->getCurrentEntry().fileType.find("text/plain") != string::npos ||
|
_webDAVView->getCurrentEntry().fileType.find("text/plain") != string::npos ||
|
||||||
|
@ -450,7 +446,7 @@ void EventHandler::openFolder()
|
||||||
|
|
||||||
int EventHandler::keyHandler(const int type, const int par1, const int par2)
|
int EventHandler::keyHandler(const int type, const int par1, const int par2)
|
||||||
{
|
{
|
||||||
if(_webDAVView != nullptr)
|
if (_webDAVView != nullptr)
|
||||||
{
|
{
|
||||||
if (type == EVT_KEYPRESS)
|
if (type == EVT_KEYPRESS)
|
||||||
{
|
{
|
||||||
|
@ -474,7 +470,7 @@ int EventHandler::keyHandler(const int type, const int par1, const int par2)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(_fileView != nullptr)
|
else if (_fileView != nullptr)
|
||||||
{
|
{
|
||||||
if (type == EVT_KEYPRESS)
|
if (type == EVT_KEYPRESS)
|
||||||
{
|
{
|
||||||
|
@ -511,7 +507,7 @@ void EventHandler::getLocalFileStructure(vector<WebDAVItem> &items)
|
||||||
class stat st;
|
class stat st;
|
||||||
|
|
||||||
string localPath = items.at(0).localPath + '/';
|
string localPath = items.at(0).localPath + '/';
|
||||||
if(localPath.back() != '/')
|
if (localPath.back() != '/')
|
||||||
localPath = localPath + '/';
|
localPath = localPath + '/';
|
||||||
if (iv_access(localPath.c_str(), W_OK) == 0)
|
if (iv_access(localPath.c_str(), W_OK) == 0)
|
||||||
{
|
{
|
||||||
|
@ -571,7 +567,7 @@ void EventHandler::downloadFolder(vector<WebDAVItem> &items, int itemID)
|
||||||
if (items.at(itemID).type == Itemtype::IFOLDER)
|
if (items.at(itemID).type == Itemtype::IFOLDER)
|
||||||
{
|
{
|
||||||
vector<WebDAVItem> tempItems;
|
vector<WebDAVItem> tempItems;
|
||||||
if(items.at(itemID).state == FileState::IOUTSYNCED || items.at(itemID).state == FileState::ICLOUD)
|
if (items.at(itemID).state == FileState::IOUTSYNCED || items.at(itemID).state == FileState::ICLOUD)
|
||||||
{
|
{
|
||||||
Log::writeInfoLog(path + "outsynced");
|
Log::writeInfoLog(path + "outsynced");
|
||||||
tempItems = _webDAV.getDataStructure(path);
|
tempItems = _webDAV.getDataStructure(path);
|
||||||
|
@ -594,7 +590,7 @@ void EventHandler::downloadFolder(vector<WebDAVItem> &items, int itemID)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(items.at(itemID).state == FileState::IOUTSYNCED || items.at(itemID).state == FileState::ICLOUD)
|
if (items.at(itemID).state == FileState::IOUTSYNCED || items.at(itemID).state == FileState::ICLOUD)
|
||||||
{
|
{
|
||||||
Log::writeInfoLog("outsynced");
|
Log::writeInfoLog("outsynced");
|
||||||
//TODO both direction
|
//TODO both direction
|
||||||
|
@ -604,7 +600,7 @@ void EventHandler::downloadFolder(vector<WebDAVItem> &items, int itemID)
|
||||||
//4. if first, renew file --> reset etag
|
//4. if first, renew file --> reset etag
|
||||||
//5. if second --> upload the local file; test if it has not been update in the cloud
|
//5. if second --> upload the local file; test if it has not been update in the cloud
|
||||||
Log::writeInfoLog("started download of " + items.at(itemID).path + " to " + items.at(itemID).localPath);
|
Log::writeInfoLog("started download of " + items.at(itemID).path + " to " + items.at(itemID).localPath);
|
||||||
if(_webDAV.get(items.at(itemID)))
|
if (_webDAV.get(items.at(itemID)))
|
||||||
{
|
{
|
||||||
items.at(itemID).state = FileState::ISYNCED;
|
items.at(itemID).state = FileState::ISYNCED;
|
||||||
_sqllite.updateState(items.at(itemID).path,FileState::ISYNCED);
|
_sqllite.updateState(items.at(itemID).path,FileState::ISYNCED);
|
||||||
|
@ -620,10 +616,10 @@ void EventHandler::startDownload()
|
||||||
{
|
{
|
||||||
OpenProgressbar(1, "Downloading...", "Starting Download.", 0, NULL);
|
OpenProgressbar(1, "Downloading...", "Starting Download.", 0, NULL);
|
||||||
|
|
||||||
if(_webDAVView->getCurrentEntry().type == Itemtype::IFILE)
|
if (_webDAVView->getCurrentEntry().type == Itemtype::IFILE)
|
||||||
{
|
{
|
||||||
Log::writeInfoLog("Started download of " + _webDAVView->getCurrentEntry().path + " to " + _webDAVView->getCurrentEntry().localPath);
|
Log::writeInfoLog("Started download of " + _webDAVView->getCurrentEntry().path + " to " + _webDAVView->getCurrentEntry().localPath);
|
||||||
if(_webDAV.get(_webDAVView->getCurrentEntry()))
|
if (_webDAV.get(_webDAVView->getCurrentEntry()))
|
||||||
{
|
{
|
||||||
_webDAVView->getCurrentEntry().state = FileState::ISYNCED;
|
_webDAVView->getCurrentEntry().state = FileState::ISYNCED;
|
||||||
_sqllite.updateState(_webDAVView->getCurrentEntry().path,FileState::ISYNCED);
|
_sqllite.updateState(_webDAVView->getCurrentEntry().path,FileState::ISYNCED);
|
||||||
|
@ -649,20 +645,17 @@ void EventHandler::updateItems(vector<WebDAVItem> &items)
|
||||||
{
|
{
|
||||||
item.state = _sqllite.getState(item.path);
|
item.state = _sqllite.getState(item.path);
|
||||||
|
|
||||||
if(iv_access(item.localPath.c_str(), W_OK) != 0)
|
if (iv_access(item.localPath.c_str(), W_OK) != 0)
|
||||||
{
|
{
|
||||||
if(item.type == Itemtype::IFILE)
|
if (item.type == Itemtype::IFILE)
|
||||||
item.state = FileState::ICLOUD;
|
item.state = FileState::ICLOUD;
|
||||||
else
|
else
|
||||||
iv_mkdir(item.localPath.c_str(), 0777);
|
iv_mkdir(item.localPath.c_str(), 0777);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_sqllite.getEtag(item.path).compare(item.etag) != 0)
|
if (_sqllite.getEtag(item.path).compare(item.etag) != 0)
|
||||||
{
|
{
|
||||||
if( item.state == FileState::ISYNCED)
|
item.state = (item.state == FileState::ISYNCED) ? FileState::IOUTSYNCED : FileState::ICLOUD;
|
||||||
item.state = FileState::IOUTSYNCED;
|
|
||||||
else
|
|
||||||
item.state = FileState::ICLOUD;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
items.at(0).state =FileState::ISYNCED;
|
items.at(0).state =FileState::ISYNCED;
|
||||||
|
|
|
@ -37,13 +37,10 @@ WebDAVView::WebDAVView(const irect &contentRect, vector<WebDAVItem> &items, int
|
||||||
{
|
{
|
||||||
auto entrySize = TextRectHeight(contentRect.w, item.title.c_str(), 0);
|
auto entrySize = TextRectHeight(contentRect.w, item.title.c_str(), 0);
|
||||||
|
|
||||||
if(item.type == IFILE)
|
if (item.type == IFILE)
|
||||||
entrySize += _entryFontHeight;
|
entrySize += _entryFontHeight;
|
||||||
|
|
||||||
if(item.title.find("click to go back") != std::string::npos)
|
entrySize += (item.title.find("click to go back") != std::string::npos) ? 0.5 * _entryFontHeight : 2.5 * _entryFontHeight;
|
||||||
entrySize += 0.5 * _entryFontHeight;
|
|
||||||
else
|
|
||||||
entrySize += 2.5 * _entryFontHeight;
|
|
||||||
|
|
||||||
|
|
||||||
if ((pageHeight + entrySize) > contentHeight)
|
if ((pageHeight + entrySize) > contentHeight)
|
||||||
|
|
|
@ -20,7 +20,7 @@ void WebDAVViewEntry::draw(const ifont *entryFont, const ifont *entryFontBold, i
|
||||||
|
|
||||||
SetFont(entryFontBold, BLACK);
|
SetFont(entryFontBold, BLACK);
|
||||||
int heightOfTitle = TextRectHeight(_position.w, _entry.title.c_str(), 0);
|
int heightOfTitle = TextRectHeight(_position.w, _entry.title.c_str(), 0);
|
||||||
if(_entry.title.find("click to go back") != std::string::npos)
|
if (_entry.title.find("click to go back") != std::string::npos)
|
||||||
DrawTextRect(_position.x, _position.y, _position.w, heightOfTitle, _entry.title.c_str(), ALIGN_CENTER);
|
DrawTextRect(_position.x, _position.y, _position.w, heightOfTitle, _entry.title.c_str(), ALIGN_CENTER);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue