コード例 #1
0
ファイル: PrevNextLinker.cs プロジェクト: pombreda/Pagination
 public PrevNextLinker(PageLinker baseLinker, string prevText, string nextText, bool forcePrevNext)
 {
     _PrevText      = prevText;
     _NextText      = nextText;
     _BaseLinker    = baseLinker;
     _ForcePrevNext = forcePrevNext;
 }
コード例 #2
0
 public PrevNextLinker(PageLinker baseLinker, string prevText, string nextText, bool forcePrevNext)
 {
     _PrevText = prevText;
     _NextText = nextText;
     _BaseLinker = baseLinker;
     _ForcePrevNext = forcePrevNext;
 }
コード例 #3
0
        public void CreateDynamic_CreatesDynamicLinker()
        {
            var linker = PageLinker.CreateDynamic() as DynamicLinker;

            Assert.IsNotNull(linker);
            Assert.IsTrue(linker.IsBase1);
        }
コード例 #4
0
 public IPageChainModel LinkPages(PageLinker pageLinker)
 {
     if (null == pageLinker)
     {
         throw new ArgumentNullException("pageLinker");
     }
     return(new PageChainModel(TotalPageCount, TotalItemCount, pageLinker.LinkPages(Source.Request, this)));
 }
コード例 #5
0
        public void CreateDynamic_CreatesDynamicLinkerWithSpecifiedBase()
        {
            var linker = PageLinker.CreateDynamic(true) as DynamicLinker;

            Assert.IsTrue(linker.IsBase1);
            linker = PageLinker.CreateDynamic(false) as DynamicLinker;
            Assert.IsFalse(linker.IsBase1);
        }
コード例 #6
0
        public void CreateDynamic_CreatesPrevNextLinkerWithTexts()
        {
            var linker = PageLinker.CreateDynamic("p", "n") as PrevNextLinker;

            Assert.IsInstanceOf(typeof(DynamicLinker), linker.BaseLinker);
            Assert.AreEqual("p", linker.PrevText);
            Assert.AreEqual("n", linker.NextText);
            Assert.IsTrue((linker.BaseLinker as DynamicLinker).IsBase1);
        }
コード例 #7
0
        public void CreatePrevNext_DefaultsToForcePrevNext()
        {
            var prevText = "p";
            var nextText = "n";
            var linker   = PageLinker.CreatePrevNext(prevText, nextText) as PrevNextLinker;

            Assert.AreEqual(prevText, linker.PrevText);
            Assert.AreEqual(nextText, linker.NextText);
            Assert.IsTrue(linker.ForcePrevNext);
            Assert.IsNull(linker.BaseLinker);
        }
コード例 #8
0
 public void CreateDynamic_CreatesPrevNextLinkerWithSpecifiedBase()
 {
     foreach (var isBase1 in new[] { false, true })
     {
         var linker = PageLinker.CreateDynamic(isBase1, "prv", "nxt") as PrevNextLinker;
         Assert.IsInstanceOf(typeof(DynamicLinker), linker.BaseLinker);
         Assert.AreEqual("prv", linker.PrevText);
         Assert.AreEqual("nxt", linker.NextText);
         Assert.AreEqual(isBase1, (linker.BaseLinker as DynamicLinker).IsBase1);
     }
 }
コード例 #9
0
 public void CreateDynamic_CreatesPrevNextLinkerWithForcedPrevNext()
 {
     foreach (var isBase1 in new[] { false, true })
     {
         foreach (var forcePrevNext in new[] { false, true })
         {
             var linker = PageLinker.CreateDynamic(isBase1, "prev", "next", forcePrevNext) as PrevNextLinker;
             Assert.IsInstanceOf(typeof(DynamicLinker), linker.BaseLinker);
             Assert.AreEqual("prev", linker.PrevText);
             Assert.AreEqual("next", linker.NextText);
             Assert.AreEqual(isBase1, (linker.BaseLinker as DynamicLinker).IsBase1);
             Assert.AreEqual(forcePrevNext, linker.ForcePrevNext);
         }
     }
 }
コード例 #10
0
        public void Create_IsBase1IsTrue()
        {
            var prevText = "prv";
            var nextText = "nxt";
            var linker   = PageLinker.Create(prevText, nextText);

            Assert.IsInstanceOf(typeof(PrevNextLinker), linker);

            var pnl = linker as PrevNextLinker;

            Assert.IsInstanceOf(typeof(NumberLinker), pnl.BaseLinker);

            Assert.AreEqual(true, pnl.ForcePrevNext);
            Assert.AreEqual(prevText, pnl.PrevText);
            Assert.AreEqual(nextText, pnl.NextText);
            Assert.AreEqual(true, (pnl.BaseLinker as NumberLinker).IsBase1);
        }
コード例 #11
0
        public void CreatePrevNext_ReturnsInstanceOfPrevNextLinkerWithNullBaseLinker()
        {
            var prevText      = "p";
            var nextText      = "n";
            var forcePrevNext = false;
            var linker        = PageLinker.CreatePrevNext(prevText, nextText, forcePrevNext);

            Assert.IsNotNull(linker);
            Assert.IsInstanceOf(typeof(PrevNextLinker), linker);

            var pnl = linker as PrevNextLinker;

            Assert.AreEqual(prevText, pnl.PrevText);
            Assert.AreEqual(nextText, pnl.NextText);
            Assert.AreEqual(forcePrevNext, pnl.ForcePrevNext);
            Assert.IsNull(pnl.BaseLinker);
        }
コード例 #12
0
        public async static Task <bool> UploadFiles(Boolean UploadPrompt = true, Boolean AllLogs = true)
        {
            Global global = FormsApp.config.Global;

            // Path where the file should be saved once downloaded (locally)
            string path = (AllLogs) ? Mobile.LogPath : Mobile.LogUserPath;

            // Only upload if there are files available
            List <FileInfo> filesToUpload = LogFilesToUpload(path);

            var upload = false;

            if (filesToUpload.Count > 0)
            {
                upload = true;
            }

            if (UploadPrompt &&
                filesToUpload.Count > 0)
            {
                upload = await Application.Current.MainPage.DisplayAlert(
                    "Pending log files",
                    "Do you want to Upload them?",
                    "Ok", "Cancel");
            }
            //          else upload = false;


            if (!upload)
            {
                return(false);
            }

            // The FTP credentiales are not present in Global.xml
            if (!global.IsFtpUploadSet)
            {
                await Errors.ShowAlert(new FtpCredentialsMissingException());

                return(false);
            }

            // Has the devices internet connection
            if (!Mobile.IsNetAvailable())
            {
                await Errors.ShowAlert(new NoInternetException());

                return(false);
            }

            // Cancel action
            bool cancelled = false;

            System.Action OnCancel = () =>
            {
                cancelled = true;
            };

            TaskCompletionSource <bool> tcs = new TaskCompletionSource <bool> ();

            Device.BeginInvokeOnMainThread(async() =>
            {
                // Progress bar
                using (Acr.UserDialogs.IProgressDialog progress = UserDialogs.Instance.Progress("Uploading", OnCancel, "Cancel"))
                {
                    // Is necessary for appear the progress bar right now
                    await Task.Delay(10);

                    NumFilesUploaded = 0;

                    SftpClient sftp = null;

                    try
                    {
                        string remotePath = global.ftpRemotePath;
                        using (sftp = new SftpClient(global.ftpRemoteHost, 22, global.ftpUserName, global.ftpPassword))
                        {
                            sftp.Connect();

                            // If not exist create the remote path from global.xml
                            if (!sftp.Exists(remotePath))
                            {
                                sftp.CreateDirectory(remotePath);
                            }

                            using (MD5 md5Hash = MD5.Create())
                            {
                                byte[] md5Local;
                                byte[] md5Remote;
                                foreach (FileInfo file in filesToUpload)
                                {
                                    if (cancelled)
                                    {
                                        throw new Exception();
                                    }

                                    // Is necessary for update the progress bar
                                    await Task.Delay(10);

                                    // Upload local file to the FTP server
                                    using (FileStream fileStream = new FileStream(file.FullName, FileMode.Open))
                                    {
                                        // Folder path
                                        remotePath = Path.Combine(global.ftpRemotePath, file.Directory.Name); // Logs + User folder

                                        if (!sftp.Exists(remotePath))
                                        {
                                            sftp.CreateDirectory(remotePath);
                                        }

                                        // File path
                                        string sTick = DateTime.Now.Ticks.ToString();
                                        string sName = file.Name.Substring(0, 10) + "-" + sTick + "Log.xml";
                                        remotePath   = Path.Combine(remotePath, sName);

                                        sftp.UploadFile(fileStream, remotePath, null);
                                    }

                                    // Compare local and remote files
                                    using (StreamReader stream = new StreamReader(file.FullName))
                                        md5Local = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(stream.ReadToEnd()));

                                    md5Remote = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(sftp.ReadAllText(remotePath)));

                                    // If both files are equal, move local file to backup folder
                                    if (Enumerable.SequenceEqual(md5Local, md5Remote))
                                    {
                                        // Only create backup file ( "moving" log to backup folder ) in interactive mode
                                        if (!Data.Get.IsFromScripting)
                                        {
                                            string url_to_copy = Mobile.LogUserBackupPath;// Path.Combine ( file.Directory.FullName, Mobile.PATH_BACKUP );
                                            if (!Directory.Exists(url_to_copy))
                                            {
                                                Directory.CreateDirectory(url_to_copy);
                                            }

                                            File.Copy(file.FullName, Path.Combine(url_to_copy, file.Name), true);
                                        }
                                        File.Delete(file.FullName);

                                        NumFilesUploaded += 1;

                                        progress.PercentComplete = ( int )(NumFilesUploaded * 100 / filesToUpload.Count);

                                        Utils.Print("- " + file.Directory.Name + " uploaded");
                                    }
                                }
                            }

                            sftp.Disconnect();
                        }
                    }
                    catch (Exception e)
                    {
                        // Catch all exceptions and then always show the number of
                        // files uploaded using the exception FtpUpdateLogsException
                    }
                    finally
                    {
                        if (sftp != null)
                        {
                            sftp.Dispose();
                        }

                        sftp = null;

                        // Is necessary for appear the progress full ( 100% )
                        await Task.Delay(10);

                        tcs.SetResult(NumFilesUploaded == filesToUpload.Count);
                    }
                }
            });

            bool result = await tcs.Task; // Wait for upload completion

            // Finish ok if all files have been uploaded
            if (result)
            {
                return(true);
            }

            if (!cancelled)
            {
                await Errors.ShowAlert(new FtpUpdateLogsException ( NumFilesUploaded + "/" + filesToUpload.Count ));
            }
            else
            {
                await PageLinker.ShowAlert("Uploading canceled", "Only uploaded " + NumFilesUploaded + " / " + filesToUpload.Count + " log files");
            }

            return(false);
        }