public LäggTillKategori(SamlingsBibliotek inSamlingsBibliotek, Main inForm)
        {
            InitializeComponent();

            samlingsBibliotek = inSamlingsBibliotek;
            bibliotekHanterare = new BibliotekHanterare();
            validering = new ValideringInData();

            form = inForm;
        }
        public TaBortKategori(SamlingsBibliotek insSamlingsBibliotek, Main inForm)
        {
            InitializeComponent();
            samlingsBibliotek = insSamlingsBibliotek;
            bibliotekHanterare = new BibliotekHanterare();
            guiHanterare = new GUIHanterare();
            validering = new ValideringInData();
            form = inForm;

            guiHanterare.UppdateraKategoriComboBox(cbKategorier, samlingsBibliotek);
        }
        public ÄndraTillhörandeKategori(SamlingsBibliotek inSamlingsBibliotek, Main inForm)
        {
            InitializeComponent();
            samlingsBibliotek = inSamlingsBibliotek;
            bibliotekHanterare = new BibliotekHanterare();
            guiHanterare = new GUIHanterare();
            validering = new ValideringInData();
            form = inForm;

            guiHanterare.UppdateraKategoriComboBox(cbKategori, cbNyKategori, samlingsBibliotek);
        }
        public ÄndraUppdateringsintevall(SamlingsBibliotek insSamlingsBibliotek, Main inForm)
        {
            InitializeComponent();
            samlingsBibliotek = insSamlingsBibliotek;
            bibliotekHanterare = new BibliotekHanterare();
            guiHanterare = new GUIHanterare();
            intervallBibliotek = new IntervallBibliotek();
            valideringInData = new ValideringInData();
            form = inForm;

            guiHanterare.PrintaIntervaller(cbNyIntervall, intervallBibliotek);
            guiHanterare.UppdateraKategoriComboBox(cbKategori, samlingsBibliotek);
        }
        public Main()
        {
            InitializeComponent();
            repository = new Repository();
            reader = new FeedReader();

            samlingsBibliotek = repository.Load();
            guiHanterare = new GUIHanterare();
            validering = new ValideringInData();

            uppdateraKategorier();
            reader.InstansieraTimers(samlingsBibliotek);
        }
        /// <summary>
        /// Lägger till ett feedbibliotek i en kategorilista
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="bibliotek"></param>
        /// <param name="samlingsBibliotek"></param>
        public void LäggTillFeedBibliotekTillKategoriLista(ComboBox kategori, FeedBibliotek bibliotek, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                int index = kategori.SelectedIndex;

                KategoriBibliotek bibliotekAvFeeds = samlingsBibliotek.SamlingsLista[index];

                bibliotekAvFeeds.LäggTillFeed(bibliotek);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        public LäggTillPodcast(SamlingsBibliotek inSamlingsBibliotek, Main inForm)
        {
            InitializeComponent();
            reader = new FeedReader();
            bibliotekHanterare = new BibliotekHanterare();
            guiHanterare = new GUIHanterare();
            intervallBibliotek = new IntervallBibliotek();
            validering = new ValideringInData();
            valideringUrl = new ValideringUrlLäggTillPodcast();
            form = inForm;

            samlingsBibliotek = inSamlingsBibliotek;

            guiHanterare.PrintaIntervaller(cbIntervall, intervallBibliotek);
            guiHanterare.UppdateraKategoriComboBox(cbKategorier, samlingsBibliotek);
        }
        /// <summary>
        /// Loopar igenom RSS-feeden och hämtar titeln på podcastprogrammet.
        /// Sätter angivet feedbiblioteks titel med den hämtade titeln.
        /// </summary>
        /// <param name="inUrl"></param>
        /// <param name="bibliotek"></param>
        /// <param name="samlingsBibliotek"></param>
        public void InstansieraPodcastTitel(string inUrl, FeedBibliotek bibliotek, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                XmlNodeList feedTitle = hämtning.LaddaPodcasts(inUrl, "//channel");

                for (int j = 0; j < feedTitle.Count; j++)
                {
                    listaTitel = Convert.ToString(feedTitle[j].SelectSingleNode("title").InnerText);
                    bibliotek.FeedBibliotekTitel = listaTitel;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Loopar igenom angivet samlingsbibliotek, kategoribibliotek och feedbibliotek för att jämföra den URL
        /// som användaren angett som adress till podcastens RSS-feed. Om URLen redan finns så visas en messagebox
        /// som berättar för användaren att denne inte kan lägga till denna podcast.
        /// </summary>
        /// <param name="txtUrl"></param>
        /// <param name="inSamlingsBibliotek"></param>
        /// <returns></returns>
        public bool UrlAlreadyExist(TextBox  txtUrl, SamlingsBibliotek inSamlingsBibliotek)
        {
            string url = txtUrl.Text;

            samlingsBibliotek = inSamlingsBibliotek;

            for (int i = 0; i < samlingsBibliotek.Antal; i++)
            {
                for (int j = 0; j < samlingsBibliotek.SamlingsLista[i].Antal; j++)
                {
                    for (int h = 0; h < samlingsBibliotek.SamlingsLista[i].KategoriLista[j].Antal; h++)
                    {
                        if (samlingsBibliotek.SamlingsLista[i].KategoriLista[j].RSSUrl == url)
                        {
                            MessageBox.Show("Denna podcast har redan lagts till!", "Error");
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        /// <summary>
        /// Loopar igenom angett samlingsbibliotek och kategoribibliotek och
        /// kollar om det finns några feedbibliotek i eventuella kategoribibliotek. Om det finns några feedbibliotek
        /// så instansieras nya timer-objekt baserat på dessa feedbiblioteks angivna uppdateringsintervall.
        /// </summary>
        /// <param name="inSamlingsBibliotek"></param>
        public void InstansieraTimers(SamlingsBibliotek inSamlingsBibliotek)
        {
            SamlingsBibliotek samlingsBibliotek = inSamlingsBibliotek;

            for (int i = 0; i < samlingsBibliotek.Antal; i++)
            {
                for (int j = 0; j < samlingsBibliotek.SamlingsLista.Count; j++)
                {
                    if (samlingsBibliotek.SamlingsLista[i].Antal != 0 && j < samlingsBibliotek.SamlingsLista[i].Antal)
                    {
                        TimerInitializer nyTimer = new TimerInitializer(this, samlingsBibliotek.SamlingsLista[i].KategoriLista[j].RSSUrl, samlingsBibliotek);

                        int tid;

                        tid = samlingsBibliotek.SamlingsLista[i].KategoriLista[j].UppdateringsIntervall;

                        nyTimer.Start(tid);
                        TimerBibliotek.LäggTillTimer(nyTimer);
                    }
                }
            }
        }
        /// <summary>
        /// Fyller på angiven listbox med avsnitt, baserat på vald kategori och podcast.
        /// </summary>
        /// <param name="titel"></param>
        /// <param name="kategori"></param>
        /// <param name="lb"></param>
        /// <param name="samlingsBibliotek"></param>
        public void PrintaPods(ComboBox titel, ComboBox kategori, ListBox lb, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                lb.Items.Clear();

                int index = titel.SelectedIndex;

                int j = kategori.SelectedIndex;

                KategoriBibliotek Kbibliotek = samlingsBibliotek.SamlingsLista[j];

                FeedBibliotek Fbibliotek = Kbibliotek.KategoriLista[index];

                for (int i = 0; i < Fbibliotek.Antal; i++)
                {
                    lb.Items.Add(Fbibliotek.Feed[i].Title);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Tar bort ett feedbibliotek, stänger ner det tillhörande timer-objektet.
        /// Lägger till ett exakt likadant feedbibliotek i en kategorilista och startar ett nytt timer-objekt.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="podcast"></param>
        /// <param name="nyKategori"></param>
        /// <param name="samlingsBibliotek"></param>
        public void BytKategori(ComboBox kategori, ComboBox podcast, ComboBox nyKategori,  SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                int index = kategori.SelectedIndex;

                int podcastIndex = podcast.SelectedIndex;

                KategoriBibliotek bibliotekAvFeeds = samlingsBibliotek.SamlingsLista[index];

                FeedBibliotek feedBibliotek = bibliotekAvFeeds.KategoriLista[podcastIndex];

                for (int i = 0; i < TimerBibliotek.Antal; i++)
                {
                    if (TimerBibliotek.Timer[i].TimerID == feedBibliotek.FeedBibliotekTitel)
                    {
                        TimerBibliotek.Timer[i].timer.Close();
                    }
                }

                string url = feedBibliotek.RSSUrl;

                TimerInitializer timer = new TimerInitializer(reader, url, samlingsBibliotek);

                timer.TimerID = feedBibliotek.FeedBibliotekTitel;
                timer.Start(feedBibliotek.UppdateringsIntervall);
                TimerBibliotek.LäggTillTimer(timer);

                LäggTillFeedBibliotekTillKategoriLista(nyKategori, feedBibliotek, samlingsBibliotek);
                TaBortPodcast(kategori, podcast, samlingsBibliotek);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Fyller på angivna comboxar med kategorititlar.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="nyKategori"></param>
        /// <param name="samlingsBibliotek"></param>
        public void UppdateraKategoriComboBox(ComboBox kategori, ComboBox nyKategori, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                kategori.Items.Clear();

                for (int i = 0; i < samlingsBibliotek.Antal; i++)
                {
                    kategori.Items.Add(samlingsBibliotek.SamlingsLista[i].KategoriTitel);
                    nyKategori.Items.Add(samlingsBibliotek.SamlingsLista[i].KategoriTitel);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Lägger till ett nytt kategoribibliotek i samlingsbiblioteket.
        /// </summary>
        /// <param name="nyKategori"></param>
        /// <param name="samlingsBibliotek"></param>
        public void LäggTillKategoriBibliotekTillSamlingsLista(TextBox nyKategori, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                string kategoriNamn = nyKategori.Text;

                KategoriBibliotek bibliotek = new KategoriBibliotek();

                bibliotek.KategoriTitel = kategoriNamn;

                samlingsBibliotek.LäggTillKategori(bibliotek);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Tar bort vald kateogri ur samlingsbiblioteket och stänger ner tillhörande timer-objekt.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="samlingsBibliotek"></param>
        public void TaBortKategori(ComboBox kategori, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                int index = kategori.SelectedIndex;

                KategoriBibliotek bibliotek = samlingsBibliotek.SamlingsLista[index];

                for (int i = 0; i < TimerBibliotek.Antal; i++)
                {
                    TimerBibliotek.Timer[i].timer.Close();
                }

                samlingsBibliotek.SamlingsLista.Remove(bibliotek);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Kollar vilken kategori och podcast man valt och stänger tillhörande timer-objekt och tar bort vald podcast från kategorilistan.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="podcast"></param>
        /// <param name="samlingsBibliotek"></param>
        public void TaBortPodcast(ComboBox kategori, ComboBox podcast, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                int index = podcast.SelectedIndex;

                int j = kategori.SelectedIndex;

                KategoriBibliotek Kbibliotek = samlingsBibliotek.SamlingsLista[j];

                FeedBibliotek Fbibliotek = Kbibliotek.KategoriLista[index];

                for (int i = 0; i < TimerBibliotek.Antal; i++)
                {
                    if (TimerBibliotek.Timer[i].TimerID == Fbibliotek.FeedBibliotekTitel)
                    {
                        TimerBibliotek.Timer[i].timer.Close();
                    }
                }

                Kbibliotek.KategoriLista.Remove(Fbibliotek);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Skapar ett feedbibliotek, laddar ner tillhörande mp3-filer, sätter titeln på feedbiblioteket,
        /// lägger till feedbiblioteket i vald kategorilista, initialiserar ett nytt timer-objekt
        /// och lägger till det i timerbiblioteket.
        /// </summary>
        /// <param name="inUrl"></param>
        /// <param name="kategori"></param>
        /// <param name="intervall"></param>
        /// <param name="samlingsBibliotek"></param>
        public void SkapaPrenumeration(TextBox inUrl, ComboBox kategori, ComboBox intervall, SamlingsBibliotek samlingsBibliotek)
        {
            string nyUrl = inUrl.Text;
            FeedBibliotek bibliotek = SkapaFeed(intervall, nyUrl);
            PodcastNerladdning(nyUrl);

            InstansieraPodcastTitel(nyUrl, bibliotek, samlingsBibliotek);
            bibliotekHanterare.LäggTillFeedBibliotekTillKategoriLista(kategori, bibliotek, samlingsBibliotek);

            TimerInitializer timer = new TimerInitializer(this, nyUrl, samlingsBibliotek);

            timer.TimerID = bibliotek.FeedBibliotekTitel;
            timer.Start(bibliotek.UppdateringsIntervall);
            TimerBibliotek.LäggTillTimer(timer);

            senasteTillagdaTimer = timer;
            url = nyUrl;
        }
        /// <summary>
        /// Tömmer angivet feedbibliotek på feed-objekt och lägger in nya feed-objekt.
        /// </summary>
        /// <param name="inUrl"></param>
        /// <param name="samlingsBibliotek"></param>
        public void LaddaOmPrenumeration(string inUrl, SamlingsBibliotek samlingsBibliotek)
        {
            url = inUrl;

            for (int i = 0; i < samlingsBibliotek.Antal; i++)
            {
                for (int j = 0; j < samlingsBibliotek.SamlingsLista[i].Antal; j++)
                {
                    if (samlingsBibliotek.SamlingsLista[i].KategoriLista[j].RSSUrl == url)
                    {
                        feedBibliotekFörAttLaddaOm = samlingsBibliotek.SamlingsLista[i].KategoriLista[j];
                    }
                }
            }

            feedBibliotekFörAttLaddaOm.Feed.Clear();
            feedBibliotekFörAttLaddaOm = LaddaOmBibliotek(feedBibliotekFörAttLaddaOm, url);
        }
        /// <summary>
        /// Fyller på angiven combobox med podcasttitlar.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="titlar"></param>
        /// <param name="samlingsBibliotek"></param>
        public void PrintaTitlar(ComboBox kategori, ComboBox titlar, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                titlar.Items.Clear();

                int index = kategori.SelectedIndex;

                KategoriBibliotek bibliotek = samlingsBibliotek.SamlingsLista[index];

                for (int i = 0; i < bibliotek.Antal; i++)
                {
                    titlar.Items.Add(bibliotek.KategoriLista[i].FeedBibliotekTitel);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Kollar vilken kategori, podcast och avsnitt som är valt. Validerar om man redan har markerat låten i listan som lyssnad.
        /// Om den inte är lyssnad så blir den markerad, annars så låter den varas.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="podcast"></param>
        /// <param name="avsnitt"></param>
        /// <param name="samlingsBibliotek"></param>
        public void VisaSomLyssnad(ComboBox kategori, ComboBox podcast, ListBox avsnitt,
            SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                int kategoriIndex = kategori.SelectedIndex;
                int podcastIndex = podcast.SelectedIndex;
                int avsnittsIndex = avsnitt.SelectedIndex;

                KategoriBibliotek kBibliotek = samlingsBibliotek.SamlingsLista[kategoriIndex];
                FeedBibliotek fBibliotek = kBibliotek.KategoriLista[podcastIndex];

                validering.isListened(fBibliotek, avsnittsIndex);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Kollar vilken kategori som är vald i comboboxen och ändrar det kategoribibliotekets titel.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="nyttKategoriNamn"></param>
        /// <param name="samlingsBibliotek"></param>
        public void ÄndraKategoriNamn(ComboBox kategori, TextBox nyttKategoriNamn, SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                string kategoriNamn = nyttKategoriNamn.Text;

                int index = kategori.SelectedIndex;

                KategoriBibliotek bibliotek = samlingsBibliotek.SamlingsLista[index];

                bibliotek.KategoriTitel = kategoriNamn;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 public ÄndraPodcast(SamlingsBibliotek inSamlingsBibliotek, Main inForm)
 {
     InitializeComponent();
     samlingsBibliotek = inSamlingsBibliotek;
     form = inForm;
 }
        /// <summary>
        /// Ändrar uppdateringsintervallet på feedblioteket och på tillhörande timerobjekt.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="podcast"></param>
        /// <param name="intervall"></param>
        /// <param name="samlingsBibliotek"></param>
        public void ÄndraUppdateringsIntervall(ComboBox kategori, ComboBox podcast, ComboBox intervall,
            SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                int index = kategori.SelectedIndex;

                int podcastIndex = podcast.SelectedIndex;

                KategoriBibliotek bibliotekAvFeeds = samlingsBibliotek.SamlingsLista[index];

                FeedBibliotek feedBibliotek = bibliotekAvFeeds.KategoriLista[podcastIndex];

                if (intervall.SelectedIndex == 0)
                {
                    intervalTime = 5400000;
                }
                if (intervall.SelectedIndex == 1)
                {
                    intervalTime = 10800000;
                }
                if (intervall.SelectedIndex == 2)
                {
                    intervalTime = 21600000;
                }

                feedBibliotek.UppdateringsIntervall = intervalTime;

                for (int i = 0; i < TimerBibliotek.Antal; i++)
                {
                    if (TimerBibliotek.Timer[i].TimerID == feedBibliotek.FeedBibliotekTitel)
                    {
                        TimerBibliotek.Timer[i].ChangeIntervalTime(intervalTime);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 public TimerInitializer(FeedReader inReader, string inUrl, SamlingsBibliotek inSamlingsBibliotek)
 {
     reader = inReader;
     samlingsBibliotek = inSamlingsBibliotek;
     url = inUrl;
 }
        /// <summary>
        /// Kollar vilken kategori, podcast och avsnitt man valt och startar en MessageBox med innehållet från egenskapen "Description" i feedbiblioteket.
        /// </summary>
        /// <param name="kategori"></param>
        /// <param name="podcast"></param>
        /// <param name="avsnitt"></param>
        /// <param name="samlingsBibliotek"></param>
        public void VisaBeskrivning(ComboBox kategori, ComboBox podcast, ListBox avsnitt,
            SamlingsBibliotek samlingsBibliotek)
        {
            try
            {
                int kategoriIndex = kategori.SelectedIndex;
                int podcastIndex = podcast.SelectedIndex;
                int avsnittsIndex = avsnitt.SelectedIndex;

                KategoriBibliotek kBibliotek = samlingsBibliotek.SamlingsLista[kategoriIndex];
                FeedBibliotek fBibliotek = kBibliotek.KategoriLista[podcastIndex];

                MessageBox.Show(fBibliotek.Feed[avsnittsIndex].Description, "Beskrivning");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }