Support both "label" and "itemLabel" for NearbyResultItem mapping (#6386)

* Support both label and itemLabel for robust NearbyResultItem mapping.

* fix code style

* Add getOriginalLabel() for Wikidata edits to avoid fallback issues with itemLabel

* Fix Wikidata edit failure by resetting hasInvalidLocation flag on upload confirmation

---------

Co-authored-by: Sonal Yadav <sonalyadav@Sonals-MacBook-Air.local>
This commit is contained in:
Sonal Yadav 2025-08-05 09:43:40 +05:30 committed by GitHub
parent 6dcce45c59
commit ffb9af1f1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 32 additions and 41 deletions

View file

@ -7,7 +7,8 @@ class NearbyResultItem(
private val wikipediaArticle: ResultTuple?, private val wikipediaArticle: ResultTuple?,
private val commonsArticle: ResultTuple?, private val commonsArticle: ResultTuple?,
private val location: ResultTuple?, private val location: ResultTuple?,
private val label: ResultTuple?, @field:SerializedName("label") private val label: ResultTuple?,
@field:SerializedName("itemLabel") private val itemLabel: ResultTuple?,
@field:SerializedName("streetAddress") private val address: ResultTuple?, @field:SerializedName("streetAddress") private val address: ResultTuple?,
private val icon: ResultTuple?, private val icon: ResultTuple?,
@field:SerializedName("class") private val className: ResultTuple?, @field:SerializedName("class") private val className: ResultTuple?,
@ -29,7 +30,15 @@ class NearbyResultItem(
fun getLocation(): ResultTuple = location ?: ResultTuple() fun getLocation(): ResultTuple = location ?: ResultTuple()
fun getLabel(): ResultTuple = label ?: ResultTuple() /**
* Returns label for display (pins, popup), using fallback to itemLabel if needed.
*/
fun getLabel(): ResultTuple = label ?: itemLabel ?: ResultTuple()
/**
* Returns only the original label field, for Wikidata edits.
*/
fun getOriginalLabel(): ResultTuple = label ?: ResultTuple()
fun getIcon(): ResultTuple = icon ?: ResultTuple() fun getIcon(): ResultTuple = icon ?: ResultTuple()

View file

@ -821,6 +821,7 @@ class UploadMediaDetailFragment : UploadBaseFragment(), UploadMediaDetailsContra
{ {
showProgress(false) showProgress(false)
uploadItem.imageQuality = IMAGE_OK uploadItem.imageQuality = IMAGE_OK
uploadItem.hasInvalidLocation = false // Reset invalid location flag when user confirms upload
}, },
{ {
presenterCallback!!.deletePictureAtIndex(index) presenterCallback!!.deletePictureAtIndex(index)

View file

@ -1,50 +1,32 @@
SELECT SELECT
?item ?item
(SAMPLE(?label) AS ?label) ?itemLabel
(SAMPLE(?class) AS ?class) ?itemDescription
(SAMPLE(?description) AS ?description) ?class
(SAMPLE(?classLabel) AS ?classLabel) ?classLabel
(SAMPLE(?pic) AS ?pic) ?pic
(SAMPLE(?destroyed) AS ?destroyed) ?destroyed
(SAMPLE(?endTime) AS ?endTime) ?endTime
(SAMPLE(?wikipediaArticle) AS ?wikipediaArticle) ?wikipediaArticle
(SAMPLE(?commonsArticle) AS ?commonsArticle) ?commonsArticle
(SAMPLE(?commonsCategory) AS ?commonsCategory) ?commonsCategory
(SAMPLE(?dateOfOfficialClosure) AS ?dateOfOfficialClosure) ?dateOfOfficialClosure
(SAMPLE(?pointInTime) AS ?pointInTime) ?pointInTime
WHERE { WHERE {
SERVICE <https://query.wikidata.org/sparql> { SERVICE <https://query.wikidata.org/sparql> {
values ?item { VALUES ?item {${ENTITY}}
${ENTITY}
}
} }
# Get the label in the preferred language of the user, or any other language if no label is available in that language. # Get item label/class label/description in the preferred language of the user, or fallback.
OPTIONAL {?item rdfs:label ?itemLabelPreferredLanguage. FILTER (lang(?itemLabelPreferredLanguage) = "${LANG}")} SERVICE wikibase:label { bd:serviceParam wikibase:language "${LANG},en,aa,ab,ae,af,ak,am,an,ar,as,av,ay,az,ba,be,bg,bh,bi,bm,bn,bo,br,bs,ca,ce,ch,co,cr,cs,cu,cv,cy,da,de,dv,dz,ee,el,eo,es,et,eu,fa,ff,fi,fj,fo,fr,fy,ga,gd,gl,gn,gu,gv,ha,he,hi,ho,hr,ht,hu,hy,hz,ia,id,ie,ig,ii,ik,io,is,it,iu,ja,jv,ka,kg,ki,kj,kk,kl,km,kn,ko,kr,ks,ku,kv,kw,ky,la,lb,lg,li,ln,lo,lt,lu,lv,mg,mh,mi,mk,ml,mn,mo,mr,ms,mt,my,na,nb,nd,ne,ng,nl,nn,no,ny,oc,oj,om,or,os,pa,pi,pl,ps,pt,qu,rm,rn,ro,ru,rw,sa,sc,sd,se,sg,sh,si,sk,sl,sm,sn,so,sq,sr,ss,st,su,sv,sw,ta,te,tg,th,ti,tk,tl,tn,to,tr,ts,tt,tw,ty,ug,uk,ur,uz,ve,vi,vo,wa,wo,xh,yi,yo,za,zh,zu". }
OPTIONAL {?item rdfs:label ?itemLabelAnyLanguage}
BIND(COALESCE(?itemLabelPreferredLanguage, ?itemLabelAnyLanguage, "?") as ?label)
# Get the description in the preferred language of the user, or any other language if no description is available in that language. # Get class (such as forest or bridge)
OPTIONAL {?item schema:description ?itemDescriptionPreferredLanguage. FILTER (lang(?itemDescriptionPreferredLanguage) = "${LANG}")} OPTIONAL {?item p:P31/ps:P31 ?class}
OPTIONAL {?item schema:description ?itemDescriptionAnyLanguage}
BIND(COALESCE(?itemDescriptionPreferredLanguage, ?itemDescriptionAnyLanguage, "?") as ?description)
# Get the class label in the preferred language of the user, or any other language if no label is available in that language. # Get picture (items without a picture will be shown in red on the Nearby map)
OPTIONAL {
?item p:P31/ps:P31 ?class.
OPTIONAL {?class rdfs:label ?classLabelPreferredLanguage. FILTER (lang(?classLabelPreferredLanguage) = "${LANG}")}
OPTIONAL {?class rdfs:label ?classLabelAnyLanguage}
BIND(COALESCE(?classLabelPreferredLanguage, ?classLabelAnyLanguage, "?") as ?classLabel)
}
OPTIONAL {
?item p:P31/ps:P31 ?class.
}
# Get picture
OPTIONAL {?item wdt:P18 ?pic} OPTIONAL {?item wdt:P18 ?pic}
# Get existence # Get existence (whether an item still exists or not)
OPTIONAL {?item wdt:P576 ?destroyed} OPTIONAL {?item wdt:P576 ?destroyed}
OPTIONAL {?item wdt:P582 ?endTime} OPTIONAL {?item wdt:P582 ?endTime}
OPTIONAL {?item wdt:P3999 ?dateOfOfficialClosure} OPTIONAL {?item wdt:P3999 ?dateOfOfficialClosure}
@ -65,4 +47,3 @@ WHERE {
?commonsArticle schema:isPartOf <https://commons.wikimedia.org/>. ?commonsArticle schema:isPartOf <https://commons.wikimedia.org/>.
} }
} }
GROUP BY ?item