ActionToString() public static method

public static ActionToString ( HistoryAction historyAction ) : string
historyAction HistoryAction
return string
Ejemplo n.º 1
0
        public async Task <bool> SaveHistoryAction(HistoryAction action)
        {
            try
            {
                action.Background = Background;
                string actionToString = FileStorageHelper.ActionToString(action);
                if (Background)
                {
                    StorageFolder folder = await GetFolder(Background?BackgroundActionsFolder : ForegroundActionsFolder);

                    StorageFile file = await folder.CreateFileAsync(ActionsFileName, CreationCollisionOption.OpenIfExists);

                    return(await RetryAppending(file, actionToString));
                }
                else
                {
                    await ForegroundHistoryActionWriter.WriteLine(actionToString);

                    return(true);
                }
            }
            catch (Exception e)
            {
                Logger.Error("Error writing HistoryAction", e);
            }
            return(false);
        }
Ejemplo n.º 2
0
        public async Task SetActionsAsDelivered(IList <HistoryAction> sendActions)
        {
            StorageFolder folder = await GetFolder(BackgroundActionsFolder, true);

            StorageFile deliveredActionsFile = await folder.CreateFileAsync(ActionsFileName, CreationCollisionOption.OpenIfExists);

            IReadOnlyList <StorageFolder> folders = await folder.GetFoldersAsync();

            foreach (StorageFolder storageFolder in folders)
            {
                IReadOnlyList <StorageFile> files = await storageFolder.GetFilesAsync();

                //ignore unlocked folders
                if (files.FirstOrDefault(f => f.Name == FolderLockFile) == null)
                {
                    continue;
                }

                StorageFile actionFile = files.FirstOrDefault(f => f.Name == ActionsFileName);
                if (actionFile != null)
                {
                    List <HistoryAction> actions = FileStorageHelper.ActionsFromStrings(await FileIO.ReadLinesAsync(actionFile));

                    List <string> stringActions = new List <string>();
                    foreach (HistoryAction historyAction in actions)
                    {
                        historyAction.Delivered = true;
                        stringActions.Add(FileStorageHelper.ActionToString(historyAction));
                    }
                    await FileIO.AppendLinesAsync(deliveredActionsFile, stringActions);
                }
                await storageFolder.DeleteAsync();
            }

            if (ForegroundHistoryActionWriter != null)
            {
                await ForegroundHistoryActionWriter.RewriteFile((l, l2) =>
                {
                    foreach (string s in l)
                    {
                        HistoryAction action = FileStorageHelper.ActionFromString(s);
                        if (!sendActions.Contains(action))
                        {
                            l2.Add(s);
                        }
                    }
                });
            }
        }
Ejemplo n.º 3
0
        public async Task <List <HistoryAction> > GetActionsForForeground(bool doNotDelete = false)
        {
            List <HistoryAction> actions = new List <HistoryAction>();

            try
            {
                StorageFolder folder = await GetFolder(BackgroundActionsFolder, true);

                StorageFile deliveredActionsFile = await folder.CreateFileAsync(ActionsFileName, CreationCollisionOption.OpenIfExists);

                List <HistoryAction> fileActions = FileStorageHelper.ActionsFromStrings(await FileIO.ReadLinesAsync(deliveredActionsFile));
                if (fileActions != null)
                {
                    foreach (HistoryAction historyAction in fileActions)
                    {
                        if (historyAction.Background)
                        {
                            actions.Add(historyAction);
                        }
                    }
                    if (!doNotDelete && fileActions.Count != 0)
                    {
                        StringBuilder sb = new StringBuilder();
                        foreach (HistoryAction historyAction in fileActions)
                        {
                            historyAction.Background = false;
                            sb.Append(FileStorageHelper.ActionToString(historyAction));
                            sb.Append('\n');
                        }
                        if (!await RetryWriting(deliveredActionsFile, sb.ToString()))
                        {
                            Logger.Error("GetActionsForForeground#1: Writing failed ");
                        }
                    }
                }
                IReadOnlyList <StorageFolder> folders = await folder.GetFoldersAsync();

                foreach (StorageFolder storageFolder in folders)
                {
                    try
                    {
                        IReadOnlyList <StorageFile> files = await storageFolder.GetFilesAsync();

                        StorageFile first = null;
                        foreach (var f in files)
                        {
                            if (f.Name == ActionsFileName)
                            {
                                first = f;
                                break;
                            }
                        }
                        if (first != null)
                        {
                            fileActions = FileStorageHelper.ActionsFromStrings(await FileIO.ReadLinesAsync(first));
                            if (fileActions != null && fileActions.Count != 0)
                            {
                                foreach (HistoryAction historyAction in fileActions)
                                {
                                    if (historyAction.Background)
                                    {
                                        actions.Add(historyAction);
                                    }
                                }
                                if (!doNotDelete)
                                {
                                    StringBuilder sb = new StringBuilder();
                                    foreach (HistoryAction historyAction in fileActions)
                                    {
                                        historyAction.Background = false;
                                        sb.Append(FileStorageHelper.ActionToString(historyAction));
                                        sb.Append('\n');
                                    }
                                    if (!await RetryWriting(first, sb.ToString()))
                                    {
                                        Logger.Error("GetActionsForForeground#2: Writing failed ");
                                    }
                                }
                            }
                        }
                    }
                    catch (UnauthorizedAccessException)
                    {
                    }
                    catch (SEHException)
                    {
                    }
                    catch (FileNotFoundException)
                    {
                    }
                }
            }
            catch (UnauthorizedAccessException)
            {
            }
            catch (SEHException)
            {
            }
            catch (FileNotFoundException)
            {
            }
            return(actions);
        }
Ejemplo n.º 4
0
        public async Task CleanupDatabase()
        {
            string minDateTime = DateTime.Now.AddDays(-1).ToString(History.Timeformat);
            {
                StorageFolder folder = await GetFolder(BackgroundActionsFolder, true);

                IReadOnlyList <IStorageItem> folders = await folder.GetItemsAsync();

                foreach (IStorageItem storageItem in folders)
                {
                    try
                    {
                        if (storageItem.IsOfType(StorageItemTypes.Folder))
                        {
                            StorageFolder storageFolder       = (StorageFolder)storageItem;
                            IReadOnlyList <StorageFile> files = await storageFolder.GetFilesAsync();

                            foreach (var f in files)
                            {
                                if (f.Name == ActionsFileName)
                                {
                                    List <HistoryAction> fileActions = FileStorageHelper.ActionsFromStrings(await FileIO.ReadLinesAsync(f));
                                    if (fileActions.All(a => a.Delivered && a.ActionTime.CompareTo(minDateTime) < 0))
                                    {
                                        await f.DeleteAsync();

                                        break;
                                    }
                                }
                            }
                            if ((await storageFolder.GetFilesAsync()).Count == 0)
                            {
                                await storageFolder.DeleteAsync();
                            }
                        }
                        else
                        {
                            if (storageItem.Name == ActionsFileName)
                            {
                                StorageFile          storageFile = (StorageFile)storageItem;
                                List <HistoryAction> fileActions = FileStorageHelper.ActionsFromStrings(await FileIO.ReadLinesAsync(storageFile));
                                if (fileActions.RemoveAll(a => a.Delivered && a.ActionTime.CompareTo(minDateTime) < 0) > 0)
                                {
                                    await RetryWriting(storageFile, FileStorageHelper.ActionsToString(fileActions));
                                }
                            }
                        }
                    }
                    catch (SEHException)
                    {
                    }
                    catch (FileNotFoundException)
                    {
                    }
                }
            }
            await ForegroundHistoryActionWriter.RewriteFile((lines, linesToWrite) =>
            {
                List <HistoryAction> fileActions = FileStorageHelper.ActionsFromStrings(lines);
                fileActions.RemoveAll(a => a.Delivered && a.ActionTime.CompareTo(minDateTime) < 0);
                foreach (HistoryAction historyAction in fileActions)
                {
                    linesToWrite.Add(FileStorageHelper.ActionToString(historyAction));
                }
            });

            //Events are deleted when delivered so no cleanup need
        }