private static bool IsFilenameWorthSyncing(string localDirectory, string filename)
{
if (null == filename)
{
return false;
}
filename = filename.ToLower();
if (ignoredFilenames.Contains(filename) ||
ignoredFilenamesRegex.IsMatch(filename))
{
Logger.DebugFormat("Skipping {0}: ignored file", filename);
return false;
}
// Check filename extension if there is one.
if (filename.Contains('.'))
{
string extension = filename.Split('.').Last();
if (ignoredExtensions.Contains(extension))
{
Logger.DebugFormat("Skipping {0}: ignored file extension", filename);
return false;
}
}
// Check resulting file path length
string fullPath = Path.Combine(localDirectory, filename);
#if __COCOA__ || __MonoCS__
// TODO Check filename length for OS X
// * Max "FileName" length: 255 charactors.
// * FileName encoding is UTF-16 (Modified NFD).
#else
// Get Path.MaxPath
// It is not a public field so reflection is necessary.
FieldInfo maxPathField = typeof(Path).GetField("MaxPath",
BindingFlags.Static |
BindingFlags.GetField |
BindingFlags.NonPublic);
if (fullPath.Length > (int)maxPathField.GetValue(null))
{
Logger.WarnFormat("Skipping {0}: path too long", fullPath);
return false;
}
#endif
return true;
}