Example #1
0
        public async Task <BacklogResponse <SharedFile[]> > LinkSharedFilesAsync(params SharedFile[] sharedFiles)
        {
            if (Id < 0)
            {
                throw new InvalidOperationException("ticket retrieved not from the server");
            }

            var parameters = new QueryParameters();

            parameters.AddRange("fileId[]", sharedFiles.Select(x => x.Id));

            var response = await _client.PostAsync($"/api/v2/issues/{Id}/sharedFiles", parameters.Build()).ConfigureAwait(false);

            var result = await _client.CreateResponseAsync <SharedFile[], List <_SharedFile> >(
                response,
                HttpStatusCode.OK,
                data => data.Select(x => _client.ItemsCache.Update(x.id, () => new SharedFile(x, Project))).ToArray()
                ).ConfigureAwait(false);

            if (result.Content.Length > 0)
            {
                SharedFiles = SharedFiles.Concat(result.Content).ToArray();
            }

            return(result);
        }
Example #2
0
        void Menu_Rename(object sender, EventArgs e)
        {
            if (SharedFiles.SelectedItems.Count == 0)
            {
                return;
            }

            ShareItem item = SharedFiles.SelectedItems[0] as ShareItem;

            GetTextDialog rename = new GetTextDialog("Rename File", "Enter new name for " + item.Share.Name, item.Share.Name);

            if (rename.ShowDialog() == DialogResult.OK)
            {
                if (rename.ResultBox.Text.Trim() == "" || rename.ResultBox.Text.IndexOfAny(Path.GetInvalidFileNameChars()) != -1)
                {
                    MessageBox.Show("Name Contains Invalid Characters");
                }
                else
                {
                    item.Share.Name = rename.ResultBox.Text;
                }
            }

            SharedFiles.Invalidate();
        }
Example #3
0
        private void SecondTimer_Tick(object sender, EventArgs e)
        {
            // sync items with local status, we can see our transfer in remote's view
            Sharing.Local.Files.LockReading(() =>
            {
                foreach (SharedFile file in SharedFiles.Items.Cast <ShareItem>().Select(i => i.Share))
                {
                    SharedFile localStatus = Sharing.Local.Files.Where(f => f.FileID == file.FileID).FirstOrDefault();

                    if (localStatus == null)
                    {
                        continue;
                    }

                    file.FileStatus     = localStatus.FileStatus;
                    file.TransferStatus = localStatus.TransferStatus;
                    file.TransferActive = localStatus.TransferActive;
                }
            });

            foreach (ShareItem item in SharedFiles.Items)
            {
                item.RefreshStatus();
            }

            ShareCollection collection;

            if (Sharing.Collections.SafeTryGetValue(UserID, out collection))
            {
                StatusLabel.Text = collection.Status;
            }

            SharedFiles.Invalidate(); // update download progress, file colors, etc..
        }
Example #4
0
        private void RefreshView()
        {
            SharedFiles.Items.Clear();

            ShareCollection collection;

            if (Sharing.Collections.SafeTryGetValue(UserID, out collection))
            {
                collection.Files.LockReading(() =>
                {
                    foreach (SharedFile share in collection.Files)
                    {
                        SharedFiles.Items.Add(new ShareItem(this, share));
                    }
                });
            }

            SharedFiles.Invalidate();
        }
Example #5
0
        public async Task <BacklogResponse <SharedFile> > UnlinkSharedFilesAsync(SharedFile sharedFile)
        {
            if (Id < 0)
            {
                throw new InvalidOperationException("ticket retrieved not from the server");
            }

            var response = await _client.DeleteAsync($"/api/v2/issues/{Id}/sharedFiles/{sharedFile.Id}").ConfigureAwait(false);

            var result = await _client.CreateResponseAsync <SharedFile, _SharedFile>(
                response,
                HttpStatusCode.OK,
                data => _client.ItemsCache.Delete <SharedFile>(data.id)).ConfigureAwait(false);

            if (result.Content != null)
            {
                SharedFiles = SharedFiles.Except(new[] { result.Content }).ToArray();
            }

            return(result);
        }
Example #6
0
        void Sharing_FileUpdate(SharedFile share)
        {
            // only for local user
            if (UserID != Core.UserID)
            {
                return;
            }

            bool deleted = false;

            Sharing.Local.Files.LockReading(() =>
            {
                deleted = !Sharing.Local.Files.Any(s => s == share);
            });

            // if share exists
            ShareItem exists = SharedFiles.Items.Cast <ShareItem>().Where(s => s.Share == share).FirstOrDefault();

            if (exists != null)
            {
                if (deleted)
                {
                    SharedFiles.Items.Remove(exists);
                }
                else
                {
                    exists.RefreshStatus();
                }
            }
            else if (!deleted)
            {
                SharedFiles.Items.Add(new ShareItem(this, share));
            }

            SharedFiles.Invalidate();
        }