コード例 #1
0
ファイル: FlashDeck.cs プロジェクト: gglang/FlashFrancais
 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
 }
コード例 #2
0
        // 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);
        }
コード例 #3
0
        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]);
            }
        }
コード例 #4
0
 public CreateCardsControl()
 {
     InitializeComponent();
     _db         = GlobalFactory.Container.Resolve <Database>();
     _cardServer = GlobalFactory.Container.Resolve <CardServer>();
     _deckNames  = new ObservableCollection <string>();
     Refresh();
 }
コード例 #5
0
        public FlashDeck GetDeck(CardServer cardServer, string deckName)
        {
            FlashDeck    deck  = FlashDeck.FromNothing(cardServer, deckName);
            IList <Card> cards = getCardsForDeck(deckName);

            deck.AddCards(cards);
            return(deck);
        }
コード例 #6
0
        public virtual void StartupTests()
        {
            // Create card server
            using (CardServer)
                CardServer = ServerImplementation.CreateOutOfProcess();

            // Attach to profile
            ServerImplementation.EndRequest(CardServer.BeginSetProfile(ProfileName, false));
        }
コード例 #7
0
        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);
        }
コード例 #8
0
 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...
 }
コード例 #9
0
ファイル: CSVDeckLoader.cs プロジェクト: gglang/FlashFrancais
        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);
        }
コード例 #10
0
ファイル: CSVDeckLoader.cs プロジェクト: gglang/FlashFrancais
 public override FlashDeck GetFlashDeck(CardServer cardServer, string deckPath, string deckName = null)
 {
     deckName = deckName ?? GetDeckNameFromFileName(deckPath);
     return(LoadSingleColumnCSV(cardServer, deckPath, deckName, _delimiter));
 }
コード例 #11
0
 public AnkiFlashDeckProvider(CardServer cardServer) // TODO Add config provider to here and read what you need from some kind of config database/csv
 {
     _cardServer = cardServer;
 }
コード例 #12
0
 public abstract FlashDeck GetFlashDeck(CardServer cardServer, string deckPath, string deckName);
コード例 #13
0
 public SQLiteFlashDeckProvider(Database database, CardServer cardServer)
 {
     _cardServer = cardServer;
     _database   = database;
 }
コード例 #14
0
ファイル: FlashDeck.cs プロジェクト: gglang/FlashFrancais
 public static FlashDeck FromList(CardServer cardServer, IList <Card> flashCards, string deckName)
 {
     return(new FlashDeck(cardServer, deckName, flashCards));
 }
コード例 #15
0
ファイル: FlashDeck.cs プロジェクト: gglang/FlashFrancais
        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?
        }
コード例 #16
0
ファイル: FlashDeck.cs プロジェクト: gglang/FlashFrancais
        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));
        }
コード例 #17
0
ファイル: FlashDeck.cs プロジェクト: gglang/FlashFrancais
 public static FlashDeck FromNothing(CardServer cardServer, string deckName)
 {
     return(new FlashDeck(cardServer, deckName));
 }