220 Commits

Author SHA1 Message Date
billkunz
aefee50a61 PINAnimatedImageManager cleanup in +initialize rather than +load (#249)
Performing cleanup (specifically, calling -cleanupFiles) in +load can delay on-device app launch time noticeably. Let’s try moving this work to +initialize instead.
2016-09-23 16:00:18 -07:00
Anton Bukov
38d4e01419 [Feature] [Rebased] Add support for in-url base64 encoded images (#246)
* Add support for in-url base64 encoded images

* Added GIF support

* Solution simplified a lot after reading PR comments

* Fix some problems

* Add test and fix compilation error

* Commented memory caching of data urls for now

* Fix issues appeared after rebase

* Fixed bug under OSX

* Used memory cache for data scheme and simplified solution a lot
2016-09-21 14:44:45 -04:00
Adlai Holler
e68a03fe4d Use kCGBlendModeCopy when decoding images 2016-09-05 23:58:16 -07:00
Garrett Moon
0d5437cab6 Don't bother archiving / unarchiving data. (#229)
* Don't bother archiving / unarchiving data.

This change upgrades to PINCache 3.0.1-beta which supports
custom archiving and unarchiving.

This allows us to avoid using NSArchiver/Archiver which adds a
small amount of disk space overhead and between .5 and 10 ms (on an iPhone 4)
for each encode / decode.

To support this, we *do* have to add versioning for the cache and
destroy it for the old versions. I considered adding a process to migrate
the images, but because that would have to occur on startup and process
all existing images, it could cause issues for very large image cache
databases, so I decided against that.

* Fix warnings

* Fix invalid object test

* Cleanup, thanks @chrisdanford!
2016-08-20 12:39:34 -07:00
Francisco Sevillano
baf9202da9 Fixed completion handler crash (#233)
* Fixed completion handler crash

* Added comments
2016-08-20 10:54:51 -07:00
Alex Shevchenko
3a6bc57ae7 Pluggable cache (#225)
* Cache is pluggable now.
PINCache dependency is optional.

* Cleanup

* Fixing wrong commit

* Cleanup

* Renamed PINRemoteImageCaching methods
2016-08-05 15:59:16 -07:00
Garrett Moon
83fe96270b Fixes webp integration for CocoaPods > 1.0. Thanks to SDWebImage for the solution and @yxztj to pointing it out! (#226) 2016-08-05 13:13:42 -07:00
Garrett Moon
f76a8c1231 Upgrade PINCache (#223)
* Upgrade PINCache

* Upgrade spec too

* Update the repos

* Updating example
2016-07-22 16:58:16 -07:00
Garrett Moon
ded2e07dd3 Add support for retrying and reduce default timeout. (#215)
* Add support for retrying and reduce default timeout.

* Return HTTP error codes >= 400. Don't retry when failure is sure to occur again.

* Add missing nullability

* Use NSInteger
2016-07-15 16:18:58 -07:00
Garrett Moon
3dbbfc7591 Without this, the system is likely caching our NSURLResponses which means double caching :( (#219) 2016-07-15 15:02:09 -07:00
Garrett Moon
855d457bcf Support varying pixel lengths (#213)
* Add support for varying pixel lengths.

On some devices the pixel length returned from CGImageCreate
sadly isn't 4 bytes per pixel.
Might be a good idea to support differing lengths.
Encoding this into the format would be a good
thing for sure.
Anyway, that's what this does.

* Add in methods for reading out bitsPerPixel too.
2016-07-15 14:51:58 -07:00
Garrett Moon
2cfc232d11 Adds better support for cancelation (#218)
In order to avoid blocking on the main thread, PINRemoteImage creates
a UUID but does not immediately start a task instead putting it on an
operation queue. This means that a client can request cancelation for
a UUID before its task is created.

Previously, we attempted to handle this by maintaining a set of canceled
UUIDs. This was being done incorrectly however. The logic was to check if,
before creating a task, a UUID was in canceledTasks. If it was, don't
create the task. If it wasn't clear out the canceledTasks list. This
example illustrates why that was erroneous:
1. Request starting a task with UUID #1
2. Request starting a task with UUID #2
3. Request canceling UUID #2
4. Task creation starts for UUID #1
5. UUID one is not in canceledTasks so it is cleared
6. Task creation starts for UUID #2, it is not in canceledTasks
   so the task is created and is not canceled.

This patch changes canceledTasks to a weak hash table and removes
the line which cleared out canceledTasks. As long as there are blocks
(for task creation) referencing the UUID, they will not be removed
from canceledTasks. When no one is referencing the UUIDs any longer,
they will be cleared out.
2016-07-15 14:51:48 -07:00
Garrett Moon
55893eee2f ivar no longer used because status is stored on shared version. (#206) 2016-06-07 16:20:00 -07:00
Garrett Moon
097e01cf15 Fix runaway NSData (#205)
* Fix runaway NSData

Previously we were generating all the frames of the GIF and dispatching
to write the data to the disk. This presents a problem if the disk backs
up though and it can end up with theoretically every frame in memory. Instead,
generate a frame and write it one frame at a time. Slower, but prevents
this runaway memory situation.

* Early return on error, thans @rahul-malik & @timonus!
2016-06-07 15:40:43 -07:00
Garrett Moon
3f0659a6dc Fix crash that can occur if image creation failed. (#204)
CFAutorelease crashes if you pass in NULL.
2016-06-03 11:16:09 -07:00
Diego Torres
6c5b928935 Generate the cacheKey only when necessary (#191) 2016-04-22 11:34:25 -07:00
Garrett Moon
13ae9f9a8a Handle errors when writing files. (#190)
* Handle errors when writing files.

* Address comments, fix warning.

* Add comment to explain writing durations to file.
2016-04-19 15:48:28 -07:00
Diego Torres
1d04bf82b2 Use a hashed key when the URL is too long (#189)
* Use a hashed key when the URL is too long

* Added tests for new cacheKey behaviour

* Conform to project style
2016-04-19 15:48:08 -07:00
Garrett Moon
05b24714f4 Materialize object isn't meant to be called on nil objects. (#187) 2016-04-13 10:21:53 -07:00
Garrett Moon
bf1012741c Add error for empty images. (#188) 2016-04-13 10:09:38 -07:00
Wendy Lu
0e81f77d16 Have PINProgressiveImage pass back the quality of the current progressive image (#185)
* Have PINProgressiveImage pass back the quality of the current progressive image
* fix
* Check for nil for imageProgress pointer
* Rename some variables
* Rename a bunch of things
* Update comment
2016-04-13 07:42:37 -07:00
Adlai Holler
632e1bcd2a Modify estimatedRemainingTimeThreshhold Behavior to Match Documentation (#184)
* Modify estimatedRemainingTimeThreshhold behavior to match documentation
* Update documentation on maxProgressiveRenderSize property
* Update the behavior, not the docs
2016-04-11 15:36:50 -07:00
Garrett Moon
e6cf241648 Fix warning, passing in NULL instead of 0 2016-04-11 15:26:25 -07:00
Garrett Moon
a0c421e50f Fix build, need to return results :) 2016-04-11 15:25:11 -07:00
Garrett Moon
8d8922edd1 Merge pull request #183 from Adlai-Holler/PrefetchingReturnsTasks
Make Prefetching Methods Return Tasks
2016-04-11 14:53:26 -07:00
Garrett Moon
9dd8ebf8da Better clearing of memory mapped files.
First, prevents a memory leak if users reference self in their PINAnimatedImage completions.

Second, this deletes decoded files when there are no more references to an animated image.
Previously we deleted on app open and exit.

I wasn't going to do this in case you closed a GIF and then reopened, but the more I
thought about it the cost is too high: A user can see their disk size balloon if they view
a bunch of GIFs and then check usage. They could also fill up their space enough while using
the app by viewing GIF after GIF that instability could result.
2016-04-11 13:20:58 -07:00
Adlai Holler
157771425d Another indentation fix 2016-04-09 12:59:58 -07:00
Adlai Holler
6ff9eea9ff Use spaces for indentation 2016-04-09 12:20:23 -07:00
Adlai Holler
df36ae409b Return tasks from prefetching methods 2016-04-09 12:08:02 -07:00
Garrett Moon
e3d2e07ae7 Addressing Rricky's comments 2016-04-08 16:26:04 -07:00
Garrett Moon
5c5c3f4cba Documentation of PINAnimatedImage 2016-04-08 14:39:08 -07:00
Garrett Moon
f10547d1c5 Fix for file cleanup / prevent crash if memoryMap is nil. 2016-04-08 10:55:06 -07:00
Garrett Moon
9e8132cf68 I can't believe it was a typo 2016-04-06 14:48:51 -07:00
Garrett Moon
fc900b66d2 Cross platform fixes 2016-04-06 14:17:51 -07:00
Garrett Moon
5e2d20d36b Beta of PINAnimatedImage 2016-04-05 18:02:09 -07:00
Garrett Moon
54062d96d1 Fix examples and Carthage 2016-04-04 16:24:37 -07:00
Garrett Moon
ea164f9524 Follow up to #175, addressing comments 2016-04-04 16:12:17 -07:00
Garrett Moon
4b5d3b8c7e Cleanup 2016-03-29 17:18:37 -07:00
Garrett Moon
509ee0cd2e UIImage -> PINImage 2016-03-29 16:48:46 -07:00
Garrett Moon
7c31744e31 Switch to alternative representation 2016-03-28 17:08:53 -07:00
Garrett Moon
4fbb5b540c Spacing 2016-03-28 17:06:36 -07:00
Garrett Moon
1d84f5ebc8 Add memory container 2016-03-28 17:05:59 -07:00
Eric Jensen
270bf97964 Remove unused property 2016-03-22 22:02:57 -07:00
Eric Jensen
af382d93f6 Correct spelling typos 2016-03-22 22:02:27 -07:00
Eric Jensen
153df72ac4 Correct mixed indentation by replacing tabs with spaces 2016-03-22 22:01:35 -07:00
Kerr Marin Miller
dc4c89ed2d Add nullability specifier to PINURLSessionManager delegate 2016-03-22 10:59:15 +00:00
Garrett Moon
7ba1bee59c Merge pull request #167 from pinterest/preventDiskCacheRemoveOnMainThread
Don't want to call diskCache remove synchronously on the main thread.
2016-03-21 11:38:32 -07:00
Garrett Moon
d8c5795fcd Improved docs 2016-03-20 17:47:25 -07:00
Garrett Moon
5d4babdc99 Don't want those semi-colons 2016-03-18 16:20:23 -07:00
Garrett Moon
bfb83fd1a6 Merge branch 'fix/osx-conditionals' of https://github.com/justin/PINRemoteImage into justin-fix/osx-conditionals 2016-03-18 16:19:31 -07:00