Beispiel #1
0
        private void UpdateEpisode(EpisodeEntry entry)
        {
            using (SQLiteCommand cmd = new SQLiteCommand(SQLConn))
            {
                cmd.CommandText = @"INSERT OR REPLACE INTO episodes VALUES (@eid, @aid, @epno, @spl_epno, @english, @nihongo, @romaji, @airdate, @watched);";

                SQLiteParameter[] eParams = { new SQLiteParameter("@eid",      entry.eid),
                                              new SQLiteParameter("@aid",      entry.aid),
                                              new SQLiteParameter("@epno",     entry.epno),
                                              new SQLiteParameter("@spl_epno", entry.spl_epno),
                                              new SQLiteParameter("@english",  entry.english),
                                              new SQLiteParameter("@nihongo",  entry.nihongo),
                                              new SQLiteParameter("@romaji",   entry.romaji),
                                              new SQLiteParameter("@airdate",  entry.airdate),
                                              new SQLiteParameter("@watched",  entry.watched) };

                eParams[2].IsNullable = eParams[3].IsNullable = eParams[4].IsNullable = eParams[5].IsNullable = true;
                if (entry.epno == 0)
                {
                    eParams[2].Value = null;
                }

                cmd.Parameters.AddRange(eParams);
                cmd.ExecuteNonQuery();
            }
        }
Beispiel #2
0
            public async Task <int> Handle(CreatePost request, CancellationToken cancellationToken)
            {
                var gameId  = _tenant.Instance.Id;
                var episode = await _db.Episode
                              .Include(e => e.Series)
                              .Include(e => e.Status)
                              .FirstAsync(e => e.Series.GameId == gameId && (e.Status.Name == StaticValues.Published), cancellationToken: cancellationToken);

                var entity             = new EpisodeEntry();
                var episodeEntryStatus =
                    entity.EpisodeEntryStatusId = (await _db.EpisodeEntryStatus.FirstAsync(
                                                       x => x.Name == StaticValues.Draft,
                                                       cancellationToken: cancellationToken)).Id;

                entity.EpisodeEntryTypeId = (await _db.EpisodeEntryType.FirstAsync(x => x.Name == StaticValues.Post,
                                                                                   cancellationToken: cancellationToken)).Id;
                entity.EpisodeId = episode.Id;
                await _db.EpisodeEntry.AddAsync(entity, cancellationToken : cancellationToken);

                await _db.SaveChangesAsync(cancellationToken);

                entity.EpisodeEntryPlayer =
                    new Collection <EpisodeEntryPlayer>()
                {
                    new EpisodeEntryPlayer()
                    {
                        PlayerId = _userService.GetId(), EpisodeEntryId = entity.Id
                    }
                };
                _db.EpisodeEntry.Update(entity);
                await _db.SaveChangesAsync(cancellationToken);


                return(entity.Id);
            }
        public StoryPostQueryFixture()
        {
            Context = TestSpmsContextFactory.Create();
            var game = Context.Game.First();

            Context.Biography.Add(new Domain.Models.Biography()
            {
                Firstname = "Dan", Surname = "Taylor", Player = new Player()
                {
                    AuthString = "123"
                }, State = new BiographyState()
                {
                    Default = false, Name = "State", GameId = game.Id
                }, Posting = new Posting()
                {
                    Name = "Starbase Gamma"
                }
            });
            Context.SaveChanges();


            var ipsum        = new NLipsum.Core.LipsumGenerator();
            var sentences    = ipsum.GenerateSentences(3, new Sentence(5, 20));
            var episodeEntry = new EpisodeEntry()
            {
                Title                = sentences[0],
                Location             = sentences[1],
                Timeline             = sentences[2],
                Content              = ipsum.GenerateLipsum(5),
                EpisodeId            = Context.Episode.First().Id,
                EpisodeEntryTypeId   = Context.EpisodeEntryType.First(x => x.Name == StaticValues.Post).Id,
                EpisodeEntryStatusId = Context.EpisodeEntryStatus.First(x => x.Name == StaticValues.Published).Id
            };

            Context.EpisodeEntry.Add(episodeEntry);
            Context.SaveChanges();


            var configurationProvider = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile <ApplicationMapper>();
            });

            Mapper = configurationProvider.CreateMapper();
        }
Beispiel #4
0
        private void HandleSubmit(EpisodeEntry entity, AuthorPostViewModel model)
        {
            var submitValue = model.submitpost;

            if (string.IsNullOrEmpty(submitValue))
            {
                return;
            }

            if (submitValue.Equals("publish"))
            {
                entity.PublishedAt          = DateTime.UtcNow;
                entity.EpisodeEntryStatusId = _context.EpisodeEntryStatus.First(x => x.Name == StaticValues.Published).Id;
            }

            if (submitValue.Equals("schedule"))
            {
                entity.PublishedAt          = model.PostAt;
                entity.EpisodeEntryStatusId = _context.EpisodeEntryStatus.First(x => x.Name == StaticValues.Pending).Id;
            }
        }
Beispiel #5
0
        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            float tempRating;
            int   tempRuntime;

            switch (ResultTabControl.SelectedIndex)
            {
            case 1:
                int tempVotes;
                int tempYear;
                float.TryParse(MovieRating.Text, NumberStyles.Float, AppSettings.CInfo, out tempRating);
                int.TryParse(MovieRuntime.Text, NumberStyles.Integer, AppSettings.CInfo, out tempRuntime);
                int.TryParse(MovieVotes.Text, NumberStyles.Integer, AppSettings.CInfo, out tempVotes);
                int.TryParse(MovieYear.Text, NumberStyles.Integer, AppSettings.CInfo, out tempYear);

                ResultMovieData = new MovieEntry
                {
                    Casts     = _castList.Casts,
                    Aired     = "1969-12-31",
                    Premiered = "1969-12-31",
                    Code      = "",
                    Countries =
                        MovieCountry.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                    DateAdded = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    Directors =
                        MovieDirector.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                    EpBookmark   = 0f,
                    FanartImages = _backdropsList.ToList(),
                    Genres       =
                        MovieGenre.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                    ImdbID        = MovieImdbId.Text,
                    LastPlayed    = "1969-12-31",
                    MPAARating    = MovieMPAARating.Text,
                    OriginalTitle = MovieOriginalTitle.Text,
                    Outline       = "",
                    PlayCount     = 0,
                    Plot          = MoviePlot.Text,
                    PosterImages  = _postersList.ToList(),
                    Rating        = tempRating,
                    Runtime       = tempRuntime,
                    SetNames      =
                        MovieSetName.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                    SortTitle = MovieSortTitle.Text,
                    Status    = "",
                    Studios   =
                        MovieStudio.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                    Tagline = MovieTagline.Text,
                    Title   = MovieTitle.Text,
                    Top250  = 0,
                    Trailer = MovieTrailer.Text,
                    Votes   = tempVotes,
                    Writers =
                        MovieWriters.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                    Year = tempYear,
                    SelectedBackdropImage = ((MovieDBImageInfo)MovieBackdropList.SelectedItem).UrlOriginal,
                    SelectedPosterImage   = ((MovieDBPosterImage)MoviePosterList.SelectedItem).UrlOriginal
                };
                break;

            case 2:
                float.TryParse(TvShowEpisodeRating.Text, NumberStyles.Float, AppSettings.CInfo, out tempRating);
                int.TryParse(TvShowEpisodeRuntime.Text, NumberStyles.Integer, AppSettings.CInfo, out tempRuntime);
                ResultEpisodeData = new EpisodeEntry
                {
                    Title      = TvShowEpisodeTitle.Text,
                    ImdbID     = TvShowEpisodeImdbId.Text,
                    DateAdded  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    Code       = "",
                    LastPlayed = "1969-12-31",
                    Aired      = TvShowEpisodeFirstAired.Text,
                    Rating     = tempRating,
                    Runtime    = tempRuntime,
                    Directors  =
                        TvShowEpisodeDirector.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries)
                        .ToList(),
                    Writers =
                        TvShowEpisodeWriter.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries)
                        .ToList(),
                    Plot    = TvShowEpisodePlot.Text,
                    Studios = TvShowNetwork.Text.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries)
                              .ToList(),
                    DisplayEpisode = ((DBTvShowEpisode)TvShowEpisodeNumber.SelectedItem).EpisodeNumber,
                    DisplaySeason  = ((DBTvShowSeason)TvShowSeason.SelectedItem).SeasonNumber,
                    Episode        = ((DBTvShowEpisode)TvShowEpisodeNumber.SelectedItem).EpisodeNumber,
                    Season         = ((DBTvShowSeason)TvShowSeason.SelectedItem).SeasonNumber,
                    MPAARating     = TvShowMpaaRating.Text,
                    ShowTitle      = TvShowTitle.Text,
                    PosterImage    =
                        new MovieDBImageInfo
                    {
                        UrlOriginal = ((DBTvShowEpisode)TvShowEpisodeNumber.SelectedItem).EpisodeImageUrl
                    },
                    SelectedPosterImage = ((DBTvShowEpisode)TvShowEpisodeNumber.SelectedItem).EpisodeImageUrl,
                    Casts     = _castList.Casts,
                    Premiered = TvShowFirstAired.Text
                };

                List <string> gStars = ((DBTvShowEpisode)TvShowEpisodeNumber.SelectedItem).GuestStars;
                foreach (string gStar in gStars)
                {
                    ResultEpisodeData.Casts.Add(new MovieDBCast {
                        Name = gStar
                    });
                }

                break;
            }
            SearchString = MediaTitleInfo.Text;
            AppSettings.LastSelectedSource = DataSource.SelectedIndex;
            DialogResult = true;
        }
Beispiel #6
0
        /// <summary>
        /// Parses the return message of a FILE command,
        /// and then triggers the OnFileInfoFetched event.
        /// </summary>
        private void ParseFileData(object item, string data)
        {
            string[] info = Regex.Split(data, "\n")[1].Split('|');

            AnimeEntry anime = new AnimeEntry();
            EpisodeEntry episode = new EpisodeEntry();
            FileEntry file = (item is HashItem) ?
                new FileEntry((HashItem)item) : (FileEntry)item;

            file.fid = int.Parse(info[0]);
            anime.aid = episode.aid = int.Parse(info[1]);
            episode.eid = file.eid = int.Parse(info[2]);
            file.lid = int.Parse(info[4]);

            file.source = info[5].FormatNullable();
            file.acodec = info[6].Contains("'") ? info[6].Split('\'')[0] : info[6].FormatNullable();
            file.acodec = ExtensionMethods.FormatAudioCodec(file.acodec);
            file.vcodec = ExtensionMethods.FormatVideoCodec(info[7].FormatNullable());
            file.vres = info[8].FormatNullable();

            file.length = double.Parse(info[9]);

            if (!string.IsNullOrEmpty(info[10]) && int.Parse(info[10]) != 0) episode.airdate = double.Parse(info[10]);

            file.state = int.Parse(info[11]);
            episode.watched = file.watched = Convert.ToBoolean(int.Parse(info[12]));
            if (!string.IsNullOrEmpty(info[13]) && int.Parse(info[13]) != 0) file.watcheddate = double.Parse(info[13]);

            anime.eps_total = !string.IsNullOrEmpty(info[14]) ?
                (int.Parse(info[14]) > int.Parse(info[15]) ? int.Parse(info[14]) : int.Parse(info[15])) : int.Parse(info[15]);
            anime.year = info[16].Contains('-') ?
                        (info[16].Split('-')[0] != info[16].Split('-')[1] ? info[16] : info[16].Split('-')[0]) : info[16];
            anime.type = info[17];

            anime.romaji = info[18];
            anime.nihongo = info[19].FormatNullable();
            anime.english = info[20].FormatNullable();

            if (Regex.IsMatch(info[21].Substring(0, 1), @"\D"))
                episode.spl_epno = info[21];
            else
                episode.epno = info[21].Contains('-') ? int.Parse(info[21].Split('-')[0]) : int.Parse(info[21]);

            episode.english = info[22];
            episode.romaji = info[23].FormatNullable();
            episode.nihongo = info[24].FormatNullable();

            if (int.Parse(info[3]) != 0)
                file.Group = new GroupEntry
                {
                    gid = int.Parse(info[3]),
                    group_name = info[25],
                    group_abbr = info[26]
                };

            OnFileInfoFetched(new FileInfoFetchedArgs(anime, episode, file));
        }
Beispiel #7
0
 public FileInfoFetchedArgs(AnimeEntry anime, EpisodeEntry episode, FileEntry file)
 {
     Anime = anime;
     Episode = episode;
     File = file;
 }
Beispiel #8
0
        public static MylistEntry FromEpisode(EpisodeEntry entry)
        {
            MylistEntry m_entry = new MylistEntry();
            TimeSpan length = TimeSpan.FromSeconds(entry.length);

            m_entry.OriginalEntry = entry;
            m_entry.ID = entry.eid;
            m_entry.HasChildren = entry.hasFiles;

            m_entry.Col0 = String.Format("{0}: {1}", (entry.spl_epno == null) ? entry.epno.ToString() : entry.spl_epno, entry.english);
            m_entry.Col2 = entry.watched ? "Yes" : "No";

            if (entry.airdate != null)
                m_entry.Col3 = entry.airdate.ToDateTime(false).ToShortDateString();

            m_entry.Col4 = length.ToFormattedLength();
            m_entry.Col5 = entry.size.ToFormattedBytes();

            return m_entry;
        }
Beispiel #9
0
        private void DoWork(object sender, DoWorkEventArgs e)
        {
            List <AnimeEntry> m_aList = new List <AnimeEntry>();

            double totalProcessedFiles = 0;
            double totalFiles          = int.Parse(new XPathDocument(xmlPath).CreateNavigator().Evaluate("count(//file)").ToString()) * 2;

            using (XmlReader reader = XmlReader.Create(xmlPath))
            {
                reader.ReadToFollowing("mylist");
                if (reader["template"] != "mini")
                {
                    Dispatcher.Invoke(new Action(delegate
                    {
                        MessageBox.Show("Please ensure you selected a mylist export file that used the xml-mini template.",
                                        "Invalid xml template!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }));

                    xmlWorker.CancelAsync();
                    return;
                }


                // <anime>
                while (reader.ReadToFollowing("anime"))
                {
                    while (closePending)
                    {
                        Thread.Sleep(500);
                    }

                    AnimeEntry entry = new AnimeEntry();

                    entry.aid  = int.Parse(reader["aid"]);
                    entry.type = reader["type"];
                    entry.year = reader["year"];

                    // <titles>
                    reader.ReadToFollowing("default");
                    entry.romaji = reader.ReadElementContentAsString();
                    Dispatcher.BeginInvoke(new Action(delegate { importFilePath.Text = String.Format("Reading: {0}", entry.title); }));

                    reader.ReadToFollowing("nihongo");
                    entry.nihongo = reader.ReadElementContentAsString().FormatNullable();

                    reader.ReadToFollowing("english");
                    entry.english = reader.ReadElementContentAsString().FormatNullable();
                    // </titles>

                    // <episodes>
                    if (!reader.ReadToFollowing("episodes"))
                    {
                        goto Finish;
                    }

                    entry.eps_total = int.Parse(reader["total"]);

                    XmlReader episodesReader = reader.ReadSubtree();
                    // <episode>
                    while (episodesReader.ReadToFollowing("episode"))
                    {
                        while (closePending)
                        {
                            Thread.Sleep(500);
                        }

                        EpisodeEntry episode = new EpisodeEntry();

                        episode.eid = int.Parse(episodesReader["eid"]);

                        episode.airdate = episodesReader["aired"] == "-" ? null :
                                          UnixTimestamp.FromDateTime(DateTime.Parse(episodesReader["aired"],
                                                                                    System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")));
                        episode.watched = Convert.ToBoolean(int.Parse(episodesReader["watched"]));

                        if (Regex.IsMatch(episodesReader["epno"].Substring(0, 1), @"\D"))
                        {
                            episode.spl_epno = episodesReader["epno"];
                        }
                        else
                        {
                            episode.epno = int.Parse(episodesReader["epno"]);
                        }

                        // <titles>
                        episodesReader.ReadToDescendant("english");
                        episode.english = episodesReader.ReadElementContentAsString();

                        episodesReader.ReadToFollowing("nihongo");
                        episode.nihongo = episodesReader.ReadElementContentAsString().FormatNullable();

                        episodesReader.ReadToFollowing("romaji");
                        episode.romaji = episodesReader.ReadElementContentAsString().FormatNullable();
                        // </titles>

                        // <files>
                        if (!episodesReader.ReadToFollowing("files"))
                        {
                            goto Finish;
                        }

                        XmlReader filesReader = episodesReader.ReadSubtree();
                        // <file>
                        while (filesReader.ReadToFollowing("file"))
                        {
                            while (closePending)
                            {
                                Thread.Sleep(500);
                            }

                            FileEntry file = new FileEntry();

                            file.fid         = int.Parse(filesReader["fid"]);
                            file.lid         = int.Parse(filesReader["lid"]);
                            file.watcheddate = filesReader["watched"] == "-" ? null :
                                               UnixTimestamp.FromDateTime(DateTime.Parse(episodesReader["watched"],
                                                                                         System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")));
                            file.watched = file.watcheddate != null;
                            file.generic = episodesReader["generic"] != null;

                            if (!file.generic) // generic entries do not have this information
                            {
                                int gid = 0;

                                if (filesReader["gid"] != null)
                                {
                                    gid = int.Parse(filesReader["gid"]);
                                }

                                file.ed2k   = filesReader["ed2k"];
                                file.length = double.Parse(filesReader["length"]);
                                file.size   = double.Parse(filesReader["size"]);
                                file.source = filesReader["source"].FormatNullable();
                                file.acodec = ExtensionMethods.FormatAudioCodec(filesReader["acodec"].FormatNullable());
                                file.vcodec = ExtensionMethods.FormatVideoCodec(filesReader["vcodec"].FormatNullable());
                                file.vres   = filesReader["vres"].FormatNullable();

                                if (gid != 0)
                                {
                                    // <group_name>
                                    filesReader.ReadToFollowing("group_name");
                                    string group_name = filesReader.ReadElementContentAsString();
                                    // </group_name>

                                    // <group_abbr>
                                    filesReader.ReadToFollowing("group_abbr");
                                    string group_abbr = filesReader.ReadElementContentAsString();
                                    // </group_abbr>


                                    file.Group = new GroupEntry
                                    {
                                        gid        = gid,
                                        group_name = group_name,
                                        group_abbr = group_abbr
                                    };
                                }
                            }

                            episode.Files.Add(file);
                            importProgressBar.Dispatcher.BeginInvoke(new Action <double, double>((total, processed) =>
                            {
                                importProgressBar.Value = Math.Ceiling(processed / total * 100);
                            }), totalFiles, ++totalProcessedFiles);
                            // </file>
                        }
                        // </files>
                        filesReader.Close();
                        entry.Episodes.Add(episode);
                        // </episode>
                    }
                    // </episodes>
                    episodesReader.Close();

Finish:
                    m_aList.Add(entry);

                    // </anime>
                }
                // </mylist>
            }

            m_myList.OnEntryInserted += (aTitle) =>
            {
                importProgressBar.Dispatcher.BeginInvoke(new Action(delegate
                {
                    importFilePath.Text     = String.Format("Writing: {0}", aTitle);
                    importProgressBar.Value = Math.Ceiling(++totalProcessedFiles / totalFiles * 100);
                }));
            };

            m_myList.InsertFromImport(m_aList);
        }
Beispiel #10
0
        /// <summary>
        /// Parses the return message of a FILE command,
        /// and then triggers the OnFileInfoFetched event.
        /// </summary>
        private void ParseFileData(object item, string data)
        {
            string[] info = Regex.Split(data, "\n")[1].Split('|');

            AnimeEntry   anime   = new AnimeEntry();
            EpisodeEntry episode = new EpisodeEntry();
            FileEntry    file    = (item is HashItem) ?
                                   new FileEntry((HashItem)item) : (FileEntry)item;

            file.fid    = int.Parse(info[0]);
            anime.aid   = episode.aid = int.Parse(info[1]);
            episode.eid = file.eid = int.Parse(info[2]);
            file.lid    = int.Parse(info[4]);

            file.source = info[5].FormatNullable();
            file.acodec = info[6].Contains("'") ? info[6].Split('\'')[0] : info[6].FormatNullable();
            file.acodec = ExtensionMethods.FormatAudioCodec(file.acodec);
            file.vcodec = ExtensionMethods.FormatVideoCodec(info[7].FormatNullable());
            file.vres   = info[8].FormatNullable();

            file.length = double.Parse(info[9]);

            if (!string.IsNullOrEmpty(info[10]) && int.Parse(info[10]) != 0)
            {
                episode.airdate = double.Parse(info[10]);
            }

            file.state      = int.Parse(info[11]);
            episode.watched = file.watched = Convert.ToBoolean(int.Parse(info[12]));
            if (!string.IsNullOrEmpty(info[13]) && int.Parse(info[13]) != 0)
            {
                file.watcheddate = double.Parse(info[13]);
            }

            anime.eps_total = !string.IsNullOrEmpty(info[14]) ?
                              (int.Parse(info[14]) > int.Parse(info[15]) ? int.Parse(info[14]) : int.Parse(info[15])) : int.Parse(info[15]);
            anime.year = info[16].Contains('-') ?
                         (info[16].Split('-')[0] != info[16].Split('-')[1] ? info[16] : info[16].Split('-')[0]) : info[16];
            anime.type = info[17];

            anime.romaji  = info[18];
            anime.nihongo = info[19].FormatNullable();
            anime.english = info[20].FormatNullable();

            if (Regex.IsMatch(info[21].Substring(0, 1), @"\D"))
            {
                episode.spl_epno = info[21];
            }
            else
            {
                episode.epno = info[21].Contains('-') ? int.Parse(info[21].Split('-')[0]) : int.Parse(info[21]);
            }

            episode.english = info[22];
            episode.romaji  = info[23].FormatNullable();
            episode.nihongo = info[24].FormatNullable();

            if (int.Parse(info[3]) != 0)
            {
                file.Group = new GroupEntry
                {
                    gid        = int.Parse(info[3]),
                    group_name = info[25],
                    group_abbr = info[26]
                }
            }
            ;

            OnFileInfoFetched(new FileInfoFetchedArgs(anime, episode, file));
        }
Beispiel #11
0
 public FileInfoFetchedArgs(AnimeEntry anime, EpisodeEntry episode, FileEntry file)
 {
     Anime   = anime;
     Episode = episode;
     File    = file;
 }
        private void DoWork(object sender, DoWorkEventArgs e)
        {
            List<AnimeEntry> m_aList = new List<AnimeEntry>();

            double totalProcessedFiles = 0;
            double totalFiles = int.Parse(new XPathDocument(xmlPath).CreateNavigator().Evaluate("count(//file)").ToString()) * 2;

            using (XmlReader reader = XmlReader.Create(xmlPath))
            {
                reader.ReadToFollowing("mylist");
                if (reader["template"] != "mini")
                {
                    Dispatcher.Invoke(new Action(delegate
                    {
                        MessageBox.Show("Please ensure you selected a mylist export file that used the xml-mini template.",
                            "Invalid xml template!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }));

                    xmlWorker.CancelAsync();
                    return;
                }

                // <anime>
                while (reader.ReadToFollowing("anime"))
                {
                    while (closePending) Thread.Sleep(500);

                    AnimeEntry entry = new AnimeEntry();

                    entry.aid = int.Parse(reader["aid"]);
                    entry.type = reader["type"];
                    entry.year = reader["year"];

                    // <titles>
                    reader.ReadToFollowing("default");
                    entry.romaji = reader.ReadElementContentAsString();
                    Dispatcher.BeginInvoke(new Action(delegate { importFilePath.Text = String.Format("Reading: {0}", entry.title); }));

                    reader.ReadToFollowing("nihongo");
                    entry.nihongo = reader.ReadElementContentAsString().FormatNullable();

                    reader.ReadToFollowing("english");
                    entry.english = reader.ReadElementContentAsString().FormatNullable();
                    // </titles>

                    // <episodes>
                    if (!reader.ReadToFollowing("episodes"))
                        goto Finish;

                    entry.eps_total = int.Parse(reader["total"]);

                    XmlReader episodesReader = reader.ReadSubtree();
                    // <episode>
                    while (episodesReader.ReadToFollowing("episode"))
                    {
                        while (closePending) Thread.Sleep(500);

                        EpisodeEntry episode = new EpisodeEntry();

                        episode.eid = int.Parse(episodesReader["eid"]);

                        episode.airdate = episodesReader["aired"] == "-" ? null :
                                          UnixTimestamp.FromDateTime(DateTime.Parse(episodesReader["aired"],
                                          System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")));
                        episode.watched = Convert.ToBoolean(int.Parse(episodesReader["watched"]));

                        if (Regex.IsMatch(episodesReader["epno"].Substring(0, 1), @"\D"))
                            episode.spl_epno = episodesReader["epno"];
                        else
                            episode.epno = int.Parse(episodesReader["epno"]);

                        // <titles>
                        episodesReader.ReadToDescendant("english");
                        episode.english = episodesReader.ReadElementContentAsString();

                        episodesReader.ReadToFollowing("nihongo");
                        episode.nihongo = episodesReader.ReadElementContentAsString().FormatNullable();

                        episodesReader.ReadToFollowing("romaji");
                        episode.romaji = episodesReader.ReadElementContentAsString().FormatNullable();
                        // </titles>

                        // <files>
                        if (!episodesReader.ReadToFollowing("files"))
                            goto Finish;

                        XmlReader filesReader = episodesReader.ReadSubtree();
                        // <file>
                        while (filesReader.ReadToFollowing("file"))
                        {
                            while (closePending) Thread.Sleep(500);

                            FileEntry file = new FileEntry();

                            file.fid = int.Parse(filesReader["fid"]);
                            file.lid = int.Parse(filesReader["lid"]);
                            file.watcheddate = filesReader["watched"] == "-" ? null :
                                               UnixTimestamp.FromDateTime(DateTime.Parse(episodesReader["watched"],
                                               System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")));
                            file.watched = file.watcheddate != null;
                            file.generic = episodesReader["generic"] != null;

                            if (!file.generic) // generic entries do not have this information
                            {
                                int gid = 0;

                                if (filesReader["gid"] != null)
                                    gid = int.Parse(filesReader["gid"]);

                                file.ed2k = filesReader["ed2k"];
                                file.length = double.Parse(filesReader["length"]);
                                file.size = double.Parse(filesReader["size"]);
                                file.source = filesReader["source"].FormatNullable();
                                file.acodec = ExtensionMethods.FormatAudioCodec(filesReader["acodec"].FormatNullable());
                                file.vcodec = ExtensionMethods.FormatVideoCodec(filesReader["vcodec"].FormatNullable());
                                file.vres = filesReader["vres"].FormatNullable();

                                if (gid != 0)
                                {
                                    // <group_name>
                                    filesReader.ReadToFollowing("group_name");
                                    string group_name = filesReader.ReadElementContentAsString();
                                    // </group_name>

                                    // <group_abbr>
                                    filesReader.ReadToFollowing("group_abbr");
                                    string group_abbr = filesReader.ReadElementContentAsString();
                                    // </group_abbr>

                                    file.Group = new GroupEntry
                                    {
                                        gid = gid,
                                        group_name = group_name,
                                        group_abbr = group_abbr
                                    };
                                }
                            }

                            episode.Files.Add(file);
                            importProgressBar.Dispatcher.BeginInvoke(new Action<double, double>((total, processed) =>
                            {
                                importProgressBar.Value = Math.Ceiling(processed / total * 100);
                            }), totalFiles, ++totalProcessedFiles);
                        // </file>
                        }
                        // </files>
                        filesReader.Close();
                        entry.Episodes.Add(episode);
                    // </episode>
                    }
                    // </episodes>
                    episodesReader.Close();

                Finish:
                    m_aList.Add(entry);

                // </anime>
                }
             // </mylist>
            }

            m_myList.OnEntryInserted += (aTitle) =>
            {
                importProgressBar.Dispatcher.BeginInvoke(new Action(delegate
                {
                    importFilePath.Text = String.Format("Writing: {0}", aTitle);
                    importProgressBar.Value = Math.Ceiling(++totalProcessedFiles / totalFiles * 100);
                }));
            };

            m_myList.InsertFromImport(m_aList);
        }