diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2013-01-03 11:21:48 +0100 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@gmail.com> | 2013-01-06 16:38:26 +0100 |
commit | 886d64819cb0b686b097b9a05cec9dd9f566e37a (patch) | |
tree | 1b74d49c0a97326026f0071e9d371dfefa51840f /src | |
parent | 6a8d0886771cdf6fb9dbca129fca95cf41da2f71 (diff) | |
download | msitools-886d64819cb0b686b097b9a05cec9dd9f566e37a.tar.gz msitools-886d64819cb0b686b097b9a05cec9dd9f566e37a.tar.xz msitools-886d64819cb0b686b097b9a05cec9dd9f566e37a.zip |
Populate Media table
Diffstat (limited to 'src')
-rw-r--r-- | src/builder.vala | 4 | ||||
-rw-r--r-- | src/msi.vala | 21 | ||||
-rw-r--r-- | src/wix.vala | 20 |
3 files changed, 44 insertions, 1 deletions
diff --git a/src/builder.vala b/src/builder.vala index 439447b..151c79a 100644 --- a/src/builder.vala +++ b/src/builder.vala @@ -39,6 +39,10 @@ namespace Wixl { public override void visit_property (WixProperty prop) throws GLib.Error { db.table_property.add (prop.Id, prop.Value); } + + public override void visit_media (WixMedia media) throws GLib.Error { + db.table_media.add (media.Id, media.EmbedCab, media.DiskPrompt, "#" + media.Cabinet); + } } } // Wixl diff --git a/src/msi.vala b/src/msi.vala index f9920ee..24090be 100644 --- a/src/msi.vala +++ b/src/msi.vala @@ -240,9 +240,26 @@ namespace Wixl { name = "Media"; } + public void add (string DiskId, string LastSequence, string DiskPrompt, string Cabinet) throws GLib.Error { + var rec = new Libmsi.Record (4); + + if (!rec.set_int (1, int.parse (DiskId)) || + !rec.set_int (2, int.parse (LastSequence)) || + !rec.set_string (3, DiskPrompt) || + !rec.set_string (4, Cabinet)) + throw new Wixl.Error.FAILED ("failed to add record"); + + records.append (rec); + + } + public override void create (Libmsi.Database db) throws GLib.Error { var query = new Libmsi.Query (db, "CREATE TABLE `Media` (`DiskId` INT NOT NULL, `LastSequence` LONG NOT NULL, `DiskPrompt` CHAR(64) LOCALIZABLE, `Cabinet` CHAR(255), `VolumeLabel` CHAR(32), `Source` CHAR(72) PRIMARY KEY `DiskId`)"); query.execute (null); + + query = new Libmsi.Query (db, "INSERT INTO `Media` (`DiskId`, `LastSequence`, `DiskPrompt`, `Cabinet`) VALUES (?, ?, ?, ?)"); + foreach (var r in records) + query.execute (r); } } @@ -335,6 +352,7 @@ namespace Wixl { public MsiSummaryInfo info; public MsiTableProperty table_property; public MsiTableIcon table_icon; + public MsiTableMedia table_media; HashTable<string, MsiTable> tables; @@ -359,6 +377,7 @@ namespace Wixl { tables = new HashTable<string, MsiTable> (str_hash, str_equal); table_property = new MsiTableProperty (); table_icon = new MsiTableIcon (); + table_media = new MsiTableMedia (); foreach (var t in new MsiTable[] { new MsiTableAdminExecuteSequence (), @@ -368,7 +387,7 @@ namespace Wixl { new MsiTableFile (), new MsiTableInstallExecuteSequence (), new MsiTableInstallUISequence (), - new MsiTableMedia (), + table_media, table_property, table_icon, new MsiTable_Validation () diff --git a/src/wix.vala b/src/wix.vala index ec98688..1de68d0 100644 --- a/src/wix.vala +++ b/src/wix.vala @@ -5,6 +5,7 @@ namespace Wixl { public abstract void visit_icon (WixIcon icon) throws GLib.Error; public abstract void visit_package (WixPackage package) throws GLib.Error; public abstract void visit_property (WixProperty prop) throws GLib.Error; + public abstract void visit_media (WixMedia media) throws GLib.Error; } public abstract class WixElement: Object { @@ -175,6 +176,11 @@ namespace Wixl { prop.load (child); add_child (prop); continue; + case "Media": + var media = new WixMedia (); + media.load (child); + add_child (media); + continue; } break; } @@ -188,6 +194,20 @@ namespace Wixl { } } + public class WixMedia: WixElement { + static construct { + name = "Media"; + } + + public string Cabinet { get; set; } + public string EmbedCab { get; set; } + public string DiskPrompt { get; set; } + + public override void accept (WixElementVisitor visitor) throws GLib.Error { + visitor.visit_media (this); + } + } + class WixRoot: WixElement { static construct { name = "Wix"; |