Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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);
                }
            }
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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);
                    }
                }
            }
        }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
        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;
        }
Esempio n. 9
0
        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);
            }
        }