public static async Task <bool> DeleteSaveState(SavestateEntry entry) { ROMDatabase db = ROMDatabase.Current; if (!db.RemoveSavestateFromDB(entry)) { return(false); } StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFolder romFolder = await localFolder.GetFolderAsync(ROM_DIRECTORY); StorageFolder saveFolder = await romFolder.GetFolderAsync(SAVE_DIRECTORY); try { StorageFile file = await saveFolder.GetFileAsync(entry.FileName); await file.DeleteAsync(); } catch (Exception) { return(false); } return(true); }
private static void createSavestate(int slot, string romFileName) { ROMDatabase db = ROMDatabase.Current; int index = romFileName.LastIndexOf('.'); int diff = romFileName.Length - index; string saveFileName = romFileName.Substring(0, romFileName.Length - diff); saveFileName += slot; saveFileName += ".sgm"; SavestateEntry entry; if ((entry = db.GetSavestate(romFileName, slot)) == null) { ROMDBEntry rom = db.GetROM(romFileName); entry = new SavestateEntry() { ROM = rom, FileName = saveFileName, ROMFileName = romFileName, Savetime = DateTime.Now, Slot = slot }; db.Add(entry); } else { entry.Savetime = DateTime.Now; } db.CommitChanges(); }
public static async Task FindExistingSavestatesForNewROM(ROMDBEntry entry) { ROMDatabase db = ROMDatabase.Current; StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFolder romFolder = await localFolder.GetFolderAsync(ROM_DIRECTORY); StorageFolder saveFolder = await romFolder.GetFolderAsync(SAVE_DIRECTORY); IReadOnlyList <StorageFile> saves = await saveFolder.GetFilesAsync(); // Savestates zuordnen foreach (var save in saves) { if (save.Name.Substring(0, save.Name.Length - 2).Equals(entry.DisplayName + ".0")) { // Savestate gehoert zu ROM String number = save.Name.Substring(save.Name.Length - 2); int slot = int.Parse(number); SavestateEntry ssEntry = new SavestateEntry() { ROM = entry, Savetime = save.DateCreated.DateTime, Slot = slot, FileName = save.Name }; db.Add(ssEntry); } } }
private static void createSavestate(int slot, string romFileName) { ROMDatabase db = ROMDatabase.Current; string saveFileName = romFileName.Substring(0, romFileName.Length - 3); if (slot < 10) { saveFileName += "00" + slot; } else { saveFileName += "0" + slot; } SavestateEntry entry; if ((entry = db.GetSavestate(romFileName, slot)) == null) { ROMDBEntry rom = db.GetROM(romFileName); entry = new SavestateEntry() { ROM = rom, FileName = saveFileName, ROMFileName = romFileName, Savetime = DateTime.Now, Slot = slot }; db.Add(entry); } else { entry.Savetime = DateTime.Now; } db.CommitChanges(); }
public static async Task FindExistingSavestatesForNewROM(ROMDBEntry entry) { ROMDatabase db = ROMDatabase.Current; StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFolder romFolder = await localFolder.GetFolderAsync(ROM_DIRECTORY); StorageFolder saveFolder = await romFolder.GetFolderAsync(SAVE_DIRECTORY); IReadOnlyList <StorageFile> saves = await saveFolder.GetFilesAsync(); // Savestates zuordnen foreach (var save in saves) { String name = save.Name.ToLower(); String romName = entry.DisplayName.ToLower(); // Savestate format : (ROMNAME)(SLOT [0-9]).sgm if (name.Substring(0, name.Length - 5).Equals(romName) && name.EndsWith(".sgm")) { // Savestate gehoert zu ROM String number = save.Name.Substring(save.Name.Length - 5, 1); int slot = 0; if (!int.TryParse(number, out slot)) { continue; } if (slot != 9) //dont include auto save { SavestateEntry ssEntry = new SavestateEntry() { ROM = entry, Savetime = save.DateCreated.DateTime, Slot = slot, FileName = save.Name }; db.Add(ssEntry); } } } }
internal static async Task ImportSaveBySharedID(string fileID, string actualName, DependencyObject page) { //note: the file name obtained from fileID can be different from actualName if the file is obtained through cloudsix ROMDatabase db = ROMDatabase.Current; //check to make sure there is a rom with matching name ROMDBEntry entry = null; string extension = Path.GetExtension(actualName).ToLower(); if (extension == ".sgm") { entry = db.GetROMFromSavestateName(actualName); } else if (extension == ".sav") { entry = db.GetROMFromSRAMName(actualName); } if (entry == null) //no matching file name { MessageBox.Show(AppResources.NoMatchingNameText, AppResources.ErrorCaption, MessageBoxButton.OK); return; } //check to make sure format is right if (extension == ".sgm") { string slot = actualName.Substring(actualName.Length - 5, 1); int parsedSlot = 0; if (!int.TryParse(slot, out parsedSlot)) { MessageBox.Show(AppResources.ImportSavestateInvalidFormat, AppResources.ErrorCaption, MessageBoxButton.OK); return; } } //set status bar var indicator = SystemTray.GetProgressIndicator(page); indicator.IsIndeterminate = true; indicator.Text = String.Format(AppResources.ImportingProgressText, actualName); StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFolder romFolder = await localFolder.CreateFolderAsync(ROM_DIRECTORY, CreationCollisionOption.OpenIfExists); StorageFolder saveFolder = await romFolder.CreateFolderAsync(FileHandler.SAVE_DIRECTORY, CreationCollisionOption.OpenIfExists); //if arrive here, entry cannot be null, we can copy the file IStorageFile file = null; if (extension == ".sgm") { file = await SharedStorageAccessManager.CopySharedFileAsync(saveFolder, Path.GetFileNameWithoutExtension(entry.FileName) + actualName.Substring(actualName.Length - 5), NameCollisionOption.ReplaceExisting, fileID); } else if (extension == ".sav") { file = await SharedStorageAccessManager.CopySharedFileAsync(saveFolder, Path.GetFileNameWithoutExtension(entry.FileName) + ".sav", NameCollisionOption.ReplaceExisting, fileID); entry.SuspendAutoLoadLastState = true; } //update database if (extension == ".sgm") { String number = actualName.Substring(actualName.Length - 5, 1); int slot = int.Parse(number); if (entry != null) //NULL = do nothing { SavestateEntry saveentry = db.SavestateEntryExisting(entry.FileName, slot); if (saveentry != null) { //delete entry db.RemoveSavestateFromDB(saveentry); } SavestateEntry ssEntry = new SavestateEntry() { ROM = entry, Savetime = DateTime.Now, Slot = slot, FileName = actualName }; db.Add(ssEntry); db.CommitChanges(); } } #if GBC indicator.Text = AppResources.ApplicationTitle2; #else indicator.Text = AppResources.ApplicationTitle; #endif indicator.IsIndeterminate = false; MessageBox.Show(String.Format(AppResources.ImportCompleteText, entry.DisplayName)); return; }
public static async Task ImportSave(ImportFileItem item, DependencyObject page) { var indicator = SystemTray.GetProgressIndicator(page); indicator.IsIndeterminate = true; indicator.Text = String.Format(AppResources.ImportingProgressText, item.Name); try { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFolder romFolder = await folder.CreateFolderAsync(FileHandler.ROM_DIRECTORY, CreationCollisionOption.OpenIfExists); StorageFolder saveFolder = await romFolder.CreateFolderAsync(FileHandler.SAVE_DIRECTORY, CreationCollisionOption.OpenIfExists); ROMDatabase db = ROMDatabase.Current; if (item.Stream != null) { byte[] tmpBuf = new byte[32]; StorageFile destinationFile = null; ROMDBEntry entry = null; if (item.Type == SkyDriveItemType.SRAM) { entry = db.GetROMFromSRAMName(item.Name); if (entry != null) { entry.SuspendAutoLoadLastState = true; destinationFile = await saveFolder.CreateFileAsync(Path.GetFileNameWithoutExtension(entry.FileName) + ".srm", CreationCollisionOption.ReplaceExisting); } else { destinationFile = await saveFolder.CreateFileAsync(item.Name, CreationCollisionOption.ReplaceExisting); } } else if (item.Type == SkyDriveItemType.Savestate) { entry = db.GetROMFromSavestateName(item.Name); if (entry != null) { destinationFile = await saveFolder.CreateFileAsync(Path.GetFileNameWithoutExtension(entry.FileName) + item.Name.Substring(item.Name.Length - 4), CreationCollisionOption.ReplaceExisting); } else { destinationFile = await saveFolder.CreateFileAsync(item.Name, CreationCollisionOption.ReplaceExisting); } } using (IRandomAccessStream destStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite)) using (DataWriter writer = new DataWriter(destStream)) { if (item.Stream.CanSeek) { item.Stream.Seek(0, SeekOrigin.Begin); } while (item.Stream.Read(tmpBuf, 0, tmpBuf.Length) != 0) { writer.WriteBytes(tmpBuf); } await writer.StoreAsync(); await writer.FlushAsync(); writer.DetachStream(); } item.Downloading = false; if (item.Type == SkyDriveItemType.Savestate) { String number = item.Name.Substring(item.Name.Length - 1, 1); int slot = int.Parse(number); if (entry != null) //NULL = do nothing { SavestateEntry saveentry = db.SavestateEntryExisting(entry.FileName, slot); if (saveentry != null) { //delete entry db.RemoveSavestateFromDB(saveentry); } SavestateEntry ssEntry = new SavestateEntry() { ROM = entry, Savetime = DateTime.Now, Slot = slot, FileName = item.Name }; db.Add(ssEntry); db.CommitChanges(); } } MessageBox.Show(String.Format(AppResources.DownloadCompleteText, item.Name)); } else { MessageBox.Show(String.Format(AppResources.DownloadErrorText, item.Name, "Import error"), AppResources.ErrorCaption, MessageBoxButton.OK); } } catch (Exception ex) { MessageBox.Show(ex.Message, AppResources.ErrorCaption, MessageBoxButton.OK); } #if GBC indicator.Text = AppResources.ApplicationTitle2; #else indicator.Text = AppResources.ApplicationTitle; #endif indicator.IsIndeterminate = false; }
private async Task DownloadFile(SkyDriveListItem item, LiveConnectClient client) { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFolder romFolder = await folder.CreateFolderAsync(FileHandler.ROM_DIRECTORY, CreationCollisionOption.OpenIfExists); StorageFolder saveFolder = await romFolder.CreateFolderAsync(FileHandler.SAVE_DIRECTORY, CreationCollisionOption.OpenIfExists); String path = romFolder.Path; String savePath = saveFolder.Path; ROMDatabase db = ROMDatabase.Current; var indicator = SystemTray.GetProgressIndicator(this); indicator.IsIndeterminate = true; indicator.Text = String.Format(AppResources.DownloadingProgressText, item.Name); LiveDownloadOperationResult e = await client.DownloadAsync(item.SkyDriveID + "/content"); if (e != null) { byte[] tmpBuf = new byte[e.Stream.Length]; StorageFile destinationFile = null; ROMDBEntry entry = null; if (item.Type == SkyDriveItemType.SRAM) { entry = db.GetROMFromSRAMName(item.Name); if (entry != null) { destinationFile = await saveFolder.CreateFileAsync(Path.GetFileNameWithoutExtension(entry.FileName) + ".sav", CreationCollisionOption.ReplaceExisting); } else { destinationFile = await saveFolder.CreateFileAsync(item.Name, CreationCollisionOption.ReplaceExisting); } } else if (item.Type == SkyDriveItemType.Savestate) { entry = db.GetROMFromSavestateName(item.Name); if (entry != null) { destinationFile = await saveFolder.CreateFileAsync(Path.GetFileNameWithoutExtension(entry.FileName) + item.Name.Substring(item.Name.Length - 5), CreationCollisionOption.ReplaceExisting); } else { destinationFile = await saveFolder.CreateFileAsync(item.Name, CreationCollisionOption.ReplaceExisting); } } using (IRandomAccessStream destStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite)) using (DataWriter writer = new DataWriter(destStream)) { while (e.Stream.Read(tmpBuf, 0, tmpBuf.Length) != 0) { writer.WriteBytes(tmpBuf); } await writer.StoreAsync(); await writer.FlushAsync(); writer.DetachStream(); } e.Stream.Close(); item.Downloading = false; if (item.Type == SkyDriveItemType.Savestate) { String number = item.Name.Substring(item.Name.Length - 5, 1); int slot = int.Parse(number); if (entry != null) //NULL = do nothing { SavestateEntry saveentry = db.SavestateEntryExisting(entry.FileName, slot); if (saveentry != null) { //delete entry db.RemoveSavestateFromDB(saveentry); } SavestateEntry ssEntry = new SavestateEntry() { ROM = entry, Savetime = DateTime.Now, Slot = slot, FileName = item.Name }; db.Add(ssEntry); db.CommitChanges(); } } MessageBox.Show(String.Format(AppResources.DownloadCompleteText, item.Name)); } else { MessageBox.Show(String.Format(AppResources.DownloadErrorText, item.Name, "Api error"), AppResources.ErrorCaption, MessageBoxButton.OK); } #if GBC indicator.Text = AppResources.ApplicationTitle2; #else indicator.Text = AppResources.ApplicationTitle; #endif indicator.IsIndeterminate = false; }
private async Task DownloadFile(SkyDriveListItem item, LiveConnectClient client) { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFolder romFolder = await folder.CreateFolderAsync(FileHandler.ROM_DIRECTORY, CreationCollisionOption.OpenIfExists); StorageFolder saveFolder = await romFolder.CreateFolderAsync(FileHandler.SAVE_DIRECTORY, CreationCollisionOption.OpenIfExists); String path = romFolder.Path; String savePath = saveFolder.Path; ROMDatabase db = ROMDatabase.Current; var indicator = new ProgressIndicator() { IsIndeterminate = true, IsVisible = true, Text = String.Format(AppResources.DownloadingProgressText, item.Name) }; SystemTray.SetProgressIndicator(this, indicator); LiveDownloadOperationResult e = await client.DownloadAsync(item.SkyDriveID + "/content"); if (e != null) { byte[] tmpBuf = new byte[e.Stream.Length]; StorageFile destinationFile = await saveFolder.CreateFileAsync(item.Name, CreationCollisionOption.ReplaceExisting); using (IRandomAccessStream destStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite)) using (DataWriter writer = new DataWriter(destStream)) { while (e.Stream.Read(tmpBuf, 0, tmpBuf.Length) != 0) { writer.WriteBytes(tmpBuf); } await writer.StoreAsync(); await writer.FlushAsync(); writer.DetachStream(); } e.Stream.Close(); item.Downloading = false; SystemTray.GetProgressIndicator(this).IsVisible = false; if (item.Type == SkyDriveItemType.Savestate) { if (!db.SavestateEntryExisting(item.Name)) { String number = item.Name.Substring(item.Name.Length - 5, 1); int slot = int.Parse(number); ROMDBEntry entry = db.GetROMFromSavestateName(item.Name); // Null = No ROM existing for this file -> skip inserting into database. The file will be inserted when the corresponding ROM is downloaded. if (entry != null) { SavestateEntry ssEntry = new SavestateEntry() { ROM = entry, Savetime = DateTime.Now, Slot = slot, FileName = item.Name }; db.Add(ssEntry); db.CommitChanges(); } } } MessageBox.Show(String.Format(AppResources.DownloadCompleteText, item.Name)); } else { SystemTray.GetProgressIndicator(this).IsVisible = false; MessageBox.Show(String.Format(AppResources.DownloadErrorText, item.Name, "Api error"), AppResources.ErrorCaption, MessageBoxButton.OK); } }