xref: /haiku/src/add-ons/tracker/zipomatic/ZipperThread.h (revision 002f37b0cca92e4cf72857c72ac95db5a8b09615)
1 /*
2  * Copyright 2003-2009, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Jonas Sundström, jonas@kirilla.com
7  */
8 #ifndef _ZIPPER_THREAD_H
9 #define _ZIPPER_THREAD_H
10 
11 
12 #include <stdio.h>
13 #include <stdlib.h>
14 
15 #include <Entry.h>
16 #include <Message.h>
17 #include <Messenger.h>
18 #include <String.h>
19 #include <Window.h>
20 
21 #include "GenericThread.h"
22 
23 
24 class ZipperThread : public GenericThread {
25 public:
26 							ZipperThread(BMessage* refsMessage,
27 								BWindow* window);
28 							~ZipperThread();
29 
30 			status_t		SuspendExternalZip();
31 			status_t		ResumeExternalZip();
32 			status_t		InterruptExternalZip();
33 			status_t		WaitOnExternalZip();
34 
35 protected:
36 	virtual	status_t		ThreadStartup();
37 	virtual	status_t		ExecuteUnit();
38 	virtual	status_t		ThreadShutdown();
39 
40 	virtual	void			ThreadStartupFailed(status_t status);
41 	virtual	void			ExecuteUnitFailed(status_t status);
42 	virtual	void			ThreadShutdownFailed(status_t status);
43 
44 private:
45 			void			_MakeShellSafe(BString* string);
46 
47 			thread_id		_PipeCommand(int argc, const char** argv,
48 								int& in, int& out, int& err,
49 								const char** envp = (const char**)environ);
50 
51 			void			_SendMessageToWindow(uint32 what,
52 								const char* name = NULL,
53 								const char* value = NULL);
54 
55 			status_t		_SelectInTracker(int32 tryNumber = 0);
56 
57 			BMessenger		fWindowMessenger;
58 			thread_id		fZipProcess;
59 			int				fStdIn;
60 			int				fStdOut;
61 			int				fStdErr;
62 			FILE*			fOutputFile;
63 			entry_ref		fOutputEntryRef;
64 };
65 
66 #endif	// _ZIPPER_THREAD_H
67 
68