Update path and naming limitations

* Resolve https://github.com/abraunegg/onedrive/issues/6
* Update OneDrive Business path length to 400 characters
* Update allowed characters for path and file names
This commit is contained in:
abraunegg 2018-05-25 14:12:39 +10:00
parent bc815541b6
commit 3381511e19
2 changed files with 4 additions and 5 deletions

View file

@ -817,7 +817,7 @@ final class SyncEngine
private void uploadNewItems(string path) private void uploadNewItems(string path)
{ {
// https://github.com/OneDrive/onedrive-api-docs/issues/443 // https://support.microsoft.com/en-us/help/3125202/restrictions-and-limitations-when-you-sync-files-and-folders
// If the path is greater than allowed characters, then one drive will return a '400 - Bad Request' // If the path is greater than allowed characters, then one drive will return a '400 - Bad Request'
// Need to ensure that the URI is encoded before the check is made // Need to ensure that the URI is encoded before the check is made
// 256 Character Limit for OneDrive Business / Office 365 // 256 Character Limit for OneDrive Business / Office 365
@ -825,7 +825,7 @@ final class SyncEngine
auto maxPathLength = 0; auto maxPathLength = 0;
if (accountType == "business"){ if (accountType == "business"){
// Business Account // Business Account
maxPathLength = 256; maxPathLength = 400;
} else { } else {
// Personal Account // Personal Account
maxPathLength = 430; maxPathLength = 430;

View file

@ -140,12 +140,13 @@ bool isValidName(string path)
// Restriction and limitations about windows naming files // Restriction and limitations about windows naming files
// https://msdn.microsoft.com/en-us/library/aa365247 // https://msdn.microsoft.com/en-us/library/aa365247
// https://support.microsoft.com/en-us/help/3125202/restrictions-and-limitations-when-you-sync-files-and-folders
auto invalidNameReg = auto invalidNameReg =
ctRegex!( ctRegex!(
// leading whitespace and trailing whitespace/dot // leading whitespace and trailing whitespace/dot
`^\s.*|^.*[\s\.]$|` ~ `^\s.*|^.*[\s\.]$|` ~
// invalid character // invalid character
`.*[#%<>:"\|\?*/\\].*|` ~ `.*[<>:"\|\?*/\\].*|` ~
// reserved device name and trailing .~ // reserved device name and trailing .~
`(?:CON|PRN|AUX|NUL|COM[0-9]|LPT[0-9])(?:[.].+)?$` `(?:CON|PRN|AUX|NUL|COM[0-9]|LPT[0-9])(?:[.].+)?$`
); );
@ -165,8 +166,6 @@ unittest
assert(!isValidName("./ leading_white_space")); assert(!isValidName("./ leading_white_space"));
assert(!isValidName("./trailing_white_space ")); assert(!isValidName("./trailing_white_space "));
assert(!isValidName("./trailing_dot.")); assert(!isValidName("./trailing_dot."));
assert(!isValidName("./includes#in the path"));
assert(!isValidName("./includes%in the path"));
assert(!isValidName("./includes<in the path")); assert(!isValidName("./includes<in the path"));
assert(!isValidName("./includes>in the path")); assert(!isValidName("./includes>in the path"));
assert(!isValidName("./includes:in the path")); assert(!isValidName("./includes:in the path"));