Fix the UOID == 0 problem in already existing config files. svn path=/trunk/kdepim/; revision=240611wilder-work
parent
1834734378
commit
6c5b1513b5
4 changed files with 94 additions and 0 deletions
@ -0,0 +1,88 @@ |
||||
#!/usr/bin/perl -w |
||||
|
||||
use strict; |
||||
|
||||
# this script goes through all the config keys that deal with |
||||
# identities and replaces UOID 0 (which was erroneously always assigned to the |
||||
# first identity) with a non-zero UOID. |
||||
|
||||
# read the whole config file |
||||
my $currentGroup = ""; |
||||
my %configFile; |
||||
while ( <> ) { |
||||
chomp; |
||||
next if ( /^$/ ); # skip empty lines |
||||
next if ( /^\#/ ); # skip comments |
||||
if ( /^\[/ ) { # group begin |
||||
$currentGroup = $_; |
||||
next; |
||||
} elsif ( $currentGroup ne "" ) { # normal entry |
||||
my ($key,$value) = split /=/; |
||||
$configFile{$currentGroup}{$key}=$value; |
||||
} |
||||
} |
||||
|
||||
# filter out identity groups |
||||
my @identityGroups = grep { /^\[Identity \#\d+\]/ } keys %configFile; |
||||
|
||||
# create new UOID for an identity with UOID 0 |
||||
my $newUoid = 0; |
||||
foreach my $identityGroup (@identityGroups) { |
||||
my $oldUoid = $configFile{$identityGroup}{'uoid'}; |
||||
if ( $oldUoid eq "0" ) { |
||||
$newUoid = int(rand 0x7fFFffFE) + 1; |
||||
# change the uoid entry this identity |
||||
print "# DELETE ${identityGroup}uoid\n"; |
||||
print "${identityGroup}\nuoid=$newUoid\n"; |
||||
} |
||||
} |
||||
|
||||
if ( $newUoid != 0 ) { |
||||
# change the default identity value if it was 0 |
||||
my $tempId = $configFile{'[General]'}{'Default Identity'}; |
||||
if ( $tempId eq "0" ) { |
||||
print "# DELETE [General]Default Identity\n"; |
||||
print "[General]\nDefault Identity=$newUoid\n"; |
||||
} |
||||
|
||||
# [Composer]previous-identity |
||||
$tempId = $configFile{'[Composer]'}{'previous-identity'}; |
||||
if ( $tempId eq "0" ) { |
||||
print "# DELETE [Composer]previous-identity\n"; |
||||
print "[Composer]\nprevious-identity=$newUoid\n"; |
||||
} |
||||
|
||||
# Now, go through all [Folder-*] groups and replace all occurrences of |
||||
# Identity=0 with Identity=$newUoid |
||||
my @folderGroups = grep { /^\[Folder-.*\]/ } keys %configFile; |
||||
|
||||
foreach my $folderGroup ( @folderGroups ) { |
||||
$tempId = $configFile{$folderGroup}{'Identity'}; |
||||
if ( $tempId eq "0" ) { |
||||
print "# DELETE ${folderGroup}Identity\n"; |
||||
print "$folderGroup\nIdentity=$newUoid\n"; |
||||
} |
||||
} |
||||
|
||||
# Now, go through all [Filter #n] groups and replace all occurrences of |
||||
# UOID 0 as argument to the 'set identity' filter action with the new UOID |
||||
my @filterGroups = grep { /^\[Filter \#\d+\]/ } keys %configFile; |
||||
|
||||
foreach my $filterGroup (@filterGroups) { |
||||
my $numActions = +$configFile{$filterGroup}{'actions'}; |
||||
# go through all actions in search for "set identity": |
||||
for ( my $i = 0 ; $i < $numActions ; ++$i ) { |
||||
my $actionName = "action-name-$i"; |
||||
my $actionArgs = "action-args-$i"; |
||||
if ( $configFile{$filterGroup}{$actionName} eq "set identity" ) { |
||||
# found one: |
||||
# replace it's argument with the new UOID if necessary |
||||
$tempId = $configFile{$filterGroup}{$actionArgs};; |
||||
if ( $tempId eq "0" ) { |
||||
print "# DELETE $filterGroup$actionArgs\n"; |
||||
print "$filterGroup\n$actionArgs=$newUoid\n"; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue