blob: 6225370482c69d6ca83a46204c52d9f4b6d6ff44 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#!/bin/sh
# vim:set ft=tcl: \
exec tclsh "$0" "$@"
# require Tcl version of at least 8.5 since I use 'ni' and 'in' in expressions for lists
package require Tcl 8.5
package require sqlite3
if { $argc < 1 } {
puts {Populates photo cache directory for users from the database}
puts {Usage:}
puts " $argv0 database_filename"
puts {}
puts {Example:}
puts " $argv0 2013_Spring_Phys742"
exit
}
set dbfile [lindex $argv 0]
source ./GradeBook_lib.tcl
set config_file "./gb_config.tcl"
if { [file exists $config_file] && ("$config_file" ne "") } {
source $config_file
} else {
puts "error: config file {$config_file} does not exist"
exit
}
if { [file exists $dbfile] } {
sqlite3 db $dbfile
} else {
puts "error: non existing DB filename {$dbfile}"
exit
}
proc getAllIds {ids_col table_with_ids} {
set ids {}
set eval_str "SELECT \"$ids_col\" FROM \"$table_with_ids\""
set err [catch {
db eval $eval_str v {
if { [info exist v($ids_col)] } {
lappend ids $v($ids_col)
}
}
} errStat ]
if { $err } {
puts "the following error happen: $errStat" msg_level_critical
}
return $ids
}
proc cachePhotoForId { IdNum } {
# attempt to cache the photo for a given id
global GradebookServerConfig
set photo_album_base_url $GradebookServerConfig(photo_album_base_url)
set photo_album_cache $GradebookServerConfig(photo_album_cache)
# generate url pointing to a photo of a user with the given IdNum
set photo_file "${IdNum}.jpg"
set cached_photo_file "$photo_album_cache/${photo_file}"
set url "$photo_album_base_url/$photo_file"
if { [file exists "$cached_photo_file"] } {
# file already cached no need to download
return
}
if { ![file exists "$photo_album_cache"] } {
# cache directory missing let's make it
set errMkDir [catch {
file mkdir "$photo_album_cache"
} errStat ]
if { $errMkDir } {
puts "Error: $errStat"
return
}
}
# Download url to cache
# below replacing whitespace with %20 and # with %23 in the URL in $target
set url [string map {{ } %20 {#} %23 } $url]
set command_str exec
lappend command_str wget
lappend command_str -q
lappend command_str -c
lappend command_str --output-document=$cached_photo_file
lappend command_str $url
# TODO: devise some sort of lock mechanism to protect against duplicate downloads
set err [catch {eval $command_str} result]
if { $err } {
puts "Something wrong with download of {$url}"
# remove erroneous download file
file delete $cached_photo_file
} else {
puts "Successful download of {$url}"
}
}
set table_with_ids GradesTable
set ids_col IdNum
if { ![doesColumnExists $ids_col $table_with_ids] } {
puts "something wrong with database: the column {$ids_col} does not exist in table {$table_with_ids}"
db close
exit
}
set ids [getAllIds "$ids_col" "$table_with_ids"]
foreach id $ids {
if { "$id" eq "" } {
# invalid/useless id
continue
}
cachePhotoForId $id
}
db close
# vim: ts=2 sw=2 foldmethod=indent:
|