public LibraryFileInfo(ISDataClient client, bool formMode, IDirectoryInfo directory, LibraryDocument document) : base(directory) { _client = client; _formMode = formMode; _document = document; }
public IFileInfo GetFileInfo(string path) { var dirPath = Path.GetDirectoryName(path); var fileName = Path.GetFileName(path); var dir = GetDirectoryInfo(dirPath); var file = dir.GetFiles().FirstOrDefault(item => string.Equals(fileName, item.Name, StringComparison.OrdinalIgnoreCase)); if (file == null) { if (path.StartsWith("sdata:\\attachments", StringComparison.OrdinalIgnoreCase)) { var attachment = new Attachment {FileName = fileName}; file = new AttachmentFileInfo(_client, _formMode, dir, attachment); } else { var document = new LibraryDocument { FileName = fileName, Directory = new SDataResource {Key = ((LibraryDirectory) ((IResourceHolder) dir).Resource).Key} }; file = new LibraryFileInfo(_client, _formMode, dir, document); } } return file; }
public override void Refresh() { _document = _client.Get<LibraryDocument>(_document.Key); }
public override void Save(Stream stream) { if (stream == null) { _document = string.IsNullOrEmpty(_document.Key) ? _client.Post(_document) : _client.Put(_document); return; } var parms = new SDataParameters { Files = {new AttachedFile(null, _document.FileName, stream)} }; if (string.IsNullOrEmpty(_document.Key)) { parms.Method = HttpMethod.Post; parms.Path = "libraryDocuments"; } else { parms.Method = HttpMethod.Put; parms.Path = "libraryDocuments(" + SDataUri.FormatConstant(_document.Key) + ")"; parms.ETag = _document.ETag; } if (_formMode) { foreach (var prop in typeof (LibraryDocument).GetProperties()) { var name = _client.NamingScheme.GetName(prop); if (!name.StartsWith("$", StringComparison.Ordinal) && !new[] {"createDate", "createUser", "modifyDate", "modifyUser"}.Contains(name, StringComparer.Ordinal)) { var value = prop.GetValue(_document, null); if (value != null) { parms.Form[name] = value.ToString(); } } } parms.Path += "/file"; var results = _client.Execute(parms); if (!string.IsNullOrEmpty(results.Location)) { var selector = new SDataUri(results.Location).GetPathSegment(4).Selector; _document.Key = selector.Substring(1, selector.Length - 2); _document.ETag = results.ETag; } } else { parms.Content = _document; _document = _client.Execute<LibraryDocument>(parms).Content; } }