Пример #1
0
        public void CreateSaveData_SaveDataIteratorsAreOpen_IteratorsPointToSameEntry(int nextEntryWhenAdding,
                                                                                      int entryToAdd, int expectedNextEntry)
        {
            // Static save IDs must have the high bit set
            const ulong mask  = 0x8000000000000000;
            const int   count = 10;

            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            // Create saves
            for (int i = 0; i < count * 2; i++)
            {
                Assert.Success(fs.CreateSystemSaveData(SaveDataSpaceId.User, ((ulong)i * 2) | mask, 0, 0x4000,
                                                       0x4000, SaveDataFlags.None));
            }

            // Open an iterator
            Assert.Success(fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User));

            // Skip ahead a few entries. We skipped 0 and added every other ID, so divide by 2 and subtract 1
            var infos = new SaveDataInfo[nextEntryWhenAdding / 2 - 1];

            Assert.Success(iterator.ReadSaveDataInfo(out long readCount, infos));
            Assert.Equal(infos.Length, readCount);

            // Create the save
            Assert.Success(fs.CreateSystemSaveData(SaveDataSpaceId.User, (uint)entryToAdd | mask, (ulong)entryToAdd, 0x4000,
                                                   0x4000, SaveDataFlags.None));

            // Check the save ID of the next entry
            Assert.Success(iterator.ReadSaveDataInfo(out long readCount2, infos.AsSpan(0, 1)));
            Assert.Equal(1, readCount2);

            Assert.Equal((uint)expectedNextEntry | mask, infos[0].SaveDataId);
        }
        public static void EnsureApplicationCacheStorage_SdCardNotAvailable_CreatesCacheStorageOnBis()
        {
            FileSystemClient fs = FileSystemServerFactory.CreateClient(false);

            var applicationId = new Ncm.ApplicationId(11);

            var nacp = new ApplicationControlProperty
            {
                CacheStorageSize        = 0x1000,
                CacheStorageJournalSize = 0x1000
            };

            Assert.Success(fs.EnsureApplicationCacheStorage(out _, out CacheStorageTargetMedia target, applicationId,
                                                            ref nacp));

            Assert.Equal(CacheStorageTargetMedia.Nand, target);

            fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User);

            var info = new SaveDataInfo[2];

            Assert.Success(iterator.ReadSaveDataInfo(out long entriesRead, info));

            Assert.Equal(1, entriesRead);
            Assert.Equal(applicationId, info[0].ProgramId);
            Assert.Equal(SaveDataType.Cache, info[0].Type);
        }
Пример #3
0
        public void DeleteSaveData_SaveExistsInUserSaveSpace_SaveIsDeleted()
        {
            var applicationId = new Ncm.ApplicationId(1);
            var userId        = new UserId(5, 4);

            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            // Create the save
            Assert.Success(fs.CreateSaveData(applicationId, userId, 0, 0x1000, 0x1000, SaveDataFlags.None));

            // Get the ID of the save
            Assert.Success(fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User));

            var info = new SaveDataInfo[1];

            Assert.Success(iterator.ReadSaveDataInfo(out _, info));

            // Delete the save
            Assert.Success(fs.DeleteSaveData(info[0].SaveDataId));

            // Iterate saves again
            Assert.Success(fs.OpenSaveDataIterator(out SaveDataIterator iterator2, SaveDataSpaceId.User));
            Assert.Success(iterator2.ReadSaveDataInfo(out long entriesRead, info));

            // Make sure no saves were returned
            Assert.Equal(0, entriesRead);
        }
        public static void EnsureApplicationSaveData_CreatesTemporaryStorage()
        {
            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            var applicationId = new Ncm.ApplicationId(11);
            var userId        = new Uid(2, 3);

            var nacp = new ApplicationControlProperty
            {
                TemporaryStorageSize = 0x1000
            };

            Assert.Success(EnsureApplicationSaveData(fs, out _, applicationId, ref nacp, ref userId));

            fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.Temporary);

            var info = new SaveDataInfo[2];

            Assert.Success(iterator.ReadSaveDataInfo(out long entriesRead, info));

            Assert.Equal(1, entriesRead);
            Assert.Equal(applicationId, info[0].ProgramId);
            Assert.Equal(UserId.Zero, info[0].UserId);
            Assert.Equal(SaveDataType.Temporary, info[0].Type);
        }
        public static void EnsureApplicationSaveData_CreatesAccountSaveData()
        {
            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            var applicationId = new Ncm.ApplicationId(11);
            var userId        = new Uid(2, 3);

            var nacp = new ApplicationControlProperty
            {
                UserAccountSaveDataSize        = 0x1000,
                UserAccountSaveDataJournalSize = 0x1000
            };

            Assert.Success(EnsureApplicationSaveData(fs, out _, applicationId, ref nacp, ref userId));

            fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User);

            var info = new SaveDataInfo[2];

            Assert.Success(iterator.ReadSaveDataInfo(out long entriesRead, info));

            Assert.Equal(1, entriesRead);
            Assert.Equal(applicationId, info[0].ProgramId);
            Assert.Equal(ConvertAccountUidToFsUserId(userId), info[0].UserId);
            Assert.Equal(SaveDataType.Account, info[0].Type);
        }
Пример #6
0
        private async Task ReadAccount(SaveDataInfo saveDataInfo)
        {
            var ms = new MemoryStream();

            var stopwatch = Stopwatch.StartNew();

            using (Stream inputStream = File.OpenRead(saveDataInfo.SaveDataFullFilename))
            {
                await Crypto.ParallelDecryptAsync(inputStream, ms, CancellationToken.None);
            }

            stopwatch.Stop();

            Console.WriteLine($"Load and decrypt took {stopwatch.ElapsedMilliseconds} ms");
            Console.WriteLine();

            //string targetFilename = $"{saveDataFullFilename}.decrypted.bin";
            //File.WriteAllBytes(targetFilename, ms.ToArray());

            PrintSeparator('=');
            ReadMonsterStats(ms);
            //PrintSeparator('=');
            //ReadEquipment(ms);
            //PrintSeparator('=');
            //ReadDecorations(ms);
            //PrintSeparator('=');
            //ReadWeaponUsage(ms);
        }
Пример #7
0
        private async Task ReadAccount(SaveDataInfo saveDataInfo)
        {
            MemoryStream ms;

            var stopwatch = Stopwatch.StartNew();
            var crypto    = new Crypto();

            using (Stream inputStream = File.OpenRead(saveDataInfo.SaveDataFullFilename))
            {
                byte[] buffer = new byte[inputStream.Length];
                await inputStream.ReadAsync(buffer, 0, buffer.Length, CancellationToken.None);

                await crypto.DecryptAsync(buffer);

                ms = new MemoryStream(buffer);
            }

            stopwatch.Stop();

            Console.WriteLine($"Load and decrypt took {stopwatch.ElapsedMilliseconds} ms");
            Console.WriteLine();

            //string targetFilename = $"{saveDataFullFilename}.decrypted.bin";
            //File.WriteAllBytes(targetFilename, ms.ToArray());

            PrintSeparator('=');
            ReadMonsterStats(ms);
            PrintSeparator('=');
            ReadEquipment(ms);
            PrintSeparator('=');
            ReadDecorations(ms);
            PrintSeparator('=');
            ReadWeaponUsage(ms);
        }
Пример #8
0
        public static Result FindSaveDataWithFilter(this FileSystemClient fs, out SaveDataInfo info, SaveDataSpaceId spaceId,
                                                    ref SaveDataFilter filter)
        {
            info = default;

            SaveDataFilter tempFilter = filter;
            var            tempInfo   = new SaveDataInfo();

            Result result = fs.RunOperationWithAccessLog(LocalAccessLogMode.System,
                                                         () =>
            {
                IFileSystemProxy fsProxy = fs.GetFileSystemProxyServiceObject();

                tempInfo = new SaveDataInfo();

                Result rc = fsProxy.FindSaveDataWithFilter(out long count, SpanHelpers.AsByteSpan(ref tempInfo),
                                                           spaceId, ref tempFilter);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                if (count == 0)
                {
                    return(ResultFs.TargetNotFound.Log());
                }

                return(Result.Success);
            },
Пример #9
0
        private Result GetSaveDataInfo(out SaveDataInfo info, SaveDataSpaceId spaceId, ref SaveDataAttribute attribute)
        {
            info = default;

            SaveDataIndexerReader reader = default;

            try
            {
                Result rc = FsServer.SaveDataIndexerManager.GetSaveDataIndexer(out reader, spaceId);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                rc = reader.Indexer.Get(out SaveDataIndexerValue value, ref attribute);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                SaveDataIndexer.GetSaveDataInfo(out info, ref attribute, ref value);
                return(Result.Success);
            }
            finally
            {
                reader.Dispose();
            }
        }
Пример #10
0
        public void DeleteSaveData_SaveDataIteratorsAreOpen_IteratorsPointToSameEntry(int nextEntryWhenRemoving,
                                                                                      int entryToRemove, int expectedNextEntry)
        {
            const int count = 20;

            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            // Create saves
            Assert.Success(PopulateSaveData(fs, count));

            // Open an iterator
            Assert.Success(fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User));

            // Skip ahead a few entries. Entries start counting at 1, so subtract 1
            var infos = new SaveDataInfo[nextEntryWhenRemoving - 1];

            Assert.Success(iterator.ReadSaveDataInfo(out long readCount, infos));
            Assert.Equal(infos.Length, readCount);

            // Delete the save
            Assert.Success(fs.DeleteSaveData(SaveDataSpaceId.User, (ulong)entryToRemove));

            // Check the program ID of the next entry
            Assert.Success(iterator.ReadSaveDataInfo(out long readCount2, infos.AsSpan(0, 1)));
            Assert.Equal(1, readCount2);

            Assert.Equal((ulong)expectedNextEntry, infos[0].ProgramId.Value);
        }
Пример #11
0
    // ================================== UNITY FUNCS ==================================
    #region Unity funcs
    private void Awake()
    {
        s_Instance = this;

        // Temp (need to load from saving data)
        m_saveDataInfo = new SaveDataInfo();
        m_saveDataInfo.m_LastSelectedNode = new NodeSaveInfo(0, 2, new Vector2(0, 0));
        m_saveDataInfo.m_LastUnlockedNode = new NodeSaveInfo(0, 2, new Vector2(0, 0));
    }
Пример #12
0
        public void CreateCacheStorage_InSdCacheSaveSpace_StorageIsCreated()
        {
            var applicationId   = new Ncm.ApplicationId(1);
            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            Assert.Success(fs.CreateCacheStorage(applicationId, SaveDataSpaceId.SdCache, applicationId.Value, 0, 0, SaveDataFlags.None));

            fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.SdCache);

            var info = new SaveDataInfo[2];

            iterator.ReadSaveDataInfo(out long entriesRead, info);

            Assert.Equal(1, entriesRead);
            Assert.Equal(applicationId, info[0].ProgramId);
        }
Пример #13
0
 public static void GetSaveDataInfo(out SaveDataInfo info, ref SaveDataAttribute key, ref SaveDataIndexerValue value)
 {
     info = new SaveDataInfo
     {
         SaveDataId        = value.SaveDataId,
         SpaceId           = value.SpaceId,
         Type              = key.Type,
         UserId            = key.UserId,
         SaveDataIdFromKey = key.SaveDataId,
         TitleId           = key.TitleId,
         Size              = value.Size,
         Index             = key.Index,
         Rank              = key.Rank,
         State             = value.State
     };
 }
Пример #14
0
        public void CreateBcatSaveData_DoesNotExist_SaveIsCreated()
        {
            var applicationId   = new Ncm.ApplicationId(1);
            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            Assert.Success(fs.CreateBcatSaveData(applicationId, 0x400000));

            fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User);

            var info = new SaveDataInfo[2];

            iterator.ReadSaveDataInfo(out long entriesRead, info);

            Assert.Equal(1, entriesRead);
            Assert.Equal(applicationId, info[0].ProgramId);
            Assert.Equal(SaveDataType.Bcat, info[0].Type);
        }
Пример #15
0
        public AccountViewModel(RootViewModel rootViewModel, SaveDataInfo saveDataInfo)
        {
            if (rootViewModel == null)
            {
                throw new ArgumentNullException(nameof(rootViewModel));
            }
            if (saveDataInfo.SaveDataFullFilename == null)
            {
                throw new ArgumentException($"Argument '{nameof(saveDataInfo)}' is invalid");
            }

            this.rootViewModel = rootViewModel;

            UserId = saveDataInfo.UserId;
            saveDataFullFilename = saveDataInfo.SaveDataFullFilename;

            SaveDataItems = new ReadOnlyObservableCollection <SaveDataSlotViewModel>(saveDataItems);
        }
Пример #16
0
        public bool Matches(ref SaveDataInfo info)
        {
            if (FilterBySaveDataSpaceId && info.SpaceId != SpaceId)
            {
                return(false);
            }

            if (FilterByProgramId && info.ProgramId != ProgramId)
            {
                return(false);
            }

            if (FilterBySaveDataType && info.Type != SaveDataType)
            {
                return(false);
            }

            if (FilterByUserId && info.UserId != UserId)
            {
                return(false);
            }

            if (FilterBySaveDataId && info.SaveDataId != SaveDataId)
            {
                return(false);
            }

            if (FilterByIndex && info.Index != Index)
            {
                return(false);
            }

            var filterRank = (SaveDataRank)(Rank & 1);

            // When filtering by secondary rank, match on both primary and secondary ranks
            if (filterRank == SaveDataRank.Primary && info.Rank == SaveDataRank.Secondary)
            {
                return(false);
            }

            return(true);
        }
Пример #17
0
        public void OpenSaveDataIterator_MultipleSavesExist_IteratorReturnsSavesInOrder()
        {
            const int count   = 20;
            const int rngSeed = 359;

            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            Assert.Success(PopulateSaveData(fs, count, rngSeed));

            Assert.Success(fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User));

            var info = new SaveDataInfo();

            for (int i = 0; i < count; i++)
            {
                Assert.Success(iterator.ReadSaveDataInfo(out long readCount, SpanHelpers.AsSpan(ref info)));

                Assert.Equal(1, readCount);
                Assert.Equal((ulong)i, info.ProgramId.Value);
            }
        }
Пример #18
0
        public bool Matches(ref SaveDataInfo info)
        {
            if (FilterBySaveDataSpaceId && info.SpaceId != SpaceId)
            {
                return(false);
            }

            if (FilterByTitleId && info.TitleId != TitleId)
            {
                return(false);
            }

            if (FilterBySaveDataType && info.Type != SaveDataType)
            {
                return(false);
            }

            if (FilterByUserId && info.UserId != UserId)
            {
                return(false);
            }

            if (FilterBySaveDataId && info.SaveDataId != SaveDataId)
            {
                return(false);
            }

            if (FilterByIndex && info.Index != Index)
            {
                return(false);
            }

            if ((Rank & 1) == 0 && info.Rank != 0)
            {
                return(false);
            }

            return(true);
        }
Пример #19
0
        public void CreateSystemSaveData_HasBuiltInSystemPermission_SaveIsCreatedInSystem(AccessControlBits.Bits permissions)
        {
            ulong saveId = 0x8000000001234000;

            Horizon hos = FileSystemServerFactory.CreateHorizonServer();

            var mainProgramId = new ProgramId(0x123456);

            HorizonClient client = hos.CreateHorizonClient(new ProgramLocation(mainProgramId, StorageId.BuiltInSystem),
                                                           permissions);

            HorizonClient privilegedClient = hos.CreatePrivilegedHorizonClient();

            // Create the save
            if (permissions.HasFlag(AccessControlBits.Bits.SystemSaveData))
            {
                Assert.Success(client.Fs.CreateSystemSaveData(saveId, 0x1000, 0x1000, SaveDataFlags.None));
            }
            else
            {
                // Creation should fail if we don't have the right permissions.
                Assert.Failure(client.Fs.CreateSystemSaveData(saveId, 0x1000, 0x1000, SaveDataFlags.None));
                return;
            }

            // Make sure it was placed in the System save space with the right info.
            Assert.Success(privilegedClient.Fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.System));

            var info = new SaveDataInfo[2];

            Assert.Success(iterator.ReadSaveDataInfo(out long entriesRead, info));

            Assert.Equal(1, entriesRead);
            Assert.Equal(SaveDataType.System, info[0].Type);
            Assert.Equal(SaveDataSpaceId.System, info[0].SpaceId);
            Assert.Equal(saveId, info[0].StaticSaveDataId);
            Assert.Equal(saveId, info[0].SaveDataId);
            Assert.Equal(SaveDataState.Normal, info[0].State);
        }
Пример #20
0
        private async Task <IList <DecorationsSaveSlotInfo> > ReadSaveData(SaveDataInfo saveDataInfo)
        {
            var ms = new MemoryStream();

            using (Stream inputStream = File.OpenRead(saveDataInfo.SaveDataFullFilename))
            {
                await Crypto.DecryptAsync(inputStream, ms, CancellationToken.None);
            }

            using (var reader = new DecorationsReader(ms))
            {
                var list = new List <DecorationsSaveSlotInfo>();

                foreach (DecorationsSaveSlotInfo info in reader.Read())
                {
                    info.SetSaveDataInfo(saveDataInfo);
                    list.Add(info);
                }

                return(list);
            }
        }
Пример #21
0
        public void CreateSaveData_DoesNotExist_HasCorrectOwnerId()
        {
            uint ownerId = 1;

            var applicationId = new Ncm.ApplicationId(ownerId);
            var userId        = new UserId(5, 4);

            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            // Create the save
            Assert.Success(fs.CreateSaveData(applicationId, userId, ownerId, 0x1000, 0x1000, SaveDataFlags.None));

            // Get the created save data's ID
            Assert.Success(fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User));

            var info = new SaveDataInfo[2];

            iterator.ReadSaveDataInfo(out long entriesRead, info);

            Assert.Equal(1, entriesRead);

            // Get the created save data's owner ID
            Assert.Success(fs.GetSaveDataOwnerId(out ulong actualOwnerId, info[0].SaveDataId));
Пример #22
0
        public void CreateCacheStorage_WithIndex_CreatesMultiple()
        {
            var applicationId   = new Ncm.ApplicationId(1);
            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            Assert.Success(fs.CreateCacheStorage(applicationId, SaveDataSpaceId.User, applicationId.Value, 0, 0, 0, SaveDataFlags.None));
            Assert.Success(fs.CreateCacheStorage(applicationId, SaveDataSpaceId.User, applicationId.Value, 1, 0, 0, SaveDataFlags.None));

            fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User);

            var info = new SaveDataInfo[3];

            iterator.ReadSaveDataInfo(out long entriesRead, info);

            Assert.Equal(2, entriesRead);
            Assert.Equal(applicationId, info[0].ProgramId);
            Assert.Equal(applicationId, info[1].ProgramId);

            ushort[] expectedIndexes = { 0, 1 };
            ushort[] actualIndexes   = info.Take(2).Select(x => x.Index).OrderBy(x => x).ToArray();

            Assert.Equal(expectedIndexes, actualIndexes);
        }
Пример #23
0
        public void CreateSystemSaveData_DoesNotExist_SaveIsCreatedInSystem()
        {
            ulong saveId = 0x8000000001234000;

            FileSystemClient fs = FileSystemServerFactory.CreateClient(true);

            // Create the save
            Assert.Success(fs.CreateSystemSaveData(saveId, 0x1000, 0x1000, SaveDataFlags.None));

            // Make sure it was placed in the System save space with the right info.
            Assert.Success(fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.System));

            var info = new SaveDataInfo[2];

            Assert.Success(iterator.ReadSaveDataInfo(out long entriesRead, info));

            Assert.Equal(1, entriesRead);
            Assert.Equal(SaveDataType.System, info[0].Type);
            Assert.Equal(SaveDataSpaceId.System, info[0].SpaceId);
            Assert.Equal(saveId, info[0].StaticSaveDataId);
            Assert.Equal(saveId, info[0].SaveDataId);
            Assert.Equal(SaveDataState.Normal, info[0].State);
        }
Пример #24
0
        public Result Read(out long readCount, Span <byte> saveDataInfoBuffer)
        {
            readCount = default;

            Span <SaveDataInfo> outInfo = MemoryMarshal.Cast <byte, SaveDataInfo>(saveDataInfoBuffer);

            SaveDataInfo tempInfo      = default;
            Span <byte>  tempInfoBytes = SpanHelpers.AsByteSpan(ref tempInfo);

            ISaveDataInfoReader reader = Reader.Target;
            int count = 0;

            while (count < outInfo.Length)
            {
                Result rc = reader.Read(out long baseReadCount, tempInfoBytes);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                if (baseReadCount == 0)
                {
                    break;
                }

                if (Filter.Matches(ref tempInfo))
                {
                    outInfo[count] = tempInfo;

                    count++;
                }
            }

            readCount = count;

            return(Result.Success);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["UserName"] == null && Session["UserName"].ToString() == "")
            {
                Response.Redirect("~/Login.aspx");
            }

            if (Session["ProjectId"] != null && Session["ProjectId"].ToString() != "")
            {
                linkSpaceBAL.ProjectId = Convert.ToInt32(Session["ProjectId"]);
            }

            Response.AddHeader("Content-type", "text/javascript");

            if (Request.Params["p"].Equals("save"))
            {
                string lstr = Request.Params["_gt_json"];

                SaveDataInfo <LinkSpaceEntityWrapper> ldi = JavaScriptConvert.DeserializeObject <SaveDataInfo <LinkSpaceEntityWrapper> >(lstr);

                try
                {
                    if (ldi.deletedRecords.Count() > 0)
                    {
                        linkSpaceBAL.DeleteLinkSpaces(ldi.deletedRecords);
                    }
                    else if (ldi.updatedRecords.Count() > 0)
                    {
                        linkSpaceBAL.UpdateLinkSpaces(ldi.updatedRecords);
                    }

                    else if (ldi.insertedRecords.Count() > 0)
                    {
                        linkSpaceBAL.InsertLinkSpaces(ldi.insertedRecords);
                    }
                }
                catch (SqlException ex)
                {
                    Response.Write(ex.Message);
                }

                Response.Write("{success : true,exception:''}");
            }
            else if (Request.Params["p"].Equals("load"))
            {
                LinkSpaceEntity[] arrReturn = null;
                int          count          = 0;
                string       lstr           = Request.Params["_gt_json"];
                LoadDataInfo ldi            = JavaScriptConvert.DeserializeObject <LoadDataInfo>(lstr);

                try
                {
                    arrReturn = linkSpaceBAL.getLinkSpaceArray(ldi.pageInfo.PageNum, ldi.pageInfo.PageSize, linkSpaceBAL.ProjectId);
                    count     = linkSpaceBAL.getLinkSpaceCount();
                }
                catch (SqlException ex)
                {
                    Response.Write(ex.Message);
                }

                string data = JavaScriptConvert.SerializeObject(arrReturn);
                string ret  = "{data:" + data + ",\n";
                ret += "pageInfo:{totalRowNum:" + count + "},\n";
                ret += "recordType : 'object'}";
                Response.Write(ret);
            }
            else if (Request.Params["p"].Equals("xls") || Request.Params["p"].Equals("csv"))
            {
                string tab;
                string csvFormate = string.Empty;
                string attachment;
                string columnName;
                string rowData;
                string lstr = Request.Params["_gt_json"];
                SaveDataInfo <LinkSpaceEntityWrapper> ldi = JavaScriptConvert.DeserializeObject <SaveDataInfo <LinkSpaceEntityWrapper> >(lstr);

                if (ldi.selectedRecords.Count() > 0)
                {
                    if (Request.Params["p"].Equals("xls"))
                    {
                        attachment = "attachment; filename=LinkSpace.xls";
                        tab        = "\t";
                    }
                    else
                    {
                        attachment = "attachment; filename=LinkSpace.csv";
                        tab        = "\",\"";
                        csvFormate = "\"";
                    }

                    Response.ClearContent();
                    Response.AddHeader("content-disposition", attachment);
                    Response.ContentType = "application/vnd.ms-excel";

                    columnName = csvFormate + "Forum URL" + tab + "Forum Content" + tab + "Actor Name" + tab + "User Name" + tab + "Password" + tab + "Reply Content" + tab + "Reply URL" + csvFormate;
                    Response.Write(columnName);
                    Response.Write("\n");

                    foreach (LinkSpaceEntityWrapper lew in ldi.selectedRecords)
                    {
                        rowData = csvFormate + lew.ForumURL + tab + lew.ForumContent + tab + lew.ActorName.Substring(0, lew.ActorName.LastIndexOf(',')) + tab + lew.UserName + tab + lew.Password + tab + lew.ReplyContent + tab + lew.ReplyURL + csvFormate;
                        rowData = rowData.Replace("\n", " ").Replace("\n\r", " ");
                        Response.Write(rowData + "\n");
                    }
                }
            }
            else if (Request.Params["p"].Equals("pdf"))
            {
                string lstr = Request.Params["_gt_json"];
                SaveDataInfo <LinkSpaceEntityWrapper> ldi = JavaScriptConvert.DeserializeObject <SaveDataInfo <LinkSpaceEntityWrapper> >(lstr);

                if (ldi.selectedRecords.Count() > 0)
                {
                    DataTable dt = new DataTable("LinkSpace");
                    dt.Columns.Add("ForumURL", Type.GetType("System.String"));
                    dt.Columns.Add("ForumContent", Type.GetType("System.String"));
                    dt.Columns.Add("ActorName", Type.GetType("System.String"));
                    dt.Columns.Add("UserName", Type.GetType("System.String"));
                    dt.Columns.Add("Password", Type.GetType("System.String"));
                    dt.Columns.Add("ReplyContent", Type.GetType("System.String"));
                    dt.Columns.Add("ReplyURL", Type.GetType("System.String"));

                    DataRow dr;

                    foreach (LinkSpaceEntityWrapper lew in ldi.selectedRecords)
                    {
                        dr                 = dt.NewRow();
                        dr["ForumURL"]     = lew.ForumURL;
                        dr["ForumContent"] = lew.ForumContent;
                        dr["ActorName"]    = lew.ActorName.Substring(0, lew.ActorName.LastIndexOf(','));
                        dr["UserName"]     = lew.UserName;
                        dr["Password"]     = lew.Password;
                        dr["ReplyContent"] = lew.ReplyContent;
                        dr["ReplyURL"]     = lew.ReplyURL;
                        dt.Rows.Add(dr);
                    }

                    ExportToPDF(dt);
                }
            }
            else
            {
                Response.Write("Not Define");
            }

            Response.End();
        }
Пример #26
0
 /// <summary>
 /// Generates a <see cref="SaveDataInfo"/> from the provided <see cref="SaveDataAttribute"/> and <see cref="SaveDataIndexerValue"/>.
 /// </summary>
 /// <param name="info">When this method returns, contains the generated <see cref="SaveDataInfo"/>.</param>
 /// <param name="key">The key used to generate the <see cref="SaveDataInfo"/>.</param>
 /// <param name="value">The value used to generate the <see cref="SaveDataInfo"/>.</param>
 public static void GenerateSaveDataInfo(out SaveDataInfo info, in SaveDataAttribute key, in SaveDataIndexerValue value)
Пример #27
0
 private static Task <IList <DecorationsSaveSlotInfo> > ReadDecorationsSaveData(SaveDataInfo saveDataInfo)
 {
     return(ReadSaveData <DecorationsSaveSlotInfo, DecorationsReader>(saveDataInfo, ms => new DecorationsReader(ms)));
 }
Пример #28
0
 private static Task <IList <EquipmentSaveSlotInfo> > ReadEquipmentSaveData(SaveDataInfo saveDataInfo)
 {
     return(ReadSaveData <EquipmentSaveSlotInfo, EquipmentReader>(saveDataInfo, ms => new EquipmentReader(ms)));
 }
Пример #29
0
        private static async Task <IList <TSaveSlotInfo> > ReadSaveData <TSaveSlotInfo, TSaveDataReader>(SaveDataInfo saveDataInfo, Func <Stream, TSaveDataReader> readerFactory)
            where TSaveSlotInfo : SaveSlotInfoBase
            where TSaveDataReader : SaveDataReaderBase <TSaveSlotInfo>
        {
            var ms = new MemoryStream();

            using (Stream inputStream = File.OpenRead(saveDataInfo.SaveDataFullFilename))
            {
                await Crypto.DecryptAsync(inputStream, ms, CancellationToken.None);
            }

            using (TSaveDataReader reader = readerFactory(ms))
            {
                var list = new List <TSaveSlotInfo>();

                foreach (TSaveSlotInfo info in reader.Read())
                {
                    info.SetSaveDataInfo(saveDataInfo);
                    list.Add(info);
                }

                return(list);
            }
        }