102 lines
3.4 KiB
C#
102 lines
3.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Disco.Models.Repository;
|
|
using System.IO;
|
|
using System.Drawing;
|
|
using Disco.Data.Repository;
|
|
|
|
namespace Disco.BI.Extensions
|
|
{
|
|
public static class DeviceModelExtensions
|
|
{
|
|
public static bool ImageImport(this DeviceModel deviceModel, Stream ImageStream)
|
|
{
|
|
try
|
|
{
|
|
using (Bitmap inputBitmap = new Bitmap(ImageStream))
|
|
{
|
|
using (Image outputBitmap = inputBitmap.ResizeImage(255, 255))
|
|
{
|
|
using (MemoryStream ms = new MemoryStream())
|
|
{
|
|
outputBitmap.SavePng(ms);
|
|
ms.Position = 0;
|
|
|
|
var deviceModelImagePath = deviceModel.ImageFilePath();
|
|
|
|
|
|
using (var storeStream = new FileStream(deviceModelImagePath, FileMode.Create, FileAccess.Write, FileShare.None))
|
|
{
|
|
ms.CopyTo(storeStream);
|
|
}
|
|
//deviceModel.Image = ms.ToArray();
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static FileStream Image(this DeviceModel deviceModel)
|
|
{
|
|
var deviceModelImagePath = deviceModel.ImageFilePath();
|
|
|
|
if (File.Exists(deviceModelImagePath))
|
|
return new FileStream(deviceModelImagePath, FileMode.Open, FileAccess.Read, FileShare.Read);
|
|
else
|
|
return null;
|
|
}
|
|
|
|
public static string ImageFilePath(this DeviceModel deviceModel)
|
|
{
|
|
var configCache = new Disco.Data.Configuration.ConfigurationContext(null);
|
|
|
|
var deviceModelImagesDataStore = DataStore.CreateLocation(configCache, "DeviceModelImages");
|
|
|
|
return Path.Combine(deviceModelImagesDataStore, string.Format("{0}.png", deviceModel.Id));
|
|
}
|
|
|
|
public static string ImageHash(this DeviceModel deviceModel)
|
|
{
|
|
var deviceModelImagePath = deviceModel.ImageFilePath();
|
|
|
|
if (File.Exists(deviceModelImagePath))
|
|
return File.GetLastWriteTimeUtc(deviceModelImagePath).ToBinary().ToString();
|
|
else
|
|
return "-1";
|
|
}
|
|
|
|
#region Actions
|
|
// Added 2012-11-26 G# - Need ability to delete Device Models
|
|
public static bool CanDelete(this DeviceModel dm, DiscoDataContext dbContext)
|
|
{
|
|
// Can't Delete Default Model (Id: 1)
|
|
if (dm.Id == 1)
|
|
return false;
|
|
|
|
// Can't Delete if Contains Devices
|
|
if (dbContext.Devices.Count(d => d.DeviceModelId == dm.Id) > 0)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
public static void Delete(this DeviceModel dm, DiscoDataContext dbContext)
|
|
{
|
|
if (!dm.CanDelete(dbContext))
|
|
throw new InvalidOperationException("The state of this Device Model doesn't allow it to be deleted");
|
|
|
|
// Delete Model
|
|
dbContext.DeviceModels.Remove(dm);
|
|
}
|
|
// End Added 2012-11-26 G#
|
|
#endregion
|
|
|
|
}
|
|
}
|