From 17279d9fa822ed43c03d41ee9333fea8f7557418 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 9 Aug 2011 21:26:48 -0500 Subject: [PATCH] First attempt at distutils support now that the locations have been updated --- DialCentral | 8 +- Makefile | 121 +++-- data/app/LICENSE | 11 - data/app/bell.flac | Bin 20152 -> 0 bytes data/app/bell.wav | Bin 52268 -> 0 bytes data/app/contacts.png | Bin 6105 -> 0 bytes data/app/dialpad.png | Bin 6139 -> 0 bytes data/app/history.png | Bin 6031 -> 0 bytes data/app/messages.png | Bin 5888 -> 0 bytes data/app/missed.png | Bin 5286 -> 0 bytes data/app/placed.png | Bin 5538 -> 0 bytes data/app/received.png | Bin 2992 -> 0 bytes data/template.desktop | 22 +- dialcentral/backends/gv_backend.py | 2 +- dialcentral/backends/qt_backend.py | 2 +- dialcentral/constants.py | 1 + dialcentral/data/LICENSE | 11 + dialcentral/data/bell.flac | Bin 0 -> 20152 bytes dialcentral/data/bell.wav | Bin 0 -> 52268 bytes dialcentral/data/contacts.png | Bin 0 -> 6105 bytes dialcentral/data/dialpad.png | Bin 0 -> 6139 bytes dialcentral/data/history.png | Bin 0 -> 6031 bytes dialcentral/data/messages.png | Bin 0 -> 5888 bytes dialcentral/data/missed.png | Bin 0 -> 5286 bytes dialcentral/data/placed.png | Bin 0 -> 5538 bytes dialcentral/data/received.png | Bin 0 -> 2992 bytes dialcentral/dialcentral_qt.py | 3 +- dialcentral/util/qml_utils.py | 54 ++ dialcentral/util/qore_utils.py | 323 ++++++++++++ dialcentral/util/qt_compat.py | 15 +- dialcentral/util/qwrappers.py | 4 +- setup.py | 167 ++++++ support/builddeb.py | 164 ------ support/fake_py2deb.py | 56 -- support/py2deb.py | 994 ------------------------------------ support/scale.py | 53 ++ 36 files changed, 723 insertions(+), 1288 deletions(-) delete mode 100644 data/app/LICENSE delete mode 100644 data/app/bell.flac delete mode 100644 data/app/bell.wav delete mode 100644 data/app/contacts.png delete mode 100644 data/app/dialpad.png delete mode 100644 data/app/history.png delete mode 100644 data/app/messages.png delete mode 100644 data/app/missed.png delete mode 100644 data/app/placed.png delete mode 100644 data/app/received.png create mode 100644 dialcentral/data/LICENSE create mode 100644 dialcentral/data/bell.flac create mode 100644 dialcentral/data/bell.wav create mode 100644 dialcentral/data/contacts.png create mode 100644 dialcentral/data/dialpad.png create mode 100644 dialcentral/data/history.png create mode 100644 dialcentral/data/messages.png create mode 100644 dialcentral/data/missed.png create mode 100644 dialcentral/data/placed.png create mode 100644 dialcentral/data/received.png create mode 100644 dialcentral/util/qml_utils.py create mode 100755 setup.py delete mode 100755 support/builddeb.py delete mode 100644 support/fake_py2deb.py delete mode 100644 support/py2deb.py create mode 100755 support/scale.py diff --git a/DialCentral b/DialCentral index a20d4fe..f483f56 100755 --- a/DialCentral +++ b/DialCentral @@ -2,13 +2,7 @@ # -*- coding: utf-8 -*- -import sys - - -sys.path.append("/opt/dialcentral/lib") - - -import dialcentral_qt +from dialcentral import dialcentral_qt if __name__ == "__main__": diff --git a/Makefile b/Makefile index 9f128fa..24cb868 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,19 @@ PROJECT_NAME=dialcentral -SOURCE_PATH=src +PACKAGE_NAME=$(PROJECT_NAME) + +SOURCE_PATH=$(PACKAGE_NAME) SOURCE=$(shell find $(SOURCE_PATH) -iname "*.py") -PROGRAM=$(SOURCE_PATH)/$(PROJECT_NAME).py -DATA_PATH=data -DATA_TYPES=*.ini *.map *.glade *.png -DATA=$(foreach type, $(DATA_TYPES), $(shell find $(DATA_PATH) -iname "$(type)")) + +PROGRAM=DialCentral +ICON_SIZES=26 32 48 80 +ICONS=$(foreach size, $(ICON_SIZES), data/icons/$(size)/$(PROJECT_NAME).png) +PACKAGE_VARIANTS=fremantle harmattan ubuntu +DESKTOP_FILES=$(foreach variant, $(PACKAGE_VARIANTS), data/$(variant)/$(PROJECT_NAME).desktop) +SETUP_FILES=$(foreach variant, $(PACKAGE_VARIANTS), ./setup.$(variant).py) +DIST_BASE_PATH=./dist +DIST_PATHS=$(foreach variant, $(PACKAGE_VARIANTS), $(DIST_BASE_PATH)_$(variant)) $(DIST_BASE_PATH)_diablo + OBJ=$(SOURCE:.py=.pyc) -BUILD_PATH=./build TAG_FILE=~/.ctags/$(PROJECT_NAME).tags TODO_FILE=./TODO @@ -21,12 +28,13 @@ PROFILE_VIEW=python -m pstats .profile TODO_FINDER=support/todo.py CTAGS=ctags-exuberant + .PHONY: all run profile debug test build lint tags todo clean distclean all: test run: $(OBJ) - $(SOURCE_PATH)/$(PROJECT_NAME)_qt.py + $(PROGRAM) profile: $(OBJ) $(PROFILE_GEN) $(PROGRAM) @@ -38,36 +46,27 @@ debug: $(OBJ) test: $(OBJ) $(UNIT_TEST) -package: $(OBJ) - rm -Rf $(BUILD_PATH) - - mkdir -p $(BUILD_PATH)/generic - cp $(SOURCE_PATH)/constants.py $(BUILD_PATH)/generic - cp $(SOURCE_PATH)/$(PROJECT_NAME).py $(BUILD_PATH)/generic - $(foreach file, $(DATA), cp $(file) $(BUILD_PATH)/generic/$(subst /,-,$(file)) ; ) - $(foreach file, $(SOURCE), cp $(file) $(BUILD_PATH)/generic/$(subst /,-,$(file)) ; ) - cp support/$(PROJECT_NAME).desktop $(BUILD_PATH)/generic - cp support/icons/hicolor/26x26/hildon/$(PROJECT_NAME).png $(BUILD_PATH)/generic/26x26-$(PROJECT_NAME).png - cp support/icons/hicolor/64x64/hildon/$(PROJECT_NAME).png $(BUILD_PATH)/generic/64x64-$(PROJECT_NAME).png - cp support/icons/hicolor/scalable/hildon/$(PROJECT_NAME).png $(BUILD_PATH)/generic/scale-$(PROJECT_NAME).png - cp support/builddeb.py $(BUILD_PATH)/generic - cp support/py2deb.py $(BUILD_PATH)/generic - cp support/fake_py2deb.py $(BUILD_PATH)/generic - - mkdir -p $(BUILD_PATH)/diablo - cp -R $(BUILD_PATH)/generic/* $(BUILD_PATH)/diablo - cd $(BUILD_PATH)/diablo ; python builddeb.py diablo - mkdir -p $(BUILD_PATH)/fremantle - cp -R $(BUILD_PATH)/generic/* $(BUILD_PATH)/fremantle - cd $(BUILD_PATH)/fremantle ; python builddeb.py fremantle - mkdir -p $(BUILD_PATH)/debian - cp -R $(BUILD_PATH)/generic/* $(BUILD_PATH)/debian - cd $(BUILD_PATH)/debian ; python builddeb.py debian +package: $(OBJ) $(ICONS) $(SETUP_FILES) $(DESKTOP_FILES) + rm -Rf $(DIST_BASE_PATH)_*/* + ./setup.fremantle.py sdist_diablo \ + -d $(DIST_BASE_PATH)_diablo \ + --install-purelib=/usr/lib/python2.5/site-packages + ./setup.fremantle.py sdist_fremantle \ + -d $(DIST_BASE_PATH)_fremantle \ + --install-purelib=/usr/lib/python2.5/site-packages + ./setup.harmattan.py sdist_harmattan \ + -d $(DIST_BASE_PATH)_harmattan + --install-purelib=/usr/lib/python2.6/dist-packages + ./setup.ubuntu.py sdist_ubuntu \ + -d $(DIST_BASE_PATH)_ubuntu + mkdir $(DIST_BASE_PATH)_ubuntu/build + cd $(DIST_BASE_PATH)_ubuntu/build ; tar -zxvf ../*.tar.gz + cd $(DIST_BASE_PATH)_ubuntu/build ; dpkg-buildpackage -tc -rfakeroot -us -uc upload: - dput fremantle-extras-builder $(BUILD_PATH)/fremantle/$(PROJECT_NAME)*.changes - dput diablo-extras-builder $(BUILD_PATH)/diablo/$(PROJECT_NAME)*.changes - cp $(BUILD_PATH)/debian/*.deb ./www/$(PROJECT_NAME).deb + dput diablo-extras-builder $(DIST_BASE_PATH)_diablo/$(PROJECT_NAME)*.changes + dput fremantle-extras-builder $(DIST_BASE_PATH)_fremantle/$(PROJECT_NAME)*.changes + cp $(DIST_BASE_PATH)_ubuntu/*.deb www/$(PROJECT_NAME).deb lint: $(OBJ) $(foreach file, $(SOURCE), $(LINT) $(file) ; ) @@ -78,18 +77,60 @@ todo: $(TODO_FILE) clean: rm -Rf $(OBJ) - rm -Rf $(BUILD_PATH) rm -Rf $(TODO_FILE) + rm -f $(ICONS) $(SETUP_FILES) $(DESKTOP_FILES) + rm -Rf $(DIST_PATHS) -distclean: - rm -Rf $(OBJ) - rm -Rf $(BUILD_PATH) - rm -Rf $(TAG_FILE) +distclean: clean find $(SOURCE_PATH) -name "*.*~" | xargs rm -f find $(SOURCE_PATH) -name "*.swp" | xargs rm -f find $(SOURCE_PATH) -name "*.bak" | xargs rm -f find $(SOURCE_PATH) -name ".*.swp" | xargs rm -f + +$(SETUP_FILES): VARIANT=$(word 2, $(subst ., ,$@)) + +setup.fremantle.py: setup.py src/constants.py + cog.py -c \ + -D DESKTOP_FILE_PATH=/usr/share/applications/hildon \ + -D INPUT_DESKTOP_FILE=data/$(VARIANT)/$(PROJECT_NAME).desktop \ + -D ICON_CATEGORY=hildon \ + -D ICON_SIZES=26,32,48 \ + -o $@ $< + chmod +x $@ + +setup.harmattan.py: setup.py src/constants.py + cog.py -c \ + -D DESKTOP_FILE_PATH=/usr/share/applications \ + -D INPUT_DESKTOP_FILE=data/$(VARIANT)/$(PROJECT_NAME).desktop \ + -D ICON_CATEGORY=hildon \ + -D ICON_SIZES=32,80 \ + -o $@ $< + chmod +x $@ + +setup.ubuntu.py: setup.py src/constants.py + cog.py -c \ + -D DESKTOP_FILE_PATH=/usr/share/applications \ + -D INPUT_DESKTOP_FILE=data/$(VARIANT)/$(PROJECT_NAME).desktop \ + -D ICON_CATEGORY=apps \ + -D ICON_SIZES=32,48 \ + -o $@ $< + chmod +x $@ + +$(ICONS): SIZE=$(word 3, $(subst /, ,$@)) +$(ICONS): data/$(PROJECT_NAME).png support/scale.py + mkdir -p $(dir $@) + support/scale.py --input $< --output $@ --size $(SIZE) + +$(DESKTOP_FILES): VARIANT=$(word 2, $(subst /, ,$@)) +$(DESKTOP_FILES): data/template.desktop + mkdir -p $(dir $@) + cog.py -d \ + -D VARIANT=$(VARIANT) \ + -D PROGRAM=$(PROGRAM) \ + -o $@ $< + + $(TAG_FILE): $(OBJ) mkdir -p $(dir $(TAG_FILE)) $(CTAGS) -o $(TAG_FILE) $(SOURCE) diff --git a/data/app/LICENSE b/data/app/LICENSE deleted file mode 100644 index fb44a62..0000000 --- a/data/app/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ -http://www.gentleface.com/free_icon_set.html -The Creative Commons Attribution-NonCommercial -- FREE -http://creativecommons.org/licenses/by-nc-nd/3.0/ - -Sound: -http://www.freesound.org/samplesViewSingle.php?id=2166 -http://creativecommons.org/licenses/sampling+/1.0/ - -placed.png, received.png, placed.png -Free for commercial use -http://www.iconeden.com/icon/free/get/bright-free-stock-iconset diff --git a/data/app/bell.flac b/data/app/bell.flac deleted file mode 100644 index 419420ed3829e74e8b847c2cd0da55b3f7e6ed64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20152 zcmV(@K-RxzOkqO+001Ho01yBG15f}Ehzi6&@Bjd208!umz1H7_v~yPlXtmHhON0Ob zC?Eg;0CHt!WpZV1V`U(0X<|l9K|>%hE;24LATls8H!wLdHvj+t0RQ;O2mqBz|L6bZ z|K|Vj|Mma-v=?yQ>jMh_6E`;zHFRU6>da>I!t<( zbytByItR3+)G0!I?YAWO&~9IeOUsj+vwF6>Q0QsJcZPiz@^e&GP*qg-+kemgF3_DD4(qih zWzn9s2ob2vfg@6Sclw%^NyT#!yg(+seVamcZ7GX(6dBx;^oUo>X0S{GpgB<1 zRtX28IDVI|s76#p3pT={$YBt`W-$W#Xc4D}a0w`Y5sN?!w}46)fnH(|9;6GT;FL?) zr6d+#K<4mzs(l;5$rNJ_wdu1|1|PxcB&H$<BfM}Wfra0$?#MYGVb=yDS?7@7rAknE@#aR9JXDzbn&D;mdf z2?g_SperJQc90GZl5~UcR5&t`j8dJ9C31*DJRmw2@*RU2V=<6V#bI^=1u(vpwWFS4 zBeBk<$_?`d#Zo5YVdzmaFzeZ7G(nP@N^I&wLD4@pq=*am@TKPSBPf+<8ebP zl!E6{<7;wK@?ND^56hxA!VL=fJhNw*Jgi#Xb z!K_c(($_@QuuKLQYxR8xeai=Lb#{w>khm5U5#LQcJYxgwkG*C<^C#H`_VP|SQJP;U z7N5Ait0aAD1&o21b53zc!?35(sPejd>p>f1PNtAVB}qhmjh8Qr_XZ7)Gh|&(t1$z@ z+^=EKl@(=fIjPS1Ou8r_2~>4cvoyQ=m1X?kNb+s>lpZiN+e_n_l2eq01i?2_h{y3y z7?Aa7yN+L#?k|PWbMy6u_oV^9$I#G1skg{gZo}nTP_i0IGp1jreyo?(?|1cEnjzUMsW8HW^J#BYIuNK1_DX)sTgBWRQvm`JOxP3U51q4spofKx-02iz)ru zITFe!L4k;FZWzc(a9G+q%SZBtvLhAPmBK^17;pnps2s^&m)0NN56JJtzlXg^CV)*E z|L)?_6mYhjP8Afwql2m5YFn|58bx-rkc}dUOS3XlEW<$l(~H|(#o%T%R90Fn3KH$S z2qU&9XYfubodUbo6BS^nDYKU4N%X^!64<~%CvNX5ZSm${{TLbPQwp#*CS@btAu^J1 z462jPdPajWTX7K&?jgaPR8AQF<}eI&Gll|wCIHC=VPXB3_hDFWYAS_bl`^8>@Z?t+ zmCR~_pjB~qmVx+$sYY~BZVRO> z^<;6CJZC4L4!oI_x7BaVtspCZb=z&{`7qDLgj`E5F#JJB4E+WXk$b1q!^l`C4u)|+ zfE$Jt<7d3Hi}2L29t;@JP|PLbJWFrJ8gOtgNaJX{=qQhn1>hxuDg2Z}S(3iEduyo9 z>tF0d@!i-?M-XBV&Kip!nz>vEZZnnn@l*7ZS0TfZjl_YWsOW~olHyjCggq%O8JBLk zVdg`18&j7~0!ut(A?_VxL@xNUg?=$0AnGW$Qein|^#pNoA&|&#2Jd_8Xi;muIR3a-mtlAo*a4frL>dg$#*`DMBh3xM%NG zod)TZy)|5j3Sk}actIDC#6c$chBXZ??IvdOOcjW)wPmoDpgBLLimUEL0Z^_Hf+B}h zf~P}(b5dI~QuWvHs^S_hAxd(*hDF=D=?NQaGGno!Tj|DJ*YbkvoBlCmy6%8xeOw^6 z#6AR+;ICs=6A`nfE6%)#40Z-fWH769mQp*{_X^`6psi;-^RZ4MP!$T6#S?RJ`gIRw zE`gj%mPsI+*D#aBVF*$!z!pUA1)krNgf_iHpw^2ogb#K4re6h-q{9&uQr7wR0?~0U z(v>1I`glP6+<*5eQV1du7xQmbj*70>jT%!BuuOR6%L`lY)#;#rU4%c=AO(_Pm?bB^WPf6x#F@SJk;YQfkv@A_3^QCU;fj z3__Xa6tnt5Sjf2H-gynEpP1;3|4wwa1@QovJ8;BFIXAhJ&tf=1xBJpbB$DFjx|}n$ zeWi{^{H_5Xp}aN~oRL)@Ln}dNH@4LGY_ct{G$74rP&6(la8WYupe-_ZoK#R(ONhRN zcYhG5okzAC+xa+U};#mSi^ieN2r;sRSUNU@}~bC}*0t_v7Feu^p6dD<&Zr z)#1>fv^*fC6zFfc!m7gM(C$WTwxGFb=&0-%lb-Op)R>~4L=p|>w0zrAG?8-HZ_tyB z;-|{Tj>F?u!MFN-E9n8W*f6inBnWzqE!W(nl{>I)A8I8Rh5}>N<${7V%hKW?sbXc& z1ffraWa*4UxN2;ewOyh*y?@i^H5%1 zh-fG}>tk9_*uqdPr`^AT4^ZwVASD}TZ8V5(=_yA}$_7Qb1_y_z#xn-PLF}CGTI!7> zaP6s4U_q+#P(WCd5Xd_kznlc?X;2ytkr0S~!6ivtz?Em(0%z0v(MDmMsB1kIBVfYDhq@Htpk zH-w@Y!4POc7_jzvav~vXe34M#^_3JduA9(3pa|fltmpK>Ine{MSrH2-Y`aLP$OG3A zI+2JV)Hvj7ATL&as(39Cupf5ni&E%?GUNL5hGnx%Ai*QYA6HOz6A*VyUZgH|KU{QMx z-?^=b1m)!z`(Ou}Oh4UQyubk({^vWY1me=^OvvyUX$~<`i7#oSu5oA+)x6DkdU0mD)?8jMpN` zlu=Q~GALCkugEOTrP$s{rR@Bt}0Dfhv(HZDahJT zTXc0fI!T9BM8Z`!ys7HQNe=i1oGn#U<0U4|5mE*}ukb{Y$IOVRW7vkevVF{UcO;rWe1b+MHCgjmLfid;)cy;9;D@pcjs-U-QQWc65!P)}{I?PE(!b<$n3 zRJomRH_{1hC`Up9JtYokcnrk1#5gzO8P!x}6@BUrTZYTInEO!d{a~D~IBopiFK6k` z3c^w_Lo$_K-f*&f=!R-n_Mo%E6;eLVk<`fchPv#ZBCzTS=%f9>VGx(kgE_)^^3xGE zDOnkdXpGLHgEu_)VRAkc!#-+6b+lezB#v7g7EIM+5s8ux0e6o_lso?<)0)G zU!U96S|X~m<7lY7l+x9eRb-0(UtLF;U$FzL&NH5L>Iis#C(>;tMEA-@JD+PU+rCte787@cU4XYJeSjyiG^@1zOmXuKkB39yZkaY{ zius?z!_-8!Jx10Tr#U6^)%h8eTj6XYY;X`0s9!=BZ%Y{zY$+*jx_~FVm1nBks<)1r z+_zwyjk2KuuYA9vDrqOKiT4y>s+-PjH;OHURa06o*uGbxd=iOLu42Md-tQcsnMRz{ z-EccY(6)Ljr!~-ZT)vFdCJ4&QUd?N~sFn9K%q_w@%o*MZu=e@ECTJp@^R76n5gaFd zt<6W;yB&qGpVt3k%1Uiy>%y|G!jIsZI1Q&MAencxq4Lg#J^0TE@X%-o^DyXT;rlebh zJq~-t*eBXaO2o#Z^B1IBY1WF*3;ibDk#YVHLep-obc!ajDc}5u2Z(75DphA*V|fTB;T%~`Zc*OQujIO_icw8tHerJwT*+@}a!O_Vf&ci)2mz8#2h#_p2UP~&2Au|i23Q7Jw5=rAATK5Q5kPQ|K!(LOcLWH{ zesrA{5=bfc(5pBUkYgfzVG(_5)QYRE2(*gdFrJe9LbuO-GzHbzZ$x4uOtxi>i3PQ| zW{**)t9^}5bT?&h&x)w&p%Sw#SwlsKf|R0NXC+#ndlI)1MjECCCw&`Zm57WanG(6p zqLjTzLPIm@Sj3Gyt7$^}uSf(uBw~geVq-@B=2QgXIszhV*XoDIb#?%Zr_UG8SJT?> zmWqVQ*0|gtR)4P4y{{B16Q{8meWze5BMasDyqV|6hS06kTB#E@nY(5DBWR>J;EJq) zH)(Ky##LnZ?^1Gs1-YmZxvuB5Dsqi%rAnNfEwdtkt{$*hl2@St~}LB zKk>UVAo1f-AXfF&Z-*?u8fF)Z)wJn$w4Y5)m5A9NJxlQZUPehWevp91^EKnD34~6$ zq7`>jO>L4(up%HL4JCJmj?26yepK-KB*B#$W-dOpd|5lDLSBOWQgvQoj(1 z?PhXUZF|!&F&7Z<&HmVfcAV}EA6)FqL~2Tb8A-!!opke@E>N0?UYS(tipbq9ZB}&U z_{=XV2Wqjh)0HJ3>JP7rj6#eTUSV8I`##m@mAeACrB%rzd?5PQ5suE)p zSsrs`XtewMZModOh^0C5MbsNg+1XTG5snu!%po);+=2P1vHf-L;s%sB5u1f%wOW?4 z!AFG&aG8CEb^HmK9?_+8`ijcZv-0!Y#iayCS!Wc&cGz$rpdmo!(xf0=k>W-~<~LUO zr>Qg^72cK=6lJ!*%wNqQQ-HB5&DNR2ghWldvGZseTHrAZQ>RAOmKiX>$ebe$6+ zIQTt8+tn8QSjxKalrbt>U#3PkV~l`I>B*#v$vINbHYY@+u50#ECSX!?H(@Y2=EUEyaoGIA=m5V@;$= z(d+UmAIB@nWM_iHBBN?e$89=y?8rdAmv_=c8|Lo%iImiSD?xBg$ueJp>`qF_ce}w^ zEd(2g*^9nsm(8JPy$zT|+DEZ>D@0fbKI?z~x9NswGrDqYEVDA?@H;HXHu zLtAQXn>s06&_V?@Dn!i>L_zTe;i{DhNKFBV(r$S_YkDc20v|%@MC2hnD2whfGWek&qWSaeA*I|3=gHR^~tU=Ddl8OduFg$bSm5${P1 z%3i>*ZT%*vPSgxwm*Qjag}M4(vY|OL;i0-a&cf|=tW0Q_s5i&J;DP-qHP$ekXDGV5 zVN5vsfKu0^F64A0a&U~K*1{-hZnRsloO&0+H3)|X_>Dnw(>AR$DDdU&XpG8=O5PU& zpp`iFaIU&YQUu*k<+&FoC_T_XY=-gZN)&178Li8=VxT-3}$*tsbnCqd8bUZW;5AOryo^9nn1 zrDQFciRMN?TAH_w2MLMP(oUe$bX|l;gBiAN`vILO*AlM?!+qHqBRdsXi2PHJy;Eta zB6EiY36b? zPbX*>mr%sC{d#M78{vXtm8T$H=^Nczg$S-AXK4`<9Bfk_MPwqkNVDV56mK|heV!Xi zsYu!*=n#pnIyQdg6C;yx4#H=ce#FSW{MxVi^hI(+>)z)=bVW-s8j$Y8`2taMcU!03 z`8587qXbW+9oYkB*?3Gqoai|-tFLu-d027XG0dTpLN8GjE4=JssnVpH(m`OXVzlJ~ zha{>Xol3kicyR2->WJhDNCe`}K=~=ip3CK}4)bKi32rEUb9&XMLj6ciLctX!!g1$DYDn#` z4d0v^wDv^rL_}D1o^*0RP9)GcOmP-P%y?2x@wk!&qnZRl5@S=sjF7Ew@-lKQ{V;e` zcFrY!yPeOq9=Q{s2uE7D7LGW}61Owt`VGZNF0Qw4ASgz1!7Ww^{ZJ8BSm<^7Y9n8! zgX->Ifj7mh%NX>mh$kykIxy6dg8m^gdjix7vLzJeXAHb`h)HqR z74}Tag0~3|7@oQloP6?fPX1WLt@}Z9o5T!-7U+dS)9P0dqjMoSdpJl7#fS2LXJNkq zSZOQ?k3>^5c}g?Nq*i{!fLp43UJ59OC?c+<8;H6jyK7Ymmn3Q+G}H5+cTXQ2lWn2V zYyOU>gq6}Mvv;$yBqUH@`lIu)i=36-f&WuDwM;ZTF5Rg{`5{wtX2S^zUu$OOKBBP7 zE=84?XwuU_yM^A^Cy4z+Ytze_iyQz1YOqf*}W(uL?Hb~Jw8V1iiUu~L|j*qz65P*{HP;j zD^(wS1Y)ZtCKA2BL`!ctK3}FwY!cF2QJb%`to2jrswyB<>n`?QZQ+6_!UaMEHBN=J z-WB;4SenR8*hx+2(?ijW??(&POKDL)j!yo9#;i*Joi6FqFicdUBx;p0Hzb%%!+CZ| zDyQRPv&9JA%7bWRI4&6*GNor0ootSz1dL(NG}}WVII30TWMr=qO$S8VC|e;ZM~}7@W($Bbzf~5T3RrEidqIxiLAkkC82sPxX?88-6utyP(X;GlyLo%I(D%$l8 z3b|~kb{Zms(?H#a)$c#N-&>n2uAy-_6s!!sn}O`WhrOfg&(?2OPr zhvdU3TT@{q2|YZqCYM5D(4jUvrB1~=7xvqv)$sv@1vcZsqF)DbwmEbs7IvvjWo(J_ zW7-&mh0#XQ6A6UcBykEQI98~FCa#T%x89Q%3(JW}2%>D|8W>fpX!+6~aeVQGRkF za$rL79-f&E-e~&AYS+~BDfpX)em^PIu42?Gzi3+#FPJneLXr6;e9aT98C5|yO^sBs z@iGp5RZPf|GFU2I9Iu>6L$f!U6F|A&w5RZPx|AjPzsh>Hcag;6;~hwIkl#xDht+IS zmu}zHz9(=?L)F$~5-y?Cr;bthqED-i*-y2(OdKepyqqagt`rUrm?Qh8Q^rG{KB@m2 z-L=&AcbZUpfVVn3;8q}uX31VxcH{P)xK{zme(oUC(M2whtn`WxR(dqJEXo9UGMs`I zKN;X}Iy6XJFP!7&2l0vefP+-IP`2_mP00+}kmA2n7UO!y*m#9=S!&nzr42S;GdKhUf=Ut>R#=8hX|-(}BK6_R)^oJZFVA6P@!IXsG+tOj zHgkAii9Fp-lwUHP`+`)Q>%DzItz&r(1cIsRo*FGgoFEMU_{j(Yn@$Ew1g`WNSCHXKjdLSu=wK2qaBzGQ4`$);^!^pplBxqhgDMu%=q7;nQZK_i& z3h04og%S!?r{w_CleOmr{oIhx6+~sWmVDDG^*AnLmK7hL6ncZAgOr|PiJ@>yt_#&! zc{(F&wJga@emgr@HZAA{z26^B z$ks2mMcez6Q!#@@Z0VRrnR4>lpK~Qr@=!Gx$jK2oW`a2d&c8t7gc^9n+alUjD(qw` zFMlCJJdi17b&hwED0(P+N?~Qg`JBD{@hN@I8JFcV-^+97^VyA!&ixu;%Y*t%Buv2s~l&;^%%OuG6) z#eKgPS@MXU!1|ShQG0e|`1f$v2$GDMeSChCcF!wG$qOlYSSS`k2n29bD?`6FZwpDZ=He6K5 z&H^J3G}&u+(${&WkRg$8)Dx>;26zk{v9(0JkWD?GL#E}VLVG6C^aK_A zV+9V5E0uEWp>%hB2iV|nl6!hnQ8Ul;;W<+49ONq3jEf)FNqJpvx#2BmBwjm?nj7rU zo|GuR2ZH z_4i~H7%LGYsEo0BZPK`RgJx z>1F!g!3s@xKU{$X#LmsxWre9CYaFGzzS959w;2*)y0UL}JXuNw*y@n-shly7&AY#q z?aPJ=(K4>oFl~vZC$VeiD4Cq3%O!s)AtTlLl7b{KNquCCx8F_hb&~WbuU6QxWDlCJ z)s`9}zS02)7@tW!4wgt^IZ1!o{JX~SIBzl@8?ocmZ69u~G(VITTiRV;+iP{MCx0Tv zi2g!1O_9`cv^!AR4Fric{JIosFh*vg0!PLQRj5#eft5Hi?H%H1Ysv~%2r+s?2%n!h z$H>WBy0118CwAMf>xll;N}*W8ma;8>p(J7y*{Ha}_NN~rU|GcQXk!TThg($wab%2S zrutAkDNV!Lp)SCX$kc{gJKts~(oLV}trN_@`V0_|xsls0jvT&4`Ux~8$`mL{oJNB8 zyOR@D6UO>o$LkBQ)1!}#5ON`*hia7}-q?M$URC-H_2o53^Cwc+xn_UZ)k=aoG4Pbv z3v}%fy$p@NP0uUjWVG;+autxwp|y{0MQ?-;bH&7Hj-OfbA#TZ>NxR}w51tX)k^Hl; zb2MdPPSDEBYYp0I{1Y!N!LwSV{jGz|WiaHfm$DfZ`sHHFUA;jV`bNNZ(z~S$oUY5g$<KlG5-|)vOfH17a8&S0$ts z>Y&U@=ge@6AsSMrH)Yi5NE_>WV=~*npwX76b3$68I~BCBr4pu>th%oPtfa>EJHGNq z-%IaOPO`*l@O`U{U(bOAL`x%284LIkdgc|g-L_*slIuxQop0sqb5F2oz5(xhX@$T_Wg?KkuyBGMMKesUS=*3n9Om&5C)#d%>+a~X;RWR4-(rX z$+{HHghot(GQwfTLk-vYiq5(wRKXBn6WC`m*}@x0$&uEOTGneoplaDdyC_)2&NeQ| z1%wF_RTGRaB+bl#LZZ)PyENIt9|YGMfxe~}AiG~AWgr_^36dZ|WL@sWCf4MhFzm|A zBdQJw0vXrQrd43mo8oQ>Gg26FhR z(>mUS44p45njwdOimPy$k$GN58qdP3s(6$(t+-WQBzA_^$cn=7KeDl5*0BMF7dJSY%g zV=6Z|94Y7!;7H`zCi)*WD&6xb#A^o-%jCbow$H!8ZtjNARGWX|NRNc~Jn327JogD$ ziefg%!GeP*KSN0+Sb49D8}p^UJQy4cYozair0tjaB=@;4-=Lxe%z&Q_o_TB;B;1kB z!Yc`Nf21bpxpg_{gQsEB}r)?=&;}*6wDoa?qejPDU1vgP*#Z8EiJAiRYw?@ zOQ=WiCQf0r>4HnPIuSt}c|W>+EN5axN=3ts7+mSO*F#^ksTE@5o=Cyb2@5-CScnBU z8nRRwEL8Q{Ci;75uNfjsMzf<~dW*2gV^DsFc^tkYm-XL-`d-Y1niP(WmGcNGJr>~9 zwk$eA4iw0c%A%?ga1z6oHLhbn)-{4e9XoU6v|+c;n<7W#(CSQ&Ribq=X6CtuNRw~b zQ3%l%1#P3W9SST72@td5RUk1VNHZl?F#AwyL9Te&m0v9(>WM$4P8A%lN%oR1D#$B{ zV1%Glxw7{uUH*@Jqk?XH)QcqkMoIRAh&VVhYhw%bybzJ$FWhf<%z1xTzjW>*sEl2_5!Y5GD*CWFqb1$BL2_ z@MMzg-)Mz&;L9ShRA5n}Q}G<2y24fb1|y^>yhMn4(RF(wXuvInh8fYMHfIcUmSi(M zoi#-uyP$5-Z}7DIL8jTjykph3QPG<#1I;hDB#c?2atUlS5R0Fr!h+gIks^a42V59* zD2Iv+v<)lq z6&|okB8-cWK1y9^jjI9O<_3YySyB@9)J%V8Zebxan8%asvnb~bc?T+v<3 z(elWSFDs9k4(b*{slzqP$*D%WG3H1Jv~z$Z!{4&^gzS?_`oc||ZHq(=5qje~PU8xK zTdor~CD$2k9A{~hGw!fb?lPH@e$uTjT3$S5G~YoJPJjsi|Ma` ziU=l}rOLDt&dkO8qvT_Lq(ESiM?yU`C0=pYT8U02=c%fvQecvfNY+PQ=NkJwVO_jJ>>c^%H4`p2~R~QmNZUGxe za-SQ~}<9AjI} z@HjCHe9US@Q3Fo>B|Ir7%;-Y}tA3^Rj|y?-(>~H13;%aX%{SI_l%kSE!9S3r7{h%i zLLxmxWy9o}^D6#r90@*O%0|gyw=hAWMWuk>);#e!r+bPqoq3Otl2Jr$Jr-f?43leL zcAb6nWtA7JHFzZT!grY;F^|KQ#EM(%ui}VK=I>CT)LIxw=O`@4YP?81N+==-aAG!AyB_eFIG_cJ{ykNDKVgkCu3SvgxiNqY;5^_lrMZBfG z2?Z_JP?5wYzt@b>`fnL!!iKs{5xCffuZL)}sh}@EcTS7fzHs`Y9td9y$ zKj#V@@jbtoT?C9>GF~A+Rr6!qr`3LPidaLekv5u$4~ngYn3j(65z>)@=hxwAQ&X)% zUtFAHcaq`DUXn0q=Y@Wu1X)XeY00obRmrb01`ggTsS=0_lBZyv4X#wGB%I3vBG4}XJPGMC%%}7Q_mP}ov2MZRW{8OD-xY;yEMFpFy4=Cg<%hx5hrw)YdqdiuvxWd((9d0Y&gh%5zWQAKMLl4g9|5W5qw8=}Xm>w(M zT@R9jWv|J!A=RB5$;8rG2UIw=?a8jga>P%&UDQ*Ih@}x8(4J!t+)A0w+bBY1Ymkl< zMimrRX?ZdXw{{w#1qs|Ks5p@#zD*pGXLr*|2s%xxs{&CYh%T$#r&cdz7krwcDVW-D zCHH5jsTv!pCVAqtFqAx^0d*a!q8QvQf(tRDf=pu)Nf~}MCAC-)fKFF$8 z>L2{~hU2N;XIsOB(dD^eMrXA0|C>VJD`z*xDY=|U*h2cU%@A=YM*BJ9t+6TX1X6>Q zGYBA<4GADoD9$g27A^3x_DS$)wZTRXpq#`7`#oXA_6A*>&fq{BPvPN0v?G9I;Oj#K z=Z7OA29zAR(~Bgt-{K2Ph!jSNFCbe9@iw-aVS-$;&PiiZ{4f~R5Dq3RWf|{k6>MyT z1r_8N^LqP%1w5?;7_x##B``=?bz*!e(BBsiAUA?cWO-rR$FQPQY2f*isxX6unoRw&Vu+jKc!6OR6 zPCv;gS;UYji6G%j91uyI6(DKEpomb4Mm*S9q3IGL62`KGSAE%`rQW&wN> zUKpP+Fr>B%h9sCsu6l_CDAh5Iqz34Kp-w>n!>-Yy7gF*J(dr#1TobZcC=CQMzC$j{ zPm36kYQ>?t!J~#BP<(fj+ zVIi}+&Qhx%k}w$MZ{Ny;mqs-Rlx>>)1K4BQ@8ow7QtF^qsfVTI$5Am2%g4A18x z#>k7-;IwgHjIo54*Oo2+0!MSrG75T=1T}GzIHb5>a(wj(D|%KD0yM`3DilUWE}jl6 zG02J!;^yCBG$VKv3{CC`m+#A?8F_PM)mZO_z#(xuF{dPt!!c?&p<>hT)65=Y6kxFv!8Ep5^#$E1h2A4cO_I4(nSk!HK*SaB zC^R4>aU@VG?BI?`DJf_fYNZUyFolpVs)l!pI6Ehzxc~Yf#Y=w~BGkAc9e3V6z3_xp9bJkXmIRm4%EFzIEO41W8^# zA=0}CF9Vu5*tC*jl-#f)NDM$g&}Jnx=C1@0ATmlRUl!K#o{xq$^C1sIEcIB3Ixb>T>yMw_8EcUIY8 zQ30{Xkn{p<{XdBahXuhOe}K{;cbKp!vK>RRb)wZlM!X?MF;2OZ7Gag{7I0@$HTCoh zJ%`A$ib$bk@>NzA)p6)SP3%(h2A(Zv6xc{B%uy7?AYK9*iq!@vVmM z+3+k^V7H$=-17?^r5AD*Xwr*gbWNB<#FApoDicyt6b>=6Ns+92$`)ZzG6Ytf5k7uw zhGRM`t`bL@X)T#rf#yKS-;!Xj(P{zr}D(xS~^re2EnL2w9aVB9n1BV$>FIaQ_S+($?@xc=bS#0@CeG=zLgVS$uG7>!bDRdM($ZMF>1L81sW|4(BM(WTWs4Fup zKtQTfa}KA7N^Oi_$FLTJ&z@*Vqe`w|vx&rl2CR^_MsnpzVGs7bCb;E{EuIWHhbL8v zE!8bK!W2^hZq_4Z=!Os~)bCPAKuEI5<3D%P(L&U*t?e=DT$~_`F9K9dT4(08g}|uew(;1Dc;Cb>L_QZ3xi|V^)q7%KbQ` z4owLphw$qoG*GH?&nE1nLU?TI1}401KP~UKg0Q2WhoHhtOG_H;K?AX%AX++>4XL8BHxeTq7b(;{^@~ z|GMZPn0SE$9pedFltpncwge2zL=_U2grB5{_Y)$>$8*|B$olpqsTgq&@VG4Kl4l&_ z93oa3?i^W9S%9Gh6>#E4Cdrq|q%k;^2vCa&k-kwZL;6-RJ7K2YlxouREHFkC+fgKB ztt=o@71l||EJ1wv@K96?Vg_JB7Bve}sD$q0q(+G>{!z2{h9E;Vx-ZDRH6-cU7`38N z(|TU8;Xut(i7@9X|8{VxI7n2uD91F{xzZx>i4Zf+K8-CD@=X_Rz(%L;n@W4|Xk##r z7V1IEvqs#h#BimUF~LhcRl^vpG<1a^!V)%kv!BGm0mMqLWu!4}H71pWQ`b>VkkeA| zt6+=!C?lMD4M~}(SxS&WO3^W@VVzolW&ev+y6*nG4-KL1Q=uQII_3UB!R~WoS7)XuS<)g11$xL^daI!i-au3=`dy; zH1f@MO^G5HD2agHe94qqY~g`Qa~5FCDHo)C_{SqTHhl*W3JqR!yKWfQ=Z}&yZDAuF4hEeZHu+ zmTBx*Q4TMJ(1xJWex!xFQ`RG=LfZZ)R+NyYC@B{bu~0;Qk{nP%lN$AYFFh7GL9hmqzhUT8_Hp$(E~t}z(&T$RaSyBy)esdDxyH%~_(IaEaP)C#jgb67+O zHD1exl8|gGCdwmQ3dAv>j!p!kEOFU#ttv%JPnt$E zYMdC4qRT(&2e2k!&~>dVtF7M)LDmpaP&Y(g(Q;ml>P4BD3b73ujc}t7h!MwDEp444 z_*!j)g?6RkpDo#H_k&geUGK!Ad~gZyQW}X@ZDjFr48K1m@6N^7Kmj3KTH z(9J>Z6VPKqg3;zjr6iVxoLYZT!Ubzq)ysIc?26P7O7q7|-j_@YA>3DE2-cpZouj)` zMF>F~e*SV~rm2M$4-@CpP7CvG3vrVAnPSP1v>?JAcSFOT=lfvs*vOIu7(lDC)?}FK zD3S`pCHyr^-z_Xzf|w{z8!r$`R%)2kW{LD73De6b3@V-GX@n&{v`;w+BX^UvWn;whS@RCK0=Q(H=V#tQj|2C@OXy+J3mX)fIK_8SbsuZyS zZXik{O6n^&*Vy44!rGL$(~otyLCotj z*mV$-+*!jo&!Z;sFHY&msztQJ^N>PckUu#uR-lW%yL$u$Y(wYtA{#}LB}xe zO5SEEU43K_i9`u8Y)+TlQ9%;43q}5T{7rikUecNLYg*ND4$fDI&iB+$LOuLD2Qdg9 zLd;Ui?+P)*KdL3yq?c=Q6hd(PK(mcDS7Nxagp!C+4|`TM8TzG&8KXa2mRBiF^PoFe zgUwvxtz7cdB*^Oj?Q&BsJK9 zn1#YR#8nw59VmhJY!ORG)S;cMHN@5MFD(com{~TQE@<9L2#Qx|;;l#SJpwq(Q4J9p z2B8_sinj_C#b?2?Q&Zo_RIq)-H?Q7(W2w%#%(eM*wo)jPi{m7P1+w)Sf*u&4jCIeg zoI-p1!ZhhcWuY+mw?IOo1gm)RhQ13@TZI>lPFV+&|JLR*;g=Xn(v==l<{GOi_C=*Bq!z3(gkqQI$##AExkh0hib)G5 zmEqbPk7t>RtQ#7K*N{t~sDFupG)4C6yy-)EbpuFQX|jk@H-ylFS-BzvgAkLt#bgEx zdg&s)0;wY=ksCUYs1h)GkcAj*B(}bFu(GC%Z_`-9)q&*_#yKI+p7s-CS=JeH%ufFzfqpNQ2RGvuG_CyMv+_}==l%uK(W%0;GCXOg+iS#B?NpZIxjK&yBkCx54yW_k?pp`A!)Nb{R2*nB~ zwFM?4sR)vm%T`N;t+T8n#A?Jx?)zi(fR`6^gO7BcYwlRsIE@kKB%V2^8#MSbn0B$x zBDZx4aR?!JRPwR**)76OUO^e&Zx3>MW;Yg8x%`{jKF!xr7*s^OMoqDNu2dt4rV;df zCq!t?>~#^SPhBXs8l~}6LTpT)qIX_$Sty$LXMYy^*GQvAOsoH&b)^x}(kldE5ozSr zODR}&eHV%Bt6q?{5vG0eNkH9xsb0j%D2chGuc1|@B1AKFYeQ(nl+!JUqA`48(eb50 zg)=G(iMe0au(CP*oP_*5^m!V@HJh#%y9BxJ_pw%En1W-L&!ZMlgo;WfIoTB7a>Ox| zb*qhZ3(2K(N=bbr8o@uq>k}tDRPwal-B#u8Ta(8u(5uK(@;H2`@4thAnp z*vTLSv!^)b$jF9rjL}an6MRFC)ms&;#mS#y7L00wEgDMJ)Js&2wn?6SDt_+1v^SZVOKXSQkhiRg)dRBTvHBd@i zmX!E%2oVyC`&6?VOzgyDGNB9Rtc)>IItGr9L)viFb8c;tNI7p=IYpp{qmYf(C*~N` z<9CQEAqc0UVGkgPF~quPSJE_`xT$lZUCbo5L&}L!=tbF2QeVgIB{c%4rn7wB*+I6+Gqp<++nR>M-{p^&v4L%o}sWWx@+`?P^;lN`^|s zGEB9o^m198$zhL_QD#;vZIz)B44t?p_U5FHZc61BG+#k3>&Iyg#0yQuS0XhGib6U+ zGf|Pm2&a7G;e?SIh@v4ACwiOl?Pir4SGFeo=zPS)Z3zA<=iic(z8Tc*+9351X_8wC zEFk2JpDIr?PYC-mr5E&8%(ieznA5W|BA%7Re<;|Tqj z^SSD`)2Wz*RAtIFJWL_$a#7T-YU1^5)=slGA#C~N`sy>Cj#6_iTex6QQFP>-)$D;yE?iSuXN7E;?T&aRw;2$f{iLOGdYNqW>WKe;!t%Y z=oYWU!YAC;F!P~wL*Ptd?wsW`18Qa2mKTA7uN z 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 diff --git a/data/app/dialpad.png b/data/app/dialpad.png deleted file mode 100644 index b54013bf57c92609bc46a086b4194e44bcfe8631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6139 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 diff --git a/data/app/history.png b/data/app/history.png deleted file mode 100644 index 887989a35007b998d24ad033128366b8e74f4726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6031 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 diff --git a/data/app/received.png b/data/app/received.png deleted file mode 100644 index 2b45263cbedf6c5dcc9880d7c8ad4bd285ff6e55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2992 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 z 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 literal 0 HcmV?d00001 diff --git a/dialcentral/data/dialpad.png b/dialcentral/data/dialpad.png new file mode 100644 index 0000000000000000000000000000000000000000..b54013bf57c92609bc46a086b4194e44bcfe8631 GIT binary patch literal 6139 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 literal 0 HcmV?d00001 diff --git a/dialcentral/data/history.png b/dialcentral/data/history.png new file mode 100644 index 0000000000000000000000000000000000000000..887989a35007b998d24ad033128366b8e74f4726 GIT binary patch literal 6031 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 literal 0 HcmV?d00001 diff --git a/dialcentral/data/received.png b/dialcentral/data/received.png new file mode 100644 index 0000000000000000000000000000000000000000..2b45263cbedf6c5dcc9880d7c8ad4bd285ff6e55 GIT binary patch literal 2992 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 mn&+q6?S(^k<#?lAS^IBJ1l>> class Single(object): pass + >>> SingleListModel = create_single_column_list_model("s") + >>> slm = SingleListModel([Single(), Single(), Single()]) + """ + + class SingleColumnListModel(QtCore.QAbstractListModel): + + def __init__(self, l = None): + QtCore.QAbstractListModel.__init__(self) + self._list = l if l is not None else [] + self.setRoleNames({0: columnName}) + + def __len__(self): + return len(self._list) + + def __getitem__(self, key): + return self._list[key] + + def __setitem__(self, key, value): + with scoped_model_reset(self): + self._list[key] = value + + def __delitem__(self, key): + with scoped_model_reset(self): + del self._list[key] + + def __iter__(self): + return iter(self._list) + + def __repr__(self): + return '<%s (%s)>' % ( + self.__class__.__name__, + columnName, + ) + + def rowCount(self, parent=QtCore.QModelIndex()): + return len(self._list) + + def data(self, index, role): + if index.isValid() and role == 0: + return self._list[index.row()] + return None + + if "name" in kwargs: + SingleColumnListModel.__name__ = kwargs["name"] + + return SingleColumnListModel + + +def create_tupled_list_model(*columnNames, **kwargs): + """ + >>> class Column0(object): pass + >>> class Column1(object): pass + >>> class Column2(object): pass + >>> MultiColumnedListModel = create_tupled_list_model("c0", "c1", "c2") + >>> mclm = MultiColumnedListModel([(Column0(), Column1(), Column2())]) + """ + + class TupledListModel(QtCore.QAbstractListModel): + + def __init__(self, l = None): + QtCore.QAbstractListModel.__init__(self) + self._list = l if l is not None else [] + self.setRoleNames(dict(enumerate(columnNames))) + + def __len__(self): + return len(self._list) + + def __getitem__(self, key): + return self._list[key] + + def __setitem__(self, key, value): + with scoped_model_reset(self): + self._list[key] = value + + def __delitem__(self, key): + with scoped_model_reset(self): + del self._list[key] + + def __iter__(self): + return iter(self._list) + + def __repr__(self): + return '<%s (%s)>' % ( + self.__class__.__name__, + ', '.join(columnNames), + ) + + def rowCount(self, parent=QtCore.QModelIndex()): + return len(self._list) + + def data(self, index, role): + if index.isValid() and 0 <= role and role < len(columnNames): + return self._list[index.row()][role] + return None + + if "name" in kwargs: + TupledListModel.__name__ = kwargs["name"] + + return TupledListModel + + +class FileSystemModel(QtCore.QAbstractListModel): + """ + Wrapper around QtGui.QFileSystemModel + """ + + FILEINFOS = [ + "fileName", + "isDir", + "filePath", + "completeSuffix", + "baseName", + ] + + EXTINFOS = [ + "type", + ] + + ALLINFOS = FILEINFOS + EXTINFOS + + def __init__(self, model, path): + QtCore.QAbstractListModel.__init__(self) + self._path = path + + self._model = model + self._rootIndex = self._model.index(self._path) + + self._child = None + self.setRoleNames(dict(enumerate(self.ALLINFOS))) + self._model.directoryLoaded.connect(self._on_directory_loaded) + + childChanged = qt_compat.Signal(QtCore.QObject) + + def _child(self): + assert self._child is not None + return self._child + + child = qt_compat.Property(QtCore.QObject, _child, notify=childChanged) + + backendChanged = qt_compat.Signal() + + def _parent(self): + finfo = self._model.fileInfo(self._rootIndex) + return finfo.fileName() + + parent = qt_compat.Property(str, _parent, notify=backendChanged) + + @qt_compat.Slot(str) + def browse_to(self, path): + if self._child is None: + self._child = FileSystemModel(self._model, path) + else: + self._child.switch_to(path) + self.childChanged.emit() + return self._child + + @qt_compat.Slot(str) + def switch_to(self, path): + with scoped_model_reset(self): + self._path = path + self._rootIndex = self._model.index(self._path) + self.backendChanged.emit() + + def __len__(self): + return self._model.rowCount(self._rootIndex) + + def __getitem__(self, key): + return self._model.index(key, 0, self._rootIndex) + + def __iter__(self): + return (self[i] for i in xrange(len(self))) + + def rowCount(self, parent=QtCore.QModelIndex()): + return len(self) + + def data(self, index, role): + if index.isValid() and 0 <= role and role < len(self.ALLINFOS): + internalIndex = self._translate_index(index) + info = self._model.fileInfo(internalIndex) + if role < len(self.FILEINFOS): + field = self.FILEINFOS[role] + value = getattr(info, field)() + else: + role -= len(self.FILEINFOS) + field = self.EXTINFOS[role] + if field == "type": + return self._model.type(internalIndex) + else: + raise NotImplementedError("Out of range that was already checked") + return value + return None + + def _on_directory_loaded(self, path): + if self._path == path: + self.backendChanged.emit() + self.reset() + + def _translate_index(self, externalIndex): + internalIndex = self._model.index(externalIndex.row(), 0, self._rootIndex) + return internalIndex + + +@contextlib.contextmanager +def scoped_model_reset(model): + model.beginResetModel() + try: + yield + finally: + model.endResetModel() + + +def create_qobject(*classDef, **kwargs): + """ + >>> Car = create_qobject( + ... ('model', str), + ... ('brand', str), + ... ('year', int), + ... ('inStock', bool), + ... name='Car' + ... ) + >>> print Car + + >>> + >>> c = Car(model='Fiesta', brand='Ford', year=1337) + >>> print c.model, c.brand, c.year, c.inStock + Fiesta Ford 1337 False + >>> print c + + >>> + >>> c.inStock = True + >>> + >>> print c.model, c.brand, c.year, c.inStock + Fiesta Ford 1337 True + >>> print c + + """ + + class AutoQObject(QtCore.QObject): + + def __init__(self, **initKwargs): + QtCore.QObject.__init__(self) + for key, val in classDef: + setattr(self, '_'+key, initKwargs.get(key, val())) + + def __repr__(self): + values = ( + '%s=%r' % (key, getattr(self, '_'+key)) + for key, value in classDef + ) + return '<%s (%s)>' % ( + kwargs.get('name', self.__class__.__name__), + ', '.join(values), + ) + + for key, value in classDef: + nfy = locals()['_nfy_'+key] = qt_compat.Signal() + + def _get(key): + def f(self): + return self.__dict__['_'+key] + return f + + def _set(key): + def f(self, value): + setattr(self, '_'+key, value) + getattr(self, '_nfy_'+key).emit() + return f + + setter = locals()['_set_'+key] = _set(key) + getter = locals()['_get_'+key] = _get(key) + + locals()[key] = qt_compat.Property(value, getter, setter, notify=nfy) + del nfy, _get, _set, getter, setter + + return AutoQObject + + +class QObjectProxy(object): + """ + Proxy for accessing properties and slots as attributes + + This class acts as a proxy for the object for which it is + created, and makes property access more Pythonic while + still allowing access to slots (as member functions). + + Attribute names starting with '_' are not proxied. + """ + + def __init__(self, rootObject): + self._rootObject = rootObject + m = self._rootObject.metaObject() + self._properties = [ + m.property(i).name() + for i in xrange(m.propertyCount()) + ] + + def __getattr__(self, key): + value = self._rootObject.property(key) + + # No such property, so assume we call a slot + if value is None and key not in self._properties: + return getattr(self._rootObject, key) + + return value + + def __setattr__(self, key, value): + if key.startswith('_'): + object.__setattr__(self, key, value) + else: + self._rootObject.setProperty(key, value) + + +if __name__ == "__main__": + import doctest + print doctest.testmod() diff --git a/dialcentral/util/qt_compat.py b/dialcentral/util/qt_compat.py index 2ab7fa4..409c00d 100644 --- a/dialcentral/util/qt_compat.py +++ b/dialcentral/util/qt_compat.py @@ -3,12 +3,15 @@ from __future__ import with_statement from __future__ import division -#try: -# import PySide.QtCore as _QtCore -# QtCore = _QtCore -# USES_PYSIDE = True -#except ImportError: -if True: +_TRY_PYSIDE = False + +try: + if not _TRY_PYSIDE: + raise ImportError() + import PySide.QtCore as _QtCore + QtCore = _QtCore + USES_PYSIDE = True +except ImportError: import sip sip.setapi('QString', 2) sip.setapi('QVariant', 2) diff --git a/dialcentral/util/qwrappers.py b/dialcentral/util/qwrappers.py index 2c50c8a..09270cd 100644 --- a/dialcentral/util/qwrappers.py +++ b/dialcentral/util/qwrappers.py @@ -9,8 +9,8 @@ import qt_compat QtCore = qt_compat.QtCore QtGui = qt_compat.import_module("QtGui") -from util import qui_utils -from util import misc as misc_utils +import qui_utils +import misc as misc_utils _moduleLogger = logging.getLogger(__name__) diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..8eb7735 --- /dev/null +++ b/setup.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys +reload(sys).setdefaultencoding("UTF-8") +import os + +try: + from sdist_maemo import sdist_maemo as _sdist_maemo + sdist_maemo = _sdist_maemo +except ImportError: + sdist_maemo = None + print 'sdist_maemo command not available' + +from distutils.core import setup + + +#[[[cog +# import cog +# from dialcentral import constants +# cog.outl('APP_NAME="%s"' % constants.__app_name__) +# cog.outl('PRETTY_APP_NAME="%s"' % constants.__pretty_app_name__) +# cog.outl('VERSION="%s"' % constants.__version__) +# cog.outl('BUILD="%s"' % constants.__build__) +# cog.outl('DESKTOP_FILE_PATH="%s"' % DESKTOP_FILE_PATH) +# cog.outl('INPUT_DESKTOP_FILE="%s"' % INPUT_DESKTOP_FILE) +# cog.outl('ICON_CATEGORY="%s"' % ICON_CATEGORY) +# cog.outl('ICON_SIZES=[%s]' % ICON_SIZES) +#]]] +APP_NAME="dialcentral" +PRETTY_APP_NAME="DialCentral" +VERSION="1.3.6" +BUILD="0" +DESKTOP_FILE_PATH="/usr/share/applications" +INPUT_DESKTOP_FILE="data/ubuntu/dialcentral.desktop" +ICON_CATEGORY="apps" +ICON_SIZES=[32,48] +#[[[end]]] (checksum: 6b362845c8509854ec12f330afd9c7b7) + +CHANGES = """Switching from py2deb.py to sdist_maemo +""".strip() +BUGTRACKER_URL = "https://bugs.maemo.org/enter_bug.cgi?product=Dialcentral" + + +def is_package(path): + return ( + os.path.isdir(path) and + os.path.isfile(os.path.join(path, '__init__.py')) + ) + + +def find_packages(path, base="", includeRoot=False): + """ Find all packages in path """ + if includeRoot: + assert not base, "Base not supported with includeRoot: %r" % base + rootPath, module_name = os.path.split(path) + yield module_name + base = module_name + for item in os.listdir(path): + dir = os.path.join(path, item) + if is_package( dir ): + if base: + module_name = "%(base)s.%(item)s" % vars() + else: + module_name = item + yield module_name + for mname in find_packages(dir, module_name): + yield mname + + +setup( + name=APP_NAME, + version=VERSION, + description="Touch screen enhanced interface to the GoogleVoice phone service", + long_description="Touch screen enhanced interface to the GoogleVoice phone service", + author="Ed Page", + author_email="eopage@byu.net", + maintainer="Ed Page", + maintainer_email="eopage@byu.net", + url="http://wiki.maemo.org/DialCentral", + license="GNU LGPLv2.1", + scripts=[ + "DialCentral", + ], + packages=list(find_packages(APP_NAME, includeRoot=True)), + package_data={ + "dialcentral": ["data/*.wav", "data/*.png"], + }, + data_files=[ + (DESKTOP_FILE_PATH, [INPUT_DESKTOP_FILE]), + ] + + [ + ( + "/usr/share/icons/hicolor/%sx%s/%s" % (size, size, ICON_CATEGORY), + ["data/icons/%s/%s.png" % (size, APP_NAME)] + ) + for size in ICON_SIZES + ], + requires=[ + "PySide", + "simplejson", + "xml", + ], + cmdclass={ + 'sdist_ubuntu': sdist_maemo, + 'sdist_diablo': sdist_maemo, + 'sdist_fremantle': sdist_maemo, + 'sdist_harmattan': sdist_maemo, + }, + options={ + "sdist_ubuntu": { + "debian_package": APP_NAME, + "section": "comm", + "copyright": "lgpl", + "changelog": CHANGES, + "buildversion": str(BUILD), + "depends": "python, python-pyside.qtcore, python-pyside.qtgui, python-simplejson, python-xml, python-dbus, python-gst0.10", + "architecture": "any", + }, + "sdist_diablo": { + "debian_package": APP_NAME, + "Maemo_Display_Name": PRETTY_APP_NAME, + #"Maemo_Upgrade_Description": CHANGES, + "Maemo_Bugtracker": BUGTRACKER_URL, + "Maemo_Icon_26": "data/icons/26/%s.png" % APP_NAME, + "section": "user/network", + "copyright": "lgpl", + "changelog": CHANGES, + "buildversion": str(BUILD), + "depends": "python2.5, python2.5-qt4-core, python2.5-qt4-gui, python-simplejson, python-xml | python2.5-xml, python-dbus | python2.5-dbus", + "architecture": "any", + }, + "sdist_fremantle": { + "debian_package": APP_NAME, + "Maemo_Display_Name": PRETTY_APP_NAME, + #"Maemo_Upgrade_Description": CHANGES, + "Maemo_Bugtracker": BUGTRACKER_URL, + "Maemo_Icon_26": "data/icons/48/%s.png" % APP_NAME, + "section": "user/network", + "copyright": "lgpl", + "changelog": CHANGES, + "buildversion": str(BUILD), + "depends": "python, python-pyside.qtcore, python-pyside.qtgui, python-pyside.qtmaemo5, python-simplejson, python-gst0.10, python-xml | python2.5-xml, python-dbus | python2.5-dbus", + "architecture": "any", + }, + "sdist_harmattan": { + "debian_package": APP_NAME, + "Maemo_Display_Name": PRETTY_APP_NAME, + #"Maemo_Upgrade_Description": CHANGES, + "Maemo_Bugtracker": BUGTRACKER_URL, + "Maemo_Icon_26": "data/icons/48/%s.png" % APP_NAME, + "MeeGo_Desktop_Entry_Filename": APP_NAME, + #"MeeGo_Desktop_Entry": "", + "section": "user/science", + "copyright": "lgpl", + "changelog": CHANGES, + "buildversion": str(BUILD), + "depends": "python, python-pyside.qtcore, python-pyside.qtgui, python-simplejson, python-xml", + "architecture": "any", + }, + "bdist_rpm": { + "requires": "REPLACEME", + "icon": "data/icons/48/%s.png" % APP_NAME, + "group": "REPLACEME", + }, + }, +) diff --git a/support/builddeb.py b/support/builddeb.py deleted file mode 100755 index 7b904e4..0000000 --- a/support/builddeb.py +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/python2.5 - -import os -import sys - -try: - import py2deb -except ImportError: - import fake_py2deb as py2deb - -import constants - - -__appname__ = constants.__app_name__ -__description__ = """Touch screen enhanced interface to the GoogleVoice phone service -Features: -. -* Dialpad for quick call -. -* Checking voicemails, texts, call history -. -* Sending texts -. -* Notification support for texts, voicemail, and/or missed calls -. -Homepage: http://gc-dialer.garage.maemo.org/ -""" -__author__ = "Ed Page" -__email__ = "eopage@byu.net" -__version__ = constants.__version__ -__build__ = constants.__build__ -__changelog__ = """ -* Adding back in GTalk callback for those who can use it -* Polishing button sizing and some wording -* Fixed a bug with alert LED on Maemo 4.1 -""".strip() - - -__postinstall__ = """#!/bin/sh -e - -gtk-update-icon-cache -f /usr/share/icons/hicolor -""" % {"name": constants.__app_name__} - -__preremove__ = """#!/bin/sh -e - -python /opt/dialcentral/lib/alarm_handler.py -d || true -""" - - -def find_files(prefix, path): - for root, dirs, files in os.walk(path): - for file in files: - if file.startswith(prefix+"-"): - fileParts = file.split("-") - unused, relPathParts, newName = fileParts[0], fileParts[1:-1], fileParts[-1] - assert unused == prefix - relPath = os.sep.join(relPathParts) - yield relPath, file, newName - - -def unflatten_files(files): - d = {} - for relPath, oldName, newName in files: - if relPath not in d: - d[relPath] = [] - d[relPath].append((oldName, newName)) - return d - - -def build_package(distribution): - try: - os.chdir(os.path.dirname(sys.argv[0])) - except: - pass - - py2deb.Py2deb.SECTIONS = py2deb.SECTIONS_BY_POLICY[distribution] - p = py2deb.Py2deb(__appname__) - p.prettyName = constants.__pretty_app_name__ - p.description = __description__ - p.bugTracker = "https://bugs.maemo.org/enter_bug.cgi?product=Dialcentral" - p.author = __author__ - p.mail = __email__ - p.license = "lgpl" - p.depends = ", ".join([ - "python2.6 | python2.5", - "python-xml | python2.5-xml", - "python-dbus | python2.5-dbus", - "python-simplejson", - ]) - p.depends += { - "debian": ", python-qt4, python-gst0.10", - "diablo": ", python2.5-qt4-core, python2.5-qt4-gui", - "fremantle": ", python2.5-qt4-core, python2.5-qt4-gui, python2.5-qt4-maemo5, python-gst0.10", - #"fremantle": ", python-pyside.qtgui, python-pyside.qtcore, python-pyside.qtmaemo5, python-qtmobility.contacts", - }[distribution] - p.recommends = ", ".join([ - ]) - p.section = { - "debian": "comm", - "diablo": "user/network", - "fremantle": "user/network", - }[distribution] - p.arch = "all" - p.urgency = "low" - p.distribution = "diablo fremantle debian" - p.repository = "extras" - p.changelog = __changelog__ - p.postinstall = __postinstall__ - p.preremove = __preremove__ - p.icon = { - "debian": "26x26-dialcentral.png", - "diablo": "26x26-dialcentral.png", - "fremantle": "64x64-dialcentral.png", # Fremantle natively uses 48x48 - }[distribution] - p["/opt/%s/bin" % __appname__] = [ "%s.py" % __appname__ ] - for relPath, files in unflatten_files(find_files("src", ".")).iteritems(): - fullPath = "/opt/%s/lib" % __appname__ - if relPath: - fullPath += os.sep+relPath - p[fullPath] = list( - "|".join((oldName, newName)) - for (oldName, newName) in files - ) - for relPath, files in unflatten_files(find_files("data", ".")).iteritems(): - fullPath = "/opt/%s/share" % __appname__ - if relPath: - fullPath += os.sep+relPath - p[fullPath] = list( - "|".join((oldName, newName)) - for (oldName, newName) in files - ) - p["/usr/share/applications/hildon"] = ["dialcentral.desktop"] - p["/usr/share/icons/hicolor/26x26/hildon"] = ["26x26-dialcentral.png|dialcentral.png"] - p["/usr/share/icons/hicolor/64x64/hildon"] = ["64x64-dialcentral.png|dialcentral.png"] - p["/usr/share/icons/hicolor/scalable/hildon"] = ["scale-dialcentral.png|dialcentral.png"] - - print p - if distribution == "debian": - print p.generate( - version="%s-%s" % (__version__, __build__), - changelog=__changelog__, - build=True, - tar=False, - changes=False, - dsc=False, - ) - else: - print p.generate( - version="%s-%s" % (__version__, __build__), - changelog=__changelog__, - build=False, - tar=True, - changes=True, - dsc=True, - ) - print "Building for %s finished" % distribution - - -if __name__ == "__main__": - if len(sys.argv) == 1: - distribution = "fremantle" - else: - distribution = sys.argv[1] - build_package(distribution) diff --git a/support/fake_py2deb.py b/support/fake_py2deb.py deleted file mode 100644 index 5d6149d..0000000 --- a/support/fake_py2deb.py +++ /dev/null @@ -1,56 +0,0 @@ -import pprint - - -class Py2deb(object): - - def __init__(self, appName): - self._appName = appName - self.description = "" - self.author = "" - self.mail = "" - self.license = "" - self.depends = "" - self.section = "" - self.arch = "" - self.ugency = "" - self.distribution = "" - self.repository = "" - self.changelog = "" - self.postinstall = "" - self.icon = "" - self._install = {} - - def generate(self, appVersion, appBuild, changelog, tar, dsc, changes, build, src): - return """ -Package: %s -version: %s-%s -Changes: -%s - -Build Options: - Tar: %s - Dsc: %s - Changes: %s - Build: %s - Src: %s - """ % ( - self._appName, appVersion, appBuild, changelog, tar, dsc, changes, build, src - ) - - def __str__(self): - parts = [] - parts.append("%s Package Settings:" % (self._appName, )) - for settingName in dir(self): - if settingName.startswith("_"): - continue - parts.append("\t%s: %s" % (settingName, getattr(self, settingName))) - - parts.append(pprint.pformat(self._install)) - - return "\n".join(parts) - - def __getitem__(self, key): - return self._install[key] - - def __setitem__(self, key, item): - self._install[key] = item diff --git a/support/py2deb.py b/support/py2deb.py deleted file mode 100644 index 0518480..0000000 --- a/support/py2deb.py +++ /dev/null @@ -1,994 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -## -## Copyright (C) 2009 manatlan manatlan[at]gmail(dot)com -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published -## by the Free Software Foundation; version 2 only. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -""" -Known limitations : -- don't sign package (-us -uc) -- no distinctions between author and maintainer(packager) - -depends on : -- dpkg-dev (dpkg-buildpackage) -- alien -- python -- fakeroot - -changelog - - ??? ?/??/20?? (By epage) - - PEP8 - - added recommends - - fixed bug where it couldn't handle the contents of the pre/post scripts being specified - - Added customization based on the targeted policy for sections (Maemo support) - - Added maemo specific tarball, dsc, changes file generation support (including icon support) - - Added armel architecture - - Reduced the size of params being passed around by reducing the calls to locals() - - Added respository, distribution, priority - - Made setting control file a bit more flexible - - 0.5 05/09/2009 - - pre/post install/remove scripts enabled - - deb package install py2deb in dist-packages for py2.6 - - 0.4 14/10/2008 - - use os.environ USERNAME or USER (debian way) - - install on py 2.(4,5,6) (*FIX* do better here) - -""" - -import os -import hashlib -import sys -import shutil -import time -import string -import StringIO -import stat -import commands -import base64 -import tarfile -from glob import glob -from datetime import datetime -import socket # gethostname() -from subprocess import Popen, PIPE - -#~ __version__ = "0.4" -__version__ = "0.5" -__author__ = "manatlan" -__mail__ = "manatlan@gmail.com" - - -PERMS_URW_GRW_OR = stat.S_IRUSR | stat.S_IWUSR | \ - stat.S_IRGRP | stat.S_IWGRP | \ - stat.S_IROTH - -UID_ROOT = 0 -GID_ROOT = 0 - - -def run(cmds): - p = Popen(cmds, shell=False, stdout=PIPE, stderr=PIPE) - time.sleep(0.01) # to avoid "IOError: [Errno 4] Interrupted system call" - out = string.join(p.stdout.readlines()).strip() - outerr = string.join(p.stderr.readlines()).strip() - return out - - -def deb2rpm(file): - txt=run(['alien', '-r', file]) - return txt.split(" generated")[0] - - -def py2src(TEMP, name): - l=glob("%(TEMP)s/%(name)s*.tar.gz" % locals()) - if len(l) != 1: - raise Py2debException("don't find source package tar.gz") - - tar = os.path.basename(l[0]) - shutil.move(l[0], tar) - - return tar - - -def md5sum(filename): - f = open(filename, "r") - try: - return hashlib.md5(f.read()).hexdigest() - finally: - f.close() - - -class Py2changes(object): - - def __init__(self, ChangedBy, description, changes, files, category, repository, **kwargs): - self.options = kwargs # TODO: Is order important? - self.description = description - self.changes=changes - self.files=files - self.category=category - self.repository=repository - self.ChangedBy=ChangedBy - - def getContent(self): - content = ["%s: %s" % (k, v) - for k,v in self.options.iteritems()] - - if self.description: - description=self.description.replace("\n","\n ") - content.append('Description: ') - content.append(' %s' % description) - if self.changes: - changes=self.changes.replace("\n","\n ") - content.append('Changes: ') - content.append(' %s' % changes) - if self.ChangedBy: - content.append("Changed-By: %s" % self.ChangedBy) - - content.append('Files:') - - for onefile in self.files: - md5 = md5sum(onefile) - size = os.stat(onefile).st_size.__str__() - content.append(' ' + md5 + ' ' + size + ' ' + self.category +' '+self.repository+' '+os.path.basename(onefile)) - - return "\n".join(content) + "\n\n" - - -def py2changes(params): - changescontent = Py2changes( - "%(author)s <%(mail)s>" % params, - "%(description)s" % params, - "%(changelog)s" % params, - ( - "%(TEMP)s/%(name)s_%(version)s.tar.gz" % params, - "%(TEMP)s/%(name)s_%(version)s.dsc" % params, - ), - "%(section)s" % params, - "%(repository)s" % params, - Format='1.7', - Date=time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()), - Source="%(name)s" % params, - Architecture="%(arch)s" % params, - Version="%(version)s" % params, - Distribution="%(distribution)s" % params, - Urgency="%(urgency)s" % params, - Maintainer="%(author)s <%(mail)s>" % params - ) - f = open("%(TEMP)s/%(name)s_%(version)s.changes" % params,"wb") - f.write(changescontent.getContent()) - f.close() - - fileHandle = open('/tmp/py2deb2.tmp', 'w') - fileHandle.write('#!/bin/sh\n') - fileHandle.write("cd " +os.getcwd()+ "\n") - # TODO Renable signing - # fileHandle.write("gpg --local-user %(mail)s --clearsign %(TEMP)s/%(name)s_%(version)s.changes\n" % params) - fileHandle.write("mv %(TEMP)s/%(name)s_%(version)s.changes.asc %(TEMP)s/%(name)s_%(version)s.changes\n" % params) - fileHandle.write('\nexit') - fileHandle.close() - commands.getoutput("chmod 777 /tmp/py2deb2.tmp") - commands.getoutput("/tmp/py2deb2.tmp") - - ret = [] - - l=glob("%(TEMP)s/%(name)s*.tar.gz" % params) - if len(l)!=1: - raise Py2debException("don't find source package tar.gz") - tar = os.path.basename(l[0]) - shutil.move(l[0],tar) - ret.append(tar) - - l=glob("%(TEMP)s/%(name)s*.dsc" % params) - if len(l)!=1: - raise Py2debException("don't find source package dsc") - tar = os.path.basename(l[0]) - shutil.move(l[0],tar) - ret.append(tar) - - l = glob("%(TEMP)s/%(name)s*.changes" % params) - if len(l)!=1: - raise Py2debException("don't find source package changes") - tar = os.path.basename(l[0]) - shutil.move(l[0],tar) - ret.append(tar) - - return ret - - -class Py2dsc(object): - - def __init__(self, StandardsVersion, BuildDepends, files, **kwargs): - self.options = kwargs # TODO: Is order important? - self.StandardsVersion = StandardsVersion - self.BuildDepends=BuildDepends - self.files=files - - @property - def content(self): - content = ["%s: %s" % (k, v) - for k,v in self.options.iteritems()] - - if self.BuildDepends: - content.append("Build-Depends: %s" % self.BuildDepends) - if self.StandardsVersion: - content.append("Standards-Version: %s" % self.StandardsVersion) - - content.append('Files:') - - for onefile in self.files: - print onefile - md5 = md5sum(onefile) - size = os.stat(onefile).st_size.__str__() - content.append(' '+md5 + ' ' + size +' '+os.path.basename(onefile)) - - return "\n".join(content)+"\n\n" - - -def py2dsc(TEMP, name, version, depends, author, mail, arch): - dsccontent = Py2dsc( - "%(version)s" % locals(), - "%(depends)s" % locals(), - ("%(TEMP)s/%(name)s_%(version)s.tar.gz" % locals(),), - Format='1.0', - Source="%(name)s" % locals(), - Version="%(version)s" % locals(), - Maintainer="%(author)s <%(mail)s>" % locals(), - Architecture="%(arch)s" % locals(), - ) - - filename = "%(TEMP)s/%(name)s_%(version)s.dsc" % locals() - - f = open(filename, "wb") - try: - f.write(dsccontent.content) - finally: - f.close() - - fileHandle = open('/tmp/py2deb.tmp', 'w') - try: - fileHandle.write('#!/bin/sh\n') - fileHandle.write("cd " + os.getcwd() + "\n") - # TODO Renable signing - # fileHandle.write("gpg --local-user %(mail)s --clearsign %(TEMP)s/%(name)s_%(version)s.dsc\n" % locals()) - fileHandle.write("mv %(TEMP)s/%(name)s_%(version)s.dsc.asc %(filename)s\n" % locals()) - fileHandle.write('\nexit') - fileHandle.close() - finally: - f.close() - - commands.getoutput("chmod 777 /tmp/py2deb.tmp") - commands.getoutput("/tmp/py2deb.tmp") - - return filename - - -class Py2tar(object): - - def __init__(self, dataDirectoryPath): - self._dataDirectoryPath = dataDirectoryPath - - def packed(self): - return self._getSourcesFiles() - - def _getSourcesFiles(self): - directoryPath = self._dataDirectoryPath - - outputFileObj = StringIO.StringIO() # TODO: Do more transparently? - - tarOutput = tarfile.TarFile.open('sources', - mode = "w:gz", - fileobj = outputFileObj) - - # Note: We can't use this because we need to fiddle permissions: - # tarOutput.add(directoryPath, arcname = "") - - for root, dirs, files in os.walk(directoryPath): - archiveRoot = root[len(directoryPath):] - - tarinfo = tarOutput.gettarinfo(root, archiveRoot) - # TODO: Make configurable? - tarinfo.uid = UID_ROOT - tarinfo.gid = GID_ROOT - tarinfo.uname = "" - tarinfo.gname = "" - tarOutput.addfile(tarinfo) - - for f in files: - tarinfo = tarOutput.gettarinfo(os.path.join(root, f), - os.path.join(archiveRoot, f)) - tarinfo.uid = UID_ROOT - tarinfo.gid = GID_ROOT - tarinfo.uname = "" - tarinfo.gname = "" - tarOutput.addfile(tarinfo, file(os.path.join(root, f))) - - tarOutput.close() - - data_tar_gz = outputFileObj.getvalue() - - return data_tar_gz - - -def py2tar(DEST, TEMP, name, version): - tarcontent = Py2tar("%(DEST)s" % locals()) - filename = "%(TEMP)s/%(name)s_%(version)s.tar.gz" % locals() - f = open(filename, "wb") - try: - f.write(tarcontent.packed()) - finally: - f.close() - return filename - - -class Py2debException(Exception): - pass - - -SECTIONS_BY_POLICY = { - # http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections - "debian": "admin, base, comm, contrib, devel, doc, editors, electronics, embedded, games, gnome, graphics, hamradio, interpreters, kde, libs, libdevel, mail, math, misc, net, news, non-free, oldlibs, otherosfs, perl, python, science, shells, sound, tex, text, utils, web, x11", - # http://maemo.org/forrest-images/pdf/maemo-policy.pdf - "chinook": "accessories, communication, games, multimedia, office, other, programming, support, themes, tools", - # http://wiki.maemo.org/Task:Package_categories - "diablo": "user/desktop, user/development, user/education, user/games, user/graphics, user/multimedia, user/navigation, user/network, user/office, user/science, user/system, user/utilities", - # http://wiki.maemo.org/Task:Fremantle_application_categories - "mer": "user/desktop, user/development, user/education, user/games, user/graphics, user/multimedia, user/navigation, user/network, user/office, user/science, user/system, user/utilities", - # http://wiki.maemo.org/Task:Fremantle_application_categories - "fremantle": "user/desktop, user/development, user/education, user/games, user/graphics, user/multimedia, user/navigation, user/network, user/office, user/science, user/system, user/utilities", -} - - -LICENSE_AGREEMENT = { - "gpl": """ - This package is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This package is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this package; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -On Debian systems, the complete text of the GNU General -Public License can be found in `/usr/share/common-licenses/GPL'. -""", - "lgpl":""" - This package is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This package is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this package; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -On Debian systems, the complete text of the GNU Lesser General -Public License can be found in `/usr/share/common-licenses/LGPL'. -""", - "bsd": """ - Redistribution and use in source and binary forms, with or without - modification, are permitted under the terms of the BSD License. - - THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - -On Debian systems, the complete text of the BSD License can be -found in `/usr/share/common-licenses/BSD'. -""", - "artistic": """ - This program is free software; you can redistribute it and/or modify it - under the terms of the "Artistic License" which comes with Debian. - - THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES - OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -On Debian systems, the complete text of the Artistic License -can be found in `/usr/share/common-licenses/Artistic'. -""" -} - - -class Py2deb(object): - """ - heavily based on technic described here : - http://wiki.showmedo.com/index.php?title=LinuxJensMakingDeb - """ - ## STATICS - clear = False # clear build folder after py2debianization - - SECTIONS = SECTIONS_BY_POLICY["debian"] - - #http://www.debian.org/doc/debian-policy/footnotes.html#f69 - ARCHS = "all i386 ia64 alpha amd64 armeb arm hppa m32r m68k mips mipsel powerpc ppc64 s390 s390x sh3 sh3eb sh4 sh4eb sparc darwin-i386 darwin-ia64 darwin-alpha darwin-amd64 darwin-armeb darwin-arm darwin-hppa darwin-m32r darwin-m68k darwin-mips darwin-mipsel darwin-powerpc darwin-ppc64 darwin-s390 darwin-s390x darwin-sh3 darwin-sh3eb darwin-sh4 darwin-sh4eb darwin-sparc freebsd-i386 freebsd-ia64 freebsd-alpha freebsd-amd64 freebsd-armeb freebsd-arm freebsd-hppa freebsd-m32r freebsd-m68k freebsd-mips freebsd-mipsel freebsd-powerpc freebsd-ppc64 freebsd-s390 freebsd-s390x freebsd-sh3 freebsd-sh3eb freebsd-sh4 freebsd-sh4eb freebsd-sparc kfreebsd-i386 kfreebsd-ia64 kfreebsd-alpha kfreebsd-amd64 kfreebsd-armeb kfreebsd-arm kfreebsd-hppa kfreebsd-m32r kfreebsd-m68k kfreebsd-mips kfreebsd-mipsel kfreebsd-powerpc kfreebsd-ppc64 kfreebsd-s390 kfreebsd-s390x kfreebsd-sh3 kfreebsd-sh3eb kfreebsd-sh4 kfreebsd-sh4eb kfreebsd-sparc knetbsd-i386 knetbsd-ia64 knetbsd-alpha knetbsd-amd64 knetbsd-armeb knetbsd-arm knetbsd-hppa knetbsd-m32r knetbsd-m68k knetbsd-mips knetbsd-mipsel knetbsd-powerpc knetbsd-ppc64 knetbsd-s390 knetbsd-s390x knetbsd-sh3 knetbsd-sh3eb knetbsd-sh4 knetbsd-sh4eb knetbsd-sparc netbsd-i386 netbsd-ia64 netbsd-alpha netbsd-amd64 netbsd-armeb netbsd-arm netbsd-hppa netbsd-m32r netbsd-m68k netbsd-mips netbsd-mipsel netbsd-powerpc netbsd-ppc64 netbsd-s390 netbsd-s390x netbsd-sh3 netbsd-sh3eb netbsd-sh4 netbsd-sh4eb netbsd-sparc openbsd-i386 openbsd-ia64 openbsd-alpha openbsd-amd64 openbsd-armeb openbsd-arm openbsd-hppa openbsd-m32r openbsd-m68k openbsd-mips openbsd-mipsel openbsd-powerpc openbsd-ppc64 openbsd-s390 openbsd-s390x openbsd-sh3 openbsd-sh3eb openbsd-sh4 openbsd-sh4eb openbsd-sparc hurd-i386 hurd-ia64 hurd-alpha hurd-amd64 hurd-armeb hurd-arm hurd-hppa hurd-m32r hurd-m68k hurd-mips hurd-mipsel hurd-powerpc hurd-ppc64 hurd-s390 hurd-s390x hurd-sh3 hurd-sh3eb hurd-sh4 hurd-sh4eb hurd-sparc armel".split(" ") - - # license terms taken from dh_make - LICENSES = list(LICENSE_AGREEMENT.iterkeys()) - - def __setitem__(self, path, files): - - if not type(files)==list: - raise Py2debException("value of key path '%s' is not a list"%path) - if not files: - raise Py2debException("value of key path '%s' should'nt be empty"%path) - if not path.startswith("/"): - raise Py2debException("key path '%s' malformed (don't start with '/')"%path) - if path.endswith("/"): - raise Py2debException("key path '%s' malformed (shouldn't ends with '/')"%path) - - nfiles=[] - for file in files: - - if ".." in file: - raise Py2debException("file '%s' contains '..', please avoid that!"%file) - - - if "|" in file: - if file.count("|")!=1: - raise Py2debException("file '%s' is incorrect (more than one pipe)"%file) - - file, nfile = file.split("|") - else: - nfile=file # same localisation - - if os.path.isdir(file): - raise Py2debException("file '%s' is a folder, and py2deb refuse folders !"%file) - - if not os.path.isfile(file): - raise Py2debException("file '%s' doesn't exist"%file) - - if file.startswith("/"): # if an absolute file is defined - if file==nfile: # and not renamed (pipe trick) - nfile=os.path.basename(file) # it's simply copied to 'path' - - nfiles.append((file, nfile)) - - nfiles.sort(lambda a, b: cmp(a[1], b[1])) #sort according new name (nfile) - - self.__files[path]=nfiles - - def __getitem__(self, k): - return self.__files[k] - - def __delitem__(self, k): - del self.__files[k] - - def __init__(self, - name, - description="no description", - license="gpl", - depends="", - section="utils", - arch="all", - - url="", - author = None, - mail = None, - - preinstall = None, - postinstall = None, - preremove = None, - postremove = None - ): - - if author is None: - author = ("USERNAME" in os.environ) and os.environ["USERNAME"] or None - if author is None: - author = ("USER" in os.environ) and os.environ["USER"] or "unknown" - - if mail is None: - mail = author+"@"+socket.gethostname() - - self.name = name - self.prettyName = "" - self.description = description - self.upgradeDescription = "" - self.bugTracker = "" - self.license = license - self.depends = depends - self.recommends = "" - self.section = section - self.arch = arch - self.url = url - self.author = author - self.mail = mail - self.icon = "" - self.distribution = "" - self.respository = "" - self.urgency = "low" - - self.preinstall = preinstall - self.postinstall = postinstall - self.preremove = preremove - self.postremove = postremove - - self.__files={} - - def __repr__(self): - name = self.name - license = self.license - description = self.description - depends = self.depends - recommends = self.recommends - section = self.section - arch = self.arch - url = self.url - author = self.author - mail = self.mail - - preinstall = self.preinstall - postinstall = self.postinstall - preremove = self.preremove - postremove = self.postremove - - paths=self.__files.keys() - paths.sort() - files=[] - for path in paths: - for file, nfile in self.__files[path]: - #~ rfile=os.path.normpath(os.path.join(path, nfile)) - rfile=os.path.join(path, nfile) - if nfile==file: - files.append(rfile) - else: - files.append(rfile + " (%s)"%file) - - files.sort() - files = "\n".join(files) - - - lscripts = [ preinstall and "preinst", - postinstall and "postinst", - preremove and "prerm", - postremove and "postrm", - ] - scripts = lscripts and ", ".join([i for i in lscripts if i]) or "None" - return """ ----------------------------------------------------------------------- -NAME : %(name)s ----------------------------------------------------------------------- -LICENSE : %(license)s -URL : %(url)s -AUTHOR : %(author)s -MAIL : %(mail)s ----------------------------------------------------------------------- -DEPENDS : %(depends)s -RECOMMENDS : %(recommends)s -ARCH : %(arch)s -SECTION : %(section)s ----------------------------------------------------------------------- -DESCRIPTION : -%(description)s ----------------------------------------------------------------------- -SCRIPTS : %(scripts)s ----------------------------------------------------------------------- -FILES : -%(files)s -""" % locals() - - def generate(self, version, changelog="", rpm=False, src=False, build=True, tar=False, changes=False, dsc=False): - """ generate a deb of version 'version', with or without 'changelog', with or without a rpm - (in the current folder) - return a list of generated files - """ - if not sum([len(i) for i in self.__files.values()])>0: - raise Py2debException("no files are defined") - - if not changelog: - changelog="* no changelog" - - name = self.name - description = self.description - license = self.license - depends = self.depends - recommends = self.recommends - section = self.section - arch = self.arch - url = self.url - distribution = self.distribution - repository = self.repository - urgency = self.urgency - author = self.author - mail = self.mail - files = self.__files - preinstall = self.preinstall - postinstall = self.postinstall - preremove = self.preremove - postremove = self.postremove - - if section not in Py2deb.SECTIONS: - raise Py2debException("section '%s' is unknown (%s)" % (section, str(Py2deb.SECTIONS))) - - if arch not in Py2deb.ARCHS: - raise Py2debException("arch '%s' is unknown (%s)"% (arch, str(Py2deb.ARCHS))) - - if license not in Py2deb.LICENSES: - raise Py2debException("License '%s' is unknown (%s)" % (license, str(Py2deb.LICENSES))) - - # create dates (buildDate, buildDateYear) - d=datetime.now() - buildDate=d.strftime("%a, %d %b %Y %H:%M:%S +0000") - buildDateYear=str(d.year) - - #clean description (add a space before each next lines) - description=description.replace("\r", "").strip() - description = "\n ".join(description.split("\n")) - - #clean changelog (add 2 spaces before each next lines) - changelog=changelog.replace("\r", "").strip() - changelog = "\n ".join(changelog.split("\n")) - - TEMP = ".py2deb_build_folder" - DEST = os.path.join(TEMP, name) - DEBIAN = os.path.join(DEST, "debian") - - packageContents = locals() - - # let's start the process - try: - shutil.rmtree(TEMP) - except: - pass - - os.makedirs(DEBIAN) - try: - rules=[] - dirs=[] - for path in files: - for ofile, nfile in files[path]: - if os.path.isfile(ofile): - # it's a file - - if ofile.startswith("/"): # if absolute path - # we need to change dest - dest=os.path.join(DEST, nfile) - else: - dest=os.path.join(DEST, ofile) - - # copy file to be packaged - destDir = os.path.dirname(dest) - if not os.path.isdir(destDir): - os.makedirs(destDir) - - shutil.copy2(ofile, dest) - - ndir = os.path.join(path, os.path.dirname(nfile)) - nname = os.path.basename(nfile) - - # make a line RULES to be sure the destination folder is created - # and one for copying the file - fpath = "/".join(["$(CURDIR)", "debian", name+ndir]) - rules.append('mkdir -p "%s"' % fpath) - rules.append('cp -a "%s" "%s"' % (ofile, os.path.join(fpath, nname))) - - # append a dir - dirs.append(ndir) - - else: - raise Py2debException("unknown file '' "%ofile) # shouldn't be raised (because controlled before) - - # make rules right - rules= "\n\t".join(rules) + "\n" - packageContents["rules"] = rules - - # make dirs right - dirs= [i[1:] for i in set(dirs)] - dirs.sort() - - #========================================================================== - # CREATE debian/dirs - #========================================================================== - open(os.path.join(DEBIAN, "dirs"), "w").write("\n".join(dirs)) - - #========================================================================== - # CREATE debian/changelog - #========================================================================== - clog="""%(name)s (%(version)s) stable; urgency=low - - %(changelog)s - - -- %(author)s <%(mail)s> %(buildDate)s -""" % packageContents - - open(os.path.join(DEBIAN, "changelog"), "w").write(clog) - - #========================================================================== - #Create pre/post install/remove - #========================================================================== - def mkscript(name, dest): - if name and name.strip()!="": - if os.path.isfile(name): # it's a file - content = file(name).read() - else: # it's a script - content = name - open(os.path.join(DEBIAN, dest), "w").write(content) - - mkscript(preinstall, "preinst") - mkscript(postinstall, "postinst") - mkscript(preremove, "prerm") - mkscript(postremove, "postrm") - - - #========================================================================== - # CREATE debian/compat - #========================================================================== - open(os.path.join(DEBIAN, "compat"), "w").write("5\n") - - #========================================================================== - # CREATE debian/control - #========================================================================== - generalParagraphFields = [ - "Source: %(name)s", - "Maintainer: %(author)s <%(mail)s>", - "Section: %(section)s", - "Priority: extra", - "Build-Depends: debhelper (>= 5)", - "Standards-Version: 3.7.2", - ] - - specificParagraphFields = [ - "Package: %(name)s", - "Architecture: %(arch)s", - "Depends: %(depends)s", - "Recommends: %(recommends)s", - "Description: %(description)s", - ] - - if self.prettyName: - prettyName = "XSBC-Maemo-Display-Name: %s" % self.prettyName.strip() - specificParagraphFields.append("\n ".join(prettyName.split("\n"))) - - if self.bugTracker: - bugTracker = "XSBC-Bugtracker: %s" % self.bugTracker.strip() - specificParagraphFields.append("\n ".join(bugTracker.split("\n"))) - - if self.upgradeDescription: - upgradeDescription = "XSBC-Maemo-Upgrade-Description: %s" % self.upgradeDescription.strip() - specificParagraphFields.append("\n ".join(upgradeDescription.split("\n"))) - - if self.icon: - f = open(self.icon, "rb") - try: - rawIcon = f.read() - finally: - f.close() - uueIcon = base64.b64encode(rawIcon) - uueIconLines = [] - for i, c in enumerate(uueIcon): - if i % 60 == 0: - uueIconLines.append("") - uueIconLines[-1] += c - uueIconLines[0:0] = ("XSBC-Maemo-Icon-26:", ) - specificParagraphFields.append("\n ".join(uueIconLines)) - - generalParagraph = "\n".join(generalParagraphFields) - specificParagraph = "\n".join(specificParagraphFields) - controlContent = "\n\n".join((generalParagraph, specificParagraph)) % packageContents - open(os.path.join(DEBIAN, "control"), "w").write(controlContent) - - #========================================================================== - # CREATE debian/copyright - #========================================================================== - packageContents["txtLicense"] = LICENSE_AGREEMENT[license] - packageContents["pv"] =__version__ - txt="""This package was py2debianized(%(pv)s) by %(author)s <%(mail)s> on -%(buildDate)s. - -It was downloaded from %(url)s - -Upstream Author: %(author)s <%(mail)s> - -Copyright: %(buildDateYear)s by %(author)s - -License: - -%(txtLicense)s - -The Debian packaging is (C) %(buildDateYear)s, %(author)s <%(mail)s> and -is licensed under the GPL, see above. - - -# Please also look if there are files or directories which have a -# different copyright/license attached and list them here. -""" % packageContents - open(os.path.join(DEBIAN, "copyright"), "w").write(txt) - - #========================================================================== - # CREATE debian/rules - #========================================================================== - txt="""#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - - - - -CFLAGS = -Wall -g - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - - touch configure-stamp - - -build: build-stamp - -build-stamp: configure-stamp - dh_testdir - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # ====================================================== - #$(MAKE) DESTDIR="$(CURDIR)/debian/%(name)s" install - mkdir -p "$(CURDIR)/debian/%(name)s" - - %(rules)s - # ====================================================== - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_installchangelogs debian/changelog - dh_installdocs - dh_installexamples -# dh_install -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_python -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip - dh_compress - dh_fixperms -# dh_perl -# dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure -""" % packageContents - open(os.path.join(DEBIAN, "rules"), "w").write(txt) - os.chmod(os.path.join(DEBIAN, "rules"), 0755) - - ########################################################################### - ########################################################################### - ########################################################################### - - generatedFiles = [] - - if build: - #http://www.debian.org/doc/manuals/maint-guide/ch-build.fr.html - ret = os.system('cd "%(DEST)s"; dpkg-buildpackage -tc -rfakeroot -us -uc' % packageContents) - if ret != 0: - raise Py2debException("buildpackage failed (see output)") - - l=glob("%(TEMP)s/%(name)s*.deb" % packageContents) - if len(l) != 1: - raise Py2debException("didn't find builded deb") - - tdeb = l[0] - deb = os.path.basename(tdeb) - shutil.move(tdeb, deb) - - generatedFiles = [deb, ] - - if rpm: - rpmFilename = deb2rpm(deb) - generatedFiles.append(rpmFilename) - - if src: - tarFilename = py2src(TEMP, name) - generatedFiles.append(tarFilename) - - if tar: - tarFilename = py2tar(DEST, TEMP, name, version) - generatedFiles.append(tarFilename) - - if dsc: - dscFilename = py2dsc(TEMP, name, version, depends, author, mail, arch) - generatedFiles.append(dscFilename) - - if changes: - changesFilenames = py2changes(packageContents) - generatedFiles.extend(changesFilenames) - - return generatedFiles - - #~ except Exception,m: - #~ raise Py2debException("build error :"+str(m)) - - finally: - if Py2deb.clear: - shutil.rmtree(TEMP) - - -if __name__ == "__main__": - try: - os.chdir(os.path.dirname(sys.argv[0])) - except: - pass - - p=Py2deb("python-py2deb") - p.description="Generate simple deb(/rpm/tgz) from python (2.4, 2.5 and 2.6)" - p.url = "http://www.manatlan.com/page/py2deb" - p.author=__author__ - p.mail=__mail__ - p.depends = "dpkg-dev, fakeroot, alien, python" - p.section="python" - p["/usr/lib/python2.6/dist-packages"] = ["py2deb.py", ] - p["/usr/lib/python2.5/site-packages"] = ["py2deb.py", ] - p["/usr/lib/python2.4/site-packages"] = ["py2deb.py", ] - #~ p.postinstall = "s.py" - #~ p.preinstall = "s.py" - #~ p.postremove = "s.py" - #~ p.preremove = "s.py" - print p - print p.generate(__version__, changelog = __doc__, src=True) diff --git a/support/scale.py b/support/scale.py new file mode 100755 index 0000000..f9eb784 --- /dev/null +++ b/support/scale.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +from __future__ import with_statement +from __future__ import division + +import os +import logging + +from PIL import Image + + +_moduleLogger = logging.getLogger(__name__) + + +def main(args): + import optparse + parser = optparse.OptionParser() + parser.add_option( + "--input", dest="input", + help="Input image to scale", metavar="INPUT" + ) + parser.add_option( + "--output", dest="output", + help="Scaled image", metavar="OUTPUT" + ) + parser.add_option( + "--size", dest="size", + help="Icon size", metavar="SIZE" + ) + options, positional = parser.parse_args(args) + if positional: + parser.error("No positional arguments supported") + if None in [options.input, options.output, options.size]: + parser.error("Missing argument") + if options.size == "guess": + parts = reversed(os.path.split(options.output)) + for part in parts: + try: + options.size = int(part) + _moduleLogger.info("Assuming image size of %r" % options.size) + break + except ValueError: + pass + + icon = Image.open(options.input) + icon.thumbnail((options.size, options.size), Image.ANTIALIAS) + icon.save(options.output) + + +if __name__ == "__main__": + import sys + retcode = main(sys.argv[1:]) + sys.exit(retcode) -- 1.7.9.5