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:glide:4.12.0" | ||||||
|     implementation "com.github.bumptech.glide:okhttp3-integration: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 'com.github.mergehez:ArgPlayer:v3.1' | ||||||
|     implementation project(path: ':mytransl') |     implementation project(path: ':mytransl') | ||||||
|     implementation project(path: ':ratethisapp') |     implementation project(path: ':ratethisapp') | ||||||
|  |  | ||||||
|  | @ -79,6 +79,10 @@ import com.google.android.material.snackbar.Snackbar; | ||||||
| import com.google.android.material.tabs.TabLayout; | import com.google.android.material.tabs.TabLayout; | ||||||
| import com.jaredrummler.cyanea.Cyanea; | 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.File; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| import java.util.ArrayList; | 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 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); |                     boolean fetchShareContent = sharedpreferences.getBoolean(getString(R.string.SET_SHARE_DETAILS), true); | ||||||
|                     if (url[0] != null && count == 1 && (fetchShareContent || fetchSharedMedia)) { |                     if (url[0] != null && count == 1 && (fetchShareContent || fetchSharedMedia)) { | ||||||
|                         if (!url[0].trim().equalsIgnoreCase(sharedText.trim())) { |                         String originalUrl = url[0]; | ||||||
|                             Bundle b = new Bundle(); |  | ||||||
|                             b.putString(Helper.ARG_SHARE_TITLE, sharedSubject); |  | ||||||
|                             b.putString(Helper.ARG_SHARE_DESCRIPTION, sharedText); |  | ||||||
|                             CrossActionHelper.doCrossShare(BaseMainActivity.this, b); |  | ||||||
|                         } else { |  | ||||||
|                         new Thread(() -> { |                         new Thread(() -> { | ||||||
|                                 if (url[0].startsWith("www.")) |                             if (!url[0].matches("^https?://.*")) url[0] = "http://" + url[0]; | ||||||
|                                     url[0] = "http://" + url[0]; |  | ||||||
|                             Matcher matcherPattern = Patterns.WEB_URL.matcher(url[0]); |                             Matcher matcherPattern = Patterns.WEB_URL.matcher(url[0]); | ||||||
|                             String potentialUrl = null; |                             String potentialUrl = null; | ||||||
|                             while (matcherPattern.find()) { |                             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 we actually have a URL then make use of it. | ||||||
|                             if (potentialUrl != null && potentialUrl.length() > 0) { |                             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 { |                                 try { | ||||||
|                                     OkHttpClient client = new OkHttpClient.Builder() |                                     OkHttpClient client = new OkHttpClient.Builder() | ||||||
|  | @ -896,40 +892,53 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt | ||||||
|                                             if (response.isSuccessful()) { |                                             if (response.isSuccessful()) { | ||||||
|                                                 try { |                                                 try { | ||||||
|                                                     String data = response.body().string(); |                                                     String data = response.body().string(); | ||||||
|                                                         Matcher matcherTitle; |                                                     Document html = Jsoup.parse(data); | ||||||
|                                                         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; |  | ||||||
| 
 | 
 | ||||||
|  |                                                     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(() -> { |                                                     runOnUiThread(() -> { | ||||||
|                                                         Bundle b = new Bundle(); |                                                         Bundle b = new Bundle(); | ||||||
|  | @ -955,8 +964,6 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt | ||||||
| 
 | 
 | ||||||
|                             } |                             } | ||||||
|                         }).start(); |                         }).start(); | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                     } else { |                     } else { | ||||||
|                         Bundle b = new Bundle(); |                         Bundle b = new Bundle(); | ||||||
|                         b.putString(Helper.ARG_SHARE_TITLE, sharedSubject); |                         b.putString(Helper.ARG_SHARE_TITLE, sharedSubject); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue