C# winform 广告机 网络多媒体发布系统桌面版之二

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Dare.DN.Services.EntityServices;
using Dare.DN.Components.Entities.Media;
using Dare.Utilities.Model;
using Dare.Utilities.Microsoft;
using Microsoft.Win32;
using Dare.Utilities;

namespace DareMediaTray
{
    public partial class MediaUC : UserControl
    {
        MediaFolderInfoService folderService = Dare.DN.Services.Application.Instance.GetDbService<MediaFolderInfoService>();
        MediaInfoService mediaService = Dare.DN.Services.Application.Instance.GetDbService<MediaInfoService>();
        int folderId = 0;
        int  folderParentId = -1;
        TreeNode mcNode;
        public MediaUC()
        {
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            InitializeComponent();

            ToolTip toolTip = new ToolTip();
            toolTip.SetToolTip(this.btnAddFolder, "添加目录");
            toolTip.SetToolTip(this.btnEditFolder, "编辑目录");
            toolTip.SetToolTip(this.btnDelFolder, "删除目录");
            toolTip.SetToolTip(this.btnFreshFolder, "刷新目录");

            toolTip.SetToolTip(this.btnImport, "导入媒体");
            toolTip.SetToolTip(this.btnEdit, "编辑媒体");
            toolTip.SetToolTip(this.btnDelete, "删除媒体");
            toolTip.SetToolTip(this.btnRefresh, "刷新媒体");
            toolTip.SetToolTip(this.btnConvert, "转换文档");
            toolTip.SetToolTip(this.txtSearch, "输入媒体名称");

            mdLView.View = View.Details;
            mdLView.GridLines = true;
            mdLView.FullRowSelect = true;
            mdLView.ShowItemToolTips = true;
            mdLView.HideSelection = false;
            //mdLView.CheckBoxes = true;
            //mdLView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

            ImageList imgList = new ImageList();
            imgList.TransparentColor = System.Drawing.Color.Transparent;
            imgList.Images.Add("audio", (System.Drawing.Image)(Properties.Resources.audioico));
            imgList.Images.Add("video", (System.Drawing.Image)(Properties.Resources.videoico));
            imgList.Images.Add("image", (System.Drawing.Image)(Properties.Resources.imageico));
            imgList.Images.Add("text", (System.Drawing.Image)(Properties.Resources.textico));
            imgList.Images.Add("doc", (System.Drawing.Image)(Properties.Resources.pptico));
            mdLView.SmallImageList = imgList;

            FolderTrviewBind();
            LoadInt();

        }
        private void LoadInt()
        {
            this.pageControl1.PageIndex = 1;
            this.pageControl1.PageSize = 42;
            this.pageControl1.Refresh();

            MediaLViewBind(folderId);
        }

        /// <summary>
        /// 媒体目录树绑定
        /// </summary>
        public void FolderTrviewBind()
        {
            folderTrview.Nodes.Clear();
            folderTrview.ImageList = imageList1;
            folderTrview.ImageIndex = 0;
            folderTrview.SelectedImageIndex = 1;
            folderTrview.ShowLines = true;
            folderTrview.ShowNodeToolTips = true;
            folderTrview.ShowRootLines = true;
            folderTrview.Select();

            TreeNode rtNode = new TreeNode("素材目录");
            folderTrview.Nodes.Add(rtNode);

            List<MediaFolderInfo> folders;
            folders = folderService.GetMediaRootFolder(-1000);

            if (folders != null)
            {
               //FolderTrviewBind(folderTrview.Nodes, 0, folders);
               FolderTrviewBind(rtNode.Nodes, 0, folders);
            }

            //展开父节点
            this.folderTrview.Nodes[0].Expand();
            this.folderTrview.Nodes[0].BackColor = Color.SkyBlue;
            this.folderTrview.Select();
        }
        /// <summary>
        /// 目录树深度绑定
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="folders"></param>
        private void FolderTrviewBind(TreeNodeCollection nodes, int parentId, List<MediaFolderInfo> folders)
        {
            foreach (MediaFolderInfo folder in folders)
            {
                if (folder.ParentId == parentId)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = folder.Name;
                    tn.Tag = folder.Id;
                    switch (folder.Name)
                    {
                        case "video":
                            tn.ToolTipText = "视频目录";
                            break;
                        case "background":
                            tn.ToolTipText = "背景目录";
                            break;
                        case "image":
                            tn.ToolTipText = "图片目录";
                            break;
                        case "audio":
                            tn.ToolTipText = "音频目录";
                            break;
                        case "text":
                            tn.ToolTipText = "文本目录";
                            break;
                        case "document":
                            tn.ToolTipText = "文档目录";
                            break;
                        default:
                            break;
                    }
                    tn.ContextMenuStrip = contextMenuStrip2;
                    nodes.Add(tn);
                    if (folder.HasChildren != false)
                    {
                        FolderTrviewBind(tn.Nodes, folder.Id, folders);
                    }
                }
              
            }
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (this.mdLView.SelectedItems.Count == 0)
            {
                MessageBox.Show(this, "请选择要编辑的媒体文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else if (this.mdLView.SelectedItems.Count > 1)
            {
                MessageBox.Show(this, "请选择单个媒体编辑文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else
            {
                int mediaId=DataConvert.ToInt32(this.mdLView.SelectedItems[0].Tag);
                MediaInfo md=mediaService.GetByMediaId(mediaId);
                if (md.RefCount > 0)
                {
                    MessageBox.Show(this, "媒体已被使用,禁止修改属性!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                else
                {
                    MediaEditFrm frm = new MediaEditFrm(mediaId, folderId, this);
                    frm.ShowDialog();
                }
            }
        }

        /// <summary>
        /// 初始化树节点背景色
        /// </summary>
        private void ClearBackColor()
        {
            TreeNodeCollection nodes = folderTrview.Nodes;
            foreach (TreeNode n in nodes)
            {
                n.BackColor = Color.Transparent;
                ClearRecursive(n);
            }
        }

        private void ClearRecursive(TreeNode treeNode)
        {
            foreach (TreeNode tn in treeNode.Nodes)
            {
                tn.BackColor = Color.Transparent;
                ClearRecursive(tn);
            }
        }

        private void folderTrview_AfterSelect(object sender, TreeViewEventArgs e)
        {
            ClearBackColor();
            if (e.Node.Tag != null)
            {
                folderId = DataConvert.ToInt32(e.Node.Tag.ToString());
                MediaFolderInfo folder = folderService.Get(folderId);
                if (folder != null) folderParentId = folder.ParentId;
            }
            else
            {
                folderId = 0;
                folderParentId = -1;
            }

            mcNode = e.Node;
            e.Node.BackColor = Color.SkyBlue;

            this.pageControl1.PageIndex = 1;
            this.pageControl1.PageSize = 42;
            this.pageControl1.Refresh();

            this.txtSearch.Text = string.Empty;
            MediaLViewBind(folderId);
        }
        /// <summary>
        /// 媒体文件列表绑定
        /// </summary>
        /// <param name="folderId"></param>
        public void MediaLViewBind(int folderId)
        {
            try
            {
                mdLView.Items.Clear();
                List<MediaInfo> mediaList = null;
                int totalCount = 0;

                if (folderId != 0)
                {
                    mediaList = mediaService.SearchByType(folderId > 0 ? new int[] { folderId } : null, txtSearch.Text, "create_date desc", pageControl1.PageIndex, pageControl1.PageSize, out totalCount, new MediaType[] { MediaType.Audio, MediaType.Image, MediaType.Text, MediaType.Video });
                }
                else
                {
                    mediaList = mediaService.SearchByType(null, txtSearch.Text, "create_date desc", pageControl1.PageIndex, pageControl1.PageSize, out totalCount, new MediaType[] { MediaType.Audio, MediaType.Image, MediaType.Text, MediaType.Video });
                }
                mdLView.BeginUpdate();
                foreach (MediaInfo md in mediaList)
                {
                    ListViewItem li = new ListViewItem();
                    li.Tag = md.Id;
                    li.SubItems[0].Text = md.Name;
                   
                    switch ((int)md.Type)
                    {
                        case 1:
                            li.ImageKey = "video";
                            li.SubItems.Add("视频");
                            break;
                        case 2:
                            string extName = Path.GetExtension(md.Name).ToLower();
                            if (extName == ".ppt" || extName == ".pptx")
                            {
                                li.ImageKey = "doc";
                                li.SubItems.Add("文档");
                            }
                            else
                            {
                                li.ImageKey = "image";
                                li.SubItems.Add("图片");
                            }
                            break;
                        case 3:
                            li.ImageKey = "audio";
                            li.SubItems.Add("音频");
                            break;
                        case 4:
                            li.ImageKey = "text";
                            li.SubItems.Add("文本");
                            break;
                        default:
                            break;
                    }
                    li.SubItems.Add(Dare.Utilities.EnumDisplayNameAttribute.GetDisplayName(md.State));
                    li.SubItems.Add(md.RefCount.ToString());
                    li.SubItems.Add(new FileSizeData(md.FileLength).ToString());
                    li.SubItems.Add(md.Width == null ? "0" : md.Width.Value.ToString());
                    li.SubItems.Add(md.Height == null ? "0" : md.Height.Value.ToString());
                    li.SubItems.Add(md.CreateDate.Value == null ? "0" : md.CreateDate.Value.ToString("yyyy-MM-dd HH:mm"));
                    mdLView.Items.Add(li);
                }
                mdLView.EndUpdate();
                //初始化列表排序
                this.mdLView.ListViewItemSorter = new ListViewSort();
                //初始化分页
                this.pageControl1.RecordCount = totalCount;
                this.pageControl1.Refresh();
            }
            catch(Exception ex)
            {
                Dare.DN.Services.Application.Instance.Logger.ErrorFormat("MediaUC-MediaLViewBind-错误原因:{0}", ex.Message);
            }
        }
     
        private void btnImport_Click(object sender, EventArgs e)
        {
            if (folderId == 0)
            {
                MessageBox.Show(this, "请选择要导入的媒体目录!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            MediaImportCheck(folderId);
        }
        private void MediaImportCheck(int folderId)
        {
            string rootPath = Path.GetPathRoot(Application.StartupPath);
            DriveInfo drive = new DriveInfo(rootPath);
            if (drive.AvailableFreeSpace < 1024 * 1024)
            {
                MessageBox.Show(this, "对不起,当前磁盘[" + rootPath + "]剩余空间[" + new FileSizeData(drive.AvailableFreeSpace).ToString() + "],请清理磁盘空间!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            using (OpenFileDialog ofd = new OpenFileDialog())
            {
                string[] files = null;
                int rootFolderId=0;

                rootFolderId = folderService.GetMediaFolderRootParentId(folderId);
                switch (rootFolderId)
                {
                    case 1:
                        ofd.Title = "导入audio文件";//resource\audio
                        ofd.Filter = "音频文件(*.wav,*.mp3,*.aac,*.wma)|*.wav;*.mp3;*.aac;*.wma";
                        break;
                    case 2:
                        ofd.Title = "导入background文件";//resource\background
                        ofd.Filter = "背景文件(*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.tif,*.tiff)|*.bmp;*.jpg;*.jpeg;*.png;*.gif;*.tif;*.tiff";
                        break;
                    case 3:
                        ofd.Title = "导入image文件";//resource\image
                        ofd.Filter = "图片文件(*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.tif,*.tiff)|*.bmp;*.jpg;*.jpeg;*.png;*.gif;*.tif;*.tiff";
                        break;
                    case 7:
                        ofd.Title = "导入text文件";//resource\text
                        ofd.Filter = "文本文件(*.txt)|*.txt";
                        break;
                    case 8:
                        ofd.Title = "导入video文件";//resource\video
                        ofd.Filter = "视频文件(*.mpg,*.mpeg,*.vob,*.avi,*.mkv,*.mov,*.mp4,*.flv,*.wmv,*.ts,*.trp)|*.mpg;*.mpeg;*.vob;*.avi;*.mkv;*.mov;*.mp4;*.flv;*.wmv;*.ts;*.trp";
                        break;
                    case 9:
                        ofd.Title = "导入document文件";//resource\text
                        ofd.Filter = "文档文件(*.ppt,*.pptx)|*.ppt;*.pptx";
                        break;
                    default://resource\unknow
                        break;
                }
                ofd.Multiselect = true;
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    int maxCount = Dare.DN.Services.Application.Instance.AppSettings.MediaMaxCount;
                    files = ofd.FileNames;
                    if (files.Length > maxCount)
                    {
                        MessageBox.Show(this, string.Format("对不起,一次最多只能导入{0}个媒体文件!", maxCount.ToString()), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }

                    bool isResult = false;
                    foreach (string file in files)
                    {
                        string extName = Path.GetExtension(file).ToLower();
                        if (extName == ".ppt" || extName == ".pptx")
                        {
                            if (!PowerPointHelper.IsPowerPointInstalled())
                            {
                                isResult = true;
                                break;
                            }
                        }
                    }

                    if (isResult)
                    {
                        MessageBox.Show(this, "未发现Microsoft PowerPoint 2000及以上版本安装于本机!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }

                    //同名文件集合
                    List<string> listFiles = new List<string>();
                    //无同名文件集合
                    List<string> listNoFiles = new List<string>();
                    foreach (string file in files)
                    {
                        string name = Path.GetFileName(file);
                        //if (mediaService.IsMediaExsit(folderId, RemoveSpecialChar(name)))
                        if (mediaService.IsMediaExsit(folderId, name))
                        {
                            listFiles.Add(name);
                        }
                        else
                        {
                            listNoFiles.Add(file);
                        }
                    }

                    if (listFiles.Count > 0)
                    {
                        string filesShow = string.Empty;
                        filesShow = String.Join("\r\n", listFiles.ToArray());
                        #region
                        //if (MessageBox.Show(this, string.Format("系统已存在下列同名文件:\r\n\r\n{0}\r\n\r\n按【是】全部覆盖,按【否】跳过重复.", filesShow.Length > 200 ? filesShow.Substring(0, 200) + "\r\n............................." : filesShow), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        //{
                        //    MediaImportFrm frm = new MediaImportFrm(folderId, files, this);
                        //    frm.ShowDialog();
                        //}
                        //else
                        //{
                        //    if (listNoFiles.Count > 0)
                        //    {
                        //        MediaImportFrm frm = new MediaImportFrm(folderId, listNoFiles.ToArray(), this);
                        //        frm.ShowDialog();
                        //    }
                        //    else
                        //    {
                        //        //MessageBox.Show(this, "文件全部重复,没有可跳过项!", "提示", MessageBoxButtons.OK,MessageBoxIcon.Information);
                        //        return;
                        //    }
                        //}
                        #endregion
                        MessageBox.Show(this, string.Format("系统已存在下列同名文件:\r\n\r\n{0}\r\n\r\n请更换名称后,再导入.", filesShow.Length > 200 ? filesShow.Substring(0, 200) + "\r\n............................." : filesShow), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        MediaImportFrm frm = new MediaImportFrm(folderId, files, this);
                        frm.ShowDialog();
                    }
                }
            }
        }
        /// <summary>
        /// 媒体文件名非法字符过滤
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        private string RemoveSpecialChar(string input)
        {
            string[] aryChar = { "\"\"", "/", ":", "*", "?", "|", "&lt;", "&gt;", "&quot;", "&amp;", " ", "+", "=", ",", "'", "%", "#", };
            for (int i = 0; i < aryChar.Length; i++)
            {
                input = input.Replace(aryChar[i], string.Empty);
            }
            return input;
        }

        private void MediaLView_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            ListView lv = sender as ListView;
            ListViewSort ls = lv.ListViewItemSorter as ListViewSort;
            // 检查点击的列是不是现在的排序列.
            if (e.Column == ls.SortColumn)
            {
                // 重新设置此列的排序方法.
                if (ls.Order == SortOrder.Ascending)
                {
                    ls.Order = SortOrder.Descending;
                }
                else
                {
                    ls.Order = SortOrder.Ascending;
                }
            }
            else
            {
                // 设置排序列,默认为正向排序
                ls.SortColumn = e.Column;
                ls.Order = SortOrder.Ascending;
            }
            // 用新的排序方法对ListView排序
            lv.Sort();


        }

        private void pageControl1_PageIndexChanged(object sender, EventArgs e)
        {
            if (folderId != 0)
            {
                MediaLViewBind(folderId);
            }
            else
            {
                MediaLViewBind(0);
            }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (this.mdLView.SelectedItems.Count == 0)
            {
                MessageBox.Show(this, "请选择要删除的媒体文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else
            {
                if (MessageBox.Show("确定要删除选择的媒体文件吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (ListViewItem lv in this.mdLView.SelectedItems)
                    {
                        if (!mediaService.Delete(DataConvert.ToInt32(lv.Tag))) sb.AppendFormat("删除资源文件失败!原因:{0}\r\n", mediaService.LastException.Message);
                    }
                    if (sb.ToString().Length != 0) MessageBox.Show(this, sb.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    btnRefresh_Click(sender, e);
                }
            }
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            if (folderId != 0)
            {
                MediaLViewBind(folderId);
            }
            else
            {
                MediaLViewBind(0);
            }
        }

        private void importMenuItem_Click(object sender, EventArgs e)
        {
            btnImport_Click(sender, e);
        }

        private void deleteMenuItem_Click(object sender, EventArgs e)
        {
            btnDelete_Click(sender, e);
        }

        private void refreshMenuItem_Click(object sender, EventArgs e)
        {
            btnRefresh_Click(sender, e);
        }

        private void importFdMenuItem_Click(object sender, EventArgs e)
        {
            MediaImportCheck(folderId);
        }

        private void editerMenuItem_Click(object sender, EventArgs e)
        {
            btnEdit_Click(sender, e);
        }

        private void folderTrview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                TreeNode tn = folderTrview.GetNodeAt(e.X, e.Y);
                if (tn.Tag != null)
                {
                    folderId = DataConvert.ToInt32(tn.Tag.ToString());
                    MediaFolderInfo folder = folderService.Get(folderId);
                    if (folder != null) folderParentId = folder.ParentId;
                }
                else
                {
                    folderId = 0;
                    folderParentId = -1;
                }

                this.folderTrview.SelectedNode = tn;
            }
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            LoadInt();
        }

        private void btnConvert_Click(object sender, EventArgs e)
        {
            if (this.mdLView.SelectedItems.Count == 0)
            {
                MessageBox.Show(this, "请选择要转换的文档文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else
            {
                bool isConvert = false;
                List<MediaInfo> mdList = new List<MediaInfo>();
                foreach (ListViewItem lv in this.mdLView.SelectedItems)
                {
                    if (lv.SubItems[2].Text == "等待转换")
                    {
                        ImageMediaInfo md = new ImageMediaInfo();
                        md.Id = (int)lv.Tag;
                        md.Name = lv.Text;
                        //md.FolderId = 9;
                        md.Comment = lv.SubItems[4].Text;
                        mdList.Add(md);
     &nb%2

posted @ 2011-08-20 16:48  火腿骑士  阅读(736)  评论(0)    收藏  举报