159 lines
5.1 KiB
C#
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;
|
|
}
|
|
}
|
|
} |