Review Request: Comic Book Thumbnailer

Harsh J qwertymaniac at gmail.com
Sat Oct 31 21:33:58 GMT 2009



> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 94
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line94>
> >
> >     I'd suggest to add a m_comicCover = 0 after deleting it.

Done.


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 125
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line125>
> >
> >     I'd suggest to initialize cArchiveDir with 0 immediately. I know you do it in the else-path already, but it prevents having an "uninitialized value" problem when somebody later might do some adjustments in the code.

Done.


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 179
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line179>
> >
> >     \ not required

Removed.


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 194
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line194>
> >
> >     please use const QString& instead of QString

Done.


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 113
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line113>
> >
> >     \'s not required

Removed.


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 170
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line170>
> >
> >     The 'if'... code + the 2 returns might be replaced by "return m_comicCover != 0"

Done :)


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 141
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line141>
> >
> >     Memory leak: cTar is not freed. I did not check the size of the KTar class, but maybe it can be allocated on the stack.

As above, re-wrote to use KArchive itself.


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 169
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line169>
> >
> >     Hmm, this looks very dangerous in combination with the cast in line 160. Where is the allocation done? And where are the other entries deleted?

Removed the line, a mistake on my part to call free upon it! :)


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 218
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line218>
> >
> >     I'd suggest to allocate KTempDir on the stack instead of doing a 'new'. There are memory leaks in the lines 225 and 233.

Changed as suggested :)


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 307
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line307>
> >
> >     please use const QString& and const QStringList&

Ok, made a note of this :)


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 243
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line243>
> >
> >     - I'd change to interface to use a QStringList as return value instead of using an output parameter.
> >     - please use const QString& instead of const QString

- Changed. I basically kept it that way so that it looked similar to getArchiveFileList, but guess its better this way.
- Done :)


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 131
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line131>
> >
> >     Memory leak: cZip is not deleted... I did not check the size of KZip, but maybe it can be allocated on stack.

Re-wrote this whole 'type' check to use the base KArchive class. Allocating without "new" doesn't seem to work, since using the directory() it returns leads to a crash. Deleted new cArchive variable after use.


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 252
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line252>
> >
> >     I'd suggest to rename this method: isUnrarAvailable() implies that only a check is done whether the Unrar is available, but the main intention is to fill the string. I'd suggest to use:
> >     'QString unrarPath() const' and to return an empty string if there was no success.

Renamed the method and its usage as per suggestion :)


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 99
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line99>
> >
> >     I'd change the signature from 'const bool' to 'bool' (the parameter is passed per value). Hmm, in the code filterImages() is always called with 'false' - why did you use true as default or leave away this code path at all?

I was testing which approach was better (case sensitive or non), and had created this logic branch. Removed the branching now, since non-sensitive is best for cover files (Tested so far with over 1000 files - all showed up covers and not any other image using this approach).


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 331
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line331>
> >
> >     I'm not a fan of local event loops, as the can be quite dangerous. But I think in the context of the thumbnailer it should be OK. But maybe somebody else can comment on this too...

Ok, is there an alternative to this approach?

This code segment (the whole startProcess() one) was borrowed from Okular's comicbook-generators, by Tobias Koenig <tokoe at kde.org>. Have also added that credit in each source file.

Thank you for the comprehensive review, Peter. Learned a lot! :)

New diff (r4) attached for changes. Awaiting a second review, for still possible leaks and the local event loop :)

P.s. (Also removed DrawFrame since it didn't look so good, now flag is set to None)


> On 2009-10-31 16:40:04, Peter Penz wrote:
> > /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp, line 56
> > <http://reviewboard.kde.org/r/1983/diff/3/?file=13439#file13439line56>
> >
> >     I'd suggest to add a d'elete m_comicCover' to prevent a potential memory leak.

I initially put the delete statement there, but it didn't seem to work. The memory usage ran high (over 200+ MB per kio_thumbnail process) when I enabled previews for around 300 files in a test folder. Doing it in the ComicCreator::create() function itself worked better, and memory usage was limited.

If I should *still* add the delete here and not in ComicCreator::create(), let me know, 'cause maybe it varies for others?


- Harsh


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviewboard.kde.org/r/1983/#review2875
-----------------------------------------------------------


On 2009-10-31 17:10:40, Harsh J wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviewboard.kde.org/r/1983/
> -----------------------------------------------------------
> 
> (Updated 2009-10-31 17:10:40)
> 
> 
> Review request for Dolphin and kdelibs.
> 
> 
> Summary
> -------
> 
> Okular in kdegraphics supports viewing Comic Book Reader files such as .cbr, and .cbz. However, Dolphin does not preview them just like it previews PDF or other documents.
> 
> Since these comic book files are merely archives of various types, I decided to write a ThumbCreator module that performs the job of previewing these files. The ComicCreator class lists the files, sorts the images among them and then extracts the comic's cover image (usually the first) and hands it over to the thumbnail service.
> 
> For .cbz and .cbt I've used the KArchive subclasses - KZip and KTar to extract.
> (Bug 204195 : Okular doesn't support .cbt as of now - will work on this next)
> 
> For .cbr (the RAR type file) I've used the 'unrar'/'unrar-nonfree' executable (by Eugene Roshal, RARLabs) to extract. This is due to the fact that the free unrar utility does not support most of the new RAR version files.
> 
> This is my first contribution to the KDE Project and I've tried to conform to all Policies:
> 
>  * Code reports no issue with Krazy2All checker.
>  * Code structure, whitespace, etc. is as per the policies of KDE.
>  * License is the new GPL 2 or higher license (as per KDE e.V.)
>  * Followed the existing CMakeLists.txt file format.
> 
> I'm yet to receive my (applied) svn account.
> 
> Have attached screen-shots of it in action.
> 
> Awaiting your feedback :)
> 
> 
> Diffs
> -----
> 
>   /trunk/KDE/kdebase/runtime/kioslave/thumbnail/CMakeLists.txt 1040930 
>   /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comicbookthumbnail.desktop PRE-CREATION 
>   /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.h PRE-CREATION 
>   /trunk/KDE/kdebase/runtime/kioslave/thumbnail/comiccreator.cpp PRE-CREATION 
> 
> Diff: http://reviewboard.kde.org/r/1983/diff
> 
> 
> Testing
> -------
> 
> * Compiles without any issues.
> 
> * Thumbnailing works on comic book files of .cbz, .cbt and .cbr types.
>   (Maximum File Size limit needs to be raised a little via Dolphin in some cases for the thumb service to work.)
> 
> * Tested thumbnailing ~300 files (mix of .CBZ, .CBT and .CBR) in a single folder at large preview size.
> 
> * Tested for memory leaks. For 300~ files, each of the spawned kio_thumbnail process takes only ~30 MB Memory
>   resource at maximum (+10 MB Shared, at max). Have seen 3 spawn at the most, 2 usually.
> 
> * Tested with both Dolphin and the Preview Plasmoid.
> 
> 
> Screenshots
> -----------
> 
> Dolphin - Large Comic Previews
>   http://reviewboard.kde.org/r/1983/s/240/
> Dolphin - Normal or Small Comic Previews
>   http://reviewboard.kde.org/r/1983/s/241/
> Dolphin - File Properties Preview
>   http://reviewboard.kde.org/r/1983/s/242/
> 
> 
> Thanks,
> 
> Harsh
> 
>





More information about the kde-core-devel mailing list