Files
BeWoPlaner/Service/ServiceImplementations/LauncherServiceImp.cs

159 lines
5.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using BeWo.Data;
using BeWo.Service.Plugins;
using BS.Shared.DataContracts.Compact;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Core;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.ServiceContracts;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.SharedLite;
using BeWo.Service.Invoicing;
using System.IO;
using System.Configuration;
using System.Diagnostics;
namespace BeWo.Service.ServiceImplementations
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class LauncherServiceImp : ILauncherService
{
string testLoc = @"d:\Test\lib1.dll";
public UserValidationResult IsUserValid(string pUserName, string pPassword, string pPIN, string clientId, bool checkTenant)
{
//Update(new BeWoProgramPackageDC());
return (new UserServiceImp()).IsUserValid(pUserName, pPassword, pPIN, clientId, checkTenant);
}
public void ResetTenant(string tenant)
{
(new OperationsServiceImp()).ResetTenant(tenant);
}
public void ResetAllTenant()
{
(new OperationsServiceImp()).ResetAllTenants();
}
public bool GetEmailForUserName(string pUserName, Uri serverName, out string email)
{
return (new UserServiceImp()).GetEmailForUserName(pUserName, serverName, out email);
}
//public byte[] GetUpdateZip()
//{
// return File.ReadAllBytes(testLoc);
//}
public BeWoProgramPackageDC Update(BeWoProgramPackageDC current)
{
DirectoryInfo dirUpdateRoot = new DirectoryInfo(ConfigurationManager.AppSettings.Get("UpdateRootPath"));
var newest = GetNewestVersionSet(dirUpdateRoot, MultitenancyOperationContextExt.Current.Tenant);
var res = CreateUpdatePackage(current, newest);
res.toLoad = "BeWoPlaner.dll";
return res;
}
private BeWoProgramPackageDC GetNewestVersionSet(DirectoryInfo dirUpdateRoot, string tenant)
{
var res = new BeWoProgramPackageDC();
var dirTenant = dirUpdateRoot.GetDirectories().FirstOrDefault(dict => dict.Name == tenant);
var filesRoot = dirUpdateRoot.GetFiles().Select(file => new BeWoProgramFileDC(file));
if (dirUpdateRoot is null)
throw new Exception("Couldn't find update root path for launcher updates");
res.Files.AddRange(filesRoot);
if (dirTenant is null)
return res;
foreach (var newFile in dirTenant.GetFiles().Select(file => new BeWoProgramFileDC(file)))
{
var search = res.Files.FirstOrDefault(x => x.FileName == newFile.FileName);
if (search is null)
{
res.Files.Add(newFile);
}
else
{
res.Files.Remove(search);
res.Files.Add(newFile);
}
}
return res;
}
private BeWoProgramPackageDC CreateUpdatePackage(BeWoProgramPackageDC oldSet, BeWoProgramPackageDC newSet)
{
var res = new BeWoProgramPackageDC();
if (!(oldSet is null))
res.Files.AddRange(oldSet.Files);
foreach (var newFile in newSet.Files)
{
var oldFile = res.Files.FirstOrDefault(x => x.FileName == newFile.FileName);
if (oldFile is null)
{
newFile.FileData = File.ReadAllBytes(newFile.FullPath);
newFile.ToDo = FileToDo.Add;
res.Files.Add(newFile);
}
else
{
if (oldFile.FileVersion is null | newFile.FileVersion is null)
{
oldFile.FileVersion = newFile.FileVersion;
oldFile.FileData = File.ReadAllBytes(newFile.FullPath);
oldFile.ToDo = FileToDo.Update;
}
else
{
if (oldFile.FileVersion == newFile.FileVersion)
{
oldFile.ToDo = FileToDo.Nuthing;
}
else
{
oldFile.FileVersion = newFile.FileVersion;
oldFile.FileData = File.ReadAllBytes(newFile.FullPath);
oldFile.ToDo = FileToDo.Update;
}
}
}
}
foreach (var oldFile in oldSet.Files)
{
var newFile = newSet.Files.FirstOrDefault(x => x.FileName == oldFile.FileName);
if (newFile is default(BeWoProgramFileDC))
{
oldFile.ToDo = FileToDo.Remove;
}
}
return res;
}
}
}