Example #1
0
        public async Task <ActionResult> StopSharingFileWithUser(ShareFileRequest request)
        {
            var userId = AuthenticationManager.GetUserId(User);

            if (request.UserId == userId.ToString())
            {
                return(BadRequest("You can't stop sharing file with yourself"));
            }

            var file = await _filesRepository.FindByIdAsync(request.FileId);

            if (!file.AllowedUsers.Contains(new ObjectId(request.UserId)))
            {
                return(BadRequest("File is not shared with this user"));
            }

            var updatedAllowedList = file.AllowedUsers;

            updatedAllowedList.Remove(new ObjectId(request.UserId));

            if (!FileFolderManager.CanDeleteFile(userId, file))
            {
                return(BadRequest("You don't have rights to stop sharing this file"));
            }

            await _filesRepository.UpdateOneAsync(request.FileId, "AllowedUsers", updatedAllowedList);

            return(Ok());
        }
Example #2
0
        public async Task <ActionResult> ShareFileWithUser(ShareFileRequest request)
        {
            var userId = AuthenticationManager.GetUserId(User);

            if (request.UserId == userId.ToString())
            {
                return(BadRequest("You already have access to this file"));
            }

            var file = await _filesRepository.FindByIdAsync(request.FileId);

            if (file.AllowedUsers.Contains(new ObjectId(request.UserId)))
            {
                return(BadRequest("User already has access to this file"));
            }

            var updatedAllowedList = file.AllowedUsers;

            updatedAllowedList.Add(new ObjectId(request.UserId));

            if (!FileFolderManager.CanDeleteFile(userId, file))
            {
                return(BadRequest("You don't have rights to share this file"));
            }

            await _filesRepository.UpdateOneAsync(request.FileId, "AllowedUsers", updatedAllowedList);

            return(Ok());
        }
Example #3
0
        public Task ShareFileAsync(string filePath)
        {
            var shareFile    = new ShareFile(filePath);
            var shareRequest = new ShareFileRequest(shareFile);

            return(Share.RequestAsync(shareRequest));
        }
Example #4
0
        static Task PlatformRequestAsync(ShareFileRequest request)
        {
            if (string.IsNullOrEmpty(request.File.FullPath))
            {
                throw new ArgumentNullException(nameof(request.File.FullPath));
            }

            Permissions.EnsureDeclared <Permissions.LaunchApp>();

            var appControl = new AppControl
            {
                Operation = AppControlOperations.ShareText,
            };

            if (!string.IsNullOrEmpty(request.File.FullPath))
            {
                appControl.ExtraData.Add("http://tizen.org/appcontrol/data/path", request.File.FullPath);
            }
            if (!string.IsNullOrEmpty(request.Title))
            {
                appControl.ExtraData.Add("http://tizen.org/appcontrol/data/title", request.Title);
            }

            AppControl.SendLaunchRequest(appControl);

            return(Task.CompletedTask);
        }
Example #5
0
        static Task PlatformRequestAsync(ShareFileRequest request)
        {
            var items = new List <NSObject>();

            var fileUrl = NSUrl.FromFilename(request.File.FullPath);

            if (!string.IsNullOrEmpty(request.Title))
            {
                items.Add(new ShareActivityItemSource(fileUrl, request.Title)); // Share with title (subject)
            }
            else
            {
                items.Add(fileUrl); // No title specified
            }
            var activityController = new UIActivityViewController(items.ToArray(), null);

            var vc = Platform.GetCurrentViewController();

            if (activityController.PopoverPresentationController != null)
            {
                activityController.PopoverPresentationController.SourceView = vc.View;
            }

            return(vc.PresentViewControllerAsync(activityController, true));
        }
Example #6
0
        /// <summary>
        /// Share the current sketch as a JPEG with EXIF data
        /// </summary>
        /// <param name="parameter">the parameter is not used</param>
        /// <returns>an async task</returns>
        protected override async Task ExecuteAsync(object parameter)
        {
            var data = App.GetSketchData();

            var title = string.IsNullOrWhiteSpace(data.Name) ? "Sketch" : data.Name;

            var filename = Path.Combine(FileSystem.CacheDirectory, title + ".jpeg");

            using (var stream = File.Create(filename))
            {
                InkRenderer.RenderImage(data.Width, data.Height, data.BackgroundColor, data.InkStrokes.ToList(), stream, data.Width);
            }

            var photoLibrary = DependencyService.Get <IPhotoLibrary>();

            photoLibrary.AddExifData(filename);

            var request = new ShareFileRequest(title + " #Sketch360", new ShareFile(filename));

            await Share.RequestAsync(request).ConfigureAwait(false);

            var properties = new Dictionary <string, string>
            {
                ["width"]      = data.Width.ToString(CultureInfo.InvariantCulture),
                ["inkstrokes"] = data.InkStrokes.Count().ToString(CultureInfo.InvariantCulture),
                ["background"] = data.BackgroundColor.ToHex(),
                ["duration"]   = data.Duration.TotalMinutes.ToString(CultureInfo.InvariantCulture)
            };

            Analytics.TrackEvent("Share", properties);
        }
Example #7
0
        static Task PlatformRequestAsync(ShareFileRequest request)
        {
            var items = new List <NSObject>();

            var fileUrl = NSUrl.FromFilename(request.File.FullPath);

            if (!string.IsNullOrEmpty(request.Title))
            {
                items.Add(new ShareActivityItemSource(fileUrl, request.Title)); // Share with title (subject)
            }
            else
            {
                items.Add(fileUrl); // No title specified
            }
            var activityController = new UIActivityViewController(items.ToArray(), null);

            var vc = Platform.GetCurrentViewController();

            if (activityController.PopoverPresentationController != null)
            {
                activityController.PopoverPresentationController.SourceView = vc.View;
                if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
                {
                    var sr = new CoreGraphics.CGRect(vc.View.Bounds.Width, 20, 0, 0);
                    activityController.PopoverPresentationController.SourceRect = sr;
                }
            }

            return(vc.PresentViewControllerAsync(activityController, true));
        }
Example #8
0
 public async Task Share_ShareFileRequestWithInvalidFilePath()
 {
     var request = new ShareFileRequest
     {
         File = new ShareFile(fullPath: null)
     };
     await Assert.ThrowsAsync <ArgumentException>(() => Share.RequestAsync(request));
 }
Example #9
0
        public static Task RequestAsync(ShareFileRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (request.File == null)
            {
                throw new ArgumentException(FileNullExeption(nameof(request.File)));
            }

            return(PlatformRequestAsync((ShareMultipleFilesRequest)request));
        }
Example #10
0
        static Task PlatformRequestAsync(ShareFileRequest request)
        {
            var items = new List <NSObject>();

            if (!string.IsNullOrWhiteSpace(request.Title))
            {
                items.Add(new NSString(request.Title));
            }
            if (request.File != null)
            {
                items.Add(NSUrl.FromFilename(request.File.FullPath));
            }

            return(PlatformShowRequestAsync(request, items));
        }
Example #11
0
        public static Task RequestAsync(ShareFileRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (request.File == null)
            {
                throw new ArgumentException($"The {nameof(request.File)} in the request is invalid.");
            }

            if (string.IsNullOrEmpty(request.File.FullPath))
            {
                throw new ArgumentException($"The request file's {nameof(request.File.FullPath)} is invalid.");
            }

            return(PlatformRequestAsync(request));
        }
Example #12
0
        static async Task PlatformRequestAsync(ShareFileRequest request)
        {
            var storageFile = request.File.File ?? await StorageFile.GetFileFromPathAsync(request.File.FullPath);

            var dataTransferManager = DataTransferManager.GetForCurrentView();

            dataTransferManager.DataRequested += ShareTextHandler;

            DataTransferManager.ShowShareUI();

            void ShareTextHandler(DataTransferManager sender, DataRequestedEventArgs e)
            {
                var newRequest = e.Request;

                newRequest.Data.SetStorageItems(new IStorageItem[] { storageFile });
                newRequest.Data.Properties.Title = request.Title ?? AppInfo.Name;

                dataTransferManager.DataRequested -= ShareTextHandler;
            }
        }
        /// <summary>
        /// Shows native share sheet that exports all features.
        /// </summary>
        /// <returns></returns>
        private async Task ShowShareSheet()
        {
            if (IsBusy)
            {
                return;
            }
            IsBusy = true;

            ShareFileRequest share = new ShareFileRequest
            {
                Title = "Share Features",
                File  = new ShareFile(await FeatureStore.ExportFeatures(FeatureList), "application/json"),
            };

            share.PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
                    ? new System.Drawing.Rectangle((int)(DeviceDisplay.MainDisplayInfo.Width * .474), 80, 0, 0)
                    : System.Drawing.Rectangle.Empty;
            await Share.RequestAsync(share);

            IsBusy = false;
        }
Example #14
0
        static Task PlatformRequestAsync(ShareFileRequest request)
        {
            var contentUri = Platform.GetShareableFileUri(request.File);

            var intent = new Intent(Intent.ActionSend);

            intent.SetType(request.File.ContentType);
            intent.SetFlags(ActivityFlags.GrantReadUriPermission);
            intent.PutExtra(Intent.ExtraStream, contentUri);

            if (!string.IsNullOrEmpty(request.Title))
            {
                intent.PutExtra(Intent.ExtraTitle, request.Title);
            }

            var chooserIntent = Intent.CreateChooser(intent, request.Title ?? string.Empty);
            var flags         = ActivityFlags.ClearTop | ActivityFlags.NewTask;

            chooserIntent.SetFlags(flags);
            Platform.AppContext.StartActivity(chooserIntent);

            return(Task.CompletedTask);
        }
Example #15
0
 Task PlatformRequestAsync(ShareFileRequest request) =>
 PlatformRequestAsync((ShareMultipleFilesRequest)request);
Example #16
0
 public void Post([FromBody] ShareFileRequest shareFileRequest)
 {
     shareFileCommandHandler.Handle(shareFileRequest);
 }
Example #17
0
        public static Task RequestAsync(ShareFileRequest request)
        {
            ExperimentalFeatures.VerifyEnabled(ExperimentalFeatures.ShareFileRequest);

            return(PlatformRequestAsync(request));
        }
        public async Task <IActionResult> ShareFile([FromBody] ShareFileRequest shareRequest)
        {
            var uniqueId = User.GetUniqueId();

            var file = await _dbContext.File.Include(x => x.ReadPermissions).Include(x => x.WritePermissions)
                       .Where(x =>
                              x.FileId == new Guid(shareRequest.FileId) &&
                              (
                                  x.OwnedByUniqueId == new Guid(uniqueId) ||
                                  x.WritePermissions.Any(y => y.UniqueId == new Guid(uniqueId))
                              )
                              )
                       .FirstOrDefaultAsync();

            if (file != null)
            {
                _dbContext.File.Attach(file);

                if (!shareRequest.Email.Equals(String.Empty))
                {
                    var user = await _dbContext.Profile.FirstOrDefaultAsync(x => x.Email.Equals(shareRequest.Email));

                    if (user != null)
                    {
                        if (shareRequest.WritePermission && !file.WritePermissions.Any(y => y.UniqueId == user.UniqueId))
                        {
                            file.WritePermissions.Add(new Write
                            {
                                SharedByUniqueId = new Guid(uniqueId),
                                UniqueId         = user.UniqueId,
                            });

                            file.ReadPermissions.Add(new Read
                            {
                                SharedByUniqueId = new Guid(uniqueId),
                                UniqueId         = user.UniqueId,
                            });
                        }
                        else if (shareRequest.ReadPermission && !file.ReadPermissions.Any(y => y.UniqueId == user.UniqueId))
                        {
                            file.ReadPermissions.Add(new Read
                            {
                                SharedByUniqueId = new Guid(uniqueId),
                                UniqueId         = user.UniqueId,
                            });
                        }
                    }
                    else
                    {
                        var NotAcceptable = BadRequest($"User with email '{shareRequest.Email}' don't exist!");
                        NotAcceptable.StatusCode = 406;

                        return(NotAcceptable);
                    }
                }
                else if (shareRequest.Email.Equals(String.Empty) && (shareRequest.WritePermission || shareRequest.ReadPermission))
                {
                    var NotAcceptable = BadRequest("Email required!");
                    NotAcceptable.StatusCode = 406;

                    return(NotAcceptable);
                }


                if (shareRequest.PublicPermission)
                {
                    file.IsPublic = true;
                }


                if (await _dbContext.SaveChangesAsync() >= 0)
                {
                    return(Ok());
                }
            }

            return(BadRequest("Something happen try again later!"));
        }
Example #19
0
 public static Task RequestAsync(ShareFileRequest request) =>
 Current.RequestAsync(request);
Example #20
0
 public async Task Share_NullShareFileRequest()
 {
     ShareFileRequest request = null;
     await Assert.ThrowsAsync <ArgumentNullException>(() => Share.RequestAsync(request));
 }
Example #21
0
 public Task RequestAsync(ShareFileRequest request)
 {
     return(Xamarin.Essentials.Share.RequestAsync(request));
 }
 static Task PlatformRequestAsync(ShareFileRequest request) =>
 throw new NotImplementedInReferenceAssemblyException();
 static Task PlatformRequestAsync(ShareFileRequest request) =>
 throw ExceptionUtils.NotSupportedOrImplementedException;
Example #24
0
 public static Task RequestAsync(ShareFileRequest request)
 {
     return(PlatformRequestAsync(request));
 }
Example #25
0
 static Task PlatformRequestAsync(ShareFileRequest request) =>
 throw new System.PlatformNotSupportedException();