mirror of
				https://codeberg.org/tom79/Fedilab.git
				synced 2025-10-20 11:20:16 +03:00 
			
		
		
		
	Merge pull request 'Fix share feature' (#434) from Augier/Fedilab:fix-share into develop
Reviewed-on: https://codeberg.org/tom79/Fedilab/pulls/434
This commit is contained in:
		
						commit
						fbd9596dd9
					
				
					 2 changed files with 109 additions and 100 deletions
				
			
		|  | @ -95,6 +95,8 @@ dependencies { | |||
|     implementation "com.github.bumptech.glide:glide:4.12.0" | ||||
|     implementation "com.github.bumptech.glide:okhttp3-integration:4.12.0" | ||||
| 
 | ||||
|     implementation "org.jsoup:jsoup:1.15.1" | ||||
| 
 | ||||
|     implementation 'com.github.mergehez:ArgPlayer:v3.1' | ||||
|     implementation project(path: ':mytransl') | ||||
|     implementation project(path: ':ratethisapp') | ||||
|  |  | |||
|  | @ -79,6 +79,10 @@ import com.google.android.material.snackbar.Snackbar; | |||
| import com.google.android.material.tabs.TabLayout; | ||||
| import com.jaredrummler.cyanea.Cyanea; | ||||
| 
 | ||||
| import org.jsoup.Jsoup; | ||||
| import org.jsoup.nodes.Document; | ||||
| import org.jsoup.nodes.Element; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
|  | @ -852,15 +856,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt | |||
|                     boolean fetchSharedMedia = sharedpreferences.getBoolean(getString(R.string.SET_RETRIEVE_METADATA_IF_URL_FROM_EXTERAL), true); | ||||
|                     boolean fetchShareContent = sharedpreferences.getBoolean(getString(R.string.SET_SHARE_DETAILS), true); | ||||
|                     if (url[0] != null && count == 1 && (fetchShareContent || fetchSharedMedia)) { | ||||
|                         if (!url[0].trim().equalsIgnoreCase(sharedText.trim())) { | ||||
|                             Bundle b = new Bundle(); | ||||
|                             b.putString(Helper.ARG_SHARE_TITLE, sharedSubject); | ||||
|                             b.putString(Helper.ARG_SHARE_DESCRIPTION, sharedText); | ||||
|                             CrossActionHelper.doCrossShare(BaseMainActivity.this, b); | ||||
|                         } else { | ||||
|                         String originalUrl = url[0]; | ||||
|                         new Thread(() -> { | ||||
|                                 if (url[0].startsWith("www.")) | ||||
|                                     url[0] = "http://" + url[0]; | ||||
|                             if (!url[0].matches("^https?://.*")) url[0] = "http://" + url[0]; | ||||
|                             Matcher matcherPattern = Patterns.WEB_URL.matcher(url[0]); | ||||
|                             String potentialUrl = null; | ||||
|                             while (matcherPattern.find()) { | ||||
|  | @ -871,9 +869,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt | |||
|                             } | ||||
|                             // If we actually have a URL then make use of it. | ||||
|                             if (potentialUrl != null && potentialUrl.length() > 0) { | ||||
|                                     Pattern titlePattern = Pattern.compile("<meta [^>]*property=[\"']og:title[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>"); | ||||
|                                     Pattern descriptionPattern = Pattern.compile("<meta [^>]*property=[\"']og:description[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>"); | ||||
|                                     Pattern imagePattern = Pattern.compile("<meta [^>]*property=[\"']og:image[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>"); | ||||
| 
 | ||||
| 
 | ||||
|                                 try { | ||||
|                                     OkHttpClient client = new OkHttpClient.Builder() | ||||
|  | @ -896,40 +892,53 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt | |||
|                                             if (response.isSuccessful()) { | ||||
|                                                 try { | ||||
|                                                     String data = response.body().string(); | ||||
|                                                         Matcher matcherTitle; | ||||
|                                                         matcherTitle = titlePattern.matcher(data); | ||||
|                                                         Matcher matcherDescription = descriptionPattern.matcher(data); | ||||
|                                                         Matcher matcherImage = imagePattern.matcher(data); | ||||
|                                                         String titleEncoded = null; | ||||
|                                                         String descriptionEncoded = null; | ||||
|                                                         if (fetchShareContent) { | ||||
|                                                             while (matcherTitle.find()) | ||||
|                                                                 titleEncoded = matcherTitle.group(1); | ||||
|                                                             while (matcherDescription.find()) | ||||
|                                                                 descriptionEncoded = matcherDescription.group(1); | ||||
|                                                         } | ||||
|                                                         String image = null; | ||||
|                                                         if (fetchSharedMedia) { | ||||
|                                                             while (matcherImage.find()) | ||||
|                                                                 image = matcherImage.group(1); | ||||
|                                                         } | ||||
|                                                         String title = null; | ||||
|                                                         String description = null; | ||||
|                                                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | ||||
|                                                             if (titleEncoded != null) | ||||
|                                                                 title = Html.fromHtml(titleEncoded, Html.FROM_HTML_MODE_LEGACY).toString(); | ||||
|                                                             if (descriptionEncoded != null) | ||||
|                                                                 description = Html.fromHtml(descriptionEncoded, Html.FROM_HTML_MODE_LEGACY).toString(); | ||||
|                                                         } else { | ||||
|                                                             if (titleEncoded != null) | ||||
|                                                                 title = Html.fromHtml(titleEncoded).toString(); | ||||
|                                                             if (descriptionEncoded != null) | ||||
|                                                                 description = Html.fromHtml(descriptionEncoded).toString(); | ||||
|                                                         } | ||||
|                                                         String finalImage = image; | ||||
|                                                         String finalTitle = title; | ||||
|                                                         String finalDescription = description; | ||||
|                                                     Document html = Jsoup.parse(data); | ||||
| 
 | ||||
|                                                     Element titleEl = html.selectFirst("meta[property='og:title']"); | ||||
|                                                     Element descriptionEl = html.selectFirst("meta[property='og:description']"); | ||||
|                                                     Element imageUrlEl = html.selectFirst("meta[property='og:image']"); | ||||
| 
 | ||||
|                                                     String title = ""; | ||||
|                                                     String description = ""; | ||||
| 
 | ||||
|                                                     if(titleEl != null) { | ||||
|                                                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | ||||
|                                                             title = Html.fromHtml(titleEl.attr("content"), Html.FROM_HTML_MODE_LEGACY).toString(); | ||||
|                                                         } else { | ||||
|                                                             title = Html.fromHtml(titleEl.attr("content")).toString(); | ||||
|                                                         } | ||||
|                                                     } | ||||
| 
 | ||||
|                                                     if(descriptionEl != null) { | ||||
|                                                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | ||||
|                                                             description = Html.fromHtml(descriptionEl.attr("content"), Html.FROM_HTML_MODE_LEGACY).toString(); | ||||
|                                                         } else { | ||||
|                                                             description = Html.fromHtml(descriptionEl.attr("content")).toString(); | ||||
|                                                         } | ||||
|                                                     } | ||||
| 
 | ||||
|                                                     String imageUrl = ""; | ||||
|                                                     if(imageUrlEl != null) { | ||||
|                                                         imageUrl = imageUrlEl.attr("content"); | ||||
|                                                     } | ||||
| 
 | ||||
|                                                     StringBuilder titleBuilder = new StringBuilder(); | ||||
| 
 | ||||
|                                                     if(!originalUrl.trim().equalsIgnoreCase(sharedText.trim())) { | ||||
|                                                         // If the shared text is not just the URL, add it to the top | ||||
|                                                         String toAppend = sharedText.replaceAll("\\s*" + Pattern.quote(originalUrl) + "\\s*", ""); | ||||
|                                                         titleBuilder.append(toAppend); | ||||
|                                                     } | ||||
| 
 | ||||
|                                                     if (title.length() > 0) { | ||||
|                                                         // OG title fetched from source | ||||
|                                                         if(titleBuilder.length() > 0) titleBuilder.append("\n\n"); | ||||
|                                                         titleBuilder.append(title); | ||||
|                                                     } | ||||
| 
 | ||||
|                                                     String finalImage = imageUrl; | ||||
|                                                     String finalTitle = titleBuilder.toString(); | ||||
|                                                     String finalDescription = description; | ||||
| 
 | ||||
|                                                     runOnUiThread(() -> { | ||||
|                                                         Bundle b = new Bundle(); | ||||
|  | @ -955,8 +964,6 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt | |||
| 
 | ||||
|                             } | ||||
|                         }).start(); | ||||
|                         } | ||||
| 
 | ||||
|                     } else { | ||||
|                         Bundle b = new Bundle(); | ||||
|                         b.putString(Helper.ARG_SHARE_TITLE, sharedSubject); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue