summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlshprung <lshprung@yahoo.com>2021-12-14 16:47:06 -0800
committerlshprung <lshprung@yahoo.com>2021-12-14 16:47:06 -0800
commitaff04c701f059296185e99795d203f81553d1251 (patch)
tree2ad219d13cf1d9673f71e073963544e01db0148d
parent71fb0d29f0b817b0814b4b62e1bf4beed6e4a443 (diff)
Fixed bug with binary data
-rwxr-xr-xbuild_db.plx34
1 files changed, 32 insertions, 2 deletions
diff --git a/build_db.plx b/build_db.plx
index 83d3a59..99bc182 100755
--- a/build_db.plx
+++ b/build_db.plx
@@ -50,6 +50,24 @@ sub build_extension_hash {
}
+# Look for control characters in a string to attempt to detect binary data
+# @_[0] -> string argument
+# Returns 1 if @_[0] is in control range (0-19); 0 otherwise
+sub detect_binary {
+ my $unicode_val;
+
+ utf8::encode($_[0]);
+ for my $char (split("", $_[0])){
+ $unicode_val = sprintf("%X", ord($char));
+ $unicode_val = hex("0x$unicode_val");
+ if ($unicode_val < 20 and $unicode_val > 0){
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
# Scan a directory recursively, return an array of files (optionally, matching a certain file extension or extensions)
# @_[0] -> $music_dir
# @_[1] -> current_depth (should start at 1)
@@ -270,7 +288,20 @@ for my $file (@file_list){
# Loop to add all the columns for $statement
for my $i (sort(keys %data)){
- next if $i eq "MCDI"; #FIXME MCDI field creates issues
+ #print "$i -> $data{$i}\t";
+ #print "\n";
+
+ #if ($i eq "MCDI"){
+ # utf8::encode($data{$i});
+ # detect_binary($data{$i});
+ # print $data{$i}, "\n";
+ # #print length($data{$i}), "\n";
+ # for my $char (split("", $data{$i})){
+ # printf("%s: 0x%X\n", $char, ord($char));
+ # }
+ #}
+
+ next if detect_binary($data{$i});#TODO detect_binary creates false positives, for example, LYRICS tag
$data{$i} =~ s/\"/\'\'/g;
$statement = $statement . "\"$i\" = \"";
@@ -294,7 +325,6 @@ for my $file (@file_list){
utf8::encode($statement);
$statement = $statement . "WHERE PATH = \"$file\";";
- #FIXME MCDI tag is binary. This should be considered and handled in a secondary file
db_cmd($dbh, $statement, "Updated tags for $file");
}