summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-01-03 11:21:48 +0100
committerMarc-André Lureau <marcandre.lureau@gmail.com>2013-01-06 16:38:26 +0100
commit886d64819cb0b686b097b9a05cec9dd9f566e37a (patch)
tree1b74d49c0a97326026f0071e9d371dfefa51840f /src
parent6a8d0886771cdf6fb9dbca129fca95cf41da2f71 (diff)
downloadmsitools-886d64819cb0b686b097b9a05cec9dd9f566e37a.tar.gz
msitools-886d64819cb0b686b097b9a05cec9dd9f566e37a.tar.xz
msitools-886d64819cb0b686b097b9a05cec9dd9f566e37a.zip
Populate Media table
Diffstat (limited to 'src')
-rw-r--r--src/builder.vala4
-rw-r--r--src/msi.vala21
-rw-r--r--src/wix.vala20
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";