Files
Unimarc/unimarc/unimarc/Helper_LibraryDelaySettings.cs
chiDT 216311b558 검색결과 없음 HTML 추출 개선 및 도서관별 지연시간 저장 기능 구현
- 모든 도서관 검색기에서 검색결과 없음시 구체적인 HTML 조각 추출
- BookSearchResult에 Resulthtml 속성 추가하여 매칭된 HTML 컨텍스트 저장
- Helper_LibraryDelaySettings.cs 추가로 도서관별 검색 지연시간 XML 저장
- Check_copyWD.cs에 dvc_resulthtml 컬럼 표시 및 지연시간 저장 UI 구현
- 15개 SearchModel 파일에서 htmlContent 1000자 자르기를 의미있는 메시지로 교체
- HTTP 검색기들에 한글 인코딩 문제 해결을 위한 헤더 개선

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 23:39:04 +09:00

170 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Text;
namespace UniMarc
{
/// <summary>
/// 도서관별 지연시간 설정을 관리하는 클래스
/// </summary>
public class Helper_LibraryDelaySettings
{
private static readonly string SettingsFileName = "LibraryDelaySettings.xml";
private static readonly string SettingsFilePath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"UniMarc",
SettingsFileName
);
private Dictionary<string, int> _libraryDelaySettings;
public Helper_LibraryDelaySettings()
{
_libraryDelaySettings = new Dictionary<string, int>();
LoadSettings();
}
/// <summary>
/// 도서관별 지연시간 설정을 로드
/// </summary>
private void LoadSettings()
{
try
{
if (File.Exists(SettingsFilePath))
{
var xmlDoc = new XmlDocument();
xmlDoc.Load(SettingsFilePath);
var libraryNodes = xmlDoc.SelectNodes("//LibraryDelaySettings/Library");
if (libraryNodes != null)
{
foreach (XmlNode node in libraryNodes)
{
var name = node.Attributes?["Name"]?.Value;
var delayStr = node.Attributes?["Delay"]?.Value;
if (!string.IsNullOrEmpty(name) && int.TryParse(delayStr, out int delay))
{
_libraryDelaySettings[name] = delay;
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"도서관 지연시간 설정 로드 오류: {ex.Message}");
_libraryDelaySettings = new Dictionary<string, int>();
}
}
/// <summary>
/// 도서관별 지연시간 설정을 저장
/// </summary>
private void SaveSettings()
{
try
{
// 디렉토리 생성
var directory = Path.GetDirectoryName(SettingsFilePath);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
// XML 파일로 저장
var xmlDoc = new XmlDocument();
var declaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmlDoc.AppendChild(declaration);
var root = xmlDoc.CreateElement("LibraryDelaySettings");
xmlDoc.AppendChild(root);
foreach (var kvp in _libraryDelaySettings)
{
var libraryElement = xmlDoc.CreateElement("Library");
libraryElement.SetAttribute("Name", kvp.Key);
libraryElement.SetAttribute("Delay", kvp.Value.ToString());
root.AppendChild(libraryElement);
}
xmlDoc.Save(SettingsFilePath);
}
catch (Exception ex)
{
Console.WriteLine($"도서관 지연시간 설정 저장 오류: {ex.Message}");
}
}
/// <summary>
/// 특정 도서관의 지연시간 설정을 가져옴
/// </summary>
/// <param name="libraryName">도서관 이름</param>
/// <returns>지연시간(초), 설정이 없으면 0</returns>
public int GetDelay(string libraryName)
{
if (string.IsNullOrEmpty(libraryName))
return 0;
return _libraryDelaySettings.TryGetValue(libraryName, out int delay) ? delay : 0;
}
/// <summary>
/// 특정 도서관의 지연시간 설정을 저장
/// </summary>
/// <param name="libraryName">도서관 이름</param>
/// <param name="delaySeconds">지연시간(초)</param>
public void SetDelay(string libraryName, int delaySeconds)
{
if (string.IsNullOrEmpty(libraryName))
return;
if (delaySeconds < 0)
delaySeconds = 0;
_libraryDelaySettings[libraryName] = delaySeconds;
SaveSettings();
Console.WriteLine($"도서관 지연시간 설정 저장: {libraryName} = {delaySeconds}초");
}
/// <summary>
/// 모든 도서관 지연시간 설정을 가져옴
/// </summary>
/// <returns>도서관명-지연시간 딕셔너리</returns>
public Dictionary<string, int> GetAllSettings()
{
return new Dictionary<string, int>(_libraryDelaySettings);
}
/// <summary>
/// 특정 도서관의 지연시간 설정을 제거
/// </summary>
/// <param name="libraryName">도서관 이름</param>
public void RemoveDelay(string libraryName)
{
if (string.IsNullOrEmpty(libraryName))
return;
if (_libraryDelaySettings.ContainsKey(libraryName))
{
_libraryDelaySettings.Remove(libraryName);
SaveSettings();
Console.WriteLine($"도서관 지연시간 설정 제거: {libraryName}");
}
}
/// <summary>
/// 모든 지연시간 설정을 초기화
/// </summary>
public void ClearAllSettings()
{
_libraryDelaySettings.Clear();
SaveSettings();
Console.WriteLine("모든 도서관 지연시간 설정 초기화");
}
}
}