mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 10:27:45 +00:00 
			
		
		
		
	Fix bug: Sharing an already shared file generates the old link
This commit is contained in:
		
							parent
							
								
									30df7c33fb
								
							
						
					
					
						commit
						ecc3415e3e
					
				| @ -37,6 +37,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation; | |||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; | import com.owncloud.android.lib.common.operations.RemoteOperationResult; | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; | import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; | ||||||
| import com.owncloud.android.lib.common.utils.Log_OC; | import com.owncloud.android.lib.common.utils.Log_OC; | ||||||
|  | import com.owncloud.android.lib.resources.status.OwnCloudVersion; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Provide a list shares for a specific file.   |  * Provide a list shares for a specific file.   | ||||||
| @ -90,7 +91,7 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation { | |||||||
| 			get = new GetMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH); | 			get = new GetMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH); | ||||||
| 
 | 
 | ||||||
| 			// Add Parameters to Get Method | 			// Add Parameters to Get Method | ||||||
| 			get.setQueryString(new NameValuePair[] {  | 			get.setQueryString(new NameValuePair[]{ | ||||||
| 					new NameValuePair(PARAM_PATH, mRemoteFilePath), | 					new NameValuePair(PARAM_PATH, mRemoteFilePath), | ||||||
| 					new NameValuePair(PARAM_RESHARES, String.valueOf(mReshares)), | 					new NameValuePair(PARAM_RESHARES, String.valueOf(mReshares)), | ||||||
| 					new NameValuePair(PARAM_SUBFILES, String.valueOf(mSubfiles)) | 					new NameValuePair(PARAM_SUBFILES, String.valueOf(mSubfiles)) | ||||||
| @ -118,7 +119,9 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation { | |||||||
| 						// Build the link | 						// Build the link | ||||||
| 						if (( share.getShareLink() == null) && | 						if (( share.getShareLink() == null) && | ||||||
| 								(share.getToken().length() > 0)) { | 								(share.getToken().length() > 0)) { | ||||||
| 							share.setShareLink(client.getBaseUri() + ShareUtils.SHARING_LINK_TOKEN + | 							String linkToken = ShareUtils.getSharingToken( | ||||||
|  | 									client.getOwnCloudVersion()); | ||||||
|  | 							share.setShareLink(client.getBaseUri() + linkToken + | ||||||
| 									share.getToken()); | 									share.getToken()); | ||||||
| 						} | 						} | ||||||
| 						sharesObjects.add(share); | 						sharesObjects.add(share); | ||||||
|  | |||||||
| @ -24,6 +24,8 @@ | |||||||
| 
 | 
 | ||||||
| package com.owncloud.android.lib.resources.shares; | package com.owncloud.android.lib.resources.shares; | ||||||
| 
 | 
 | ||||||
|  | import com.owncloud.android.lib.resources.status.OwnCloudVersion; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Contains Constants for Share Operation |  * Contains Constants for Share Operation | ||||||
|  *  |  *  | ||||||
| @ -36,7 +38,18 @@ public class ShareUtils { | |||||||
| 	// OCS Route | 	// OCS Route | ||||||
| 	public static final String SHARING_API_PATH ="/ocs/v1.php/apps/files_sharing/api/v1/shares";  | 	public static final String SHARING_API_PATH ="/ocs/v1.php/apps/files_sharing/api/v1/shares";  | ||||||
| 
 | 
 | ||||||
|     // String to build the link with the token of a share: server address + "/public.php?service=files&t=" + token |     // String to build the link with the token of a share: | ||||||
|     public static final String SHARING_LINK_TOKEN = "/public.php?service=files&t="; |     // server address + "/public.php?service=files&t=" + token | ||||||
|  |     public static final String SHARING_LINK_TOKEN_BEFORE_VERSION_8 = "/public.php?service=files&t="; | ||||||
|  |     public static final String SHARING_LINK_TOKEN_AFTER_VERSION_8= "/index.php/s/"; | ||||||
|  | 
 | ||||||
|  |     public static String getSharingToken(OwnCloudVersion version){ | ||||||
|  |         if (version!= null && version.isAfter8Version()){ | ||||||
|  |             return SHARING_LINK_TOKEN_AFTER_VERSION_8; | ||||||
|  |         } else { | ||||||
|  |             return SHARING_LINK_TOKEN_BEFORE_VERSION_8; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|      |      | ||||||
| } | } | ||||||
|  | |||||||
| @ -126,7 +126,8 @@ public class ShareXMLParser { | |||||||
| 	 * @throws XmlPullParserException | 	 * @throws XmlPullParserException | ||||||
| 	 * @throws IOException | 	 * @throws IOException | ||||||
| 	 */ | 	 */ | ||||||
| 	public ArrayList<OCShare> parseXMLResponse(InputStream is) throws XmlPullParserException, IOException { | 	public ArrayList<OCShare> parseXMLResponse(InputStream is) throws XmlPullParserException, | ||||||
|  | 			IOException { | ||||||
| 
 | 
 | ||||||
| 		try { | 		try { | ||||||
| 			// XMLPullParser | 			// XMLPullParser | ||||||
| @ -151,7 +152,8 @@ public class ShareXMLParser { | |||||||
| 	 * @throws XmlPullParserException | 	 * @throws XmlPullParserException | ||||||
| 	 * @throws IOException | 	 * @throws IOException | ||||||
| 	 */ | 	 */ | ||||||
| 	private ArrayList<OCShare> readOCS (XmlPullParser parser) throws XmlPullParserException, IOException { | 	private ArrayList<OCShare> readOCS (XmlPullParser parser) throws XmlPullParserException, | ||||||
|  | 			IOException { | ||||||
| 		ArrayList<OCShare> shares = new ArrayList<OCShare>(); | 		ArrayList<OCShare> shares = new ArrayList<OCShare>(); | ||||||
| 		parser.require(XmlPullParser.START_TAG,  ns , NODE_OCS); | 		parser.require(XmlPullParser.START_TAG,  ns , NODE_OCS); | ||||||
| 		while (parser.next() != XmlPullParser.END_TAG) { | 		while (parser.next() != XmlPullParser.END_TAG) { | ||||||
| @ -209,7 +211,8 @@ public class ShareXMLParser { | |||||||
| 	 * @throws XmlPullParserException | 	 * @throws XmlPullParserException | ||||||
| 	 * @throws IOException | 	 * @throws IOException | ||||||
| 	 */ | 	 */ | ||||||
| 	private ArrayList<OCShare> readData(XmlPullParser parser) throws XmlPullParserException, IOException { | 	private ArrayList<OCShare> readData(XmlPullParser parser) throws XmlPullParserException, | ||||||
|  | 			IOException { | ||||||
| 		ArrayList<OCShare> shares = new ArrayList<OCShare>(); | 		ArrayList<OCShare> shares = new ArrayList<OCShare>(); | ||||||
| 		OCShare share = null; | 		OCShare share = null; | ||||||
| 
 | 
 | ||||||
| @ -259,7 +262,8 @@ public class ShareXMLParser { | |||||||
| 	 * @throws XmlPullParserException | 	 * @throws XmlPullParserException | ||||||
| 	 * @throws IOException | 	 * @throws IOException | ||||||
| 	 */ | 	 */ | ||||||
| 	private void readElement(XmlPullParser parser, ArrayList<OCShare> shares) throws XmlPullParserException, IOException { | 	private void readElement(XmlPullParser parser, ArrayList<OCShare> shares) | ||||||
|  | 			throws XmlPullParserException, IOException { | ||||||
| 		parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT); | 		parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT); | ||||||
| 		 | 		 | ||||||
| 		OCShare share = new OCShare(); | 		OCShare share = new OCShare(); | ||||||
| @ -273,7 +277,8 @@ public class ShareXMLParser { | |||||||
| 			String name = parser.getName(); | 			String name = parser.getName(); | ||||||
| 
 | 
 | ||||||
| 			if (name.equalsIgnoreCase(NODE_ELEMENT)) { | 			if (name.equalsIgnoreCase(NODE_ELEMENT)) { | ||||||
| 				// patch to work around servers responding with extra <element> surrounding all the shares on the same file before | 				// patch to work around servers responding with extra <element> surrounding all | ||||||
|  | 				// the shares on the same file before | ||||||
| 				// https://github.com/owncloud/core/issues/6992 was fixed | 				// https://github.com/owncloud/core/issues/6992 was fixed | ||||||
| 				readElement(parser, shares); | 				readElement(parser, shares); | ||||||
| 
 | 
 | ||||||
| @ -327,6 +332,11 @@ public class ShareXMLParser { | |||||||
| 			} else if (name.equalsIgnoreCase(NODE_SHARE_WITH_DISPLAY_NAME)) { | 			} else if (name.equalsIgnoreCase(NODE_SHARE_WITH_DISPLAY_NAME)) { | ||||||
| 				share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME)); | 				share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME)); | ||||||
| 
 | 
 | ||||||
|  | 			} else if (name.equalsIgnoreCase(NODE_URL)) { | ||||||
|  | 				share.setShareType(ShareType.PUBLIC_LINK); | ||||||
|  | 				String value = readNode(parser, NODE_URL); | ||||||
|  | 				share.setShareLink(value); | ||||||
|  | 
 | ||||||
| 			} else { | 			} else { | ||||||
| 				skip(parser); | 				skip(parser); | ||||||
| 			}  | 			}  | ||||||
| @ -344,7 +354,8 @@ public class ShareXMLParser { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private void fixPathForFolder(OCShare share) { | 	private void fixPathForFolder(OCShare share) { | ||||||
| 		if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 && !share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) { | 		if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 && | ||||||
|  | 				!share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) { | ||||||
| 			share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR); | 			share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -357,7 +368,8 @@ public class ShareXMLParser { | |||||||
| 	 * @throws XmlPullParserException | 	 * @throws XmlPullParserException | ||||||
| 	 * @throws IOException | 	 * @throws IOException | ||||||
| 	 */ | 	 */ | ||||||
| 	private String readNode (XmlPullParser parser, String node) throws XmlPullParserException, IOException{ | 	private String readNode (XmlPullParser parser, String node) throws XmlPullParserException, | ||||||
|  | 			IOException{ | ||||||
| 		parser.require(XmlPullParser.START_TAG, ns, node); | 		parser.require(XmlPullParser.START_TAG, ns, node); | ||||||
| 		String value = readText(parser); | 		String value = readText(parser); | ||||||
| 		//Log_OC.d(TAG, "node= " + node + ", value= " + value); | 		//Log_OC.d(TAG, "node= " + node + ", value= " + value); | ||||||
|  | |||||||
| @ -43,6 +43,8 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> { | |||||||
| 
 | 
 | ||||||
|     public static final int MINIMUM_SERVER_VERSION_FOR_REMOTE_THUMBNAILS = 0x07080000; // 7.8.0 |     public static final int MINIMUM_SERVER_VERSION_FOR_REMOTE_THUMBNAILS = 0x07080000; // 7.8.0 | ||||||
| 
 | 
 | ||||||
|  |     public static final int VERSION_8 = 0x08000000; // 8.0 | ||||||
|  |      | ||||||
|     private static final int MAX_DOTS = 3; |     private static final int MAX_DOTS = 3; | ||||||
|      |      | ||||||
|     // format is in version |     // format is in version | ||||||
| @ -129,7 +131,13 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> { | |||||||
|         return (mVersion >= MINIMUM_VERSION_WITH_FORBIDDEN_CHARS); |         return (mVersion >= MINIMUM_VERSION_WITH_FORBIDDEN_CHARS); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean supportsRemoteThumbnails() { return (mVersion >= MINIMUM_SERVER_VERSION_FOR_REMOTE_THUMBNAILS); } |     public boolean supportsRemoteThumbnails() { | ||||||
|  |         return (mVersion >= MINIMUM_SERVER_VERSION_FOR_REMOTE_THUMBNAILS); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isAfter8Version(){ | ||||||
|  |         return (mVersion >= VERSION_8); | ||||||
|  |     } | ||||||
|      |      | ||||||
|      |      | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user