22using System . Collections . Generic ;
33using System . IO ;
44using System . Linq ;
5+ using System . Runtime . InteropServices ;
6+ using System . Text . RegularExpressions ;
57using System . Threading . Tasks ;
68using Cake . Common ;
79using Cake . Common . Diagnostics ;
@@ -37,6 +39,7 @@ public class BuildContext : FrostingContext
3739 public const string DeployFramework = "net7.0-windows" ;
3840 public string PublishDir = ".dist" ;
3941 public string PublishVersion = "" ;
42+ public string BuildFor = "win-x64" ; // win-x64 win-x86
4043
4144 public BuildContext ( ICakeContext context )
4245 : base ( context )
@@ -89,7 +92,7 @@ public class PublishTask : FrostingTask<BuildContext>
8992 public override void Run ( BuildContext context )
9093 {
9194 var project = context . DefaultSln . Value . Projects . First ( p => p . Name . EndsWith ( "ClipboardR" ) ) ;
92- var srcDir = project . Path . GetDirectory ( ) . Combine ( new DirectoryPath ( $ "bin/publish ") ) ;
95+ var srcDir = project . Path . GetDirectory ( ) . Combine ( new DirectoryPath ( "bin/Publish " ) ) ;
9396 var dstDir =
9497 $ "{ srcDir . GetParent ( ) . GetParent ( ) . GetParent ( ) . GetParent ( ) . FullPath } /{ context . PublishDir } ";
9598 context . DotNetPublish (
@@ -103,16 +106,51 @@ public override void Run(BuildContext context)
103106 }
104107 ) ;
105108 context . CreateDirectory ( dstDir ) ;
106- var files = context . GetFiles (
107- @$ "{ srcDir } /**/(*(c|C)lipboard*.(png|json|dll)|*.png|plugin.json|(*simulator).dll)"
108- ) ;
109+
110+ // var builder = context.DefaultSln.Value.Projects.First(p => p.Name.EndsWith("Build"));
111+ // var midDir = builder.Path.GetDirectory().Combine(new DirectoryPath("bin/Publish"));
112+ // if (context.DirectoryExists(midDir))
113+ // context.DeleteDirectory(midDir, new DeleteDirectorySettings { Recursive = true, Force = true });
114+ // context.CreateDirectory(midDir);
115+
116+ // context.CopyDirectory(srcDir, midDir);
117+
118+ var ptn =
119+ @"Clipboar.+\.dll|" +
120+ @".+\.png|" +
121+ @"plugin\.json|H\.InputSimulator\.dll|" +
122+ @"SQLitePCLRaw.+\.dll|Microsoft.+(S|s)qlite\.dll" ;
123+ var files = context . GetFiles ( $ "{ srcDir } /**/*") ;
109124 FilePath ? versionFile = null ;
110125 foreach ( var f in files )
111126 {
112- context . Information ( $ "Adding: { f } ") ;
127+ if ( f == null || f . ToString ( ) . EndsWith ( "e_sqlite3.dll" ) )
128+ {
129+ files . Remove ( f ) ;
130+ continue ;
131+ }
113132 if ( f . ToString ( ) . EndsWith ( "plugin.json" ) )
114133 versionFile = f ;
134+ if ( ! Regex . IsMatch ( f . GetFilename ( ) . ToString ( ) , ptn ) )
135+ {
136+ context . DeleteFile ( f ) ;
137+ files . Remove ( f ) ;
138+ }
139+ else
140+ context . Information ( $ "Added: { f } ") ;
115141 }
142+
143+ var eSqlite3Path = srcDir
144+ . Combine ( $ "runtimes")
145+ . Combine ( $ "{ context . BuildFor } ")
146+ . Combine ( "native" )
147+ . CombineWithFilePath ( new FilePath ( "e_sqlite3.dll" ) ) ;
148+ context . CopyFile (
149+ eSqlite3Path ,
150+ srcDir . CombineWithFilePath ( "e_sqlite3.dll" ) ) ;
151+ files . Add ( srcDir . CombineWithFilePath ( "e_sqlite3.dll" ) ) ;
152+ context . DeleteDirectory ( srcDir . Combine ( "runtimes" ) , new DeleteDirectorySettings ( ) { Recursive = true } ) ;
153+
116154 if ( versionFile != null )
117155 {
118156 VersionInfo ? versionInfoObj = JsonConvert . DeserializeObject < VersionInfo > (
@@ -123,6 +161,7 @@ public override void Run(BuildContext context)
123161 else
124162 Console . WriteLine ( "Get version info from plugin.json failed!" ) ;
125163 }
164+
126165 context . ZipCompress (
127166 rootPath : srcDir ,
128167 outputPath : $ "{ dstDir } /ClipboardR-v{ context . PublishVersion } .zip",
@@ -151,7 +190,32 @@ public override void Run(BuildContext context)
151190[ IsDependentOn ( typeof ( CleanTask ) ) ]
152191[ IsDependentOn ( typeof ( BuildTask ) ) ]
153192[ IsDependentOn ( typeof ( PublishTask ) ) ]
154- public class DefaultTask : FrostingTask { }
193+ public class DefaultTask : FrostingTask
194+ {
195+ }
196+
197+ [ TaskName ( "Deploy" ) ]
198+ public class DeployTask : FrostingTask < BuildContext >
199+ {
200+ public override void Run ( BuildContext context )
201+ {
202+ var builder = context . DefaultSln . Value . Projects . First ( p => p . Name . EndsWith ( "Build" ) ) ;
203+ var distDir = builder . Path . GetDirectory ( ) . GetParent ( ) . Combine ( new DirectoryPath ( context . PublishDir ) ) ;
204+ var files = context . GetFiles ( $ "{ distDir } /ClipboardR*.zip") ;
205+
206+ DateTime t = DateTime . FromFileTime ( 0 ) ;
207+ FilePath mostRecentFile = files . First ( ) ;
208+ foreach ( var f in files )
209+ {
210+ if ( File . GetCreationTime ( f . FullPath ) <= t ) continue ;
211+ t = File . GetCreationTime ( f . FullPath ) ;
212+ mostRecentFile = f ;
213+ }
214+
215+ context . Unzip ( mostRecentFile ,
216+ new DirectoryPath ( @"%APPDATA%/FlowLauncher/Plugins" + mostRecentFile . GetFilenameWithoutExtension ( ) ) ) ;
217+ }
218+ }
155219
156220public class VersionInfo
157221{
@@ -165,4 +229,4 @@ public class VersionInfo
165229 public string Website { get ; set ; }
166230 public string IcoPath { get ; set ; }
167231 public string ExecuteFileName { get ; set ; }
168- }
232+ }
0 commit comments