Merge lp:~mandel/ubuntuone-windows-installer/fix_overlay into lp:ubuntuone-windows-installer/beta

Proposed by Manuel de la Peña
Status: Merged
Approved by: Vincenzo Di Somma
Approved revision: 173
Merged at revision: 128
Proposed branch: lp:~mandel/ubuntuone-windows-installer/fix_overlay
Merge into: lp:ubuntuone-windows-installer/beta
Prerequisite: lp:~mandel/ubuntuone-windows-installer/improve_u1sync_communication
Diff against target: 1663 lines (+1284/-100)
17 files modified
.bzrignore (+8/-0)
build.number (+1/-1)
install/UbuntuOne7.wxs (+756/-1)
main.build (+23/-3)
src/Version.cs (+3/-3)
src/emblems_cache/setup.py (+52/-0)
src/emblems_cache/windows_emblems_cache.py (+111/-0)
src/icons_overlay/icons_overlay.py (+120/-0)
src/icons_overlay/register.py (+20/-0)
src/icons_overlay/setup.py (+50/-0)
src/sync/u1sync/constants.py (+4/-0)
src/sync/u1sync/genericmerge.py (+0/-2)
src/sync/u1sync/icons.py (+117/-81)
src/sync/u1sync/main.py (+10/-2)
src/sync/u1sync/metadata.py (+1/-2)
src/sync/u1sync/scan.py (+0/-4)
src/sync/u1sync/ubuntuone_optparse.py (+8/-1)
To merge this branch: bzr merge lp:~mandel/ubuntuone-windows-installer/fix_overlay
Reviewer Review Type Date Requested Status
Vincenzo Di Somma (community) Approve
John Lenton (community) Approve
Review via email: mp+39907@code.launchpad.net

Description of the change

Fix the icon overlays.

To post a comment you must log in.
Revision history for this message
John Lenton (chipaca) :
review: Approve
Revision history for this message
Vincenzo Di Somma (vds) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.bzrignore'
--- .bzrignore 2010-10-20 23:09:36 +0000
+++ .bzrignore 2010-11-02 22:22:53 +0000
@@ -30,6 +30,8 @@
30src/Canonical.UbuntuOne.ProcessDispatcher/obj30src/Canonical.UbuntuOne.ProcessDispatcher/obj
31src/Canonical.UbuntuOne.ProcessDispatcher.Tests/obj31src/Canonical.UbuntuOne.ProcessDispatcher.Tests/obj
32src/Canonical.UbuntuOne.ProcessDispatcher.Tests/bin32src/Canonical.UbuntuOne.ProcessDispatcher.Tests/bin
33src/Canonical.UbuntuOne.ShellExtension/bin
34src/Canonical.UbuntuOne.ShellExtension/obj
33src/ServiceTestApp/bin35src/ServiceTestApp/bin
34src/ServiceTestApp/obj36src/ServiceTestApp/obj
35src/UbuntuOneClient/bin37src/UbuntuOneClient/bin
@@ -46,3 +48,9 @@
46utils/UbuntuOne.msi48utils/UbuntuOne.msi
47build.number49build.number
48*.user50*.user
51src/sync/build
52src/sync/dist
53src/emblems_cache/build
54src/emblems_cache/dist
55src/icons_overlay/build
56src/icons_overlay/dist
4957
=== modified file 'build.number'
--- build.number 2010-10-12 10:06:34 +0000
+++ build.number 2010-11-02 22:22:53 +0000
@@ -1,1 +1,1 @@
11.0.611.8185
2\ No newline at end of file1\ No newline at end of file
21.0.623.7177
3\ No newline at end of file3\ No newline at end of file
44
=== added file 'data/new.ico'
5Binary files data/new.ico 1970-01-01 00:00:00 +0000 and data/new.ico 2010-11-02 22:22:53 +0000 differ5Binary files data/new.ico 1970-01-01 00:00:00 +0000 and data/new.ico 2010-11-02 22:22:53 +0000 differ
=== modified file 'install/UbuntuOne7.wxs'
--- install/UbuntuOne7.wxs 2010-10-20 23:32:43 +0000
+++ install/UbuntuOne7.wxs 2010-11-02 22:22:53 +0000
@@ -42,6 +42,24 @@
42 42
43 <Directory Id="TARGETDIR" 43 <Directory Id="TARGETDIR"
44 Name="SourceDir">44 Name="SourceDir">
45 <Component Id="IsPresentUbuntuOneIconOverlayKey" Guid="1f83ee90-e6c5-11df-9492-0800200c9a66">
46 <RegistryValue Root="HKLM"
47 Key="Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\IsPresentUbuntuOneIconOverlay"
48 Value="{4FC554DF-F0EE-4A4F-966C-9C49CCF14D59}"
49 Type="string"/>
50 </Component>
51 <Component Id="IsNewUbuntuOneIconOverlayKey" Guid="1f83ee91-e6c5-11df-9492-0800200c9a66">
52 <RegistryValue Root="HKLM"
53 Key="Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\IsNewUbuntuOneIconOverlay"
54 Value="{a9694f20-ddbe-11df-85ca-0800200c9a66}"
55 Type="string"/>
56 </Component>
57 <Component Id="IsConflictUbuntuOneIconOverlayKey" Guid="1f83ee92-e6c5-11df-9492-0800200c9a66">
58 <RegistryValue Root="HKLM"
59 Key="Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\IsConflictUbuntuOneIconOverlay"
60 Value="{3dc7f120-ded8-11df-85ca-0800200c9a66}"
61 Type="string"/>
62 </Component>
45 <Directory Id="ProgramMenuFolder" 63 <Directory Id="ProgramMenuFolder"
46 Name="Programs" >64 Name="Programs" >
47 <Directory Id="ApplicationProgramsFolder" Name="Ubuntu One">65 <Directory Id="ApplicationProgramsFolder" Name="Ubuntu One">
@@ -714,6 +732,646 @@
714 KeyPath="yes"/>732 KeyPath="yes"/>
715 </Component>733 </Component>
716 </Directory>734 </Directory>
735 <Directory Id="EmblemsCacheDir"
736 Name="EmblemsCache">
737 <Component Id="EmblemsCacheAutostart"
738 Guid="ccbf8b90-e2d9-11df-85ca-0800200c9a66">
739 <RegistryValue Id="EmblemsCache.rst"
740 Root="HKCU"
741 Key="Software\Microsoft\Windows\CurrentVersion\Run"
742 Name="Ubuntu One Emblems Cache"
743 Value="[EmblemsCacheDir]windows_emblems_cache.exe"
744 Type="string"/>
745 <Condition>UBUNTUONECLIENT_EMBLEMSCACHE_START_VIA_REGISTRY</Condition>
746 </Component>
747 <Component Id="EmblemsCTypesComponent"
748 Guid="77e33900-e2a7-11df-85ca-0800200c9a66">
749 <File Id="emblems_ctypes.pyd"
750 Name="_ctypes.pyd"
751 DiskId="1"
752 Source="build_results\emblems_cache\_ctypes.pyd"
753 KeyPath="yes"/>
754 </Component>
755 <Component Id="EmblemsHashLibComponent"
756 Guid="b3a11b60-e2a7-11df-85ca-0800200c9a66">
757 <File Id="emblems_hashlib.pyd"
758 Name="_hashlib.pyd"
759 DiskId="1"
760 Source="build_results\emblems_cache\_hashlib.pyd"
761 KeyPath="yes"/>
762 </Component>
763 <Component Id="EmblemsMultiprocessingComponent"
764 Guid="f957c960-e2a7-11df-85ca-0800200c9a66">
765 <File Id="emblems_multiprocessing.pyd"
766 Name="_multiprocessing.pyd"
767 DiskId="1"
768 Source="build_results\emblems_cache\_multiprocessing.pyd"
769 KeyPath="yes"/>
770 </Component>
771 <Component Id="EmblemsSocketComponent"
772 Guid="31861c60-e2a8-11df-85ca-0800200c9a66">
773 <File Id="emblems_socket.pyd"
774 Name="_socket.pyd"
775 DiskId="1"
776 Source="build_results\emblems_cache\_socket.pyd"
777 KeyPath="yes"/>
778 </Component>
779 <Component Id="EmblemsSSLComponent"
780 Guid="895c12a0-e2a8-11df-85ca-0800200c9a66">
781 <File Id="emblems_ssl.pyd"
782 Name="_ssl.pyd"
783 DiskId="1"
784 Source="build_results\emblems_cache\_ssl.pyd"
785 KeyPath="yes"/>
786 </Component>
787 <Component Id="EmblemsSysLoaderComponent"
788 Guid="99e32eb0-e2a8-11df-85ca-0800200c9a66">
789 <File Id="emblems_win32sysloader.pyd"
790 Name="_win32sysloader.pyd"
791 DiskId="1"
792 Source="build_results\emblems_cache\_win32sysloader.pyd"
793 KeyPath="yes"/>
794 </Component>
795 <Component Id="EmblemsCoreDebugComponent"
796 Guid="bc431420-e2a8-11df-85ca-0800200c9a66">
797 <File Id="emblems_API_MS_Win_Core_Debug_L1_1_0.dll"
798 Name="API-MS-Win-Core-Debug-L1-1-0.dll"
799 DiskId="1"
800 Source="build_results\emblems_cache\API-MS-Win-Core-Debug-L1-1-0.dll"
801 KeyPath="yes"/>
802 </Component>
803 <Component Id="EmblemsDelayLoadComponent"
804 Guid="e5df1630-e2a8-11df-85ca-0800200c9a66">
805 <File Id="emblems_API_MS_Win_Core_DelayLoad_L1_1_0.dll"
806 Name="API-MS-Win-Core-DelayLoad-L1-1-0.dll"
807 DiskId="1"
808 Source="build_results\emblems_cache\API-MS-Win-Core-DelayLoad-L1-1-0.dll"
809 KeyPath="yes"/>
810 </Component>
811 <Component Id="EmblemsErrorHandlingComponent"
812 Guid="19241630-e2a9-11df-85ca-0800200c9a66">
813 <File Id="emblems_API_MS_Win_Core_ErrorHandling_L1_1_0.dll"
814 Name="API-MS-Win-Core-ErrorHandling-L1-1-0.dll"
815 DiskId="1"
816 Source="build_results\emblems_cache\API-MS-Win-Core-ErrorHandling-L1-1-0.dll"
817 KeyPath="yes"/>
818 </Component>
819 <Component Id="EmblemsHandleComponent"
820 Guid="5b4a2360-e2a9-11df-85ca-0800200c9a66">
821 <File Id="emblems_API_MS_Win_Core_Handle_L1_1_0.dll"
822 Name="API-MS-Win-Core-Handle-L1-1-0.dll"
823 DiskId="1"
824 Source="build_results\emblems_cache\API-MS-Win-Core-Handle-L1-1-0.dll"
825 KeyPath="yes"/>
826 </Component>
827 <Component Id="EmblemsInterlockedComponent"
828 Guid="77faa6b0-e2a9-11df-85ca-0800200c9a66">
829 <File Id="emblems_API_MS_Win_Core_Interlocked_L1_1_0.dll"
830 Name="API-MS-Win-Core-Interlocked-L1-1-0.dll"
831 DiskId="1"
832 Source="build_results\emblems_cache\API-MS-Win-Core-Interlocked-L1-1-0.dll"
833 KeyPath="yes"/>
834 </Component>
835 <Component Id="EmblemsIOComponent"
836 Guid="e6d0d3c0-e2a9-11df-85ca-0800200c9a66">
837 <File Id="emblems_API_MS_Win_Core_IO_L1_1_0.dll"
838 Name="API-MS-Win-Core-IO-L1-1-0.dll"
839 DiskId="1"
840 Source="build_results\emblems_cache\API-MS-Win-Core-IO-L1-1-0.dll"
841 KeyPath="yes"/>
842 </Component>
843 <Component Id="EmblemsLibraryLoaderComponent"
844 Guid="d0fe7920-e2aa-11df-85ca-0800200c9a66">
845 <File Id="emblems_API_MS_Win_Core_LibraryLoader_L1_1_0.dll"
846 Name="API-MS-Win-Core-LibraryLoader-L1-1-0.dll"
847 DiskId="1"
848 Source="build_results\emblems_cache\API-MS-Win-Core-LibraryLoader-L1-1-0.dll"
849 KeyPath="yes"/>
850 </Component>
851 <Component Id="EmblemsLocalizationComponent"
852 Guid="0d578a10-e2ab-11df-85ca-0800200c9a66">
853 <File Id="emblems_API_MS_Win_Core_Localization_L1_1_0.dll"
854 Name="API-MS-Win-Core-Localization-L1-1-0.dll"
855 DiskId="1"
856 Source="build_results\emblems_cache\API-MS-Win-Core-Localization-L1-1-0.dll"
857 KeyPath="yes"/>
858 </Component>
859 <Component Id="EmblemsLocaRegistryComponent"
860 Guid="256141a0-e2ab-11df-85ca-0800200c9a66">
861 <File Id="emblems_API_MS_Win_Core_LocalRegistry_L1_1_0.dll"
862 Name="API-MS-Win-Core-LocalRegistry-L1-1-0.dll"
863 DiskId="1"
864 Source="build_results\emblems_cache\API-MS-Win-Core-LocalRegistry-L1-1-0.dll"
865 KeyPath="yes"/>
866 </Component>
867 <Component Id="EmblemsMemoryComponent"
868 Guid="640294e0-e2ab-11df-85ca-0800200c9a66">
869 <File Id="emblems_API_MS_Win_Core_Memory_L1_1_0.dll"
870 Name="API-MS-Win-Core-Memory-L1-1-0.dll"
871 DiskId="1"
872 Source="build_results\emblems_cache\API-MS-Win-Core-Memory-L1-1-0.dll"
873 KeyPath="yes"/>
874 </Component>
875 <Component Id="EmblemsMiscComponent"
876 Guid="9dde70d0-e2ab-11df-85ca-0800200c9a66">
877 <File Id="emblems_API_MS_Win_Core_Misc_L1_1_0.dll"
878 Name="API-MS-Win-Core-Misc-L1-1-0.dll"
879 DiskId="1"
880 Source="build_results\emblems_cache\API-MS-Win-Core-Misc-L1-1-0.dll"
881 KeyPath="yes"/>
882 </Component>
883 <Component Id="EmblemsProcessEnvironmentComponent"
884 Guid="c8e351b0-e2ab-11df-85ca-0800200c9a66">
885 <File Id="emblems_API_MS_Win_Core_ProcessEnvironment_L1_1_0.dll"
886 Name="API-MS-Win-Core-ProcessEnvironment-L1-1-0.dll"
887 DiskId="1"
888 Source="build_results\emblems_cache\API-MS-Win-Core-ProcessEnvironment-L1-1-0.dll"
889 KeyPath="yes"/>
890 </Component>
891 <Component Id="EmblemsProcessThreadComponent"
892 Guid="eba52d40-e2ab-11df-85ca-0800200c9a66">
893 <File Id="emblems_API_MS_Win_Core_ProcessThreads_L1_1_0.dll"
894 Name="API-MS-Win-Core-ProcessThreads-L1-1-0.dll"
895 DiskId="1"
896 Source="build_results\emblems_cache\API-MS-Win-Core-ProcessThreads-L1-1-0.dll"
897 KeyPath="yes"/>
898 </Component>
899 <Component Id="EmblemsProfileComponent"
900 Guid="2213f5f0-e2ac-11df-85ca-0800200c9a66">
901 <File Id="emblems_API_MS_Win_Core_Profile_L1_1_0.dll"
902 Name="API-MS-Win-Core-Profile-L1-1-0.dll"
903 DiskId="1"
904 Source="build_results\emblems_cache\API-MS-Win-Core-Profile-L1-1-0.dll"
905 KeyPath="yes"/>
906 </Component>
907 <Component Id="EmblemsStringComponent"
908 Guid="737edb30-e2ac-11df-85ca-0800200c9a66">
909 <File Id="emblems_API_MS_Win_Core_String_L1_1_0.dll"
910 Name="API-MS-Win-Core-String-L1-1-0.dll"
911 DiskId="1"
912 Source="build_results\emblems_cache\API-MS-Win-Core-String-L1-1-0.dll"
913 KeyPath="yes"/>
914 </Component>
915 <Component Id="EmblemsSynchComponent"
916 Guid="207f2fb0-e2ad-11df-85ca-0800200c9a66">
917 <File Id="emblems_API_MS_Win_Core_Synch_L1_1_0.dll"
918 Name="API-MS-Win-Core-Synch-L1-1-0.dll"
919 DiskId="1"
920 Source="build_results\emblems_cache\API-MS-Win-Core-Synch-L1-1-0.dll"
921 KeyPath="yes"/>
922 </Component>
923 <Component Id="EmblemsSysInfoComponent"
924 Guid="2cd57350-e2ad-11df-85ca-0800200c9a66">
925 <File Id="emblems_API_MS_Win_Core_SysInfo_L1_1_0.dll"
926 Name="API-MS-Win-Core-SysInfo-L1-1-0.dll"
927 DiskId="1"
928 Source="build_results\emblems_cache\API-MS-Win-Core-SysInfo-L1-1-0.dll"
929 KeyPath="yes"/>
930 </Component>
931 <Component Id="EmblemsSecurityComponent"
932 Guid="a851b1b0-e2ad-11df-85ca-0800200c9a66">
933 <File Id="emblems_API_MS_Win_Security_Base_L1_1_0.dll"
934 Name="API-MS-Win-Security-Base-L1-1-0.dll"
935 DiskId="1"
936 Source="build_results\emblems_cache\API-MS-Win-Security-Base-L1-1-0.dll"
937 KeyPath="yes"/>
938 </Component>
939 <Component Id="EmblemsBz2Component"
940 Guid="da6bed50-e2ad-11df-85ca-0800200c9a66">
941 <File Id="emblems_bz2.pyd"
942 Name="bz2.pyd"
943 DiskId="1"
944 Source="build_results\emblems_cache\bz2.pyd"
945 KeyPath="yes"/>
946 </Component>
947 <Component Id="EmblemsKernelBaseComponent"
948 Guid="151bbb10-e2ae-11df-85ca-0800200c9a66">
949 <File Id="emblems_KERNELBASE.dll"
950 Name="KERNELBASE.dll"
951 DiskId="1"
952 Source="build_results\emblems_cache\KERNELBASE.dll"
953 KeyPath="yes"/>
954 </Component>
955 <Component Id="EmblemsLibraryComponent"
956 Guid="5b0d7640-e2ae-11df-85ca-0800200c9a66">
957 <File Id="emblems_library.zip"
958 Name="library.zip"
959 DiskId="1"
960 Source="build_results\emblems_cache\library.zip"
961 KeyPath="yes"/>
962 </Component>
963 <Component Id="EmblemsMPRComponent"
964 Guid="6e6d2dc0-e2ae-11df-85ca-0800200c9a66">
965 <File Id="emblems_MPR.dll"
966 Name="MPR.dll"
967 DiskId="1"
968 Source="build_results\emblems_cache\MPR.dll"
969 KeyPath="yes"/>
970 </Component>
971 <Component Id="EmblemsMWSOCKComponent"
972 Guid="a143b480-e2ae-11df-85ca-0800200c9a66">
973 <File Id="emblems_MSWSOCK.dll"
974 Name="MSWSOCK.dll"
975 DiskId="1"
976 Source="build_results\emblems_cache\MSWSOCK.dll"
977 KeyPath="yes"/>
978 </Component>
979 <Component Id="EmblemsPOWRPROFComponent"
980 Guid="c7530d60-e2ae-11df-85ca-0800200c9a66">
981 <File Id="emblems_POWRPROF.dll"
982 Name="POWRPROF.dll"
983 DiskId="1"
984 Source="build_results\emblems_cache\POWRPROF.dll"
985 KeyPath="yes"/>
986 </Component>
987 <Component Id="EmblemsPyexpatComponent"
988 Guid="e472cd40-e2ae-11df-85ca-0800200c9a66">
989 <File Id="emblems_pyexpat.pyd"
990 Name="pyexpat.pyd"
991 DiskId="1"
992 Source="build_results\emblems_cache\pyexpat.pyd"
993 KeyPath="yes"/>
994 </Component>
995 <Component Id="EmblemsPythonDllComponent"
996 Guid="99c47ef0-e2af-11df-85ca-0800200c9a66">
997 <File Id="emblems_python26.dll"
998 Name="python26.dll"
999 DiskId="1"
1000 Source="build_results\emblems_cache\python26.dll"
1001 KeyPath="yes"/>
1002 </Component>
1003 <Component Id="EmblemsPyWinTypesComponent"
1004 Guid="b828a5b0-e2af-11df-85ca-0800200c9a66">
1005 <File Id="emblems_pywintypes26.dll"
1006 Name="pywintypes26.dll"
1007 DiskId="1"
1008 Source="build_results\emblems_cache\pywintypes26.dll"
1009 KeyPath="yes"/>
1010 </Component>
1011 <Component Id="EmblemsSelectComponent"
1012 Guid="d8e08070-e2af-11df-85ca-0800200c9a66">
1013 <File Id="emblems_select.pyd"
1014 Name="select.pyd"
1015 DiskId="1"
1016 Source="build_results\emblems_cache\select.pyd"
1017 KeyPath="yes"/>
1018 </Component>
1019 <Component Id="EmblemsUnicodeDataComponent"
1020 Guid="073cf0c0-e2b0-11df-85ca-0800200c9a66">
1021 <File Id="emblems_unicodedata.pyd"
1022 Name="unicodedata.pyd"
1023 DiskId="1"
1024 Source="build_results\emblems_cache\unicodedata.pyd"
1025 KeyPath="yes"/>
1026 </Component>
1027 <Component Id="EmblemsW9xopenComponent"
1028 Guid="236d2080-e2b0-11df-85ca-0800200c9a66">
1029 <File Id="emblems_w9xpopen.exe"
1030 Name="w9xpopen.exe"
1031 DiskId="1"
1032 Source="build_results\emblems_cache\w9xpopen.exe"
1033 KeyPath="yes"/>
1034 </Component>
1035 <Component Id="EmblemsWin32ApiComponent"
1036 Guid="5676ec40-e2b0-11df-85ca-0800200c9a66">
1037 <File Id="emblems_win32api.pyd"
1038 Name="win32api.pyd"
1039 DiskId="1"
1040 Source="build_results\emblems_cache\win32api.pyd"
1041 KeyPath="yes"/>
1042 </Component>
1043 <Component Id="EmblemsWin32EventComponent"
1044 Guid="7331f6e0-e2b0-11df-85ca-0800200c9a66">
1045 <File Id="emblems_win32event.pyd"
1046 Name="win32event.pyd"
1047 DiskId="1"
1048 Source="build_results\emblems_cache\win32event.pyd"
1049 KeyPath="yes"/>
1050 </Component>
1051 <Component Id="EmblemsWin32FileComponent"
1052 Guid="9c2dc150-e2b0-11df-85ca-0800200c9a66">
1053 <File Id="emblems_win32file.pyd"
1054 Name="win32file.pyd"
1055 DiskId="1"
1056 Source="build_results\emblems_cache\win32file.pyd"
1057 KeyPath="yes"/>
1058 </Component>
1059 <Component Id="EmblemsWin32PipeComponent"
1060 Guid="cbdeec30-e2b0-11df-85ca-0800200c9a66">
1061 <File Id="emblems_win32pipe.pyd"
1062 Name="win32pipe.pyd"
1063 DiskId="1"
1064 Source="build_results\emblems_cache\win32pipe.pyd"
1065 KeyPath="yes"/>
1066 </Component>
1067 <Component Id="EmblemsWnetComponent"
1068 Guid="e94e79c0-e2b0-11df-85ca-0800200c9a66">
1069 <File Id="emblems_win32wnet.pyd"
1070 Name="win32wnet.pyd"
1071 DiskId="1"
1072 Source="build_results\emblems_cache\win32wnet.pyd"
1073 KeyPath="yes"/>
1074 </Component>
1075 <Component Id="EmblemsAppComponent"
1076 Guid="06b072c0-e2b1-11df-85ca-0800200c9a66">
1077 <File Id="windows_emblems_cache.exe"
1078 Name="windows_emblems_cache.exe"
1079 DiskId="1"
1080 Source="build_results\emblems_cache\windows_emblems_cache.exe"
1081 KeyPath="yes"/>
1082 </Component>
1083 </Directory>
1084 <Directory Id="IconsOverlayDir"
1085 Name="IconsOverlay">
1086 <Component Id="IconsOverlaySysLoaderComponent"
1087 Guid="26ce6810-e68e-11df-9492-0800200c9a66">
1088 <File Id="icons_overlay_win32sysloader.pyd"
1089 Name="_win32sysloader.pyd"
1090 DiskId="1"
1091 Source="build_results\icons_overlay\_win32sysloader.pyd"
1092 KeyPath="yes"/>
1093 </Component>
1094 <Component Id="IconsOverlayWinCoreDebugComponent"
1095 Guid="3c8a10f0-e68e-11df-9492-0800200c9a66">
1096 <File Id="icons_overlay_API_MS_Win_Core_Debug_L1_1_0.dll"
1097 Name="API-MS-Win-Core-Debug-L1-1-0.dll"
1098 DiskId="1"
1099 Source="build_results\icons_overlay\API-MS-Win-Core-Debug-L1-1-0.dll"
1100 KeyPath="yes"/>
1101 </Component>
1102 <Component Id="IconsOverlayWinCoreDelayLoadComponent"
1103 Guid="3c8a10f1-e68e-11df-9492-0800200c9a66">
1104 <File Id="icons_overlay_API_MS_Win_Core_DelayLoad_L1_1_0.dll"
1105 Name="API-MS-Win-Core-DelayLoad-L1-1-0.dll"
1106 DiskId="1"
1107 Source="build_results\icons_overlay\API-MS-Win-Core-DelayLoad-L1-1-0.dll"
1108 KeyPath="yes"/>
1109 </Component>
1110 <Component Id="IconsOverlayWinCoreErrorHandlingComponent"
1111 Guid="3c8a10f2-e68e-11df-9492-0800200c9a66">
1112 <File Id="icons_overlay_API_MS_Win_Core_ErrorHandling_L1_1_0.dll"
1113 Name="API-MS-Win-Core-ErrorHandling-L1-1-0.dll"
1114 DiskId="1"
1115 Source="build_results\icons_overlay\API-MS-Win-Core-ErrorHandling-L1-1-0.dll"
1116 KeyPath="yes"/>
1117 </Component>
1118 <Component Id="IconsOverlayWinCoreHandleComponent"
1119 Guid="3c8a10f4-e68e-11df-9492-0800200c9a66">
1120 <File Id="icons_overlay_API_MS_Win_Core_Handle_L1_1_0.dll"
1121 Name="API-MS-Win-Core-Handle-L1-1-0.dll"
1122 DiskId="1"
1123 Source="build_results\icons_overlay\API-MS-Win-Core-Handle-L1-1-0.dll"
1124 KeyPath="yes"/>
1125 </Component>
1126 <Component Id="IconsOverlayWinCoreInterlockedComponent"
1127 Guid="3c8a10f5-e68e-11df-9492-0800200c9a66">
1128 <File Id="icons_overlay_API_MS_Win_Core_Interlocked_L1_1_0.dll"
1129 Name="API-MS-Win-Core-Interlocked-L1-1-0.dll"
1130 DiskId="1"
1131 Source="build_results\icons_overlay\API-MS-Win-Core-Interlocked-L1-1-0.dll"
1132 KeyPath="yes"/>
1133 </Component>
1134 <Component Id="IconsOverlayWinCoreIOComponent"
1135 Guid="3c8a10f6-e68e-11df-9492-0800200c9a66">
1136 <File Id="icons_overlay_API_MS_Win_Core_IO_L1_1_0.dll"
1137 Name="API-MS-Win-Core-IO-L1-1-0.dll"
1138 DiskId="1"
1139 Source="build_results\icons_overlay\API-MS-Win-Core-IO-L1-1-0.dll"
1140 KeyPath="yes"/>
1141 </Component>
1142 <Component Id="IconsOverlayWinCoreLibraryLoaderComponent"
1143 Guid="3c8a10f7-e68e-11df-9492-0800200c9a66">
1144 <File Id="icons_overlay_API_MS_Win_Core_LibraryLoader_L1_1_0.dll"
1145 Name="API-MS-Win-Core-LibraryLoader-L1-1-0.dll"
1146 DiskId="1"
1147 Source="build_results\icons_overlay\API-MS-Win-Core-LibraryLoader-L1-1-0.dll"
1148 KeyPath="yes"/>
1149 </Component>
1150 <Component Id="IconsOverlayWinCoreLocalizationComponent"
1151 Guid="9c1eaf60-e690-11df-9492-0800200c9a66">
1152 <File Id="icons_overlay_API_MS_Win_Core_LocalRegistry_L1_1_0.dll"
1153 Name="API-MS-Win-Core-LocalRegistry-L1-1-0.dll"
1154 DiskId="1"
1155 Source="build_results\icons_overlay\API-MS-Win-Core-LocalRegistry-L1-1-0.dll"
1156 KeyPath="yes"/>
1157 </Component>
1158 <Component Id="IconsOverlayWinCoreMemoryComponent"
1159 Guid="9c1eaf61-e690-11df-9492-0800200c9a66">
1160 <File Id="icons_overlay_API_MS_Win_Core_Memory_L1_1_0.dll"
1161 Name="API-MS-Win-Core-Memory-L1-1-0.dll"
1162 DiskId="1"
1163 Source="build_results\icons_overlay\API-MS-Win-Core-Memory-L1-1-0.dll"
1164 KeyPath="yes"/>
1165 </Component>
1166 <Component Id="IconsOverlayWinCoreMiscComponent"
1167 Guid="9c1eaf62-e690-11df-9492-0800200c9a66">
1168 <File Id="icons_overlay_API_MS_Win_Core_Misc_L1_1_0.dll"
1169 Name="API-MS-Win-Core-Misc-L1-1-0.dll"
1170 DiskId="1"
1171 Source="build_results\icons_overlay\API-MS-Win-Core-Misc-L1-1-0.dll"
1172 KeyPath="yes"/>
1173 </Component>
1174 <Component Id="IconsOverlayWinCoreProcessEnvironmentComponent"
1175 Guid="9c1eaf63-e690-11df-9492-0800200c9a66">
1176 <File Id="icons_overlay_API_MS_Win_Core_ProcessEnvironment_L1_1_0.dll"
1177 Name="API-MS-Win-Core-ProcessEnvironment-L1-1-0.dll"
1178 DiskId="1"
1179 Source="build_results\icons_overlay\API-MS-Win-Core-ProcessEnvironment-L1-1-0.dll"
1180 KeyPath="yes"/>
1181 </Component>
1182 <Component Id="IconsOverlayWinCoreProcessThreadsComponent"
1183 Guid="9c1eaf64-e690-11df-9492-0800200c9a66">
1184 <File Id="icons_overlay_API_MS_Win_Core_ProcessThreads_L1_1_0.dll"
1185 Name="API-MS-Win-Core-ProcessThreads-L1-1-0.dll"
1186 DiskId="1"
1187 Source="build_results\icons_overlay\API-MS-Win-Core-ProcessThreads-L1-1-0.dll"
1188 KeyPath="yes"/>
1189 </Component>
1190 <Component Id="IconsOverlayWinCoreProfileComponent"
1191 Guid="9c1eaf65-e690-11df-9492-0800200c9a66">
1192 <File Id="icons_overlay_API_MS_Win_Core_Profile_L1_1_0.dll"
1193 Name="API-MS-Win-Core-Profile-L1-1-0.dll"
1194 DiskId="1"
1195 Source="build_results\icons_overlay\API-MS-Win-Core-Profile-L1-1-0.dll"
1196 KeyPath="yes"/>
1197 </Component>
1198 <Component Id="IconsOverlayWinCoreStringComponent"
1199 Guid="9c1eaf66-e690-11df-9492-0800200c9a66">
1200 <File Id="icons_overlay_API_MS_Win_Core_String_L1_1_0.dll"
1201 Name="API-MS-Win-Core-String-L1-1-0.dll"
1202 DiskId="1"
1203 Source="build_results\icons_overlay\API-MS-Win-Core-String-L1-1-0.dll"
1204 KeyPath="yes"/>
1205 </Component>
1206 <Component Id="IconsOverlayWinCoreSynchComponent"
1207 Guid="9c1eaf67-e690-11df-9492-0800200c9a66">
1208 <File Id="icons_overlay_API_MS_Win_Core_Synch_L1_1_0.dll"
1209 Name="API-MS-Win-Core-Synch-L1-1-0.dll"
1210 DiskId="1"
1211 Source="build_results\icons_overlay\API-MS-Win-Core-Synch-L1-1-0.dll"
1212 KeyPath="yes"/>
1213 </Component>
1214 <Component Id="IconsOverlayWinCoreSysInfoComponent"
1215 Guid="9c1eaf68-e690-11df-9492-0800200c9a66">
1216 <File Id="icons_overlay_API_MS_Win_Core_SysInfo_L1_1_0.dll"
1217 Name="API-MS-Win-Core-SysInfo-L1-1-0.dll"
1218 DiskId="1"
1219 Source="build_results\icons_overlay\API-MS-Win-Core-SysInfo-L1-1-0.dll"
1220 KeyPath="yes"/>
1221 </Component>
1222 <Component Id="IconsOverlayWinCoreSecurityBaseComponent"
1223 Guid="9c1eaf69-e690-11df-9492-0800200c9a66">
1224 <File Id="icons_overlay_API_MS_Win_Security_Base_L1_1_0.dll"
1225 Name="API-MS-Win-Security-Base-L1-1-0.dll"
1226 DiskId="1"
1227 Source="build_results\icons_overlay\API-MS-Win-Security-Base-L1-1-0.dll"
1228 KeyPath="yes"/>
1229 </Component>
1230 <Component Id="IconsOverlayBz2Component"
1231 Guid="9c1ed670-e690-11df-9492-0800200c9a66">
1232 <File Id="icons_overlay_bz2.pyd"
1233 Name="bz2.pyd"
1234 DiskId="1"
1235 Source="build_results\icons_overlay\bz2.pyd"
1236 KeyPath="yes"/>
1237 </Component>
1238 <Component Id="IconsOverlayKernelComponent"
1239 Guid="9c1ed671-e690-11df-9492-0800200c9a66">
1240 <File Id="icons_overlay_KERNELBASE.dll"
1241 Name="KERNELBASE.dll"
1242 DiskId="1"
1243 Source="build_results\icons_overlay\KERNELBASE.dll"
1244 KeyPath="yes"/>
1245 </Component>
1246 <Component Id="IconsOverlayLibraryComponent"
1247 Guid="9c1ed673-e690-11df-9492-0800200c9a66">
1248 <File Id="icons_overlay_library.zip"
1249 Name="library.zip"
1250 DiskId="1"
1251 Source="build_results\icons_overlay\library.zip"
1252 KeyPath="yes"/>
1253 </Component>
1254 <Component Id="IconsOverlayMswsockComponent"
1255 Guid="9c1ed674-e690-11df-9492-0800200c9a66">
1256 <File Id="icons_overlay_MSWSOCK.dll"
1257 Name="MSWSOCK.dll"
1258 DiskId="1"
1259 Source="build_results\icons_overlay\MSWSOCK.dll"
1260 KeyPath="yes"/>
1261 </Component>
1262 <Component Id="IconsOverlayPowrprofComponent"
1263 Guid="9c1ed675-e690-11df-9492-0800200c9a66">
1264 <File Id="icons_overlay_POWRPROF.dll"
1265 Name="POWRPROF.dll"
1266 DiskId="1"
1267 Source="build_results\icons_overlay\POWRPROF.dll"
1268 KeyPath="yes"/>
1269 </Component>
1270 <Component Id="IconsOverlayPythonComponent"
1271 Guid="9c1ed676-e690-11df-9492-0800200c9a66">
1272 <File Id="icons_overlay_python26.dll"
1273 Name="python26.dll"
1274 DiskId="1"
1275 Source="build_results\icons_overlay\python26.dll"
1276 KeyPath="yes"/>
1277 </Component>
1278 <Component Id="IconsOverlayPython26Component"
1279 Guid="9c1ed677-e690-11df-9492-0800200c9a66">
1280 <File Id="icons_overlay_pythoncom26.dll"
1281 Name="pythoncom26.dll"
1282 DiskId="1"
1283 Source="build_results\icons_overlay\pythoncom26.dll"
1284 KeyPath="yes"/>
1285 </Component>
1286 <Component Id="IconsOverlayPyWintypes26Component"
1287 Guid="9c1ed678-e690-11df-9492-0800200c9a66">
1288 <File Id="icons_overlay_pywintypes26.dll"
1289 Name="pywintypes26.dll"
1290 DiskId="1"
1291 Source="build_results\icons_overlay\pywintypes26.dll"
1292 KeyPath="yes"/>
1293 </Component>
1294 <Component Id="IconsOverlayRegisterComponent"
1295 Guid="9c1ed679-e690-11df-9492-0800200c9a66">
1296 <File Id="icons_overlay_register.exe"
1297 Name="register.exe"
1298 DiskId="1"
1299 Source="build_results\icons_overlay\register.exe"
1300 KeyPath="yes"/>
1301 </Component>
1302 <Component Id="IconsOverlaySelectComponent"
1303 Guid="9c1ed67a-e690-11df-9492-0800200c9a66">
1304 <File Id="icons_overlay_select.pyd"
1305 Name="select.pyd"
1306 DiskId="1"
1307 Source="build_results\icons_overlay\select.pyd"
1308 KeyPath="yes"/>
1309 </Component>
1310 <Component Id="IconsOverlayUnicodedataComponent"
1311 Guid="9c1ed67b-e690-11df-9492-0800200c9a66">
1312 <File Id="icons_overlay_unicodedata.pyd"
1313 Name="unicodedata.pyd"
1314 DiskId="1"
1315 Source="build_results\icons_overlay\unicodedata.pyd"
1316 KeyPath="yes"/>
1317 </Component>
1318 <Component Id="IconsOverlayWx9popnComponent"
1319 Guid="9c1ed67c-e690-11df-9492-0800200c9a66">
1320 <File Id="icons_overlay_w9xpopen.exe"
1321 Name="w9xpopen.exe"
1322 DiskId="1"
1323 Source="build_results\icons_overlay\w9xpopen.exe"
1324 KeyPath="yes"/>
1325 </Component>
1326 <Component Id="IconsOverlayWin32ApiComponent"
1327 Guid="ac07cf01-e696-11df-9492-0800200c9a66">
1328 <File Id="icons_overlay_win32api.pyd"
1329 Name="win32api.pyd"
1330 DiskId="1"
1331 Source="build_results\icons_overlay\win32api.pyd"
1332 KeyPath="yes"/>
1333 </Component>
1334 <Component Id="IconsOverlayWin32EventComponent"
1335 Guid="99db8510-e6af-11df-9492-0800200c9a66">
1336 <File Id="icons_overlay_win32event.pyd"
1337 Name="win32event.pyd"
1338 DiskId="1"
1339 Source="build_results\icons_overlay\win32event.pyd"
1340 KeyPath="yes"/>
1341 </Component>
1342 <Component Id="IconsOverlayWin32FileComponent"
1343 Guid="99db8512-e6af-11df-9492-0800200c9a66">
1344 <File Id="icons_overlay_win32file.pyd"
1345 Name="win32file.pyd"
1346 DiskId="1"
1347 Source="build_results\icons_overlay\win32file.pyd"
1348 KeyPath="yes"/>
1349 </Component>
1350 <Component Id="IconsOverlayWin32PipeComponent"
1351 Guid="99db8513-e6af-11df-9492-0800200c9a66">
1352 <File Id="icons_overlay_win32pipe.pyd"
1353 Name="win32pipe.pyd"
1354 DiskId="1"
1355 Source="build_results\icons_overlay\win32pipe.pyd"
1356 KeyPath="yes"/>
1357 </Component>
1358 <Component Id="IconsOverlayWin32ProcessComponent"
1359 Guid="99db8514-e6af-11df-9492-0800200c9a66">
1360 <File Id="icons_overlay_win32process.pyd"
1361 Name="win32process.pyd"
1362 DiskId="1"
1363 Source="build_results\icons_overlay\win32process.pyd"
1364 KeyPath="yes"/>
1365 </Component>
1366 <Component Id="IconsOverlayWin32PGuiComponent"
1367 Guid="99db8523-e6af-11df-9492-0800200c9a66">
1368 <File Id="icons_overlay_winxpgui.pyd"
1369 Name="winxpgui.pyd"
1370 DiskId="1"
1371 Source="build_results\icons_overlay\winxpgui.pyd"
1372 KeyPath="yes"/>
1373 </Component>
1374 </Directory>
717 </Directory>1375 </Directory>
718 </Directory>1376 </Directory>
719 </Directory>1377 </Directory>
@@ -730,6 +1388,9 @@
730 <ComponentRef Id="UbuntuOneGoDaddyClass2CAComponent" />1388 <ComponentRef Id="UbuntuOneGoDaddyClass2CAComponent" />
731 <ComponentRef Id="AddedIconComponent" />1389 <ComponentRef Id="AddedIconComponent" />
732 <ComponentRef Id="ConflictIconComponent" />1390 <ComponentRef Id="ConflictIconComponent" />
1391 <ComponentRef Id="IsPresentUbuntuOneIconOverlayKey" />
1392 <ComponentRef Id="IsNewUbuntuOneIconOverlayKey" />
1393 <ComponentRef Id="IsConflictUbuntuOneIconOverlayKey" />
733 <!-- Client components -->1394 <!-- Client components -->
734 <ComponentRef Id="PhoenixLib" />1395 <ComponentRef Id="PhoenixLib" />
735 <ComponentRef Id="AvalonLib" />1396 <ComponentRef Id="AvalonLib" />
@@ -808,8 +1469,89 @@
808 <ComponentRef Id="UbuntuSSO" />1469 <ComponentRef Id="UbuntuSSO" />
809 <ComponentRef Id="UbuntuSSOViews" />1470 <ComponentRef Id="UbuntuSSOViews" />
810 <ComponentRef Id="Newtonsoft.Json" />1471 <ComponentRef Id="Newtonsoft.Json" />
1472 <!-- Cache process -->
1473 <ComponentRef Id="EmblemsCTypesComponent" />
1474 <ComponentRef Id="EmblemsHashLibComponent" />
1475 <ComponentRef Id="EmblemsMultiprocessingComponent" />
1476 <ComponentRef Id="EmblemsSocketComponent" />
1477 <ComponentRef Id="EmblemsSSLComponent" />
1478 <ComponentRef Id="EmblemsSysLoaderComponent" />
1479 <ComponentRef Id="EmblemsCoreDebugComponent" />
1480 <ComponentRef Id="EmblemsDelayLoadComponent" />
1481 <ComponentRef Id="EmblemsErrorHandlingComponent" />
1482 <ComponentRef Id="EmblemsHandleComponent" />
1483 <ComponentRef Id="EmblemsInterlockedComponent" />
1484 <ComponentRef Id="EmblemsIOComponent" />
1485 <ComponentRef Id="EmblemsLibraryLoaderComponent" />
1486 <ComponentRef Id="EmblemsLocalizationComponent" />
1487 <ComponentRef Id="EmblemsLocaRegistryComponent" />
1488 <ComponentRef Id="EmblemsMemoryComponent" />
1489 <ComponentRef Id="EmblemsMiscComponent" />
1490 <ComponentRef Id="EmblemsProcessEnvironmentComponent" />
1491 <ComponentRef Id="EmblemsProcessThreadComponent" />
1492 <ComponentRef Id="EmblemsProfileComponent" />
1493 <ComponentRef Id="EmblemsStringComponent" />
1494 <ComponentRef Id="EmblemsSynchComponent" />
1495 <ComponentRef Id="EmblemsSysInfoComponent" />
1496 <ComponentRef Id="EmblemsSecurityComponent" />
1497 <ComponentRef Id="EmblemsBz2Component" />
1498 <ComponentRef Id="EmblemsKernelBaseComponent" />
1499 <ComponentRef Id="EmblemsLibraryComponent" />
1500 <ComponentRef Id="EmblemsMPRComponent" />
1501 <ComponentRef Id="EmblemsMWSOCKComponent" />
1502 <ComponentRef Id="EmblemsPOWRPROFComponent" />
1503 <ComponentRef Id="EmblemsPyexpatComponent" />
1504 <ComponentRef Id="EmblemsPythonDllComponent" />
1505 <ComponentRef Id="EmblemsPyWinTypesComponent" />
1506 <ComponentRef Id="EmblemsSelectComponent" />
1507 <ComponentRef Id="EmblemsUnicodeDataComponent" />
1508 <ComponentRef Id="EmblemsW9xopenComponent" />
1509 <ComponentRef Id="EmblemsWin32ApiComponent" />
1510 <ComponentRef Id="EmblemsWin32EventComponent" />
1511 <ComponentRef Id="EmblemsWin32FileComponent" />
1512 <ComponentRef Id="EmblemsWin32PipeComponent" />
1513 <ComponentRef Id="EmblemsWnetComponent" />
1514 <ComponentRef Id="EmblemsAppComponent" />
1515 <ComponentRef Id="EmblemsCacheAutostart" />
1516 <!-- emblems -->
1517 <ComponentRef Id="IconsOverlaySysLoaderComponent" />
1518 <ComponentRef Id="IconsOverlayWinCoreDebugComponent" />
1519 <ComponentRef Id="IconsOverlayWinCoreDelayLoadComponent" />
1520 <ComponentRef Id="IconsOverlayWinCoreErrorHandlingComponent" />
1521 <ComponentRef Id="IconsOverlayWinCoreHandleComponent" />
1522 <ComponentRef Id="IconsOverlayWinCoreInterlockedComponent" />
1523 <ComponentRef Id="IconsOverlayWinCoreIOComponent" />
1524 <ComponentRef Id="IconsOverlayWinCoreLibraryLoaderComponent" />
1525 <ComponentRef Id="IconsOverlayWinCoreLocalizationComponent" />
1526 <ComponentRef Id="IconsOverlayWinCoreMemoryComponent" />
1527 <ComponentRef Id="IconsOverlayWinCoreMiscComponent" />
1528 <ComponentRef Id="IconsOverlayWinCoreProcessEnvironmentComponent" />
1529 <ComponentRef Id="IconsOverlayWinCoreProcessThreadsComponent" />
1530 <ComponentRef Id="IconsOverlayWinCoreProfileComponent" />
1531 <ComponentRef Id="IconsOverlayWinCoreStringComponent" />
1532 <ComponentRef Id="IconsOverlayWinCoreSynchComponent" />
1533 <ComponentRef Id="IconsOverlayWinCoreSysInfoComponent" />
1534 <ComponentRef Id="IconsOverlayWinCoreSecurityBaseComponent" />
1535 <ComponentRef Id="IconsOverlayBz2Component" />
1536 <ComponentRef Id="IconsOverlayKernelComponent" />
1537 <ComponentRef Id="IconsOverlayLibraryComponent" />
1538 <ComponentRef Id="IconsOverlayMswsockComponent" />
1539 <ComponentRef Id="IconsOverlayPowrprofComponent" />
1540 <ComponentRef Id="IconsOverlayPythonComponent" />
1541 <ComponentRef Id="IconsOverlayPython26Component" />
1542 <ComponentRef Id="IconsOverlayPyWintypes26Component" />
1543 <ComponentRef Id="IconsOverlayRegisterComponent" />
1544 <ComponentRef Id="IconsOverlaySelectComponent" />
1545 <ComponentRef Id="IconsOverlayUnicodedataComponent" />
1546 <ComponentRef Id="IconsOverlayWx9popnComponent" />
1547 <ComponentRef Id="IconsOverlayWin32ApiComponent" />
1548 <ComponentRef Id="IconsOverlayWin32EventComponent" />
1549 <ComponentRef Id="IconsOverlayWin32FileComponent" />
1550 <ComponentRef Id="IconsOverlayWin32PipeComponent" />
1551 <ComponentRef Id="IconsOverlayWin32ProcessComponent" />
1552 <ComponentRef Id="IconsOverlayWin32PGuiComponent" />
811 </Feature>1553 </Feature>
8121554
813 <UI Id="WixUI_Minimal_No_License">1555 <UI Id="WixUI_Minimal_No_License">
814 <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />1556 <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
815 <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />1557 <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
@@ -854,5 +1596,18 @@
854 <WixVariable Id="WixUINewIco" Value="path\new.ico" />1596 <WixVariable Id="WixUINewIco" Value="path\new.ico" />
855 <WixVariable Id="WixUIUpIco" Value="path\up.ico" /> -->1597 <WixVariable Id="WixUIUpIco" Value="path\up.ico" /> -->
856 1598
1599 <CustomAction Id="RegisterEmblems"
1600 FileKey="icons_overlay_register.exe"
1601 ExeCommand=""
1602 Impersonate="no"
1603 Execute="deferred"
1604 Return="ignore"/>
1605
1606 <InstallExecuteSequence>
1607
1608 <Custom Action="RegisterEmblems"
1609 After="InstallFiles" />
1610</InstallExecuteSequence>
1611
857 </Product>1612 </Product>
858</Wix>1613</Wix>
859\ No newline at end of file1614\ No newline at end of file
8601615
=== modified file 'main.build'
--- main.build 2010-10-20 23:23:31 +0000
+++ main.build 2010-11-02 22:22:53 +0000
@@ -225,10 +225,18 @@
225 225
226 <exec basedir="${python_path}"226 <exec basedir="${python_path}"
227 managed="true"227 managed="true"
228 workingdir="src"228 workingdir="src/sync"
229 program="python.exe"229 program="python.exe"
230 commandline="setup.py py2exe --packages=ubuntuone.storageprotocol" />230 commandline="setup.py py2exe --packages=ubuntuone.storageprotocol" />
231 231
232 <!-- pack the program used to cache the overlays info. -->
233
234 <exec basedir="${python_path}"
235 managed="true"
236 workingdir="src/emblems_cache"
237 program="python.exe"
238 commandline="setup.py py2exe --packages=pkg_resources" />
239
232 </target>240 </target>
233 241
234 <target name="installer"242 <target name="installer"
@@ -277,10 +285,10 @@
277 <include name="*.config" />285 <include name="*.config" />
278 </fileset>286 </fileset>
279 </copy>287 </copy>
280 288
281 <!-- copy the results of the package_python to the install dir -->289 <!-- copy the results of the package_python to the install dir -->
282 <copy todir="${build_results}/u1sync" flatten="true">290 <copy todir="${build_results}/u1sync" flatten="true">
283 <fileset basedir="src/dist">291 <fileset basedir="src/sync/dist">
284 <include name="*.*" />292 <include name="*.*" />
285 </fileset>293 </fileset>
286 </copy>294 </copy>
@@ -291,6 +299,18 @@
291 </fileset>299 </fileset>
292 </copy>300 </copy>
293 301
302 <copy todir="${build_results}/emblems_cache" flatten="true">
303 <fileset basedir="src/emblems_cache/dist">
304 <include name="*.*" />
305 </fileset>
306 </copy>
307
308 <copy todir="${build_results}/icons_overlay" flatten="true">
309 <fileset basedir="src/icons_overlay/dist">
310 <include name="*.*" />
311 </fileset>
312 </copy>
313
294 <!-- copy the correct views lib -->314 <!-- copy the correct views lib -->
295 315
296 <copy todir="${build_results}/Client" flatten="true">316 <copy todir="${build_results}/Client" flatten="true">
297317
=== modified file 'src/Version.cs'
--- src/Version.cs 2010-10-12 10:06:34 +0000
+++ src/Version.cs 2010-11-02 22:22:53 +0000
@@ -3,13 +3,13 @@
3//------------------------------------------------------------------------------3//------------------------------------------------------------------------------
4// <auto-generated>4// <auto-generated>
5// This code was generated by a tool.5// This code was generated by a tool.
6// Runtime Version:2.0.50727.49526// Runtime Version:4.0.30319.1
7//7//
8// Changes to this file may cause incorrect behavior and will be lost if8// Changes to this file may cause incorrect behavior and will be lost if
9// the code is regenerated.9// the code is regenerated.
10// </auto-generated>10// </auto-generated>
11//------------------------------------------------------------------------------11//------------------------------------------------------------------------------
1212
13[assembly: AssemblyVersionAttribute("1.0.611.8185")]13[assembly: AssemblyVersionAttribute("1.0.623.7177")]
14[assembly: AssemblyFileVersionAttribute("1.0.611.8185")]14[assembly: AssemblyFileVersionAttribute("1.0.623.7177")]
1515
1616
=== added directory 'src/emblems_cache'
=== added file 'src/emblems_cache/setup.py'
--- src/emblems_cache/setup.py 1970-01-01 00:00:00 +0000
+++ src/emblems_cache/setup.py 2010-11-02 22:22:53 +0000
@@ -0,0 +1,52 @@
1#!/usr/bin/env python
2# Copyright (C) 2010 Canonical - All Rights Reserved
3
4""" """
5import sys
6from glob import glob
7
8# ModuleFinder can't handle runtime changes to __path__, but win32com uses them
9try:
10 # py2exe 0.6.4 introduced a replacement modulefinder.
11 # This means we have to add package paths there, not to the built-in
12 # one. If this new modulefinder gets integrated into Python, then
13 # we might be able to revert this some day.
14 # if this doesn't work, try import modulefinder
15 try:
16 import py2exe.mf as modulefinder
17 except ImportError:
18 import modulefinder
19 import win32com
20 for p in win32com.__path__[1:]:
21 modulefinder.AddPackagePath("win32com", p)
22 for extra in ["win32com.shell" ,"win32com.api", "win32event", "win32pipe", "win32file"]:
23 __import__(extra)
24 m = sys.modules[extra]
25 for p in m.__path__[1:]:
26 modulefinder.AddPackagePath(extra, p)
27except ImportError:
28 # no build path setup, no worries.
29 pass
30
31from distutils.core import setup
32import py2exe
33
34if __name__ == '__main__':
35
36 setup(
37 options = {
38 "py2exe": {
39 "compressed": 1,
40 "optimize": 2}},
41 name='emblems_cache',
42 version='0.0.1',
43 author = "Canonical Online Services Hackers",
44 description="""Cache utility used to allow a better performance wen
45 working with windows emblems.""",
46 data_files = [("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))],
47 license='GPLv3',
48 console=['windows_emblems_cache.py'],
49 requires=[
50 'python (>= 2.5)',
51 ],
52 )
053
=== added file 'src/emblems_cache/windows_emblems_cache.py'
--- src/emblems_cache/windows_emblems_cache.py 1970-01-01 00:00:00 +0000
+++ src/emblems_cache/windows_emblems_cache.py 2010-11-02 22:22:53 +0000
@@ -0,0 +1,111 @@
1# u1syn.windows_emblems_cache
2#
3# u1sync metadata routines
4#
5# Author: Manuel de la Pena <manuel.delapena@canonical.com>
6#
7# Copyright 2010 Canonical Ltd.
8#
9# This program is free software: you can redistribute it and/or modify it
10# under the terms of the GNU General Public License version 3, as published
11# by the Free Software Foundation.
12#
13# This program is distributed in the hope that it will be useful, but
14# WITHOUT ANY WARRANTY; without even the implied warranties of
15# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
16# PURPOSE. See the GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License along
19# with this program. If not, see <http://www.gnu.org/licenses/>.
20import json
21from itertools import count
22from multiprocessing import Process, freeze_support
23import win32event, win32pipe, win32file, pywintypes, winerror
24
25from u1sync.constants import (WAS_MODIFIED_MESSAGE,
26 WAS_ADDED_MESSAGE,
27 IS_IN_ROOT)
28from u1sync.icons import FileTracker
29
30class IconsOverlayCacheService(object):
31 """Represents the object that caches the embles state."""
32
33 pipe_name = r'\\.\pipe\ubuntuone_emblems'
34
35
36 def __init__(self, tracker):
37 self._tracker = tracker
38
39 def _process_request(self, message, pipe_handle):
40 """Process the message from the emblems client."""
41 print message["type"]
42 reply = {}
43 if(message["type"] == WAS_MODIFIED_MESSAGE):
44 reply["type"] = WAS_MODIFIED_MESSAGE
45 reply["reply"] = self._tracker.file_was_modified(
46 message["request"])
47 if(message["type"] == WAS_ADDED_MESSAGE):
48 reply["type"] = WAS_MODIFIED_MESSAGE
49 reply["reply"] = self._tracker.file_was_added(
50 message["request"])
51 if(message["type"] == IS_IN_ROOT):
52 reply["type"] = IS_IN_ROOT,
53 reply["reply"] = self._tracker.file_is_in_ubuntuone_root(
54 message["request"])
55 print reply
56 win32file.WriteFile(pipe_handle, json.dumps(reply), None)
57 win32file.FlushFileBuffers(pipe_handle)
58
59 def run(self):
60 """Start the pipe server for communication in a thread."""
61 open_mode = win32pipe.PIPE_ACCESS_DUPLEX | win32file.FILE_FLAG_OVERLAPPED
62 pipe_mode = win32pipe.PIPE_TYPE_MESSAGE
63
64 sa = pywintypes.SECURITY_ATTRIBUTES()
65 sa.SetSecurityDescriptorDacl(1, None, 0)
66
67 pipe_handle = win32pipe.CreateNamedPipe(
68 self.pipe_name, open_mode, pipe_mode,
69 win32pipe.PIPE_UNLIMITED_INSTANCES,
70 0, 0, 6000, sa
71 )
72
73 overlapped = pywintypes.OVERLAPPED()
74 overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None)
75
76 while 1:
77 try:
78 hr = win32pipe.ConnectNamedPipe(pipe_handle, overlapped)
79 except:
80 # Error connecting pipe
81 pipe_handle.Close()
82 break
83
84 if hr == winerror.ERROR_PIPE_CONNECTED:
85 # Client is fast, and already connected - signal event
86 win32event.SetEvent(overlapped.hEvent)
87 rc = win32event.WaitForSingleObject(
88 overlapped.hEvent, win32event.INFINITE
89 )
90 if rc == win32event.WAIT_OBJECT_0:
91 try:
92 hr, data = win32file.ReadFile(pipe_handle, 3000)
93 message = json.loads(data)
94 self._process_request(message, pipe_handle)
95 win32pipe.DisconnectNamedPipe(pipe_handle)
96 except win32file.error:
97 continue
98
99if __name__ == '__main__':
100 freeze_support()
101 tracker = FileTracker()
102 # creat diff threads to listen to messages form the emblems
103 for thread_number in count(0):
104 cache_service = IconsOverlayCacheService(tracker)
105 listening_thread = Process(target=cache_service.run, name='Emblems thread %i' % thread_number)
106 listening_thread.start()
107 if thread_number == 15:
108 break
109 # listen with an other object
110 main_cache = IconsOverlayCacheService(tracker)
111 main_cache.run()
0\ No newline at end of file112\ No newline at end of file
1113
=== added directory 'src/icons_overlay'
=== added file 'src/icons_overlay/icons_overlay.py'
--- src/icons_overlay/icons_overlay.py 1970-01-01 00:00:00 +0000
+++ src/icons_overlay/icons_overlay.py 2010-11-02 22:22:53 +0000
@@ -0,0 +1,120 @@
1import os
2import json
3from win32com.shell import shell, shellcon
4import winerror, win32file, win32pipe
5
6pipe_name = r'\\.\pipe\ubuntuone_emblems'
7
8def create_pipe_handle():
9 hPipe = win32file.CreateFile(
10 pipe_name, # pipe name
11 win32file.GENERIC_READ | # read and write access
12 win32file.GENERIC_WRITE,
13 0, # no sharing
14 None, # default security attributes
15 win32file.OPEN_EXISTING, # opens existing pipe
16 0, # default attributes
17 None) # no template file
18 # set the handler state
19 success = win32pipe.SetNamedPipeHandleState(
20 hPipe, # pipe handle
21 win32pipe.PIPE_READMODE_MESSAGE, # new pipe mode
22 None, # don't set maximum bytes
23 None) # don't set maximum time
24 return hPipe
25
26def send_message(message):
27 """Send message over the pipe."""
28 pipe_handle = create_pipe_handle()
29 if pipe_handle:
30 # create the overlapped to be used
31 win32file.WriteFile(pipe_handle, json.dumps(message), None)
32 win32file.FlushFileBuffers(pipe_handle)
33 rc, message = win32file.ReadFile(pipe_handle, 3000)
34 if rc == 0:
35 reply = json.loads(message)
36 return reply["reply"]
37 return False
38
39def file_was_added(fname):
40 """Request status of the file to the cache."""
41 # create the message to be sent to the cache
42 message = {"type": "added",
43 "request": fname}
44 return send_message(message)
45
46def file_was_modified(fname):
47 """Request status of the file to the cache."""
48 # create the message to be sent to the cache
49 message = {"type": "modified",
50 "request": fname}
51 return send_message(message)
52
53def file_is_in_ubuntuone_root(fname):
54 """Request if the file is in the ubuntu one root."""
55 message = {"type":"in_root",
56 "request":fname}
57 return send_message(message)
58
59class IsPresentUbuntuOneIconOverlay:
60
61 _reg_clsid_ = '{4FC554DF-F0EE-4A4F-966C-9C49CCF14D59}'
62 _reg_progid_ = 'TJG.IsPresentUbuntuOneIconOverlay'
63 _reg_desc_ = 'Icon Overlay Handler to indicate Python packages'
64 _public_methods_ = ['GetOverlayInfo', 'GetPriority', 'IsMemberOf']
65 _com_interfaces_ = [shell.IID_IShellIconOverlayIdentifier]
66
67 def __init__(self):
68 self.cache = {}
69
70 def GetOverlayInfo(self):
71 return (r'C:\Users\Mandel\Documents\Projects\ubuntuone\net\fix_overlay\data\added.ico', 0, shellcon.ISIOI_ICONFILE)
72
73 def GetPriority(self):
74 return 50
75
76 def IsMemberOf(self, fname, attributes):
77 if file_was_added(fname) and\
78 not file_was_modified(fname):
79 return winerror.S_OK
80 return winerror.E_FAIL
81
82class IsNewUbuntuOneIconOverlay:
83
84 _reg_clsid_ = '{a9694f20-ddbe-11df-85ca-0800200c9a66}'
85 _reg_progid_ = 'TJG.IsNewUbuntuOneIconOverlay'
86 _reg_desc_ = 'Icon Overlay Handler to indicate Python packages'
87 _public_methods_ = ['GetOverlayInfo', 'GetPriority', 'IsMemberOf']
88 _com_interfaces_ = [shell.IID_IShellIconOverlayIdentifier]
89
90 def GetOverlayInfo(self):
91 return (r'C:\Users\Mandel\Documents\Projects\ubuntuone\net\fix_overlay\data\new.ico', 0, shellcon.ISIOI_ICONFILE)
92
93 def GetPriority(self):
94 return 50
95
96 def IsMemberOf(self, fname, attributes):
97 if file_is_in_ubuntuone_root(fname) and\
98 not file_was_added(fname):
99 return winerror.S_OK
100 return winerror.E_FAIL
101
102class IsConflictUbuntuOneIconOverlay:
103
104 _reg_clsid_ = '{3dc7f120-ded8-11df-85ca-0800200c9a66}'
105 _reg_progid_ = 'TJG.IsConflictUbuntuOneIconOverlay'
106 _reg_desc_ = 'Icon Overlay Handler to indicate Python packages'
107 _public_methods_ = ['GetOverlayInfo', 'GetPriority', 'IsMemberOf']
108 _com_interfaces_ = [shell.IID_IShellIconOverlayIdentifier]
109
110 def GetOverlayInfo(self):
111 return (r'C:\Users\Mandel\Documents\Projects\ubuntuone\net\fix_overlay\data\conflict.ico', 0, shellcon.ISIOI_ICONFILE)
112
113 def GetPriority(self):
114 return 50
115
116 def IsMemberOf(self, fname, attributes):
117 if file_was_added(fname) and\
118 file_was_modified(fname):
119 return winerror.S_OK
120 return winerror.E_FAIL
0\ No newline at end of file121\ No newline at end of file
1122
=== added file 'src/icons_overlay/register.py'
--- src/icons_overlay/register.py 1970-01-01 00:00:00 +0000
+++ src/icons_overlay/register.py 2010-11-02 22:22:53 +0000
@@ -0,0 +1,20 @@
1"""
2Register the windows shell extensions that will allow to
3show icon overlays for ubuntu one.
4"""
5import _winreg
6import win32api
7import win32con
8import win32com.server.register
9import sys
10from icons_overlay import (IsPresentUbuntuOneIconOverlay,
11 IsNewUbuntuOneIconOverlay,
12 IsConflictUbuntuOneIconOverlay)
13
14# added files
15win32com.server.register.UseCommandLine (IsPresentUbuntuOneIconOverlay)
16# new files
17win32com.server.register.UseCommandLine (IsNewUbuntuOneIconOverlay)
18# conflict
19win32com.server.register.UseCommandLine (IsConflictUbuntuOneIconOverlay)
20sys.exit(0)
0\ No newline at end of file21\ No newline at end of file
122
=== added file 'src/icons_overlay/setup.py'
--- src/icons_overlay/setup.py 1970-01-01 00:00:00 +0000
+++ src/icons_overlay/setup.py 2010-11-02 22:22:53 +0000
@@ -0,0 +1,50 @@
1#!/usr/bin/env python
2# Copyright (C) 2010 Canonical - All Rights Reserved
3
4""" """
5import sys
6from glob import glob
7
8# ModuleFinder can't handle runtime changes to __path__, but win32com uses them
9try:
10 # py2exe 0.6.4 introduced a replacement modulefinder.
11 # This means we have to add package paths there, not to the built-in
12 # one. If this new modulefinder gets integrated into Python, then
13 # we might be able to revert this some day.
14 # if this doesn't work, try import modulefinder
15 try:
16 import py2exe.mf as modulefinder
17 except ImportError:
18 import modulefinder
19 import win32com
20 for p in win32com.__path__[1:]:
21 modulefinder.AddPackagePath("win32com", p)
22 for extra in ["win32com.shell" ,"win32com.api"]:
23 __import__(extra)
24 m = sys.modules[extra]
25 for p in m.__path__[1:]:
26 modulefinder.AddPackagePath(extra, p)
27except ImportError:
28 # no build path setup, no worries.
29 pass
30
31from distutils.core import setup
32import py2exe
33
34if __name__ == '__main__':
35
36 setup(
37 options = {
38 "py2exe": {
39 "compressed": 1,
40 "optimize": 2}},
41 name='u1ovelay_register',
42 version='0.0.1',
43 author = "Canonical Online Services Hackers",
44 description="""Icon overlays used by ubuntuone""",
45 data_files = [("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))],
46 license='GPLv3',
47 console=['register.py'],
48 requires=[
49 'python (>= 2.5)'],
50 )
051
=== added directory 'src/sync'
=== renamed file 'src/setup.py' => 'src/sync/setup.py'
=== renamed directory 'src/u1sync' => 'src/sync/u1sync'
=== modified file 'src/sync/u1sync/constants.py'
--- src/u1sync/constants.py 2010-08-25 22:44:43 +0000
+++ src/sync/u1sync/constants.py 2010-11-02 22:22:53 +0000
@@ -28,3 +28,7 @@
28SPECIAL_FILE_RE = re.compile(".*\\.("28SPECIAL_FILE_RE = re.compile(".*\\.("
29 "(u1)?partial|part|"29 "(u1)?partial|part|"
30 "(u1)?conflict(\\.[0-9]+)?)$")30 "(u1)?conflict(\\.[0-9]+)?)$")
31
32WAS_MODIFIED_MESSAGE = "modified"
33WAS_ADDED_MESSAGE = "added"
34IS_IN_ROOT = "in_root"
31\ No newline at end of file35\ No newline at end of file
3236
=== modified file 'src/sync/u1sync/genericmerge.py'
--- src/u1sync/genericmerge.py 2010-08-26 14:50:11 +0000
+++ src/sync/u1sync/genericmerge.py 2010-11-02 22:22:53 +0000
@@ -55,8 +55,6 @@
55 type_str = "DIR "55 type_str = "DIR "
56 else:56 else:
57 type_str = "FILE"57 type_str = "FILE"
58 print "%s%-36s %s %s %s" % (indent, tree.uuid, type_str, name,
59 tree.content_hash)
60 if tree.node_type == DIRECTORY and tree.children is not None:58 if tree.node_type == DIRECTORY and tree.children is not None:
61 for name in sorted(tree.children.keys()):59 for name in sorted(tree.children.keys()):
62 subtree = tree.children[name]60 subtree = tree.children[name]
6361
=== modified file 'src/sync/u1sync/icons.py'
--- src/u1sync/icons.py 2010-10-20 11:18:55 +0000
+++ src/sync/u1sync/icons.py 2010-11-02 22:22:53 +0000
@@ -1,6 +1,5 @@
1# Ubuntu One windows Ion overlays1# Ubuntu One windows Ion overlays
2#2#
3# Author: Tim Cole <tim.cole@canonical.com>
4#3#
5# Copyright 2009 Canonical Ltd.4# Copyright 2009 Canonical Ltd.
6#5#
@@ -16,88 +15,125 @@
16# You should have received a copy of the GNU General Public License along15# You should have received a copy of the GNU General Public License along
17# with this program. If not, see <http://www.gnu.org/licenses/>.16# with this program. If not, see <http://www.gnu.org/licenses/>.
18import os17import os
19from win32com.shell import shell, shellcon18import hashlib
20import winerror19import shutil
21import _winreg20from metadata import read
22import win32api
23import win32con
24import win32com.server.register
25from u1sync import metadata
26from u1sync.constants import METADATA_DIR_NAME21from u1sync.constants import METADATA_DIR_NAME
22
23def calculate_hash(path):
24 if not path.startswith("\\\\?\\"):
25 path = "\\\\?\\" + path
26 sum = hashlib.sha1()
2727
28UBUNTU_ONE_ICON_REG_PATH = r"Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\UbuntuOneIconOverlay"28 class HashStream(object):
29def get_icon_root_location():29 """Stream that computes hashes."""
30 # First open the registry hive30 def write(self, bytes):
31 hive = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)31 """Accumulate bytes."""
32 key = _winreg.OpenKey(hive, "Software\Canonical\UbuntuOne")32 sum.update(bytes)
33 for i in range(0, _winreg.QueryInfoKey(key)[1]):33
34 name, value, val_type = _winreg.EnumValue(key, i)34 with open(path, "rb") as stream:
35 # Common AppData will always be present unless the user played with regedit35 shutil.copyfileobj(stream, HashStream())
36 if name == "InstallationPath":36 return "sha1:%s" % sum.hexdigest()
37 return os.path.join(value, "icons")37
38 38class FileTracker(object):
39def file_is_in_ubuntuone_root(path):39 """Track the operations on files"""
40 absolute_path = os.path.abspath(path)40
41 while True:41 def __init__(self):
42 metadir = os.path.join(absolute_path, METADATA_DIR_NAME)42 self.root_cache = {}
43 if os.path.exists(metadir):43 self.added_cache = {}
44 return True44 self.modified_cache = {}
45 if absolute_path == "C:\\":45
46 return False46 def file_is_in_ubuntuone_root(self, path):
47 absolute_path = os.path.split(absolute_path)[0]47 if not path.startswith("\\\\?\\"):
48 return True48 path = "\\\\?\\" + path
49 49 if path in self.root_cache:
50def get_metadata_dir(path):50 return self.root_cache[path]
51 # we need to find the metadata51
52 absolute_path = os.path.abspath(path)52 while True:
53 while True:53 metadir = os.path.join(path, METADATA_DIR_NAME)
54 metadir = os.path.join(absolute_path, METADATA_DIR_NAME)54 if os.path.exists(metadir):
55 if os.path.exists(metadir):55 self.root_cache[path] = True
56 return metadir56 return self.root_cache[path]
57 if absolute_path == "C:\\":57 if path == "\\\\?\\C:\\":
58 None58 self.root_cache[path] = False
59 absolute_path = os.path.split(absolute_path)[0]59 return self.root_cache[path]
60 return None60 path = os.path.split(path)[0]
61
62def file_was_modified(path):
63 absolute_path = os.path.abspath(path)
64 metadir = get_metadata_dir(path)
65 modified_files = open(os.path.join(metadir, "modified.data"), "rb")
66 modified_data = modified_files.read()
67 index = modified_data.find(absolute_path)
68 return index >= 0
69 61
70class UbuntuOneIconOverlay:62 def get_metadata_dir(self, path):
71 _reg_clsid_ = '{a9a25b70-d766-11df-937b-0800200c9a66}'63 # we need to find the metadata
72 _reg_progid_ = 'TJG.PythonPackagesOverlayHandler'64 if not path.startswith("\\\\?\\"):
73 _reg_desc_ = 'Icon Overlay Handler to indicate Python packages'65 path = "\\\\?\\" + path
74 _public_methods_ = ['GetOverlayInfo', 'GetPriority', 'IsMemberOf']66 while True:
75 _com_interfaces_ = [shell.IID_IShellIconOverlayIdentifier]67 metadir = os.path.join(path, METADATA_DIR_NAME)
76 68 if os.path.exists(metadir):
77 def GetOverlayInfo(self):69 return metadir
78 icon_path = os.path.join(get_icon_root_location(), "ubuntu-logo-32x32.ico")70 if path == "\\\\?\\C:\\":
79 return (icon_path, 0, shellcon.ISIOI_ICONFILE)71 None
80 72 path = os.path.split(path)[0]
81 def GetPriority(self):73 return None
82 return 5074
83 75 def file_was_modified(self, path):
84 def IsMemberOf(self, fname, attributes):76 if not path.startswith("\\\\?\\"):
85 if os.path.exists (os.path.join (fname, METADATA_DIR_NAME)):77 path = "\\\\?\\" + path
86 return winerror.S_OK78 modified_time = os.path.getmtime(path)
87 return winerror.E_FAIL79 if path in self.modified_cache and\
8880 self.modified_cache[path][1] == modified_time:
89def icon_overlays_are_registered():81 return self.modified_cache[path][0]
90 # First open the registry hive82 if self.file_is_in_ubuntuone_root(path):
91 hive = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)83 if not os.path.isdir(path):
92 # Then open the registry key where we stored the overlays84 metadata_dir = self.get_metadata_dir(path)
93 try:85 data = read(metadata_dir).local_tree
94 key = _winreg.OpenKey(hive, UBUNTU_ONE_ICON_REG_PATH)86 metadata_dir = os.path.split(metadata_dir)[0]
87 path_copy = path.replace(metadata_dir + "\\","")
88 while True:
89 sep_position = path_copy.find("\\")
90 if sep_position > 0:
91 partial_path = path_copy[:sep_position]
92 else:
93 partial_path = path_copy
94 if partial_path == path_copy:
95 self.modified_cache[path] = [
96 data == calculate_hash(path),
97 modified_time]
98 return data == calculate_hash(path)
99 if partial_path in data.children:
100 path_copy = path_copy[path_copy.find("\\") + 1:]
101 data = data.children[partial_path]
102 else:
103 self.modified_cache[path] = [
104 True,
105 modified_time]
106 return True
107 else:
108 is_modified = False
109 for child in os.listdir(path):
110 is_modified = is_modified or\
111 self.file_was_modified(
112 os.path.join(path, child))
113 return is_modified
95 return True114 return True
96 except:115
116 def file_was_added(self, path):
117 if not path.startswith("\\\\?\\"):
118 path = "\\\\?\\" + path
119 if self.file_is_in_ubuntuone_root(path):
120 metadata_dir = self.get_metadata_dir(path)
121 data = read(metadata_dir).local_tree
122 metadata_dir = os.path.split(metadata_dir)[0]
123 path = path.replace(metadata_dir + "\\","")
124 while True:
125 sep_position = path.find("\\")
126 if sep_position > 0:
127 partial_path = path[:sep_position]
128 else:
129 partial_path = path
130 if partial_path == path and\
131 partial_path in data.children:
132 return True
133 if partial_path in data.children:
134 path = path[path.find("\\") + 1:]
135 data = data.children[partial_path]
136 else:
137 return False
97 return False138 return False
98
99def register_icon_overlays():
100 win32com.server.register.UseCommandLine (UbuntuOneIconOverlay)
101 key = win32api.RegCreateKey (win32con.HKEY_LOCAL_MACHINE, UBUNTU_ONE_ICON_REG_PATH)
102 win32api.RegSetValue (key, None, win32con.REG_SZ, UbuntuOneIconOverlay._reg_clsid_)
103
104\ No newline at end of file139\ No newline at end of file
140
105\ No newline at end of file141\ No newline at end of file
106142
=== modified file 'src/sync/u1sync/main.py'
--- src/u1sync/main.py 2010-11-02 22:22:52 +0000
+++ src/sync/u1sync/main.py 2010-11-02 22:22:53 +0000
@@ -47,6 +47,7 @@
47from u1sync import metadata47from u1sync import metadata
48from u1sync.constants import METADATA_DIR_NAME48from u1sync.constants import METADATA_DIR_NAME
49from u1sync.ubuntuone_optparse import UbuntuOneOptionsParser49from u1sync.ubuntuone_optparse import UbuntuOneOptionsParser
50from u1sync.icons import file_was_added, file_was_modified
5051
51# pylint: disable-msg=W021252# pylint: disable-msg=W0212
52NODE_TYPE_ENUM = dircontent_pb2._NODETYPE53NODE_TYPE_ENUM = dircontent_pb2._NODETYPE
@@ -209,7 +210,6 @@
209 status = " [not accepted]"210 status = " [not accepted]"
210 else:211 else:
211 status = ""212 status = ""
212 print "%s %s (from %s) [%s]%s" % (id, name, user, access, status)
213213
214def do_diff(client, share_spec, directory, quiet, subtree_path,214def do_diff(client, share_spec, directory, quiet, subtree_path,
215 ignore_symlinks=True):215 ignore_symlinks=True):
@@ -323,6 +323,12 @@
323 finally:323 finally:
324 reactor.callWhenRunning(reactor.stop)324 reactor.callWhenRunning(reactor.stop)
325325
326 # test if the user wants to know f a path was added or modified
327 if options_parser.options.was_added:
328 return file_was_added(options_parser.options.was_added)
329 if options_parser.options.was_modified:
330 return file_was_modified(options_parser.options.was_modified)
331
326 queue = Queue()332 queue = Queue()
327 reactor.callInThread(capture_exception, queue, run_client)333 reactor.callInThread(capture_exception, queue, run_client)
328 reactor.run(installSignalHandlers=False)334 reactor.run(installSignalHandlers=False)
@@ -333,7 +339,9 @@
333def main(argv):339def main(argv):
334 """Top-level main function."""340 """Top-level main function."""
335 try:341 try:
336 do_main(argv, UbuntuOneOptionsParser())342 result = do_main(argv, UbuntuOneOptionsParser())
343 if result is not None:
344 print result
337 except AuthenticationError, e:345 except AuthenticationError, e:
338 send_error("Authentication failed: %s" % e, e)346 send_error("Authentication failed: %s" % e, e)
339 print "Authentication failed: %s" % e347 print "Authentication failed: %s" % e
340348
=== modified file 'src/sync/u1sync/metadata.py'
--- src/u1sync/metadata.py 2010-10-19 10:35:43 +0000
+++ src/sync/u1sync/metadata.py 2010-11-02 22:22:53 +0000
@@ -22,7 +22,7 @@
22from __future__ import with_statement22from __future__ import with_statement
2323
24import os24import os
25import cPickle as pickle25import pickle
26from errno import ENOENT26from errno import ENOENT
27from contextlib import contextmanager27from contextlib import contextmanager
28from ubuntuone.storageprotocol.dircontent_pb2 import DIRECTORY28from ubuntuone.storageprotocol.dircontent_pb2 import DIRECTORY
@@ -43,7 +43,6 @@
4343
44def read(metadata_dir):44def read(metadata_dir):
45 """Read metadata for a mirror rooted at directory."""45 """Read metadata for a mirror rooted at directory."""
46 send_notification("Reading", "Reading metadata.", "info")
47 index_file = os.path.join(metadata_dir, "local-index")46 index_file = os.path.join(metadata_dir, "local-index")
48 share_uuid_file = os.path.join(metadata_dir, "share-uuid")47 share_uuid_file = os.path.join(metadata_dir, "share-uuid")
49 root_uuid_file = os.path.join(metadata_dir, "root-uuid")48 root_uuid_file = os.path.join(metadata_dir, "root-uuid")
5049
=== modified file 'src/sync/u1sync/scan.py'
--- src/u1sync/scan.py 2010-10-19 10:35:43 +0000
+++ src/sync/u1sync/scan.py 2010-11-02 22:22:53 +0000
@@ -36,13 +36,10 @@
3636
37def scan_directory(path, display_path="", quiet=False):37def scan_directory(path, display_path="", quiet=False):
38 """Scans a local directory and builds an in-memory tree from it."""38 """Scans a local directory and builds an in-memory tree from it."""
39 if display_path != "" and not quiet:
40 print display_path
4139
42 link_target = None40 link_target = None
43 child_names = None41 child_names = None
44 try:42 try:
45 print "Path is " + str(path)
46 if sys.platform == "win32":43 if sys.platform == "win32":
47 if path.endswith(".lnk") or path.endswith(".url"):44 if path.endswith(".lnk") or path.endswith(".url"):
48 import win32com.client 45 import win32com.client
@@ -50,7 +47,6 @@
50 pythoncom.CoInitialize()47 pythoncom.CoInitialize()
51 shell = win32com.client.Dispatch("WScript.Shell")48 shell = win32com.client.Dispatch("WScript.Shell")
52 shortcut = shell.CreateShortCut(path)49 shortcut = shell.CreateShortCut(path)
53 print(shortcut.Targetpath)
54 link_target = shortcut.Targetpath50 link_target = shortcut.Targetpath
55 else:51 else:
56 link_target = None52 link_target = None
5753
=== modified file 'src/sync/u1sync/ubuntuone_optparse.py'
--- src/u1sync/ubuntuone_optparse.py 2010-09-27 17:33:52 +0000
+++ src/sync/u1sync/ubuntuone_optparse.py 2010-11-02 22:22:53 +0000
@@ -102,6 +102,12 @@
102 self.add_option("--subtree", dest="subtree", metavar="PATH",102 self.add_option("--subtree", dest="subtree", metavar="PATH",
103 default=None,103 default=None,
104 help="Mirror a subset of the share or volume")104 help="Mirror a subset of the share or volume")
105 self.add_option("--was-added", dest="was_added", metavar="PATH",
106 default=None,
107 help="Returns if the metadata know about the path.")
108 self.add_option("--was-modified", dest="was_modified", metavar="PATH",
109 default=None,
110 help="Returns if the file has been locally modified")
105 111
106 def get_options(self, arguments):112 def get_options(self, arguments):
107 """Parses the arguments to from the command line."""113 """Parses the arguments to from the command line."""
@@ -128,7 +134,6 @@
128 134
129 def _get_directory(self):135 def _get_directory(self):
130 """Gets the directory to be used according to the paramenters."""136 """Gets the directory to be used according to the paramenters."""
131 print self._args
132 if self.options.mode == "sync" or self.options.mode == "init" or \137 if self.options.mode == "sync" or self.options.mode == "init" or \
133 self.options.mode == "diff":138 self.options.mode == "diff":
134 if len(self._args) > 2:139 if len(self._args) > 2:
@@ -183,6 +188,8 @@
183 188
184 def _validate_oauth(self):189 def _validate_oauth(self):
185 """Validates that the oatuh was passed."""190 """Validates that the oatuh was passed."""
191 if self.options.was_modified or self.options.was_added:
192 return
186 if self.options.oauth is None:193 if self.options.oauth is None:
187 self.error("--oauth is currently compulsery.")194 self.error("--oauth is currently compulsery.")
188 else:195 else:

Subscribers

People subscribed via source and target branches

to all changes: