コード例 #1
0
ファイル: ItemManager.cs プロジェクト: tomaspsenak/hmc
        public List <StreamSourcesItem> GetStreamSources()
        {
            try
            {
                using (SqlCeConnection conn = new SqlCeConnection(this.dbConnectionString))
                    using (DataContext context = new DataContext(conn))
                    {
                        ItemContainerStreamRoot root = context.GetTable <Item>().OfType <ItemContainerStreamRoot>().Single();

                        return(root.Children.Where(
                                   a => a.GetType() == typeof(ItemContainerStreamCustom) || a.GetType() == typeof(ItemContainerDreamboxRoot)).Select(
                                   delegate(Item a) {
                            return new StreamSourcesItem(a.Id, a.Title, a.Path,
                                                         (a.GetType() == typeof(ItemContainerStreamCustom)) ? StreamSourcesItemType.Stream : StreamSourcesItemType.Dreambox);
                        }).ToList());
                    }
            }
            catch
            {
                return(new List <StreamSourcesItem>());
            }
        }
コード例 #2
0
ファイル: ItemManager.cs プロジェクト: tomaspsenak/hmc
        public void SetStreamSources(StreamSourcesItem[] toAdd, StreamSourcesItem[] toUpdate, StreamSourcesItem[] toDelete)
        {
            if (toAdd == null)
            {
                toAdd = new StreamSourcesItem[0];
            }
            if (toUpdate == null)
            {
                toUpdate = new StreamSourcesItem[0];
            }
            if (toDelete == null)
            {
                toDelete = new StreamSourcesItem[0];
            }

            using (SqlCeConnection conn = new SqlCeConnection(this.dbConnectionString))
                using (DataContext context = new DataContext(conn))
                {
                    lock (this.dbWriteLock)
                    {
                        ItemContainerStreamRoot root = context.GetTable <Item>().OfType <ItemContainerStreamRoot>().Single();

                        //Pridavanie zaznamov a odstranit nevyplnene polozky
                        context.GetTable <Item>().InsertAllOnSubmit(
                            toAdd.Where(a => !string.IsNullOrWhiteSpace(a.Title) && !string.IsNullOrWhiteSpace(a.Path)).Select(delegate(StreamSourcesItem a) {
                            if (a.Type == StreamSourcesItemType.Stream)
                            {
                                return((Item)(new ItemContainerStreamCustom(a.Title, a.Path, root)));
                            }
                            else
                            {
                                return((Item)(new ItemContainerDreamboxRoot(a.Title, a.Path, root)));
                            }
                        }));

                        //Uprava existujucich zaznamov
                        foreach (StreamSourcesItem item in toUpdate.Where(a => a.Id.HasValue))
                        {
                            Item updItem = root.Children.FirstOrDefault(a => a.Id == item.Id.Value);
                            if (updItem == null)
                            {
                                continue;
                            }

                            if (item.Path != updItem.Path)
                            {
                                updItem.Path = item.Path;
                            }

                            if (updItem.GetType() == typeof(ItemContainerStreamCustom) && item.Title != updItem.Title)
                            {
                                //Pre aktualizaciu nazvu je potrebne potomkov odstranit - pri refresh sa pridaju so spravnym nazvom
                                //Plati iba pre ItemContainerStreamCustom
                                updItem.RemoveMe(context, this);
                            }

                            updItem.Title = item.Title;
                        }

                        //Mazanie zaznamov
                        foreach (StreamSourcesItem item in toDelete.Where(a => a.Id.HasValue))
                        {
                            Item delItem = root.Children.FirstOrDefault(a => a.Id == item.Id.Value);
                            if (delItem == null)
                            {
                                continue;
                            }

                            context.GetTable <Item>().DeleteOnSubmit(delItem);
                            delItem.RemoveMe(context, this);
                        }

                        context.SubmitChanges();
                    }
                }

            BuildDatabaseAsync("Stream", true);
        }