internal RemoteFileWriteStream(RemoteStorage r, RemoteFile file) { remoteStorage = r; _handle = remoteStorage.native.FileWriteStreamOpen(file.FileName); _file = file; }
/// <summary> /// Attempt to attach a <see cref="RemoteStorage"/> file to the current user's leaderboard entry. /// Can be useful for storing replays along with scores. /// </summary> /// <returns>True if the file attachment process has started</returns> public bool AttachRemoteFile(RemoteFile file, AttachRemoteFileCallback onSuccess = null, FailureCallback onFailure = null) { if (!IsValid) { return(false); } if (file.IsShared) { var handle = client.native.userstats.AttachLeaderboardUGC(BoardId, file.UGCHandle, (result, error) => { if (!error && result.Result == Result.OK) { onSuccess?.Invoke(); } else { onFailure?.Invoke(result.Result == 0 ? Callbacks.Result.IOFailure : (Callbacks.Result)result.Result); } }); return(handle.CallResultHandle != 0); } file.Share(() => { if (!file.IsShared || !AttachRemoteFile(file, onSuccess, onFailure)) { onFailure?.Invoke(Callbacks.Result.Fail); } }, onFailure); return(true); }
internal void OnWrittenNewFile(RemoteFile file) { if (_files.Any(x => x.FileName == file.FileName)) { return; } _files.Add(file); file.Exists = true; InvalidateFiles(); }
private void UpdateFiles() { if (!_filesInvalid) { return; } _filesInvalid = false; foreach (var file in _files) { file.Exists = false; } var count = FileCount; for (var i = 0; i < count; ++i) { int size; var name = NormalizePath(native.GetFileNameAndSize(i, out size)); var timestamp = native.GetFileTimestamp(name); var existing = _files.FirstOrDefault(x => x.FileName == name); if (existing == null) { existing = new RemoteFile(this, name, client.SteamId, size, timestamp); _files.Add(existing); } else { existing.SizeInBytes = size; existing.FileTimestamp = timestamp; } existing.Exists = true; } for (var i = _files.Count - 1; i >= 0; --i) { if (!_files[i].Exists) { _files.RemoveAt(i); } } }