From 8deeb71274124b2c93a64b49dc3581cee4453cd9 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Mon, 25 Aug 2014 20:07:24 +0200 Subject: Fix #5: Ask for comment for reuploads and #6: Allow new filenames for duplicates. --- .../MediaWikiExportServiceProvider.lua | 27 +++++----- mediawiki.lrdevplugin/MediaWikiInterface.lua | 57 ++++++++++++++++++-- mediawiki.lrdevplugin/MediaWikiUtils.lua | 22 ++++++++ mediawiki.lrdevplugin/TranslatedStrings_de.txt | 60 ++++++++++++---------- 4 files changed, 119 insertions(+), 47 deletions(-) create mode 100644 mediawiki.lrdevplugin/MediaWikiUtils.lua diff --git a/mediawiki.lrdevplugin/MediaWikiExportServiceProvider.lua b/mediawiki.lrdevplugin/MediaWikiExportServiceProvider.lua index 81f9839..bd903f5 100755 --- a/mediawiki.lrdevplugin/MediaWikiExportServiceProvider.lua +++ b/mediawiki.lrdevplugin/MediaWikiExportServiceProvider.lua @@ -22,13 +22,10 @@ local bind = LrView.bind local Info = require 'Info' local MediaWikiInterface = require 'MediaWikiInterface' +local MediaWikiUtils = require 'MediaWikiUtils' local MediaWikiExportServiceProvider = {} -local isStringEmpty = function(str) - return str == nil or string.match(str, '^%s*$') ~= nil -end - MediaWikiExportServiceProvider.processRenderedPhotos = function(functionContext, exportContext) -- configure progess display local exportSession = exportContext.exportSession @@ -40,22 +37,22 @@ MediaWikiExportServiceProvider.processRenderedPhotos = function(functionContext, local exportSettings = assert(exportContext.propertyTable) -- require username, password, apipath, license, author, source - if isStringEmpty(exportSettings.username) then + if MediaWikiUtils.isStringEmpty(exportSettings.username) then LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Export/NoUsername=No username given!') end - if isStringEmpty(exportSettings.password) then + if MediaWikiUtils.isStringEmpty(exportSettings.password) then LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Export/NoPassword=No password given!') end - if isStringEmpty(exportSettings.api_path) then + if MediaWikiUtils.isStringEmpty(exportSettings.api_path) then LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Export/NoApiPath=No API path given!') end - if isStringEmpty(exportSettings.info_license) then + if MediaWikiUtils.isStringEmpty(exportSettings.info_license) then LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Export/NoLicense=No license given!') end - if isStringEmpty(exportSettings.info_author) then + if MediaWikiUtils.isStringEmpty(exportSettings.info_author) then LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Export/NoAuthor=No author given!') end - if isStringEmpty(exportSettings.info_source) then + if MediaWikiUtils.isStringEmpty(exportSettings.info_source) then LrErrors.throwUserError(LOC '$$$/LrMediaWiki/Export/NoSource=No source given!') end @@ -73,16 +70,16 @@ MediaWikiExportServiceProvider.processRenderedPhotos = function(functionContext, local descriptionDe = photo:getPropertyForPlugin(Info.LrToolkitIdentifier, 'description_de') local descriptionAdditional = photo:getPropertyForPlugin(Info.LrToolkitIdentifier, 'description_additional') local description = '' - if not isStringEmpty(descriptionEn) then + if not MediaWikiUtils.isStringEmpty(descriptionEn) then description = '{{en|1=' .. descriptionEn .. '}}\n' end - if not isStringEmpty(descriptionDe) then + if not MediaWikiUtils.isStringEmpty(descriptionDe) then description = description .. '{{de|1=' .. descriptionDe .. '}}\n' end - if not isStringEmpty(descriptionAdditional) then + if not MediaWikiUtils.isStringEmpty(descriptionAdditional) then description = description .. descriptionAdditional end - if isStringEmpty(description) then + if MediaWikiUtils.isStringEmpty(description) then rendition:uploadFailed(LOC '$$$/LrMediaWiki/Export/NoDescription=No description given for this file!') end local source = exportSettings.info_source @@ -95,7 +92,7 @@ MediaWikiExportServiceProvider.processRenderedPhotos = function(functionContext, local license = exportSettings.info_license local other = exportSettings.info_other local categories = exportSettings.info_categories - local additionalCategories = photo:getPropertyForPlugin(Info.LrToolkitIdentifier, 'categories') + local additionalCategories = photo:getPropertyForPlugin(Info.LrToolkitIdentifier, 'categories') or '' local fileDescription = MediaWikiInterface.buildFileDescription(description, source, timestamp, author, license, other, categories, additionalCategories) diff --git a/mediawiki.lrdevplugin/MediaWikiInterface.lua b/mediawiki.lrdevplugin/MediaWikiInterface.lua index 709129d..5201b2d 100755 --- a/mediawiki.lrdevplugin/MediaWikiInterface.lua +++ b/mediawiki.lrdevplugin/MediaWikiInterface.lua @@ -13,12 +13,15 @@ -- doc: missing -- i18n: complete +local LrBinding = import 'LrBinding' local LrDialogs = import 'LrDialogs' local LrErrors = import 'LrErrors' +local LrFunctionContext = import 'LrFunctionContext' local LrPathUtils = import 'LrPathUtils' +local LrView = import 'LrView' local MediaWikiApi = require 'MediaWikiApi' - +local MediaWikiUtils = require 'MediaWikiUtils' local MediaWikiInterface = { username = nil, @@ -54,21 +57,65 @@ MediaWikiInterface.prepareUpload = function(username, password, apiPath) end end -MediaWikiInterface.uploadFile = function(filePath, description) +MediaWikiInterface.prompt = function(title, label, default) + return LrFunctionContext.callWithContext('MediaWikiInterface.prompt', function(context) + return MediaWikiInterface._prompt(context, title, label, default) + end) +end + +MediaWikiInterface._prompt = function(functionContext, title, label, default) + local factory = LrView.osFactory() + local properties = LrBinding.makePropertyTable(functionContext) + properties.dialogValue = default + local contents = factory:row { + spacing = factory:label_spacing(), + bind_to_object = properties, + factory:static_text { + title = label, + }, + factory:edit_field { + fill_horizontal = 1, + value = LrView.bind('dialogValue'), + width_in_chars = 20, + }, + } + local dialogResult = LrDialogs.presentModalDialog({ + title = title, + contents = contents, + }) + local result = nil + if dialogResult == 'ok' then + result = properties.dialogValue + end + return result +end + +MediaWikiInterface.uploadFile = function(filePath, description, fileName) 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 comment = 'Uploaded with LrMediaWiki' + local targetFileName = fileName or 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)) + 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), LOC '$$$/LrMediaWiki/Interface/InUse/OK=Overwrite', LOC '$$$/LrMediaWiki/Interface/InUse/Cancel=Cancel', LOC '$$$/LrMediaWiki/Interface/InUse/Rename=Rename') if continue == 'ok' then + local newComment = MediaWikiInterface.prompt(LOC '$$$/LrMediaWiki/Interface/VersionComment=Version comment', LOC '$$$/LrMediaWiki/Interface/VersionComment=Version comment') + if not MediaWikiUtils.isStringEmpty(newComment) then + comment = newComment .. ' (LrMediaWiki)' + end ignorewarnings = true + elseif continue == 'other' then + local newFileName = MediaWikiInterface.prompt(LOC '$$$/LrMediaWiki/Interface/Rename=Rename file', LOC '$$$/LrMediaWiki/Interface/Rename/NewName=New file name', targetFileName) + if not MediaWikiUtils.isStringEmpty(newFileName) and newFileName ~= targetFileName then + MediaWikiInterface.uploadFile(filePath, description, newFileName) + end + return else return end end - local uploadResult = MediaWikiApi.upload(targetFileName, filePath, description, 'Uploaded with LrMediaWiki', ignorewarnings) + local uploadResult = MediaWikiApi.upload(targetFileName, filePath, description, comment, ignorewarnings) if uploadResult ~= true then LrErrors.throwUserError(LOC('$$$/LrMediaWiki/Interface/UploadFailed=Upload failed: ^1', uploadResult)) end diff --git a/mediawiki.lrdevplugin/MediaWikiUtils.lua b/mediawiki.lrdevplugin/MediaWikiUtils.lua new file mode 100644 index 0000000..6093b8a --- /dev/null +++ b/mediawiki.lrdevplugin/MediaWikiUtils.lua @@ -0,0 +1,22 @@ +-- 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] +-- [1] +-- [2] + +-- Code status: +-- doc: missing +-- i18n: complete + +local MediaWikiUtils = {} + +MediaWikiUtils.isStringEmpty = function(str) + return str == nil or string.match(str, '^%s*$') ~= nil +end + +return MediaWikiUtils \ No newline at end of file diff --git a/mediawiki.lrdevplugin/TranslatedStrings_de.txt b/mediawiki.lrdevplugin/TranslatedStrings_de.txt index 716fba7..a2b574e 100755 --- a/mediawiki.lrdevplugin/TranslatedStrings_de.txt +++ b/mediawiki.lrdevplugin/TranslatedStrings_de.txt @@ -1,35 +1,41 @@ -"$$$/LrMediaWiki/PluginName=MediaWiki für Lightroom" -"$$$/LrMediaWiki/MediaWiki=MediaWiki" -"$$$/LrMediaWiki/Export/Progress=Exportiere ^1 Bilder in ein MediaWiki" -"$$$/LrMediaWiki/Export/Progress/One=Exportiere ein Bild in ein MediaWiki" -"$$$/LrMediaWiki/Export/NoUsername=Kein Benutzername angegeben!" -"$$$/LrMediaWiki/Export/NoPassword=Keine Passwort angegeben!" +"$$$/LrMediaWiki/Api/HttpError=HTTP-Status ^1 erhalten." +"$$$/LrMediaWiki/Api/MediaWikiError=Der MediaWiki-Fehler ^1 ist aufgetreten: ^2" "$$$/LrMediaWiki/Export/NoApiPath=Kein API-Pfad angegeben!" -"$$$/LrMediaWiki/Export/NoLicense=Keine Lizenz angegeben!" "$$$/LrMediaWiki/Export/NoAuthor=Kein Urheber angegeben!" -"$$$/LrMediaWiki/Export/NoSource=Keine Quelle angegeben!" "$$$/LrMediaWiki/Export/NoDescription=Für diese Datei ist keine Beschreibung angegeben!" -"$$$/LrMediaWiki/Section/User/Title=Login-Informationen" -"$$$/LrMediaWiki/Section/User/Username=Benutzername" -"$$$/LrMediaWiki/Section/User/Password=Passwort" -"$$$/LrMediaWiki/Section/User/ApiPath=API-Pfad" -"$$$/LrMediaWiki/Section/User/ApiPath/Details=Pfad zur api.php-Datei" -"$$$/LrMediaWiki/Section/Licensing/Title=Upload-Informationen" -"$$$/LrMediaWiki/Section/Licensing/Source=Quelle" -"$$$/LrMediaWiki/Section/Licensing/Author=Urheber" -"$$$/LrMediaWiki/Section/Licensing/License=Lizenz" -"$$$/LrMediaWiki/Section/Licensing/Other=Andere Felder" -"$$$/LrMediaWiki/Section/Licensing/Categories=Kategorien" -"$$$/LrMediaWiki/Section/Licensing/Categories/Details=mit ; trennen" -"$$$/LrMediaWiki/Api/HttpError=HTTP-Status ^1 erhalten." -"$$$/LrMediaWiki/Api/MediaWikiError=Der MediaWiki-Fehler ^1 ist aufgetreten: ^2" -"$$$/LrMediaWiki/Interface/LoginFailed=Login fehlgeschlagen: ^1." -"$$$/LrMediaWiki/Interface/UsernameOrPasswordMissing=Nutzername oder Password nicht angegeben +"$$$/LrMediaWiki/Export/NoLicense=Keine Lizenz angegeben!" +"$$$/LrMediaWiki/Export/NoPassword=Keine Passwort angegeben!" +"$$$/LrMediaWiki/Export/NoSource=Keine Quelle angegeben!" +"$$$/LrMediaWiki/Export/NoUsername=Kein Benutzername angegeben!" +"$$$/LrMediaWiki/Export/Progress/One=Exportiere ein Bild in ein MediaWiki" +"$$$/LrMediaWiki/Export/Progress=Exportiere ^1 Bilder in ein MediaWiki" "$$$/LrMediaWiki/Interface/Internal/NotLoggedIn=Interner Fehler: vor dem Upload nicht angemeldet." -"$$$/LrMediaWiki/Interface/InUse=Dateiname schon verwendet" +"$$$/LrMediaWiki/Interface/InUse/Cancel=Abbrechen" "$$$/LrMediaWiki/Interface/InUse/Details=Es gibt bereits eine Datei mit dem Namen ^1. Überschreiben? (Die Dateibeschreibung wird nicht verändert.)" +"$$$/LrMediaWiki/Interface/InUse/OK=Überschreiben" +"$$$/LrMediaWiki/Interface/InUse/Rename=Umbenennen" +"$$$/LrMediaWiki/Interface/InUse=Dateiname schon verwendet" +"$$$/LrMediaWiki/Interface/LoginFailed=Login fehlgeschlagen: ^1." +"$$$/LrMediaWiki/Interface/Rename/NewName=Neuer Dateiname" +"$$$/LrMediaWiki/Interface/Rename=Datei umbenennen" "$$$/LrMediaWiki/Interface/UploadFailed=Upload fehlgeschlagen: ^1" +"$$$/LrMediaWiki/Interface/UsernameOrPasswordMissing=Nutzername oder Password nicht angegeben +"$$$/LrMediaWiki/Interface/VersionComment=Versionskommentar" +"$$$/LrMediaWiki/MediaWiki=MediaWiki" "$$$/LrMediaWiki/Metadata/Categories=Kategorien" -"$$$/LrMediaWiki/Metadata/DescriptionEn=Beschreibung (en)" +"$$$/LrMediaWiki/Metadata/DescriptionAdditional=Beschreibung (andere)" "$$$/LrMediaWiki/Metadata/DescriptionDe=Beschreibung (de)" -"$$$/LrMediaWiki/Metadata/DescriptionAdditional=Beschreibung (andere)" \ No newline at end of file +"$$$/LrMediaWiki/Metadata/DescriptionEn=Beschreibung (en)" +"$$$/LrMediaWiki/PluginName=MediaWiki für Lightroom" +"$$$/LrMediaWiki/Section/Licensing/Author=Urheber" +"$$$/LrMediaWiki/Section/Licensing/Categories/Details=mit ; trennen" +"$$$/LrMediaWiki/Section/Licensing/Categories=Kategorien" +"$$$/LrMediaWiki/Section/Licensing/License=Lizenz" +"$$$/LrMediaWiki/Section/Licensing/Other=Andere Felder" +"$$$/LrMediaWiki/Section/Licensing/Source=Quelle" +"$$$/LrMediaWiki/Section/Licensing/Title=Upload-Informationen" +"$$$/LrMediaWiki/Section/User/ApiPath/Details=Pfad zur api.php-Datei" +"$$$/LrMediaWiki/Section/User/ApiPath=API-Pfad" +"$$$/LrMediaWiki/Section/User/Password=Passwort" +"$$$/LrMediaWiki/Section/User/Title=Login-Informationen" +"$$$/LrMediaWiki/Section/User/Username=Benutzername" \ No newline at end of file -- cgit v1.2.3