mirror of
https://github.com/claunia/osrepodbmgr.git
synced 2025-12-16 11:04:26 +00:00
1280 lines
50 KiB
C#
1280 lines
50 KiB
C#
//
|
|
// Author:
|
|
// Natalia Portillo claunia@claunia.com
|
|
//
|
|
// Copyright (c) 2017, © Claunia.com
|
|
//
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
|
// the documentation and/or other materials provided with the distribution.
|
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
//
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Threading;
|
|
using Eto.Forms;
|
|
using Eto.Serialization.Xaml;
|
|
using osrepodbmgr.Core;
|
|
using Schemas;
|
|
|
|
namespace osrepodbmgr.Eto
|
|
{
|
|
public class dlgMetadata : Dialog
|
|
{
|
|
public CICMMetadataType Metadata;
|
|
|
|
ObservableCollection<StringEntry> lstKeywords;
|
|
ObservableCollection<BarcodeEntry> lstBarcodes;
|
|
ObservableCollection<StringEntry> lstCategories;
|
|
ObservableCollection<StringEntry> lstSubcategories;
|
|
ObservableCollection<StringEntry> lstLanguages;
|
|
ObservableCollection<StringEntry> lstSystems;
|
|
ObservableCollection<StringEntry> lstArchitectures;
|
|
ObservableCollection<DiscEntry> lstDiscs;
|
|
ObservableCollection<DiskEntry> lstDisks;
|
|
|
|
ObservableCollection<string> lstBarcodeTypes;
|
|
ObservableCollection<string> lstLanguageTypes;
|
|
ObservableCollection<string> lstArchitecturesTypes;
|
|
ObservableCollection<string> lstFilesForMedia;
|
|
|
|
Thread thdDisc;
|
|
Thread thdDisk;
|
|
bool stopped;
|
|
|
|
// TODO: Add the options to edit these fields
|
|
MagazineType[] magazines;
|
|
BookType[] books;
|
|
RequiredOperatingSystemType[] requiredOses;
|
|
UserManualType[] usermanuals;
|
|
AdvertisementType[] adverts;
|
|
LinearMediaType[] linearmedias;
|
|
PCIType[] pcis;
|
|
AudioMediaType[] audiomedias;
|
|
|
|
#region XAML UI elements
|
|
#pragma warning disable 0649
|
|
TabPage tabGeneral;
|
|
TextBox txtDeveloper;
|
|
TextBox txtPublisher;
|
|
TextBox txtAuthor;
|
|
TextBox txtPerformer;
|
|
TextBox txtName;
|
|
TextBox txtVersion;
|
|
StackLayout stkReleaseType;
|
|
CheckBox chkKnownReleaseType;
|
|
EnumDropDown<CICMMetadataTypeReleaseType> cmbReleaseType;
|
|
DateTimePicker cldReleaseDate;
|
|
CheckBox chkReleaseDate;
|
|
TextBox txtPartNumber;
|
|
TextBox txtSerialNumber;
|
|
TabPage tabKeywords;
|
|
TextBox txtNewKeyword;
|
|
GridView treeKeywords;
|
|
TabPage tabBarcodes;
|
|
TextBox txtNewBarcode;
|
|
ComboBox cmbBarcodes;
|
|
GridView treeBarcodes;
|
|
TabPage tabCategories;
|
|
TextBox txtNewCategory;
|
|
GridView treeCategories;
|
|
TextBox txtNewSubcategory;
|
|
GridView treeSubcategories;
|
|
TabPage tabLanguages;
|
|
ComboBox cmbLanguages;
|
|
GridView treeLanguages;
|
|
TabPage tabSystems;
|
|
TextBox txtNewSystem;
|
|
GridView treeSystems;
|
|
TabPage tabArchitectures;
|
|
ComboBox cmbArchitectures;
|
|
GridView treeArchitectures;
|
|
TabPage tabDiscs;
|
|
ComboBox cmbFilesForNewDisc;
|
|
Button btnAddDisc;
|
|
GridView treeDiscs;
|
|
Button btnStopAddDisc;
|
|
Button btnEditDisc;
|
|
Button btnClearDiscs;
|
|
Button btnRemoveDisc;
|
|
Label lblAddDisc1;
|
|
ProgressBar prgAddDisc1;
|
|
Label lblAddDisc2;
|
|
ProgressBar prgAddDisc2;
|
|
TabPage tabDisks;
|
|
ComboBox cmbFilesForNewDisk;
|
|
Button btnAddDisk;
|
|
GridView treeDisks;
|
|
Button btnStopAddDisk;
|
|
Button btnEditDisk;
|
|
Button btnClearDisks;
|
|
Button btnRemoveDisk;
|
|
Label lblAddDisk1;
|
|
ProgressBar prgAddDisk1;
|
|
Label lblAddDisk2;
|
|
ProgressBar prgAddDisk2;
|
|
Button btnCancel;
|
|
Button btnOK;
|
|
#pragma warning restore 0649
|
|
#endregion XAML UI elements
|
|
|
|
public bool Modified;
|
|
|
|
public dlgMetadata()
|
|
{
|
|
XamlReader.Load(this);
|
|
|
|
Modified = false;
|
|
|
|
cmbReleaseType = new EnumDropDown<CICMMetadataTypeReleaseType>();
|
|
stkReleaseType.Items.Add(new StackLayoutItem { Control = cmbReleaseType, Expand = true });
|
|
|
|
lstKeywords = new ObservableCollection<StringEntry>();
|
|
lstBarcodes = new ObservableCollection<BarcodeEntry>();
|
|
lstCategories = new ObservableCollection<StringEntry>();
|
|
lstSubcategories = new ObservableCollection<StringEntry>();
|
|
lstLanguages = new ObservableCollection<StringEntry>();
|
|
lstSystems = new ObservableCollection<StringEntry>();
|
|
lstArchitectures = new ObservableCollection<StringEntry>();
|
|
lstDiscs = new ObservableCollection<DiscEntry>();
|
|
lstDisks = new ObservableCollection<DiskEntry>();
|
|
|
|
treeKeywords.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<StringEntry, string>(r => r.str) },
|
|
HeaderText = "Keyword"
|
|
});
|
|
treeBarcodes.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<BarcodeEntry, string>(r => r.code) },
|
|
HeaderText = "Barcode"
|
|
});
|
|
treeBarcodes.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<BarcodeEntry, BarcodeTypeType>(r => r.type).Convert(v => v.ToString()) },
|
|
HeaderText = "Type"
|
|
});
|
|
treeCategories.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<StringEntry, string>(r => r.str) },
|
|
HeaderText = "Category"
|
|
});
|
|
treeSubcategories.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<StringEntry, string>(r => r.str) },
|
|
HeaderText = "Subcategory"
|
|
});
|
|
treeLanguages.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<StringEntry, string>(r => r.str) },
|
|
HeaderText = "Language"
|
|
});
|
|
treeSystems.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<StringEntry, string>(r => r.str) },
|
|
HeaderText = "System"
|
|
});
|
|
treeArchitectures.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<StringEntry, string>(r => r.str) },
|
|
HeaderText = "Architecture"
|
|
});
|
|
treeDiscs.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<DiscEntry, string>(r => r.path) },
|
|
HeaderText = "File"
|
|
});
|
|
treeDisks.Columns.Add(new GridColumn
|
|
{
|
|
DataCell = new TextBoxCell { Binding = Binding.Property<DiskEntry, string>(r => r.path) },
|
|
HeaderText = "File"
|
|
});
|
|
|
|
treeKeywords.DataStore = lstKeywords;
|
|
treeBarcodes.DataStore = lstBarcodes;
|
|
treeCategories.DataStore = lstCategories;
|
|
treeSubcategories.DataStore = lstSubcategories;
|
|
treeLanguages.DataStore = lstLanguages;
|
|
treeSystems.DataStore = lstSystems;
|
|
treeArchitectures.DataStore = lstArchitectures;
|
|
treeDiscs.DataStore = lstDiscs;
|
|
treeDisks.DataStore = lstDisks;
|
|
|
|
treeKeywords.AllowMultipleSelection = false;
|
|
treeBarcodes.AllowMultipleSelection = false;
|
|
treeCategories.AllowMultipleSelection = false;
|
|
treeSubcategories.AllowMultipleSelection = false;
|
|
treeLanguages.AllowMultipleSelection = false;
|
|
treeSystems.AllowMultipleSelection = false;
|
|
treeArchitectures.AllowMultipleSelection = false;
|
|
treeDiscs.AllowMultipleSelection = false;
|
|
treeDisks.AllowMultipleSelection = false;
|
|
|
|
lstBarcodeTypes = new ObservableCollection<string>();
|
|
lstLanguageTypes = new ObservableCollection<string>();
|
|
lstArchitecturesTypes = new ObservableCollection<string>();
|
|
lstFilesForMedia = new ObservableCollection<string>();
|
|
|
|
//cmbBarcodes.ItemTextBinding = Binding.Property<StringEntry, string>(r => r.str);
|
|
cmbBarcodes.DataStore = lstBarcodeTypes;
|
|
cmbLanguages.DataStore = lstLanguageTypes;
|
|
cmbArchitectures.DataStore = lstArchitecturesTypes;
|
|
cmbFilesForNewDisc.DataStore = lstFilesForMedia;
|
|
cmbFilesForNewDisk.DataStore = lstFilesForMedia;
|
|
|
|
FillBarcodeCombo();
|
|
FillLanguagesCombo();
|
|
FillArchitecturesCombo();
|
|
FillFilesCombos();
|
|
}
|
|
|
|
void FillBarcodeCombo()
|
|
{
|
|
lstBarcodeTypes.Clear();
|
|
foreach(BarcodeTypeType type in Enum.GetValues(typeof(BarcodeTypeType)))
|
|
lstBarcodeTypes.Add(type.ToString());
|
|
}
|
|
|
|
void FillLanguagesCombo()
|
|
{
|
|
lstLanguageTypes.Clear();
|
|
foreach(LanguagesTypeLanguage type in Enum.GetValues(typeof(LanguagesTypeLanguage)))
|
|
lstLanguageTypes.Add(type.ToString());
|
|
}
|
|
|
|
void FillArchitecturesCombo()
|
|
{
|
|
lstArchitecturesTypes.Clear();
|
|
foreach(ArchitecturesTypeArchitecture type in Enum.GetValues(typeof(ArchitecturesTypeArchitecture)))
|
|
lstArchitecturesTypes.Add(type.ToString());
|
|
}
|
|
|
|
void FillFilesCombos()
|
|
{
|
|
foreach(KeyValuePair<string, DBOSFile> files in Context.hashes)
|
|
lstFilesForMedia.Add(files.Key);
|
|
}
|
|
|
|
public void FillFields()
|
|
{
|
|
if(Metadata == null)
|
|
return;
|
|
|
|
if(Metadata.Developer != null)
|
|
{
|
|
foreach(string developer in Metadata.Developer)
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(txtDeveloper.Text))
|
|
txtDeveloper.Text += ",";
|
|
txtDeveloper.Text += developer;
|
|
}
|
|
}
|
|
|
|
if(Metadata.Publisher != null)
|
|
{
|
|
foreach(string publisher in Metadata.Publisher)
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(txtPublisher.Text))
|
|
txtPublisher.Text += ",";
|
|
txtPublisher.Text += publisher;
|
|
}
|
|
}
|
|
|
|
if(Metadata.Author != null)
|
|
{
|
|
foreach(string author in Metadata.Author)
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(txtPublisher.Text))
|
|
txtPublisher.Text += ",";
|
|
txtPublisher.Text += author;
|
|
}
|
|
}
|
|
|
|
if(Metadata.Performer != null)
|
|
{
|
|
foreach(string performer in Metadata.Performer)
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(txtPublisher.Text))
|
|
txtPublisher.Text += ",";
|
|
txtPublisher.Text += performer;
|
|
}
|
|
}
|
|
|
|
txtName.Text = Metadata.Name;
|
|
txtVersion.Text = Metadata.Version;
|
|
txtPartNumber.Text = Metadata.PartNumber;
|
|
txtSerialNumber.Text = Metadata.SerialNumber;
|
|
|
|
if(Metadata.ReleaseTypeSpecified)
|
|
{
|
|
chkKnownReleaseType.Checked = true;
|
|
cmbReleaseType.Enabled = true;
|
|
cmbReleaseType.SelectedValue = Metadata.ReleaseType;
|
|
}
|
|
|
|
if(Metadata.ReleaseDateSpecified)
|
|
{
|
|
chkReleaseDate.Checked = false;
|
|
cldReleaseDate.Enabled = true;
|
|
cldReleaseDate.Value = Metadata.ReleaseDate;
|
|
}
|
|
|
|
if(Metadata.Keywords != null)
|
|
{
|
|
foreach(string keyword in Metadata.Keywords)
|
|
lstKeywords.Add(new StringEntry { str = keyword });
|
|
}
|
|
if(Metadata.Categories != null)
|
|
{
|
|
foreach(string category in Metadata.Categories)
|
|
lstCategories.Add(new StringEntry { str = category });
|
|
}
|
|
if(Metadata.Subcategories != null)
|
|
{
|
|
foreach(string subcategory in Metadata.Subcategories)
|
|
lstSubcategories.Add(new StringEntry { str = subcategory });
|
|
}
|
|
|
|
if(Metadata.Languages != null)
|
|
{
|
|
foreach(LanguagesTypeLanguage language in Metadata.Languages)
|
|
{
|
|
lstLanguages.Add(new StringEntry { str = language.ToString() });
|
|
lstLanguageTypes.Remove(language.ToString());
|
|
}
|
|
}
|
|
|
|
if(Metadata.Systems != null)
|
|
{
|
|
foreach(string system in Metadata.Systems)
|
|
lstSystems.Add(new StringEntry { str = system });
|
|
}
|
|
|
|
if(Metadata.Architectures != null)
|
|
{
|
|
foreach(ArchitecturesTypeArchitecture architecture in Metadata.Architectures)
|
|
{
|
|
lstArchitectures.Add(new StringEntry { str = architecture.ToString() });
|
|
lstArchitecturesTypes.Remove(architecture.ToString());
|
|
}
|
|
}
|
|
|
|
if(Metadata.OpticalDisc != null)
|
|
{
|
|
foreach(OpticalDiscType disc in Metadata.OpticalDisc)
|
|
{
|
|
lstDiscs.Add(new DiscEntry { path = disc.Image.Value, disc = disc });
|
|
List<string> files = new List<string>();
|
|
files.Add(disc.Image.Value);
|
|
if(disc.ADIP != null)
|
|
files.Add(disc.ADIP.Image);
|
|
if(disc.ATIP != null)
|
|
files.Add(disc.ATIP.Image);
|
|
if(disc.BCA != null)
|
|
files.Add(disc.BCA.Image);
|
|
if(disc.CMI != null)
|
|
files.Add(disc.CMI.Image);
|
|
if(disc.DCB != null)
|
|
files.Add(disc.DCB.Image);
|
|
if(disc.DDS != null)
|
|
files.Add(disc.DDS.Image);
|
|
if(disc.DMI != null)
|
|
files.Add(disc.DMI.Image);
|
|
if(disc.LastRMD != null)
|
|
files.Add(disc.LastRMD.Image);
|
|
if(disc.LeadIn != null)
|
|
{
|
|
foreach(Schemas.BorderType border in disc.LeadIn)
|
|
files.Add(border.Image);
|
|
}
|
|
if(disc.LeadInCdText != null)
|
|
files.Add(disc.LeadInCdText.Image);
|
|
if(disc.LeadOut != null)
|
|
{
|
|
foreach(Schemas.BorderType border in disc.LeadOut)
|
|
files.Add(border.Image);
|
|
}
|
|
if(disc.MediaID != null)
|
|
files.Add(disc.MediaID.Image);
|
|
if(disc.PAC != null)
|
|
files.Add(disc.PAC.Image);
|
|
if(disc.PFI != null)
|
|
files.Add(disc.PFI.Image);
|
|
if(disc.PFIR != null)
|
|
files.Add(disc.PFIR.Image);
|
|
if(disc.PMA != null)
|
|
files.Add(disc.PMA.Image);
|
|
if(disc.PRI != null)
|
|
files.Add(disc.PRI.Image);
|
|
if(disc.SAI != null)
|
|
files.Add(disc.SAI.Image);
|
|
if(disc.TOC != null)
|
|
files.Add(disc.TOC.Image);
|
|
if(disc.Track != null)
|
|
{
|
|
foreach(TrackType track in disc.Track)
|
|
files.Add(track.Image.Value);
|
|
}
|
|
|
|
foreach(string file in files)
|
|
{
|
|
if(lstFilesForMedia.Contains(file))
|
|
lstFilesForMedia.Remove(file);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(Metadata.BlockMedia != null)
|
|
{
|
|
foreach(BlockMediaType disk in Metadata.BlockMedia)
|
|
{
|
|
lstDisks.Add(new DiskEntry { path = disk.Image.Value, disk = disk });
|
|
List<string> files = new List<string>();
|
|
files.Add(disk.Image.Value);
|
|
if(disk.ATA != null && disk.ATA.Identify != null)
|
|
files.Add(disk.ATA.Identify.Image);
|
|
if(disk.MAM != null)
|
|
files.Add(disk.MAM.Image);
|
|
if(disk.PCI != null && disk.PCI.ExpansionROM != null)
|
|
files.Add(disk.PCI.ExpansionROM.Image.Value);
|
|
if(disk.PCMCIA != null && disk.PCMCIA.CIS != null)
|
|
files.Add(disk.PCMCIA.CIS.Image);
|
|
if(disk.SCSI != null)
|
|
{
|
|
if(disk.SCSI.Inquiry != null)
|
|
files.Add(disk.SCSI.Inquiry.Image);
|
|
if(disk.SCSI.LogSense != null)
|
|
files.Add(disk.SCSI.LogSense.Image);
|
|
if(disk.SCSI.ModeSense != null)
|
|
files.Add(disk.SCSI.ModeSense.Image);
|
|
if(disk.SCSI.ModeSense10 != null)
|
|
files.Add(disk.SCSI.ModeSense10.Image);
|
|
if(disk.SCSI.EVPD != null)
|
|
{
|
|
foreach(EVPDType evpd in disk.SCSI.EVPD)
|
|
files.Add(evpd.Image);
|
|
}
|
|
}
|
|
if(disk.SecureDigital != null)
|
|
{
|
|
if(disk.SecureDigital.CID != null)
|
|
files.Add(disk.SecureDigital.CID.Image);
|
|
if(disk.SecureDigital.CSD != null)
|
|
files.Add(disk.SecureDigital.CSD.Image);
|
|
if(disk.MultiMediaCard.ExtendedCSD != null)
|
|
files.Add(disk.MultiMediaCard.ExtendedCSD.Image);
|
|
}
|
|
if(disk.TapeInformation != null)
|
|
{
|
|
foreach(TapePartitionType tapePart in disk.TapeInformation)
|
|
files.Add(tapePart.Image.Value);
|
|
}
|
|
if(disk.Track != null)
|
|
{
|
|
foreach(BlockTrackType track in disk.Track)
|
|
files.Add(track.Image.Value);
|
|
}
|
|
if(disk.USB != null && disk.USB.Descriptors != null)
|
|
files.Add(disk.USB.Descriptors.Image);
|
|
|
|
foreach(string file in files)
|
|
{
|
|
if(lstFilesForMedia.Contains(file))
|
|
lstFilesForMedia.Remove(file);
|
|
}
|
|
}
|
|
}
|
|
|
|
magazines = Metadata.Magazine;
|
|
books = Metadata.Book;
|
|
requiredOses = Metadata.RequiredOperatingSystems;
|
|
usermanuals = Metadata.UserManual;
|
|
adverts = Metadata.Advertisement;
|
|
linearmedias = Metadata.LinearMedia;
|
|
pcis = Metadata.PCICard;
|
|
audiomedias = Metadata.AudioMedia;
|
|
}
|
|
|
|
protected void OnChkKnownReleaseTypeToggled(object sender, EventArgs e)
|
|
{
|
|
cmbReleaseType.Enabled = chkKnownReleaseType.Checked.Value;
|
|
}
|
|
|
|
protected void OnChkReleaseDateToggled(object sender, EventArgs e)
|
|
{
|
|
cldReleaseDate.Enabled = !chkReleaseDate.Checked.Value;
|
|
}
|
|
|
|
protected void OnBtnAddKeywordClicked(object sender, EventArgs e)
|
|
{
|
|
lstKeywords.Add(new StringEntry { str = txtNewKeyword.Text });
|
|
txtNewKeyword.Text = "";
|
|
}
|
|
|
|
protected void OnBtnRemoveKeywordClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeKeywords.SelectedItem != null)
|
|
lstKeywords.Remove((StringEntry)treeKeywords.SelectedItem);
|
|
}
|
|
|
|
protected void OnBtnClearKeywordsClicked(object sender, EventArgs e)
|
|
{
|
|
lstKeywords.Clear();
|
|
}
|
|
|
|
protected void OnBtnAddBarcodeClicked(object sender, EventArgs e)
|
|
{
|
|
if(!string.IsNullOrEmpty(cmbBarcodes.Text))
|
|
{
|
|
lstBarcodes.Add(new BarcodeEntry { code = txtNewBarcode.Text, type = (BarcodeTypeType)Enum.Parse(typeof(BarcodeTypeType), cmbBarcodes.Text) });
|
|
txtNewBarcode.Text = "";
|
|
}
|
|
}
|
|
|
|
protected void OnBtnClearBarcodesClicked(object sender, EventArgs e)
|
|
{
|
|
lstBarcodes.Clear();
|
|
}
|
|
|
|
protected void OnBtnRemoveBarcodeClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeBarcodes.SelectedItem != null)
|
|
lstBarcodes.Remove((BarcodeEntry)treeBarcodes.SelectedItem);
|
|
}
|
|
|
|
protected void OnBtnAddCategoryClicked(object sender, EventArgs e)
|
|
{
|
|
lstCategories.Add(new StringEntry { str = txtNewCategory.Text });
|
|
txtNewCategory.Text = "";
|
|
}
|
|
|
|
protected void OnBtnAddSubcategoryClicked(object sender, EventArgs e)
|
|
{
|
|
lstSubcategories.Add(new StringEntry { str = txtNewSubcategory.Text });
|
|
txtNewSubcategory.Text = "";
|
|
}
|
|
|
|
protected void OnBtnRemoveSubcategoryClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeSubcategories.SelectedItem != null)
|
|
lstSubcategories.Remove((StringEntry)treeSubcategories.SelectedItem);
|
|
}
|
|
|
|
protected void OnBtnClearSubcategoriesClicked(object sender, EventArgs e)
|
|
{
|
|
lstSubcategories.Clear();
|
|
}
|
|
|
|
protected void OnBtnRemoveCategoryClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeCategories.SelectedItem != null)
|
|
lstCategories.Remove((StringEntry)treeCategories.SelectedItem);
|
|
}
|
|
|
|
protected void OnBtnClearCategoriesClicked(object sender, EventArgs e)
|
|
{
|
|
lstCategories.Clear();
|
|
}
|
|
|
|
protected void OnBtnAddLanguageClicked(object sender, EventArgs e)
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(cmbLanguages.Text))
|
|
{
|
|
lstLanguages.Add(new StringEntry { str = cmbLanguages.Text });
|
|
lstLanguageTypes.Remove(cmbLanguages.Text);
|
|
}
|
|
}
|
|
|
|
protected void OnBtnRemoveLanguageClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeLanguages.SelectedItem != null)
|
|
{
|
|
lstLanguageTypes.Add(((StringEntry)treeLanguages.SelectedItem).str);
|
|
lstLanguages.Remove((StringEntry)treeLanguages.SelectedItem);
|
|
}
|
|
}
|
|
|
|
protected void OnBtnClearLanguagesClicked(object sender, EventArgs e)
|
|
{
|
|
lstLanguages.Clear();
|
|
FillLanguagesCombo();
|
|
}
|
|
|
|
protected void OnBtnAddSystemClicked(object sender, EventArgs e)
|
|
{
|
|
lstSystems.Add(new StringEntry { str = txtNewSystem.Text });
|
|
txtNewSystem.Text = "";
|
|
}
|
|
|
|
protected void OnBtnClearSystemsClicked(object sender, EventArgs e)
|
|
{
|
|
lstSystems.Clear();
|
|
}
|
|
|
|
protected void OnBtnRemoveSystemClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeSystems.SelectedItem != null)
|
|
lstSystems.Remove((StringEntry)treeSystems.SelectedItem);
|
|
}
|
|
|
|
protected void OnBtnAddArchitectureClicked(object sender, EventArgs e)
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(cmbArchitectures.Text))
|
|
{
|
|
lstArchitectures.Add(new StringEntry { str = cmbArchitectures.Text });
|
|
lstArchitecturesTypes.Remove(cmbArchitectures.Text);
|
|
}
|
|
}
|
|
|
|
protected void OnBtnClearArchitecturesClicked(object sender, EventArgs e)
|
|
{
|
|
lstArchitectures.Clear();
|
|
FillArchitecturesCombo();
|
|
}
|
|
|
|
protected void OnBtnRemoveArchitectureClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeArchitectures.SelectedItem != null)
|
|
{
|
|
lstArchitecturesTypes.Add(((StringEntry)treeArchitectures.SelectedItem).str);
|
|
lstArchitectures.Remove((StringEntry)treeArchitectures.SelectedItem);
|
|
}
|
|
}
|
|
|
|
protected void OnBtnAddDiscClicked(object sender, EventArgs e)
|
|
{
|
|
Context.selectedFile = cmbFilesForNewDisc.Text;
|
|
tabGeneral.Visible = false;
|
|
tabKeywords.Visible = false;
|
|
tabBarcodes.Visible = false;
|
|
tabCategories.Visible = false;
|
|
tabLanguages.Visible = false;
|
|
tabSystems.Visible = false;
|
|
tabArchitectures.Visible = false;
|
|
tabDisks.Visible = false;
|
|
prgAddDisc1.Visible = true;
|
|
prgAddDisc2.Visible = true;
|
|
lblAddDisc1.Visible = true;
|
|
lblAddDisc2.Visible = true;
|
|
btnCancel.Visible = false;
|
|
btnOK.Visible = false;
|
|
btnEditDisc.Visible = false;
|
|
btnClearDiscs.Visible = false;
|
|
Workers.Failed += OnDiscAddFailed;
|
|
Workers.Finished += OnDiscAddFinished;
|
|
Workers.UpdateProgress += UpdateDiscProgress1;
|
|
Workers.UpdateProgress2 += UpdateDiscProgress2;
|
|
Context.workingDisc = null;
|
|
btnStopAddDisc.Visible = true;
|
|
btnAddDisc.Visible = false;
|
|
btnRemoveDisc.Visible = false;
|
|
thdDisc = new Thread(Workers.AddMedia);
|
|
thdDisc.Start();
|
|
}
|
|
|
|
protected void OnBtnStopAddDiscClicked(object sender, EventArgs e)
|
|
{
|
|
if(thdDisc != null)
|
|
thdDisc.Abort();
|
|
stopped = true;
|
|
OnDiscAddFailed(null);
|
|
}
|
|
|
|
public void UpdateDiscProgress1(string text, string inner, long current, long maximum)
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(inner))
|
|
lblAddDisc1.Text = inner;
|
|
else
|
|
lblAddDisc1.Text = text;
|
|
if(maximum > 0)
|
|
{
|
|
if(current < int.MinValue || current > int.MaxValue ||
|
|
maximum < int.MinValue || maximum > int.MaxValue)
|
|
{
|
|
current /= 100;
|
|
maximum /= 100;
|
|
}
|
|
|
|
prgAddDisc1.Indeterminate = false;
|
|
prgAddDisc1.MinValue = 0;
|
|
prgAddDisc1.MaxValue = (int)maximum;
|
|
prgAddDisc1.Value = (int)current;
|
|
}
|
|
else
|
|
prgAddDisc1.Indeterminate = true;
|
|
});
|
|
}
|
|
|
|
public void UpdateDiscProgress2(string text, string inner, long current, long maximum)
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(inner))
|
|
lblAddDisc2.Text = inner;
|
|
else
|
|
lblAddDisc2.Text = text;
|
|
if(maximum > 0)
|
|
{
|
|
if(current < int.MinValue || current > int.MaxValue ||
|
|
maximum < int.MinValue || maximum > int.MaxValue)
|
|
{
|
|
current /= 100;
|
|
maximum /= 100;
|
|
}
|
|
|
|
prgAddDisc2.Indeterminate = false;
|
|
prgAddDisc2.MinValue = 0;
|
|
prgAddDisc2.MaxValue = (int)maximum;
|
|
prgAddDisc2.Value = (int)current;
|
|
}
|
|
else
|
|
prgAddDisc2.Indeterminate = true;
|
|
});
|
|
}
|
|
|
|
void OnDiscAddFailed(string text)
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(!stopped)
|
|
MessageBox.Show(text, MessageBoxType.Error);
|
|
Context.selectedFile = "";
|
|
tabGeneral.Visible = true;
|
|
tabKeywords.Visible = true;
|
|
tabBarcodes.Visible = true;
|
|
tabCategories.Visible = true;
|
|
tabLanguages.Visible = true;
|
|
tabSystems.Visible = true;
|
|
tabArchitectures.Visible = true;
|
|
tabDisks.Visible = true;
|
|
prgAddDisc1.Visible = false;
|
|
prgAddDisc2.Visible = false;
|
|
lblAddDisc1.Visible = false;
|
|
lblAddDisc2.Visible = false;
|
|
btnCancel.Visible = true;
|
|
btnOK.Visible = true;
|
|
btnEditDisc.Visible = true;
|
|
btnClearDiscs.Visible = true;
|
|
Workers.Failed -= OnDiscAddFailed;
|
|
Workers.Finished -= OnDiscAddFinished;
|
|
Workers.UpdateProgress -= UpdateDiscProgress1;
|
|
Workers.UpdateProgress2 -= UpdateDiscProgress2;
|
|
Context.workingDisc = null;
|
|
btnStopAddDisc.Visible = false;
|
|
btnAddDisc.Visible = true;
|
|
btnRemoveDisc.Visible = true;
|
|
thdDisc = null;
|
|
});
|
|
}
|
|
|
|
void OnDiscAddFinished()
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(Context.workingDisc == null)
|
|
return;
|
|
|
|
OpticalDiscType disc = Context.workingDisc;
|
|
|
|
lstDiscs.Add(new DiscEntry { path = Context.selectedFile, disc = disc });
|
|
List<string> files = new List<string>();
|
|
files.Add(disc.Image.Value);
|
|
if(disc.ADIP != null)
|
|
files.Add(disc.ADIP.Image);
|
|
if(disc.ATIP != null)
|
|
files.Add(disc.ATIP.Image);
|
|
if(disc.BCA != null)
|
|
files.Add(disc.BCA.Image);
|
|
if(disc.CMI != null)
|
|
files.Add(disc.CMI.Image);
|
|
if(disc.DCB != null)
|
|
files.Add(disc.DCB.Image);
|
|
if(disc.DDS != null)
|
|
files.Add(disc.DDS.Image);
|
|
if(disc.DMI != null)
|
|
files.Add(disc.DMI.Image);
|
|
if(disc.LastRMD != null)
|
|
files.Add(disc.LastRMD.Image);
|
|
if(disc.LeadIn != null)
|
|
{
|
|
foreach(Schemas.BorderType border in disc.LeadIn)
|
|
files.Add(border.Image);
|
|
}
|
|
if(disc.LeadInCdText != null)
|
|
files.Add(disc.LeadInCdText.Image);
|
|
if(disc.LeadOut != null)
|
|
{
|
|
foreach(Schemas.BorderType border in disc.LeadOut)
|
|
files.Add(border.Image);
|
|
}
|
|
if(disc.MediaID != null)
|
|
files.Add(disc.MediaID.Image);
|
|
if(disc.PAC != null)
|
|
files.Add(disc.PAC.Image);
|
|
if(disc.PFI != null)
|
|
files.Add(disc.PFI.Image);
|
|
if(disc.PFIR != null)
|
|
files.Add(disc.PFIR.Image);
|
|
if(disc.PMA != null)
|
|
files.Add(disc.PMA.Image);
|
|
if(disc.PRI != null)
|
|
files.Add(disc.PRI.Image);
|
|
if(disc.SAI != null)
|
|
files.Add(disc.SAI.Image);
|
|
if(disc.TOC != null)
|
|
files.Add(disc.TOC.Image);
|
|
if(disc.Track != null)
|
|
{
|
|
foreach(TrackType track in disc.Track)
|
|
files.Add(track.Image.Value);
|
|
}
|
|
|
|
foreach(string file in files)
|
|
lstFilesForMedia.Remove(file);
|
|
|
|
Context.selectedFile = "";
|
|
tabGeneral.Visible = true;
|
|
tabKeywords.Visible = true;
|
|
tabBarcodes.Visible = true;
|
|
tabCategories.Visible = true;
|
|
tabLanguages.Visible = true;
|
|
tabSystems.Visible = true;
|
|
tabArchitectures.Visible = true;
|
|
tabDisks.Visible = true;
|
|
prgAddDisc1.Visible = false;
|
|
prgAddDisc2.Visible = false;
|
|
lblAddDisc1.Visible = false;
|
|
lblAddDisc2.Visible = false;
|
|
btnCancel.Visible = true;
|
|
btnOK.Visible = true;
|
|
btnEditDisc.Visible = true;
|
|
btnClearDiscs.Visible = true;
|
|
Workers.Failed -= OnDiscAddFailed;
|
|
Workers.Finished -= OnDiscAddFinished;
|
|
Workers.UpdateProgress -= UpdateDiscProgress1;
|
|
Workers.UpdateProgress2 -= UpdateDiscProgress2;
|
|
Context.workingDisc = null;
|
|
btnStopAddDisc.Visible = false;
|
|
btnAddDisc.Visible = true;
|
|
btnRemoveDisc.Visible = true;
|
|
thdDisc = null;
|
|
});
|
|
}
|
|
|
|
protected void OnBtnClearDiscsClicked(object sender, EventArgs e)
|
|
{
|
|
lstDiscs.Clear();
|
|
// TODO: Don't add files that are in disks
|
|
FillFilesCombos();
|
|
}
|
|
|
|
protected void OnBtnRemoveDiscClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeDiscs.SelectedItem != null)
|
|
{
|
|
lstFilesForMedia.Add(((DiscEntry)treeDiscs.SelectedItem).path);
|
|
lstDiscs.Remove((DiscEntry)treeDiscs.SelectedItem);
|
|
}
|
|
}
|
|
|
|
protected void OnBtnAddDiskClicked(object sender, EventArgs e)
|
|
{
|
|
Context.selectedFile = cmbFilesForNewDisk.Text;
|
|
tabGeneral.Visible = false;
|
|
tabKeywords.Visible = false;
|
|
tabBarcodes.Visible = false;
|
|
tabCategories.Visible = false;
|
|
tabLanguages.Visible = false;
|
|
tabSystems.Visible = false;
|
|
tabArchitectures.Visible = false;
|
|
tabDiscs.Visible = false;
|
|
prgAddDisk1.Visible = true;
|
|
prgAddDisk2.Visible = true;
|
|
lblAddDisk1.Visible = true;
|
|
lblAddDisk2.Visible = true;
|
|
btnCancel.Visible = false;
|
|
btnOK.Visible = false;
|
|
btnEditDisk.Visible = false;
|
|
btnClearDisks.Visible = false;
|
|
Workers.Failed += OnDiskAddFailed;
|
|
Workers.Finished += OnDiskAddFinished;
|
|
Workers.UpdateProgress += UpdateDiskProgress1;
|
|
Workers.UpdateProgress2 += UpdateDiskProgress2;
|
|
Context.workingDisk = null;
|
|
btnStopAddDisk.Visible = true;
|
|
btnAddDisk.Visible = false;
|
|
btnRemoveDisk.Visible = false;
|
|
thdDisk = new Thread(Workers.AddMedia);
|
|
thdDisk.Start();
|
|
}
|
|
|
|
protected void OnBtnStopAddDiskClicked(object sender, EventArgs e)
|
|
{
|
|
if(thdDisk != null)
|
|
thdDisk.Abort();
|
|
stopped = true;
|
|
OnDiskAddFailed(null);
|
|
}
|
|
|
|
public void UpdateDiskProgress1(string text, string inner, long current, long maximum)
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(inner))
|
|
lblAddDisk1.Text = inner;
|
|
else
|
|
lblAddDisk1.Text = text;
|
|
if(maximum > 0)
|
|
{
|
|
if(current < int.MinValue || current > int.MaxValue ||
|
|
maximum < int.MinValue || maximum > int.MaxValue)
|
|
{
|
|
current /= 100;
|
|
maximum /= 100;
|
|
}
|
|
|
|
prgAddDisk1.Indeterminate = false;
|
|
prgAddDisk1.MinValue = 0;
|
|
prgAddDisk1.MaxValue = (int)maximum;
|
|
prgAddDisk1.Value = (int)current;
|
|
}
|
|
else
|
|
prgAddDisk1.Indeterminate = true;
|
|
});
|
|
}
|
|
|
|
public void UpdateDiskProgress2(string text, string inner, long current, long maximum)
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(!string.IsNullOrWhiteSpace(inner))
|
|
lblAddDisk2.Text = inner;
|
|
else
|
|
lblAddDisk2.Text = text;
|
|
if(maximum > 0)
|
|
{
|
|
if(current < int.MinValue || current > int.MaxValue ||
|
|
maximum < int.MinValue || maximum > int.MaxValue)
|
|
{
|
|
current /= 100;
|
|
maximum /= 100;
|
|
}
|
|
|
|
prgAddDisk2.Indeterminate = false;
|
|
prgAddDisk2.MinValue = 0;
|
|
prgAddDisk2.MaxValue = (int)maximum;
|
|
prgAddDisk2.Value = (int)current;
|
|
}
|
|
else
|
|
prgAddDisk2.Indeterminate = true;
|
|
});
|
|
}
|
|
|
|
void OnDiskAddFailed(string text)
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(!stopped)
|
|
MessageBox.Show(text, MessageBoxType.Error);
|
|
Context.selectedFile = "";
|
|
tabGeneral.Visible = true;
|
|
tabKeywords.Visible = true;
|
|
tabBarcodes.Visible = true;
|
|
tabCategories.Visible = true;
|
|
tabLanguages.Visible = true;
|
|
tabSystems.Visible = true;
|
|
tabArchitectures.Visible = true;
|
|
tabDiscs.Visible = true;
|
|
prgAddDisk1.Visible = false;
|
|
prgAddDisk2.Visible = false;
|
|
lblAddDisk1.Visible = false;
|
|
lblAddDisk2.Visible = false;
|
|
btnCancel.Visible = true;
|
|
btnOK.Visible = true;
|
|
btnEditDisk.Visible = true;
|
|
btnClearDisks.Visible = true;
|
|
Workers.Failed -= OnDiskAddFailed;
|
|
Workers.Finished -= OnDiskAddFinished;
|
|
Workers.UpdateProgress -= UpdateDiskProgress1;
|
|
Workers.UpdateProgress2 -= UpdateDiskProgress2;
|
|
Context.workingDisk = null;
|
|
btnStopAddDisk.Visible = false;
|
|
btnAddDisk.Visible = true;
|
|
btnRemoveDisk.Visible = true;
|
|
thdDisk = null;
|
|
});
|
|
}
|
|
|
|
void OnDiskAddFinished()
|
|
{
|
|
Application.Instance.Invoke(delegate
|
|
{
|
|
if(Context.workingDisk == null)
|
|
return;
|
|
|
|
BlockMediaType disk = Context.workingDisk;
|
|
|
|
lstDisks.Add(new DiskEntry { path = disk.Image.Value, disk = disk });
|
|
List<string> files = new List<string>();
|
|
files.Add(disk.Image.Value);
|
|
if(disk.ATA != null && disk.ATA.Identify != null)
|
|
files.Add(disk.ATA.Identify.Image);
|
|
if(disk.MAM != null)
|
|
files.Add(disk.MAM.Image);
|
|
if(disk.PCI != null && disk.PCI.ExpansionROM != null)
|
|
files.Add(disk.PCI.ExpansionROM.Image.Value);
|
|
if(disk.PCMCIA != null && disk.PCMCIA.CIS != null)
|
|
files.Add(disk.PCMCIA.CIS.Image);
|
|
if(disk.SCSI != null)
|
|
{
|
|
if(disk.SCSI.Inquiry != null)
|
|
files.Add(disk.SCSI.Inquiry.Image);
|
|
if(disk.SCSI.LogSense != null)
|
|
files.Add(disk.SCSI.LogSense.Image);
|
|
if(disk.SCSI.ModeSense != null)
|
|
files.Add(disk.SCSI.ModeSense.Image);
|
|
if(disk.SCSI.ModeSense10 != null)
|
|
files.Add(disk.SCSI.ModeSense10.Image);
|
|
if(disk.SCSI.EVPD != null)
|
|
{
|
|
foreach(EVPDType evpd in disk.SCSI.EVPD)
|
|
files.Add(evpd.Image);
|
|
}
|
|
}
|
|
if(disk.SecureDigital != null)
|
|
{
|
|
if(disk.SecureDigital.CID != null)
|
|
files.Add(disk.SecureDigital.CID.Image);
|
|
if(disk.SecureDigital.CSD != null)
|
|
files.Add(disk.SecureDigital.CSD.Image);
|
|
if(disk.MultiMediaCard.ExtendedCSD != null)
|
|
files.Add(disk.MultiMediaCard.ExtendedCSD.Image);
|
|
}
|
|
if(disk.TapeInformation != null)
|
|
{
|
|
foreach(TapePartitionType tapePart in disk.TapeInformation)
|
|
files.Add(tapePart.Image.Value);
|
|
}
|
|
if(disk.Track != null)
|
|
{
|
|
foreach(BlockTrackType track in disk.Track)
|
|
files.Add(track.Image.Value);
|
|
}
|
|
if(disk.USB != null && disk.USB.Descriptors != null)
|
|
files.Add(disk.USB.Descriptors.Image);
|
|
|
|
foreach(string file in files)
|
|
lstFilesForMedia.Remove(file);
|
|
|
|
Context.selectedFile = "";
|
|
tabGeneral.Visible = true;
|
|
tabKeywords.Visible = true;
|
|
tabBarcodes.Visible = true;
|
|
tabCategories.Visible = true;
|
|
tabLanguages.Visible = true;
|
|
tabSystems.Visible = true;
|
|
tabArchitectures.Visible = true;
|
|
tabDiscs.Visible = true;
|
|
prgAddDisk1.Visible = false;
|
|
prgAddDisk2.Visible = false;
|
|
lblAddDisk1.Visible = false;
|
|
lblAddDisk2.Visible = false;
|
|
btnCancel.Visible = true;
|
|
btnOK.Visible = true;
|
|
btnEditDisk.Visible = true;
|
|
btnClearDisks.Visible = true;
|
|
Workers.Failed -= OnDiskAddFailed;
|
|
Workers.Finished -= OnDiskAddFinished;
|
|
Workers.UpdateProgress -= UpdateDiskProgress1;
|
|
Workers.UpdateProgress2 -= UpdateDiskProgress2;
|
|
Context.workingDisk = null;
|
|
btnStopAddDisk.Visible = false;
|
|
btnAddDisk.Visible = true;
|
|
btnRemoveDisk.Visible = true;
|
|
thdDisk = null;
|
|
});
|
|
}
|
|
|
|
protected void OnBtnClearDisksClicked(object sender, EventArgs e)
|
|
{
|
|
lstDisks.Clear();
|
|
// TODO: Don't add files that are discs
|
|
FillFilesCombos();
|
|
}
|
|
|
|
protected void OnBtnRemoveDiskClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeDisks.SelectedItem != null)
|
|
{
|
|
lstFilesForMedia.Add(((DiskEntry)treeDisks.SelectedItem).path);
|
|
lstDisks.Remove((DiskEntry)treeDisks.SelectedItem);
|
|
}
|
|
}
|
|
|
|
protected void OnBtnCancelClicked(object sender, EventArgs e)
|
|
{
|
|
Modified = false;
|
|
Close();
|
|
}
|
|
|
|
protected void OnBtnOKClicked(object sender, EventArgs e)
|
|
{
|
|
Metadata = new CICMMetadataType();
|
|
List<ArchitecturesTypeArchitecture> architectures = new List<ArchitecturesTypeArchitecture>();
|
|
List<BarcodeType> barcodes = new List<BarcodeType>();
|
|
List<BlockMediaType> disks = new List<BlockMediaType>();
|
|
List<string> categories = new List<string>();
|
|
List<string> keywords = new List<string>();
|
|
List<LanguagesTypeLanguage> languages = new List<LanguagesTypeLanguage>();
|
|
List<OpticalDiscType> discs = new List<OpticalDiscType>();
|
|
List<string> subcategories = new List<string>();
|
|
List<string> systems = new List<string>();
|
|
|
|
if(!string.IsNullOrEmpty(txtAuthor.Text))
|
|
Metadata.Author = txtAuthor.Text.Split(',');
|
|
if(!string.IsNullOrEmpty(txtDeveloper.Text))
|
|
Metadata.Developer = txtDeveloper.Text.Split(',');
|
|
if(!string.IsNullOrEmpty(txtName.Text))
|
|
Metadata.Name = txtName.Text;
|
|
if(!string.IsNullOrEmpty(txtPartNumber.Text))
|
|
Metadata.PartNumber = txtPartNumber.Text;
|
|
if(!string.IsNullOrEmpty(txtPerformer.Text))
|
|
Metadata.Performer = txtPerformer.Text.Split(',');
|
|
if(!string.IsNullOrEmpty(txtPublisher.Text))
|
|
Metadata.Publisher = txtPublisher.Text.Split(',');
|
|
if(!string.IsNullOrEmpty(txtSerialNumber.Text))
|
|
Metadata.SerialNumber = txtSerialNumber.Text;
|
|
if(!string.IsNullOrEmpty(txtVersion.Text))
|
|
Metadata.Version = txtVersion.Text;
|
|
if(!chkReleaseDate.Checked.Value)
|
|
{
|
|
Metadata.ReleaseDate = cldReleaseDate.Value.Value;
|
|
Metadata.ReleaseDateSpecified = true;
|
|
}
|
|
if(chkKnownReleaseType.Checked.Value)
|
|
{
|
|
Metadata.ReleaseType = cmbReleaseType.SelectedValue;
|
|
Metadata.ReleaseTypeSpecified = true;
|
|
}
|
|
|
|
foreach(StringEntry entry in lstArchitectures)
|
|
architectures.Add((ArchitecturesTypeArchitecture)Enum.Parse(typeof(ArchitecturesTypeArchitecture), entry.str));
|
|
|
|
foreach(BarcodeEntry entry in lstBarcodes)
|
|
{
|
|
BarcodeType barcode = new BarcodeType();
|
|
barcode.type = entry.type;
|
|
barcode.Value = entry.code;
|
|
barcodes.Add(barcode);
|
|
}
|
|
|
|
foreach(DiskEntry entry in lstDisks)
|
|
disks.Add(entry.disk);
|
|
|
|
foreach(StringEntry entry in lstCategories)
|
|
categories.Add(entry.str);
|
|
|
|
foreach(StringEntry entry in lstKeywords)
|
|
keywords.Add(entry.str);
|
|
|
|
foreach(StringEntry entry in lstLanguages)
|
|
languages.Add((LanguagesTypeLanguage)Enum.Parse(typeof(LanguagesTypeLanguage), entry.str));
|
|
|
|
foreach(DiscEntry entry in lstDiscs)
|
|
discs.Add(entry.disc);
|
|
|
|
foreach(StringEntry entry in lstSubcategories)
|
|
subcategories.Add(entry.str);
|
|
|
|
foreach(StringEntry entry in lstSystems)
|
|
systems.Add(entry.str);
|
|
|
|
if(architectures.Count > 0)
|
|
Metadata.Architectures = architectures.ToArray();
|
|
if(barcodes.Count > 0)
|
|
Metadata.Barcodes = barcodes.ToArray();
|
|
if(disks.Count > 0)
|
|
Metadata.BlockMedia = disks.ToArray();
|
|
if(categories.Count > 0)
|
|
Metadata.Categories = categories.ToArray();
|
|
if(keywords.Count > 0)
|
|
Metadata.Keywords = keywords.ToArray();
|
|
if(languages.Count > 0)
|
|
Metadata.Languages = languages.ToArray();
|
|
if(discs.Count > 0)
|
|
Metadata.OpticalDisc = discs.ToArray();
|
|
if(subcategories.Count > 0)
|
|
Metadata.Subcategories = subcategories.ToArray();
|
|
if(systems.Count > 0)
|
|
Metadata.Systems = systems.ToArray();
|
|
|
|
Metadata.Magazine = magazines;
|
|
Metadata.Book = books;
|
|
Metadata.RequiredOperatingSystems = requiredOses;
|
|
Metadata.UserManual = usermanuals;
|
|
Metadata.Advertisement = adverts;
|
|
Metadata.LinearMedia = linearmedias;
|
|
Metadata.PCICard = pcis;
|
|
Metadata.AudioMedia = audiomedias;
|
|
|
|
Modified = true;
|
|
Close();
|
|
}
|
|
|
|
protected void OnBtnEditDiscClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeDiscs.SelectedItem == null)
|
|
return;
|
|
|
|
dlgOpticalDisc _dlgOpticalDisc = new dlgOpticalDisc();
|
|
_dlgOpticalDisc.Title = string.Format("Editing disc metadata for {0}", ((DiscEntry)treeDiscs.SelectedItem).path);
|
|
_dlgOpticalDisc.Metadata = ((DiscEntry)treeDiscs.SelectedItem).disc;
|
|
_dlgOpticalDisc.FillFields();
|
|
_dlgOpticalDisc.ShowModal(this);
|
|
|
|
if(_dlgOpticalDisc.Modified)
|
|
{
|
|
lstDiscs.Remove((DiscEntry)treeDiscs.SelectedItem);
|
|
lstDiscs.Add(new DiscEntry { path = _dlgOpticalDisc.Metadata.Image.Value, disc = _dlgOpticalDisc.Metadata });
|
|
}
|
|
}
|
|
|
|
protected void OnBtnEditDiskClicked(object sender, EventArgs e)
|
|
{
|
|
if(treeDisks.SelectedItem == null)
|
|
return;
|
|
|
|
dlgBlockMedia _dlgBlockMedia = new dlgBlockMedia();
|
|
_dlgBlockMedia.Title = string.Format("Editing disk metadata for {0}", ((DiskEntry)treeDisks.SelectedItem).path);
|
|
_dlgBlockMedia.Metadata = ((DiskEntry)treeDisks.SelectedItem).disk;
|
|
_dlgBlockMedia.FillFields();
|
|
_dlgBlockMedia.ShowModal(this);
|
|
|
|
if(_dlgBlockMedia.Modified)
|
|
|
|
{
|
|
lstDisks.Remove((DiskEntry)treeDisks.SelectedItem);
|
|
lstDisks.Add(new DiskEntry { path = _dlgBlockMedia.Metadata.Image.Value, disk = _dlgBlockMedia.Metadata });
|
|
}
|
|
}
|
|
}
|
|
} |