private void CreateItemList(string collectionName) { // preparation stopImageTask = false; string previewFolder = Path.Combine(CollectionStore.Settings.BaseDirectory, CollectionStore.DataDirectoryName, CollectionStore.PreviewDirectoryName); if (!Directory.Exists(previewFolder)) { Directory.CreateDirectory(previewFolder); } MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); // processing Collection collection = CollectionStore.Get(collectionName); foreach (KeyValuePair <string, CollectionItemMeta> collectionItem in collection.ActualItems) { if (stopImageTask) { break; } ListBoxImageItem listBoxImageItem = new ListBoxImageItem(collectionItem.Key, collectionItem.Value); GeneratePreviewAndDescription(previewFolder, collectionItem.Key, md5, listBoxImageItem); if (stopImageTask) { break; } //Dispatcher.Invoke(() => //{ // string previewFile = Path.Combine(previewFolder, $"{listBoxImageItem.Hash}.jpg"); // MemoryStream memoryStream = new MemoryStream(File.ReadAllBytes(previewFile)); // BitmapImage preview = new BitmapImage(); // preview.BeginInit(); // preview.StreamSource = memoryStream; // preview.EndInit(); // listBoxImageItem.Preview = preview; // collectionItems.Add(listBoxImageItem); //}); Dispatcher.Invoke(new Func <int>(() => { string previewFile = Path.Combine(previewFolder, $"{listBoxImageItem.Hash}.jpg"); MemoryStream memoryStream = new MemoryStream(File.ReadAllBytes(previewFile)); BitmapImage preview = new BitmapImage(); preview.BeginInit(); preview.StreamSource = memoryStream; preview.EndInit(); listBoxImageItem.Preview = preview; collectionItems.Add(listBoxImageItem); return(1); }), TimeSpan.FromMilliseconds(500)); } }
private void MenuItem_RenameFile_Click(object sender, RoutedEventArgs e) { if (comboBox_CollectionNames.SelectedItem != null && listBox_CollectionItems.SelectedItem != null) { string currentCollectionName = (string)comboBox_CollectionNames.SelectedItem; ListBoxImageItem listBoxImageItem = (ListBoxImageItem)listBox_CollectionItems.SelectedItem; RenameFileWindow renameFileWindow = new RenameFileWindow(currentCollectionName, listBoxImageItem.Path); renameFileWindow.ShowDialog(); if (renameFileWindow.IsApply) { listBoxImageItem.Path = renameFileWindow.NewFileName; } } }
private void hyperlinkDownload_Click(object sender, RoutedEventArgs e) { this.gridDownloadAcitivities.Visibility = System.Windows.Visibility.Visible; if (this._isLoadUserInfo) { this.listBoxRunnableActivities.Items.Clear(); var activities = PT_BS_Service.Client.Framework.BeOperationInvoker.Invoke <I_CO_IA.ActivityManage.I_CO_IA_ActivityManage, ActivityExt[]>(channel => { return(channel.GetActivityWithPlaces(CO_IA.Types.ActivityStage.Prepare)); }); foreach (var activity in activities) { ListBoxImageItem item = new ListBoxImageItem(); item.DataContext = activity; item.ToolTip = activity.Name; if (activity.Icon != null && activity.Icon.Length > 100) { MemoryStream ms = new MemoryStream(activity.Icon); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = ms; bitmapImage.EndInit(); item.ImageSource = bitmapImage; } else { item.ImageSource = new BitmapImage(new Uri(@"/CO_IA.MonitoringCollecting;component/Images/defaultActivity.png", UriKind.RelativeOrAbsolute)); } item.Header = activity.Name; if (!this.dicLocalActivity.Keys.Contains(activity.Guid)) { item.Opacity = 0.35; } this.listBoxRunnableActivities.Items.Add(item); } } }
private void Init() { if (_isLoadUserInfo) { AsyncBatchOperationInvoker invoker = new AsyncBatchOperationInvoker(result => { gridLogin.Visibility = System.Windows.Visibility.Collapsed; if (!result.IsValid) { StringBuilder builder = new StringBuilder(); builder.AppendLine("加载启动信息出错,程序将自动关闭"); builder.AppendLine("错误信息:"); builder.AppendLine(result.Exception.GetExceptionMessage()); MessageBox.Show(this, builder.ToString()); App.Current.Shutdown(); } }, hintInfo => { this.textBlockHint.Text = hintInfo; }, System.Threading.SynchronizationContext.Current); #region 读取用户权限 invoker.Add <ISubsystem, StringList>(channel => { return(channel.GetUsableAuthoritiesBySubsystemID(RiasPortal.Current.UserSetting.UserID, CO_IA.Public.SubSystemIDs.Rias)); }, result => { if (result.IsValid) { var activities = result.Result; RiasPortal.Current.UserSetting.UserRights = result.Result.ToArray(); } }, "正在加载用户权限"); #endregion #region 加载地图地址 invoker.Add <I_CO_IA.Setting.I_CO_IA_Setting, MapConfig>(channel => { return(channel.GetMapConig()); }, result => { if (result.IsValid) { RiasPortal.Current.MapConfig.ElectricUrl = result.Result.ElectricUrl; RiasPortal.Current.MapConfig.SatelliteUrl = result.Result.SatelliteUrl; RiasPortal.RegisterSessionParam(RiasPortal.MapDefaultArea, result.Result.DefaultGeoRange); } }, "读取地图配置信息"); #endregion invoker.Invoke(); } #region 加载活动列表 //List<Activity> activities2=null; //if (this._isLoadUserInfo) //{ // PT_BS_Service.Client.Framework.BeOperationInvoker.Invoke<I_CO_IA.ActivityManage.I_CO_IA_ActivityManage>(channel => // { // activities2 = channel.GetActivities().ToList(); // }); //} //else //{ List <Activity> activities2 = SQLiteDataService.QueryActivitiesFromLocal(); //} if (gridLogin.Visibility == System.Windows.Visibility.Visible) { gridLogin.Visibility = System.Windows.Visibility.Collapsed; } this.dicLocalActivity.Clear(); foreach (var activity in activities2) { this.dicLocalActivity[activity.Guid] = activity; ListBoxImageItem item = new ListBoxImageItem(); item.DataContext = activity; item.ToolTip = activity.Name; if (activity.Icon != null && activity.Icon.Length > 100) { MemoryStream ms = new MemoryStream(activity.Icon); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = ms; bitmapImage.EndInit(); item.ImageSource = bitmapImage; } else { item.ImageSource = new BitmapImage(new Uri(@"/CO_IA.MonitoringCollecting;component/Images/defaultActivity.png", UriKind.RelativeOrAbsolute)); } item.Header = activity.Name; //item.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left; this.listBoxActivities.Items.Add(item); } #endregion }
private void GeneratePreviewAndDescription(string previewFolder, string item, MD5CryptoServiceProvider md5, ListBoxImageItem imageItem) { if (string.IsNullOrEmpty(imageItem.Hash)) { // processing generate hash byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(item)); StringBuilder stringBuilder = new StringBuilder(hash.Length * 2); for (int i = 0; i < hash.Length; i++) { stringBuilder.Append(hash[i].ToString("X2")); } imageItem.Hash = stringBuilder.ToString(); } string previewImage = Path.Combine(previewFolder, $"{imageItem.Hash}.jpg"); if (string.IsNullOrEmpty(imageItem.Description) || !File.Exists(previewImage)) { // preparation string originalImage = Path.Combine(CollectionStore.Settings.BaseDirectory, item); BitmapImage bitmapImage = new BitmapImage(); byte[] originalImageBuffer = File.ReadAllBytes(originalImage); // processing description bitmapImage.BeginInit(); bitmapImage.StreamSource = new MemoryStream(originalImageBuffer); bitmapImage.EndInit(); imageItem.Description = $"{bitmapImage.PixelWidth}x{bitmapImage.PixelHeight}; {Math.Round(originalImageBuffer.Length / 1024.0 / 1024.0, 2)} Мб"; // processing generate preview if (!File.Exists(previewImage)) { int decodeWidth = (int)(1.0 * bitmapImage.PixelWidth / bitmapImage.PixelHeight * 94.0); bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = new MemoryStream(originalImageBuffer); bitmapImage.DecodePixelHeight = 94; bitmapImage.DecodePixelWidth = decodeWidth; bitmapImage.EndInit(); JpegBitmapEncoder jpegBitmapEncoder = new JpegBitmapEncoder(); jpegBitmapEncoder.Frames.Add(BitmapFrame.Create(bitmapImage)); using (FileStream fileStream = new FileStream(previewImage, FileMode.Create, FileAccess.Write)) { jpegBitmapEncoder.Save(fileStream); } } } }
private void MenuItem_RemoveSelectedFiles_Click(object sender, RoutedEventArgs e) { if (listBox_CollectionItems.SelectedItems.Count > 1) { if (Classes.UI.MessageBox.Show("Вы действительно хотите удалить выбранные файлы?", App.Name, MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { string currentCollectionName = (string)comboBox_CollectionNames.SelectedItem; Collection collection = CollectionStore.Get(currentCollectionName); IEnumerable <ListBoxImageItem> enSelectedItems = listBox_CollectionItems.SelectedItems.Cast <ListBoxImageItem>(); int firstCollectionItemSelectedIndex = enSelectedItems.Min(x => collectionItems.IndexOf(x)); List <ListBoxImageItem> selectedItems = new List <ListBoxImageItem>(enSelectedItems); foreach (ListBoxImageItem item in selectedItems) { File.Delete(Path.Combine(CollectionStore.Settings.BaseDirectory, item.Path)); collection.RemoveIgnorRules(item.Path); collection.IsChanged = true; collectionItems.Remove(item); } listBox_CollectionItems.SelectedIndex = Math.Min(firstCollectionItemSelectedIndex, collectionItems.Count - 1); Task.Run(() => { string previewFolder = Path.Combine(CollectionStore.Settings.BaseDirectory, CollectionStore.DataDirectoryName, CollectionStore.PreviewDirectoryName); foreach (ListBoxImageItem item in selectedItems) { if (!string.IsNullOrEmpty(item.Hash)) { string deletePreviewFile = Path.Combine(previewFolder, $"{item.Hash}.jpg"); if (File.Exists(deletePreviewFile)) { try { File.Delete(deletePreviewFile); } catch { } } } } }); } } else { string currentCollectionName = (string)comboBox_CollectionNames.SelectedItem; ListBoxImageItem currentCollectionItem = (ListBoxImageItem)listBox_CollectionItems.SelectedItem; int currentCollectionItemIndex = listBox_CollectionItems.SelectedIndex; string deleteFile = Path.Combine(CollectionStore.Settings.BaseDirectory, currentCollectionItem.Path); if (Classes.UI.MessageBox.Show($"Удалить \"{deleteFile}\"?", App.Name, MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { Collection collection = CollectionStore.Get(currentCollectionName); File.Delete(deleteFile); collection.RemoveIgnorRules(currentCollectionItem.Path); collection.IsChanged = true; collectionItems.RemoveAt(currentCollectionItemIndex); listBox_CollectionItems.SelectedIndex = Math.Min(currentCollectionItemIndex, collectionItems.Count - 1); try { if (!string.IsNullOrEmpty(currentCollectionItem.Hash)) { string deletePreviewFile = Path.Combine(CollectionStore.Settings.BaseDirectory, CollectionStore.DataDirectoryName, CollectionStore.PreviewDirectoryName, $"{currentCollectionItem.Hash}.jpg"); if (File.Exists(deletePreviewFile)) { File.Delete(deletePreviewFile); } } } catch { } } } }