private FlashDeck(CardServer cardServer, string deckName, IList <Card> flashCards = null) { Name = deckName ?? throw new InvalidOperationException("No deck name declared for a deck being constructed. Please provide a deck name!"); _flashCards = flashCards == null ? new ObservableCollection <Card>() : new ObservableCollection <Card>(flashCards); _cardServer = cardServer; _cardServer.Init(_flashCards); // TODO I am not convinced of this pattern :( Also it seems to take way too long to set new things up when doing DI like this }
// Lolz; process for loading anki .apkg: rename to .zip, unzip, load .anki2 into sqlite, read cards based on format // defined in this particular anki deck public override FlashDeck GetFlashDeck(CardServer cardServer, string deckPath, string deckName = null) { deckName = deckName ?? GetDeckNameFromFileName(deckPath); // SQLite connection string connectionString = String.Format("Data Source={0};Version=3;", deckPath); SQLiteConnection connection = new SQLiteConnection(connectionString); connection.Open(); // Get Reader string sql = "select flds from notes"; var command = new SQLiteCommand(sql, connection); command.CommandType = CommandType.Text; SQLiteDataReader dataReader = command.ExecuteReader(); // Read FlashDeck deck = FlashDeck.FromNothing(cardServer, deckName); string[] unicodeSpaceSeperator = { "\u001f" }; while (dataReader.Read()) { string row = Convert.ToString(dataReader["flds"]); string[] splitRow = row.Split(unicodeSpaceSeperator, StringSplitOptions.None); string french = splitRow[1]; string english = splitRow[3]; Card loadedCard = new Card(french, english); deck.AddCard(loadedCard); } return(deck); }
public void GetInformations() { // Get the test source var testSource = Profile.FindSource(ConfigurationManager.AppSettings["Station"])[0]; // Activate ServerImplementation.EndRequest(CardServer.BeginSelect(testSource.SelectionKey)); // Create request helper var requestor = new RequestInformation(CardServer); // Remember var sources = ((GenericInformationResponse)requestor.BeginGetGroupInformation().Result).Strings.Select(s => SourceIdentifier.Parse(s)).ToArray(); // Request data foreach (var group in ((NetworkInformationResponse)requestor.BeginGetNetworkInformation().Result).Groups) { Console.WriteLine(group); } // Resolve names var names = ((GenericInformationResponse)requestor.BeginGetSourceInformation(sources).Result).Strings; // Report for (int i = 0, imax = Math.Max(sources.Length, names.Length); i < imax; i++) { Console.WriteLine("{0} => {1}", sources[i], names[i]); } }
public CreateCardsControl() { InitializeComponent(); _db = GlobalFactory.Container.Resolve <Database>(); _cardServer = GlobalFactory.Container.Resolve <CardServer>(); _deckNames = new ObservableCollection <string>(); Refresh(); }
public FlashDeck GetDeck(CardServer cardServer, string deckName) { FlashDeck deck = FlashDeck.FromNothing(cardServer, deckName); IList <Card> cards = getCardsForDeck(deckName); deck.AddCards(cards); return(deck); }
public virtual void StartupTests() { // Create card server using (CardServer) CardServer = ServerImplementation.CreateOutOfProcess(); // Attach to profile ServerImplementation.EndRequest(CardServer.BeginSetProfile(ProfileName, false)); }
public FlashDeck GetCompoundDeck(CardServer cardServer, string[] deckNames) { FlashDeck deck = FlashDeck.FromNothing(cardServer, GetCompoundDeckName(deckNames)); foreach (var deckName in deckNames) { IList <Card> cards = getCardsForDeck(deckName); deck.AddCards(cards); } return(deck); }
public void ReloadWithDeckNames(string[] deckNames) { if (!ReloadRequested && !ShouldReloadDeck(deckNames)) { return; } ReloadRequested = false; _currentCard = null; _cardServer = GlobalFactory.Container.Resolve <CardServer>(); _previouslyLoadedDecks = deckNames; _myDeck = _database.GetCompoundDeck(_cardServer, deckNames); ShowingFront = true; GetNextCard(TrialPerformance.Fail); // TODO move this to a start event in WPF or something else... }
private FlashDeck LoadSingleColumnCSV(CardServer cardServer, string deckPath, string deckName, string delimiter = ",") { FlashDeck deckToLoad = FlashDeck.FromNothing(cardServer, deckName); using (TextFieldParser deckCSVParser = new TextFieldParser(@deckPath, System.Text.Encoding.GetEncoding("iso-8859-1"))) { deckCSVParser.HasFieldsEnclosedInQuotes = false; deckCSVParser.TextFieldType = FieldType.Delimited; deckCSVParser.SetDelimiters(delimiter); while (!deckCSVParser.EndOfData) { string[] flashCardSides = deckCSVParser.ReadFields(); Card loadedCard = new Card(flashCardSides[0], flashCardSides[1]); deckToLoad.AddCard(loadedCard); } } return(deckToLoad); }
public override FlashDeck GetFlashDeck(CardServer cardServer, string deckPath, string deckName = null) { deckName = deckName ?? GetDeckNameFromFileName(deckPath); return(LoadSingleColumnCSV(cardServer, deckPath, deckName, _delimiter)); }
public AnkiFlashDeckProvider(CardServer cardServer) // TODO Add config provider to here and read what you need from some kind of config database/csv { _cardServer = cardServer; }
public abstract FlashDeck GetFlashDeck(CardServer cardServer, string deckPath, string deckName);
public SQLiteFlashDeckProvider(Database database, CardServer cardServer) { _cardServer = cardServer; _database = database; }
public static FlashDeck FromList(CardServer cardServer, IList <Card> flashCards, string deckName) { return(new FlashDeck(cardServer, deckName, flashCards)); }
public static FlashDeck FromAnki(CardServer cardServer, string deckPath, string deckName = null) // TODO does the server really belong here? { var deckLoader = new AnkiDeckLoader(); // TODO lol between providers, factory constructors, loader classes, the creation of a flashdeck has become a monster return(deckLoader.GetFlashDeck(cardServer, deckPath, deckName)); // TODO is there better pattern here for loading different file types? Injecting the loader perhaps? }
public static FlashDeck FromCSV(CardServer cardServer, string deckPath, string deckName = null, string delimiter = ",") { var deckLoader = new CSVDeckLoader(delimiter); return(deckLoader.GetFlashDeck(cardServer, deckPath, deckName: deckName)); }
public static FlashDeck FromNothing(CardServer cardServer, string deckName) { return(new FlashDeck(cardServer, deckName)); }