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
|
-- This file is part of the LrMediaWiki project and distributed under the terms
-- of the MIT license (see LICENSE.txt file in the project root directory or
-- [0]). See [1] for more information about LrMediaWiki.
--
-- Copyright (C) 2014 by the LrMediaWiki team (see CREDITS.txt file in the
-- project root directory or [2])
--
-- [0] <https://raw.githubusercontent.com/LrMediaWiki/LrMediaWiki/master/LICENSE.txt>
-- [1] <https://commons.wikimedia.org/wiki/Commons:LrMediaWiki>
-- [2] <https://raw.githubusercontent.com/LrMediaWiki/LrMediaWiki/master/CREDITS.txt>
-- Code status:
-- doc: missing
-- i18n: complete
local LrDialogs = import 'LrDialogs'
local LrErrors = import 'LrErrors'
local LrPathUtils = import 'LrPathUtils'
local MediaWikiApi = require 'MediaWikiApi'
local MediaWikiInterface = {
username = nil,
password = nil,
loggedIn = false,
fileDescriptionPattern = [=[== {{int:filedesc}} ==
{{Information
|Description=%s
|Source=%s
|Date=%s
|Author=%s
|Permission=
|other_versions=
|other_fields=%s
}}
== {{int:license-header}} ==
%s
%s[[Category:Uploaded with LrMediaWiki]]]=],
}
MediaWikiInterface.prepareUpload = function(username, password, apiPath)
if username and password then
MediaWikiInterface.username = username
MediaWikiInterface.password = password
MediaWikiApi.apiPath = apiPath
local loginResult = MediaWikiApi.login(username, password)
if loginResult ~= true then
LrErrors.throwUserError(LOC('$$$/LrMediaWiki/Interface/LoginFailed=Login failed: ^1.', loginResult))
end
MediaWikiInterface.loggedIn = true
else
LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Interface/UsernameOrPasswordMissing=Username or password missing')
end
end
MediaWikiInterface.uploadFile = function(filePath, description)
if not MediaWikiInterface.loggedIn then
LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Interface/Internal/NotLoggedIn=Internal error: not logged in before upload.')
end
local targetFileName = LrPathUtils.leafName(filePath)
local ignorewarnings = false
if MediaWikiApi.existsFile(targetFileName) then
local continue = LrDialogs.confirm(LOC '$$$/LrMediaWiki/Interface/InUse=File name already in use', LOC('$$$/LrMediaWiki/Interface/InUse/Details=There already is a file with the name ^1. Overwrite? (File description won\'t be changed.)', targetFileName))
if continue == 'ok' then
ignorewarnings = true
else
return
end
end
local uploadResult = MediaWikiApi.upload(targetFileName, filePath, description, 'Uploaded with LrMediaWiki', ignorewarnings)
if uploadResult ~= true then
LrErrors.throwUserError(LOC('$$$/LrMediaWiki/Interface/UploadFailed=Upload failed: ^1', uploadResult))
end
end
MediaWikiInterface.buildFileDescription = function(description, source, timestamp, author, license, other, categories, additionalCategories)
local categoriesString = ''
for category in string.gmatch(categories, '[^;]+') do
if category then
categoriesString = categoriesString .. string.format('[[Category:%s]]\n', category)
end
end
for category in string.gmatch(additionalCategories, '[^;]+') do
if category then
categoriesString = categoriesString .. string.format('[[Category:%s]]\n', category)
end
end
return string.format(MediaWikiInterface.fileDescriptionPattern, description, source, timestamp, author, other, license, categoriesString)
end
return MediaWikiInterface
|